Changeset 6620d75 in git


Ignore:
Timestamp:
Aug 13, 2009, 5:17:03 PM (14 years ago)
Author:
Hans Schönemann <hannes@…>
Branches:
(u'spielwiese', '0d6b7fcd9813a1ca1ed4220cfa2b104b97a0a003')
Children:
6b9d0537f5dd5461f48626224cc9ca9c391990d8
Parents:
ab33f6e148aa2f8f6099e5a25a55a07f1e7fdd2b
Message:
*hannes: more ring indep. stuff


git-svn-id: file:///usr/local/Singular/svn/trunk@12056 2c84dea3-7e68-4137-9b89-c4e89433aadc
Location:
kernel
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • kernel/clapconv.cc

    rab33f6e r6620d75  
    33*  Computer Algebra System SINGULAR     *
    44****************************************/
    5 // $Id: clapconv.cc,v 1.14 2009-08-13 12:48:39 Singular Exp $
     5// $Id: clapconv.cc,v 1.15 2009-08-13 15:17:02 Singular Exp $
    66/*
    77* ABSTRACT: convert data between Singular and factory
     
    3131static void conv_RecPP ( const CanonicalForm & f, int * exp, sBucket_pt result, ring r );
    3232
    33 static void convRecPTr ( const CanonicalForm & f, int * exp, napoly & result );
    34 
    35 static void convRecTrP ( const CanonicalForm & f, int * exp, poly & result, int offs );
     33static void convRecTrP ( const CanonicalForm & f, int * exp, poly & result, int offs, const ring r );
    3634
    3735static void convRecGFGF ( const CanonicalForm & f, int * exp, poly & result );
     
    9795}
    9896
    99 CanonicalForm convSingPFactoryP( poly p, const ring r )
    100 {
    101   CanonicalForm result = 0;
    102   int e, n = r->N;
    103   assume( rPar(r)==0);
    104 
    105   if ( getCharacteristic() != 0 )
    106   {
    107     /* does only work for finite fields Z/p*/
    108     while ( p != NULL )
    109     {
    110       CanonicalForm term = npInt( pGetCoeff( p ) );
    111       for ( int i = n; i >0; i-- )
    112       {
    113         if ( (e = p_GetExp( p, i, r )) != 0 )
    114            term *= power( Variable( i ), e );
    115       }
    116       result += term;
    117       pIter( p );
    118     }
    119   }
    120   else
    121   {
    122     while ( p != NULL )
    123     {
    124       CanonicalForm term;
    125       if ( SR_HDL(pGetCoeff( p )) & SR_INT )
    126       {
    127         term = SR_TO_INT( pGetCoeff( p ) );
    128       }
    129       else
    130       {
    131         if ( pGetCoeff( p )->s == 3 )
    132         {
    133           MP_INT dummy;
    134           mpz_init_set( &dummy, &(pGetCoeff( p )->z) );
    135           term = make_cf( dummy );
    136         }
    137         else
    138         {
    139           // assume s==1 or s==0
    140           MP_INT num, den;
    141           On(SW_RATIONAL);
    142           mpz_init_set( &num, &(pGetCoeff( p )->z) );
    143           mpz_init_set( &den, &(pGetCoeff( p )->n) );
    144           term = make_cf( num, den, ( pGetCoeff( p )->s != 1 ));
    145         }
    146       }
    147       for ( int i = n; i >0; i-- )
    148       {
    149         if ( (e = p_GetExp( p, i, r )) != 0 )
    150            term *= power( Variable( i ), e );
    151       }
    152       result += term;
    153       pIter( p );
    154     }
    155   }
    156   return result;
    157 }
    158 
    15997poly convFactoryPSingP ( const CanonicalForm & f, const ring r )
    16098{
    16199//    cerr << " f = " << f << endl;
    162   int n = r->N+1;
     100  int n = rVar(r)+1;
    163101  /* ASSERT( level( f ) <= pVariables, "illegal number of variables" ); */
    164102  int * exp = (int*)omAlloc0(n*sizeof(int));
     
    224162
    225163
    226 CanonicalForm convSingTrFactoryP( napoly p )
     164CanonicalForm convSingPFactoryP( poly p, const int off, const ring r )
    227165{
    228166  CanonicalForm result = 0;
    229   int e, n = rPar(currRing);
     167  int e, n = rVar(r);
    230168
    231169  while ( p!=NULL)
     
    233171    CanonicalForm term;
    234172    /* does only work for finite fields */
    235     if ( getCharacteristic() != 0 )
     173    if ( rField_is_Zp(r) )
    236174    {
    237175      term = npInt( pGetCoeff( p ) );
    238176    }
    239     else
     177    else if (rField_is_Q(r))
    240178    {
    241179      if ( SR_HDL(pGetCoeff( p )) & SR_INT )
     
    260198      }
    261199    }
     200    else
     201    {
     202      WerrorS("conversion error");
     203      return result;
     204    }
    262205    for ( int i = n; i >0; i-- )
    263206    {
    264       if ( (e = p_GetExp( p, i, currRing->algring )) != 0 )
    265         term *= power( Variable( i ), e );
     207      if ( (e = p_GetExp( p, i, r)) != 0 )
     208        term *= power( Variable( i+off ), e );
    266209    }
    267210    result += term;
     
    269212  }
    270213  return result;
    271 }
    272 
    273 napoly convFactoryPSingTr ( const CanonicalForm & f )
    274 {
    275 //    cerr << " f = " << f << endl;
    276   int n = rPar(currRing)+1;
    277   /* ASSERT( level( f ) <= rPar(currRing), "illegal number of variables" ); */
    278   int * exp = (int *)omAlloc0(n*sizeof(int));
    279   napoly result = NULL;
    280   convRecPTr( f, exp, result );
    281   omFreeSize((ADDRESS)exp,n*sizeof(int));
    282   return result;
    283 }
    284 
    285 static void convRecPTr ( const CanonicalForm & f, int * exp, napoly & result )
    286 {
    287   if (f.isZero())
    288     return;
    289   if ( ! f.inCoeffDomain() )
    290   {
    291     int l = f.level();
    292     for ( CFIterator i = f; i.hasTerms(); i++ )
    293     {
    294         exp[l] = i.exp();
    295         convRecPTr( i.coeff(), exp, result );
    296     }
    297     exp[l] = 0;
    298   }
    299   else
    300   {
    301     napoly term = napNew();
    302     // napNext( term ) = NULL; //already done by napNew
    303     for ( int i = rPar(currRing); i>=1; i-- )
    304       p_SetExp( term, i , exp[i],currRing->algring);
    305     p_Setm(term, currRing->algring);
    306     if ( f.isImm() )
    307       pGetCoeff( term ) = n_Init( f.intval(), currRing->algring );
    308     else
    309     {
    310       number z=(number)omAllocBin(rnumber_bin);
    311 #if defined(LDEBUG)
    312       z->debug=123456;
    313 #endif
    314       z->z = gmp_numerator( f );
    315       if ( f.den().isOne() )
    316       {
    317         z->s = 3;
    318       }
    319       else
    320       {
    321         z->n = gmp_denominator( f );
    322         if (mpz_cmp_si(&z->n,(long)1)==0)
    323         {
    324           mpz_clear(&z->n);
    325           z->s=3;
    326         }
    327         else
    328         {
    329           z->s = 0;
    330           n_Normalize(z,currRing->algring);
    331         }
    332       }
    333       pGetCoeff( term ) = z;
    334     }
    335     if (n_IsZero(pGetCoeff(term),currRing->algring))
    336     {
    337       napDelete(&term);
    338     }
    339     else
    340     {
    341       result = napAdd( result, term );
    342     }
    343   }
    344214}
    345215
     
    530400}
    531401
    532 CanonicalForm convSingTrPFactoryP ( poly p )
     402CanonicalForm convSingTrPFactoryP ( poly p, const ring r )
    533403{
    534404  CanonicalForm result = 0;
    535   int e, n = pVariables;
    536   int offs = rPar(currRing);
     405  int e, n = rVar(r);
     406  int offs = rPar(r);
    537407
    538408  while ( p!=NULL )
    539409  {
    540     nNormalize(pGetCoeff(p));
    541     CanonicalForm term=convSingTrFactoryP(((lnumber)pGetCoeff(p))->z);
     410    n_Normalize(pGetCoeff(p),r);
     411    CanonicalForm term=convSingPFactoryP(((lnumber)pGetCoeff(p))->z,0,r->algring);
    542412
    543413    if ((((lnumber)pGetCoeff(p))->n!=NULL)
     
    549419    for ( int i = n; i > 0; i-- )
    550420    {
    551       if ( (e = pGetExp( p, i )) != 0 )
     421      if ( (e = p_GetExp( p, i,r )) != 0 )
    552422        term = term * power( Variable( i + offs ), e );
    553423    }
     
    558428}
    559429
    560 poly convFactoryPSingTrP ( const CanonicalForm & f )
    561 {
    562   int n = pVariables+1;
     430poly convFactoryPSingTrP ( const CanonicalForm & f, const ring r )
     431{
     432  int n = rVar(r)+1;
    563433  int * exp = (int*)omAlloc0(n*sizeof(int));
    564434  poly result = NULL;
    565   convRecTrP( f, exp, result , rPar(currRing) );
     435  convRecTrP( f, exp, result , rPar(r), r );
    566436  omFreeSize((ADDRESS)exp,n*sizeof(int));
    567437  return result;
     
    569439
    570440static void
    571 convRecTrP ( const CanonicalForm & f, int * exp, poly & result , int offs)
     441convRecTrP ( const CanonicalForm & f, int * exp, poly & result , int offs, const ring r)
    572442{
    573443  if (f.isZero())
     
    579449    {
    580450      exp[l-offs] = i.exp();
    581       convRecTrP( i.coeff(), exp, result, offs );
     451      convRecTrP( i.coeff(), exp, result, offs, r );
    582452    }
    583453    exp[l-offs] = 0;
     
    585455  else
    586456  {
    587     poly term = pInit();
     457    poly term = p_Init(r);
    588458    pNext( term ) = NULL;
    589     for ( int i = 1; i <= pVariables; i++ )
    590       pSetExp( term, i ,exp[i]);
     459    for ( int i = rVar(r); i>0; i-- )
     460      p_SetExp( term, i ,exp[i], r);
    591461    //if (rRing_has_Comp(currRing)) p_SetComp(term, 0, currRing); // done by pInit
    592462    pGetCoeff(term)=(number)omAlloc0Bin(rnumber_bin);
    593     ((lnumber)pGetCoeff(term))->z=convFactoryPSingTr( f );
    594     pSetm( term );
    595     result = pAdd( result, term );
     463    ((lnumber)pGetCoeff(term))->z=convFactoryPSingP( f, r->algring );
     464    p_Setm( term,r );
     465    result = p_Add_q( result, term,r );
    596466  }
    597467}
  • kernel/clapconv.h

    rab33f6e r6620d75  
    33*  Computer Algebra System SINGULAR     *
    44****************************************/
    5 // $Id: clapconv.h,v 1.4 2009-08-13 12:48:39 Singular Exp $
     5// $Id: clapconv.h,v 1.5 2009-08-13 15:17:02 Singular Exp $
    66/*
    77* ABSTRACT: convert data between Singular and factory
     
    1616#include <factory.h>
    1717
    18 napoly convFactoryPSingTr ( const CanonicalForm & f );
    19 CanonicalForm convSingTrFactoryP( napoly p );
    20 
    2118poly convFactoryPSingP ( const CanonicalForm & f, const ring r=currRing );
    22 CanonicalForm convSingPFactoryP( poly p, const ring r=currRing );
     19CanonicalForm convSingPFactoryP( poly p, const int off=0, const ring r=currRing );
    2320
    2421CanonicalForm convSingAPFactoryAP ( poly p , const Variable & a );
     
    3229napoly convFactoryASingA ( const CanonicalForm & f );
    3330
    34 CanonicalForm convSingTrPFactoryP ( poly p );
    35 poly convFactoryPSingTrP ( const CanonicalForm & f );
     31CanonicalForm convSingTrPFactoryP ( poly p, const ring r=currRing );
     32poly convFactoryPSingTrP ( const CanonicalForm & f, const ring r=currRing );
    3633
    3734CanonicalForm convSingNFactoryN( number n );
  • kernel/clapsing.cc

    rab33f6e r6620d75  
    33*  Computer Algebra System SINGULAR     *
    44****************************************/
    5 // $Id: clapsing.cc,v 1.41 2009-08-13 12:48:39 Singular Exp $
     5// $Id: clapsing.cc,v 1.42 2009-08-13 15:17:02 Singular Exp $
    66/*
    77* ABSTRACT: interface between Singular and factory
     
    2727void out_cf(char *s1,const CanonicalForm &f,char *s2);
    2828
    29 poly singclap_gcd ( poly f, poly g )
    30 {
    31   poly res=NULL;
    32 
    33   if (f!=NULL) pCleardenom(f);
    34   if (g!=NULL) pCleardenom(g);
    35   else         return f; // g==0 => gcd=f (but do a pCleardenom)
    36   if (f==NULL) return g; // f==0 => gcd=g (but do a pCleardenom)
    37 
    38   if (pIsConstantPoly(f) || pIsConstantPoly(g))
    39   {
    40     pDelete(&f);
    41     pDelete(&g);
    42     return pOne();
    43   }
    44 
    45   // for now there is only the possibility to handle polynomials over
    46   // Q and Fp ...
    47   Off(SW_RATIONAL);
    48   if (( nGetChar() == 0 || nGetChar() > 1 )
    49   && (currRing->parameter==NULL))
    50   {
    51     CanonicalForm newGCD(const CanonicalForm & A, const CanonicalForm & B);
    52     setCharacteristic( nGetChar() );
    53     CanonicalForm F( convSingPFactoryP( f ) ), G( convSingPFactoryP( g ) );
    54     //if (nGetChar() > 1 )
    55     //{
    56     //  res=convFactoryPSingP( newGCD( F,G ));
    57     //  if (!nGreaterZero(pGetCoeff(res))) res=pNeg(res);
    58     //}
    59     //else
    60       res=convFactoryPSingP( gcd( F, G ) );
    61   }
    62   // and over Q(a) / Fp(a)
    63   else if (( nGetChar()==1 ) /* Q(a) */
    64   || (nGetChar() <-1))       /* Fp(a) */
    65   {
    66     if (nGetChar()==1) setCharacteristic( 0 );
    67     else               setCharacteristic( -nGetChar() );
    68     if (currRing->minpoly!=NULL)
    69     {
    70     #if 0
    71       if (( nGetChar()==1 ) /* Q(a) */ && (!isOn(SW_USE_QGCD)))
    72       {
    73       //  WerrorS( feNotImplemented );
    74         CanonicalForm mipo=convSingTrFactoryP(((lnumber)currRing->minpoly)->z);
    75         //Varlist ord;
    76         //ord.append(mipo.mvar());
    77         CFList as(mipo);
    78         Variable a=rootOf(mipo);
    79         //CanonicalForm F( convSingAPFactoryAP( f,a ) ), G( convSingAPFactoryAP( g,a ) );
    80         CanonicalForm F( convSingTrPFactoryP(f) ), G( convSingTrPFactoryP(g) );
    81         //res= convFactoryAPSingAP( algcd( F, G, as, ord) );
    82         //res= convFactoryAPSingAP( alg_gcd( F, G, as) );
    83         res= convFactoryAPSingAP( alg_gcd( F, G, as) );
    84       }
    85       else
    86       #endif
    87       {
    88         bool b=isOn(SW_USE_QGCD);
    89         if ( nGetChar()==1 ) On(SW_USE_QGCD);
    90         CanonicalForm mipo=convSingTrFactoryP(((lnumber)currRing->minpoly)->z);
    91         Variable a=rootOf(mipo);
    92         CanonicalForm F( convSingAPFactoryAP( f,a ) ), G( convSingAPFactoryAP( g,a ) );
    93         res= convFactoryAPSingAP( gcd( F, G ) );
    94         if (!b) Off(SW_USE_QGCD);
    95       }
    96     }
    97     else
    98     {
    99       CanonicalForm F( convSingTrPFactoryP( f ) ), G( convSingTrPFactoryP( g ) );
    100       res= convFactoryPSingTrP( gcd( F, G ) );
    101     }
    102   }
    103   #if 0
    104   else if (( nGetChar()>1 )&&(currRing->parameter!=NULL)) /* GF(q) */
    105   {
    106     int p=rChar(currRing);
    107     int n=2;
    108     int t=p*p;
    109     while (t!=nChar) { t*=p;n++; }
    110     setCharacteristic(p,n,'a');
    111     CanonicalForm F( convSingGFFactoryGF( f ) ), G( convSingGFFactoryGF( g ) );
    112     res= convFactoryGFSingGF( gcd( F, G ) );
    113   }
    114   #endif
    115   else
    116     WerrorS( feNotImplemented );
    117 
    118   Off(SW_RATIONAL);
    119   pDelete(&f);
    120   pDelete(&g);
    121   pTest(res);
    122   return res;
    123 }
    124 
    12529poly singclap_gcd_r ( poly f, poly g, const ring r )
    12630{
     
    14145    CanonicalForm newGCD(const CanonicalForm & A, const CanonicalForm & B);
    14246    setCharacteristic( n_GetChar(r) );
    143     CanonicalForm F( convSingPFactoryP( f,r ) ), G( convSingPFactoryP( g, r ) );
     47    CanonicalForm F( convSingPFactoryP( f,0,r ) ), G( convSingPFactoryP( g,0, r ) );
    14448    //if (nGetChar() > 1 )
    14549    //{
     
    15054      res=convFactoryPSingP( gcd( F, G ) , r);
    15155  }
     56  // and over Q(a) / Fp(a)
     57  else if (( n_GetChar(r)==1 ) /* Q(a) */
     58  || (n_GetChar(r) <-1))       /* Fp(a) */
     59  {
     60    if (n_GetChar(r)==1) setCharacteristic( 0 );
     61    else                 setCharacteristic( -n_GetChar(r) );
     62    if (r->minpoly!=NULL)
     63    {
     64    #if 0
     65      if (( n_GetChar(r)==1 ) /* Q(a) */ && (!isOn(SW_USE_QGCD)))
     66      {
     67      //  WerrorS( feNotImplemented );
     68        CanonicalForm mipo=convSingPFactoryP(((lnumber)r->minpoly)->z,0,r->algring);
     69        //Varlist ord;
     70        //ord.append(mipo.mvar());
     71        CFList as(mipo);
     72        Variable a=rootOf(mipo);
     73        //CanonicalForm F( convSingAPFactoryAP( f,a,r ) ), G( convSingAPFactoryAP( g,a,r ) );
     74        CanonicalForm F( convSingTrPFactoryP(f,r) ), G( convSingTrPFactoryP(g,r) );
     75        //res= convFactoryAPSingAP( algcd( F, G, as, ord) );
     76        //res= convFactoryAPSingAP( alg_gcd( F, G, as) );
     77        res= convFactoryAPSingAP( alg_gcd( F, G, as),r );
     78      }
     79      else
     80      #endif
     81      {
     82        bool b=isOn(SW_USE_QGCD);
     83        if ( nGetChar()==1 ) On(SW_USE_QGCD);
     84        CanonicalForm mipo=convSingPFactoryP(((lnumber)r->minpoly)->z,
     85                                           0,r->algring);
     86        Variable a=rootOf(mipo);
     87        CanonicalForm F( convSingAPFactoryAP( f,a ) ),
     88                      G( convSingAPFactoryAP( g,a ) );
     89        res= convFactoryAPSingAP( gcd( F, G ) );
     90        if (!b) Off(SW_USE_QGCD);
     91      }
     92    }
     93    else
     94    {
     95      CanonicalForm F( convSingTrPFactoryP( f,r ) ), G( convSingTrPFactoryP( g,r ) );
     96      res= convFactoryPSingTrP( gcd( F, G ),r );
     97    }
     98  }
     99  #if 0
     100  else if (( n_GetChar(r)>1 )&&(r->parameter!=NULL)) /* GF(q) */
     101  {
     102    int p=rChar(r);
     103    int n=2;
     104    int t=p*p;
     105    while (t!=n_Char(r)) { t*=p;n++; }
     106    setCharacteristic(p,n,'a');
     107    CanonicalForm F( convSingGFFactoryGF( f,r ) ), G( convSingGFFactoryGF( g,r ) );
     108    res= convFactoryGFSingGF( gcd( F, G ),r );
     109  }
     110  #endif
    152111  else
    153112    WerrorS( feNotImplemented );
    154113
    155114  Off(SW_RATIONAL);
     115  return res;
     116}
     117
     118poly singclap_gcd ( poly f, poly g )
     119{
     120  poly res=NULL;
     121
     122  if (f!=NULL) pCleardenom(f);
     123  if (g!=NULL) pCleardenom(g);
     124  else         return f; // g==0 => gcd=f (but do a pCleardenom)
     125  if (f==NULL) return g; // f==0 => gcd=g (but do a pCleardenom)
     126
     127  res=singclap_gcd_r(f,g,currRing);
     128  pDelete(&f);
     129  pDelete(&g);
    156130  return res;
    157131}
     
    204178    {
    205179      //Variable X(i);
    206       CanonicalForm mipo=convSingTrFactoryP(((lnumber)currRing->minpoly)->z);
     180      CanonicalForm mipo=convSingPFactoryP(((lnumber)currRing->minpoly)->z,
     181                                                 0,currRing->algring);
    207182      Variable a=rootOf(mipo);
    208183      CanonicalForm F( convSingAPFactoryAP( f,a ) ), G( convSingAPFactoryAP( g,a ) );
     
    345320    if (currRing->minpoly!=NULL)
    346321    {
    347       CanonicalForm mipo=convSingTrFactoryP(((lnumber)currRing->minpoly)->z);
     322      CanonicalForm mipo=convSingPFactoryP(((lnumber)currRing->minpoly)->z,
     323                                                 0,currRing->algring);
    348324      Variable a=rootOf(mipo);
    349325      CanonicalForm F( convSingAPFactoryAP( f,a ) ), G( convSingAPFactoryAP( g,a ) );
     
    373349      pa=convFactoryPSingTrP(Fa);
    374350      pb=convFactoryPSingTrP(Gb);
     351    }
     352    Off(SW_RATIONAL);
     353  }
     354  else
     355  {
     356    WerrorS( feNotImplemented );
     357    return TRUE;
     358  }
     359  return FALSE;
     360}
     361
     362BOOLEAN singclap_extgcd_r ( poly f, poly g, poly &res, poly &pa, poly &pb, const ring r )
     363{
     364  // for now there is only the possibility to handle univariate
     365  // polynomials over
     366  // Q and Fp ...
     367  res=NULL;pa=NULL;pb=NULL;
     368  On(SW_SYMMETRIC_FF);
     369  if (( n_GetChar(r) == 0 || n_GetChar(r) > 1 )
     370  && (r->parameter==NULL))
     371  {
     372    setCharacteristic( n_GetChar(r) );
     373    CanonicalForm F( convSingPFactoryP( f,0,r ) ), G( convSingPFactoryP( g,0,r) );
     374    CanonicalForm FpG=F+G;
     375    if (!(FpG.isUnivariate()|| FpG.inCoeffDomain()))
     376    //if (!F.isUnivariate() || !G.isUnivariate() || F.mvar()!=G.mvar())
     377    {
     378      Off(SW_RATIONAL);
     379      WerrorS("not univariate");
     380      return TRUE;
     381    }
     382    CanonicalForm Fa,Gb;
     383    On(SW_RATIONAL);
     384    res=convFactoryPSingP( extgcd( F, G, Fa, Gb ),r );
     385    pa=convFactoryPSingP(Fa,r);
     386    pb=convFactoryPSingP(Gb,r);
     387    Off(SW_RATIONAL);
     388  }
     389  // and over Q(a) / Fp(a)
     390  else if (( n_GetChar(r)==1 ) /* Q(a) */
     391  || (n_GetChar(r) <-1))       /* Fp(a) */
     392  {
     393    if (n_GetChar(r)==1) setCharacteristic( 0 );
     394    else                 setCharacteristic( -n_GetChar(r) );
     395    CanonicalForm Fa,Gb;
     396    if (r->minpoly!=NULL)
     397    {
     398      CanonicalForm mipo=convSingPFactoryP(((lnumber)r->minpoly)->z,
     399                                            0,r->algring);
     400      Variable a=rootOf(mipo);
     401      CanonicalForm F( convSingAPFactoryAP( f,a ) ),
     402                    G( convSingAPFactoryAP( g,a ) );
     403      CanonicalForm FpG=F+G;
     404      if (!(FpG.isUnivariate()|| FpG.inCoeffDomain()))
     405      //if (!F.isUnivariate() || !G.isUnivariate() || F.mvar()!=G.mvar())
     406      {
     407        WerrorS("not univariate");
     408        return TRUE;
     409      }
     410      res= convFactoryAPSingAP( extgcd( F, G, Fa, Gb ) );
     411      pa=convFactoryAPSingAP(Fa);
     412      pb=convFactoryAPSingAP(Gb);
     413    }
     414    else
     415    {
     416      CanonicalForm F( convSingTrPFactoryP( f, r ) ), G( convSingTrPFactoryP( g, r ) );
     417      CanonicalForm FpG=F+G;
     418      if (!(FpG.isUnivariate()|| FpG.inCoeffDomain()))
     419      //if (!F.isUnivariate() || !G.isUnivariate() || F.mvar()!=G.mvar())
     420      {
     421        Off(SW_RATIONAL);
     422        WerrorS("not univariate");
     423        return TRUE;
     424      }
     425      res= convFactoryPSingTrP( extgcd( F, G, Fa, Gb ), r );
     426      pa=convFactoryPSingTrP(Fa, r);
     427      pb=convFactoryPSingTrP(Gb, r);
    375428    }
    376429    Off(SW_RATIONAL);
     
    405458    if (currRing->minpoly!=NULL)
    406459    {
    407       CanonicalForm mipo=convSingTrFactoryP(((lnumber)currRing->minpoly)->z);
     460      CanonicalForm mipo=convSingPFactoryP(((lnumber)currRing->minpoly)->z,
     461                                                 0,currRing->algring);
    408462      Variable a=rootOf(mipo);
    409463      CanonicalForm F( convSingAPFactoryAP( f,a ) ), G( convSingAPFactoryAP( g,a ) );
     
    492546      pIter(p);
    493547    }
    494     g = convSingTrFactoryP( ((lnumber)g1)->z );
    495     g = gcd( g, convSingTrFactoryP( ((lnumber)g2)->z ));
     548    g = convSingPFactoryP( ((lnumber)g1)->z, 0,currRing->algring );
     549    g = gcd( g, convSingPFactoryP( ((lnumber)g2)->z , 0,currRing->algring));
    496550
    497551    // second run: gcd's
     
    500554    while ( (p != NULL) && (g != 1)  && ( g != 0))
    501555    {
    502       h = convSingTrFactoryP( ((lnumber)pGetCoeff(p))->z );
     556      h = convSingPFactoryP( ((lnumber)pGetCoeff(p))->z, 0,currRing->algring );
    503557      pIter( p );
    504558
     
    519573        lnumber c=(lnumber)pGetCoeff(p);
    520574        napDelete(&c->z);
    521         c->z=convFactoryPSingTr( i.getItem() / g );
     575        c->z=convFactoryPSingP( i.getItem() / g, currRing->algring );
    522576        //nTest((number)c);
    523577        //#ifdef LDEBUG
     
    566620      if (currRing->minpoly!=NULL)
    567621      {
    568         CanonicalForm mipo=convSingTrFactoryP(((lnumber)currRing->minpoly)->z);
     622        CanonicalForm mipo=convSingPFactoryP(((lnumber)currRing->minpoly)->z,
     623                                    0,currRing->algring);
    569624        a=rootOf(mipo);
    570625        F=convSingAPFactoryAP( f,a );
     
    789844    if (currRing->minpoly!=NULL)
    790845    {
    791       CanonicalForm mipo=convSingTrFactoryP(((lnumber)currRing->minpoly)->z);
     846      CanonicalForm mipo=convSingPFactoryP(((lnumber)currRing->minpoly)->z,
     847                   0,currRing->algring);
    792848      Variable a=rootOf(mipo);
    793849      CanonicalForm F( convSingAPFactoryAP( f,a ) );
     
    11331189    if (currRing->minpoly!=NULL)
    11341190    {
    1135       CanonicalForm mipo=convSingTrFactoryP(((lnumber)currRing->minpoly)->z);
     1191      CanonicalForm mipo=convSingPFactoryP(((lnumber)currRing->minpoly)->z,
     1192                    0,currRing->algring);
    11361193      Variable a=rootOf(mipo);
    11371194      CanonicalForm F( convSingAPFactoryAP( f,a ) );
     
    13861443    //if (currRing->minpoly!=NULL)
    13871444    //{
    1388     //  CanonicalForm mipo=convSingTrFactoryP(((lnumber)currRing->minpoly)->z);
     1445    //  CanonicalForm mipo=convSingPFactoryP(((lnumber)currRing->minpoly)->z,
     1446    //                                             0,currRing->algring);
    13891447    //  Variable a=rootOf(mipo);
    13901448    //  CanonicalForm F( convSingAPFactoryAP( f,a ) );
     
    14401498    if (currRing->minpoly!=NULL)
    14411499    {
    1442       CanonicalForm mipo=convSingTrFactoryP(((lnumber)currRing->minpoly)->z);
     1500      CanonicalForm mipo=convSingPFactoryP(((lnumber)currRing->minpoly)->z,
     1501                                            0,currRing->algring);
    14431502      Variable a=rootOf(mipo);
    14441503      int i,j;
     
    14971556 if (currRing->minpoly!=NULL)
    14981557 {
    1499    CanonicalForm mipo=convSingTrFactoryP(((lnumber)currRing->minpoly)->z);
     1558   CanonicalForm mipo=convSingPFactoryP(((lnumber)currRing->minpoly)->z,
     1559                                         0,currRing->algring);
    15001560   Variable a=rootOf(mipo);
    15011561   CanonicalForm F( convSingAFactoryA( f,a ) ), G( convSingAFactoryA( g,a ) );
     
    15101570 else
    15111571 {
    1512    CanonicalForm F( convSingTrFactoryP( f ) ), G( convSingTrFactoryP( g ) );
     1572   CanonicalForm F( convSingPFactoryP( f,0,currRing->algring ) ),
     1573                 G( convSingPFactoryP( g,0,currRing->algring ) );
    15131574   CanonicalForm GCD;
    15141575   // calculate gcd
     
    15161577
    15171578   // calculate lcm
    1518    res= convFactoryPSingTr( (F/GCD)*G );
     1579   res= convFactoryPSingP( (F/GCD)*G, currRing->algring );
    15191580 }
    15201581
     
    15331594 if (currRing->minpoly!=NULL)
    15341595 {
    1535    CanonicalForm mipo=convSingTrFactoryP(((lnumber)currRing->minpoly)->z);
     1596   CanonicalForm mipo=convSingPFactoryP(((lnumber)currRing->minpoly)->z,
     1597                         0,currRing->algring);
    15361598   Variable a=rootOf(mipo);
    15371599   CanonicalForm F( convSingAFactoryA( f,a ) ), G( convSingAFactoryA( g,a ) );
     
    15481610 else
    15491611 {
    1550    CanonicalForm F( convSingTrFactoryP( f ) ), G( convSingTrFactoryP( g ) );
     1612   CanonicalForm F( convSingPFactoryP( f,0,currRing->algring ) ),
     1613                 G( convSingPFactoryP( g,0,currRing->algring ) );
    15511614   CanonicalForm GCD;
    15521615
     
    15551618   if ((GCD!=1) && (GCD!=0))
    15561619   {
    1557      ff= convFactoryPSingTr( F/ GCD );
    1558      gg= convFactoryPSingTr( G/ GCD );
     1620     ff= convFactoryPSingP( F/ GCD, currRing->algring );
     1621     gg= convFactoryPSingP( G/ GCD, currRing->algring );
    15591622   }
    15601623 }
  • kernel/clapsing.h

    rab33f6e r6620d75  
    33*  Computer Algebra System SINGULAR     *
    44****************************************/
    5 // $Id: clapsing.h,v 1.3 2009-08-05 17:29:12 Singular Exp $
     5// $Id: clapsing.h,v 1.4 2009-08-13 15:17:03 Singular Exp $
    66/*
    77* ABSTRACT: interface between Singular and factory
     
    2626
    2727BOOLEAN singclap_extgcd ( poly f, poly g, poly &res, poly &pa, poly &pb );
     28BOOLEAN singclap_extgcd_r ( poly f, poly g, poly &res, poly &pa, poly &pb, const ring r );
    2829
    2930poly singclap_pdivide ( poly f, poly g );
  • kernel/longalg.cc

    rab33f6e r6620d75  
    22*  Computer Algebra System SINGULAR     *
    33****************************************/
    4 /* $Id: longalg.cc,v 1.44 2009-08-07 13:55:21 Singular Exp $ */
     4/* $Id: longalg.cc,v 1.45 2009-08-13 15:17:03 Singular Exp $ */
    55/*
    66* ABSTRACT:   algebraic numbers
     
    3434napoly naMinimalPoly;
    3535#define naParNames (currRing->parameter)
    36 #define napNormalize(p) p_Normalize(p,nacRing)
    3736static int naIsChar0;
    3837static int naPrimeM;
     
    204203  qq = (napoly)p_Init(nacRing);
    205204  napNext(qq) = NULL;
    206   napNormalize(g);
    207   napNormalize(f);
     205  p_Normalize(g,nacRing);
     206  p_Normalize(f,nacRing);
    208207  a = f;
    209208  do
     
    216215    h = napCopy(g);
    217216    napMultT(h, qq);
    218     napNormalize(h);
     217    p_Normalize(h,nacRing);
    219218    n_Delete(&napGetCoeff(qq),nacRing);
    220219    a = napAdd(a, h);
     
    234233  qq = (napoly)p_Init(nacRing);
    235234  napNext(qq) = b = NULL;
    236   napNormalize(g);
    237   napNormalize(f);
     235  p_Normalize(g,nacRing);
     236  p_Normalize(f,nacRing);
    238237  a = f;
    239238  do
     
    247246    h = napCopy(g);
    248247    napMultT(h, qq);
    249     napNormalize(h);
     248    p_Normalize(h,nacRing);
    250249    n_Delete(&napGetCoeff(qq),nacRing);
    251250    a = napAdd(a, h);
     
    297296    qa=p_Mult_nn(qa,t,nacRing); p_Normalize(qa,nacRing);
    298297    n_Delete(&t,nacRing);
    299     napNormalize(qa);
     298    p_Normalize(qa,nacRing);
    300299    napDelete(&x);
    301300    napDelete(&r);
     
    316315    t = nacInvers(napGetCoeff(r));
    317316    q=p_Mult_nn(q,t,nacRing); p_Normalize(q,nacRing);
    318     napNormalize(q);
     317    p_Normalize(q,nacRing);
    319318    n_Delete(&t,nacRing);
    320319    napDelete(&x);
     
    345344      //nacNormalize(t);
    346345      q=p_Mult_nn(q,t,nacRing); p_Normalize(q,nacRing);
    347       napNormalize(q);
     346      p_Normalize(q,nacRing);
    348347      n_Delete(&t,nacRing);
    349348      napDelete(&x);
     
    15311530    napoly rz=napGcd(x->z, y->z);
    15321531    CanonicalForm F, G, R;
    1533     R=convSingTrFactoryP(rz);
    1534     napNormalize(x->z);
    1535     F=convSingTrFactoryP(x->z)/R;
    1536     napNormalize(y->z);
    1537     G=convSingTrFactoryP(y->z)/R;
     1532    R=convSingPFactoryP(rz,0,nacRing);
     1533    p_Normalize(x->z,nacRing);
     1534    F=convSingPFactoryP(x->z,0,nacRing)/R;
     1535    p_Normalize(y->z,nacRing);
     1536    G=convSingPFactoryP(y->z,0,nacRing)/R;
    15381537    F = gcd( F, G );
    15391538    if (F.isOne())
     
    15421541    {
    15431542      napDelete(&rz);
    1544       result->z=convFactoryPSingTr( F*R );
    1545       napNormalize(result->z);
     1543      result->z=convFactoryPSingP( F*R, nacRing );
     1544      p_Normalize(result->z,nacRing);
    15461545    }
    15471546  }
Note: See TracChangeset for help on using the changeset viewer.