linbox
Todo List
Global HYB_ELL_COO_THRESHOLD
benchmark me
Module solutions

this may soon be reversed, in fact.

primary form? Relative primary form of A? Primary form is similar to A and finest which is a direct sum of companion matrices Cfi such that, for all i, j, gcd(fi, fj) = 1 or fi or fj. Relative primary form is coarsest such decomposition.

its multipliers? its output form variants?

Global LinBox::smithForm (SmithList< typename Blackbox::Field > &S, const Blackbox &A, const Method &M)
Other methods will be provided later. For now see the examples/smith.C for ways to call other smith form algorithms.
"
tune me ?
Global SparseMatrix< _Field, SparseMatrixFormat::HYB >::consistent () const
Non element marker.
Global SparseMatrix< _Field, SparseMatrixFormat::HYB >::setEntry (const size_t &i, const size_t &j, const Element &e)
make it faster if i is 0 or m-1 ?
Global SparseMatrix< _Field, SparseMatrixFormat::HYB >::optimise ()
±1 !
Global SparseMatrix< _Field, SparseMatrixFormat::HYB >::SparseMatrix ()
convert from other matrix.
"

±1 !

benchmark me

benchmark me

what is small ?

File debug.h
we should put vector printing elsewhere.
Global HYB_ELL_THRESHOLD
benchmark me
"
much less needs to be copied (faster?)
Global SparseMatrix< _Field, SparseMatrixFormat::ELL_R >::setEntry (const size_t &i, const size_t &j, const Element &e)
make it faster if i is 0 or m-1 ?
Global SparseMatrix< _Field, SparseMatrixFormat::ELL_R >::SparseMatrix (const _Field &F, VectStream &stream)
Global SparseMatrix< _Field, SparseMatrixFormat::ELL_R >::SparseMatrix (const _Field &F)
convert from other matrix.
Global SparseMatrix< _Field, SparseMatrixFormat::ELL >::consistent () const
Non element marker.
Global SparseMatrix< _Field, SparseMatrixFormat::ELL >::setEntry (const size_t &i, const size_t &j, const Element &e)
make it faster if i is 0 or m-1 ?
Global SparseMatrix< _Field, SparseMatrixFormat::ELL >::SparseMatrix (const _Field &F, VectStream &stream)
Global SparseMatrix< _Field, SparseMatrixFormat::ELL >::SparseMatrix (const _Field &F)
convert from other matrix.
Global LinBox::prepare (const Field &F, Vector &y, const typename Field::Element &a)
Vector knows Field
Global SparseMatrix< _Field, SparseMatrixFormat::CSR >::consistent () const
Global SparseMatrix< _Field, SparseMatrixFormat::CSR >::setEntry (const size_t &i, const size_t &j, const Element &e)
make it faster if i is 0 or m-1 ?
Global test_ftrmm (std::ostream &report, const Field &F)
F.isInvertible()
Class PlotGraph

use getUsingSeries in latex/html/csv/xml

make depend on PlotStyle (that owns data)

Class PlotStyle

setUsingSeries(const svector_t &)

Allow for 'speed up against col X' style

make depend on PlotData

Class DataSeries
Times and Values could be dmatrix_t (and mergeable)
"

check FN opened.

use getUsingSeries in latex/html/csv/xml

File test-nullspace.C

test non dense nullspace

test for submatrices

make sure this is faster than FFPACK ?

File test-matrix-stream.C
I would like to see a matrix writer that writes sms format and generic dense format. Then we could have a self contained test that checks the write/read cycle without depending on preexisting data files.
Global test_applyP (std::ostream &report, const Field &F)
test NULL permutation
Global test_ftrmm (std::ostream &report, const Field &F)

check ftrsm fails nicely with non invertible A !

InvertibleRandomIter

Global SparseMatrix< _Field, SparseMatrixFormat::CSR >::SparseMatrix (const _Field &F)
convert from other matrix.
Global _LB_MAX_SZ
!
Global field_subtests::testRingTrivia (const Field &F, const char *name)
enable init with 1UL et -1L pour GMPRationalElement
Global testRing (Ring &F, const char *title, bool fieldp=true, bool runInitConvertIdentity=true)
untested so far :
  • ostream &write (ostream &os) const
  • istream &read (istream &is)
  • ostream &write (ostream &os, const Element &x) const
  • istream &read (istream &is, Element &x) const
  • FieldArchetype (FieldAbstract*, ElementAbstract*, RandIterAbstract* = 0)
" </dt><dd> \anchor _todo000089 come up with better test data, so can have a big singular matrix of all 0..9 <p>change "probability of dependence" to "set X dependent rows"
Global generate_precRatMat (string &filename, RMatrix &M, DVector &den, Integer &denPrec)
temp fix
"
: other convertions
Class RawVector< Element >
template by Field
Class ContainerTraits< std::vector< _Rep > >
remove vectors
"

use functions, not =

more general subvectors

subvector of ptr

Namespace LinBox
GMP Integers can be configured with limbs of different sizes (32 or 64 bits), depending on the machine. We do not handle that right now, but storing info about their dimension might be a good idea, to at least emit a warning.
File lattice.h

Create a BlasMatrix<NTL_ZZ> that is just like a mat_ZZ !

Create a BlasMatrix<FPLLL_ZZ> that is just like a IntMatrix !

This will avoid copy back/forth a BlasMatrix<Givaro::ZRing<Integer> >

Global Squarize< Blackbox >::applyTranspose (Vector1 &y, const Vector2 &x) const
use field().zero
Global Squarize< Blackbox >::apply (Vector1 &y, const Vector2 &x) const
use field().zero
Global PowerGaussDomainPowerOfTwo< UnsignedIntType >::isOdd (const UInt_t &b) const
use Givaro isOdd
"
if log2(maxint/curint)<ps use smaller genprime.
Global RNS< Unsigned >::RNS (size_t l, size_t ps=21)
if log2(maxint/curint)<ps use smaller genprime.
"

why not max int reachable to save maybe a couple primes ? bof.

why not max int reachable to save maybe a couple primes ? bof.

Class RNS< Unsigned >
template by field and ring
Global RationalReconstruction< _LiftingContainer, RatRecon >::dot (Integer &d, const InVect1 &v1, const InVect2 &v2) const
WHY a dot product here ?
Global RationalReconstruction< _LiftingContainer, RatRecon >::RationalReconstruction (const LiftingContainer &lcontainer, const Ring &r=Ring(), int THRESHOLD=50)
maybe use different ring than the ring in lcontainer
File rational-reconstruction.h
wrap Mat_ZZ<T>/IntMat in BlasMatrix<T>, BlasMatrix<Integer> e.g.
File minpoly-integer.h
better filter out repeated primes
Global BlasSubmatrix< _Matrix >::BlasSubmatrix (constSelf_t &SM, size_t rowbeg, size_t colbeg, size_t Rowdim, size_t Coldim)
BlasSub from (sub)Vector
"
is it A.field()?
Global LinBox::Protected::Zero (const Field &F, typename Field::Element *Z, const size_t ldZ, const size_t lig1, const size_t col1, const size_t lig2, const size_t col2)
use fzero
Global LinBox::NullSpaceBasisIn (const Tag::Side Side, BlasSubmatrix< DenseMat > &A, BlasMatrix< typename DenseMat::Field > &Ker, size_t &kerdim)

use copy

uses too much memory

Global LinBox::NullSpaceBasis (const Tag::Side Side, const BlasMatrix< Field > &A, BlasMatrix< Field > &Ker, size_t &kerdim)
make it work for BlasSubmatrix too
Global LinBox::NullSpaceBasisIn (const Tag::Side Side, BlasMatrix< Field > &A, BlasMatrix< Field > &Ker, size_t &kerdim)
make it work for BlasSubmatrix too
File dense-nullspace.h
random nullspace vector
"

use faster mul/mod here !

Could be much faster

Could be much faster

Global CRABuilderEarlyMultip< Domain_Type >::progress (const Domain &D, const BlasVector< OKDomain > &e)
Could be much faster
  • do not compute twice the product of moduli
  • reconstruct one element of e until Early Termination, then only, try a random linear combination.
Global CRABuilderEarlyMultip< Domain_Type >::progress (const Domain &D, const Vect &e)
Could be much faster
  • do not compute twice the product of moduli
  • reconstruct one element of e until Early Termination, then only, try a random linear combination.
Global RandomDenseMatrix< Randiter, Field >::randomRank (Matrix &A, int rank)
use CatergoryTag
Global SparseMatrix< _Field, SparseMatrixFormat::COO >::consistent () const
Global SparseMatrix< _Field, SparseMatrixFormat::COO >::setEntry (const size_t &i, const size_t &j, const Element &e)
make it faster if i is 0 or m-1 ?
Global SparseMatrix< _Field, SparseMatrixFormat::COO >::SparseMatrix (const _Field &F)
convert from other matrix.
Global SparseMatrix< _Field, SparseMatrixFormat::COO::implicit >::consistent () const
Global SparseMatrix< _Field, SparseMatrixFormat::COO::implicit >::setEntry (const size_t &i, const size_t &j, const Element &e)
make it faster if i is 0 or m-1 ?
Global SparseMatrix< _Field, SparseMatrixFormat::COO::implicit >::SparseMatrix ()
convert from other matrix.
Global LinBox::Protected::random_lu_rank (const Ring &ZZ, const Randiter &R, BlasMatrix< Ring > &A, int &rank, const RingCategories::IntegerTag &tag)
ZZ is A.field() !
Global LinBox::Protected::random_lu_rank (const Field &F, const Randiter &R, BlasMatrix< Field > &A, int &rank, const RingCategories::ModularTag &tag)

BlasPermutation a un ordre p et une taille r distinctes !!!

create BMD.applyP(A,P,Tag::Left) ; avec P : BlasPermutation ou P : MatrixPermutation

: L = [[L1,0],[A,L2]] ;U = [[U1,B],[0,U2]] ; LU = [[ rec(L1,U1), ftrmm(L1,B)],[ftrmm(A,U1),fgemm(A,B)+rec(L2,U2) ]] de même UL

RandomPermutation avec P de type [Matrix-Blas]Permutation

!!!

"

factorize this in BlasPermutation.

is there a copy made ?

Global LinBox::RandomBlasPermutation (BlasPermutation< size_t > &P)
To be factorized.
File matrix/random-matrix.h
à la vector/stream.h
Global MatrixPermutation< _UnsignedInt >::Transpose ()
in place ! (revient à parcourir des cycles)
Global OpenCLMatrixDomain< Field_ >::mulpoly (Polynomial &res, const Polynomial &P1, const Polynomial &P2) const
Temporary: waiting for an implementation of a domain of polynomial
Global MatrixDomain< Field_ >::pow_apply (Matrix1 &M1, const Matrix2 &M2, unsigned long int k) const
Need documentation of these methods
Global MatrixDomain< Field_ >::muladd (Matrix1 &D, const typename Field::Element &beta, const Matrix1 &C, const typename Field::Element &alpha, const Matrix2 &A, const Matrix3 &B) const
not efficient...
Class MatrixDomain< GF2 >
this is where m4ri will play.
"
check equal submatrix types
Global BlasMatrixDomain< Field_ >::mulpoly (Polynomial &res, const Polynomial &P1, const Polynomial &P2) const
Temporary: waiting for an implementation of a domain of polynomial
Module matrix
vector of rows ?
Global BlasMatrix< _Field, _Storage >::random (const size_t &b)
b should be the random generator