Changeset 08d98a in git


Ignore:
Timestamp:
Sep 14, 2011, 8:18:59 PM (13 years ago)
Author:
Oleksandr Motsak <motsak@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
35e86e4b8846ae589996e378f75e28b2aa48605e
Parents:
0edcce0373257644bc23c5efa79fa53fc1b7cb96
git-author:
Oleksandr Motsak <motsak@mathematik.uni-kl.de>2011-09-14 20:18:59+02:00
git-committer:
Mohamed Barakat <mohamed.barakat@rwth-aachen.de>2011-11-09 16:12:50+01:00
Message:
CHG: cleaned up the "minpoly = number;" implementation (jjMINPOLY)
ADD: more debugging + tests + assumes
File:
1 edited

Legend:

Unmodified
Added
Removed
  • Singular/ipassign.cc

    r0edcce r08d98a  
    1313#include <ctype.h>
    1414
     15#define TRANSEXT_PRIVATES
     16
     17#include <polys/ext_fields/transext.h>
     18
    1519#include <kernel/mod2.h>
    16 #include <Singular/tok.h>
     20#include <omalloc/omalloc.h>
     21
    1722#include <misc/options.h>
    18 #include <Singular/ipid.h>
    19 #include <Singular/idrec.h>
    2023#include <misc/intvec.h>
    21 #include <omalloc/omalloc.h>
     24
     25#include <coeffs/coeffs.h>
     26#include <coeffs/numbers.h>
     27#include <coeffs/longrat.h>
     28
     29
     30#include <polys/ext_fields/algext.h>
     31
     32#include <polys/monomials/ring.h>
     33#include <polys/matpol.h>
     34#include <polys/monomials/maps.h>
     35#include <polys/nc/nc.h>
     36#include <polys/nc/sca.h>
     37
    2238#include <kernel/febase.h>
    2339#include <kernel/polys.h>
    2440#include <kernel/ideals.h>
    25 #include <polys/matpol.h>
    2641#include <kernel/kstd1.h>
    2742#include <kernel/timer.h>
    28 #include <polys/monomials/ring.h>
    29 #include <Singular/subexpr.h>
    30 #include <Singular/lists.h>
    31 #include <coeffs/numbers.h>
    32 //#include <polys/ext_fields/longalg.h>
    3343#include <kernel/stairc.h>
    34 #include <polys/monomials/maps.h>
    3544#include <kernel/syz.h>
     45
    3646//#include "weight.h"
    37 #include <Singular/ipconv.h>
    38 #include <Singular/attrib.h>
    39 #include <Singular/silink.h>
    40 #include <Singular/ipshell.h>
    41 #include <polys/nc/sca.h>
    42 #include <Singular/blackbox.h>
     47#include "tok.h"
     48#include "ipid.h"
     49#include "idrec.h"
     50#include "subexpr.h"
     51#include "lists.h"
     52#include "ipconv.h"
     53#include "attrib.h"
     54#include "silink.h"
     55#include "ipshell.h"
     56#include "blackbox.h"
     57
     58
    4359
    4460/*=================== proc =================*/
     
    161177static BOOLEAN jjMINPOLY(leftv res, leftv a)
    162178{
    163   if (getCoeffType(currRing->cf)!=n_transExt)
    164   {
    165       WerrorS("no minpoly allowed");
    166       return TRUE;
    167   }
    168   number p=(number)a->CopyD(NUMBER_CMD);
    169   if (nIsZero(p))
     179  if ( !nCoeff_is_transExt(currRing->cf) )
     180  {
     181    WerrorS("no minpoly allowed over non-transcendental ground field");
     182    return TRUE;
     183  }
     184
     185  if ( currRing->idroot != NULL )
     186  {
     187    WerrorS("no minpoly allowed if there are local objects belonging to the basering");
     188    return TRUE;
     189  }
     190 
     191  number p = (number)a->CopyD(NUMBER_CMD);
     192
     193  if (n_IsZero(p, currRing->cf))
    170194  {
    171195    WerrorS("cannot set minpoly to 0");
    172196    return TRUE;
    173197  }
     198
     199  assume (currRing->idroot==NULL);
     200 
     201  // remove all object currently in the ring
     202  while(currRing->idroot!=NULL)
     203  {
     204    killhdl2(currRing->idroot,&(currRing->idroot),currRing);
     205  }
     206 
     207  n_Normalize(p, currRing->cf);
     208
     209  AlgExtInfo A;
     210 
     211  A.r = currRing->cf->extRing; // Use the same ground field!
     212  A.i = idInit(1,1);
     213
     214  assume( DEN((fractionObject *)(p)) == NULL ); // minpoly must be a poly...!?
     215 
     216  A.i->m[0] = NUM((fractionObject *)p);
     217
     218#ifndef NDEBUG
     219  PrintS("\nTrying to conver the currRing into an algebraic field: ");
     220  PrintS("Ground poly. ring: \n");
     221  rWrite( A.r );
     222  PrintS("\nGiven MinPOLY: ");
     223  p_Write( A.i->m[0], A.r );
     224#endif
     225
     226  NUM((fractionObject *)p) = NULL; n_Delete(&p, currRing->cf);
     227 
     228  coeffs new_cf = nInitChar(n_algExt, &A);
     229 
     230  if (new_cf==NULL)
     231  {
     232    Werror("Could not construct the alg. extension: llegal minpoly?");
     233    // cleanup A: TODO
     234    return TRUE;
     235  }
    174236  else
    175237  {
    176     // remove all object currently in the ring
    177     while(currRing->idroot!=NULL)
    178     {
    179       killhdl2(currRing->idroot,&(currRing->idroot),currRing);
    180     }
    181     nNormalize(p);
    182     typedef struct { ring r; ideal i; } AlgExtInfo;
    183     struct fractionObject
    184     {
    185       poly numerator;
    186       poly denominator;
    187       int complexity;
    188     };
    189     typedef struct fractionObject * fraction;
    190 
    191     AlgExtInfo A;
    192     A.r=currRing->cf->extRing;
    193     A.r->ref++;
    194     A.i=idInit(1,1);
    195     A.i->m[0]=((fraction)p)->numerator;
    196     ((fraction)p)->numerator=NULL;
    197     n_Delete(&p,currRing->cf);
    198     coeffs new_cf=nInitChar(n_algExt,&A);
    199     if (new_cf==NULL)
    200     {
    201       Werror("llegal minpoly");
    202       // cleanup A: TODO
    203       return TRUE;
    204     }
    205     else
    206     {
    207       nKillChar(currRing->cf);
    208       currRing->cf=new_cf;
    209     }
    210   }
     238    nKillChar(currRing->cf); currRing->cf=new_cf;
     239  }
     240
    211241  return FALSE;
    212242}
     
    696726#define IPASSIGN
    697727#define D(A) A
    698 #include <Singular/table.h>
     728#include "table.h"
    699729/*=================== operations ============================*/
    700730/*2
Note: See TracChangeset for help on using the changeset viewer.