Hello community,
here is the log from the commit of package libeigen2-devel for openSUSE:Factory
checked in at Mon Jul 4 09:13:51 CEST 2011.
--------
--- KDE/libeigen2-devel/libeigen2-devel.changes 2011-03-15 16:41:37.000000000 +0100
+++ /mounts/work_src_done/STABLE/libeigen2-devel/libeigen2-devel.changes 2011-06-27 14:30:32.000000000 +0200
@@ -1,0 +2,13 @@
+Mon Jun 27 14:30:20 UTC 2011 - toddrme2178@gmail.com
+
+- update to 2.0.16
+ * Fix bug in 3x3 tridiagonlisation (and consequently in 3x3
+ selfadjoint eigen decomposition).
+ * Fix compilation for new gcc 4.6.
+ * Fix performance regression since 2.0.12: in some matrix-vector
+ product, complex matrix expressions were not pre-evaluated.
+ * Fix documentation of Least-Square.
+ * New feature: support for part<SelfAdjoint>.
+ * Fix bug in SparseLU::setOrderingMethod.
+
+-------------------------------------------------------------------
calling whatdependson for head-i586
Old:
----
eigen-2.0.15.tar.bz2
New:
----
eigen-2.0.16.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ libeigen2-devel.spec ++++++
--- /var/tmp/diff_new_pack.QKmqys/_old 2011-07-04 09:12:55.000000000 +0200
+++ /var/tmp/diff_new_pack.QKmqys/_new 2011-07-04 09:12:55.000000000 +0200
@@ -22,11 +22,12 @@
BuildRequires: c++_compiler cmake doxygen kde4-filesystem pkg-config
License: GPLv2+ ; LGPLv3+
Group: Development/Libraries/C and C++
-Summary: lightweight linear algebra C++ template library
+Summary: Lightweight linear algebra C++ template library
BuildRoot: %{_tmppath}/%{name}-%{version}-build
Url: http://eigen.tuxfamily.org/
-Version: 2.0.15
+Version: 2.0.16
Release: 1
+%define tar_ver 9ca09dbd70ce
Source: eigen-%{version}.tar.bz2
%description
@@ -34,7 +35,7 @@
a.k.a. linear algebra.
%prep
-%setup -q -n eigen-eigen-0938af7840b0
+%setup -q -n eigen-eigen-%{tar_ver}
%build
%cmake_kde4 -d build
++++++ eigen-2.0.15.tar.bz2 -> eigen-2.0.16.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eigen-eigen-0938af7840b0/.hgtags new/eigen-eigen-9ca09dbd70ce/.hgtags
--- old/eigen-eigen-0938af7840b0/.hgtags 2010-07-17 04:25:08.000000000 +0200
+++ new/eigen-eigen-9ca09dbd70ce/.hgtags 2011-05-28 10:16:08.000000000 +0200
@@ -11,3 +11,4 @@
a1b04d0da20bcf28dd390980633e93499eecba24 2.0.12
99d564175944d85ab01324b066c9872e23bf32dd 2.0.13
f30db88dec8b1158e8329971e190adeaa0a37293 2.0.14
+0938af7840b013ea31f4bf31950fb87dc180144d 2.0.15
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eigen-eigen-0938af7840b0/CMakeLists.txt new/eigen-eigen-9ca09dbd70ce/CMakeLists.txt
--- old/eigen-eigen-0938af7840b0/CMakeLists.txt 2010-07-17 04:25:08.000000000 +0200
+++ new/eigen-eigen-9ca09dbd70ce/CMakeLists.txt 2011-05-28 10:16:08.000000000 +0200
@@ -7,7 +7,7 @@
"The directory where we install the header files"
FORCE)
-set(EIGEN_VERSION_NUMBER "2.0.15")
+set(EIGEN_VERSION_NUMBER "2.0.16")
set(EIGEN_VERSION "${EIGEN_VERSION_NUMBER}")
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eigen-eigen-0938af7840b0/Eigen/Core new/eigen-eigen-9ca09dbd70ce/Eigen/Core
--- old/eigen-eigen-0938af7840b0/Eigen/Core 2010-07-17 04:25:08.000000000 +0200
+++ new/eigen-eigen-9ca09dbd70ce/Eigen/Core 2011-05-28 10:16:08.000000000 +0200
@@ -52,6 +52,7 @@
#endif
#endif
+#include <cstddef>
#include <cstdlib>
#include <cmath>
#include <complex>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eigen-eigen-0938af7840b0/Eigen/src/Core/Product.h new/eigen-eigen-9ca09dbd70ce/Eigen/src/Core/Product.h
--- old/eigen-eigen-0938af7840b0/Eigen/src/Core/Product.h 2010-07-17 04:25:08.000000000 +0200
+++ new/eigen-eigen-9ca09dbd70ce/Eigen/src/Core/Product.h 2011-05-28 10:16:08.000000000 +0200
@@ -187,6 +187,17 @@
_LhsNested, _RhsNested, Scalar> ScalarCoeffImpl;
public:
+ typedef typename ei_nested<_LhsNested,_RhsNested::ColsAtCompileTime>::type LhsNestedX;
+ typedef typename ei_nested<_RhsNested,_LhsNested::RowsAtCompileTime>::type RhsNestedX;
+ typedef typename ei_cleantype<LhsNestedX>::type _LhsNestedX;
+ typedef typename ei_cleantype<RhsNestedX>::type _RhsNestedX;
+
+
+ enum {
+ LhsNestedFlags = _LhsNestedX::Flags,
+ RhsNestedFlags = _RhsNestedX::Flags
+ };
+
template
inline Product(const Lhs& lhs, const Rhs& rhs)
@@ -522,11 +533,11 @@
template
+ int LhsOrder = int(ProductType::LhsNestedFlags)&RowMajorBit ? RowMajor : ColMajor,
+ int LhsHasDirectAccess = int(ProductType::LhsNestedFlags)&DirectAccessBit? HasDirectAccess : NoDirectAccess,
+ int RhsCols = ProductType::ColsAtCompileTime,
+ int RhsOrder = int(ProductType::RhsNestedFlags)&RowMajorBit ? RowMajor : ColMajor,
+ int RhsHasDirectAccess = int(ProductType::RhsNestedFlags)&DirectAccessBit? HasDirectAccess : NoDirectAccess>
struct ei_cache_friendly_product_selector
{
template<typename DestDerived>
@@ -543,9 +554,12 @@
template<typename DestDerived>
inline static void run(DestDerived& res, const ProductType& product)
{
- const int size = product.rhs().rows();
+ typename ProductType::LhsNestedX lhs(product.lhs());
+ typename ProductType::RhsNestedX rhs(product.rhs());
+
+ const int size = rhs.rows();
for (int k=0; k >(_res, res.size()) = res;
}
ei_cache_friendly_product_colmajor_times_vector(res.size(),
- &product.lhs().const_cast_derived().coeffRef(0,0), product.lhs().stride(),
- product.rhs(), _res);
+ &lhs.const_cast_derived().coeffRef(0,0), lhs.stride(),
+ rhs, _res);
if (!EvalToRes)
{
@@ -589,9 +606,12 @@
template<typename DestDerived>
inline static void run(DestDerived& res, const ProductType& product)
{
- const int cols = product.lhs().cols();
+ typename ProductType::LhsNestedX lhs(product.lhs());
+ typename ProductType::RhsNestedX rhs(product.rhs());
+
+ const int cols = lhs.cols();
for (int j=0; j >(_res, res.size()) = res;
}
ei_cache_friendly_product_colmajor_times_vector(res.size(),
- &product.rhs().const_cast_derived().coeffRef(0,0), product.rhs().stride(),
- product.lhs().transpose(), _res);
+ &rhs.const_cast_derived().coeffRef(0,0), rhs.stride(),
+ lhs.transpose(), _res);
if (!EvalToRes)
{
@@ -635,25 +658,28 @@
typedef typename ProductType::Scalar Scalar;
typedef typename ei_traits<ProductType>::_RhsNested Rhs;
enum {
- UseRhsDirectly = ((ei_packet_traits<Scalar>::size==1) || (Rhs::Flags&ActualPacketAccessBit))
- && (Rhs::Flags&DirectAccessBit)
- && (!(Rhs::Flags & RowMajorBit)) };
+ UseRhsDirectly = ((ei_packet_traits<Scalar>::size==1) || (ProductType::RhsNestedFlags&ActualPacketAccessBit))
+ && (ProductType::RhsNestedFlags&DirectAccessBit)
+ && (!(ProductType::RhsNestedFlags & RowMajorBit)) };
template<typename DestDerived>
inline static void run(DestDerived& res, const ProductType& product)
{
+ typename ProductType::LhsNestedX lhs(product.lhs());
+ typename ProductType::RhsNestedX rhs(product.rhs());
+
Scalar* EIGEN_RESTRICT _rhs;
if (UseRhsDirectly)
- _rhs = &product.rhs().const_cast_derived().coeffRef(0);
+ _rhs = &rhs.const_cast_derived().coeffRef(0);
else
{
- _rhs = ei_aligned_stack_new(Scalar, product.rhs().size());
- Map >(_rhs, product.rhs().size()) = product.rhs();
+ _rhs = ei_aligned_stack_new(Scalar, rhs.size());
+ Map >(_rhs, rhs.size()) = rhs;
}
- ei_cache_friendly_product_rowmajor_times_vector(&product.lhs().const_cast_derived().coeffRef(0,0), product.lhs().stride(),
- _rhs, product.rhs().size(), res);
+ ei_cache_friendly_product_rowmajor_times_vector(&lhs.const_cast_derived().coeffRef(0,0), lhs.stride(),
+ _rhs, rhs.size(), res);
- if (!UseRhsDirectly) ei_aligned_stack_delete(Scalar, _rhs, product.rhs().size());
+ if (!UseRhsDirectly) ei_aligned_stack_delete(Scalar, _rhs, rhs.size());
}
};
@@ -664,25 +690,28 @@
typedef typename ProductType::Scalar Scalar;
typedef typename ei_traits<ProductType>::_LhsNested Lhs;
enum {
- UseLhsDirectly = ((ei_packet_traits<Scalar>::size==1) || (Lhs::Flags&ActualPacketAccessBit))
- && (Lhs::Flags&DirectAccessBit)
- && (Lhs::Flags & RowMajorBit) };
+ UseLhsDirectly = ((ei_packet_traits<Scalar>::size==1) || (ProductType::LhsNestedFlags&ActualPacketAccessBit))
+ && (ProductType::LhsNestedFlags&DirectAccessBit)
+ && (ProductType::LhsNestedFlags & RowMajorBit) };
template<typename DestDerived>
inline static void run(DestDerived& res, const ProductType& product)
{
+ typename ProductType::LhsNestedX lhs(product.lhs());
+ typename ProductType::RhsNestedX rhs(product.rhs());
+
Scalar* EIGEN_RESTRICT _lhs;
if (UseLhsDirectly)
- _lhs = &product.lhs().const_cast_derived().coeffRef(0);
+ _lhs = &lhs.const_cast_derived().coeffRef(0);
else
{
- _lhs = ei_aligned_stack_new(Scalar, product.lhs().size());
- Map >(_lhs, product.lhs().size()) = product.lhs();
+ _lhs = ei_aligned_stack_new(Scalar, lhs.size());
+ Map >(_lhs, lhs.size()) = lhs;
}
- ei_cache_friendly_product_rowmajor_times_vector(&product.rhs().const_cast_derived().coeffRef(0,0), product.rhs().stride(),
- _lhs, product.lhs().size(), res);
+ ei_cache_friendly_product_rowmajor_times_vector(&rhs.const_cast_derived().coeffRef(0,0), rhs.stride(),
+ _lhs, lhs.size(), res);
- if(!UseLhsDirectly) ei_aligned_stack_delete(Scalar, _lhs, product.lhs().size());
+ if(!UseLhsDirectly) ei_aligned_stack_delete(Scalar, _lhs, lhs.size());
}
};
@@ -735,7 +764,7 @@
{
typedef typename ei_cleantype<Lhs>::type _Lhs;
typedef typename ei_cleantype<Rhs>::type _Rhs;
-
+
typedef typename ei_nested<_Lhs,_Rhs::ColsAtCompileTime>::type LhsNested;
typedef typename ei_nested<_Rhs,_Lhs::RowsAtCompileTime>::type RhsNested;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eigen-eigen-0938af7840b0/Eigen/src/Core/util/Macros.h new/eigen-eigen-9ca09dbd70ce/Eigen/src/Core/util/Macros.h
--- old/eigen-eigen-0938af7840b0/Eigen/src/Core/util/Macros.h 2010-07-17 04:25:08.000000000 +0200
+++ new/eigen-eigen-9ca09dbd70ce/Eigen/src/Core/util/Macros.h 2011-05-28 10:16:08.000000000 +0200
@@ -30,7 +30,7 @@
#define EIGEN_WORLD_VERSION 2
#define EIGEN_MAJOR_VERSION 0
-#define EIGEN_MINOR_VERSION 15
+#define EIGEN_MINOR_VERSION 16
#define EIGEN_VERSION_AT_LEAST(x,y,z) (EIGEN_WORLD_VERSION>x || (EIGEN_WORLD_VERSION>=x && \
(EIGEN_MAJOR_VERSION>y || (EIGEN_MAJOR_VERSION>=y && \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eigen-eigen-0938af7840b0/Eigen/src/Core/util/XprHelper.h new/eigen-eigen-9ca09dbd70ce/Eigen/src/Core/util/XprHelper.h
--- old/eigen-eigen-0938af7840b0/Eigen/src/Core/util/XprHelper.h 2010-07-17 04:25:08.000000000 +0200
+++ new/eigen-eigen-9ca09dbd70ce/Eigen/src/Core/util/XprHelper.h 2011-05-28 10:16:08.000000000 +0200
@@ -120,7 +120,7 @@
* in order to avoid a useless copy
*/
-template class ei_eval;
+template struct ei_eval;
template<typename T> struct ei_eval
{
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eigen-eigen-0938af7840b0/Eigen/src/LeastSquares/LeastSquares.h new/eigen-eigen-9ca09dbd70ce/Eigen/src/LeastSquares/LeastSquares.h
--- old/eigen-eigen-0938af7840b0/Eigen/src/LeastSquares/LeastSquares.h 2010-07-17 04:25:08.000000000 +0200
+++ new/eigen-eigen-9ca09dbd70ce/Eigen/src/LeastSquares/LeastSquares.h 2011-05-28 10:16:08.000000000 +0200
@@ -54,10 +54,13 @@
* constants \f$a,b,c\f$ so that the plane of equation \f$y=ax+bz+c\f$ fits
* best the five above points. To do that, call this function as follows:
* @code
+ // create a vector of pointers to the points
+ std::vector<Vector3d> points_ptrs(5);
+ for(int k=0; k<5; ++k) points_ptrs[k] = &points[k];
Vector3d coeffs; // will store the coefficients a, b, c
linearRegression(
5,
- &points,
+ &(points_ptrs[0]),
&coeffs,
1 // the coord to express as a function of
// the other ones. 0 means x, 1 means y, 2 means z.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eigen-eigen-0938af7840b0/Eigen/src/QR/Tridiagonalization.h new/eigen-eigen-9ca09dbd70ce/Eigen/src/QR/Tridiagonalization.h
--- old/eigen-eigen-0938af7840b0/Eigen/src/QR/Tridiagonalization.h 2010-07-17 04:25:08.000000000 +0200
+++ new/eigen-eigen-9ca09dbd70ce/Eigen/src/QR/Tridiagonalization.h 2011-05-28 10:16:08.000000000 +0200
@@ -391,7 +391,7 @@
{
diag[0] = ei_real(mat(0,0));
RealScalar v1norm2 = ei_abs2(mat(0,2));
- if (ei_isMuchSmallerThan(v1norm2, RealScalar(1)))
+ if (v1norm2==RealScalar(0))
{
diag[1] = ei_real(mat(1,1));
diag[2] = ei_real(mat(2,2));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eigen-eigen-0938af7840b0/Eigen/src/Sparse/SparseLU.h new/eigen-eigen-9ca09dbd70ce/Eigen/src/Sparse/SparseLU.h
--- old/eigen-eigen-0938af7840b0/Eigen/src/Sparse/SparseLU.h 2010-07-17 04:25:08.000000000 +0200
+++ new/eigen-eigen-9ca09dbd70ce/Eigen/src/Sparse/SparseLU.h 2011-05-28 10:16:08.000000000 +0200
@@ -96,8 +96,8 @@
void setOrderingMethod(int m)
{
- ei_assert(m&~OrderingMask == 0 && m!=0 && "invalid ordering method");
- m_flags = m_flags&~OrderingMask | m&OrderingMask;
+ ei_assert((m&~OrderingMask) == 0 && m!=0 && "invalid ordering method");
+ m_flags = (m_flags&~OrderingMask) | (m&OrderingMask);
}
int orderingMethod() const
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eigen-eigen-0938af7840b0/test/triangular.cpp new/eigen-eigen-9ca09dbd70ce/test/triangular.cpp
--- old/eigen-eigen-0938af7840b0/test/triangular.cpp 2010-07-17 04:25:08.000000000 +0200
+++ new/eigen-eigen-9ca09dbd70ce/test/triangular.cpp 2011-05-28 10:16:08.000000000 +0200
@@ -121,11 +121,40 @@
m3.setZero();
m3.template partEigen::UpperTriangular().setOnes();
VERIFY_IS_APPROX(m2,m3);
+}
+void selfadjoint()
+{
+ Matrix2i m;
+ m << 1, 2,
+ 3, 4;
+ VERIFY(m.part<SelfAdjoint>() == m);
+
+ Matrix2i m1 = Matrix2i::Zero();
+ m1.part<SelfAdjoint>() = m;
+ Matrix2i ref1;
+ ref1 << 1, 2,
+ 2, 4;
+ VERIFY(m1 == ref1);
+
+ Matrix2i m2 = Matrix2i::Zero();
+ m2.part<SelfAdjoint>() = m.part<UpperTriangular>();
+ Matrix2i ref2;
+ ref2 << 1, 2,
+ 2, 4;
+ VERIFY(m2 == ref2);
+
+ Matrix2i m3 = Matrix2i::Zero();
+ m3.part<SelfAdjoint>() = m.part<LowerTriangular>();
+ Matrix2i ref3;
+ ref3 << 1, 0,
+ 0, 4;
+ VERIFY(m3 == ref3);
}
void test_triangular()
{
+ CALL_SUBTEST( selfadjoint() );
for(int i = 0; i < g_repeat ; i++) {
CALL_SUBTEST( triangular(Matrix()) );
CALL_SUBTEST( triangular(Matrix()) );
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org