Changeset b7cc2b in git


Ignore:
Timestamp:
Jun 27, 2020, 5:46:56 PM (3 years ago)
Author:
Hans Schoenemann <hannes@…>
Branches:
(u'spielwiese', '0d6b7fcd9813a1ca1ed4220cfa2b104b97a0a003')
Children:
3c175a38073991b37dd623f38ad1ef4cfe9eaf3f
Parents:
9084a3bd47a1b5b8a96897a02c274a361e4e2c9c
Message:
factory: FindRoot via FLINT
Location:
factory
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • factory/cfEzgcd.cc

    r9084a3 rb7cc2b  
    865865/// Extended Zassenhaus GCD for finite fields.
    866866/// In case things become too dense we switch to a modular algorithm.
    867 #ifdef HAVE_NTL // primitiveElement, FindRoot
     867#ifdef HAVE_NTL // Hensel
    868868CanonicalForm EZGCD_P( const CanonicalForm & FF, const CanonicalForm & GG )
    869869{
     
    15021502  return N (d*cand);
    15031503}
    1504 #endif /*HAVE_NTL*/
    15051504#endif
     1505#endif
  • factory/cfGcdUtil.cc

    r9084a3 rb7cc2b  
    2222/// result is false, d is set to the degree of the gcd of f and g evaluated at a
    2323/// random point in K^n-1. This gcd is a gcd of univariate polynomials.
    24 #ifdef HAVE_NTL // primitiveElement, FindRoot
     24#ifdef HAVE_NTL // mapPrimElem
    2525bool
    2626gcd_test_one ( const CanonicalForm & f, const CanonicalForm & g, bool swap, int & d )
  • factory/cfModGcd.cc

    r9084a3 rb7cc2b  
    476476/// based on Alg. 7.2. as described in "Algorithms for
    477477/// Computer Algebra" by Geddes, Czapor, Labahn
    478 #ifdef HAVE_NTL // primitiveElement, FindRoot
     478#ifdef HAVE_NTL // mapPrimElem
    479479CanonicalForm
    480480modGCDFq (const CanonicalForm& F, const CanonicalForm& G,
     
    12031203}
    12041204
    1205 #ifdef HAVE_NTL // primitiveElement, FindRoot
     1205#ifdef HAVE_NTL
    12061206CanonicalForm
    12071207modGCDFp (const CanonicalForm& F, const CanonicalForm&  G,
     
    12101210#endif
    12111211
    1212 #ifdef HAVE_NTL // primitiveElement, FindRoot
     1212#ifdef HAVE_NTL
    12131213CanonicalForm
    12141214modGCDFp (const CanonicalForm& F, const CanonicalForm& G,
     
    12211221#endif
    12221222
    1223 #ifdef HAVE_NTL // primitiveElement, FindRoot
     1223#ifdef HAVE_NTL // mapPrimElem
    12241224CanonicalForm
    12251225modGCDFp (const CanonicalForm& F, const CanonicalForm&  G,
     
    21612161}
    21622162
    2163 #ifdef HAVE_NTL // primitiveElement,FindRoot
    21642163CanonicalForm
    21652164monicSparseInterpol (const CanonicalForm& F, const CanonicalForm& G,
     
    24452444  }
    24462445}
    2447 #endif
    2448 
    2449 #ifdef HAVE_NTL // primitiveElement, FindRoot
     2446
    24502447CanonicalForm
    24512448nonMonicSparseInterpol (const CanonicalForm& F, const CanonicalForm& G,
     
    30953092  }
    30963093}
    3097 #endif
    3098 
    3099 #ifdef HAVE_NTL // primitiveElement,FindRoot
     3094
    31003095CanonicalForm sparseGCDFq (const CanonicalForm& F, const CanonicalForm& G,
    31013096                           const Variable & alpha, CFList& l, bool& topLevel)
     
    35293524  } while (1);
    35303525}
    3531 #endif
    3532 
    3533 #ifdef HAVE_NTL // primitiveElement,FindRoot
     3526
    35343527CanonicalForm sparseGCDFp (const CanonicalForm& F, const CanonicalForm& G,
    35353528                           bool& topLevel, CFList& l)
     
    40394032  } while (1); //end of first do
    40404033}
    4041 #endif
    40424034
    40434035TIMING_DEFINE_PRINT(modZ_termination)
  • factory/cfModResultant.cc

    r9084a3 rb7cc2b  
    345345}
    346346
    347 #ifdef HAVE_NTL // primitiveElement
     347#ifdef HAVE_NTL // mapPrimElem
    348348CanonicalForm
    349349resultantFp (const CanonicalForm& A, const CanonicalForm& B, const Variable& x,
     
    557557  return result;
    558558}
    559 
    560 #ifdef HAVE_NTL // resultantFp
     559#ifdef HAVE_NTL // mapPrimitiveElem
    561560CanonicalForm
    562561resultantZ (const CanonicalForm& A, const CanonicalForm& B, const Variable& x,
  • factory/cf_cyclo.cc

    r9084a3 rb7cc2b  
    133133}
    134134
    135 #ifdef HAVE_NTL
    136135bool isPrimitive (const Variable& alpha, bool& fail)
    137136{
     
    147146    return false;
    148147}
    149 
    150 #endif
  • factory/cf_gcd.cc

    r9084a3 rb7cc2b  
    127127        fc=modGCDFp (fc, gc);
    128128    }
    129     else
    130     #endif
     129    #endif
     130    else
    131131    fc = subResGCD_p( fc, gc );
    132132  }
  • factory/cf_map_ext.cc

    r9084a3 rb7cc2b  
    2929#endif
    3030
     31#ifdef HAVE_FLINT
     32#include "FLINTconvert.h"
     33#endif
     34
    3135// cyclotomoic polys:
    3236#include "cf_cyclo.h"
     
    6165}
    6266
    63 #ifdef HAVE_NTL
    6467/// \f$ F_{p} (\alpha ) \subset F_{p}(\beta ) \f$ and \f$ \alpha \f$ is a
    6568/// primitive element, returns the image of \f$ \alpha \f$
     
    6871{
    6972  int p= getCharacteristic ();
     73  #ifdef HAVE_FLINT
     74    // convert mipo1
     75    nmod_poly_t mipo1;
     76    convertFacCF2nmod_poly_t(mipo1,getMipo(beta));
     77    fq_nmod_ctx_t ctx;
     78    fq_nmod_ctx_init_modulus(ctx,mipo1,"t");
     79    nmod_poly_clear(mipo1);
     80    // convert mipo2 (alpah)
     81    fq_nmod_poly_t mipo2;
     82    convertFacCF2Fq_nmod_poly_t(mipo2,getMipo(alpha),ctx);
     83    fq_nmod_poly_factor_t fac;
     84    fq_nmod_poly_factor_init(fac,ctx);
     85    fq_nmod_poly_roots(fac, mipo2, 0, ctx);
     86     // root of first factor:
     87    fq_nmod_t r0;
     88    fq_nmod_init(r0, ctx);
     89    fq_nmod_poly_get_coeff(r0,fac->poly,0,ctx);
     90    // convert
     91    CanonicalForm r1=convertFq_nmod_t2FacCF(r0,beta);
     92    // cleanup
     93    fq_nmod_poly_factor_clear(fac,ctx);
     94    fq_nmod_clear(r0, ctx);
     95    fq_nmod_poly_clear(mipo2,ctx);
     96    fq_nmod_ctx_clear(ctx);
     97    return r1;
     98  #elif defined(HAVE_NTL)
    7099  if (fac_NTL_char != p)
    71100  {
     
    78107  zz_pE root= FindRoot (NTL_alpha_mipo);
    79108  return convertNTLzzpE2CF (root, beta);
    80 }
    81 
    82 #endif
     109  #endif
     110}
     111
    83112
    84113/// the CanonicalForm G is the output of map_up, returns F considered as an
     
    306335}
    307336
    308 #ifdef HAVE_NTL // FindRoot
    309337CanonicalForm
    310338primitiveElement (const Variable& alpha, Variable& beta, bool& fail)
     
    323351  int d= degree (mipo);
    324352  int p= getCharacteristic ();
    325   //#if !defined(HAVE_FLINT) && defined(AHVE_NTL)
     353  #if !defined(HAVE_FLINT) && defined(HAVE_NTL)
    326354  if (fac_NTL_char != p)
    327355  {
     
    330358  }
    331359  zz_pX NTL_mipo;
    332   //#endif
     360  #endif
    333361  CanonicalForm mipo2;
    334362  primitive= false;
     
    337365  do
    338366  {
    339     //#ifdef HAVE_FLINT
    340     //nmod_poly_t Irredpoly;
    341     //nmod_poly_init(Irredpoly,p);
    342     //nmod_poly_randtest_monic_irreducible(Irredpoly, FLINTrandom, d+1);
    343     //mipo2=convertnmod_poly_t2FacCF(Irredpoly,Variable(1));
    344     //nmod_poly_clear(Irredpoly);
    345     //#elif defined(HAVE_NTL)
     367    #ifdef HAVE_FLINT
     368    nmod_poly_t Irredpoly;
     369    nmod_poly_init(Irredpoly,p);
     370    nmod_poly_randtest_monic_irreducible(Irredpoly, FLINTrandom, d+1);
     371    mipo2=convertnmod_poly_t2FacCF(Irredpoly,Variable(1));
     372    nmod_poly_clear(Irredpoly);
     373    #elif defined(HAVE_NTL)
    346374    BuildIrred (NTL_mipo, d);
    347375    mipo2= convertNTLzzpX2CF (NTL_mipo, Variable (1));
    348     //#endif
     376    #endif
    349377    if (!initialized)
    350378      beta= rootOf (mipo2);
     
    357385      return 0;
    358386  } while (1);
     387  #ifdef HAVE_FLINT
     388  // convert alpha_mipo
     389  nmod_poly_t alpha_mipo;
     390  convertFacCF2nmod_poly_t(alpha_mipo,mipo);
     391  fq_nmod_ctx_t ctx;
     392  fq_nmod_ctx_init_modulus(ctx,alpha_mipo,"t");
     393  nmod_poly_clear(alpha_mipo);
     394  // convert beta_mipo (mipo2)
     395  fq_nmod_poly_t FLINT_beta_mipo;
     396  convertFacCF2Fq_nmod_poly_t(FLINT_beta_mipo,mipo2,ctx);
     397  fq_nmod_poly_factor_t fac;
     398  fq_nmod_poly_factor_init(fac,ctx);
     399  fq_nmod_poly_roots(fac, FLINT_beta_mipo, 0, ctx);
     400  // root of first factor:
     401  fq_nmod_t r0;
     402  fq_nmod_init(r0, ctx);
     403  fq_nmod_poly_get_coeff(r0,fac->poly,0,ctx);
     404  // convert
     405  CanonicalForm r1=convertFq_nmod_t2FacCF(r0,alpha);
     406  // cleanup
     407  fq_nmod_poly_factor_clear(fac,ctx);
     408  fq_nmod_clear(r0, ctx);
     409  fq_nmod_poly_clear(FLINT_beta_mipo,ctx);
     410  fq_nmod_ctx_clear(ctx);
     411  return r1;
     412  #elif defined(NTL)
    359413  zz_pX alpha_mipo= convertFacCF2NTLzzpX (mipo);
    360414  zz_pE::init (alpha_mipo);
     
    362416  zz_pE root= FindRoot (NTL_beta_mipo);
    363417  return convertNTLzzpE2CF (root, alpha);
    364 }
    365 #endif
     418  #endif
     419}
    366420
    367421CanonicalForm
     
    383437}
    384438
    385 #ifdef HAVE_NTL
     439#ifdef HAVE_NTL // findMinPoly
    386440CanonicalForm
    387441mapPrimElem (const CanonicalForm& primElem, const Variable& alpha,
     
    394448    CanonicalForm primElemMipo= findMinPoly (primElem, alpha);
    395449    int p= getCharacteristic ();
     450    #ifdef HAVE_FLINT
     451    // convert mipo1
     452    nmod_poly_t mipo1;
     453    convertFacCF2nmod_poly_t(mipo1,getMipo(beta));
     454    fq_nmod_ctx_t ctx;
     455    fq_nmod_ctx_init_modulus(ctx,mipo1,"t");
     456    nmod_poly_clear(mipo1);
     457    // convert mipo2 (primElemMipo)
     458    fq_nmod_poly_t mipo2;
     459    convertFacCF2Fq_nmod_poly_t(mipo2,primElemMipo,ctx);
     460    fq_nmod_poly_factor_t fac;
     461    fq_nmod_poly_factor_init(fac,ctx);
     462    fq_nmod_poly_roots(fac, mipo2, 0, ctx);
     463     // root of first factor:
     464    fq_nmod_t r0;
     465    fq_nmod_init(r0, ctx);
     466    fq_nmod_poly_get_coeff(r0,fac->poly,0,ctx);
     467    // convert
     468    CanonicalForm r1=convertFq_nmod_t2FacCF(r0,alpha);
     469    // cleanup
     470    fq_nmod_poly_factor_clear(fac,ctx);
     471    fq_nmod_clear(r0, ctx);
     472    fq_nmod_poly_clear(mipo2,ctx);
     473    fq_nmod_ctx_clear(ctx);
     474    return r1;
     475    #elif defined(HAVE_NTL)
    396476    if (fac_NTL_char != p)
    397477    {
     
    404484    zz_pE root= FindRoot (NTLPrimElemMipo);
    405485    return convertNTLzzpE2CF (root, beta);
    406   }
    407 }
    408 
     486    #endif
     487  }
     488}
     489#endif
     490
     491#ifdef HAVE_NTL
    409492CanonicalForm
    410493map (const CanonicalForm& primElem, const Variable& alpha,
  • factory/facAbsBiFact.cc

    r9084a3 rb7cc2b  
    3232
    3333#ifdef HAVE_NTL
    34 
    3534TIMING_DEFINE_PRINT(fac_Qa_factorize)
    3635TIMING_DEFINE_PRINT(fac_evalpoint)
     
    780779  return result;
    781780}
    782 
    783781#endif
    784 
    785 
  • factory/facAbsFact.cc

    r9084a3 rb7cc2b  
    3636#endif
    3737
    38 #ifdef HAVE_NTL
     38#if defined(HAVE_NTL)
    3939TIMING_DEFINE_PRINT(abs_fac_bi_factorizer)
    4040TIMING_DEFINE_PRINT(abs_fac_hensel_lift)
  • factory/facAbsFact.h

    r9084a3 rb7cc2b  
    1616#include "facAbsBiFact.h"
    1717
    18 #ifdef HAVE_NTL
     18#if defined(HAVE_NTL)
    1919/// main absolute factorization routine, expects poly which is
    2020/// irreducible over Q
     
    3232
    3333/*BEGINPUBLIC*/
    34 #ifdef HAVE_NTL
     34#if defined(HAVE_NTL)
    3535/// absolute factorization of a multivariate poly over Q
    3636///
Note: See TracChangeset for help on using the changeset viewer.