Report at https://gitlab.com/libeigen/eigen/-/issues/2112

On Sun, Jan 3, 2021 at 9:11 AM Ian Bell <[email protected]> wrote:

> I can certainly file a bug report.  Thanks for confirming that I didn't
> just do something stupid on my side.
>
> On Fri, Jan 1, 2021 at 6:07 PM Christoph Hertzberg <
> [email protected]> wrote:
>
>> The breaking commit for your minimal example is this:
>>
>>
>> https://gitlab.com/libeigen/eigen/-/commit/39c2cba810a573ae4d0efd2b0b80e08c934b99b3
>>
>> Apparently that was necessary for cuda support -- not sure if this is
>> actually still necessary. On the 3.3 branch your code compiles fine:
>> https://godbolt.org/z/nnqPEn
>>
>> Boost is actually not supposed to fiddle around in Eigen's internal
>> namespace. OTOH, we don't properly document how one should add support
>> for complex custom types.
>>
>> Could you file an issue for this?
>>
>> Cheers,
>> Christoph
>>
>>
>>
>> On 01/01/2021 22.12, Ian Bell wrote:
>> > It seems that at version 3.3.3 things were all good, and since then
>> there
>> > have a been quite a few regressions for extended precision things. I'm
>> > trying to track down a couple of bugs on my side. My hypothesis is that
>> > there is somewhere a precision-destroying cast, but I'm not quite sure.
>> >
>> > On Thu, Dec 31, 2020 at 3:47 PM Ian Bell <[email protected]> wrote:
>> >
>> >> I have no idea whether this is a problem with boost or Eigen, but
>> putting
>> >> boost::multiprecision into Eigen Array/Matrix worked in older versions
>> of
>> >> Eigen from circa 2017, but no longer does.  For instance this example (
>> >>
>> https://www.boost.org/doc/libs/1_75_0/libs/multiprecision/doc/html/boost_multiprecision/tut/eigen.html
>> >> ; copied below) used to work, but now when I compile with master, I get
>> >> complaints about the NumTraits. I'm at
>> >> commit fdf2ee62c5174441076fb64c9737d89bbe102759.  I tried to look into
>> this
>> >> a bit, but template-fu needs work.
>> >>
>> >> On Visual Studio 2019:
>> >>
>> >> Build started...
>> >> 1>------ Build started: Project: boosteigen, Configuration: Release x64
>> >> ------
>> >> 1>boosteigentest.cpp
>> >> 1>C:\Users\ihb\PapersInProgress\Working\03a.
>> >>
>> UlrichCubicSuperAncillary\code\bld\_deps\boost-src\boost/multiprecision/eigen.hpp(147,23):
>> >> error C2977: 'Eigen::internal::conj_impl': too many template arguments
>> >> 1>C:\Users\ihb\PapersInProgress\Working\03a.
>> >>
>> UlrichCubicSuperAncillary\code\bld\_deps\boost-src\boost/multiprecision/eigen.hpp(147):
>> >> message : see declaration of 'Eigen::internal::conj_impl'
>> >> 1>C:\Users\ihb\PapersInProgress\Working\03a.
>> >>
>> UlrichCubicSuperAncillary\code\bld\_deps\boost-src\boost/multiprecision/eigen.hpp(164,8):
>> >> error C2977: 'Eigen::internal::conj_impl': too many template arguments
>> >> 1>C:\Users\ihb\PapersInProgress\Working\03a.
>> >>
>> UlrichCubicSuperAncillary\code\bld\_deps\boost-src\boost/multiprecision/eigen.hpp(157):
>> >> message : see declaration of 'Eigen::internal::conj_impl'
>> >>
>> >> And on gcc 9.3.0:
>> >>
>> >> [100%] Building CXX object
>> CMakeFiles/boosteigen.dir/boosteigentest.cpp.o
>> >> In file included from /input/boosteigentest.cpp:3:
>> >> /bld/_deps/boost-src/boost/multiprecision/eigen.hpp:147:14: error:
>> >> redeclared with 2 template parameters
>> >>    147 |       struct conj_impl;
>> >>        |              ^~~~~~~~~
>> >> In file included from
>> >> /input/externals/ChebTools/externals/Eigen/Eigen/Core:164,
>> >>                   from
>> >> /bld/_deps/boost-src/boost/multiprecision/eigen.hpp:10,
>> >>                   from /input/boosteigentest.cpp:3:
>> >>
>> /input/externals/ChebTools/externals/Eigen/Eigen/src/Core/MathFunctions.h:263:34:
>> >> note: previous declaration 'template<class Scalar> struct
>> >> Eigen::internal::conj_impl' used 1 template parameter
>> >>    263 | template<typename Scalar> struct conj_impl :
>> >> conj_default_impl<Scalar> {};
>> >>        |                                  ^~~~~~~~~
>> >> In file included from /input/boosteigentest.cpp:3:
>> >> /bld/_deps/boost-src/boost/multiprecision/eigen.hpp:157:100: error:
>> wrong
>> >> number of template arguments (2, should be 1)
>> >>    157 |       struct
>> >> conj_impl<boost::multiprecision::detail::expression<tag, Arg1, Arg2,
>> Arg3,
>> >> Arg4>, true>
>> >>        |
>> >>                                   ^
>> >> In file included from
>> >> /input/externals/ChebTools/externals/Eigen/Eigen/Core:164,
>> >>                   from
>> >> /bld/_deps/boost-src/boost/multiprecision/eigen.hpp:10,
>> >>                   from /input/boosteigentest.cpp:3:
>> >>
>> /input/externals/ChebTools/externals/Eigen/Eigen/src/Core/MathFunctions.h:263:34:
>> >> note: provided for 'template<class Scalar> struct
>> >> Eigen::internal::conj_impl'
>> >>    263 | template<typename Scalar> struct conj_impl :
>> >> conj_default_impl<Scalar> {};
>> >>        |                                  ^~~~~~~~~
>> >>
>> >>
>> >> Example:
>> >>
>> >> #include <iostream>#include
>> <boost/multiprecision/cpp_complex.hpp>#include
>> <boost/multiprecision/eigen.hpp>#include <Eigen/Dense>
>> >> int main(){
>> >>     using namespace Eigen;
>> >>     typedef boost::multiprecision::cpp_complex_quad complex_type;
>> >>     //
>> >>     // We want to solve Ax = b for x,
>> >>     // define A and b first:
>> >>     //
>> >>     Matrix<complex_type, 2, 2> A, b;
>> >>     A << complex_type(2, 3), complex_type(-1, -2), complex_type(-1,
>> -4), complex_type(3, 6);
>> >>     b << 1, 2, 3, 1;
>> >>     std::cout << "Here is the matrix A:\n" << A << std::endl;
>> >>     std::cout << "Here is the right hand side b:\n" << b << std::endl;
>> >>     //
>> >>     // Solve for x:
>> >>     //
>> >>     Matrix<complex_type, 2, 2> x = A.fullPivHouseholderQr().solve(b);
>> >>     std::cout << "The solution is:\n" << x << std::endl;
>> >>     //
>> >>     // Compute the error in the solution by using the norms of Ax - b
>> and b:
>> >>     //
>> >>     complex_type::value_type relative_error = (A*x - b).norm() /
>> b.norm();
>> >>     std::cout << "The relative error is: " << relative_error <<
>> std::endl;
>> >>     return 0;}
>> >>
>> >>
>> >
>>
>>
>>

Reply via email to