14 #include <factory/factory.h> 106 #define PLURAL_MASK 3 108 #define PLURAL_MASK 0 113 #define ZERODIVISOR_MASK 8 116 #define ZERODIVISOR_MASK 0 118 #define ALLOW_PLURAL 1 120 #define COMM_PLURAL 2 123 #define NO_ZERODIVISOR 8 124 #define ALLOW_ZERODIVISOR 0 150 typedef char * (*Proc1)(
char *);
187 short number_of_args;
216 extern int iiArithAddCmd(
const char *szName,
short nAlias,
short nTokval,
217 short nToktype,
short nPos=-1);
227 #define ii_div_by_0 "div. by 0" 236 if ((
long)i==
l)
return l;
248 if (sArithBase.
sCmds[
i].tokval==op)
249 return sArithBase.
sCmds[
i].toktype;
261 int bb = (int)(
long)(v->
Data());
266 case '+': cc=
bimAdd(aa,bb);
break;
267 case '-': cc=
bimSub(aa,bb);
break;
268 case '*': cc=
bimMult(aa,bb);
break;
270 res->
data=(
char *)cc;
280 number bb = (number)(v->
Data());
287 res->
data=(
char *)cc;
297 int bb = (int)(
long)(v->
Data());
301 case '+': (*aa) += bb;
break;
302 case '-': (*aa) -= bb;
break;
303 case '*': (*aa) *= bb;
break;
306 case '%': (*aa) %= bb;
break;
308 res->
data=(
char *)aa;
318 int bb = (int)(
long)(v->
Data());
322 case '+':
for (;i>0;i--)
IMATELEM(*aa,i,i) += bb;
324 case '-':
for (;i>0;i--)
IMATELEM(*aa,i,i) -= bb;
327 res->
data=(
char *)aa;
336 int l=(int)(
long)v->
Data();
339 int d=(int)(
long)u->
Data();
342 for(i=l-1;i>=0;i--) { (*vv)[
i]=d; }
343 res->
data=(
char *)vv;
361 res->
data = (
char *) (r<0);
364 res->
data = (
char *) (r>0);
367 res->
data = (
char *) (r<=0);
370 res->
data = (
char *) (r>=0);
374 res->
data = (
char *) (r==0);
378 if(r==-2) {
WerrorS(
"size incompatible");
return TRUE; }
389 res->
data = (
char *) (r<0);
392 res->
data = (
char *) (r>0);
395 res->
data = (
char *) (r<=0);
398 res->
data = (
char *) (r>=0);
402 res->
data = (
char *) (r==0);
406 if(r==-2) {
WerrorS(
"size incompatible");
return TRUE; }
412 int b = (int)(
long)(v->
Data());
417 res->
data = (
char *) (r<0);
420 res->
data = (
char *) (r>0);
423 res->
data = (
char *) (r<=0);
426 res->
data = (
char *) (r>=0);
430 res->
data = (
char *) (r==0);
472 res->
data = (
char *) (r < 0);
475 res->
data = (
char *) (r > 0);
478 res->
data = (
char *) (r <= 0);
481 res->
data = (
char *) (r >= 0);
493 char*
a = (
char * )(u->
Data());
494 char*
b = (
char * )(v->
Data());
499 res->
data = (
char *) (result < 0);
502 res->
data = (
char *) (result > 0);
505 res->
data = (
char *) (result <= 0);
508 res->
data = (
char *) (result >= 0);
512 res->
data = (
char *) (result == 0);
536 int b=(int)(
long)u->
Data();
537 int e=(int)(
long)v->
Data();
546 else if ((e==0)||(b==1))
564 if(rc/b!=oldrc) overflow=
TRUE;
568 WarnS(
"int overflow(^), result may be wrong");
570 res->
data = (
char *)((
long)rc);
576 WerrorS(
"exponent must be non-negative");
582 int e=(int)(
long)v->
Data();
583 number n=(number)u->
Data();
590 WerrorS(
"exponent must be non-negative");
598 int e=(int)(
long)v->
Data();
599 number n=(number)u->
Data();
616 int v_i=(int)(
long)v->
Data();
619 WerrorS(
"exponent must be non-negative");
627 Werror(
"OVERFLOW in power(d=%ld, e=%d, max=%ld)",
711 if(isupper(u->
name[0]))
713 const char *c=u->
name+1;
714 while((*c!=
'\0')&&(islower(*c)||(isdigit(*c)))) c++;
719 Print(
"%s of type 'ANY'. Trying load.\n", u->
name);
735 package pa=(package)u->Data();
749 WerrorS(
"reserved name with ::");
754 memcpy(res, v,
sizeof(
sleftv));
755 memset(v, 0,
sizeof(
sleftv));
761 WerrorS(
"<package>::<id> expected");
768 unsigned int a=(
unsigned int)(
unsigned long)u->
Data();
769 unsigned int b=(
unsigned int)(
unsigned long)v->
Data();
771 res->
data = (
char *)((
long)c);
774 WarnS(
"int overflow(+), result may be wrong");
798 WerrorS(
"intmat size not compatible");
808 WerrorS(
"bigintmat/cmatrix not compatible");
819 Werror(
"matrix size not compatible(%dx%d, %dx%d)",
842 char*
a = (
char * )(u->
Data());
843 char*
b = (
char * )(v->
Data());
844 char*
r = (
char * )
omAlloc(strlen(a) + strlen(b) + 1);
857 void *ap=u->
Data();
void *bp=v->
Data();
858 int aa=(int)(
long)ap;
859 int bb=(int)(
long)bp;
861 unsigned int a=(
unsigned int)(
unsigned long)ap;
862 unsigned int b=(
unsigned int)(
unsigned long)bp;
866 WarnS(
"int overflow(-), result may be wrong");
868 res->
data = (
char *)((
long)cc);
891 WerrorS(
"intmat size not compatible");
901 WerrorS(
"bigintmat/cmatrix not compatible");
912 Werror(
"matrix size not compatible(%dx%d, %dx%d)",
921 int a=(int)(
long)u->
Data();
922 int b=(int)(
long)v->
Data();
924 if ((c>INT_MAX)||(c<INT_MIN))
925 WarnS(
"int overflow(*), result may be wrong");
926 res->
data = (
char *)((
long)((int)c));
941 number n=(number)res->
data;
961 Warn(
"possible OVERFLOW in mult(d=%ld, d=%ld, max=%ld)",
973 Warn(
"possible OVERFLOW in mult(d=%ld, d=%ld, max=%ld)",
1008 WerrorS(
"intmat size not compatible");
1020 WerrorS(
"bigintmat/cmatrix not compatible");
1034 res->
data = (
char *)I;
1048 res->
data = (
char *)I;
1058 res->
data = (
char *)I;
1089 Werror(
"matrix size not compatible(%dx%d, %dx%d) in *",
1107 res->
data = (
char *)(
long)((int)((
long)u->
Data()) >= (
int)((long)v->
Data()));
1125 res->
data = (
char *)(
long)((int)((
long)u->
Data()) > (
int)((long)v->
Data()));
1139 res->
data = (
char *)(
long)((int)((
long)u->
Data()) <= (
int)((long)v->
Data()));
1152 res->
data = (
char *)(
long)((int)((
long)u->
Data()) < (
int)((long)v->
Data()));
1162 int a= (int)(
long)u->
Data();
1163 int b= (int)(
long)v->
Data();
1177 r=((a-c) /b);
break;
1179 res->
data=(
void *)((
long)
r);
1184 number q=(number)v->
Data();
1192 res->
data = (
char *)q;
1197 number q=(number)v->
Data();
1205 res->
data = (
char *)q;
1244 I->m[
i]=
pAdd(I->m[i],p);
1250 for(i=comps-1;i>=0;i--)
1260 res->
data=(
void *)p;
1269 WerrorS(
"division only defined over coefficient domains");
1274 WerrorS(
"division over a coefficient domain only implemented for terms");
1310 res->
data=(
char *)mm;
1321 res->
data = (
char *)((
int)((long)u->
Data()) == (
int)((long)v->
Data()));
1360 res->
data = (
char *)((
long)u->
Data() && (long)v->
Data());
1365 res->
data = (
char *)((
long)u->
Data() || (long)v->
Data());
1378 while (sh->next !=
NULL) sh=sh->next;
1394 WerrorS(
"indexed object must have a name");
1401 memset(&t,0,
sizeof(t));
1403 for (i=0;i<iv->
length(); i++)
1405 t.
data=(
char *)((
long)(*iv)[
i]);
1429 int i=(int)(
long)v->
Data();
1450 for(i=iv->
length()-1;i>=0;i--)
1453 while ((p!=
NULL) && (sum>0))
1456 for(i=iv->
length()-1;i>=0;i--)
1469 res->
data=(
char *)r;
1477 int i=(int)(
long)v->
Data();
1482 if (r==p) r=
pNext(p);
1499 res->
data=(
char *)r;
1513 for(i=0;i<iv->
length();i++)
1533 res->
data=(
char *)r;
1541 char * nn = (
char *)
omAlloc(strlen(u->
name) + 14);
1542 sprintf(nn,
"%s(%d)",u->
name,(
int)(
long)v->
Data());
1556 long slen = strlen(u->
name) + 14;
1557 char *n = (
char*)
omAlloc(slen);
1559 for (i=0;i<iv->
length(); i++)
1570 sprintf(n,
"%s(%d)",u->
name,(*iv)[i]);
1582 memset(tmp,0,
sizeof(
sleftv));
1608 tmp_proc->
id=
"_auto";
1612 d=u->
data; u->
data=(
void *)tmp_proc;
1629 if (sl)
return TRUE;
1648 memcpy(res,sl,
sizeof(
sleftv));
1657 number *
x=(number *)
omAlloc(rl*
sizeof(number));
1658 number *q=(number *)
omAlloc(rl*
sizeof(number));
1660 for(i=rl-1;i>=0;i--)
1667 for(i=rl-1;i>=0;i--)
1673 res->
data=(
char *)n;
1683 number *
x=(number *)
omAlloc(rl*
sizeof(number));
1684 number *q=(number *)
omAlloc(rl*
sizeof(number));
1686 for(i=rl-1;i>=0;i--)
1692 for(i=rl-1;i>=0;i--)
1696 Werror(
"poly expected at pos %d",i+1);
1697 for(i=rl-1;i>=0;i--)
1706 else if (
pLmCmp(r,h)==-1) r=h;
1709 for(i=rl-1;i>=0;i--)
1721 number n=n_ChineseRemainder(x,q,rl,
currRing->cf);
1722 for(i=rl-1;i>=0;i--)
1728 result=
pAdd(result,h);
1730 for(i=rl-1;i>=0;i--)
1735 res->
data=(
char *)result;
1742 int s=(int)(
long)v->
Data();
1751 ideal
M=(ideal)u->
CopyD();
1752 int s=(int)(
long)v->
Data();
1772 ideal *
x=(ideal *)
omAlloc(rl*
sizeof(ideal));
1775 int return_type=c->
m[0].
Typ();
1783 WerrorS(
"poly/ideal/module/matrix expected");
1801 for(i=rl-1;i>=0;i--)
1803 if (c->
m[i].
Typ()!=return_type)
1828 xx=(number *)
omAlloc(rl*
sizeof(number));
1829 for(i=rl-1;i>=0;i--)
1841 Werror(
"bigint expected at pos %d",i+1);
1848 number *q=(number *)
omAlloc(rl*
sizeof(number));
1851 for(i=rl-1;i>=0;i--)
1858 for(i=rl-1;i>=0;i--)
1870 Werror(
"bigint expected at pos %d",i+1);
1886 res->
data=(
char *)n;
1895 res->
data=(
char *)result->m[0];
1900 res->
data=(
char *)result;
1902 for(i=rl-1;i>=0;i--)
1907 res->
rtyp=return_type;
1908 return result==
NULL;
1938 (ideal)(v->
Data()), p);
1950 ideal I=(ideal)u->
Data();
1955 res->
data = (
char *)((
long)d);
1966 res->
data = (
char *)(d);
1969 res->
data=(
char *)(
long)(-1);
2011 ideal vid = (ideal)v->
Data();
2015 res->
data = (
char *)-1;
2024 if (i != -1)
pDelete(&vv->m[i]);
2027 res->
data = (
char *)d;
2046 ideal vi=(ideal)v->
Data();
2048 ideal ui=(ideal)u->
Data();
2082 res->
data=(
char *)L;
2119 number uu=(number)u->
Data();number vv=(number)v->
Data();
2128 res->
data=(
char *)L;
2133 int uu=(int)(
long)u->
Data();
int vv=(int)(
long)v->
Data();
2134 int p0=
ABS(uu),p1=
ABS(vv);
2135 int f0 = 1, f1 = 0, g0 = 0, g1 = 1, q,
r;
2157 res->
data=(
char *)L;
2164 if (ret)
return TRUE;
2167 res->
data=(
char *)L;
2168 L->
m[0].
data=(
void *)r;
2170 L->
m[1].
data=(
void *)pa;
2172 L->
m[2].
data=(
void *)pb;
2180 int sw=(int)(
long)dummy->
Data();
2182 if ((sw<0)||(sw>2)) fac_sw=1;
2183 singclap_factorize_retry=0;
2195 l->
m[0].
data=(
void *)f;
2197 l->
m[1].
data=(
void *)v;
2198 res->
data=(
void *)l;
2203 res->
data=(
void *)f;
2216 res->
data=(
void *)p;
2230 while (p!=NULL) { p=p->next;l++; }
2236 L->
m[
l].
data=(
char *)h->d;
2243 res->
data=(
void *)L;
2250 number uu=(number)u->
Data();
2251 number vv=(number)v->
Data();
2259 ideal uu=(ideal)u->
Data();
2260 number vv=(number)v->
Data();
2267 ring
r=(ring)u->
Data();
2276 int par_perm_size=0;
2289 par_perm_size=
rPar(r);
2298 perm=(
int *)
omAlloc0((r->N+1)*
sizeof(int));
2299 if (par_perm_size!=0)
2300 par_perm=(
int *)
omAlloc0(par_perm_size*
sizeof(
int));
2305 char ** r_par_names=
NULL;
2306 if (r->cf->extRing!=
NULL)
2308 r_par=r->cf->extRing->N;
2309 r_par_names=r->cf->extRing->names;
2312 char ** c_par_names=
NULL;
2316 c_par_names=
currRing->cf->extRing->names;
2318 maFindPerm(r->names, r->N, r_par_names, r_par,
2320 perm,par_perm,
currRing->cf->type);
2325 if (par_perm_size!=0)
2335 Print(
"// var nr %d: %s -> %s\n",i,r->names[i],
currRing->names[i]);
2339 Print(
"// par nr %d: %s -> %s\n",
2345 memset(&tmpW,0,
sizeof(
sleftv));
2349 perm,par_perm,par_perm_size,nMap)))
2377 char *where=(
char *)u->
Data();
2378 char *what=(
char *)v->
Data();
2379 char *
found = strstr(where,what);
2382 res->
data=(
char *)((found-where)+1);
2395 int uu=(int)(
long)u->
Data();
int vv=(int)(
long)v->
Data();
2396 int p0=
ABS(uu),p1=
ABS(vv);
2404 res->
data=(
char *)(
long)p0;
2409 number n1 = (number) u->
Data();
2410 number n2 = (number) v->
Data();
2416 number
a=(number) u->
Data();
2417 number
b=(number) v->
Data();
2443 ring tempR =
rCopy(origR);
2448 ideal uid = (ideal)u->
Data();
2451 sleftv uuAsLeftv; memset(&uuAsLeftv, 0,
sizeof(uuAsLeftv));
2456 Print(
"// NOTE: computation of Hilbert series etc. is being\n");
2457 Print(
"// performed for generic fibre, that is, over Q\n");
2460 int returnWithTrue = 1;
2461 switch((
int)(
long)v->
Data())
2464 res->
data=(
void *)iv;
2479 if (returnWithTrue)
return TRUE;
else return FALSE;
2485 switch((
int)(long)v->
Data())
2488 res->
data=(
void *)iv;
2513 WerrorS(
"variable must have weight 1");
2535 WerrorS(
"variable must have weight 1");
2542 ideal v_id=(ideal)v->
Data();
2551 currRing->pLexOrder=save_pLexOrder;
2555 if (w!=
NULL)
delete w;
2574 const int n = L->
nr;
assume (n >= 0);
2575 std::vector<ideal> V(n + 1);
2577 for(
int i = n;
i >= 0;
i--) V[
i] = (ideal)(L->
m[
i].
Data());
2628 memset(&h,0,
sizeof(
sleftv));
2659 char *
s=(
char *)u->
Data();
2660 if(strcmp(s,
"with")==0)
2662 if (strcmp(s,
"try")==0)
2664 WerrorS(
"invalid second argument");
2665 WerrorS(
"load(\"libname\" [,option]);");
2687 ideal u_id=(ideal)u->
Data();
2688 ideal v_id=(ideal)v->
Data();
2691 if ((*w_u).compare((w_v))!=0)
2693 WarnS(
"incompatible weights");
2694 delete w_u; w_u=
NULL;
2702 WarnS(
"wrong weights");
2703 delete w_u; w_u=
NULL;
2719 number q=(number)v->
Data();
2730 number q=(number)v->
Data();
2747 char *opt=(
char *)v->
Data();
2759 if(strcmp(l->m->type,
"ASCII")!=0)
2761 Werror(
"ASCII link required, not `%s`",l->m->type);
2766 if ( l->name[0]!=
'\0')
2770 if (v==
NULL) opt=(
const char*)
"i";
2771 else opt=(
const char *)v->
Data();
2778 monitor((FILE *)l->data,mode);
2806 if(err) {
pDelete(&p);
WerrorS(
"no negative exponent allowed"); }
2820 int i=(
int)(long)v->
Data();
2828 Werror(
"par number %d out of range 1..%d",
i,p);
2838 WerrorS(
"basering must NOT be a qring!");
2859 WerrorS(
"basering must NOT be a qring!");
2880 WerrorS(
"basering must NOT be a qring!");
2901 WerrorS(
"basering must NOT be a qring!");
2940 ring
r = (ring)a->
Data();
2949 Werror(
"%s is not an opposite ring to current ring",a->
Fullname());
2955 int argtype =
IDTYP(w);
2962 res->
rtyp = argtype;
2970 res->
rtyp = argtype;
2978 res->
rtyp = argtype;
2991 res->
rtyp = argtype;
2996 WerrorS(
"unsupported type in oppose");
3020 int i=(int)(
long)u->
Data();
3021 int j=(int)(
long)v->
Data();
3022 if (j-i <0) {
WerrorS(
"invalid range for random");
return TRUE;}
3023 res->
data =(
char *)(
long)((i >
j) ? i : (
siRand() % (j-i+1)) +
i);
3029 int isRowEchelon = (int)(
long)v->
Data();
3030 if (isRowEchelon != 1) isRowEchelon = 0;
3031 int rank =
luRank(m, isRowEchelon);
3032 res->
data =(
char *)(
long)rank;
3042 if ((l!=
NULL)&&(l->name!=
NULL)) s=l->name;
3044 Werror(
"cannot read from `%s`",s);
3047 memcpy(res,r,
sizeof(
sleftv));
3053 ideal vi=(ideal)v->
Data();
3061 ideal ui=(ideal)u->
Data();
3062 ideal vi=(ideal)v->
Data();
3071 int maxl=(int)(
long)v->
Data();
3074 WerrorS(
"length for res must not be negative");
3082 ideal u_id=(ideal)u->
Data();
3091 "full resolution in a qring may be infinite, setting max length to %d",
3105 int add_row_shift=0;
3109 add_row_shift = ww->
min_in();
3110 (*ww) -= add_row_shift;
3130 (
"`lres` not implemented for inhomogeneous input or qring");
3142 (
"`kres` not implemented for inhomogeneous input or qring");
3154 (
"`hres` not implemented for inhomogeneous input or qring");
3162 res->
data=(
void *)r;
3166 if (weights!=
NULL) (*w) += add_row_shift;
3182 if (ww!=
NULL) {
delete ww; ww=
NULL; }
3188 int maxl=(int)(
long)v->
Data();
3191 WerrorS(
"length for res must not be negative");
3197 ideal u_id=(ideal)u->
Data();
3206 "full resolution in a qring may be infinite, setting max length to %d",
3220 int add_row_shift=0;
3224 add_row_shift = ww->
min_in();
3225 (*ww) -= add_row_shift;
3241 (
"`lres` not implemented for inhomogeneous input or qring");
3245 WarnS(
"the current implementation of `lres` may not work in the case of a single variable");
3255 (
"`kres` not implemented for inhomogeneous input or qring");
3267 (
"`hres` not implemented for inhomogeneous input or qring");
3270 ideal u_id_copy=
idCopy(u_id);
3272 r=
syHilb(u_id_copy,&dummy);
3278 res->
data=(
void *)r;
3279 if ((weights!=
NULL) && (ww!=
NULL)) {
delete ww; ww=
NULL; }
3283 if (weights!=
NULL) (*ww) += add_row_shift;
3313 n1 = (number)u->
CopyD();
3317 i = (int)(
long)u->
Data();
3325 i = (int)(
long)v->
Data();
3329 res->
data = (
char*)l;
3336 res->
data = (
char *)r;
3339 #define SIMPL_LMDIV 32 3340 #define SIMPL_LMEQ 16 3341 #define SIMPL_MULT 8 3343 #define SIMPL_NULL 2 3344 #define SIMPL_NORM 1 3347 int sw = (int)(
long)v->
Data();
3374 res->
data = (
char * )
id;
3381 int sw=(int)(
long)dummy->
Data();
3384 singclap_factorize_retry=0;
3396 l->
m[0].
data=(
void *)f;
3398 l->
m[1].
data=(
void *)v;
3399 res->
data=(
void *)l;
3404 res->
data=(
void *)f;
3417 res->
data=(
void *)p;
3438 int sw = (int)(
long)v->
Data();
3445 res->
data = (
char * )p;
3453 ideal u_id=(ideal)(u->
Data());
3469 res->
data = (
char *)result;
3478 ideal i1=(ideal)(u->
Data());
3516 res->
data = (
char *)result;
3520 i0=(ideal)v->
CopyD();
3559 res->
data = (
char *)result;
3567 int i=(
int)(long)v->
Data();
3588 int t = (int)(
long)v->
Data();
3598 res->
data = (
void*)(
long)
i;
3613 int timeout = 1000*(int)(
long)v->
Data();
3621 for(
int nfinished = 0; nfinished < Lforks->
nr+1; nfinished++)
3646 res->
data = (
void*)(
long)ret;
3654 #define jjWRONG2 (proc2)jjWRONG 3655 #define jjWRONG3 (proc3)jjWRONG 3700 res->
data = (
char *)n;
3705 res->
data = (
char *)(-(
long)u->
Data());
3712 res->
data = (
char *)n;
3730 res->
data = (
char *)iv;
3737 res->
data = (
char *)bim;
3755 l->m[0].data=(
void *)m;
3756 l->m[1].data=(
void *)iv;
3757 res->
data = (
char *)l;
3777 number n=(number)u->
CopyD();
3801 number n=(number) tmp.
data;
3839 res->
data = (
char *)p;
3871 ring
r=(ring)v->
Data();
3876 extern int ipower (
int b,
int n );
3877 elems=
ipower(r->cf->ch,r->cf->extRing->pFDeg(r->cf->extRing->qideal->m[0],r->cf->extRing));
3879 res->
data = (
char *)(
long)elems;
3887 else res->
data=(
char *)-1;
3892 ideal I=(ideal)u->
Data();
3898 res->
data = (
char *)(
long)d;
3908 ring tempR =
rCopy(origR);
3913 ideal vid = (ideal)v->
Data();
3916 sleftv vvAsLeftv; memset(&vvAsLeftv, 0,
sizeof(vvAsLeftv));
3921 Print(
"// NOTE: computation of degree is being performed for\n");
3922 Print(
"// generic fibre, that is, over Q\n");
3946 else if (v->
rtyp!=0) res->
data=(
void *)(-1);
3954 number n =
reinterpret_cast<number
>(v->
Data());
3963 number n =
reinterpret_cast<number
>(v->
Data());
3980 res ->
data = (
char *)p;
3992 Werror(
"det of %d x %d bigintmat",i,j);
4001 number2
r=(number2)
omAlloc0(
sizeof(*r));
4011 Werror(
"det of %d x %d cmatrix",i,j);
4026 Werror(
"det of %d x %d intmat",i,j);
4033 ideal I=(ideal)v->
Data();
4044 res->
data = (
char *)p;
4053 ideal vid = (ideal)v->
Data();
4057 res->
data = (
char *)-1L;
4079 for(i=0;i<
idSize(vv);i++)
4087 for(j = 0;j<
idSize(vc)-1;j++)
4096 if (j != -1)
pDelete(&vc->m[j]);
4109 res->
data = (
char *)d;
4123 if ((l!=
NULL)&&(l->name!=
NULL)) s=l->name;
4125 Werror(
"cannot dump to `%s`",s);
4134 int co=(int)(
long)v->
Data();
4140 else WerrorS(
"argument of gen must be positive");
4145 char * d = (
char *)v->
Data();
4146 char *
s = (
char *)
omAlloc(strlen(d) + 13);
4147 strcpy( s, (
char *)d);
4148 strcat( s,
"\n;RETURN();\n");
4169 while (p!=
NULL) { p=p->next;l++; }
4174 L->
m[
l].
data=(
char *)h->d;
4185 WarnS(
"no factorization implemented");
4189 res->
data=(
void *)L;
4195 singclap_factorize_retry=0;
4202 l->
m[0].
data=(
void *)f;
4204 l->
m[1].
data=(
void *)v;
4205 res->
data=(
void *)l;
4214 if ((l!=
NULL)&&(l->name!=
NULL)) s=l->name;
4216 Werror(
"cannot get dump from `%s`",s);
4225 ideal I=(ideal)v->
Data();
4234 ideal I=(ideal)v->
Data();
4248 WerrorS(
"module must be zero-dimensional");
4249 if (delete_w)
delete w;
4272 if (delete_w)
delete w;
4273 res->
data=(
void *)po;
4282 ring tempR =
rCopy(origR);
4287 ideal vid = (ideal)v->
Data();
4290 sleftv vvAsLeftv; memset(&vvAsLeftv, 0,
sizeof(vvAsLeftv));
4295 Print(
"// NOTE: computation of Hilbert series etc. is being\n");
4296 Print(
"// performed for generic fibre, that is, over Q\n");
4317 Print(
"// NOTE: computation of Hilbert series etc. is being\n");
4318 Print(
"// performed for generic fibre, that is, over Q\n");
4327 ideal v_id=(ideal)v->
Data();
4335 char *s_isHomog=
omStrDup(
"isHomog");
4341 else if (w!=
NULL)
delete w;
4378 res->
data=(
char *)mat;
4388 res->
data=(
char *)I;
4395 ring q=(ring)v->
Data();
4398 if (q->qideal==
NULL)
4405 WerrorS(
"can only get ideal from identical qring");
4431 Warn(
"interred: this command is experimental over the integers");
4450 res->
data = (
char *)0;
4460 i->m[k-1]=
pDiff(p,k);
4462 res->
data = (
char *)i;
4469 WerrorS(
"differentiation not defined in the coefficient ring");
4472 number n = (number) u->
Data();
4473 number
k = (number) v->
Data();
4486 ideal
id = (ideal)a->
Data();
4491 poly *
p = result->m;
4493 for(
int v = 1; v <=
currRing->N; v++ )
4496 for(
int i = 0;
i < W;
i++, p++, q++ )
4497 *p =
pDiff( *q, v );
4501 res->
data = (
char *)result;
4548 res->
data=(
char *)iv;
4562 res->
data = (
char*) lm;
4575 res->
data=(
char *)r;
4583 memset(&tmp, 0,
sizeof(tmp));
4599 WerrorS(
"matrix must be constant");
4613 res->
data=(
char*)ll;
4620 switch(((
int)(
long)v->
Data()))
4635 res->
data = (
char *)0;
4639 res->
data = (
char *)0;
4654 l->m[0].data=(
char *)r;
4657 l->m[1].data=(
char *)m;
4658 res->
data=(
char *)l;
4674 res->
data=(
char *)tmp;
4683 number n,
i; i=(number)v->
Data();
4688 res->
data=(
void *)n;
4712 res->
data=(
char*)(
long)((long)v->
Data()==0 ? 1 : 0);
4717 res->
data = (
char *)(
long)(((ring)(v->
Data()))->N);
4734 int i=(int)(
long)v->
Data();
4737 if ((0<i) && (i<=p))
4743 Werror(
"par number %d out of range 1..%d",i,p);
4750 number nn=(number)v->
Data();
4761 int i=(int)(
long)v->
Data();
4767 Werror(
"par number %d out of range 1..%d",i,p);
4778 WerrorS(
"poly must be constant");
4787 res->
data=(
void *)n;
4798 WerrorS(
"poly must be constant");
4813 res->
data = (
char *)(
long)(i > 1 ? i : 2);
4819 ideal v_id=(ideal)v->
Data();
4824 WarnS(
"wrong weights");
4853 res->
data = (
char *)n;
4858 char *
s= (
char *)v->
Data();
4860 for(i=0; i<sArithBase.
nCmdUsed; i++)
4863 if (strcmp(s, sArithBase.
sCmds[i].name) == 0)
4865 res->
data = (
char *)1;
4876 res->
data =(
char *)(
long)rank;
4895 ring
r=(ring)v->
Data();
4910 ring
r=(ring)v->
Data();
4918 ideal
i = (ideal)v->
Data();
4919 res->
data = (
char *)i->rank;
4942 const bool bIsSCA =
false;
4947 WerrorS(
"qring not supported by slimgb at the moment");
4952 WerrorS(
"ordering must be global for slimgb");
4957 ideal u_id=(ideal)u->
Data();
4962 WarnS(
"wrong weights");
4984 ideal v_id=(ideal)v->
Data();
4991 WarnS(
"wrong weights");
5002 res->
data = (
char *)result;
5010 ideal v_id=(ideal)v->
Data();
5017 WarnS(
"wrong weights");
5028 res->
data = (
char *)result;
5036 ideal v_id=(ideal)v->
Data();
5043 WarnS(
"wrong weights");
5054 res->
data = (
char *)result;
5062 ideal v_id=(ideal)v->
Data();
5069 WarnS(
"wrong weights");
5080 res->
data = (
char *)result;
5092 singclap_factorize_retry=0;
5100 l->
m[0].
data=(
void *)f;
5102 l->
m[1].
data=(
void *)v;
5103 res->
data=(
void *)l;
5111 if (w!=
NULL)
delete w;
5120 ideal v_id=(ideal)v->
Data();
5122 int add_row_shift=0;
5126 add_row_shift=w->
min_in();
5127 (*w)-=add_row_shift;
5163 ring
r = (ring)a->
Data();
5171 WarnS(
"opposite only for global orderings");
5178 ring
r = (ring)a->
Data();
5211 int t=(int)(
long)v->
data;
5261 int i=(int)(
long)v->
Data();
5262 if ((0<i) && (i<=currRing->
N))
5267 res->
data=(
char *)p;
5283 int i=(int)(
long)v->
Data();
5284 if ((0<i) && (i<=currRing->
N))
5311 res->
data = (
void*)(
long)
i;
5324 for(
int nfinished = 0; nfinished < Lforks->
nr+1; nfinished++)
5340 res->
data = (
void*)(
long)
j;
5350 #ifdef HAVE_DYNAMIC_LOADING 5357 Werror(
"%s: unknown type", s);
5360 Werror(
"cannot open %s", s);
5375 Werror(
"can not create package `%s`",plib);
5379 package savepack=currPack;
5382 char libnamebuf[256];
5395 #ifdef HAVE_DYNAMIC_LOADING 5398 WerrorS(
"Dynamic modules are not supported by this version of Singular");
5407 WerrorS_dummy_cnt++;
5413 WerrorS_dummy_cnt=0;
5416 Print(
"loading of >%s< failed\n",s);
5424 res->
data = (
char *)strlen((
char *)v->
Data());
5520 number n=(number)u->
CopyD();
5527 number n=(number)u->
Data();
5536 char *s= (
char *)u->
Data();
5537 int r = (int)(
long)v->
Data();
5538 int c = (int)(
long)w->
Data();
5541 if ( (r<1) || (r>l) || (c<0) )
5547 sprintf((
char *)res->
data,
"%-*.*s",c,c,s+r-1);
5553 int r = (int)(
long)v->
Data();
5554 int c = (int)(
long)w->
Data();
5555 if ((r<1)||(r>iv->
rows())||(c<1)||(c>iv->
cols()))
5557 Werror(
"wrong range[%d,%d] in intmat %s(%d x %d)",
5566 if (u->
e==
NULL) res->
e=e;
5570 while (h->next!=
NULL) h=h->next;
5580 int r = (int)(
long)v->
Data();
5581 int c = (int)(
long)w->
Data();
5582 if ((r<1)||(r>bim->
rows())||(c<1)||(c>bim->
cols()))
5584 Werror(
"wrong range[%d,%d] in bigintmat %s(%d x %d)",
5598 while (h->next!=
NULL) h=h->next;
5608 int r = (int)(
long)v->
Data();
5609 int c = (int)(
long)w->
Data();
5613 Werror(
"wrong range[%d,%d] in matrix %s(%d x %d)",r,c,u->
Fullname(),
5627 while (h->next!=
NULL) h=h->next;
5645 WerrorS(
"cannot build expression lists from unnamed objects");
5648 memcpy(&ut,u,
sizeof(ut));
5649 memset(&t,0,
sizeof(t));
5651 for (l=0;l< iv->
length(); l++)
5653 t.
data=(
char *)(
long)((*iv)[
l]);
5663 memcpy(u,&ut,
sizeof(ut));
5695 WerrorS(
"cannot build expression lists from unnamed objects");
5698 memcpy(&ut,u,
sizeof(ut));
5699 memset(&t,0,
sizeof(t));
5701 for (l=0;l< iv->
length(); l++)
5703 t.
data=(
char *)(
long)((*iv)[
l]);
5713 memcpy(u,&ut,
sizeof(ut));
5746 WerrorS(
"cannot build expression lists from unnamed objects");
5749 memcpy(&ut,u,
sizeof(ut));
5750 memset(&t1,0,
sizeof(
sleftv));
5751 memset(&t2,0,
sizeof(
sleftv));
5754 for (vl=0;vl< vv->
length(); vl++)
5756 t1.
data=(
char *)(
long)((*vv)[vl]);
5757 for (wl=0;wl< wv->
length(); wl++)
5759 t2.
data=(
char *)(
long)((*wv)[wl]);
5769 memcpy(u,&ut,
sizeof(ut));
5789 memset(w,0,
sizeof(
sleftv));
5797 int k=(int)(
long)w->
Data();
5804 l->
m[0].
data=(
void *)m;
5805 l->
m[1].
data=(
void *)iv;
5812 l->
m[0].
data=(
void *)m;
5814 res->
data = (
char *)l;
5821 WerrorS(
"3rd argument must be a name of a matrix");
5824 ideal
i=(ideal)u->
Data();
5825 int rank=(int)i->rank;
5841 WerrorS(
"3rd argument must be a name of a matrix");
5849 memset(&t,0,
sizeof(t));
5879 int n=(int)(
long)w->
Data();
5880 char *where=(
char *)u->
Data();
5881 char *what=(
char *)v->
Data();
5883 if ((1>n)||(n>(
int)strlen(where)))
5885 Werror(
"start position %d out of range",n);
5888 found = strchr(where+n-1,*what);
5889 if (*(what+1)!=
'\0')
5891 while((found !=
NULL) && (strncmp(found+1,what+1,strlen(what+1))!=0))
5893 found=strchr(found+1,*what);
5898 res->
data=(
char *)((found-where)+1);
5904 if ((
int)(
long)w->
Data()==0)
5916 Werror(
"weight vector must have size %d, not %d",
5924 ring tempR =
rCopy(origR);
5929 ideal uid = (ideal)u->
Data();
5932 sleftv uuAsLeftv; memset(&uuAsLeftv, 0,
sizeof(uuAsLeftv));
5937 Print(
"// NOTE: computation of Hilbert series etc. is being\n");
5938 Print(
"// performed for generic fibre, that is, over Q\n");
5941 int returnWithTrue = 1;
5942 switch((
int)(
long)v->
Data())
5945 res->
data=(
void *)iv;
5960 if (returnWithTrue)
return TRUE;
else return FALSE;
5966 switch((
int)(long)v->
Data())
5969 res->
data=(
void *)iv;
5995 WerrorS(
"variable must have weight 1");
6013 WerrorS(
"variable must have weight 1");
6024 (*im)[
i] = (*arg)[
i];
6027 res->
data = (
char *)im;
6041 WerrorS(
"2nd argument must be a unit");
6057 WerrorS(
"2nd argument must be a diagonal matrix of units");
6128 const int mk = (
const int)(
long)u->
Data();
6129 bool noIdeal =
true;
bool noK =
true;
bool noAlgorithm =
true;
6130 bool noCacheMinors =
true;
bool noCacheMonomials =
true;
6131 ideal IasSB;
int k;
char* algorithm;
int cacheMinors;
int cacheMonomials;
6147 noAlgorithm =
false;
6152 noCacheMinors =
false;
6158 noCacheMonomials =
false;
6172 noAlgorithm =
false;
6177 noCacheMinors =
false;
6182 noCacheMonomials =
false;
6189 algorithm = (
char*)u->
next->
Data();
6190 noAlgorithm =
false;
6194 noCacheMinors =
false;
6199 noCacheMonomials =
false;
6207 if (strcmp(algorithm,
"bareiss") == 0)
6208 algorithm = (
char*)
"Bareiss";
6209 if (strcmp(algorithm,
"laplace") == 0)
6210 algorithm = (
char*)
"Laplace";
6211 if (strcmp(algorithm,
"cache") == 0)
6212 algorithm = (
char*)
"Cache";
6221 if ((!noK) && (k == 0))
6223 WerrorS(
"Provided number of minors to be computed is zero.");
6226 if ((!noAlgorithm) && (strcmp(algorithm,
"Bareiss") != 0)
6227 && (strcmp(algorithm,
"Laplace") != 0)
6228 && (strcmp(algorithm,
"Cache") != 0))
6230 WerrorS(
"Expected as algorithm one of 'B/bareiss', 'L/laplace', or 'C/cache'.");
6233 if ((!noAlgorithm) && (strcmp(algorithm,
"Bareiss") == 0)
6236 Werror(
"Bareiss algorithm not defined over coefficient rings %s",
6237 "with zero divisors.");
6241 if ((mk < 1) || (mk > m->
rows()) || (mk > m->
cols()))
6250 if ((!noAlgorithm) && (strcmp(algorithm,
"Cache") == 0)
6251 && (noCacheMinors || noCacheMonomials))
6254 cacheMonomials = 100000;
6260 (noIdeal ? 0 : IasSB),
false);
6261 else if (strcmp(algorithm,
"Cache") == 0)
6263 (noIdeal ? 0 : IasSB), 3, cacheMinors,
6264 cacheMonomials,
false);
6267 (noIdeal ? 0 : IasSB),
false);
6277 (
const char *)w->
Data());
6291 WerrorS(
"2nd/3rd arguments must have names");
6295 const char *ring_name=u->
Name();
6302 if ((preim_ring==
NULL)
6305 Werror(
"preimage ring `%s` is not the basering",mapping->preimage);
6321 Werror(
"`%s` is not defined in `%s`",v->
name,ring_name);
6325 if (kernel_cmd) image=
idInit(1,1);
6342 Werror(
"`%s` is not defined in `%s`",w->
name,ring_name);
6349 WarnS(
"preimage in local qring may be wrong: use Ring::preimageLoc instead");
6358 int i=(int)(
long)u->
Data();
6359 int r=(int)(
long)v->
Data();
6360 int c=(int)(
long)w->
Data();
6361 if ((r<=0) || (c<=0))
return TRUE;
6372 for (k=0; k<iv->
length(); k++)
6374 (*iv)[
k] = ((
siRand() % di) - i);
6377 res->
data = (
char *)iv;
6385 if ((cf==
NULL) ||(cf->cfRandom==
NULL))
6387 Werror(
"no random function defined for coeff %d",cf->type);
6393 number2 nn=(number2)
omAlloc(
sizeof(*nn));
6403 int &ringvar,
poly &monomexpr)
6410 Werror(
"`%s` substitutes a ringvar only by a term",
6415 if ((ringvar=
pVar(p))==0)
6424 WerrorS(
"ringvar/par expected");
6435 if (nok)
return TRUE;
6461 if (nok)
return TRUE;
6462 ideal
id=(ideal)u->
Data();
6466 if (monomexpr!=
NULL)
6481 Warn(
"possible OVERFLOW in subst, max exponent is %ld",
currRing->bitmask/2);
6511 memset(&tmp,0,
sizeof(tmp));
6520 int mi=(int)(
long)v->
Data();
6521 int ni=(int)(
long)w->
Data();
6524 Werror(
"converting ideal to matrix: dimensions must be positive(%dx%d)",mi,ni);
6535 memcpy(m->
m,I->m,i*
sizeof(
poly));
6536 memset(I->m,0,i*
sizeof(
poly));
6538 res->
data = (
char *)m;
6543 int mi=(int)(
long)v->
Data();
6544 int ni=(int)(
long)w->
Data();
6547 Werror(
"converting module to matrix: dimensions must be positive(%dx%d)",mi,ni);
6556 int mi=(int)(
long)v->
Data();
6557 int ni=(int)(
long)w->
Data();
6560 Werror(
"converting matrix to matrix: dimensions must be positive(%dx%d)",mi,ni);
6577 res->
data = (
char *)m;
6601 &(hw->data.uideal));
6610 Werror(
"`%s` must be 0-dimensional",v->
Name());
6622 Werror(
"`%s` must be 0-dimensional",v->
Name());
6633 0,(int)(
long)w->
Data());
6640 0,(int)(
long)w->
Data());
6646 int maxl=(int)v->
Data();
6647 ideal u_id=(ideal)u->
Data();
6663 WarnS(
"wrong weights");
6691 yes = (strcmp((
char *) res->
data, (
char *) w->
Data()) == 0);
6693 res->
data = (
void *)(
long)yes;
6707 ideal u_id=(ideal)(u->
Data());
6712 WarnS(
"wrong weights");
6729 res->
data = (
char *)result;
6815 WarnS(
"<module>,<module>,<int>[,<intvec>] expected!");
6822 ideal
P=(ideal)w1.
Data();
6823 ideal
Q=(ideal)w2.
Data();
6825 int n=(int)(
long)v3->
Data();
6832 while( (i > 0) && ((*w0) > 0) )
6838 WarnS(
"not all weights are positive!");
6852 L->
m[1].
rtyp=v1->Typ();
6857 L->
m[1].
data=(
void *)R->m[0];
6866 L->
m[1].
data=(
void *)R;
6869 L->
m[0].
data=(
char *)T;
6935 number
b=(number)h->
Data();
6991 res->
data=(
char *)
id;
6996 ring
r=(ring)u->
Data();
7004 WerrorS(
"fetch(<ring>,<name>[,<intvec>[,<intvec>])");
7009 if (perm_par_l!=
NULL)
7018 int par_perm_size=0;
7031 par_perm_size=
rPar(r);
7039 par_perm_size=
rPar(r);
7041 if (par_perm_size!=0)
7042 par_perm=(
int *)
omAlloc0(par_perm_size*
sizeof(
int));
7044 if (perm_par_l==
NULL)
7046 if (par_perm_size!=0)
7051 if (par_perm_size==0)
WarnS(
"source ring has no parameters");
7054 for(i=
rPar(r)-1;i>=0;i--)
7056 if (i<perm_par_v->length()) par_perm[
i]=(*perm_par_v)[
i];
7060 Warn(
"invalid entry for par %d: %d\n",i,par_perm[i]);
7066 for(i=
rVar(r)-1;i>=0;i--)
7068 if (i<perm_var_v->length()) perm[i+1]=(*perm_var_v)[
i];
7072 Warn(
"invalid entry for var %d: %d\n",i,perm[i]);
7081 Print(
"// var nr %d: %s -> var %s\n",i,r->names[i-1],
currRing->names[perm[i]-1]);
7087 if (par_perm[i-1]<0)
7088 Print(
"// par nr %d: %s -> par %s\n",
7090 else if (par_perm[i-1]>0)
7091 Print(
"// par nr %d: %s -> var %s\n",
7097 memset(&tmpW,0,
sizeof(
sleftv));
7101 perm,par_perm,par_perm_size,nMap)))
7156 WerrorS(
"cannot convert to ideal or module");
7167 r[
i]=(ideal)h->
Data();
7179 r[
i]=(ideal)tmp.
Data();
7211 matrix iMat;
int invertible;
7217 int rr = aMat->
rows();
7218 int cc = aMat->
cols();
7221 Werror(
"given matrix (%d x %d) is not quadratic, hence not invertible", rr, cc);
7226 WerrorS(
"matrix must be constant");
7236 int rr = uMat->
rows();
7237 int cc = uMat->
cols();
7240 Werror(
"third matrix (%d x %d) is not quadratic, hence not invertible",
7249 WerrorS(
"matricesx must be constant");
7256 Werror(
"expected either one or three matrices");
7274 res->
data=(
char*)ll;
7298 WerrorS(
"expected exactly three matrices and one vector as input");
7308 Werror(
"first matrix (%d x %d) is not quadratic",
7314 Werror(
"second matrix (%d x %d) is not quadratic",
7320 Werror(
"second matrix (%d x %d) and third matrix (%d x %d) do not fit",
7326 Werror(
"third matrix (%d x %d) and vector (%d x 1) do not fit",
7335 WerrorS(
"matrices must be constant");
7355 res->
data=(
char*)ll;
7369 (*iv)[
i]=(int)(
long)h->
Data();
7388 res->
data=(
char *)iv;
7405 WerrorS(
"2nd argument must be a unit");
7418 WerrorS(
"2nd argument must be a diagonal matrix of units");
7423 (
int)(long)u3->
Data(),
7432 Werror(
"%s(`poly`,`poly`,`int`,`intvec`) exppected",
7468 memset(res,0,
sizeof(
sleftv));
7477 && ((strcmp(u->
Name(),
"real")==0) || (strcmp(u->
Name(),
"complex")==0)))
7479 memcpy(res,u,
sizeof(
sleftv));
7480 memset(u,0,
sizeof(
sleftv));
7502 int add_row_shift = 0;
7504 if (weights!=
NULL) add_row_shift=weights->
min_in();
7537 ((ring)L->
m[i].
data)->ref++;
7543 res->
data=(
char *)L;
7590 WerrorS(
"2nd argument must be a diagonal matrix of units");
7598 (
int)(long)u4->
Data()
7609 WerrorS(
"2nd argument must be a unit");
7636 WerrorS(
"2nd argument must be a diagonal matrix of units");
7644 (
int)(long)u4->
Data(),
7656 WerrorS(
"2nd argument must be a unit");
7667 Werror(
"%s(`ideal`,`ideal`,`matrix`,`int`,`intvec`) exppected",
7675 int nCount = (sArithBase.
nCmdUsed-1)/3;
7676 if((3*nCount)<sArithBase.
nCmdUsed) nCount++;
7679 for(i=0; i<nCount; i++)
7683 Print(
"%-20s",sArithBase.
sCmds[i+1+nCount].name);
7684 if(i+1+2*nCount<sArithBase.
nCmdUsed)
7685 Print(
"%-20s",sArithBase.
sCmds[i+1+2*nCount].name);
7707 char** slist = (
char**)
omAlloc(n*
sizeof(
char*));
7710 for (i=0, j=0; i<n; i++, v = v ->
next)
7712 slist[
i] = v->String();
7714 j+=strlen(slist[i]);
7716 char* s = (
char*)
omAlloc((j+1)*
sizeof(char));
7720 strcat(s, slist[i]);
7740 #if defined(__alpha) && !defined(linux) 7743 void usleep(
unsigned long usec);
7772 leftv u =
v;
int factorsGiven = 0;
7775 WerrorS(
"expected arguments (poly, int [, poly, poly] [, int, int])");
7782 WerrorS(
"expected arguments (poly, int [, poly, poly] [, int, int])");
7785 else d = (int)(
long)u->
Data();
7791 WerrorS(
"expected arguments (poly, int [, poly, poly] [, int, int])");
7806 WerrorS(
"expected arguments (poly, int [, poly, poly] [, int, int])");
7811 xIndex = (int)(
long)u->
Data();
7812 yIndex = (int)(
long)u->
next->
Data();
7818 WerrorS(
"expected arguments (poly, int [, poly, poly] [, int, int])");
7825 WerrorS(
"expected non-constant polynomial argument(s)");
7829 if ((xIndex < 1) || (n < xIndex))
7831 Werror(
"index for variable x (%d) out of range [1..%d]", xIndex, n);
7834 if ((yIndex < 1) || (n < yIndex))
7836 Werror(
"index for variable y (%d) out of range [1..%d]", yIndex, n);
7839 if (xIndex == yIndex)
7841 WerrorS(
"expected distinct indices for variables x and y");
7846 if (factorsGiven == 0)
7860 WerrorS(
"expected h(0,y) to have exactly two distinct monic factors");
7875 res->
data = (
char*)L;
7886 #if defined(HAVE_USLEEP) 7887 if (((
long) res->
data) == 0L)
7896 #elif defined(HAVE_SLEEP) 7897 if (((
int) res->
data) == 0)
7902 si_sleep((is - 1)/1000000 + 1);
7921 if ((rest!=
NULL) && (!b))
7926 memset(&tmp_res,0,
sizeof(tmp_res));
7928 memcpy(res,&tmp_res,
sizeof(tmp_res));
7943 WerrorS(
"expected (matrix, number, number, number) as arguments");
7948 (number)(v->
Data()),
7949 (number)(w->
Data()),
7950 (number)(x->
Data()));
7960 ideal i1=(ideal)(u->
Data());
7966 WerrorS(
"expected `std(`ideal/module`,`poly/vector`,`intvec`,`intvec`)");
7986 i0=(ideal)v->
Data();
7990 WerrorS(
"expected `std(`ideal/module`,`poly/vector`,`intvec`,`intvec`)");
8007 WarnS(
"wrong weights");
8030 res->
data = (
char *)result;
8041 r->start =(int)(
long)e->
Data();
8045 #define NULL_VAL NULL 8049 #include "iparith.inc" 8061 memset(res,0,
sizeof(
sleftv));
8068 while (dA2[i].
cmd==op)
8070 if ((at==dA2[i].arg1)
8071 && (bt==dA2[i].arg2))
8088 if ((call_failed=dA2[i].
p(res,a,b)))
8108 while (dA2[i].
cmd==op)
8131 failed= ((
iiConvert(at,dA2[i].arg1,ai,a,an))
8133 || (call_failed=dA2[i].
p(res,an,bn)));
8173 Werror(
"`%s` is not defined",s);
8180 Werror(
"%s(`%s`,`%s`) failed" 8185 Werror(
"`%s` %s `%s` failed" 8190 while (dA2[i].
cmd==op)
8192 if(((at==dA2[i].arg1)||(bt==dA2[i].arg2))
8197 Werror(
"expected %s(`%s`,`%s`)" 8200 Werror(
"expected `%s` %s `%s`" 8229 memset(res,0,
sizeof(
sleftv));
8238 memcpy(&d->arg1,a,
sizeof(
sleftv));
8240 memcpy(&d->arg2,b,
sizeof(
sleftv));
8244 res->
data=(
char *)d;
8257 if (!bb->blackbox_Op2(op,res,a,b))
return FALSE;
8263 else if ((bt>
MAX_TOK)&&(op!=
'('))
8268 if(!bb->blackbox_Op2(op,res,a,b))
return FALSE;
8288 memset(res,0,
sizeof(
sleftv));
8296 while (dA1[i].
cmd==op)
8315 if ((call_failed=dA1[i].
p(res,a)))
8335 while (dA1[i].
cmd==op)
8356 failed= ((
iiConvert(at,dA1[i].arg,ai,a,an,dConvertTypes))
8357 || (call_failed=dA1[i].
p(res,an)));
8398 while (dA1[i].
cmd==op)
8402 Werror(
"expected %s(`%s`)" 8416 memset(res,0,
sizeof(
sleftv));
8425 memcpy(&d->arg1,a,
sizeof(
sleftv));
8429 res->
data=(
char *)d;
8442 res->
data=bb->blackbox_Init(bb);
8443 if(!bb->blackbox_Assign(res,a))
return FALSE;
8453 if(!bb->blackbox_Op1(op,res,a))
return FALSE;
8473 const struct sValCmd3* dA3,
int at,
int bt,
int ct,
8476 memset(res,0,
sizeof(
sleftv));
8485 while (dA3[i].
cmd==op)
8487 if ((at==dA3[i].arg1)
8488 && (bt==dA3[i].arg2)
8489 && (ct==dA3[i].arg3))
8497 Print(
"call %s(%s,%s,%s)\n",
8499 if ((call_failed=dA3[i].
p(res,a,b,c)))
8520 while (dA3[i].
cmd==op)
8534 Print(
"call %s(%s,%s,%s)\n",
8537 failed= ((
iiConvert(at,dA3[i].arg1,ai,a,an,dConvertTypes))
8538 || (
iiConvert(bt,dA3[i].arg2,bi,b,bn,dConvertTypes))
8539 || (
iiConvert(ct,dA3[i].arg3,ci,c,cn,dConvertTypes))
8540 || (call_failed=dA3[i].
p(res,an,bn,cn)));
8591 Werror(
"`%s` is not defined",s);
8597 Werror(
"%s(`%s`,`%s`,`%s`) failed" 8601 while (dA3[i].
cmd==op)
8603 if(((at==dA3[i].arg1)
8605 ||(ct==dA3[i].arg3))
8608 Werror(
"expected %s(`%s`,`%s`,`%s`)" 8628 memset(res,0,
sizeof(
sleftv));
8637 memcpy(&d->arg1,a,
sizeof(
sleftv));
8639 memcpy(&d->arg2,b,
sizeof(
sleftv));
8641 memcpy(&d->arg3,c,
sizeof(
sleftv));
8645 res->
data=(
char *)d;
8657 if(!bb->blackbox_Op3(op,res,a,b,c))
return FALSE;
8705 if(v==
NULL)
return failed;
8716 memset(res,0,
sizeof(
sleftv));
8726 res->
data=(
char *)d;
8731 memcpy(&d->arg1,a,
sizeof(
sleftv));
8766 if(!bb->blackbox_OpM(op,res,a))
return FALSE;
8780 if ((args==
dArithM[i].number_of_args)
8781 || (
dArithM[i].number_of_args==-1)
8782 || ((
dArithM[i].number_of_args==-2)&&(args>0)))
8811 Werror(
"%s(...) failed",s);
8833 if (strcmp(n, sArithBase.
sCmds[an].name) == 0)
8838 else if ((an!=en) && (strcmp(n, sArithBase.
sCmds[en].name) == 0))
8851 if (*n < *(sArithBase.
sCmds[i].name))
8855 else if (*n > *(sArithBase.
sCmds[i].name))
8861 int v=strcmp(n,sArithBase.
sCmds[i].name);
8877 tok=sArithBase.
sCmds[
i].tokval;
8878 if(sArithBase.
sCmds[i].alias==2)
8880 Warn(
"outdated identifier `%s` used - please change your code",
8881 sArithBase.
sCmds[i].name);
8882 sArithBase.
sCmds[
i].alias=1;
8919 return sArithBase.
sCmds[
i].toktype;
8931 if (op==dArithTab[p].
cmd)
return dArithTab[
p].start;
8932 if (op<dArithTab[p].cmd) e=p-1;
8948 return sArithBase.
sCmds[0].name;
8950 if (tok==
ANY_TYPE)
return "any_type";
8951 if (tok==
COMMAND)
return "command";
8952 if (tok==
NONE)
return "nothing";
8959 if (tok==
IDHDL)
return "identifier";
8966 for(i=0; i<sArithBase.
nCmdUsed; i++)
8969 if ((sArithBase.
sCmds[i].tokval == tok)&&
8970 (sArithBase.
sCmds[i].alias==0))
8972 return sArithBase.
sCmds[
i].name;
8976 for(i=0; i<sArithBase.
nCmdUsed; i++)
8978 if (sArithBase.
sCmds[i].tokval == tok)
8980 return sArithBase.
sCmds[
i].name;
8983 return sArithBase.
sCmds[0].name;
8999 cmdnames *pCmdL = (cmdnames*)a;
9000 cmdnames *pCmdR = (cmdnames*)b;
9005 if(pCmdL->name==
NULL)
return 1;
9006 if(pCmdR->name==
NULL)
return -1;
9009 if(strcmp(pCmdL->name,
"$INVALID$")==0)
return -1;
9010 if(strcmp(pCmdR->name,
"$INVALID$")==0)
return 1;
9013 if (pCmdL->tokval==-1)
9015 if (pCmdR->tokval==-1)
9016 return strcmp(pCmdL->name, pCmdR->name);
9021 if(pCmdR->tokval==-1)
return -1;
9023 return strcmp(pCmdL->name, pCmdR->name);
9037 memset(&sArithBase, 0,
sizeof(sArithBase));
9080 if (strcmp(szName, sArithBase.
sCmds[an].name) == 0)
9085 else if (strcmp(szName, sArithBase.
sCmds[en].name) == 0)
9097 if (*szName < *(sArithBase.
sCmds[i].name))
9101 else if (*szName > *(sArithBase.
sCmds[i].name))
9107 v=strcmp(szName,sArithBase.
sCmds[i].name);
9131 if(nPos<0)
return NULL;
9133 return sArithBase.
sCmds[nPos].name;
9140 if(szName==
NULL)
return -1;
9143 if(nIndex<0 || nIndex>=sArithBase.
nCmdUsed)
9145 Print(
"'%s' not found (%d)\n", szName, nIndex);
9150 qsort(sArithBase.
sCmds, sArithBase.
nCmdUsed,
sizeof(cmdnames),
9180 sArithBase.
sCmds[nPos].alias = nAlias;
9181 sArithBase.
sCmds[nPos].tokval = nTokval;
9182 sArithBase.
sCmds[nPos].toktype = nToktype;
9188 if(szName==
NULL)
return -1;
9192 Print(
"'%s' already exists at %d\n", szName, nIndex);
9211 qsort(sArithBase.
sCmds, sArithBase.
nCmdUsed,
sizeof(cmdnames),
9230 WerrorS(
"not implemented for non-commutative rings");
9233 else if ((p & PLURAL_MASK)==2 )
9246 WerrorS(
"not implemented for rings with rings as coeffients");
9253 WerrorS(
"domain required as coeffients");
9259 WarnS(
"considering the image in Q[...]");
BOOLEAN rHasLocalOrMixedOrdering(const ring r)
static BOOLEAN jjINTMAT3(leftv res, leftv u, leftv v, leftv w)
#define idPosConstant(I)
index of generator with leading term in ground ring (if any); otherwise -1
static FORCE_INLINE number n_Sub(number a, number b, const coeffs r)
return the difference of 'a' and 'b', i.e., a-b
int iiInitArithmetic()
initialisation of arithmetic structured data
matrix idDiff(matrix i, int k)
static BOOLEAN jjBREAK0(leftv, leftv)
static BOOLEAN jjPLUS_I(leftv res, leftv u, leftv v)
static BOOLEAN jjE(leftv res, leftv v)
static BOOLEAN jjPAR1(leftv res, leftv v)
static BOOLEAN jjRANK2(leftv res, leftv u, leftv v)
static BOOLEAN jjIDEAL_PL(leftv res, leftv v)
poly pOppose(ring Rop_src, poly p, const ring Rop_dst)
opposes a vector p from Rop to currRing (dst!)
ideal singclap_sqrfree(poly f, intvec **v, int with_exps, const ring r)
static void jjEQUAL_REST(leftv res, leftv u, leftv v)
CanonicalForm map(const CanonicalForm &primElem, const Variable &alpha, const CanonicalForm &F, const Variable &beta)
map from to such that is mapped onto
static BOOLEAN jjDET_S(leftv res, leftv v)
BOOLEAN yyInRingConstruction
ideal scKBase(int deg, ideal s, ideal Q, intvec *mv)
static BOOLEAN jjPLUSMINUS_Gen(leftv res, leftv u, leftv v)
ideal getMinorIdeal(const matrix mat, const int minorSize, const int k, const char *algorithm, const ideal iSB, const bool allDifferent)
Returns the specified set of minors (= subdeterminantes) of the given matrix.
static BOOLEAN jjTIMES_ID(leftv res, leftv u, leftv v)
static FORCE_INLINE number n_IntMod(number a, number b, const coeffs r)
for r a field, return n_Init(0,r) always: n_Div(a,b,r)*b+n_IntMod(a,b,r)==a n_IntMod(a,b,r) >=0
matrix mp_CoeffProc(poly f, poly vars, const ring R)
static FORCE_INLINE number n_GetNumerator(number &n, const coeffs r)
return the numerator of n (if elements of r are by nature not fractional, result is n) ...
static BOOLEAN jjBI2IM(leftv res, leftv u)
int compare(const bigintmat *op) const
static BOOLEAN jjOP_BI_BIM(leftv res, leftv u, leftv v)
void id_Normalize(ideal I, const ring r)
normialize all polys in id
static FORCE_INLINE number n_Gcd(number a, number b, const coeffs r)
in Z: return the gcd of 'a' and 'b' in Z/nZ, Z/2^kZ: computed as in the case Z in Z/pZ...
static BOOLEAN jjFAC_P(leftv res, leftv u)
#define idMaxIdeal(D)
initialise the maximal ideal (at 0)
const CanonicalForm int s
void id_DelDiv(ideal id, const ring r)
delete id[j], if LT(j) == coeff*mon*LT(i) and vice versa, i.e., delete id[i], if LT(i) == coeff*mon*L...
This file provides miscellaneous functionality.
static BOOLEAN jjCALL2ARG(leftv res, leftv u)
resolvente syResolvente(ideal arg, int maxlength, int *length, intvec ***weights, BOOLEAN minim)
static BOOLEAN iiExprArith3TabIntern(leftv res, int op, leftv a, leftv b, leftv c, const struct sValCmd3 *dA3, int at, int bt, int ct, const struct sConvertTypes *dConvertTypes)
syStrategy syKosz(ideal arg, int *length)
int iiTestConvert(int inputType, int outputType)
static BOOLEAN jjREPART(leftv res, leftv v)
ideal id_FreeModule(int i, const ring r)
the free module of rank i
static BOOLEAN jjRING3(leftv res, leftv u, leftv v, leftv w)
static BOOLEAN jjRSUM(leftv res, leftv u, leftv v)
ideal id_Transp(ideal a, const ring rRing)
transpose a module
static BOOLEAN jjVAR1(leftv res, leftv v)
bool luSolveViaLUDecomp(const matrix pMat, const matrix lMat, const matrix uMat, const matrix bVec, matrix &xVec, matrix &H)
Solves the linear system A * x = b, where A is an (m x n)-matrix which is given by its LU-decompositi...
poly nc_p_Bracket_qq(poly p, const poly q, const ring r)
returns [p,q], destroys p
poly pSubstPoly(poly p, int var, poly image)
void atSet(idhdl root, const char *name, void *data, int typ)
Class used for (list of) interpreter objects.
static BOOLEAN jjTEST(leftv, leftv v)
poly kNF(ideal F, ideal Q, poly p, int syzComp, int lazyReduce)
ideal id_Homogen(ideal h, int varnum, const ring r)
static int _gentable_sort_cmds(const void *a, const void *b)
compares to entry of cmdsname-list
static FORCE_INLINE BOOLEAN n_IsUnit(number n, const coeffs r)
TRUE iff n has a multiplicative inverse in the given coeff field/ring r.
static BOOLEAN jjPARDEG(leftv res, leftv v)
number ntDiff(number a, number d, const coeffs cf)
static BOOLEAN jjTIMES_I(leftv res, leftv u, leftv v)
static BOOLEAN jjLOAD_E(leftv, leftv v, leftv u)
static BOOLEAN jjJET_ID_M(leftv res, leftv u, leftv v, leftv w)
BOOLEAN rIsLikeOpposite(ring rBase, ring rCandidate)
checks whether rings rBase and rCandidate could be opposite to each other returns TRUE if it is so ...
static BOOLEAN jjCOMPARE_S(leftv res, leftv u, leftv v)
static BOOLEAN jjnInt(leftv res, leftv u)
static BOOLEAN jjLIFT(leftv res, leftv u, leftv v)
void omPrintInfo(FILE *fd)
bigintmat * bimSub(bigintmat *a, bigintmat *b)
static BOOLEAN jjPLUS_MA(leftv res, leftv u, leftv v)
#define TEST_OPT_DEGBOUND
static BOOLEAN jjKERNEL(leftv res, leftv u, leftv v)
static BOOLEAN jjCOMPARE_IV(leftv res, leftv u, leftv v)
static BOOLEAN jjPLUS_BIM(leftv res, leftv u, leftv v)
static BOOLEAN jjSQR_FREE(leftv res, leftv u)
static BOOLEAN jjPFAC1(leftv res, leftv v)
number det()
det (via LaPlace in general, hnf for euc. rings)
static BOOLEAN jjTIMES_MA_BI2(leftv res, leftv u, leftv v)
static BOOLEAN jjKBASE2(leftv res, leftv u, leftv v)
static BOOLEAN jjHILBERT2(leftv res, leftv u, leftv v)
static BOOLEAN jjJET_P_IV(leftv res, leftv u, leftv v, leftv w)
ideal id_Subst(ideal id, int n, poly e, const ring r)
ideal idSubstPar(ideal id, int n, poly e)
static BOOLEAN jjMULT(leftv res, leftv v)
static BOOLEAN jjSUBST_Id_I(leftv res, leftv u, leftv v, leftv w)
static BOOLEAN jjPlural_mat_mat(leftv res, leftv a, leftv b)
static BOOLEAN jjPOWER_ID(leftv res, leftv u, leftv v)
#define idDelete(H)
delete an ideal
static BOOLEAN rField_is_Zp_a(const ring r)
static BOOLEAN jjFACSTD(leftv res, leftv v)
static BOOLEAN jjTRANSP_IV(leftv res, leftv v)
int nCmdAllocated
number of commands-slots allocated
static BOOLEAN jjCALL3ARG(leftv res, leftv u)
static BOOLEAN jjN2BI(leftv res, leftv v)
static BOOLEAN jjCOUNT_N(leftv res, leftv v)
static BOOLEAN jjGETDUMP(leftv, leftv v)
static BOOLEAN jjINTVEC_PL(leftv res, leftv v)
static BOOLEAN jjP2BI(leftv res, leftv v)
ideal_list kStdfac(ideal F, ideal Q, tHomog h, intvec **w, ideal D)
static BOOLEAN jjTIMES_MA_P2(leftv res, leftv u, leftv v)
void idLiftW(ideal P, ideal Q, int n, matrix &T, ideal &R, short *w)
ideal interpolation(const std::vector< ideal > &L, intvec *v)
intvec * scIndIntvec(ideal S, ideal Q)
void henselFactors(const int xIndex, const int yIndex, const poly h, const poly f0, const poly g0, const int d, poly &f, poly &g)
Computes a factorization of a polynomial h(x, y) in K[[x]][y] up to a certain degree in x...
BOOLEAN mpKoszul(leftv res, leftv c, leftv b, leftv id)
const struct sConvertTypes dConvertTypes[]
static BOOLEAN jjCOUNT_M(leftv res, leftv v)
BOOLEAN iiExprArith1(leftv res, leftv a, int op)
static BOOLEAN rField_is_Ring_PtoM(const ring r)
static int WerrorS_dummy_cnt
static int si_min(const int a, const int b)
static BOOLEAN jjRANDOM(leftv res, leftv u, leftv v)
static BOOLEAN jjOP_REST(leftv res, leftv u, leftv v)
static BOOLEAN jjFAREY_BI(leftv res, leftv u, leftv v)
matrix mp_InitP(int r, int c, poly p, const ring R)
make it a p * unit matrix
ideal t_rep_gb(ring r, ideal arg_I, int syz_comp, BOOLEAN F4_mode)
Compatiblity layer for legacy polynomial operations (over currRing)
static BOOLEAN jjDIVMOD_I(leftv res, leftv u, leftv v)
BOOLEAN iiConvert(int inputType, int outputType, int index, leftv input, leftv output, const struct sConvertTypes *dConvertTypes)
static BOOLEAN jjBRACK_Ma_I_IV(leftv res, leftv u, leftv v, leftv w)
ideal kSba(ideal F, ideal Q, tHomog h, intvec **w, int sbaOrder, int arri, intvec *hilb, int syzComp, int newIdeal, intvec *vw)
poly p_Homogen(poly p, int varnum, const ring r)
static BOOLEAN jjL2R(leftv res, leftv v)
static BOOLEAN jjOpenClose(leftv, leftv v)
static BOOLEAN jjMEMORY(leftv res, leftv v)
BOOLEAN jjWAIT1ST1(leftv res, leftv u)
int exprlist_length(leftv v)
ideal id_Copy(ideal h1, const ring r)
copy an ideal
short * iv2array(intvec *iv, const ring R)
static int rPar(const ring r)
(r->cf->P)
static BOOLEAN jjCOEFFS_Id(leftv res, leftv u, leftv v)
BOOLEAN iiExprArith3(leftv res, int op, leftv a, leftv b, leftv c)
static BOOLEAN jjCOLS(leftv res, leftv v)
static BOOLEAN rField_is_Ring_ModN(const ring r)
matrix mp_Coeffs(ideal I, int var, const ring R)
corresponds to Maple's coeffs: var has to be the number of a variable
#define nPower(a, b, res)
#define pLmCmp(p, q)
returns 0|1|-1 if p=q|p>q|p<q w.r.t monomial ordering
static BOOLEAN jjKLAMMER_rest(leftv res, leftv u, leftv v)
lists syConvRes(syStrategy syzstr, BOOLEAN toDel, int add_row_shift)
static BOOLEAN jjALIGN_M(leftv res, leftv u, leftv v)
static BOOLEAN jjHOMOG1(leftv res, leftv v)
static BOOLEAN jjCHINREM_BI(leftv res, leftv u, leftv v)
void omPrintBinStats(FILE *fd)
static BOOLEAN jjPLUS_MA_P(leftv res, leftv u, leftv v)
poly sm_CallDet(ideal I, const ring R)
BOOLEAN idTestHomModule(ideal m, ideal Q, intvec *w)
static BOOLEAN jjGCD_N(leftv res, leftv u, leftv v)
static BOOLEAN jjrVarStr(leftv res, leftv v)
static BOOLEAN jjPRIME(leftv res, leftv v)
static BOOLEAN jjMODULO(leftv res, leftv u, leftv v)
static BOOLEAN jjROWS(leftv res, leftv v)
ideal id_ChineseRemainder(ideal *xx, number *q, int rl, const ring r)
static BOOLEAN jjDET_BI(leftv res, leftv v)
static BOOLEAN jjDUMP(leftv, leftv v)
static BOOLEAN jjPLUS_S(leftv res, leftv u, leftv v)
BOOLEAN iiTryLoadLib(leftv v, const char *id)
leftv slRead(si_link l, leftv a)
static BOOLEAN jjBRACK_Bim(leftv res, leftv u, leftv v, leftv w)
poly mp_Trace(matrix a, const ring R)
static BOOLEAN jjCOEF(leftv res, leftv u, leftv v)
static BOOLEAN jjREDUCE3_ID(leftv res, leftv u, leftv v, leftv w)
static BOOLEAN jjTIMES_MA_I2(leftv res, leftv u, leftv v)
static BOOLEAN jjJACOB_M(leftv res, leftv a)
static BOOLEAN jjnlInt(leftv res, leftv u)
static BOOLEAN jjIS_RINGVAR0(leftv res, leftv)
static BOOLEAN jjINTERRED(leftv res, leftv v)
static BOOLEAN jjMINUS_BI(leftv res, leftv u, leftv v)
static BOOLEAN jjSTD_1(leftv res, leftv u, leftv v)
static BOOLEAN jjDOTDOT(leftv res, leftv u, leftv v)
void id_Norm(ideal id, const ring r)
ideal id = (id[i]), result is leadcoeff(id[i]) = 1
static BOOLEAN jjNULL(leftv, leftv)
static FORCE_INLINE number n_Init(long i, const coeffs r)
a number representing i in the given coeff field/ring r
#define pIsUnit(p)
return true if the Lm is a constant <>0
static BOOLEAN jjCONTENT(leftv res, leftv v)
static BOOLEAN jjFAC_P2(leftv res, leftv u, leftv dummy)
#define omFreeSize(addr, size)
static BOOLEAN jjREAD2(leftv res, leftv u, leftv v)
static BOOLEAN jjKLAMMER_IV(leftv res, leftv u, leftv v)
#define idSimpleAdd(A, B)
matrix idDiffOp(ideal I, ideal J, BOOLEAN multiply)
int singclap_det_i(intvec *m, const ring)
static BOOLEAN jjpHead(leftv res, leftv v)
static BOOLEAN jjCOLON(leftv res, leftv u, leftv v)
static BOOLEAN jjPARSTR2(leftv res, leftv u, leftv v)
static BOOLEAN jjBI2N(leftv res, leftv u)
static BOOLEAN jjUMINUS_MA(leftv res, leftv u)
static BOOLEAN jjSUBST_Id_N(leftv res, leftv u, leftv v, leftv w)
static BOOLEAN jjDIV_P(leftv res, leftv u, leftv v)
static short rVar(const ring r)
#define rVar(r) (r->N)
BOOLEAN jjPROC(leftv res, leftv u, leftv v)
poly singclap_gcd(poly f, poly g, const ring r)
destroys f and g
void id_Delete(ideal *h, ring r)
deletes an ideal/module/matrix
intvec * ivCopy(const intvec *o)
struct sValCmd1 * psValCmd1
static BOOLEAN jjDEGREE(leftv res, leftv v)
bigintmat * bimAdd(bigintmat *a, bigintmat *b)
Matrix-Add/-Sub/-Mult so oder mit operator+/-/* ? : NULL as a result means an error (non-compatible m...
static BOOLEAN jjINTERSECT_PL(leftv res, leftv v)
static BOOLEAN jjBREAK1(leftv, leftv v)
static BOOLEAN jjEXTGCD_I(leftv res, leftv u, leftv v)
ideal getMinorIdealCache(const matrix mat, const int minorSize, const int k, const ideal iSB, const int cacheStrategy, const int cacheN, const int cacheW, const bool allDifferent)
Returns the specified set of minors (= subdeterminantes) of the given matrix.
static BOOLEAN jjDET_N2(leftv res, leftv v)
static BOOLEAN jjPlural_mat_poly(leftv res, leftv a, leftv b)
static BOOLEAN jjNEWSTRUCT3(leftv, leftv u, leftv v, leftv w)
static BOOLEAN jjTRACE_IV(leftv res, leftv v)
#define pLmDelete(p)
assume p != NULL, deletes Lm(p)->coef and Lm(p)
#define pCmp(p1, p2)
pCmp: args may be NULL returns: (p2==NULL ? 1 : (p1 == NULL ? -1 : p_LmCmp(p1, p2))) ...
static BOOLEAN jjGT_I(leftv res, leftv u, leftv v)
static BOOLEAN jjidFreeModule(leftv res, leftv v)
static BOOLEAN rField_is_Q_a(const ring r)
static BOOLEAN jjINTERPOLATION(leftv res, leftv l, leftv v)
struct sValCmd1 dArith1[]
lists qrDoubleShift(const matrix A, const number tol1, const number tol2, const number tol3, const ring r=currRing)
Computes all eigenvalues of a given real quadratic matrix with multiplicites.
lib_types type_of_LIB(const char *newlib, char *libnamebuf)
static BOOLEAN jjMINUS_I(leftv res, leftv u, leftv v)
static BOOLEAN jjDUMMY(leftv res, leftv u)
ideal kStd(ideal F, ideal Q, tHomog h, intvec **w, intvec *hilb, int syzComp, int newIdeal, intvec *vw, s_poly_proc_t sp)
syStrategy syResolution(ideal arg, int maxlength, intvec *w, BOOLEAN minim)
BOOLEAN maApplyFetch(int what, map theMap, leftv res, leftv w, ring preimage_r, int *perm, int *par_perm, int P, nMapFunc nMap)
ideal idMultSect(resolvente arg, int length)
static BOOLEAN jjHILBERT_IV(leftv res, leftv v)
static long p_Totaldegree(poly p, const ring r)
intvec * ivSub(intvec *a, intvec *b)
int syDim(syStrategy syzstr)
static BOOLEAN rField_is_Domain(const ring r)
static BOOLEAN jjEQUAL_BI(leftv res, leftv u, leftv v)
static FORCE_INLINE void n_Normalize(number &n, const coeffs r)
inplace-normalization of n; produces some canonical representation of n;
poly iiHighCorner(ideal I, int ak)
static BOOLEAN jjTIMES_MA_BI1(leftv res, leftv u, leftv v)
static BOOLEAN jjWEDGE(leftv res, leftv u, leftv v)
BOOLEAN iiExprArithM(leftv res, leftv a, int op)
poly singclap_det(const matrix m, const ring s)
static BOOLEAN jjPROC1(leftv res, leftv u)
intvec * ivTranp(intvec *o)
static BOOLEAN jjDEG_M(leftv res, leftv u)
static BOOLEAN jjDIM_R(leftv res, leftv v)
void WerrorS(const char *s)
static BOOLEAN jjPROC3(leftv res, leftv u, leftv v, leftv w)
void omPrintStats(FILE *fd)
static BOOLEAN jjJanetBasis2(leftv res, leftv u, leftv v)
static BOOLEAN jjOP_BIM_BI(leftv res, leftv u, leftv v)
static BOOLEAN jjBRACK_Im(leftv res, leftv u, leftv v, leftv w)
ideal idModulo(ideal h2, ideal h1, tHomog hom, intvec **w)
static BOOLEAN jjDIV_Ma(leftv res, leftv u, leftv v)
static intvec * idSort(ideal id, BOOLEAN nolex=TRUE)
static BOOLEAN jjNAMES0(leftv res, leftv)
static BOOLEAN rField_is_GF(const ring r)
static char const ** rParameter(const ring r)
(r->cf->parameter)
static BOOLEAN jjTIMES_BI(leftv res, leftv u, leftv v)
static BOOLEAN jjSTD(leftv res, leftv v)
static BOOLEAN jjJACOB_P(leftv res, leftv v)
static BOOLEAN jjpLength(leftv res, leftv v)
const char * slStatus(si_link l, const char *request)
#define pLmFreeAndNext(p)
assumes p != NULL, deletes p, returns pNext(p)
BOOLEAN iiExprArith2Tab(leftv res, leftv a, int op, const struct sValCmd2 *dA2, int at, const struct sConvertTypes *dConvertTypes)
apply an operation 'op' to arguments a and a->next return TRUE on failure
static BOOLEAN jjJET_P(leftv res, leftv u, leftv v)
static number & pGetCoeff(poly p)
return an alias to the leading coefficient of p assumes that p != NULL NOTE: not copy ...
static BOOLEAN jjGE_BI(leftv res, leftv u, leftv v)
#define pEqualPolys(p1, p2)
static FORCE_INLINE int n_ParDeg(number n, const coeffs r)
BOOLEAN jjLOAD(const char *s, BOOLEAN autoexport)
load lib/module given in v
static BOOLEAN jjP2N(leftv res, leftv v)
ideal idMinEmbedding(ideal arg, BOOLEAN inPlace, intvec **w)
static BOOLEAN jjGCD_I(leftv res, leftv u, leftv v)
poly singclap_pdivide(poly f, poly g, const ring r)
static BOOLEAN jjOPPOSE(leftv res, leftv a, leftv b)
static BOOLEAN jjSUBST_Id(leftv res, leftv u, leftv v, leftv w)
static BOOLEAN jjPRUNE(leftv res, leftv v)
static BOOLEAN jjOP_I_BIM(leftv res, leftv u, leftv v)
ideal idQuot(ideal h1, ideal h2, BOOLEAN h1IsStb, BOOLEAN resultIsIdeal)
BOOLEAN slOpen(si_link l, short flag, leftv h)
static BOOLEAN iiExprArith2TabIntern(leftv res, leftv a, int op, leftv b, BOOLEAN proccall, const struct sValCmd2 *dA2, int at, int bt, const struct sConvertTypes *dConvertTypes)
long(* pLDegProc)(poly p, int *length, ring r)
static BOOLEAN jjINDEX_P_IV(leftv res, leftv u, leftv v)
static BOOLEAN jjsyMinBase(leftv res, leftv v)
#define pGetComp(p)
Component.
static BOOLEAN jjPARSTR1(leftv res, leftv v)
static BOOLEAN jjHOMOG1_W(leftv res, leftv v, leftv u)
static BOOLEAN jjGE_I(leftv res, leftv u, leftv v)
static int pLength(poly a)
static int iiTabIndex(const jjValCmdTab dArithTab, const int len, const int op)
#define SI_LINK_SET_CLOSE_P(l)
BOOLEAN iiExport(leftv v, int toLev)
newstruct_desc newstructFromString(const char *s)
static BOOLEAN jjWAIT1ST2(leftv res, leftv u, leftv v)
ideal idOppose(ring Rop_src, ideal I, const ring Rop_dst)
opposes a module I from Rop to currRing(dst)
poly redNF(poly h, int &max_ind, int nonorm, kStrategy strat)
static BOOLEAN jjMAP(leftv res, leftv u, leftv v)
static BOOLEAN jjKoszul_Id(leftv res, leftv u, leftv v)
static BOOLEAN jjMINUS_N(leftv res, leftv u, leftv v)
static BOOLEAN idIsZeroDim(ideal i)
idhdl get(const char *s, int lev)
ideal idMinBase(ideal h1)
void monitor(void *F, int mode)
matrix idCoeffOfKBase(ideal arg, ideal kbase, poly how)
static BOOLEAN jjTIMES_MA_I1(leftv res, leftv u, leftv v)
static BOOLEAN jjP2I(leftv res, leftv v)
ideal id_JetW(ideal i, int d, intvec *iv, const ring R)
static BOOLEAN jjMINOR_M(leftv res, leftv v)
static BOOLEAN jjEXPORTTO(leftv, leftv u, leftv v)
char * String(void *d=NULL, BOOLEAN typed=FALSE, int dim=1)
Called for conversion to string (used by string(..), write(..),..)
int iiRegularity(lists L)
static FORCE_INLINE number n_Random(siRandProc p, number p1, number p2, const coeffs cf)
static BOOLEAN jjUMINUS_BI(leftv res, leftv u)
static BOOLEAN jjTIMES_BIM(leftv res, leftv u, leftv v)
static BOOLEAN jjCOUNT_RES(leftv res, leftv v)
static BOOLEAN jjJanetBasis(leftv res, leftv v)
void printBlackboxTypes()
list all defined type (for debugging)
static FORCE_INLINE number n_Param(const int iParameter, const coeffs r)
return the (iParameter^th) parameter as a NEW number NOTE: parameter numbering: 1..n_NumberOfParameters(...)
static BOOLEAN jjVARSTR2(leftv res, leftv u, leftv v)
static BOOLEAN jjLE_N(leftv res, leftv u, leftv v)
static BOOLEAN jjROWS_IV(leftv res, leftv v)
int rSum(ring r1, ring r2, ring &sum)
static BOOLEAN jjEQUAL_Ma(leftv res, leftv u, leftv v)
static BOOLEAN jjBAREISS(leftv res, leftv v)
matrix mp_Transp(matrix a, const ring R)
static FORCE_INLINE number n_Mult(number a, number b, const coeffs r)
return the product of 'a' and 'b', i.e., a*b
static BOOLEAN jjWAITALL2(leftv res, leftv u, leftv v)
int scMultInt(ideal S, ideal Q)
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
#define pGetExp(p, i)
Exponent.
static BOOLEAN jjBRACK_Ma_IV_IV(leftv res, leftv u, leftv v, leftv w)
static void WerrorS_dummy(const char *)
static BOOLEAN jjCOUNT_IV(leftv res, leftv v)
static BOOLEAN jjRES3(leftv res, leftv u, leftv v, leftv w)
static BOOLEAN jjTIMES_MA_N1(leftv res, leftv u, leftv v)
static BOOLEAN jjRINGLIST_C(leftv res, leftv v)
static BOOLEAN jjSTATUS2L(leftv res, leftv u, leftv v)
static BOOLEAN check_valid(const int p, const int op)
static BOOLEAN jjPLUS_P(leftv res, leftv u, leftv v)
char * iiArithGetCmd(int nPos)
idhdl enterid(const char *s, int lev, int t, idhdl *root, BOOLEAN init, BOOLEAN search)
static BOOLEAN jjrCharStr(leftv res, leftv v)
static BOOLEAN jjKoszul(leftv res, leftv u, leftv v)
static BOOLEAN jjBRACKET(leftv res, leftv a, leftv b)
const char * Tok2Cmdname(int tok)
BOOLEAN iiMake_proc(idhdl pn, package pack, sleftv *sl)
static BOOLEAN jjINDEX_P(leftv res, leftv u, leftv v)
void luDecomp(const matrix aMat, matrix &pMat, matrix &lMat, matrix &uMat, const ring R)
LU-decomposition of a given (m x n)-matrix.
void id_Shift(ideal M, int s, const ring r)
long p_DegW(poly p, const short *w, const ring R)
static BOOLEAN jjOP_BIM_I(leftv res, leftv u, leftv v)
int r_IsRingVar(const char *n, char **names, int N)
ideal idSect(ideal h1, ideal h2)
static BOOLEAN jjREDUCE3_CID(leftv res, leftv u, leftv v, leftv w)
static BOOLEAN jjIDEAL_Map(leftv res, leftv v)
static BOOLEAN jjSUBST_Test(leftv v, leftv w, int &ringvar, poly &monomexpr)
static BOOLEAN jjIm2Iv(leftv res, leftv v)
static BOOLEAN jjSUBST_M(leftv res, leftv u)
static BOOLEAN jjLU_INVERSE(leftv res, leftv v)
static BOOLEAN jjHIGHCORNER_M(leftv res, leftv v)
static BOOLEAN jjINDEPSET2(leftv res, leftv u, leftv v)
intvec * bim2iv(bigintmat *b)
Coefficient rings, fields and other domains suitable for Singular polynomials.
static BOOLEAN jjLT_BI(leftv res, leftv u, leftv v)
static BOOLEAN jjIMPART(leftv res, leftv v)
static BOOLEAN jjLOAD1(leftv, leftv v)
ideal idSeries(int n, ideal M, matrix U, intvec *w)
ideal idElimination(ideal h1, poly delVar, intvec *hilb)
static BOOLEAN jjSUBST_Id_X(leftv res, leftv u, leftv v, leftv w, int input_type)
static BOOLEAN jjREDUCE_ID(leftv res, leftv u, leftv v)
BOOLEAN jjWAITALL1(leftv res, leftv u)
void id_DelMultiples(ideal id, const ring r)
ideal id = (id[i]), c any unit if id[i] = c*id[j] then id[j] is deleted for j > i ...
long id_RankFreeModule(ideal s, ring lmRing, ring tailRing)
return the maximal component number found in any polynomial in s
void id_DelLmEquals(ideal id, const ring r)
Delete id[j], if Lm(j) == Lm(i) and both LC(j), LC(i) are units and j > i.
static FORCE_INLINE long n_Int(number &n, const coeffs r)
conversion of n to an int; 0 if not possible in Z/pZ: the representing int lying in (-p/2 ...
const char * iiTwoOps(int t)
const CanonicalForm CFMap CFMap & N
static BOOLEAN jjUMINUS_I(leftv res, leftv u)
matrix mp_Wedge(matrix a, int ar, const ring R)
static BOOLEAN jjWRONG(leftv, leftv)
BOOLEAN rComplete(ring r, int force)
this needs to be called whenever a new ring is created: new fields in ring are created (like VarOffse...
static BOOLEAN jjMATRIX_Ma(leftv res, leftv u, leftv v, leftv w)
static BOOLEAN jjMSTD(leftv res, leftv v)
int iiArithRemoveCmd(char *szName)
static BOOLEAN jjUMINUS_P(leftv res, leftv u)
static BOOLEAN jjCOEFFS2_KB(leftv res, leftv u, leftv v)
static BOOLEAN jjmpTrace(leftv res, leftv v)
lists ipNameListLev(idhdl root, int lev)
static BOOLEAN jjALIGN_V(leftv res, leftv u, leftv v)
bigintmat * bimMult(bigintmat *a, bigintmat *b)
void pSetDegProcs(ring r, pFDegProc new_FDeg, pLDegProc new_lDeg)
static BOOLEAN jjKLAMMER(leftv res, leftv u, leftv v)
static long pTotaldegree(poly p)
static BOOLEAN jjHOMOG_P_W(leftv res, leftv u, leftv v, leftv)
BOOLEAN setOption(leftv res, leftv v)
static BOOLEAN jjDIFF_ID(leftv res, leftv u, leftv v)
int scMult0Int(ideal S, ideal Q, const ring tailRing)
static BOOLEAN rIsPluralRing(const ring r)
we must always have this test!
poly pSubstPar(poly p, int par, poly image)
The main handler for Singular numbers which are suitable for Singular polynomials.
static FORCE_INLINE number n_Add(number a, number b, const coeffs r)
return the sum of 'a' and 'b', i.e., a+b
static BOOLEAN jjRPAR(leftv res, leftv v)
static BOOLEAN jjERROR(leftv, leftv u)
static BOOLEAN jjVDIM(leftv res, leftv v)
static BOOLEAN jjEQUAL_N(leftv res, leftv u, leftv v)
static BOOLEAN jjJET4(leftv res, leftv u)
void scDegree(ideal S, intvec *modulweight, ideal Q)
static BOOLEAN jjOP_IM_I(leftv res, leftv u, leftv v)
int nLastIdentifier
valid indentifieres are slot 1..nLastIdentifier
static BOOLEAN jjLEADEXP(leftv res, leftv v)
int scDimInt(ideal S, ideal Q)
int compare(const intvec *o) const
BOOLEAN slPrepClose(si_link l)
static BOOLEAN jjSLIM_GB(leftv res, leftv u)
matrix mp_MultI(matrix a, int f, const ring R)
c = f*a
#define pLmInit(p)
like pInit, except that expvector is initialized to that of p, p must be != NULL
static BOOLEAN jjDIVISION4(leftv res, leftv v)
static BOOLEAN jjKBASE(leftv res, leftv v)
number(* nMapFunc)(number a, const coeffs src, const coeffs dst)
maps "a", which lives in src, into dst
static FORCE_INLINE BOOLEAN n_DivBy(number a, number b, const coeffs r)
test whether 'a' is divisible 'b'; for r encoding a field: TRUE iff 'b' does not represent zero in Z:...
static FORCE_INLINE number n_ChineseRemainderSym(number *a, number *b, int rl, BOOLEAN sym, CFArray &inv_cache, const coeffs r)
static BOOLEAN jjVARSTR1(leftv res, leftv v)
static BOOLEAN jjREDUCE5(leftv res, leftv u)
static BOOLEAN jjELIMIN(leftv res, leftv u, leftv v)
static BOOLEAN jjSTD_HILB_W(leftv res, leftv u, leftv v, leftv w)
static BOOLEAN jjLIFT3(leftv res, leftv u, leftv v, leftv w)
BOOLEAN sm_CheckDet(ideal I, int d, BOOLEAN sw, const ring r)
static BOOLEAN jjMONOM(leftv res, leftv v)
const char feNotImplemented[]
void id_DelEquals(ideal id, const ring r)
ideal id = (id[i]) if id[i] = id[j] then id[j] is deleted for j > i
static BOOLEAN jjTIMES_N(leftv res, leftv u, leftv v)
static BOOLEAN jjMOD_BI(leftv res, leftv u, leftv v)
static BOOLEAN jjBRACK_Ma_IV_I(leftv res, leftv u, leftv v, leftv w)
long kHomModDeg(poly p, ring r)
struct sValCmd3 dArith3[]
static BOOLEAN jjPREIMAGE(leftv res, leftv u, leftv v, leftv w)
static BOOLEAN jjKLAMMER_PL(leftv res, leftv u)
ideal kInterRed(ideal F, ideal Q)
ideal id_Power(ideal given, int exp, const ring r)
BOOLEAN(* proc3)(leftv, leftv, leftv, leftv)
static BOOLEAN jjSTATUS_M(leftv res, leftv v)
static BOOLEAN jjDEG_M_IV(leftv res, leftv u, leftv v)
static BOOLEAN jjDET(leftv res, leftv v)
BOOLEAN jjLOAD_TRY(const char *s)
static BOOLEAN jjSUBST_P(leftv res, leftv u, leftv v, leftv w)
static BOOLEAN jjLIFTSTD(leftv res, leftv u, leftv v)
int nCmdUsed
number of commands used
static BOOLEAN jjRES(leftv res, leftv u, leftv v)
static BOOLEAN jjINDEX_V_IV(leftv res, leftv u, leftv v)
static BOOLEAN jjSTRING_PL(leftv res, leftv v)
static BOOLEAN jjRANK1(leftv res, leftv v)
static BOOLEAN jjHOMOG_P(leftv res, leftv u, leftv v)
static BOOLEAN jjDIV_N(leftv res, leftv u, leftv v)
BOOLEAN idInsertPoly(ideal h1, poly h2)
insert h2 into h1 (if h2 is not the zero polynomial) return TRUE iff h2 was indeed inserted ...
static BOOLEAN jjEXTGCD_P(leftv res, leftv u, leftv v)
static BOOLEAN jjLEADCOEF(leftv res, leftv v)
static BOOLEAN jjSBA_2(leftv res, leftv v, leftv u, leftv t)
struct sValCmd2 * psValCmd2
BOOLEAN rSamePolyRep(ring r1, ring r2)
returns TRUE, if r1 and r2 represents the monomials in the same way FALSE, otherwise this is an analo...
static FORCE_INLINE number n_InpNeg(number n, const coeffs r)
in-place negation of n MUST BE USED: n = n_InpNeg(n) (no copy is returned)
#define pIsConstant(p)
like above, except that Comp might be != 0
static BOOLEAN jjSBA(leftv res, leftv v)
void hnf()
transforms INPLACE to HNF
static BOOLEAN jjREGULARITY(leftv res, leftv v)
BOOLEAN jjStdJanetBasis(leftv res, leftv v, int flag)
flag: 0: JB, 1: SB
matrix pMultMp(poly p, matrix a, const ring R)
static BOOLEAN jjDEFINED(leftv res, leftv v)
static BOOLEAN jjidVec2Ideal(leftv res, leftv v)
struct sValCmdM * psValCmdM
static int si_max(const int a, const int b)
static BOOLEAN jjGE_N(leftv res, leftv u, leftv v)
static FORCE_INLINE BOOLEAN nCoeff_is_transExt(const coeffs r)
TRUE iff r represents a transcendental extension field.
static BOOLEAN jjREDUCE_P(leftv res, leftv u, leftv v)
FILE * feFopen(const char *path, const char *mode, char *where, short useWerror, short path_only)
static BOOLEAN jjMINUS_P(leftv res, leftv u, leftv v)
BOOLEAN assumeStdFlag(leftv h)
static BOOLEAN jjOP_I_IV(leftv res, leftv u, leftv v)
static BOOLEAN jjFAREY_ID(leftv res, leftv u, leftv v)
static BOOLEAN jjRESERVED0(leftv, leftv)
ring rInit(leftv pn, leftv rv, leftv ord)
static BOOLEAN jjENVELOPE(leftv res, leftv a)
static BOOLEAN jjPFAC2(leftv res, leftv u, leftv v)
void PrintS(const char *s)
static BOOLEAN jjDEG_IV(leftv res, leftv u, leftv v)
static BOOLEAN jjRINGLIST(leftv res, leftv v)
lists ipNameList(idhdl root)
static BOOLEAN rField_is_Q(const ring r)
static BOOLEAN jjCALL1ARG(leftv res, leftv v)
static BOOLEAN jjLOAD2(leftv, leftv, leftv v)
static BOOLEAN jjidTransp(leftv res, leftv v)
int iiArithAddCmd(const char *szName, short nAlias, short nTokval, short nToktype, short nPos=-1)
lists rDecompose(const ring r)
static long p_MinComp(poly p, ring lmRing, ring tailRing)
BOOLEAN load_builtin(const char *newlib, BOOLEAN autoexport, SModulFunc_t init)
static BOOLEAN jjSTD_HILB(leftv res, leftv u, leftv v)
static BOOLEAN jjidMinBase(leftv res, leftv v)
syStrategy sySchreyer(ideal arg, int maxlength)
BOOLEAN sdb_set_breakpoint(const char *pp, int given_lineno)
static BOOLEAN jjBI2P(leftv res, leftv u)
matrix id_Module2Matrix(ideal mod, const ring R)
resolvente sySchreyerResolvente(ideal arg, int maxlength, int *length, BOOLEAN isMonomial=FALSE, BOOLEAN notReplace=FALSE)
static BOOLEAN jjDIM2(leftv res, leftv v, leftv w)
static BOOLEAN jjPOWER_BI(leftv res, leftv u, leftv v)
static BOOLEAN jjUMINUS_N(leftv res, leftv u)
int sySize(syStrategy syzstr)
static BOOLEAN jjDIVISION(leftv res, leftv u, leftv v)
static BOOLEAN jjFWALK(leftv res, leftv u, leftv v)
static BOOLEAN jjREDUCE3_CP(leftv res, leftv u, leftv v, leftv w)
static BOOLEAN jjINTERSECT(leftv res, leftv u, leftv v)
struct sValCmd2 dArith2[]
static BOOLEAN jjREDUCE3_P(leftv res, leftv u, leftv v, leftv w)
#define pHead(p)
returns newly allocated copy of Lm(p), coef is copied, next=NULL, p might be NULL ...
static BOOLEAN jjmpTransp(leftv res, leftv v)
static BOOLEAN jjTYPEOF(leftv res, leftv v)
static BOOLEAN jjINDEX_I(leftv res, leftv u, leftv v)
static FORCE_INLINE BOOLEAN n_IsZero(number n, const coeffs r)
TRUE iff 'n' represents the zero element.
static BOOLEAN jjFactModD_M(leftv res, leftv v)
static FORCE_INLINE nMapFunc n_SetMap(const coeffs src, const coeffs dst)
set the mapping function pointers for translating numbers from src to dst
lists scIndIndset(ideal S, BOOLEAN all, ideal Q)
void(* WerrorS_callback)(const char *s)
void idSkipZeroes(ideal ide)
gives an ideal/module the minimal possible size
void iiMakeResolv(resolvente r, int length, int rlen, char *name, int typ0, intvec **weights)
static BOOLEAN jjPLUS_IV(leftv res, leftv u, leftv v)
static BOOLEAN jjLISTRING(leftv res, leftv v)
static BOOLEAN jjOPTION_PL(leftv res, leftv v)
poly p_Series(int n, poly p, poly u, intvec *w, const ring R)
static BOOLEAN jjDENOMINATOR(leftv res, leftv v)
Return the denominator of the input number NOTE: the input number is normalized as a side effect...
static BOOLEAN jjRANDOM_CF(leftv res, leftv u, leftv v, leftv w)
static BOOLEAN jjIS_RINGVAR_P(leftv res, leftv v)
static BOOLEAN jjrOrdStr(leftv res, leftv v)
static BOOLEAN jjNAMES(leftv res, leftv v)
bool luInverse(const matrix aMat, matrix &iMat, const ring R)
This code first computes the LU-decomposition of aMat, and then calls the method for inverting a matr...
static BOOLEAN jjGCD_BI(leftv res, leftv u, leftv v)
static BOOLEAN jjBRACK_S(leftv res, leftv u, leftv v, leftv w)
struct sValCmdM dArithM[]
void pRestoreDegProcs(ring r, pFDegProc old_FDeg, pLDegProc old_lDeg)
#define rHasLocalOrMixedOrdering_currRing()
static FORCE_INLINE number n_ImPart(number i, const coeffs cf)
void rChangeCurrRing(ring r)
static BOOLEAN jjFIND2(leftv res, leftv u, leftv v)
static BOOLEAN jjFETCH_M(leftv res, leftv u)
static BOOLEAN jjMOD_N(leftv res, leftv u, leftv v)
static BOOLEAN rField_is_Zp(const ring r)
static FORCE_INLINE number n_Farey(number a, number b, const coeffs r)
intvec * ivMult(intvec *a, intvec *b)
ideal idSubstPoly(ideal id, int n, poly e)
static BOOLEAN jjBAREISS3(leftv res, leftv u, leftv v, leftv w)
static BOOLEAN jjSIMPL_P(leftv res, leftv u, leftv v)
void p_Shift(poly *p, int i, const ring r)
shifts components of the vector p by i
static BOOLEAN jjDIM(leftv res, leftv v)
INLINE_THIS void Init(int l=0)
static BOOLEAN jjCOEFFS3_KB(leftv res, leftv u, leftv v, leftv w)
BOOLEAN(* proc2)(leftv, leftv, leftv)
matrix mpNew(int r, int c)
create a r x c zero-matrix
#define TEST_OPT_RETURN_SB
static void p_Delete(poly *p, const ring r)
ideal idMult(ideal h1, ideal h2)
hh := h1 * h2
matrix mp_MultP(matrix a, poly p, const ring R)
multiply a matrix 'a' by a poly 'p', destroy the args
static BOOLEAN jjOP_IV_I(leftv res, leftv u, leftv v)
static BOOLEAN jjTIMES_MA_P1(leftv res, leftv u, leftv v)
static BOOLEAN jjINDEX_V(leftv res, leftv u, leftv v)
static FORCE_INLINE number n_ExtGcd(number a, number b, number *s, number *t, const coeffs r)
beware that ExtGCD is only relevant for a few chosen coeff. domains and may perform something unexpec...
static BOOLEAN jjNEWSTRUCT2(leftv, leftv u, leftv v)
#define SI_RESTORE_OPT2(A)
static BOOLEAN jjCOMPARE_P(leftv res, leftv u, leftv v)
static BOOLEAN jjSQR_FREE2(leftv res, leftv u, leftv dummy)
ideal idInit(int idsize, int rank)
initialise an ideal / module
static BOOLEAN jjGCD_P(leftv res, leftv u, leftv v)
BOOLEAN nc_CallPlural(matrix cc, matrix dd, poly cn, poly dn, ring r, bool bSetupQuotient, bool bCopyInput, bool bBeQuiet, ring curr, bool dummy_ring=false)
returns TRUE if there were errors analyze inputs, check them for consistency detects nc_type...
const Variable & v
< [in] a sqrfree bivariate poly
static BOOLEAN jjEXECUTE(leftv, leftv v)
#define pSeries(n, p, u, w)
static BOOLEAN jjidMaxIdeal(leftv res, leftv v)
matrix mp_Mult(matrix a, matrix b, const ring R)
int singclap_factorize_retry
static BOOLEAN jjMINRES_R(leftv res, leftv v)
static BOOLEAN jjPlural_num_mat(leftv res, leftv a, leftv b)
static BOOLEAN jjCOEFFS3_P(leftv res, leftv u, leftv v, leftv w)
void * atGet(idhdl root, const char *name, int t, void *defaultReturnValue)
void mp_Coef2(poly v, poly mon, matrix *c, matrix *m, const ring R)
corresponds to Macauley's coef: the exponent vector of vars has to contain the variables, eg 'xy'; then the poly f is searched for monomials in x and y, these monimials are written to the first row of the matrix co. the second row of co contains the respective factors in f. Thus f = sum co[1,i]*co[2,i], i = 1..cols, rows equals 2.
static BOOLEAN jjRING_LIST(leftv res, leftv v)
ideal getMinorIdealHeuristic(const matrix mat, const int minorSize, const int k, const ideal iSB, const bool allDifferent)
Returns the specified set of minors (= subdeterminantes) of the given matrix.
void maFindPerm(char const *const *const preim_names, int preim_n, char const *const *const preim_par, int preim_p, char const *const *const names, int n, char const *const *const par, int nop, int *perm, int *par_perm, n_coeffType ch)
static FORCE_INLINE void n_Power(number a, int b, number *res, const coeffs r)
fill res with the power a^b
static BOOLEAN jjPLUS_N(leftv res, leftv u, leftv v)
ideal id_Jet(ideal i, int d, const ring R)
static BOOLEAN jjJET_ID_IV(leftv res, leftv u, leftv v, leftv w)
BOOLEAN jjLIST_PL(leftv res, leftv v)
BOOLEAN iiExprArith3Tab(leftv res, leftv a, int op, const struct sValCmd3 *dA3, int at, const struct sConvertTypes *dConvertTypes)
apply an operation 'op' to arguments a, a->next and a->next->next return TRUE on failure ...
static BOOLEAN jjTIMES_MA(leftv res, leftv u, leftv v)
void mp_Monomials(matrix c, int r, int var, matrix m, const ring R)
static BOOLEAN rField_is_Ring_2toM(const ring r)
static BOOLEAN rField_is_Ring(const ring r)
matrix mp_Add(matrix a, matrix b, const ring R)
BOOLEAN idHomIdeal(ideal id, ideal Q=NULL)
static BOOLEAN jjJET_ID(leftv res, leftv u, leftv v)
int ipower(int b, int m)
int ipower ( int b, int m )
int slStatusSsiL(lists L, int timeout)
matrix id_Module2formatedMatrix(ideal mod, int rows, int cols, const ring R)
ring rCompose(const lists L, const BOOLEAN check_comp=TRUE)
static BOOLEAN jjHILBERT(leftv, leftv v)
ideal id_Farey(ideal x, number N, const ring r)
static BOOLEAN jjIS_RINGVAR_S(leftv res, leftv v)
static BOOLEAN jjGT_N(leftv res, leftv u, leftv v)
lists primeFactorisation(const number n, const int pBound)
Factorises a given bigint number n into its prime factors less than or equal to a given bound...
static BOOLEAN jjLT_I(leftv res, leftv u, leftv v)
void rDelete(ring r)
unconditionally deletes fields in r
static BOOLEAN jjPOWER_P(leftv res, leftv u, leftv v)
SModulFunc_t iiGetBuiltinModInit(const char *libname)
static BOOLEAN jjQUOT(leftv res, leftv u, leftv v)
ideal sm_CallSolv(ideal I, const ring R)
used for all algebraic extensions, i.e., the top-most extension in an extension tower is algebraic ...
static BOOLEAN jjCOEF_M(leftv, leftv v)
ideal walkProc(leftv first, leftv second)
LINLINE void nlDelete(number *a, const coeffs r)
static FORCE_INLINE number n_Div(number a, number b, const coeffs r)
return the quotient of 'a' and 'b', i.e., a/b; raises an error if 'b' is not invertible in r exceptio...
long(* pFDegProc)(poly p, ring r)
intvec * hSecondSeries(intvec *hseries1)
ideal kMin_std(ideal F, ideal Q, tHomog h, intvec **w, ideal &M, intvec *hilb, int syzComp, int reduced)
BOOLEAN iiCheckTypes(leftv args, const short *type_list, int report)
check a list of arguemys against a given field of types return TRUE if the types match return FALSE (...
int luRank(const matrix aMat, const bool isRowEchelon, const ring R)
Computes the rank of a given (m x n)-matrix.
static BOOLEAN jjPLUS_P_MA(leftv res, leftv u, leftv v)
bool luInverseFromLUDecomp(const matrix pMat, const matrix lMat, const matrix uMat, matrix &iMat, const ring R)
This code computes the inverse by inverting lMat and uMat, and then performing two matrix multiplicat...
coeffs basecoeffs() const
static BOOLEAN rField_is_Ring_Z(const ring r)
static BOOLEAN jjCOUNT_RG(leftv res, leftv v)
static BOOLEAN jjUMINUS_IV(leftv res, leftv u)
void pNorm(poly p, const ring R=currRing)
static BOOLEAN jjTIMES_IV(leftv res, leftv u, leftv v)
ideal idLiftStd(ideal h1, matrix *ma, tHomog hi, ideal *syz)
static BOOLEAN jjMONITOR1(leftv res, leftv v)
static BOOLEAN jjMINUS_BIM(leftv res, leftv u, leftv v)
static BOOLEAN jjQRDS(leftv res, leftv INPUT)
ideal fractalWalkProc(leftv first, leftv second)
#define pInit()
allocates a new monomial and initializes everything to 0
static BOOLEAN jjPREIMAGE_R(leftv res, leftv v)
int blackboxIsCmd(const char *n, int &tok)
used by scanner: returns ROOT_DECL for known types (and the type number in tok)
static BOOLEAN jjPLUS_BI(leftv res, leftv u, leftv v)
ideal id_Head(ideal h, const ring r)
returns the ideals of initial terms
static BOOLEAN jjTIMES_MA_N2(leftv res, leftv u, leftv v)
static BOOLEAN jjNAMES_I(leftv res, leftv v)
static BOOLEAN jjEQUAL_P(leftv res, leftv u, leftv v)
number singclap_det_bi(bigintmat *m, const coeffs cf)
static BOOLEAN jjEXTGCD_BI(leftv res, leftv u, leftv v)
static BOOLEAN jjNAMEOF(leftv res, leftv v)
static BOOLEAN jjGT_BI(leftv res, leftv u, leftv v)
static BOOLEAN jjNVARS(leftv res, leftv v)
static BOOLEAN jjCOLCOL(leftv res, leftv u, leftv v)
BOOLEAN singclap_extgcd(poly f, poly g, poly &res, poly &pa, poly &pb, const ring r)
BOOLEAN mp_IsDiagUnit(matrix U, const ring R)
static SArithBase sArithBase
Base entry for arithmetic.
int iiArithFindCmd(const char *szName)
static FORCE_INLINE number n_GetDenom(number &n, const coeffs r)
return the denominator of n (if elements of r are by nature not fractional, result is 1) ...
static bool rIsSCA(const ring r)
static BOOLEAN jjHOMOG_ID_W(leftv res, leftv u, leftv v, leftv)
static BOOLEAN jjUMINUS_BIM(leftv res, leftv u)
void CleanUp(ring r=currRing)
static FORCE_INLINE number n_RePart(number i, const coeffs cf)
int(* SModulFunc_t)(SModulFunctions *)
static BOOLEAN jjMONITOR2(leftv res, leftv u, leftv v)
static Subexpr jjMakeSub(leftv e)
void Clean(ring r=currRing)
static BOOLEAN jjLU_DECOMP(leftv res, leftv v)
static BOOLEAN jjFWALK3(leftv res, leftv u, leftv v, leftv w)
static BOOLEAN jjCOUNT_BI(leftv res, leftv v)
static BOOLEAN jjrParStr(leftv res, leftv v)
static BOOLEAN jjCOLS_BIM(leftv res, leftv v)
static FORCE_INLINE BOOLEAN n_Equal(number a, number b, const coeffs r)
TRUE iff 'a' and 'b' represent the same number; they may have different representations.
static BOOLEAN jjLE_I(leftv res, leftv u, leftv v)
ideal idrCopyR(ideal id, ring src_r, ring dest_r)
static BOOLEAN jjSYZYGY(leftv res, leftv v)
lists rDecompose_list_cf(const ring r)
static BOOLEAN jjLIFTSTD3(leftv res, leftv u, leftv v, leftv w)
void show(int mat=0, int spaces=0) const
ideal idLift(ideal mod, ideal submod, ideal *rest, BOOLEAN goodShape, BOOLEAN isSB, BOOLEAN divide, matrix *unit)
static BOOLEAN jjCHINREM_ID(leftv res, leftv u, leftv v)
BOOLEAN slDump(si_link l)
BOOLEAN mp_Equal(matrix a, matrix b, const ring R)
static BOOLEAN jjDIFF_ID_ID(leftv res, leftv u, leftv v)
matrix mp_Copy(matrix a, const ring r)
copies matrix a (from ring r to r)
static BOOLEAN jjDIFF_P(leftv res, leftv u, leftv v)
static BOOLEAN jjELIMIN_IV(leftv res, leftv u, leftv v)
void newBuffer(char *s, feBufferTypes t, procinfo *pi, int lineno)
syStrategy syConvList(lists li, BOOLEAN toDel)
void sm_CallBareiss(ideal I, int x, int y, ideal &M, intvec **iv, const ring R)
static FORCE_INLINE number n_SubringGcd(number a, number b, const coeffs r)
static BOOLEAN jjBAREISS_BIM(leftv res, leftv v)
static BOOLEAN jjCALL1MANY(leftv res, leftv u)
static BOOLEAN jjTIMES_P(leftv res, leftv u, leftv v)
static BOOLEAN jjROWS_BIM(leftv res, leftv v)
static BOOLEAN jjLE_BI(leftv res, leftv u, leftv v)
ideal maGetPreimage(ring theImageRing, map theMap, ideal id, const ring dst_r)
static BOOLEAN jjINDEX_IV(leftv res, leftv u, leftv v)
static BOOLEAN jjSBA_1(leftv res, leftv v, leftv u)
static BOOLEAN jjMINUS_IV(leftv res, leftv u, leftv v)
static BOOLEAN jjPOWER_N(leftv res, leftv u, leftv v)
cmdnames * sCmds
array of existing commands
int idElem(const ideal F)
count non-zero elements
static FORCE_INLINE BOOLEAN nCoeff_is_Extension(const coeffs r)
static BOOLEAN jjMATRIX_Mo(leftv res, leftv u, leftv v, leftv w)
static int idSize(const ideal id)
Count the effective size of an ideal (without the trailing allocated zero-elements) ...
LINLINE number nlInit(long i, const coeffs r)
static BOOLEAN jjidHead(leftv res, leftv v)
void newstruct_setup(const char *n, newstruct_desc d)
static BOOLEAN jjOP_I_IM(leftv res, leftv u, leftv v)
static BOOLEAN jjSort_Id(leftv res, leftv v)
static BOOLEAN jjJET_P_P(leftv res, leftv u, leftv v, leftv w)
newstruct_desc newstructChildFromString(const char *parent, const char *s)
leftv iiMap(map theMap, const char *what)
int n_IsParam(const number m, const ring r)
TODO: rewrite somehow...
static BOOLEAN jjPOWER_I(leftv res, leftv u, leftv v)
static BOOLEAN jjCOMPARE_IV_I(leftv res, leftv u, leftv v)
static BOOLEAN jjPLUSPLUS(leftv, leftv u)
BOOLEAN iiLoadLIB(FILE *fp, const char *libnamebuf, const char *newlib, idhdl pl, BOOLEAN autoexport, BOOLEAN tellerror)
static FORCE_INLINE void n_Delete(number *p, const coeffs r)
delete 'p'
char * rCharStr(const ring r)
TODO: make it a virtual method of coeffs, together with: Decompose & Compose, rParameter & rPar...
static BOOLEAN jjFACSTD2(leftv res, leftv v, leftv w)
static FORCE_INLINE BOOLEAN n_GreaterZero(number n, const coeffs r)
ordered fields: TRUE iff 'n' is positive; in Z/pZ: TRUE iff 0 < m <= roundedBelow(p/2), where m is the long representing n in C: TRUE iff (Im(n) != 0 and Im(n) >= 0) or (Im(n) == 0 and Re(n) >= 0) in K(a)/<p(a)>: TRUE iff (n != 0 and (LC(n) > 0 or deg(n) > 0)) in K(t_1, ..., t_n): TRUE iff (LC(numerator(n) is a constant and > 0) or (LC(numerator(n) is not a constant) in Z/2^kZ: TRUE iff 0 < n <= 2^(k-1) in Z/mZ: TRUE iff the internal mpz is greater than zero in Z: TRUE iff n > 0
const char * getBlackboxName(const int t)
return the name to the type given by t (r/o)
ideal singclap_factorize(poly f, intvec **v, int with_exps, const ring r)
ideal idAdd(ideal h1, ideal h2)
h1 + h2
static BOOLEAN jjREDUCE4(leftv res, leftv u)
static BOOLEAN jjUNIVARIATE(leftv res, leftv v)
static BOOLEAN jjIDEAL_Ma(leftv res, leftv v)
static BOOLEAN jjSTATUS3(leftv res, leftv u, leftv v, leftv w)
static BOOLEAN jjIDEAL_R(leftv res, leftv v)
intvec * hFirstSeries(ideal S, intvec *modulweight, ideal Q, intvec *wdegree, ring tailRing)
ideal id_Vec2Ideal(poly vec, const ring R)
matrix mp_Sub(matrix a, matrix b, const ring R)
static BOOLEAN jjDEG(leftv res, leftv v)
static FORCE_INLINE char * nCoeffString(const coeffs cf)
TODO: make it a virtual method of coeffs, together with: Decompose & Compose, rParameter & rPar...
BOOLEAN slClose(si_link l)
void hLookSeries(ideal S, intvec *modulweight, ideal Q, intvec *wdegree, ring tailRing)
static BOOLEAN jjCOUNT_L(leftv res, leftv v)
static BOOLEAN jjMATRIX_Id(leftv res, leftv u, leftv v, leftv w)
BOOLEAN slGetDump(si_link l)
static int iin_Int(number &n, coeffs cf)
static BOOLEAN jjOR_I(leftv res, leftv u, leftv v)
static BOOLEAN jjMINUS_MA(leftv res, leftv u, leftv v)
#define omFreeBin(addr, bin)
static BOOLEAN jjLU_SOLVE(leftv res, leftv v)
BOOLEAN rDecompose_CF(leftv res, const coeffs C)
BOOLEAN(* proc1)(leftv, leftv)
static BOOLEAN jjpMaxComp(leftv res, leftv v)
char * iiConvName(const char *libname)
syStrategy syHilb(ideal arg, int *length)
static BOOLEAN currRingIsOverIntegralDomain()
static BOOLEAN jjBRACK_Ma(leftv res, leftv u, leftv v, leftv w)
static BOOLEAN jjPlural_num_poly(leftv res, leftv a, leftv b)
static BOOLEAN jjNUMERATOR(leftv res, leftv v)
Return the numerator of the input number NOTE: the input number is normalized as a side effect...
ideal idSyzygies(ideal h1, tHomog h, intvec **w, BOOLEAN setSyzComp, BOOLEAN setRegularity, int *deg)
static BOOLEAN jjNOT(leftv res, leftv v)
#define IMATELEM(M, I, J)
BOOLEAN iiExprArith2(leftv res, leftv a, int op, leftv b, BOOLEAN proccall)
static BOOLEAN jjHOMOG_ID(leftv res, leftv u, leftv v)
#define omRealloc(addr, size)
poly p_Cleardenom(poly p, const ring r)
#define pSetCoeff(p, n)
deletes old coeff before setting the new one
void syMake(leftv v, const char *id, package pa)
static BOOLEAN jjRESERVEDNAME(leftv res, leftv v)
#define SI_RESTORE_OPT1(A)
static BOOLEAN jjINDEPSET(leftv res, leftv v)
BOOLEAN load_modules(const char *newlib, char *fullname, BOOLEAN autoexport)
static FORCE_INLINE int n_Size(number n, const coeffs r)
return a non-negative measure for the complexity of n; return 0 only when n represents zero; (used fo...
static BOOLEAN jjDET_I(leftv res, leftv v)
ideal id_Matrix2Module(matrix mat, const ring R)
static BOOLEAN jjTRANSP_BIM(leftv res, leftv v)
void nKillChar(coeffs r)
undo all initialisations
static BOOLEAN jjOPPOSITE(leftv res, leftv a)
static BOOLEAN jjCONTRACT(leftv res, leftv u, leftv v)
static BOOLEAN jjHIGHCORNER(leftv res, leftv v)
struct sValCmd3 * psValCmd3
BOOLEAN idHomModule(ideal m, ideal Q, intvec **w)
void Werror(const char *fmt,...)
static BOOLEAN jjAND_I(leftv res, leftv u, leftv v)
BOOLEAN iiExprArith1Tab(leftv res, leftv a, int op, const struct sValCmd1 *dA1, int at, const struct sConvertTypes *dConvertTypes)
apply an operation 'op' to an argument a return TRUE on failure
syStrategy syLaScala3(ideal arg, int *length)
static BOOLEAN jjREAD(leftv res, leftv v)
static BOOLEAN jjCHAR(leftv res, leftv v)
const char * lastreserved
static BOOLEAN jjEQUAL_I(leftv res, leftv u, leftv v)
static BOOLEAN jjLEADMONOM(leftv res, leftv v)
static BOOLEAN jjPLUS_ID(leftv res, leftv u, leftv v)
static BOOLEAN jjSIMPL_ID(leftv res, leftv u, leftv v)
static BOOLEAN jjELIMIN_HILB(leftv res, leftv u, leftv v, leftv w)
intvec * ivAdd(intvec *a, intvec *b)
static BOOLEAN jjstrlen(leftv res, leftv v)
static BOOLEAN jjFETCH(leftv res, leftv u, leftv v)
ideal syMinBase(ideal arg)
static BOOLEAN jjTWOSTD(leftv res, leftv a)
static BOOLEAN jjSTD_HILB_WP(leftv res, leftv INPUT)
static BOOLEAN jjDIFF_COEF(leftv res, leftv u, leftv v)
static BOOLEAN jjSTATUS2(leftv res, leftv u, leftv v)
static BOOLEAN jjORD(leftv res, leftv v)
static BOOLEAN jjFIND3(leftv res, leftv u, leftv v, leftv w)
static BOOLEAN jjDIV_BI(leftv res, leftv u, leftv v)
BOOLEAN jjANY2LIST(leftv res, leftv v, int cnt)
static BOOLEAN jjCOLS_IV(leftv res, leftv v)
syStrategy syMinimize(syStrategy syzstr)
#define pCopy(p)
return a copy of the poly
#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 BOOLEAN jjCOMPARE_BIM(leftv res, leftv u, leftv v)
int IsCmd(const char *n, int &tok)
static BOOLEAN jjHILBERT3(leftv res, leftv u, leftv v, leftv w)
static BOOLEAN jjRANDOM_Im(leftv res, leftv u, leftv v, leftv w)
static BOOLEAN jjLT_N(leftv res, leftv u, leftv v)
static BOOLEAN jjidElem(leftv res, leftv v)
static BOOLEAN jjCOEFFS3_Id(leftv res, leftv u, leftv v, leftv w)
ideal twostd(ideal I)
Compute two-sided GB: