Changeset 83f9fe in git


Ignore:
Timestamp:
Jun 6, 2020, 6:52:26 PM (4 years ago)
Author:
Hans Schoenemann <hannes@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
0d01545670bb6a3fa6190c1d2d50ba0984746eff
Parents:
209d2cb3c5aadb53e72b37269b979e9c22e2fd48
Message:
reset jjMINPOLY (for Realclassify::realclassify)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • Singular/ipassign.cc

    r209d2c r83f9fe  
    276276  return r;
    277277}
     278
    278279static BOOLEAN jjMINPOLY(leftv, leftv a)
    279280{
    280   return (jjSetMinpoly(currRing,(number)a->Data(),TRUE)==NULL);
    281 }
     281  if( !nCoeff_is_transExt(currRing->cf) && (currRing->idroot == NULL) && n_IsZero((number)a->Data(), currRing->cf) )
     282  {
     283#ifndef SING_NDEBUG
     284    WarnS("Set minpoly over non-transcendental ground field to 0?!");
     285    Warn("in >>%s<<",my_yylinebuf);
     286#endif
     287    return FALSE;
     288  }
     289
     290
     291  if ( !nCoeff_is_transExt(currRing->cf) )
     292  {
     293    WarnS("Trying to set minpoly over non-transcendental ground field...");
     294    if(!nCoeff_is_algExt(currRing->cf) )
     295    {
     296      WerrorS("cannot set minpoly for these coeffients");
     297      return TRUE;
     298    }
     299  }
     300  if ((rVar(currRing->cf->extRing)!=1)
     301  && !n_IsZero((number)a->Data(), currRing->cf) )
     302  {
     303    WerrorS("only univarite minpoly allowed");
     304    return TRUE;
     305  }
     306
     307  BOOLEAN redefine_from_algext=FALSE;
     308  if ( currRing->idroot != NULL )
     309  {
     310    redefine_from_algext=(currRing->cf->extRing->qideal!=NULL);
     311//    return TRUE;
     312#ifndef SING_NDEBUG
     313    idhdl p = currRing->idroot;
     314
     315    WarnS("no minpoly allowed if there are local objects belonging to the basering: ");
     316
     317    while(p != NULL)
     318    {
     319      PrintS(p->String(TRUE)); Print("(%s)\n",IDID(p));
     320      p = p->next;
     321    }
     322#endif
     323  }
     324
     325//  assume (currRing->idroot==NULL);
     326
     327  number p = (number)a->CopyD(NUMBER_CMD);
     328  n_Normalize(p, currRing->cf);
     329
     330  if (n_IsZero(p, currRing->cf))
     331  {
     332    n_Delete(&p, currRing->cf);
     333    if( nCoeff_is_transExt(currRing->cf) )
     334    {
     335#ifndef SING_NDEBUG
     336      WarnS("minpoly is already 0...");
     337#endif
     338      return FALSE;
     339    }
     340    WarnS("cannot set minpoly to 0 / alg. extension?");
     341    return TRUE;
     342  }
     343
     344  // remove all object currently in the ring
     345  while(currRing->idroot!=NULL)
     346  {
     347#ifndef SING_NDEBUG
     348    Warn("killing a local object due to minpoly change: %s", IDID(currRing->idroot));
     349#endif
     350    killhdl2(currRing->idroot,&(currRing->idroot),currRing);
     351  }
     352
     353  AlgExtInfo A;
     354
     355  A.r = rCopy(currRing->cf->extRing); // Copy  ground field!
     356  // if minpoly was already set:
     357  if( currRing->cf->extRing->qideal != NULL ) id_Delete(&(A.r->qideal),A.r);
     358  ideal q = idInit(1,1);
     359  if ((p==NULL) ||(NUM((fraction)p)==NULL))
     360  {
     361    WerrorS("Could not construct the alg. extension: minpoly==0");
     362    // cleanup A: TODO
     363    rDelete( A.r );
     364    return TRUE;
     365  }
     366  if (!redefine_from_algext && (DEN((fraction)(p)) != NULL)) // minpoly must be a fraction with poly numerator...!!
     367  {
     368    poly n=DEN((fraction)(p));
     369    if(!p_IsConstantPoly(n,currRing->cf->extRing))
     370    {
     371      WarnS("denominator must be constant - ignoring it");
     372    }
     373    p_Delete(&n,currRing->cf->extRing);
     374    DEN((fraction)(p))=NULL;
     375  }
     376
     377  if (redefine_from_algext) q->m[0]=(poly)p;
     378  else          q->m[0] = NUM((fraction)p);
     379  A.r->qideal = q;
     380
     381#if 0
     382  PrintS("\nTrying to conver the currRing into an algebraic field: ");
     383  PrintS("Ground poly. ring: \n");
     384  rWrite( A.r );
     385  PrintS("\nGiven MinPOLY: ");
     386  p_Write( A.i->m[0], A.r );
     387#endif
     388
     389  // :(
     390//  NUM((fractionObject *)p) = NULL; // makes 0/ NULL fraction - which should not happen!
     391//  n_Delete(&p, currRing->cf); // doesn't expect 0/ NULL :(
     392  if (!redefine_from_algext)
     393  {
     394    EXTERN_VAR omBin fractionObjectBin;
     395    NUM((fractionObject *)p) = NULL; // not necessary, but still...
     396    omFreeBin((ADDRESS)p, fractionObjectBin);
     397  }
     398
     399  coeffs new_cf = nInitChar(n_algExt, &A);
     400  if (new_cf==NULL)
     401  {
     402    WerrorS("Could not construct the alg. extension: llegal minpoly?");
     403    // cleanup A: TODO
     404    rDelete( A.r );
     405    return TRUE;
     406  }
     407  else
     408  {
     409    nKillChar(currRing->cf); currRing->cf=new_cf;
     410  }
     411  return FALSE;
     412}
     413
    282414
    283415static BOOLEAN jjNOETHER(leftv, leftv a)
Note: See TracChangeset for help on using the changeset viewer.