mirror of
https://gitlab.com/libeigen/eigen.git
synced 2026-04-10 11:34:33 +08:00
Fix bug #314: move remaining math functions from internal to numext namespace
This commit is contained in:
@@ -16,7 +16,7 @@ template<bool IsInteger> struct adjoint_specific;
|
||||
template<> struct adjoint_specific<true> {
|
||||
template<typename Vec, typename Mat, typename Scalar>
|
||||
static void run(const Vec& v1, const Vec& v2, Vec& v3, const Mat& square, Scalar s1, Scalar s2) {
|
||||
VERIFY(test_isApproxWithRef((s1 * v1 + s2 * v2).dot(v3), internal::conj(s1) * v1.dot(v3) + internal::conj(s2) * v2.dot(v3), 0));
|
||||
VERIFY(test_isApproxWithRef((s1 * v1 + s2 * v2).dot(v3), numext::conj(s1) * v1.dot(v3) + numext::conj(s2) * v2.dot(v3), 0));
|
||||
VERIFY(test_isApproxWithRef(v3.dot(s1 * v1 + s2 * v2), s1*v3.dot(v1)+s2*v3.dot(v2), 0));
|
||||
|
||||
// check compatibility of dot and adjoint
|
||||
@@ -30,7 +30,7 @@ template<> struct adjoint_specific<false> {
|
||||
typedef typename NumTraits<Scalar>::Real RealScalar;
|
||||
|
||||
RealScalar ref = NumTraits<Scalar>::IsInteger ? RealScalar(0) : (std::max)((s1 * v1 + s2 * v2).norm(),v3.norm());
|
||||
VERIFY(test_isApproxWithRef((s1 * v1 + s2 * v2).dot(v3), internal::conj(s1) * v1.dot(v3) + internal::conj(s2) * v2.dot(v3), ref));
|
||||
VERIFY(test_isApproxWithRef((s1 * v1 + s2 * v2).dot(v3), numext::conj(s1) * v1.dot(v3) + numext::conj(s2) * v2.dot(v3), ref));
|
||||
VERIFY(test_isApproxWithRef(v3.dot(s1 * v1 + s2 * v2), s1*v3.dot(v1)+s2*v3.dot(v2), ref));
|
||||
|
||||
VERIFY_IS_APPROX(v1.squaredNorm(), v1.norm() * v1.norm());
|
||||
@@ -85,11 +85,11 @@ template<typename MatrixType> void adjoint(const MatrixType& m)
|
||||
|
||||
// check multiplicative behavior
|
||||
VERIFY_IS_APPROX((m1.adjoint() * m2).adjoint(), m2.adjoint() * m1);
|
||||
VERIFY_IS_APPROX((s1 * m1).adjoint(), internal::conj(s1) * m1.adjoint());
|
||||
VERIFY_IS_APPROX((s1 * m1).adjoint(), numext::conj(s1) * m1.adjoint());
|
||||
|
||||
// check basic properties of dot, squaredNorm
|
||||
VERIFY_IS_APPROX(internal::conj(v1.dot(v2)), v2.dot(v1));
|
||||
VERIFY_IS_APPROX(internal::real(v1.dot(v1)), v1.squaredNorm());
|
||||
VERIFY_IS_APPROX(numext::conj(v1.dot(v2)), v2.dot(v1));
|
||||
VERIFY_IS_APPROX(numext::real(v1.dot(v1)), v1.squaredNorm());
|
||||
|
||||
adjoint_specific<NumTraits<Scalar>::IsInteger>::run(v1, v2, v3, square, s1, s2);
|
||||
|
||||
@@ -98,8 +98,8 @@ template<typename MatrixType> void adjoint(const MatrixType& m)
|
||||
// like in testBasicStuff, test operator() to check const-qualification
|
||||
Index r = internal::random<Index>(0, rows-1),
|
||||
c = internal::random<Index>(0, cols-1);
|
||||
VERIFY_IS_APPROX(m1.conjugate()(r,c), internal::conj(m1(r,c)));
|
||||
VERIFY_IS_APPROX(m1.adjoint()(c,r), internal::conj(m1(r,c)));
|
||||
VERIFY_IS_APPROX(m1.conjugate()(r,c), numext::conj(m1(r,c)));
|
||||
VERIFY_IS_APPROX(m1.adjoint()(c,r), numext::conj(m1(r,c)));
|
||||
|
||||
// check inplace transpose
|
||||
m3 = m1;
|
||||
|
||||
@@ -182,12 +182,12 @@ template<typename ArrayType> void array_real(const ArrayType& m)
|
||||
|
||||
// VERIFY_IS_APPROX(m1.abs().sqrt(), std::sqrt(std::abs(m1)));
|
||||
VERIFY_IS_APPROX(m1.abs().sqrt(), sqrt(abs(m1)));
|
||||
VERIFY_IS_APPROX(m1.abs(), sqrt(internal::abs2(m1)));
|
||||
VERIFY_IS_APPROX(m1.abs(), sqrt(numext::abs2(m1)));
|
||||
|
||||
VERIFY_IS_APPROX(internal::abs2(internal::real(m1)) + internal::abs2(internal::imag(m1)), internal::abs2(m1));
|
||||
VERIFY_IS_APPROX(internal::abs2(real(m1)) + internal::abs2(imag(m1)), internal::abs2(m1));
|
||||
VERIFY_IS_APPROX(numext::abs2(numext::real(m1)) + numext::abs2(numext::imag(m1)), numext::abs2(m1));
|
||||
VERIFY_IS_APPROX(numext::abs2(real(m1)) + numext::abs2(imag(m1)), numext::abs2(m1));
|
||||
if(!NumTraits<Scalar>::IsComplex)
|
||||
VERIFY_IS_APPROX(internal::real(m1), m1);
|
||||
VERIFY_IS_APPROX(numext::real(m1), m1);
|
||||
|
||||
VERIFY((m1.abs().log() == log(abs(m1))).all());
|
||||
|
||||
|
||||
@@ -25,10 +25,10 @@ template<typename MatrixType> void array_for_matrix(const MatrixType& m)
|
||||
|
||||
ColVectorType cv1 = ColVectorType::Random(rows);
|
||||
RowVectorType rv1 = RowVectorType::Random(cols);
|
||||
|
||||
|
||||
Scalar s1 = internal::random<Scalar>(),
|
||||
s2 = internal::random<Scalar>();
|
||||
|
||||
|
||||
// scalar addition
|
||||
VERIFY_IS_APPROX(m1.array() + s1, s1 + m1.array());
|
||||
VERIFY_IS_APPROX((m1.array() + s1).matrix(), MatrixType::Constant(rows,cols,s1) + m1);
|
||||
@@ -138,7 +138,7 @@ template<typename VectorType> void lpNorm(const VectorType& v)
|
||||
VERIFY_IS_APPROX(u.template lpNorm<Infinity>(), u.cwiseAbs().maxCoeff());
|
||||
VERIFY_IS_APPROX(u.template lpNorm<1>(), u.cwiseAbs().sum());
|
||||
VERIFY_IS_APPROX(u.template lpNorm<2>(), sqrt(u.array().abs().square().sum()));
|
||||
VERIFY_IS_APPROX(internal::pow(u.template lpNorm<5>(), typename VectorType::RealScalar(5)), u.array().abs().pow(5).sum());
|
||||
VERIFY_IS_APPROX(numext::pow(u.template lpNorm<5>(), typename VectorType::RealScalar(5)), u.array().abs().pow(5).sum());
|
||||
}
|
||||
|
||||
template<typename MatrixType> void cwise_min_max(const MatrixType& m)
|
||||
|
||||
@@ -141,10 +141,10 @@ template<typename MatrixType> void basicStuffComplex(const MatrixType& m)
|
||||
Scalar s1 = internal::random<Scalar>(),
|
||||
s2 = internal::random<Scalar>();
|
||||
|
||||
VERIFY(internal::real(s1)==internal::real_ref(s1));
|
||||
VERIFY(internal::imag(s1)==internal::imag_ref(s1));
|
||||
internal::real_ref(s1) = internal::real(s2);
|
||||
internal::imag_ref(s1) = internal::imag(s2);
|
||||
VERIFY(numext::real(s1)==numext::real_ref(s1));
|
||||
VERIFY(numext::imag(s1)==numext::imag_ref(s1));
|
||||
numext::real_ref(s1) = numext::real(s2);
|
||||
numext::imag_ref(s1) = numext::imag(s2);
|
||||
VERIFY(internal::isApprox(s1, s2, NumTraits<RealScalar>::epsilon()));
|
||||
// extended precision in Intel FPUs means that s1 == s2 in the line above is not guaranteed.
|
||||
|
||||
|
||||
@@ -96,11 +96,11 @@ template<typename MatrixType> void block(const MatrixType& m)
|
||||
}
|
||||
|
||||
// stress some basic stuffs with block matrices
|
||||
VERIFY(internal::real(ones.col(c1).sum()) == RealScalar(rows));
|
||||
VERIFY(internal::real(ones.row(r1).sum()) == RealScalar(cols));
|
||||
VERIFY(numext::real(ones.col(c1).sum()) == RealScalar(rows));
|
||||
VERIFY(numext::real(ones.row(r1).sum()) == RealScalar(cols));
|
||||
|
||||
VERIFY(internal::real(ones.col(c1).dot(ones.col(c2))) == RealScalar(rows));
|
||||
VERIFY(internal::real(ones.row(r1).dot(ones.row(r2))) == RealScalar(cols));
|
||||
VERIFY(numext::real(ones.col(c1).dot(ones.col(c2))) == RealScalar(rows));
|
||||
VERIFY(numext::real(ones.row(r1).dot(ones.row(r2))) == RealScalar(cols));
|
||||
|
||||
// now test some block-inside-of-block.
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ template<typename MatrixType> void determinant(const MatrixType& m)
|
||||
m2.col(i).swap(m2.col(j));
|
||||
VERIFY_IS_APPROX(m2.determinant(), -m1.determinant());
|
||||
VERIFY_IS_APPROX(m2.determinant(), m2.transpose().determinant());
|
||||
VERIFY_IS_APPROX(internal::conj(m2.determinant()), m2.adjoint().determinant());
|
||||
VERIFY_IS_APPROX(numext::conj(m2.determinant()), m2.adjoint().determinant());
|
||||
m2 = m1;
|
||||
m2.row(i) += x*m2.row(j);
|
||||
VERIFY_IS_APPROX(m2.determinant(), m1.determinant());
|
||||
|
||||
@@ -44,8 +44,8 @@ template<typename MatrixType> void eigen2support(const MatrixType& m)
|
||||
VERIFY_IS_EQUAL((m1.col(0).template end<1>()), (m1.col(0).segment(rows-1,1)));
|
||||
|
||||
using std::cos;
|
||||
using internal::real;
|
||||
using internal::abs2;
|
||||
using numext::real;
|
||||
using numext::abs2;
|
||||
VERIFY_IS_EQUAL(ei_cos(s1), cos(s1));
|
||||
VERIFY_IS_EQUAL(ei_real(s1), real(s1));
|
||||
VERIFY_IS_EQUAL(ei_abs2(s1), abs2(s1));
|
||||
|
||||
@@ -60,8 +60,8 @@ template<typename MatrixType> void householder(const MatrixType& m)
|
||||
m1.applyHouseholderOnTheLeft(essential,beta,tmp);
|
||||
VERIFY_IS_APPROX(m1.norm(), m2.norm());
|
||||
if(rows>=2) VERIFY_IS_MUCH_SMALLER_THAN(m1.block(1,0,rows-1,cols).norm(), m1.norm());
|
||||
VERIFY_IS_MUCH_SMALLER_THAN(internal::imag(m1(0,0)), internal::real(m1(0,0)));
|
||||
VERIFY_IS_APPROX(internal::real(m1(0,0)), alpha);
|
||||
VERIFY_IS_MUCH_SMALLER_THAN(numext::imag(m1(0,0)), numext::real(m1(0,0)));
|
||||
VERIFY_IS_APPROX(numext::real(m1(0,0)), alpha);
|
||||
|
||||
v1 = VectorType::Random(rows);
|
||||
if(even) v1.tail(rows-1).setZero();
|
||||
@@ -72,8 +72,8 @@ template<typename MatrixType> void householder(const MatrixType& m)
|
||||
m3.applyHouseholderOnTheRight(essential,beta,tmp);
|
||||
VERIFY_IS_APPROX(m3.norm(), m4.norm());
|
||||
if(rows>=2) VERIFY_IS_MUCH_SMALLER_THAN(m3.block(0,1,rows,rows-1).norm(), m3.norm());
|
||||
VERIFY_IS_MUCH_SMALLER_THAN(internal::imag(m3(0,0)), internal::real(m3(0,0)));
|
||||
VERIFY_IS_APPROX(internal::real(m3(0,0)), alpha);
|
||||
VERIFY_IS_MUCH_SMALLER_THAN(numext::imag(m3(0,0)), numext::real(m3(0,0)));
|
||||
VERIFY_IS_APPROX(numext::real(m3(0,0)), alpha);
|
||||
|
||||
// test householder sequence on the left with a shift
|
||||
|
||||
|
||||
@@ -40,8 +40,8 @@ void jacobi(const MatrixType& m = MatrixType())
|
||||
|
||||
MatrixType b = a;
|
||||
b.applyOnTheLeft(p, q, rot);
|
||||
VERIFY_IS_APPROX(b.row(p), c * a.row(p) + internal::conj(s) * a.row(q));
|
||||
VERIFY_IS_APPROX(b.row(q), -s * a.row(p) + internal::conj(c) * a.row(q));
|
||||
VERIFY_IS_APPROX(b.row(p), c * a.row(p) + numext::conj(s) * a.row(q));
|
||||
VERIFY_IS_APPROX(b.row(q), -s * a.row(p) + numext::conj(c) * a.row(q));
|
||||
}
|
||||
|
||||
{
|
||||
@@ -54,7 +54,7 @@ void jacobi(const MatrixType& m = MatrixType())
|
||||
MatrixType b = a;
|
||||
b.applyOnTheRight(p, q, rot);
|
||||
VERIFY_IS_APPROX(b.col(p), c * a.col(p) - s * a.col(q));
|
||||
VERIFY_IS_APPROX(b.col(q), internal::conj(s) * a.col(p) + internal::conj(c) * a.col(q));
|
||||
VERIFY_IS_APPROX(b.col(q), numext::conj(s) * a.col(p) + numext::conj(c) * a.col(q));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -170,7 +170,7 @@ namespace Eigen
|
||||
#define EIGEN_INTERNAL_DEBUGGING
|
||||
#include <Eigen/QR> // required for createRandomPIMatrixOfRank
|
||||
|
||||
static void verify_impl(bool condition, const char *testname, const char *file, int line, const char *condition_as_string)
|
||||
static inline void verify_impl(bool condition, const char *testname, const char *file, int line, const char *condition_as_string)
|
||||
{
|
||||
if (!condition)
|
||||
{
|
||||
|
||||
@@ -156,7 +156,7 @@ template<typename Scalar> void packetmath()
|
||||
CHECK_CWISE2(REF_DIV, internal::pdiv);
|
||||
#endif
|
||||
CHECK_CWISE1(internal::negate, internal::pnegate);
|
||||
CHECK_CWISE1(internal::conj, internal::pconj);
|
||||
CHECK_CWISE1(numext::conj, internal::pconj);
|
||||
|
||||
for(int offset=0;offset<3;++offset)
|
||||
{
|
||||
|
||||
@@ -42,7 +42,7 @@ template<typename MatrixType> void product_extra(const MatrixType& m)
|
||||
VERIFY_IS_APPROX(m3.noalias() = m1.adjoint() * square.adjoint(), m1.adjoint().eval() * square.adjoint().eval());
|
||||
VERIFY_IS_APPROX(m3.noalias() = m1.adjoint() * m2, m1.adjoint().eval() * m2);
|
||||
VERIFY_IS_APPROX(m3.noalias() = (s1 * m1.adjoint()) * m2, (s1 * m1.adjoint()).eval() * m2);
|
||||
VERIFY_IS_APPROX(m3.noalias() = ((s1 * m1).adjoint()) * m2, (internal::conj(s1) * m1.adjoint()).eval() * m2);
|
||||
VERIFY_IS_APPROX(m3.noalias() = ((s1 * m1).adjoint()) * m2, (numext::conj(s1) * m1.adjoint()).eval() * m2);
|
||||
VERIFY_IS_APPROX(m3.noalias() = (- m1.adjoint() * s1) * (s3 * m2), (- m1.adjoint() * s1).eval() * (s3 * m2).eval());
|
||||
VERIFY_IS_APPROX(m3.noalias() = (s2 * m1.adjoint() * s1) * m2, (s2 * m1.adjoint() * s1).eval() * m2);
|
||||
VERIFY_IS_APPROX(m3.noalias() = (-m1*s2) * s1*m2.adjoint(), (-m1*s2).eval() * (s1*m2.adjoint()).eval());
|
||||
|
||||
@@ -44,11 +44,11 @@ template<typename MatrixType> void product_selfadjoint(const MatrixType& m)
|
||||
|
||||
m2 = m1.template triangularView<Upper>();
|
||||
m2.template selfadjointView<Upper>().rankUpdate(-v1,s2*v2,s3);
|
||||
VERIFY_IS_APPROX(m2, (m1 + (s3*(-v1)*(s2*v2).adjoint()+internal::conj(s3)*(s2*v2)*(-v1).adjoint())).template triangularView<Upper>().toDenseMatrix());
|
||||
VERIFY_IS_APPROX(m2, (m1 + (s3*(-v1)*(s2*v2).adjoint()+numext::conj(s3)*(s2*v2)*(-v1).adjoint())).template triangularView<Upper>().toDenseMatrix());
|
||||
|
||||
m2 = m1.template triangularView<Upper>();
|
||||
m2.template selfadjointView<Upper>().rankUpdate(-s2*r1.adjoint(),r2.adjoint()*s3,s1);
|
||||
VERIFY_IS_APPROX(m2, (m1 + s1*(-s2*r1.adjoint())*(r2.adjoint()*s3).adjoint() + internal::conj(s1)*(r2.adjoint()*s3) * (-s2*r1.adjoint()).adjoint()).template triangularView<Upper>().toDenseMatrix());
|
||||
VERIFY_IS_APPROX(m2, (m1 + s1*(-s2*r1.adjoint())*(r2.adjoint()*s3).adjoint() + numext::conj(s1)*(r2.adjoint()*s3) * (-s2*r1.adjoint()).adjoint()).template triangularView<Upper>().toDenseMatrix());
|
||||
|
||||
if (rows>1)
|
||||
{
|
||||
|
||||
@@ -54,7 +54,7 @@ void trmm(int rows=internal::random<int>(1,EIGEN_TEST_MAX_SIZE),
|
||||
ge_sx_save = ge_sx;
|
||||
VERIFY_IS_APPROX( ge_sx_save - (ge_right.adjoint() * (-s1 * triTr).conjugate()).eval(), ge_sx.noalias() -= (ge_right.adjoint() * (-s1 * mat).adjoint().template triangularView<Mode>()).eval());
|
||||
|
||||
VERIFY_IS_APPROX( ge_xs = (s1*mat).adjoint().template triangularView<Mode>() * ge_left.adjoint(), internal::conj(s1) * triTr.conjugate() * ge_left.adjoint());
|
||||
VERIFY_IS_APPROX( ge_xs = (s1*mat).adjoint().template triangularView<Mode>() * ge_left.adjoint(), numext::conj(s1) * triTr.conjugate() * ge_left.adjoint());
|
||||
|
||||
// TODO check with sub-matrix expressions ?
|
||||
}
|
||||
|
||||
@@ -26,22 +26,22 @@ template<typename MatrixType> void matrixRedux(const MatrixType& m)
|
||||
|
||||
VERIFY_IS_MUCH_SMALLER_THAN(MatrixType::Zero(rows, cols).sum(), Scalar(1));
|
||||
VERIFY_IS_APPROX(MatrixType::Ones(rows, cols).sum(), Scalar(float(rows*cols))); // the float() here to shut up excessive MSVC warning about int->complex conversion being lossy
|
||||
Scalar s(0), p(1), minc(internal::real(m1.coeff(0))), maxc(internal::real(m1.coeff(0)));
|
||||
Scalar s(0), p(1), minc(numext::real(m1.coeff(0))), maxc(numext::real(m1.coeff(0)));
|
||||
for(int j = 0; j < cols; j++)
|
||||
for(int i = 0; i < rows; i++)
|
||||
{
|
||||
s += m1(i,j);
|
||||
p *= m1_for_prod(i,j);
|
||||
minc = (std::min)(internal::real(minc), internal::real(m1(i,j)));
|
||||
maxc = (std::max)(internal::real(maxc), internal::real(m1(i,j)));
|
||||
minc = (std::min)(numext::real(minc), numext::real(m1(i,j)));
|
||||
maxc = (std::max)(numext::real(maxc), numext::real(m1(i,j)));
|
||||
}
|
||||
const Scalar mean = s/Scalar(RealScalar(rows*cols));
|
||||
|
||||
VERIFY_IS_APPROX(m1.sum(), s);
|
||||
VERIFY_IS_APPROX(m1.mean(), mean);
|
||||
VERIFY_IS_APPROX(m1_for_prod.prod(), p);
|
||||
VERIFY_IS_APPROX(m1.real().minCoeff(), internal::real(minc));
|
||||
VERIFY_IS_APPROX(m1.real().maxCoeff(), internal::real(maxc));
|
||||
VERIFY_IS_APPROX(m1.real().minCoeff(), numext::real(minc));
|
||||
VERIFY_IS_APPROX(m1.real().maxCoeff(), numext::real(maxc));
|
||||
|
||||
// test slice vectorization assuming assign is ok
|
||||
Index r0 = internal::random<Index>(0,rows-1);
|
||||
@@ -73,13 +73,13 @@ template<typename VectorType> void vectorRedux(const VectorType& w)
|
||||
for(int i = 1; i < size; i++)
|
||||
{
|
||||
Scalar s(0), p(1);
|
||||
RealScalar minc(internal::real(v.coeff(0))), maxc(internal::real(v.coeff(0)));
|
||||
RealScalar minc(numext::real(v.coeff(0))), maxc(numext::real(v.coeff(0)));
|
||||
for(int j = 0; j < i; j++)
|
||||
{
|
||||
s += v[j];
|
||||
p *= v_for_prod[j];
|
||||
minc = (std::min)(minc, internal::real(v[j]));
|
||||
maxc = (std::max)(maxc, internal::real(v[j]));
|
||||
minc = (std::min)(minc, numext::real(v[j]));
|
||||
maxc = (std::max)(maxc, numext::real(v[j]));
|
||||
}
|
||||
VERIFY_IS_MUCH_SMALLER_THAN(abs(s - v.head(i).sum()), Scalar(1));
|
||||
VERIFY_IS_APPROX(p, v_for_prod.head(i).prod());
|
||||
@@ -90,13 +90,13 @@ template<typename VectorType> void vectorRedux(const VectorType& w)
|
||||
for(int i = 0; i < size-1; i++)
|
||||
{
|
||||
Scalar s(0), p(1);
|
||||
RealScalar minc(internal::real(v.coeff(i))), maxc(internal::real(v.coeff(i)));
|
||||
RealScalar minc(numext::real(v.coeff(i))), maxc(numext::real(v.coeff(i)));
|
||||
for(int j = i; j < size; j++)
|
||||
{
|
||||
s += v[j];
|
||||
p *= v_for_prod[j];
|
||||
minc = (std::min)(minc, internal::real(v[j]));
|
||||
maxc = (std::max)(maxc, internal::real(v[j]));
|
||||
minc = (std::min)(minc, numext::real(v[j]));
|
||||
maxc = (std::max)(maxc, numext::real(v[j]));
|
||||
}
|
||||
VERIFY_IS_MUCH_SMALLER_THAN(abs(s - v.tail(size-i).sum()), Scalar(1));
|
||||
VERIFY_IS_APPROX(p, v_for_prod.tail(size-i).prod());
|
||||
@@ -107,13 +107,13 @@ template<typename VectorType> void vectorRedux(const VectorType& w)
|
||||
for(int i = 0; i < size/2; i++)
|
||||
{
|
||||
Scalar s(0), p(1);
|
||||
RealScalar minc(internal::real(v.coeff(i))), maxc(internal::real(v.coeff(i)));
|
||||
RealScalar minc(numext::real(v.coeff(i))), maxc(numext::real(v.coeff(i)));
|
||||
for(int j = i; j < size-i; j++)
|
||||
{
|
||||
s += v[j];
|
||||
p *= v_for_prod[j];
|
||||
minc = (std::min)(minc, internal::real(v[j]));
|
||||
maxc = (std::max)(maxc, internal::real(v[j]));
|
||||
minc = (std::min)(minc, numext::real(v[j]));
|
||||
maxc = (std::max)(maxc, numext::real(v[j]));
|
||||
}
|
||||
VERIFY_IS_MUCH_SMALLER_THAN(abs(s - v.segment(i, size-2*i).sum()), Scalar(1));
|
||||
VERIFY_IS_APPROX(p, v_for_prod.segment(i, size-2*i).prod());
|
||||
|
||||
@@ -86,7 +86,7 @@ initSparse(double density,
|
||||
v = Scalar(0);
|
||||
|
||||
if ((flags&ForceRealDiag) && (i==j))
|
||||
v = internal::real(v);
|
||||
v = numext::real(v);
|
||||
|
||||
if (v!=Scalar(0))
|
||||
{
|
||||
@@ -136,7 +136,7 @@ initSparse(double density,
|
||||
v = Scalar(0);
|
||||
|
||||
if ((flags&ForceRealDiag) && (i==j))
|
||||
v = internal::real(v);
|
||||
v = numext::real(v);
|
||||
|
||||
if (v!=Scalar(0))
|
||||
{
|
||||
|
||||
@@ -59,4 +59,4 @@ void test_spqr_support()
|
||||
{
|
||||
CALL_SUBTEST_1(test_spqr_scalar<double>());
|
||||
CALL_SUBTEST_2(test_spqr_scalar<std::complex<double> >());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -65,7 +65,7 @@ template<typename MatrixType> void triangular_square(const MatrixType& m)
|
||||
|
||||
m1 = MatrixType::Random(rows, cols);
|
||||
for (int i=0; i<rows; ++i)
|
||||
while (internal::abs2(m1(i,i))<1e-1) m1(i,i) = internal::random<Scalar>();
|
||||
while (numext::abs2(m1(i,i))<1e-1) m1(i,i) = internal::random<Scalar>();
|
||||
|
||||
Transpose<MatrixType> trm4(m4);
|
||||
// test back and forward subsitution with a vector as the rhs
|
||||
|
||||
@@ -82,7 +82,7 @@ Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> randMatrixSpecialUnitary(int si
|
||||
MatrixType Q = randMatrixUnitary<Scalar>(size);
|
||||
|
||||
// tweak the first column to make the determinant be 1
|
||||
Q.col(0) *= internal::conj(Q.determinant());
|
||||
Q.col(0) *= numext::conj(Q.determinant());
|
||||
|
||||
return Q;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user