13 #define TRANSEXT_PRIVATES
75 #ifdef HAVE_GETTIMEOFDAY
111 #if HAVE_CAN_SHORT_OUT
124 cf->extRing->ShortOut = shortOut;
126 cf =
cf->extRing->cf;
139 number one =
nInit(1);
140 number nn=
nMult(n,one);
174 Werror(
"type %d too complex...set minpoly before",
IDTYP(
h));
break;
182 WarnS(
"Set minpoly over non-transcendental ground field to 0?!");
191 WarnS(
"Trying to set minpoly over non-transcendental ground field...");
194 WerrorS(
"cannot set minpoly for these coeffients");
201 WerrorS(
"only univarite minpoly allowed");
208 redefine_from_algext=(
currRing->cf->extRing->qideal!=
NULL);
213 WarnS(
"no minpoly allowed if there are local objects belonging to the basering: ");
234 WarnS(
"minpoly is already 0...");
238 WarnS(
"cannot set minpoly to 0 / alg. extension?");
246 Warn(
"killing a local object due to minpoly change: %s",
IDID(
currRing->idroot));
259 WerrorS(
"Could not construct the alg. extension: minpoly==0");
264 if (!redefine_from_algext && (DEN((fraction)(
p)) !=
NULL))
266 poly n=DEN((fraction)(
p));
269 WarnS(
"denominator must be constant - ignoring it");
272 DEN((fraction)(
p))=
NULL;
275 if (redefine_from_algext) q->m[0]=(poly)
p;
276 else q->m[0] =
NUM((fraction)
p);
280 PrintS(
"\nTrying to conver the currRing into an algebraic field: ");
281 PrintS(
"Ground poly. ring: \n");
283 PrintS(
"\nGiven MinPOLY: ");
290 if (!redefine_from_algext)
300 WerrorS(
"Could not construct the alg. extension: llegal minpoly?");
365 Werror(
"index[%d] must be positive",
i+1);
374 (*iv1)[
i]=(int)((
long)(a->
Data()));
378 res->data=(
void *)ivn;
381 (*iv)[
i]=(int)((
long)(a->
Data()));
385 int c=e->next->start;
386 if ((
i>=iv->
rows())||(c<1)||(c>iv->
cols()))
388 Werror(
"wrong range [%d,%d] in intmat %s(%d,%d)",
i+1,c,
res->Name(),iv->
rows(),iv->
cols());
414 number2 nn=(number2)
res->data;
425 Werror(
"index[%d] must be positive",
i+1);
431 WerrorS(
"only one index given");
436 int c=e->next->start;
437 if ((
i>=iv->
rows())||(c<1)||(c>iv->
cols()))
439 Werror(
"wrong range [%d,%d] in cmatrix %s(%d,%d)",
i+1,c,
res->Name(),iv->
rows(),iv->
cols());
463 number2 nn=(number2)
res->data;
464 number2 n=n2Init((
long)a->
Data(),nn->cf);
470 WerrorS(
"no Ring avialable for conversion from int");
479 Werror(
"index[%d] must be positive",
i+1);
485 WerrorS(
"only one index given");
490 int c=e->next->start;
491 if ((
i>=iv->
rows())||(c<1)||(c>iv->
cols()))
493 Werror(
"wrong range [%d,%d] in cmatrix %s(%d,%d)",
i+1,c,
res->Name(),iv->
rows(),iv->
cols());
511 number2 nn=(number2)
res->data;
512 number2 n=(number2)
omAlloc(
sizeof(*n));
520 number2 n=(number2)
omAlloc(
sizeof(*n));
536 poly2 nn=(poly2)
res->data;
547 Werror(
"index[%d] must be positive",
i+1);
562 poly2 nn=(poly2)
res->data;
563 poly2 n=(poly2)
omAlloc(
sizeof(*n));
571 poly2 n=(poly2)
omAlloc(
sizeof(*n));
594 Werror(
"index[%d] must be positive",
i+1);
600 WerrorS(
"only one index given");
605 int c=e->next->start;
606 if ((
i>=iv->
rows())||(c<1)||(c>iv->
cols()))
608 Werror(
"wrong range [%d,%d] in bigintmat %s(%d,%d)",
i+1,c,
res->Name(),iv->
rows(),iv->
cols());
625 int add_row_shift = 0;
627 if (weights!=
NULL) add_row_shift=weights->
min_in();
676 Werror(
"index[%d] must be positive",
j);
716 if ((am->
rows()!=1) || (am->
cols()!=1))
725 int j=e->next->start;
747 int j=e->next->start;
759 void* tmp =
res->data;
766 char *
s=(
char *)
res->data;
767 if ((e->start>0)&&(e->start<=(int)strlen(
s)))
768 s[e->start-1]=(char)(*((
char *)a->
Data()));
771 Werror(
"string index %d out of range 1..%d",e->start,(
int)strlen(
s));
780 const char *procname,
int line,
904 res->data = (
void *)
l;
933 char *rn=
f->preimage;
951 ring old_ring=(ring)
res->Data();
954 ideal
id = (ideal)a->
Data();
968 if (
qr->cf != newcf )
982 int *perm = (
int *)
omAlloc0((
qr->N+1)*
sizeof(int));
1025 Warn(
"%s is no twosided standard basis",a->
Name());
1052 ring r=(ring)a->
Data();
1064 if (e==
NULL)
res->data=(
char *)r;
1083 res->data=(
void *)0;
1099 #define NULL_VAL NULL
1124 WarnS(
"right side is not a datum, assignment ignored");
1151 else if (
l->name!=
NULL)
1180 WerrorS(
"error in assign: left side is not an l-value");
1186 #ifdef BLACKBOX_DEVEL
1187 Print(
"bb-assign: bb=%lx\n",bb);
1189 return (bb==
NULL) || bb->blackbox_Assign(
l,r);
1254 Werror(
"`%s`(%s) = `%s` is not supported",
1257 Werror(
"`%s` = `%s` is not supported"
1266 Werror(
"expected `%s` = `%s`"
1334 Werror(
"`%s` = `%s` is not supported"
1343 Werror(
"expected `%s` = `%s`"
1361 memset(&t,0,
sizeof(
sleftv));
1365 t.
data=(
char *)(
long)(*iv)[
i];
1370 if (nok)
return TRUE;
1387 memset(&t,0,
sizeof(
sleftv));
1397 t.
data=(
char *)I->m[
i];
1447 Werror(
"`%s` is undefined",
h->Fullname());
1495 Warn(
"expression list length(%d) does not match intmat size(%d)",
1502 (*iv)[
i++] = (int)((
long)(hh->
Data()));
1511 (*iv)[
i++] = (*ivv)[ll++];
1545 Warn(
"expression list length(%d) does not match bigintmat size(%d x %d)",
1558 bim->
set(
i++, (number)(hh->
Data()));
1597 sl += strlen((
char *)hh->
Data());
1605 t=(
char *)hh->
Data();
1626 memset(&t,0,
sizeof(
sleftv));
1632 while ((
i<mxn )&&(
l!=
NULL))
1658 WarnS(
"list length mismatch in assign (l>r)");
1665 WarnS(
"list length mismatch in assign (l<r)");
1703 char *
s=(
char *)r->
Data();
1706 memset(&t,0,
sizeof(
sleftv));
1708 while ((
i<sl)&&(
l!=
NULL))
1730 int i=
l->e->start-1;
1733 Werror(
"index[%d] must be positive",
i+1);
1736 if(
l->attribute!=
NULL)
1758 memset(&(li->
m[li->
nr+1]),0,(
i-li->
nr)*
sizeof(
sleftv));
1768 memset(&tmp,0,
sizeof(
sleftv));
1771 && (ld->
Typ()!=r->
Typ()))
1776 memcpy(ld,&tmp,
sizeof(
sleftv));
1778 else if ((ld->
e==
NULL)
1786 memcpy(ld,&tmp,
sizeof(
sleftv));
1791 if (
l->e!=
NULL)
l->e->next=ld->
e;
1814 }
while ((!
b)&&(
l!=
NULL));
1822 int ll=
l->listLength();
1829 Werror(
"`%s` is read-only",
l->Name());
1839 else if (
l->attribute!=
NULL)
1867 if(bb->blackbox_CheckAssign(bb,
l,r))
return TRUE;
1870 if((!
b) && (like_lists==2))
1894 #ifdef BLACKBOX_DEVEL
1895 Print(
"bb-assign: bb=%lx\n",bb);
1897 return (bb==
NULL) || bb->blackbox_Assign(
l,r);
1985 Werror(
"length of lists in assignment does not match (l:%d,r:%d)",
2020 WerrorS(
"expected ring-name");
2026 WerrorS(
"expected image ideal");
2046 char *pr=((
map)olm)->preimage;
2063 Warn(
"expression list length(%d) does not match matrix size(%d)",el,
num);
2113 for(
k=0;
k<
j;
k++,
i++)
2136 if (module_assign) lm->
rank=rk;
2137 else if (map_assign) ((
map)lm)->preimage=pr;
2155 Werror(
"cannot assign to %s",
l->Fullname());
2173 ideal I0=(ideal)I->
Data();
2218 char *vn=(
char *)
v->Name();
2225 WarnS(
"source and destination packages are identical");
2237 memset(&h_expr,0,
sizeof(h_expr));
2241 return iiAssign(&tmp_expr,&h_expr);
2245 Werror(
"`%s` not found in `%s`",
v->Name(), u->
Name());
struct for passing initialization parameters to naInitChar
void * atGet(idhdl root, const char *name, int t, void *defaultReturnValue)
static int si_max(const int a, const int b)
static int si_min(const int a, const int b)
#define BIMATELEM(M, I, J)
blackbox * getBlackboxStuff(const int t)
return the structure to the type given by t
CanonicalForm map(const CanonicalForm &primElem, const Variable &alpha, const CanonicalForm &F, const Variable &beta)
map from to such that is mapped onto
coeffs basecoeffs() const
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]
Class used for (list of) interpreter objects.
void CleanUp(ring r=currRing)
void Clean(ring r=currRing)
INLINE_THIS void Init(int l=0)
Coefficient rings, fields and other domains suitable for Singular polynomials.
static FORCE_INLINE coeffs n_CoeffRingQuot1(number c, const coeffs r)
static FORCE_INLINE BOOLEAN nCoeff_is_Extension(const coeffs r)
@ n_algExt
used for all algebraic extensions, i.e., the top-most extension in an extension tower is algebraic
static FORCE_INLINE nMapFunc n_SetMap(const coeffs src, const coeffs dst)
set the mapping function pointers for translating numbers from src to dst
coeffs nInitChar(n_coeffType t, void *parameter)
one-time initialisations for new coeffs in case of an error return NULL
static FORCE_INLINE BOOLEAN n_IsZero(number n, const coeffs r)
TRUE iff 'n' represents the zero element.
static FORCE_INLINE void n_Delete(number *p, const coeffs r)
delete 'p'
static FORCE_INLINE number n_Init(long i, const coeffs r)
a number representing i in the given coeff field/ring r
static FORCE_INLINE BOOLEAN nCoeff_is_algExt(const coeffs r)
TRUE iff r represents an algebraic extension field.
number(* nMapFunc)(number a, const coeffs src, const coeffs dst)
maps "a", which lives in src, into dst
static FORCE_INLINE void n_Normalize(number &n, const coeffs r)
inplace-normalization of n; produces some canonical representation of n;
void nKillChar(coeffs r)
undo all initialisations
static FORCE_INLINE BOOLEAN nCoeff_is_transExt(const coeffs r)
TRUE iff r represents a transcendental extension field.
const CanonicalForm int s
const Variable & v
< [in] a sqrfree bivariate poly
void WerrorS(const char *s)
const char * Tok2Cmdname(int tok)
int iiTestConvert(int inputType, int outputType)
#define idDelete(H)
delete an ideal
#define idSimpleAdd(A, B)
static ideal idVec2Ideal(poly vec)
#define idPosConstant(I)
index of generator with leading term in ground ring (if any); otherwise -1
static BOOLEAN length(leftv result, leftv arg)
intvec * ivAdd(intvec *a, intvec *b)
#define IMATELEM(M, I, J)
static BOOLEAN jiA_1x1INTMAT(leftv res, leftv a, Subexpr e)
static BOOLEAN jiA_INTVEC(leftv res, leftv a, Subexpr)
static BOOLEAN jiA_MATRIX_L(leftv l, leftv r)
static BOOLEAN jiA_PACKAGE(leftv res, leftv a, Subexpr)
void jjNormalizeQRingId(leftv I)
static BOOLEAN jiA_1x1MATRIX(leftv res, leftv a, Subexpr e)
static BOOLEAN jjPRINTLEVEL(leftv, leftv a)
static BOOLEAN jjMINPOLY(leftv, leftv a)
static BOOLEAN jjTRACE(leftv, leftv a)
void jjNormalizeQRingP(poly &p)
static BOOLEAN jiA_VECTOR_L(leftv l, leftv r)
static BOOLEAN jiA_BIGINT(leftv res, leftv a, Subexpr e)
static BOOLEAN iiAssign_sys(leftv l, leftv r)
static BOOLEAN jiA_POLY(leftv res, leftv a, Subexpr e)
static BOOLEAN jjCOLMAX(leftv, leftv a)
static BOOLEAN jiAssign_rec(leftv l, leftv r)
static BOOLEAN jjECHO(leftv, leftv a)
static BOOLEAN jiA_BUCKET(leftv res, leftv a, Subexpr e)
static BOOLEAN jiA_RESOLUTION(leftv res, leftv a, Subexpr)
static BOOLEAN jiA_CRING(leftv res, leftv a, Subexpr)
static BOOLEAN jjMAXDEG(leftv, leftv a)
static BOOLEAN jjA_L_LIST(leftv l, leftv r)
static void jiAssignAttr(leftv l, leftv r)
BOOLEAN jjIMPORTFROM(leftv, leftv u, leftv v)
static BOOLEAN jjRTIMER(leftv, leftv a)
static BOOLEAN jiA_RING(leftv res, leftv a, Subexpr e)
static BOOLEAN jiA_MAP(leftv res, leftv a, Subexpr)
static BOOLEAN jiA_INT(leftv res, leftv a, Subexpr e)
static BOOLEAN jiA_STRING_L(leftv l, leftv r)
static BOOLEAN jjA_L_BIGINTMAT(leftv l, leftv r, bigintmat *bim)
static void jjMINPOLY_red(idhdl h)
static BOOLEAN jiA_DEF(leftv res, leftv, Subexpr)
static BOOLEAN jiA_IDEAL(leftv res, leftv a, Subexpr)
static BOOLEAN jiA_MODUL_P(leftv res, leftv a, Subexpr)
static BOOLEAN jiA_BIGINTMAT(leftv res, leftv a, Subexpr)
static BOOLEAN jiA_NUMBER(leftv res, leftv a, Subexpr)
static BOOLEAN jiAssign_list(leftv l, leftv r)
static BOOLEAN jjA_L_STRING(leftv l, leftv r)
static BOOLEAN jiAssign_1(leftv l, leftv r, BOOLEAN toplevel)
static BOOLEAN jiA_LIST_RES(leftv res, leftv a, Subexpr)
static BOOLEAN jiA_LINK(leftv res, leftv a, Subexpr)
static BOOLEAN jiA_MAP_ID(leftv res, leftv a, Subexpr)
static BOOLEAN jiA_STRING(leftv res, leftv a, Subexpr e)
static BOOLEAN jjSHORTOUT(leftv, leftv a)
static BOOLEAN jjNOETHER(leftv, leftv a)
BOOLEAN iiAssign(leftv l, leftv r, BOOLEAN toplevel)
static BOOLEAN jiA_IDEAL_M(leftv res, leftv a, Subexpr)
static BOOLEAN jiA_INTVEC_L(leftv l, leftv r)
static BOOLEAN jiA_QRING(leftv res, leftv a, Subexpr e)
static BOOLEAN jiA_LIST(leftv res, leftv a, Subexpr)
static BOOLEAN jjMAXMULT(leftv, leftv a)
static BOOLEAN jjTIMER(leftv, leftv a)
static BOOLEAN jjA_L_INTVEC(leftv l, leftv r, intvec *iv)
static BOOLEAN jiA_PROC(leftv res, leftv a, Subexpr)
BOOLEAN iiConvert(int inputType, int outputType, int index, leftv input, leftv output, const struct sConvertTypes *dConvertTypes)
void killhdl2(idhdl h, idhdl *ih, ring r)
void * idrecDataInit(int t)
void killhdl(idhdl h, package proot)
void ipMoveId(idhdl tomove)
BOOLEAN piKill(procinfov pi)
procinfo * iiInitSingularProcinfo(procinfov pi, const char *libname, const char *procname, int, long pos, BOOLEAN pstatic)
int iiDeclCommand(leftv sy, leftv name, int lev, int t, idhdl *root, BOOLEAN isring, BOOLEAN init_b)
int exprlist_length(leftv v)
lists syConvRes(syStrategy syzstr, BOOLEAN toDel, int add_row_shift)
poly kNF(ideal F, ideal Q, poly p, int syzComp, int lazyReduce)
static bool rIsSCA(const ring r)
bool nc_SetupQuotient(ring rGR, const ring rG=NULL, bool bCopy=false)
BOOLEAN lRingDependend(lists L)
poly p_MinPolyNormalize(poly p, const ring r)
matrix mpNew(int r, int c)
create a r x c zero-matrix
#define MATELEM(mat, i, j)
#define SMATELEM(A, i, j, R)
The main handler for Singular numbers which are suitable for Singular polynomials.
#define omreallocSize(addr, o_size, size)
#define omFreeBin(addr, bin)
#define TEST_V_ASSIGN_NONE
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)
void pEnlargeSet(poly **p, int l, int increment)
void p_Write(poly p, ring lmRing, ring tailRing)
static void p_Delete(poly *p, const ring r)
static BOOLEAN p_IsConstantPoly(const poly p, const ring r)
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Compatiblity layer for legacy polynomial operations (over currRing)
#define pGetComp(p)
Component.
ideal idrCopyR(ideal id, ring src_r, ring dest_r)
void PrintS(const char *s)
void Werror(const char *fmt,...)
void rWrite(ring r, BOOLEAN details)
void rDelete(ring r)
unconditionally deletes fields in r
static BOOLEAN rField_is_Ring(const ring r)
static BOOLEAN rIsPluralRing(const ring r)
we must always have this test!
static short rVar(const ring r)
#define rVar(r) (r->N)
void sBucketDestroyAdd(sBucket_pt bucket, poly *p, int *length)
void slCleanUp(si_link l)
BOOLEAN slInit(si_link l, char *istr)
static si_link slCopy(si_link l)
ideal idInit(int idsize, int rank)
initialise an ideal / module
void id_Delete(ideal *h, ring r)
deletes an ideal/module/matrix
void id_Normalize(ideal I, const ring r)
normialize all polys in id
int idElem(const ideal F)
count non-zero elements
void idSkipZeroes(ideal ide)
gives an ideal/module the minimal possible size
BOOLEAN assumeStdFlag(leftv h)
void syKillComputation(syStrategy syzstr, ring r=currRing)
const struct sValAssign dAssign[]
const struct sValAssign_sys dAssign_sys[]