Changeset 4a7a45 in git for factory/canonicalform.cc


Ignore:
Timestamp:
Jul 29, 2020, 5:33:12 PM (4 years ago)
Author:
Hans Schoenemann <hannes@…>
Branches:
(u'spielwiese', '4a9821a93ffdc22a6696668bd4f6b8c9de3e6c5f')
Children:
700b89d0131c4b3d214f49af1eeb67501875ec89
Parents:
4772b1b4621f2ab68acc9d2b5a568604d4d5e790
Message:
fix: factorize in Z[x,..] w/o NTL
File:
1 edited

Legend:

Unmodified
Added
Removed
  • factory/canonicalform.cc

    r4772b1 r4a7a45  
    1515#include "cf_algorithm.h"
    1616#include "imm.h"
     17#include "int_pp.h"
    1718#include "gfops.h"
    1819#include "facMul.h"
    1920#include "facAlgFuncUtil.h"
    2021#include "FLINTconvert.h"
     22#include "cf_binom.h"
    2123
    2224#ifndef NOSTREAMIO
     
    204206}
    205207
     208
    206209CanonicalForm
    207210CanonicalForm::mapinto () const
     
    216219            else
    217220                return *this;
     221        else  if ( CFFactory::gettype() == PrimePowerDomain )
     222            return CanonicalForm( CFFactory::basic( imm2int( value ) ) );
    218223        else  if ( getGFDegree() == 1 )
    219224            return CanonicalForm( int2imm_p( ff_norm( imm2int( value ) ) ) );
     
    222227    else  if ( value->inBaseDomain() )
    223228        if ( getCharacteristic() == 0 )
    224              return *this;
     229            if ( value->levelcoeff() == PrimePowerDomain )
     230            {
     231              mpz_t d;
     232              getmpi( value,d);
     233              if ( mpz_cmp( InternalPrimePower::primepowhalf, d ) < 0 )
     234                mpz_sub( d, d, InternalPrimePower::primepow );
     235              return CFFactory::basic( d );
     236            }
     237            else
     238                return *this;
     239        else  if ( CFFactory::gettype() == PrimePowerDomain )
     240        {
     241            ASSERT( value->levelcoeff() == PrimePowerDomain || value->levelcoeff() == IntegerDomain, "no proper map defined" );
     242            if ( value->levelcoeff() == PrimePowerDomain )
     243                return *this;
     244            else
     245            {
     246              mpz_t d;
     247              getmpi(value,d);
     248              if ( mpz_cmp( InternalPrimePower::primepowhalf, d ) < 0 )
     249                mpz_sub( d, d, InternalPrimePower::primepow );
     250              return CFFactory::basic( d );
     251            }
     252        }
    225253        else
    226254        {
     
    248276    }
    249277}
    250 
    251278/** CanonicalForm CanonicalForm::lc (), Lc (), LC (), LC ( v ) const
    252279 *
     
    19351962    return cf_glob_switches.isOn( sw );
    19361963}
     1964
     1965#ifndef HAVE_NTL
     1966static int initialized=0;
     1967int
     1968initCanonicalForm( void )
     1969{
     1970  if ( ! initialized )
     1971  {
     1972    initPT();
     1973    initialized = true;
     1974  }
     1975}
     1976#endif
     1977
Note: See TracChangeset for help on using the changeset viewer.