Skip to content

Commit bffe62d

Browse files
committed
chg: skip zz_p::init() if it is already correctly initialized
1 parent a209e1d commit bffe62d

File tree

8 files changed

+155
-34
lines changed

8 files changed

+155
-34
lines changed

factory/algext.cc

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -466,7 +466,11 @@ void tryBrownGCD( const CanonicalForm & F, const CanonicalForm & G, const Canoni
466466
Variable v1= Variable (1);
467467
#ifdef HAVE_NTL
468468
Variable v= M.mvar();
469-
zz_p::init (getCharacteristic());
469+
if (fac_NTL_char != getCharacteristic())
470+
{
471+
fac_NTL_char= getCharacteristic();
472+
zz_p::init (getCharacteristic());
473+
}
470474
zz_pX NTLMipo= convertFacCF2NTLzzpX (M);
471475
zz_pE::init (NTLMipo);
472476
zz_pEX NTLResult;

factory/cfModResultant.cc

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -257,15 +257,16 @@ CanonicalForm uniResultant (const CanonicalForm& F, const CanonicalForm& G)
257257
nmod_poly_clear (FLINTG);
258258
return CanonicalForm ((long) FLINTresult);
259259
#else
260-
zz_pBak bak;
261-
bak.save();
262-
zz_p::init (getCharacteristic());
260+
if (fac_NTL_char != getCharacteristic())
261+
{
262+
fac_NTL_char= getCharacteristic();
263+
zz_p::init (getCharacteristic());
264+
}
263265
zz_pX NTLF= convertFacCF2NTLzzpX (F);
264266
zz_pX NTLG= convertFacCF2NTLzzpX (G);
265267

266268
zz_p NTLResult= resultant (NTLF, NTLG);
267269

268-
bak.restore();
269270
return CanonicalForm (to_long (rep (NTLResult)));
270271
#endif
271272
#else

factory/cf_gcd.cc

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,11 @@ gcd_test_one ( const CanonicalForm & f, const CanonicalForm & g, bool swap, int
114114
CanonicalForm primElem, imPrimElem;
115115
if (p == 2 && d < 6)
116116
{
117-
zz_p::init (p);
117+
if (fac_NTL_char != 2)
118+
{
119+
fac_NTL_char= 2;
120+
zz_p::init (p);
121+
}
118122
bool primFail= false;
119123
Variable vBuf;
120124
primElem= primitiveElement (v, vBuf, primFail);
@@ -138,7 +142,11 @@ gcd_test_one ( const CanonicalForm & f, const CanonicalForm & g, bool swap, int
138142
}
139143
else if ((p == 3 && d < 4) || ((p == 5 || p == 7) && d < 3))
140144
{
141-
zz_p::init (p);
145+
if (fac_NTL_char != p)
146+
{
147+
fac_NTL_char= p;
148+
zz_p::init (p);
149+
}
142150
bool primFail= false;
143151
Variable vBuf;
144152
primElem= primitiveElement (v, vBuf, primFail);

factory/cf_gcd_smallp.cc

Lines changed: 45 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,11 @@ randomElement (const CanonicalForm & F, const Variable & alpha, CFList & list,
413413
static inline
414414
Variable chooseExtension (const Variable & alpha)
415415
{
416-
zz_p::init (getCharacteristic());
416+
if (fac_NTL_char != getCharacteristic())
417+
{
418+
fac_NTL_char= getCharacteristic();
419+
zz_p::init (getCharacteristic());
420+
}
417421
zz_pX NTLIrredpoly;
418422
int i, m;
419423
// extension of F_p needed
@@ -439,7 +443,11 @@ static inline
439443
void choose_extension (const int& d, const int& num_vars, Variable& beta)
440444
{
441445
int p= getCharacteristic();
442-
zz_p::init (p);
446+
if (p != fac_NTL_char)
447+
{
448+
fac_NTL_char= p;
449+
zz_p::init (p);
450+
}
443451
zz_pX NTLirredpoly;
444452
//TODO: replace d by max_{i} (deg_x{i}(f))
445453
int i= (int) (log ((double) ipower (d + 1, num_vars))/log ((double) p));
@@ -1332,7 +1340,11 @@ CanonicalForm
13321340
randomIrredpoly (int i, const Variable & x)
13331341
{
13341342
int p= getCharacteristic();
1335-
zz_p::init (p);
1343+
if (fac_NTL_char != p)
1344+
{
1345+
fac_NTL_char= p;
1346+
zz_p::init (p);
1347+
}
13361348
zz_pX NTLirredpoly;
13371349
CanonicalForm CFirredpoly;
13381350
BuildIrred (NTLirredpoly, i + 1);
@@ -1997,7 +2009,11 @@ gaussianElimFp (CFMatrix& M, CFArray& L)
19972009
delete dummy;
19982010
#else
19992011
int p= getCharacteristic ();
2000-
zz_p::init (p);
2012+
if (fac_NTL_char != p)
2013+
{
2014+
fac_NTL_char= p;
2015+
zz_p::init (p);
2016+
}
20012017
mat_zz_p *NTLN= convertFacCFMatrix2NTLmat_zz_p(*N);
20022018
long rk= gauss (*NTLN);
20032019

@@ -2027,7 +2043,11 @@ gaussianElimFq (CFMatrix& M, CFArray& L, const Variable& alpha)
20272043
for (int i= 0; i < L.size(); i++, j++)
20282044
(*N) (j, M.columns() + 1)= L[i];
20292045
int p= getCharacteristic ();
2030-
zz_p::init (p);
2046+
if (fac_NTL_char != p)
2047+
{
2048+
fac_NTL_char= p;
2049+
zz_p::init (p);
2050+
}
20312051
zz_pX NTLMipo= convertFacCF2NTLzzpX (getMipo (alpha));
20322052
zz_pE::init (NTLMipo);
20332053
mat_zz_pE *NTLN= convertFacCFMatrix2NTLmat_zz_pE(*N);
@@ -2068,7 +2088,11 @@ solveSystemFp (const CFMatrix& M, const CFArray& L)
20682088
long rk= nmod_mat_rref (dummy, FLINTN);
20692089
#else
20702090
int p= getCharacteristic ();
2071-
zz_p::init (p);
2091+
if (fac_NTL_char != p)
2092+
{
2093+
fac_NTL_char= p;
2094+
zz_p::init (p);
2095+
}
20722096
mat_zz_p *NTLN= convertFacCFMatrix2NTLmat_zz_p(*N);
20732097
long rk= gauss (*NTLN);
20742098
#endif
@@ -2108,7 +2132,11 @@ solveSystemFq (const CFMatrix& M, const CFArray& L, const Variable& alpha)
21082132
for (int i= 0; i < L.size(); i++, j++)
21092133
(*N) (j, M.columns() + 1)= L[i];
21102134
int p= getCharacteristic ();
2111-
zz_p::init (p);
2135+
if (fac_NTL_char != p)
2136+
{
2137+
fac_NTL_char= p;
2138+
zz_p::init (p);
2139+
}
21122140
zz_pX NTLMipo= convertFacCF2NTLzzpX (getMipo (alpha));
21132141
zz_pE::init (NTLMipo);
21142142
mat_zz_pE *NTLN= convertFacCFMatrix2NTLmat_zz_pE(*N);
@@ -4593,7 +4621,11 @@ CanonicalForm EZGCD_P( const CanonicalForm & FF, const CanonicalForm & GG )
45934621
Variable v2;
45944622
if (p == 2 && d < 6)
45954623
{
4596-
zz_p::init (p);
4624+
if (fac_NTL_char != p)
4625+
{
4626+
fac_NTL_char= p;
4627+
zz_p::init (p);
4628+
}
45974629
bool primFail= false;
45984630
Variable vBuf;
45994631
primElem= primitiveElement (a, vBuf, primFail);
@@ -4617,7 +4649,11 @@ CanonicalForm EZGCD_P( const CanonicalForm & FF, const CanonicalForm & GG )
46174649
}
46184650
else if ((p == 3 && d < 4) || ((p == 5 || p == 7) && d < 3))
46194651
{
4620-
zz_p::init (p);
4652+
if (fac_NTL_char != p)
4653+
{
4654+
fac_NTL_char= p;
4655+
zz_p::init (p);
4656+
}
46214657
bool primFail= false;
46224658
Variable vBuf;
46234659
primElem= primitiveElement (a, vBuf, primFail);

factory/cf_map_ext.cc

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,11 @@ static inline
6666
CanonicalForm mapUp (const Variable& alpha, const Variable& beta)
6767
{
6868
int p= getCharacteristic ();
69-
zz_p::init (p);
69+
if (fac_NTL_char != p)
70+
{
71+
fac_NTL_char= p;
72+
zz_p::init (p);
73+
}
7074
zz_pX NTL_mipo= convertFacCF2NTLzzpX (getMipo (beta));
7175
zz_pE::init (NTL_mipo);
7276
zz_pEX NTL_alpha_mipo= convertFacCF2NTLzz_pEX (getMipo(alpha), NTL_mipo);
@@ -324,7 +328,11 @@ primitiveElement (const Variable& alpha, Variable& beta, bool fail)
324328
CanonicalForm mipo= getMipo (alpha);
325329
int d= degree (mipo);
326330
int p= getCharacteristic ();
327-
zz_p::init (p);
331+
if (fac_NTL_char != p)
332+
{
333+
fac_NTL_char= p;
334+
zz_p::init (p);
335+
}
328336
zz_pX NTL_mipo;
329337
CanonicalForm mipo2;
330338
primitive= false;
@@ -377,7 +385,11 @@ mapPrimElem (const CanonicalForm& primElem, const Variable& alpha,
377385
{
378386
CanonicalForm primElemMipo= findMinPoly (primElem, alpha);
379387
int p= getCharacteristic ();
380-
zz_p::init (p);
388+
if (fac_NTL_char != p)
389+
{
390+
fac_NTL_char= p;
391+
zz_p::init (p);
392+
}
381393
zz_pX NTLMipo= convertFacCF2NTLzzpX (getMipo (beta));
382394
zz_pE::init (NTLMipo);
383395
zz_pEX NTLPrimElemMipo= convertFacCF2NTLzz_pEX (primElemMipo, NTLMipo);
@@ -398,7 +410,11 @@ map (const CanonicalForm& primElem, const Variable& alpha,
398410
order++;
399411
}
400412
int p= getCharacteristic ();
401-
zz_p::init (p);
413+
if (fac_NTL_char != p)
414+
{
415+
fac_NTL_char= p;
416+
zz_p::init (p);
417+
}
402418
zz_pX NTL_mipo= convertFacCF2NTLzzpX (getMipo (beta));
403419
zz_pE::init (NTL_mipo);
404420
zz_pEX NTL_alpha_mipo= convertFacCF2NTLzz_pEX (getMipo(alpha), NTL_mipo);
@@ -421,7 +437,11 @@ findMinPoly (const CanonicalForm& F, const Variable& alpha)
421437
{
422438
ASSERT (F.isUnivariate() && F.mvar()==alpha,"expected element of F_p(alpha)");
423439

424-
zz_p::init (getCharacteristic());
440+
if (fac_NTL_char != getCharacteristic())
441+
{
442+
fac_NTL_char= getCharacteristic();
443+
zz_p::init (getCharacteristic());
444+
}
425445
zz_pX NTLF= convertFacCF2NTLzzpX (F);
426446
int d= degree (getMipo (alpha));
427447

factory/facFqBivar.cc

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,11 @@ uniFactorizer (const CanonicalForm& A, const Variable& alpha, const bool& GF)
154154
ASSERT (A.isUnivariate(),
155155
"univariate polynomial expected or constant expected");
156156
CFFList factorsA;
157-
zz_p::init (getCharacteristic());
157+
if (fac_NTL_char != getCharacteristic())
158+
{
159+
fac_NTL_char= getCharacteristic();
160+
zz_p::init (getCharacteristic());
161+
}
158162
if (GF)
159163
{
160164
int k= getGFDegree();
@@ -672,7 +676,11 @@ factorRecombination (CFList& factors, CanonicalForm& F,
672676

673677
Variable chooseExtension (const Variable & alpha, const Variable& beta, int k)
674678
{
675-
zz_p::init (getCharacteristic());
679+
if (fac_NTL_char != getCharacteristic())
680+
{
681+
fac_NTL_char= getCharacteristic();
682+
zz_p::init (getCharacteristic());
683+
}
676684
zz_pX NTLIrredpoly;
677685
int i=1, m= 2;
678686
// extension of F_p needed
@@ -3554,7 +3562,11 @@ extIncreasePrecision (CanonicalForm& F, CFList& factors, int factorsFound,
35543562

35553563
CFArray * A= new CFArray [factors.length()];
35563564
CFArray bufQ= CFArray (factors.length());
3557-
zz_p::init (getCharacteristic());
3565+
if (fac_NTL_char != getCharacteristic())
3566+
{
3567+
fac_NTL_char= getCharacteristic();
3568+
zz_p::init (getCharacteristic());
3569+
}
35583570
mat_zz_p NTLN;
35593571
ident (NTLN, factors.length());
35603572
int minBound= bounds[0];
@@ -3747,7 +3759,11 @@ increasePrecision2 (const CanonicalForm& F, CFList& factors,
37473759
}
37483760
CFArray * A= new CFArray [factors.length()];
37493761
CFArray bufQ= CFArray (factors.length());
3750-
zz_p::init (getCharacteristic());
3762+
if (fac_NTL_char != getCharacteristic())
3763+
{
3764+
fac_NTL_char= getCharacteristic();
3765+
zz_p::init (getCharacteristic());
3766+
}
37513767
zz_pX NTLMipo= convertFacCF2NTLzzpX (getMipo (alpha));
37523768
zz_pE::init (NTLMipo);
37533769
mat_zz_pE NTLN;
@@ -6205,7 +6221,11 @@ henselLiftAndLatticeRecombi (const CanonicalForm& G, const CFList& uniFactors,
62056221
#ifdef HAVE_FLINT
62066222
nmod_mat_t FLINTN;
62076223
#else
6208-
zz_p::init (getCharacteristic());
6224+
if (fac_NTL_char != getCharacteristic())
6225+
{
6226+
fac_NTL_char= getCharacteristic();
6227+
zz_p::init (getCharacteristic());
6228+
}
62096229
mat_zz_p NTLN;
62106230
#endif
62116231

@@ -7075,7 +7095,11 @@ extHenselLiftAndLatticeRecombi(const CanonicalForm& G, const CFList& uniFactors,
70757095
bufUniFactors.insert (LCF);
70767096
int l= 1;
70777097

7078-
zz_p::init (getCharacteristic());
7098+
if (fac_NTL_char != getCharacteristic())
7099+
{
7100+
fac_NTL_char= getCharacteristic();
7101+
zz_p::init (getCharacteristic());
7102+
}
70797103
zz_pX NTLMipo;
70807104
mat_zz_p NTLN;
70817105

factory/facHensel.cc

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,11 @@
3838
static
3939
CFList productsNTL (const CFList& factors, const CanonicalForm& M)
4040
{
41-
zz_p::init (getCharacteristic());
41+
if (fac_NTL_char != getCharacteristic())
42+
{
43+
fac_NTL_char= getCharacteristic();
44+
zz_p::init (getCharacteristic());
45+
}
4246
zz_pX NTLMipo= convertFacCF2NTLzzpX (M);
4347
zz_pE::init (NTLMipo);
4448
zz_pEX prod;
@@ -102,7 +106,11 @@ void tryDiophantine (CFList& result, const CanonicalForm& F,
102106
buf2= i.getItem();
103107
#ifdef HAVE_NTL
104108
Variable x= Variable (1);
105-
zz_p::init (getCharacteristic());
109+
if (fac_NTL_char != getCharacteristic())
110+
{
111+
fac_NTL_char= getCharacteristic();
112+
zz_p::init (getCharacteristic());
113+
}
106114
zz_pX NTLMipo= convertFacCF2NTLzzpX (M);
107115
zz_pE::init (NTLMipo);
108116
zz_pEX NTLbuf1, NTLbuf2, NTLbuf3, NTLS, NTLT;

0 commit comments

Comments
 (0)