19 #define TRANSEXT_PRIVATES 81 #ifdef HAVE_GETTIMEOFDAY 117 #if HAVE_CAN_SHORT_OUT 129 cf->extRing->ShortOut = shortOut;
131 cf = cf->extRing->cf;
143 number n=(number)
IDDATA(h);
144 number one =
nInit(1);
145 number nn=
nMult(n,one);
179 Werror(
"type %d too complex...set minpoly before",
IDTYP(h));
break;
187 WarnS(
"Set minpoly over non-transcendental ground field to 0?!");
196 WarnS(
"Trying to set minpoly over non-transcendental ground field...");
199 WerrorS(
"cannot set minpoly for these coeffients");
206 WerrorS(
"only univarite minpoly allowed");
216 WarnS(
"no minpoly allowed if there are local objects belonging to the basering: ");
237 WarnS(
"minpoly is already 0...");
241 WarnS(
"cannot set minpoly to 0 / alg. extension?");
249 Warn(
"killing a local object due to minpoly change: %s",
IDID(
currRing->idroot));
260 if ((p==
NULL) ||(NUM((fraction)p)==
NULL))
262 Werror(
"Could not construct the alg. extension: minpoly==0");
267 if (DEN((fraction)(p)) !=
NULL)
269 poly z=NUM((fraction)p);
270 poly n=DEN((fraction)(p));
273 DEN((fraction)(p))=
NULL;
277 q->m[0] = NUM((fraction)p);
281 PrintS(
"\nTrying to conver the currRing into an algebraic field: ");
282 PrintS(
"Ground poly. ring: \n");
284 PrintS(
"\nGiven MinPOLY: ");
294 NUM((fractionObject *)p) =
NULL;
303 Werror(
"Could not construct the alg. extension: llegal minpoly?");
368 Werror(
"index[%d] must be positive",i+1);
377 (*iv1)[
i]=(int)((
long)(a->
Data()));
381 res->
data=(
void *)ivn;
384 (*iv)[
i]=(int)((
long)(a->
Data()));
388 int c=e->next->start;
389 if ((i>=iv->
rows())||(c<1)||(c>iv->
cols()))
391 Werror(
"wrong range [%d,%d] in intmat %s(%d,%d)",i+1,c,res->
Name(),iv->
rows(),iv->
cols());
417 number2 nn=(number2)res->
data;
428 Werror(
"index[%d] must be positive",i+1);
434 WerrorS(
"only one index given");
439 int c=e->next->start;
440 if ((i>=iv->
rows())||(c<1)||(c>iv->
cols()))
442 Werror(
"wrong range [%d,%d] in cmatrix %s(%d,%d)",i+1,c,res->
Name(),iv->
rows(),iv->
cols());
466 number2 nn=(number2)res->
data;
473 WerrorS(
"no (c)ring avialable for conversion from int");
482 Werror(
"index[%d] must be positive",i+1);
488 WerrorS(
"only one index given");
493 int c=e->next->start;
494 if ((i>=iv->
rows())||(c<1)||(c>iv->
cols()))
496 Werror(
"wrong range [%d,%d] in cmatrix %s(%d,%d)",i+1,c,res->
Name(),iv->
rows(),iv->
cols());
514 number2 nn=(number2)res->
data;
517 number2 n=(number2)
omAlloc(
sizeof(*n));
531 WerrorS(
"no (c)ring avialable for conversion from number");
540 Werror(
"index[%d] must be positive",i+1);
546 WerrorS(
"only one index given");
551 int c=e->next->start;
552 if ((i>=iv->
rows())||(c<1)||(c>iv->
cols()))
554 Werror(
"wrong range [%d,%d] in cmatrix %s(%d,%d)",i+1,c,res->
Name(),iv->
rows(),iv->
cols());
585 Werror(
"index[%d] must be positive",i+1);
591 WerrorS(
"only one index given");
596 int c=e->next->start;
597 if ((i>=iv->
rows())||(c<1)||(c>iv->
cols()))
599 Werror(
"wrong range [%d,%d] in bigintmat %s(%d,%d)",i+1,c,res->
Name(),iv->
rows(),iv->
cols());
616 int add_row_shift = 0;
618 if (weights!=
NULL) add_row_shift=weights->
min_in();
667 Werror(
"index[%d] must be positive",j);
698 if ((am->
rows()!=1) || (am->
cols()!=1))
707 int j=e->next->start;
729 int j=e->next->start;
741 void* tmp = res->
data;
748 char *
s=(
char *)res->
data;
749 if ((e->start>0)&&(e->start<=(int)strlen(s)))
750 s[e->start-1]=(char)(*((
char *)a->
Data()));
753 Werror(
"string index %d out of range 1..%d",e->start,(
int)strlen(s));
762 const char *procname,
int line,
874 res->
data = (
void *) l;
903 char *rn=f->preimage;
921 ring old_ring=(ring)res->
Data();
924 ideal
id = (ideal)a->
Data();
938 if ( qr->cf != newcf )
960 for(i = 0, j = 0; i<
IDELEMS(
id); i++)
997 Warn(
"%s is no twosided standard basis",a->
Name());
1024 ring
r=(ring)a->
Data();
1054 res->
data=(
void *)0;
1069 #define NULL_VAL NULL 1092 WarnS(
"right side is not a datum, assignment ignored");
1121 memcpy(l,&ll,
sizeof(
sleftv));
1142 WerrorS(
"error in assign: left side is not an l-value");
1148 #ifdef BLACKBOX_DEVEL 1149 Print(
"bb-assign: bb=%lx\n",bb);
1151 return (bb==
NULL) || bb->blackbox_Assign(l,r);
1216 Werror(
"`%s`(%s) = `%s` is not supported",
1219 Werror(
"`%s` = `%s` is not supported" 1228 Werror(
"expected `%s` = `%s`" 1296 Werror(
"`%s` = `%s` is not supported" 1305 Werror(
"expected `%s` = `%s`" 1323 memset(&t,0,
sizeof(
sleftv));
1325 while ((i<iv->length())&&(l!=
NULL))
1327 t.
data=(
char *)(
long)(*iv)[
i];
1332 if (nok)
return TRUE;
1351 memset(&t,0,
sizeof(
sleftv));
1359 t.
data=(
char *)I->m[i];
1457 Warn(
"expression list length(%d) does not match intmat size(%d)",
1464 (*iv)[i++] = (int)((
long)(hh->
Data()));
1473 (*iv)[i++] = (*ivv)[ll++];
1507 Warn(
"expression list length(%d) does not match bigintmat size(%d x %d)",
1520 bim->
set(i++, (number)(hh->
Data()));
1559 sl += strlen((
char *)hh->
Data());
1567 t=(
char *)hh->
Data();
1588 memset(&t,0,
sizeof(
sleftv));
1594 while ((i<mxn )&&(l!=
NULL))
1596 t.
data=(
char *)m->
m[i];
1620 Warn(
"list length mismatch in assign (l>r)");
1627 Warn(
"list length mismatch in assign (l<r)");
1665 char *
s=(
char *)r->
Data();
1668 memset(&t,0,
sizeof(
sleftv));
1670 while ((i<sl)&&(l!=
NULL))
1692 int i=l->
e->start-1;
1695 Werror(
"index[%d] must be positive",i+1);
1720 memset(&(li->
m[li->
nr+1]),0,(i-li->
nr)*
sizeof(
sleftv));
1731 && (ld->
Typ()!=r->
Typ()))
1734 memset(&tmp,0,
sizeof(
sleftv));
1738 memcpy(ld,&tmp,
sizeof(
sleftv));
1740 else if ((ld->
e==
NULL)
1745 memset(&tmp,0,
sizeof(
sleftv));
1750 memcpy(ld,&tmp,
sizeof(
sleftv));
1755 if (l->
e!=
NULL) l->
e->next=ld->
e;
1778 }
while ((!b)&&(l!=
NULL));
1831 if(bb->blackbox_CheckAssign(bb,l,r))
return TRUE;
1834 if((!b) && (like_lists==2))
1858 #ifdef BLACKBOX_DEVEL 1859 Print(
"bb-assign: bb=%lx\n",bb);
1861 return (bb==
NULL) || bb->blackbox_Assign(l,r);
1949 Werror(
"length of lists in assignment does not match (l:%d,r:%d)",
1985 WerrorS(
"expected ring-name");
1991 WerrorS(
"expected image ideal");
2007 char *pr=((
map)olm)->preimage;
2019 num=olm->
cols()*rk ;
2024 Warn(
"expression list length(%d) does not match matrix size(%d)",el,num);
2074 for(k=0;k<
j;k++,i++)
2097 if (module_assign) lm->
rank=rk;
2098 else if (map_assign) ((
map)lm)->preimage=pr;
2116 Werror(
"cannot assign to %s",l->Fullname());
2134 ideal I0=(ideal)I->
Data();
2179 char *vn=(
char *)v->
Name();
2186 WarnS(
"source and destination packages are identical");
2192 Warn(
"redefining `%s`",vn);
2198 memset(&h_expr,0,
sizeof(h_expr));
2202 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)
procinfo * iiInitSingularProcinfo(procinfov pi, const char *libname, const char *procname, int line, long pos, BOOLEAN pstatic)
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)
void n2Delete(number2 &d)
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)
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)
static BOOLEAN jiA_NUMBER2_N(leftv res, leftv a, Subexpr e)
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)
static number & pGetCoeff(poly p)
return an alias to the leading coefficient of p assumes that p != NULL NOTE: not copy ...
BOOLEAN piKill(procinfov pi)
char * String(BOOLEAN typed=FALSE)
static BOOLEAN jiA_MODUL_P(leftv res, leftv a, Subexpr)
#define pGetComp(p)
Component.
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)
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
void killhdl2(idhdl h, idhdl *ih, ring r)
const struct sValAssign_sys dAssign_sys[]
static number2 n2Init(long i, coeffs c)
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 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.
BOOLEAN assumeStdFlag(leftv h)
void PrintS(const char *s)
static poly p_Mult_nn(poly p, number n, const ring r)
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 jiA_CRING(leftv res, leftv a, Subexpr e)
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 jjA_L_LIST(leftv l, leftv r)
static bool rIsSCA(const ring r)
void CleanUp(ring r=currRing)
void Clean(ring r=currRing)
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)
static BOOLEAN jiA_NUMBER2(leftv res, leftv a, Subexpr e)
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 BOOLEAN jiA_NUMBER2_I(leftv res, leftv a, Subexpr e)
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)
si_link slCopy(si_link l)
static BOOLEAN jiA_DEF(leftv res, leftv, Subexpr)
#define MATELEM(mat, i, j)
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)