19 #define TRANSEXT_PRIVATES
83 #ifdef HAVE_GETTIMEOFDAY
119 #if HAVE_CAN_SHORT_OUT
131 cf->extRing->ShortOut = shortOut;
133 cf = cf->extRing->cf;
146 number one =
nInit(1);
147 number nn=
nMult(n,one);
181 Werror(
"type %d too complex...set minpoly before",
IDTYP(h));
break;
189 WarnS(
"Set minpoly over non-transcendental ground field to 0?!");
198 WarnS(
"Trying to set minpoly over non-transcendental ground field...");
201 WerrorS(
"cannot set minpoly for these coeffients");
208 WerrorS(
"only univarite minpoly allowed");
218 WarnS(
"no minpoly allowed if there are local objects belonging to the basering: ");
239 WarnS(
"minpoly is already 0...");
243 WarnS(
"cannot set minpoly to 0 / alg. extension?");
251 Warn(
"killing a local object due to minpoly change: %s",
IDID(
currRing->idroot));
262 if ((p==
NULL) ||(NUM((fraction)p)==
NULL))
264 Werror(
"Could not construct the alg. extension: minpoly==0");
269 if (DEN((fraction)(p)) !=
NULL)
271 poly z=NUM((fraction)p);
272 poly n=DEN((fraction)(p));
275 DEN((fraction)(p))=
NULL;
279 q->m[0] = NUM((fraction)p);
283 PrintS(
"\nTrying to conver the currRing into an algebraic field: ");
284 PrintS(
"Ground poly. ring: \n");
286 PrintS(
"\nGiven MinPOLY: ");
296 NUM((fractionObject *)p) =
NULL;
305 Werror(
"Could not construct the alg. extension: llegal minpoly?");
370 Werror(
"index[%d] must be positive",i+1);
383 res->
data=(
void *)ivn;
390 int c=e->next->start;
391 if ((i>=iv->
rows())||(c<1)||(c>iv->
cols()))
393 Werror(
"wrong range [%d,%d] in intmat %s(%d,%d)",i+1,c,res->
Name(),iv->
rows(),iv->
cols());
419 number2 nn=(number2)res->
data;
430 Werror(
"index[%d] must be positive",i+1);
436 WerrorS(
"only one index given");
441 int c=e->next->start;
442 if ((i>=iv->
rows())||(c<1)||(c>iv->
cols()))
444 Werror(
"wrong range [%d,%d] in cmatrix %s(%d,%d)",i+1,c,res->
Name(),iv->
rows(),iv->
cols());
476 Werror(
"index[%d] must be positive",i+1);
482 WerrorS(
"only one index given");
487 int c=e->next->start;
488 if ((i>=iv->
rows())||(c<1)||(c>iv->
cols()))
490 Werror(
"wrong range [%d,%d] in bigintmat %s(%d,%d)",i+1,c,res->
Name(),iv->
rows(),iv->
cols());
507 int add_row_shift = 0;
509 if (weights!=
NULL) add_row_shift=weights->
min_in();
553 Werror(
"index[%d] must be positive",j);
581 if ((am->
rows()!=1) || (am->
cols()!=1))
590 int j=e->next->start;
612 int j=e->next->start;
624 void* tmp = res->
data;
631 char *
s=(
char *)res->
data;
632 if ((e->start>0)&&(e->start<=(
int)strlen(s)))
633 s[e->start-1]=(char)(*((
char *)a->
Data()));
636 Werror(
"string index %d out of range 1..%d",e->start,(
int)strlen(s));
645 const char *procname,
int line,
753 res->
data = (
void *) l;
782 char *rn=f->preimage;
819 if ( qr->cf != newcf )
834 int *perm = (
int *)
omAlloc0((qr->N+1)*
sizeof(
int));
841 for(i = 0, j = 0; i<
IDELEMS(
id); i++)
878 Warn(
"%s is no twosided standard basis",a->
Name());
901 ring
r=(ring)a->
Data();
946 #define NULL_VAL NULL
969 WarnS(
"right side is not a datum, assignment ignored");
997 memcpy(l,&ll,
sizeof(
sleftv));
1018 WerrorS(
"error in assign: left side is not an l-value");
1024 #ifdef BLACKBOX_DEVEL
1025 Print(
"bb-assign: bb=%lx\n",bb);
1027 return (bb==
NULL) || bb->blackbox_Assign(l,r);
1092 Werror(
"`%s`(%s) = `%s` is not supported",
1095 Werror(
"`%s` = `%s` is not supported"
1104 Werror(
"expected `%s` = `%s`"
1172 Werror(
"`%s` = `%s` is not supported"
1181 Werror(
"expected `%s` = `%s`"
1199 memset(&t,0,
sizeof(
sleftv));
1201 while ((i<iv->length())&&(l!=
NULL))
1203 t.
data=(
char *)(
long)(*iv)[
i];
1208 if (nok)
return TRUE;
1227 memset(&t,0,
sizeof(
sleftv));
1235 t.
data=(
char *)I->m[i];
1333 Warn(
"expression list length(%d) does not match intmat size(%d)",
1340 (*iv)[i++] = (
int)((
long)(hh->
Data()));
1349 (*iv)[i++] = (*ivv)[ll++];
1383 Warn(
"expression list length(%d) does not match bigintmat size(%d x %d)",
1396 bim->
set(i++, (number)(hh->
Data()));
1435 sl += strlen((
char *)hh->
Data());
1443 t=(
char *)hh->
Data();
1464 memset(&t,0,
sizeof(
sleftv));
1470 while ((i<mxn )&&(l!=
NULL))
1472 t.
data=(
char *)m->
m[i];
1496 Warn(
"list length mismatch in assign (l>r)");
1503 Warn(
"list length mismatch in assign (l<r)");
1541 char *
s=(
char *)r->
Data();
1544 memset(&t,0,
sizeof(
sleftv));
1546 while ((i<sl)&&(l!=
NULL))
1568 int i=l->
e->start-1;
1571 Werror(
"index[%d] must be positive",i+1);
1596 memset(&(li->
m[li->
nr+1]),0,(i-li->
nr)*
sizeof(
sleftv));
1607 && (ld->
Typ()!=r->
Typ()))
1610 memset(&tmp,0,
sizeof(
sleftv));
1614 memcpy(ld,&tmp,
sizeof(
sleftv));
1616 else if ((ld->
e==
NULL)
1621 memset(&tmp,0,
sizeof(
sleftv));
1626 memcpy(ld,&tmp,
sizeof(
sleftv));
1631 if (l->
e!=
NULL) l->
e->next=ld->
e;
1654 }
while ((!b)&&(l!=
NULL));
1707 if(bb->blackbox_CheckAssign(bb,l,r))
return TRUE;
1710 if((!b) && (like_lists==2))
1734 #ifdef BLACKBOX_DEVEL
1735 Print(
"bb-assign: bb=%lx\n",bb);
1737 return (bb==
NULL) || bb->blackbox_Assign(l,r);
1825 Werror(
"length of lists in assignment does not match (l:%d,r:%d)",
1861 WerrorS(
"expected ring-name");
1867 WerrorS(
"expected image ideal");
1883 char *pr=((
map)olm)->preimage;
1899 Warn(
"expression list length(%d) does not match matrix size(%d)",el,num);
1947 for(k=0;k<
j;k++,i++)
1970 if (module_assign) lm->
rank=rk;
1971 else if (map_assign) ((
map)lm)->preimage=pr;
1989 Werror(
"cannot assign to %s",l->Fullname());
2071 char *vn=(
char *)v->
Name();
2078 WarnS(
"source and destination packages are identical");
2084 Warn(
"redefining `%s`",vn);
2090 memset(&h_expr,0,
sizeof(h_expr));
2094 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
const const intvec const intvec const ring _currRing const const intvec const intvec const ring _currRing int
static BOOLEAN jiA_MAP(leftv res, leftv a, Subexpr)
static BOOLEAN jiA_DEF(leftv res, leftv a, Subexpr e)
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)
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)
void jjNormalizeQRingP(leftv I)
static BOOLEAN jjA_L_INTVEC(leftv l, leftv r, intvec *iv)
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)
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)
const CanonicalForm CFMap CFMap int &both_non_zero int n
static short rVar(const ring r)
#define rVar(r) (r->N)
void id_Delete(ideal *h, ring r)
static BOOLEAN jjTRACE(leftv, leftv a)
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 ...
static bool rIsPluralRing(const ring r)
we must always have this test!
BOOLEAN piKill(procinfov pi)
char * String(BOOLEAN typed=FALSE)
static BOOLEAN jiA_MODUL_P(leftv res, leftv a, Subexpr)
#define pGetComp(p)
Component.
int int kStrategy strat if(h==NULL) return NULL
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)
static BOOLEAN jiA_INTVEC(leftv res, leftv a, Subexpr)
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.
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)
struct sValAssign dAssign[]
static BOOLEAN jjRTIMER(leftv, leftv a)
static BOOLEAN jiA_BIGINT(leftv res, leftv a, Subexpr e)
void idDelete(ideal *h, ring r=currRing)
delete an ideal
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)
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)
poly p_PermPoly(poly p, const int *perm, const ring oldRing, const ring dst, nMapFunc nMap, const int *par_perm, int OldPar)
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)
ideal idVec2Ideal(poly vec, const ring R=currRing)
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
BOOLEAN iiConvert(int inputType, int outputType, int index, leftv input, leftv output, struct sConvertTypes *dConvertTypes)
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)
number of non-zero polys in F
static FORCE_INLINE BOOLEAN nCoeff_is_Extension(const coeffs r)
struct sValAssign_sys dAssign_sys[]
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)
#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)
#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)