11 #define TRANSEXT_PRIVATES 73 #ifdef HAVE_GETTIMEOFDAY 120 cf->extRing->ShortOut = shortOut;
122 cf = cf->extRing->cf;
133 number n=(number)
IDDATA(h);
134 number one =
nInit(1);
135 number nn=
nMult(n,one);
169 Werror(
"type %d too complex...set minpoly before",
IDTYP(h));
break;
177 WarnS(
"Set minpoly over non-transcendental ground field to 0?!");
186 WarnS(
"Trying to set minpoly over non-transcendental ground field...");
189 WerrorS(
"cannot set minpoly for these coeffients");
196 WerrorS(
"only univarite minpoly allowed");
203 redefine_from_algext=(
currRing->cf->extRing->qideal!=
NULL);
208 WarnS(
"no minpoly allowed if there are local objects belonging to the basering: ");
229 WarnS(
"minpoly is already 0...");
233 WarnS(
"cannot set minpoly to 0 / alg. extension?");
241 Warn(
"killing a local object due to minpoly change: %s",
IDID(
currRing->idroot));
252 if ((p==
NULL) ||(NUM((fraction)p)==
NULL))
254 WerrorS(
"Could not construct the alg. extension: minpoly==0");
259 if (!redefine_from_algext && (DEN((fraction)(p)) !=
NULL))
261 poly n=DEN((fraction)(p));
264 WarnS(
"denominator must be constant - ignoring it");
267 DEN((fraction)(p))=
NULL;
270 if (redefine_from_algext) q->m[0]=(poly)p;
271 else q->m[0] = NUM((fraction)p);
275 PrintS(
"\nTrying to conver the currRing into an algebraic field: ");
276 PrintS(
"Ground poly. ring: \n");
278 PrintS(
"\nGiven MinPOLY: ");
285 if (!redefine_from_algext)
288 NUM((fractionObject *)p) =
NULL;
295 WerrorS(
"Could not construct the alg. extension: llegal minpoly?");
360 Werror(
"index[%d] must be positive",i+1);
369 (*iv1)[
i]=(int)((
long)(a->
Data()));
373 res->
data=(
void *)ivn;
376 (*iv)[
i]=(int)((
long)(a->
Data()));
380 int c=e->next->start;
381 if ((i>=iv->
rows())||(c<1)||(c>iv->
cols()))
383 Werror(
"wrong range [%d,%d] in intmat %s(%d,%d)",i+1,c,res->
Name(),iv->
rows(),iv->
cols());
409 number2 nn=(number2)res->
data;
420 Werror(
"index[%d] must be positive",i+1);
426 WerrorS(
"only one index given");
431 int c=e->next->start;
432 if ((i>=iv->
rows())||(c<1)||(c>iv->
cols()))
434 Werror(
"wrong range [%d,%d] in cmatrix %s(%d,%d)",i+1,c,res->
Name(),iv->
rows(),iv->
cols());
458 number2 nn=(number2)res->
data;
459 number2 n=n2Init((
long)a->
Data(),nn->cf);
465 WerrorS(
"no Ring avialable for conversion from int");
474 Werror(
"index[%d] must be positive",i+1);
480 WerrorS(
"only one index given");
485 int c=e->next->start;
486 if ((i>=iv->
rows())||(c<1)||(c>iv->
cols()))
488 Werror(
"wrong range [%d,%d] in cmatrix %s(%d,%d)",i+1,c,res->
Name(),iv->
rows(),iv->
cols());
506 number2 nn=(number2)res->
data;
507 number2 n=(number2)
omAlloc(
sizeof(*n));
515 number2 n=(number2)
omAlloc(
sizeof(*n));
531 poly2 nn=(poly2)res->
data;
542 Werror(
"index[%d] must be positive",i+1);
557 poly2 nn=(poly2)res->
data;
558 poly2 n=(poly2)
omAlloc(
sizeof(*n));
566 poly2 n=(poly2)
omAlloc(
sizeof(*n));
589 Werror(
"index[%d] must be positive",i+1);
595 WerrorS(
"only one index given");
600 int c=e->next->start;
601 if ((i>=iv->
rows())||(c<1)||(c>iv->
cols()))
603 Werror(
"wrong range [%d,%d] in bigintmat %s(%d,%d)",i+1,c,res->
Name(),iv->
rows(),iv->
cols());
620 int add_row_shift = 0;
622 if (weights!=
NULL) add_row_shift=weights->
min_in();
671 Werror(
"index[%d] must be positive",j);
688 m->
m[j-1]=
pAdd(m->
m[j-1],p);
711 if ((am->
rows()!=1) || (am->
cols()!=1))
720 int j=e->next->start;
742 int j=e->next->start;
754 void* tmp = res->
data;
761 char *
s=(
char *)res->
data;
762 if ((e->start>0)&&(e->start<=(int)strlen(s)))
763 s[e->start-1]=(char)(*((
char *)a->
Data()));
766 Werror(
"string index %d out of range 1..%d",e->start,(
int)strlen(s));
775 const char *procname,
int line,
893 Werror(
"rank of module is %ld in assignment to ideal",m->rank);
915 res->
data = (
void *) l;
944 char *rn=f->preimage;
962 ring old_ring=(ring)res->
Data();
965 ideal
id = (ideal)a->
Data();
979 if ( qr->cf != newcf )
993 int *perm = (
int *)
omAlloc0((qr->N+1)*
sizeof(int));
1000 for(i = 0, j = 0; i<
IDELEMS(
id); i++)
1036 Warn(
"%s is no twosided standard basis",a->
Name());
1063 ring r=(ring)a->
Data();
1094 res->
data=(
void *)0;
1110 #define NULL_VAL NULL 1135 WarnS(
"right side is not a datum, assignment ignored");
1169 memcpy(l,&ll,
sizeof(
sleftv));
1191 WerrorS(
"error in assign: left side is not an l-value");
1197 #ifdef BLACKBOX_DEVEL 1198 Print(
"bb-assign: bb=%lx\n",bb);
1200 return (bb==
NULL) || bb->blackbox_Assign(l,r);
1203 while ((
dAssign[start].res!=lt)
1204 && (
dAssign[start].res!=0)) start++;
1265 Werror(
"`%s`(%s) = `%s` is not supported",
1268 Werror(
"`%s` = `%s` is not supported" 1277 Werror(
"expected `%s` = `%s`" 1345 Werror(
"`%s` = `%s` is not supported" 1354 Werror(
"expected `%s` = `%s`" 1372 memset(&t,0,
sizeof(
sleftv));
1376 t.
data=(
char *)(
long)(*iv)[
i];
1381 if (nok)
return TRUE;
1398 memset(&t,0,
sizeof(
sleftv));
1408 t.
data=(
char *)I->m[i];
1506 Warn(
"expression list length(%d) does not match intmat size(%d)",
1513 (*iv)[i++] = (int)((
long)(hh->
Data()));
1522 (*iv)[i++] = (*ivv)[ll++];
1556 Warn(
"expression list length(%d) does not match bigintmat size(%d x %d)",
1569 bim->
set(i++, (number)(hh->
Data()));
1608 sl += strlen((
char *)hh->
Data());
1616 t=(
char *)hh->
Data();
1637 memset(&t,0,
sizeof(
sleftv));
1643 while ((i<mxn )&&(l!=
NULL))
1645 t.
data=(
char *)m->
m[i];
1669 WarnS(
"list length mismatch in assign (l>r)");
1676 WarnS(
"list length mismatch in assign (l<r)");
1714 char *
s=(
char *)r->
Data();
1717 memset(&t,0,
sizeof(
sleftv));
1719 while ((i<sl)&&(l!=
NULL))
1741 int i=l->
e->start-1;
1744 Werror(
"index[%d] must be positive",i+1);
1769 memset(&(li->
m[li->
nr+1]),0,(i-li->
nr)*
sizeof(
sleftv));
1779 memset(&tmp,0,
sizeof(
sleftv));
1782 && (ld->
Typ()!=r->
Typ()))
1787 memcpy(ld,&tmp,
sizeof(
sleftv));
1789 else if ((ld->
e==
NULL)
1797 memcpy(ld,&tmp,
sizeof(
sleftv));
1802 if (l->
e!=
NULL) l->
e->next=ld->
e;
1825 }
while ((!b)&&(l!=
NULL));
1878 if(bb->blackbox_CheckAssign(bb,l,r))
return TRUE;
1881 if((!b) && (like_lists==2))
1905 #ifdef BLACKBOX_DEVEL 1906 Print(
"bb-assign: bb=%lx\n",bb);
1908 return (bb==
NULL) || bb->blackbox_Assign(l,r);
1996 Werror(
"length of lists in assignment does not match (l:%d,r:%d)",
2031 WerrorS(
"expected ring-name");
2037 WerrorS(
"expected image ideal");
2057 char *pr=((
map)olm)->preimage;
2069 num=olm->
cols()*rk ;
2074 Warn(
"expression list length(%d) does not match matrix size(%d)",el,num);
2130 for(k=0;k<
j;k++,i++)
2156 if (module_assign) lm->rank=rk;
2157 else if (map_assign) ((
map)lm)->preimage=pr;
2175 Werror(
"cannot assign to %s",l->Fullname());
2193 ideal I0=(ideal)I->
Data();
2238 char *vn=(
char *)v->
Name();
2245 WarnS(
"source and destination packages are identical");
2257 memset(&h_expr,0,
sizeof(h_expr));
2261 return iiAssign(&tmp_expr,&h_expr);
static BOOLEAN jiA_BIGINTMAT(leftv res, leftv a, Subexpr)
#define idPosConstant(I)
index of generator with leading term in ground ring (if any); otherwise -1
void * idrecDataInit(int t)
CanonicalForm map(const CanonicalForm &primElem, const Variable &alpha, const CanonicalForm &F, const Variable &beta)
map from to such that is mapped onto
static BOOLEAN jiA_MAP(leftv res, leftv a, Subexpr)
static BOOLEAN jiA_INTVEC_L(leftv l, leftv r)
void id_Normalize(ideal I, const ring r)
normialize all polys in id
void ipMoveId(idhdl tomove)
const CanonicalForm int s
int iiTestConvert(int inputType, int outputType)
BOOLEAN jjIMPORTFROM(leftv, leftv u, leftv v)
void jjNormalizeQRingP(poly &p)
static void jiAssignAttr(leftv l, leftv r)
Class used for (list of) interpreter objects.
poly kNF(ideal F, ideal Q, poly p, int syzComp, int lazyReduce)
static BOOLEAN jjMAXDEG(leftv, leftv a)
static BOOLEAN jjA_L_INTVEC(leftv l, leftv r, intvec *iv)
#define idDelete(H)
delete an ideal
static BOOLEAN jiA_QRING(leftv res, leftv a, Subexpr e)
static BOOLEAN jiA_INT(leftv res, leftv a, Subexpr e)
static int si_min(const int a, const int b)
Compatiblity layer for legacy polynomial operations (over currRing)
BOOLEAN iiConvert(int inputType, int outputType, int index, leftv input, leftv output, const struct sConvertTypes *dConvertTypes)
int exprlist_length(leftv v)
lists syConvRes(syStrategy syzstr, BOOLEAN toDel, int add_row_shift)
#define omreallocSize(addr, o_size, size)
static BOOLEAN jiAssign_list(leftv l, leftv r)
static BOOLEAN jiA_NUMBER(leftv res, leftv a, Subexpr)
static BOOLEAN jiAssign_1(leftv l, leftv r, BOOLEAN toplevel)
bool nc_SetupQuotient(ring rGR, const ring rG=NULL, bool bCopy=false)
static BOOLEAN jjPRINTLEVEL(leftv, leftv a)
static FORCE_INLINE number n_Init(long i, const coeffs r)
a number representing i in the given coeff field/ring r
#define idSimpleAdd(A, B)
procinfo * iiInitSingularProcinfo(procinfov pi, const char *libname, const char *procname, int, long pos, BOOLEAN pstatic)
static short rVar(const ring r)
#define rVar(r) (r->N)
void id_Delete(ideal *h, ring r)
deletes an ideal/module/matrix
static BOOLEAN jjTRACE(leftv, leftv a)
void sBucketDestroyAdd(sBucket_pt bucket, poly *p, int *length)
static BOOLEAN jiA_PACKAGE(leftv res, leftv a, Subexpr)
static BOOLEAN jiA_1x1MATRIX(leftv res, leftv a, Subexpr e)
static BOOLEAN jiA_LIST_RES(leftv res, leftv a, Subexpr)
static FORCE_INLINE void n_Normalize(number &n, const coeffs r)
inplace-normalization of n; produces some canonical representation of n;
void WerrorS(const char *s)
static BOOLEAN jiA_STRING(leftv res, leftv a, Subexpr e)
BOOLEAN piKill(procinfov pi)
char * String(BOOLEAN typed=FALSE)
static BOOLEAN jiA_MODUL_P(leftv res, leftv a, Subexpr)
#define pGetComp(p)
Component.
#define SMATELEM(A, i, j, R)
void set(int i, int j, number n, const coeffs C=NULL)
replace an entry with a copy (delete old + copy new!). NOTE: starts at [1,1]
static BOOLEAN jjA_L_BIGINTMAT(leftv l, leftv r, bigintmat *bim)
static BOOLEAN iiAssign_sys(leftv l, leftv r)
static BOOLEAN jiA_IDEAL_Mo(leftv res, leftv a, Subexpr)
void killhdl2(idhdl h, idhdl *ih, ring r)
const struct sValAssign_sys dAssign_sys[]
void id_Shift(ideal M, int s, const ring r)
#define TEST_V_ASSIGN_NONE
static BOOLEAN jiA_CRING(leftv res, leftv a, Subexpr)
static BOOLEAN jiA_INTVEC(leftv res, leftv a, Subexpr)
poly p_PermPoly(poly p, const int *perm, const ring oldRing, const ring dst, nMapFunc nMap, const int *par_perm, int OldPar, BOOLEAN use_mult)
Coefficient rings, fields and other domains suitable for Singular polynomials.
static BOOLEAN jjTIMER(leftv, leftv a)
static si_link slCopy(si_link l)
static BOOLEAN jjCOLMAX(leftv, leftv a)
static FORCE_INLINE BOOLEAN nCoeff_is_algExt(const coeffs r)
TRUE iff r represents an algebraic extension field.
const struct sValAssign dAssign[]
static BOOLEAN rIsPluralRing(const ring r)
we must always have this test!
The main handler for Singular numbers which are suitable for Singular polynomials.
BOOLEAN slInit(si_link l, char *istr)
number(* nMapFunc)(number a, const coeffs src, const coeffs dst)
maps "a", which lives in src, into dst
static BOOLEAN jiA_VECTOR_L(leftv l, leftv r)
static BOOLEAN jjA_L_STRING(leftv l, leftv r)
static BOOLEAN jjRTIMER(leftv, leftv a)
static BOOLEAN jiA_BIGINT(leftv res, leftv a, Subexpr e)
static int si_max(const int a, const int b)
static FORCE_INLINE BOOLEAN nCoeff_is_transExt(const coeffs r)
TRUE iff r represents a transcendental extension field.
static BOOLEAN jiA_BUCKET(leftv res, leftv a, Subexpr e)
BOOLEAN assumeStdFlag(leftv h)
void PrintS(const char *s)
void rWrite(ring r, BOOLEAN details)
static BOOLEAN jjMINPOLY(leftv, leftv a)
static FORCE_INLINE BOOLEAN n_IsZero(number n, const coeffs r)
TRUE iff 'n' represents the zero element.
static FORCE_INLINE nMapFunc n_SetMap(const coeffs src, const coeffs dst)
set the mapping function pointers for translating numbers from src to dst
void idSkipZeroes(ideal ide)
gives an ideal/module the minimal possible size
static BOOLEAN jjMAXMULT(leftv, leftv a)
static BOOLEAN jiA_RING(leftv res, leftv a, Subexpr e)
#define BIMATELEM(M, I, J)
INLINE_THIS void Init(int l=0)
matrix mpNew(int r, int c)
create a r x c zero-matrix
int iiDeclCommand(leftv sy, leftv name, int lev, int t, idhdl *root, BOOLEAN isring, BOOLEAN init_b)
static void p_Delete(poly *p, const ring r)
ideal idInit(int idsize, int rank)
initialise an ideal / module
const Variable & v
< [in] a sqrfree bivariate poly
void jjNormalizeQRingId(leftv I)
poly p_MinPolyNormalize(poly p, const ring r)
void * atGet(idhdl root, const char *name, int t, void *defaultReturnValue)
static BOOLEAN jiA_STRING_L(leftv l, leftv r)
static BOOLEAN rField_is_Ring(const ring r)
static BOOLEAN jjECHO(leftv, leftv a)
static BOOLEAN jiAssign_rec(leftv l, leftv r)
void pEnlargeSet(poly **p, int l, int increment)
struct for passing initialization parameters to naInitChar
void rDelete(ring r)
unconditionally deletes fields in r
static BOOLEAN jiA_LINK(leftv res, leftv a, Subexpr)
const char * Tok2Cmdname(int tok)
used for all algebraic extensions, i.e., the top-most extension in an extension tower is algebraic ...
void killhdl(idhdl h, package proot)
static BOOLEAN jiA_PROC(leftv res, leftv a, Subexpr)
coeffs basecoeffs() const
static BOOLEAN jiA_MATRIX_L(leftv l, leftv r)
static BOOLEAN length(leftv result, leftv arg)
static BOOLEAN jjA_L_LIST(leftv l, leftv r)
static BOOLEAN p_IsConstantPoly(const poly p, const ring r)
static bool rIsSCA(const ring r)
void CleanUp(ring r=currRing)
void Clean(ring r=currRing)
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
ideal idrCopyR(ideal id, ring src_r, ring dest_r)
static BOOLEAN jjSHORTOUT(leftv, leftv a)
static BOOLEAN jiA_1x1INTMAT(leftv res, leftv a, Subexpr e)
static BOOLEAN jjNOETHER(leftv, leftv a)
int idElem(const ideal F)
count non-zero elements
static FORCE_INLINE BOOLEAN nCoeff_is_Extension(const coeffs r)
static BOOLEAN jiA_LIST(leftv res, leftv a, Subexpr)
static BOOLEAN jiA_IDEAL(leftv res, leftv a, Subexpr)
static FORCE_INLINE void n_Delete(number *p, const coeffs r)
delete 'p'
void p_Write(poly p, ring lmRing, ring tailRing)
void slCleanUp(si_link l)
static ideal idVec2Ideal(poly vec)
#define omFreeBin(addr, bin)
#define IMATELEM(M, I, J)
static BOOLEAN jiA_POLY(leftv res, leftv a, Subexpr e)
BOOLEAN lRingDependend(lists L)
void nKillChar(coeffs r)
undo all initialisations
static BOOLEAN jiA_RESOLUTION(leftv res, leftv a, Subexpr)
void Werror(const char *fmt,...)
static BOOLEAN jiA_MAP_ID(leftv res, leftv a, Subexpr)
void syKillComputation(syStrategy syzstr, ring r=currRing)
static BOOLEAN jiA_IDEAL_M(leftv res, leftv a, Subexpr)
intvec * ivAdd(intvec *a, intvec *b)
static FORCE_INLINE coeffs n_CoeffRingQuot1(number c, const coeffs r)
static BOOLEAN jiA_DEF(leftv res, leftv, Subexpr)
#define MATELEM(mat, i, j)
1-based access to matrix
blackbox * getBlackboxStuff(const int t)
return the structure to the type given by t
coeffs nInitChar(n_coeffType t, void *parameter)
one-time initialisations for new coeffs in case of an error return NULL
static void jjMINPOLY_red(idhdl h)
BOOLEAN iiAssign(leftv l, leftv r, BOOLEAN toplevel)