-
Notifications
You must be signed in to change notification settings - Fork 23
/
TODO
50 lines (45 loc) · 2.31 KB
/
TODO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
LUdivine-PLUQ
* Clean up of all base cases
* Only one routine, and automated switch to all implementations
FTRTRI/FTRTRM
* Optimize base cases
Conversion double -> float for small moduli:
* should be done in each routine, not only gemm
Simplification of helpers:
* currently all mmhelpers have Amax,Amin,Bmax,Bmin, Cmax,Cmin,Outmax,
Outmin, and all related features for delayed reductions.
* this is not suited for other FieldTraits (say Generic,
Multiprec,...)
TODO:
- write a by-default minimal mmhelper
- specialize the mmhelper with delayedModular trait with all the
machinery
* The NeedPreaddreduction system is error-prone and ugly:
==> introduce AddHelpers
- carry max min outmax outmin info when used with a DelayedModular
FieldTraits
- decide when a mod is required in this case
- empty otherwise.
- Two bool params: add/sub switch, and inplace switch.
CharPoly: How to handle polynomial arithmetic
* Option 1: generic representation, fixed Poly1Dom domain type, built when needed
- store polynomials as template type Polynomial which is assumed to
provide basic std::vector<Element> methods;
- build a Poly1Dom when arithmetic needs to be done
- convert Polynomials back and forth to a givvector
-> no genericity wrt Polynomial representation and domain
* Option 2: generic domain type, generic representation, built when
needed
- pass the type PolRing as template argument (unused in the signature)
- requires to explicitly specify the template arg list
-> incompatible with the solution trait system (generates
partial template specializations)
* Option 3: generic domain type, generic representation, built only once
- pass the PolRing object along all functions that ultimately need it
-> heavy impact on sage & LinBox functions API (ex
LinBox::charpoly(PolDom, P, A), FFPACK::CharPoly(PolDom, N, P, A, lda))
* Option 4: let polynomials know their domain
- add a reference to the PolDom in the Polynomial object (class Poly inherit from givvector and adds a )
* Option 5: Option 3 for FFPACK and 4 for LinBox
- FFPACK: use the usual polynomail/PolRing interface defined in Givaro (Polynomials do not know their domains)
- LinBox: wrap Givaro Polynomials and PolRing such that a Polynomial knows its Domain -> allow charpoly (P,A)