linbox-team / linbox

LinBox - C++ library for exact, high-performance linear algebra
https://linbox-team.github.io/linbox
GNU Lesser General Public License v2.1
81 stars 28 forks source link

Dixon (dense) refacto #194

Closed Breush closed 5 years ago

Breush commented 5 years ago
Breush commented 5 years ago

@ClementPernet In the class TransposeAugmentedSystem, we extract permutations of the augmented system (A|b)t = PLUQ into indices srcRow, srcCol. Does FFLAS has something for this?

jgdumas commented 5 years ago

Pb

g++ -DHAVE_CONFIG_H -I. -I.. -DLinBoxTestOnly -O2 -Wall -g -DDEBUG -D_LB_DEBUG -g -DDEBUG -D_LB_DEBUG -I.. -fopenmp -fabi-version=6 -I/usr/local/soft/givaro-4.0/include -I/data/scratch/gmp-6.1.1//include -I/usr/local/soft/fflas-ffpack-2.3/include -I/data/scratch/ntl-11.3.2/include -msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -MT test-det.o -MD -MP -MF .deps/test-det.Tpo -c -o test-det.o test-det.C In file included from ../linbox/algorithms/hybrid-det.h:36, from ../linbox/solutions/det.h:600, from test-det.C:48: ../linbox/algorithms/last-invariant-factor.h: In instantiation of ‘LinBox::LastInvariantFactor<_Ring, _Solver>::Integer& LinBox::LastInvariantFactor<_Ring, _Solver>::lastInvariantFactor1(LinBox::LastInvariantFactor<_Ring, _Solver>::Integer&, Vector&, const IMatrix&, bool) const [with IMatrix = LinBox::SparseMatrix; Vector = LinBox::BlasVector; _Ring = Givaro::IntegerDom; _Solver = LinBox::DixonSolver<Givaro::IntegerDom, Givaro::ModularBalanced, LinBox::PrimeIterator, LinBox::Method::DenseElimination>; LinBox::LastInvariantFactor<_Ring, _Solver>::Integer = Givaro::Integer]’: ../linbox/algorithms/hybrid-det.h:267:47: required from ‘typename Blackbox::Field::Element& LinBox::lif_cra_det(typename Blackbox::Field::Element&, const Blackbox&, const LinBox::RingCategories::IntegerTag&, const MyMethod&) [with Blackbox = LinBox::SparseMatrix; MyMethod = LinBox::Method::Wiedemann; typename Blackbox::Field::Element = Givaro::Integer]’ ../linbox/solutions/det.h:620:26: required from ‘typename Blackbox::Field::Element& LinBox::det(typename Blackbox::Field::Element&, const Blackbox&, const LinBox::RingCategories::IntegerTag&, const MyMethod&) [with Blackbox = LinBox::SparseMatrix; MyMethod = LinBox::Method::Wiedemann; typename Blackbox::Field::Element = Givaro::Integer]’ ../linbox/solutions/det.h:107:13: required from ‘typename Blackbox::Field::Element& LinBox::det(typename Blackbox::Field::Element&, const Blackbox&, const MyMethod&) [with Blackbox = LinBox::SparseMatrix; MyMethod = LinBox::Method::Wiedemann; typename Blackbox::Field::Element = Givaro::Integer]’ test-det.C:368:49: required from here ../linbox/algorithms/last-invariant-factor.h:293:8: error: passing ‘const Solver’ {aka ‘const LinBox::DixonSolver<Givaro::IntegerDom, Givaro::ModularBalanced, LinBox::PrimeIterator, LinBox::Method::DenseElimination>’} as ‘this’ argument discards qualifiers [-fpermissive] tmp = solver.solveNonsingular(r_num, r_den, A, b,oldMatrix); In file included from ../linbox/algorithms/./dixon-solver/dixon-solver-dense.h:363, from ../linbox/algorithms/rational-solver.h:583, from ../linbox/algorithms/hybrid-det.h:35, from ../linbox/solutions/det.h:600, from test-det.C:48: ../linbox/algorithms/./dixon-solver/./dixon-solver-dense.inl:63:24: note: in call to ‘LinBox::SolverReturnStatus LinBox::DixonSolver<Ring, Field, RandomPrime, LinBox::Method::DenseElimination>::solveNonsingular(Vector1&, LinBox::DixonSolver<Ring, Field, RandomPrime, LinBox::Method::DenseElimination>::Integer&, const IMatrix&, const Vector2&, bool, int) [with IMatrix = LinBox::SparseMatrix; Vector1 = LinBox::BlasVector; Vector2 = LinBox::BlasVector; Ring = Givaro::IntegerDom; Field = Givaro::ModularBalanced; RandomPrime = LinBox::PrimeIterator; LinBox::DixonSolver<Ring, Field, RandomPrime, LinBox::Method::DenseElimination>::Integer = Givaro::Integer]’ SolverReturnStatus DixonSolver<Ring, Field, RandomPrime, Method::DenseElimination>::solveNonsingular( ^~~~~~~~~~~~~~~ In file included from ../linbox/algorithms/hybrid-det.h:36, from ../linbox/solutions/det.h:600, from test-det.C:48: ../linbox/algorithms/last-invariant-factor.h: In instantiation of ‘LinBox::LastInvariantFactor<_Ring, _Solver>::Integer& LinBox::LastInvariantFactor<_Ring, _Solver>::lastInvariantFactor1(LinBox::LastInvariantFactor<_Ring, _Solver>::Integer&, Vector&, const IMatrix&, bool) const [with IMatrix = LinBox::BlasMatrix; Vector = LinBox::BlasVector; _Ring = Givaro::IntegerDom; _Solver = LinBox::DixonSolver<Givaro::IntegerDom, Givaro::Modular, LinBox::PrimeIterator, LinBox::Method::DenseElimination>; LinBox::LastInvariantFactor<_Ring, _Solver>::Integer = Givaro::Integer]’: ../linbox/algorithms/det-rational.h:251:32: required from ‘typename Rationals::Element& LinBox::rational_det(typename Rationals::Element&, const LinBox::BlasMatrix<_Field>&, const MyMethod&) [with Rationals = Givaro::QField; MyMethod = LinBox::Method::Auto; typename Rationals::Element = Givaro::Rational; typename LinBox::Vector::Dense = std::vector<Givaro::Rational, std::allocator >]’ ../linbox/solutions/det.h:660:15: required from ‘typename Field::Element& LinBox::det(typename Field::Element&, const LinBox::BlasMatrix<_Field>&, const LinBox::RingCategories::RationalTag&, const MyMethod&) [with Field = Givaro::QField; MyMethod = LinBox::Method::Auto; typename Field::Element = Givaro::Rational; typename LinBox::Vector::Dense = std::vector<Givaro::Rational, std::allocator >]’ ../linbox/solutions/det.h:107:13: required from ‘typename Blackbox::Field::Element& LinBox::det(typename Blackbox::Field::Element&, const Blackbox&, const MyMethod&) [with Blackbox = LinBox::BlasMatrix<Givaro::QField, std::vector<Givaro::Rational, std::allocator > >; MyMethod = LinBox::Method::Auto; typename Blackbox::Field::Element = Givaro::Rational]’ test-det.C:566:41: required from here ../linbox/algorithms/last-invariant-factor.h:293:8: error: passing ‘const Solver’ {aka ‘const LinBox::DixonSolver<Givaro::IntegerDom, Givaro::Modular, LinBox::PrimeIterator, LinBox::Method::DenseElimination>’} as ‘this’ argument discards qualifiers [-fpermissive] tmp = solver.solveNonsingular(r_num, r_den, A, b,oldMatrix); In file included from ../linbox/algorithms/./dixon-solver/dixon-solver-dense.h:363, from ../linbox/algorithms/rational-solver.h:583, from ../linbox/algorithms/hybrid-det.h:35, from ../linbox/solutions/det.h:600, from test-det.C:48: ../linbox/algorithms/./dixon-solver/./dixon-solver-dense.inl:63:24: note: in call to ‘LinBox::SolverReturnStatus LinBox::DixonSolver<Ring, Field, RandomPrime, LinBox::Method::DenseElimination>::solveNonsingular(Vector1&, LinBox::DixonSolver<Ring, Field, RandomPrime, LinBox::Method::DenseElimination>::Integer&, const IMatrix&, const Vector2&, bool, int) [with IMatrix = LinBox::BlasMatrix; Vector1 = LinBox::BlasVector; Vector2 = LinBox::BlasVector; Ring = Givaro::IntegerDom; Field = Givaro::Modular; RandomPrime = LinBox::PrimeIterator; LinBox::DixonSolver<Ring, Field, RandomPrime, LinBox::Method::DenseElimination>::Integer = Givaro::Integer]’ SolverReturnStatus DixonSolver<Ring, Field, RandomPrime, Method::DenseElimination>::solveNonsingular( ^~~~~~~~~~~~~~~ make[4]: *** [Makefile:2583: test-det.o] Error 1