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 185 short number_of_args;
214 extern int iiArithAddCmd(
const char *szName,
short nAlias,
short nTokval,
215 short nToktype,
short nPos=-1);
225 #define ii_div_by_0 "div. by 0" 234 if ((
long)i==
l)
return l;
246 if (sArithBase.
sCmds[
i].tokval==op)
247 return sArithBase.
sCmds[
i].toktype;
259 int bb = (int)(
long)(v->
Data());
264 case '+': cc=
bimAdd(aa,bb);
break;
265 case '-': cc=
bimSub(aa,bb);
break;
266 case '*': cc=
bimMult(aa,bb);
break;
268 res->
data=(
char *)cc;
278 number bb = (number)(v->
Data());
285 res->
data=(
char *)cc;
295 int bb = (int)(
long)(v->
Data());
299 case '+': (*aa) += bb;
break;
300 case '-': (*aa) -= bb;
break;
301 case '*': (*aa) *= bb;
break;
304 case '%': (*aa) %= bb;
break;
306 res->
data=(
char *)aa;
316 int bb = (int)(
long)(v->
Data());
320 case '+':
for (;i>0;i--)
IMATELEM(*aa,i,i) += bb;
322 case '-':
for (;i>0;i--)
IMATELEM(*aa,i,i) -= bb;
325 res->
data=(
char *)aa;
334 int l=(int)(
long)v->
Data();
337 int d=(int)(
long)u->
Data();
340 for(i=l-1;i>=0;i--) { (*vv)[
i]=d; }
341 res->
data=(
char *)vv;
359 res->
data = (
char *) (r<0);
362 res->
data = (
char *) (r>0);
365 res->
data = (
char *) (r<=0);
368 res->
data = (
char *) (r>=0);
372 res->
data = (
char *) (r==0);
376 if(r==-2) {
WerrorS(
"size incompatible");
return TRUE; }
387 res->
data = (
char *) (r<0);
390 res->
data = (
char *) (r>0);
393 res->
data = (
char *) (r<=0);
396 res->
data = (
char *) (r>=0);
400 res->
data = (
char *) (r==0);
404 if(r==-2) {
WerrorS(
"size incompatible");
return TRUE; }
410 int b = (int)(
long)(v->
Data());
415 res->
data = (
char *) (r<0);
418 res->
data = (
char *) (r>0);
421 res->
data = (
char *) (r<=0);
424 res->
data = (
char *) (r>=0);
428 res->
data = (
char *) (r==0);
470 res->
data = (
char *) (r < 0);
473 res->
data = (
char *) (r > 0);
476 res->
data = (
char *) (r <= 0);
479 res->
data = (
char *) (r >= 0);
491 char*
a = (
char * )(u->
Data());
492 char*
b = (
char * )(v->
Data());
497 res->
data = (
char *) (result < 0);
500 res->
data = (
char *) (result > 0);
503 res->
data = (
char *) (result <= 0);
506 res->
data = (
char *) (result >= 0);
510 res->
data = (
char *) (result == 0);
534 int b=(int)(
long)u->
Data();
535 int e=(int)(
long)v->
Data();
544 else if ((e==0)||(b==1))
562 if(rc/b!=oldrc) overflow=
TRUE;
566 WarnS(
"int overflow(^), result may be wrong");
568 res->
data = (
char *)((
long)rc);
574 WerrorS(
"exponent must be non-negative");
580 int e=(int)(
long)v->
Data();
581 number n=(number)u->
Data();
588 WerrorS(
"exponent must be non-negative");
596 int e=(int)(
long)v->
Data();
597 number n=(number)u->
Data();
614 int v_i=(int)(
long)v->
Data();
617 WerrorS(
"exponent must be non-negative");
625 Werror(
"OVERFLOW in power(d=%ld, e=%d, max=%ld)",
709 if(isupper(u->
name[0]))
711 const char *c=u->
name+1;
712 while((*c!=
'\0')&&(islower(*c)||(isdigit(*c)))) c++;
717 Print(
"%s of type 'ANY'. Trying load.\n", u->
name);
733 package pa=(package)u->Data();
747 WerrorS(
"reserved name with ::");
752 memcpy(res, v,
sizeof(
sleftv));
753 memset(v, 0,
sizeof(
sleftv));
759 WerrorS(
"<package>::<id> expected");
766 unsigned int a=(
unsigned int)(
unsigned long)u->
Data();
767 unsigned int b=(
unsigned int)(
unsigned long)v->
Data();
769 res->
data = (
char *)((
long)c);
772 WarnS(
"int overflow(+), result may be wrong");
796 WerrorS(
"intmat size not compatible");
806 WerrorS(
"bigintmat/cmatrix not compatible");
817 Werror(
"matrix size not compatible(%dx%d, %dx%d)",
840 char*
a = (
char * )(u->
Data());
841 char*
b = (
char * )(v->
Data());
842 char*
r = (
char * )
omAlloc(strlen(a) + strlen(b) + 1);
855 void *ap=u->
Data();
void *bp=v->
Data();
856 int aa=(int)(
long)ap;
857 int bb=(int)(
long)bp;
859 unsigned int a=(
unsigned int)(
unsigned long)ap;
860 unsigned int b=(
unsigned int)(
unsigned long)bp;
864 WarnS(
"int overflow(-), result may be wrong");
866 res->
data = (
char *)((
long)cc);
889 WerrorS(
"intmat size not compatible");
899 WerrorS(
"bigintmat/cmatrix not compatible");
910 Werror(
"matrix size not compatible(%dx%d, %dx%d)",
919 int a=(int)(
long)u->
Data();
920 int b=(int)(
long)v->
Data();
922 if ((c>INT_MAX)||(c<INT_MIN))
923 WarnS(
"int overflow(*), result may be wrong");
924 res->
data = (
char *)((
long)((int)c));
939 number n=(number)res->
data;
959 Warn(
"possible OVERFLOW in mult(d=%ld, d=%ld, max=%ld)",
971 Warn(
"possible OVERFLOW in mult(d=%ld, d=%ld, max=%ld)",
1006 WerrorS(
"intmat size not compatible");
1018 WerrorS(
"bigintmat/cmatrix not compatible");
1032 res->
data = (
char *)I;
1046 res->
data = (
char *)I;
1056 res->
data = (
char *)I;
1087 Werror(
"matrix size not compatible(%dx%d, %dx%d) in *",
1105 res->
data = (
char *)(
long)((int)((
long)u->
Data()) >= (
int)((long)v->
Data()));
1123 res->
data = (
char *)(
long)((int)((
long)u->
Data()) > (
int)((long)v->
Data()));
1137 res->
data = (
char *)(
long)((int)((
long)u->
Data()) <= (
int)((long)v->
Data()));
1150 res->
data = (
char *)(
long)((int)((
long)u->
Data()) < (
int)((long)v->
Data()));
1160 int a= (int)(
long)u->
Data();
1161 int b= (int)(
long)v->
Data();
1175 r=((a-c) /b);
break;
1177 res->
data=(
void *)((
long)
r);
1182 number q=(number)v->
Data();
1190 res->
data = (
char *)q;
1195 number q=(number)v->
Data();
1203 res->
data = (
char *)q;
1242 I->m[
i]=
pAdd(I->m[i],p);
1248 for(i=comps-1;i>=0;i--)
1258 res->
data=(
void *)p;
1267 WerrorS(
"division only defined over coefficient domains");
1272 WerrorS(
"division over a coefficient domain only implemented for terms");
1308 res->
data=(
char *)mm;
1319 res->
data = (
char *)((
int)((long)u->
Data()) == (
int)((long)v->
Data()));
1364 res->
data = (
char *)((
long)u->
Data() && (long)v->
Data());
1369 res->
data = (
char *)((
long)u->
Data() || (long)v->
Data());
1382 while (sh->next !=
NULL) sh=sh->next;
1398 WerrorS(
"indexed object must have a name");
1405 memset(&t,0,
sizeof(t));
1407 for (i=0;i<iv->
length(); i++)
1409 t.
data=(
char *)((
long)(*iv)[
i]);
1433 int i=(int)(
long)v->
Data();
1454 for(i=iv->
length()-1;i>=0;i--)
1457 while ((p!=
NULL) && (sum>0))
1460 for(i=iv->
length()-1;i>=0;i--)
1473 res->
data=(
char *)r;
1481 int i=(int)(
long)v->
Data();
1486 if (r==p) r=
pNext(p);
1503 res->
data=(
char *)r;
1517 for(i=0;i<iv->
length();i++)
1537 res->
data=(
char *)r;
1545 char * nn = (
char *)
omAlloc(strlen(u->
name) + 14);
1546 sprintf(nn,
"%s(%d)",u->
name,(
int)(
long)v->
Data());
1560 long slen = strlen(u->
name) + 14;
1561 char *n = (
char*)
omAlloc(slen);
1563 for (i=0;i<iv->
length(); i++)
1574 sprintf(n,
"%s(%d)",u->
name,(*iv)[i]);
1586 memset(tmp,0,
sizeof(
sleftv));
1612 tmp_proc->
id=
"_auto";
1616 d=u->
data; u->
data=(
void *)tmp_proc;
1633 if (sl)
return TRUE;
1652 memcpy(res,sl,
sizeof(
sleftv));
1661 number *
x=(number *)
omAlloc(rl*
sizeof(number));
1662 number *q=(number *)
omAlloc(rl*
sizeof(number));
1664 for(i=rl-1;i>=0;i--)
1671 for(i=rl-1;i>=0;i--)
1677 res->
data=(
char *)n;
1687 number *
x=(number *)
omAlloc(rl*
sizeof(number));
1688 number *q=(number *)
omAlloc(rl*
sizeof(number));
1690 for(i=rl-1;i>=0;i--)
1696 for(i=rl-1;i>=0;i--)
1700 Werror(
"poly expected at pos %d",i+1);
1701 for(i=rl-1;i>=0;i--)
1710 else if (
pLmCmp(r,h)==-1) r=h;
1713 for(i=rl-1;i>=0;i--)
1725 number n=n_ChineseRemainder(x,q,rl,
currRing->cf);
1726 for(i=rl-1;i>=0;i--)
1732 result=
pAdd(result,h);
1734 for(i=rl-1;i>=0;i--)
1739 res->
data=(
char *)result;
1746 int s=(int)(
long)v->
Data();
1755 ideal
M=(ideal)u->
CopyD();
1756 int s=(int)(
long)v->
Data();
1776 ideal *
x=(ideal *)
omAlloc(rl*
sizeof(ideal));
1779 int return_type=c->
m[0].
Typ();
1787 WerrorS(
"poly/ideal/module/matrix expected");
1805 for(i=rl-1;i>=0;i--)
1807 if (c->
m[i].
Typ()!=return_type)
1832 xx=(number *)
omAlloc(rl*
sizeof(number));
1833 for(i=rl-1;i>=0;i--)
1845 Werror(
"bigint expected at pos %d",i+1);
1852 number *q=(number *)
omAlloc(rl*
sizeof(number));
1855 for(i=rl-1;i>=0;i--)
1862 for(i=rl-1;i>=0;i--)
1874 Werror(
"bigint expected at pos %d",i+1);
1890 res->
data=(
char *)n;
1899 res->
data=(
char *)result->m[0];
1904 res->
data=(
char *)result;
1906 for(i=rl-1;i>=0;i--)
1911 res->
rtyp=return_type;
1912 return result==
NULL;
1942 (ideal)(v->
Data()), p);
1954 ideal I=(ideal)u->
Data();
1959 res->
data = (
char *)((
long)d);
1970 res->
data = (
char *)(d);
1973 res->
data=(
char *)(
long)(-1);
2008 Warn(
"dim(%s,...) may be wrong because the mixed monomial ordering",v->
Name());
2019 ideal vid = (ideal)v->
Data();
2023 res->
data = (
char *)-1;
2032 if (i != -1)
pDelete(&vv->m[i]);
2035 res->
data = (
char *)d;
2054 ideal vi=(ideal)v->
Data();
2056 ideal ui=(ideal)u->
Data();
2090 res->
data=(
char *)L;
2127 number uu=(number)u->
Data();number vv=(number)v->
Data();
2136 res->
data=(
char *)L;
2141 int uu=(int)(
long)u->
Data();
int vv=(int)(
long)v->
Data();
2142 int p0=
ABS(uu),p1=
ABS(vv);
2143 int f0 = 1, f1 = 0, g0 = 0, g1 = 1, q,
r;
2165 res->
data=(
char *)L;
2172 if (ret)
return TRUE;
2175 res->
data=(
char *)L;
2176 L->
m[0].
data=(
void *)r;
2178 L->
m[1].
data=(
void *)pa;
2180 L->
m[2].
data=(
void *)pb;
2188 int sw=(int)(
long)dummy->
Data();
2190 if ((sw<0)||(sw>2)) fac_sw=1;
2191 singclap_factorize_retry=0;
2203 l->
m[0].
data=(
void *)f;
2205 l->
m[1].
data=(
void *)v;
2206 res->
data=(
void *)l;
2211 res->
data=(
void *)f;
2224 res->
data=(
void *)p;
2238 while (p!=NULL) { p=p->next;l++; }
2244 L->
m[
l].
data=(
char *)h->d;
2251 res->
data=(
void *)L;
2258 number uu=(number)u->
Data();
2259 number vv=(number)v->
Data();
2267 ideal uu=(ideal)u->
Data();
2268 number vv=(number)v->
Data();
2275 ring
r=(ring)u->
Data();
2284 int par_perm_size=0;
2297 par_perm_size=
rPar(r);
2306 perm=(
int *)
omAlloc0((r->N+1)*
sizeof(int));
2307 if (par_perm_size!=0)
2308 par_perm=(
int *)
omAlloc0(par_perm_size*
sizeof(
int));
2313 char ** r_par_names=
NULL;
2314 if (r->cf->extRing!=
NULL)
2316 r_par=r->cf->extRing->N;
2317 r_par_names=r->cf->extRing->names;
2320 char ** c_par_names=
NULL;
2324 c_par_names=
currRing->cf->extRing->names;
2326 maFindPerm(r->names, r->N, r_par_names, r_par,
2328 perm,par_perm,
currRing->cf->type);
2333 if (par_perm_size!=0)
2343 Print(
"// var nr %d: %s -> %s\n",i,r->names[i],
currRing->names[i]);
2347 Print(
"// par nr %d: %s -> %s\n",
2353 memset(&tmpW,0,
sizeof(
sleftv));
2357 perm,par_perm,par_perm_size,nMap)))
2385 char *where=(
char *)u->
Data();
2386 char *what=(
char *)v->
Data();
2387 char *
found = strstr(where,what);
2390 res->
data=(
char *)((found-where)+1);
2403 int uu=(int)(
long)u->
Data();
int vv=(int)(
long)v->
Data();
2404 int p0=
ABS(uu),p1=
ABS(vv);
2412 res->
data=(
char *)(
long)p0;
2417 number n1 = (number) u->
Data();
2418 number n2 = (number) v->
Data();
2424 number
a=(number) u->
Data();
2425 number
b=(number) v->
Data();
2451 ring tempR =
rCopy(origR);
2456 ideal uid = (ideal)u->
Data();
2459 sleftv uuAsLeftv; memset(&uuAsLeftv, 0,
sizeof(uuAsLeftv));
2464 PrintS(
"// NOTE: computation of Hilbert series etc. is being\n");
2465 PrintS(
"// performed for generic fibre, that is, over Q\n");
2468 int returnWithTrue = 1;
2469 switch((
int)(
long)v->
Data())
2472 res->
data=(
void *)iv;
2487 if (returnWithTrue)
return TRUE;
else return FALSE;
2493 switch((
int)(long)v->
Data())
2496 res->
data=(
void *)iv;
2521 WerrorS(
"variable must have weight 1");
2543 WerrorS(
"variable must have weight 1");
2550 ideal v_id=(ideal)v->
Data();
2559 currRing->pLexOrder=save_pLexOrder;
2563 if (w!=
NULL)
delete w;
2582 const int n = L->
nr;
assume (n >= 0);
2583 std::vector<ideal> V(n + 1);
2585 for(
int i = n;
i >= 0;
i--) V[
i] = (ideal)(L->
m[
i].
Data());
2636 memset(&h,0,
sizeof(
sleftv));
2667 char *
s=(
char *)u->
Data();
2668 if(strcmp(s,
"with")==0)
2670 if (strcmp(s,
"try")==0)
2672 WerrorS(
"invalid second argument");
2673 WerrorS(
"load(\"libname\" [,option]);");
2695 ideal u_id=(ideal)u->
Data();
2696 ideal v_id=(ideal)v->
Data();
2699 if ((*w_u).compare((w_v))!=0)
2701 WarnS(
"incompatible weights");
2702 delete w_u; w_u=
NULL;
2710 WarnS(
"wrong weights");
2711 delete w_u; w_u=
NULL;
2727 number q=(number)v->
Data();
2738 number q=(number)v->
Data();
2755 char *opt=(
char *)v->
Data();
2767 if(strcmp(l->m->type,
"ASCII")!=0)
2769 Werror(
"ASCII link required, not `%s`",l->m->type);
2774 if ( l->name[0]!=
'\0')
2778 if (v==
NULL) opt=(
const char*)
"i";
2779 else opt=(
const char *)v->
Data();
2786 monitor((FILE *)l->data,mode);
2814 if(err) {
pDelete(&p);
WerrorS(
"no negative exponent allowed"); }
2828 int i=(
int)(long)v->
Data();
2836 Werror(
"par number %d out of range 1..%d",
i,p);
2846 WerrorS(
"basering must NOT be a qring!");
2866 WerrorS(
"basering must NOT be a qring!");
2886 WerrorS(
"basering must NOT be a qring!");
2906 WerrorS(
"basering must NOT be a qring!");
2944 ring
r = (ring)a->
Data();
2953 Werror(
"%s is not an opposite ring to current ring",a->
Fullname());
2959 int argtype =
IDTYP(w);
2966 res->
rtyp = argtype;
2974 res->
rtyp = argtype;
2982 res->
rtyp = argtype;
2995 res->
rtyp = argtype;
3000 WerrorS(
"unsupported type in oppose");
3024 int i=(int)(
long)u->
Data();
3025 int j=(int)(
long)v->
Data();
3026 if (j-i <0) {
WerrorS(
"invalid range for random");
return TRUE;}
3027 res->
data =(
char *)(
long)((i >
j) ? i : (
siRand() % (j-i+1)) +
i);
3033 int isRowEchelon = (int)(
long)v->
Data();
3034 if (isRowEchelon != 1) isRowEchelon = 0;
3035 int rank =
luRank(m, isRowEchelon);
3036 res->
data =(
char *)(
long)rank;
3046 if ((l!=
NULL)&&(l->name!=
NULL)) s=l->name;
3048 Werror(
"cannot read from `%s`",s);
3051 memcpy(res,r,
sizeof(
sleftv));
3057 ideal vi=(ideal)v->
Data();
3065 ideal ui=(ideal)u->
Data();
3066 ideal vi=(ideal)v->
Data();
3075 int maxl=(int)(
long)v->
Data();
3078 WerrorS(
"length for res must not be negative");
3086 ideal u_id=(ideal)u->
Data();
3095 "full resolution in a qring may be infinite, setting max length to %d",
3109 int add_row_shift=0;
3113 add_row_shift = ww->
min_in();
3114 (*ww) -= add_row_shift;
3134 (
"`lres` not implemented for inhomogeneous input or qring");
3146 (
"`kres` not implemented for inhomogeneous input or qring");
3158 (
"`hres` not implemented for inhomogeneous input or qring");
3166 res->
data=(
void *)r;
3170 if (weights!=
NULL) (*w) += add_row_shift;
3186 if (ww!=
NULL) {
delete ww; ww=
NULL; }
3192 int maxl=(int)(
long)v->
Data();
3195 WerrorS(
"length for res must not be negative");
3201 ideal u_id=(ideal)u->
Data();
3210 "full resolution in a qring may be infinite, setting max length to %d",
3224 int add_row_shift=0;
3228 add_row_shift = ww->
min_in();
3229 (*ww) -= add_row_shift;
3245 (
"`lres` not implemented for inhomogeneous input or qring");
3249 WarnS(
"the current implementation of `lres` may not work in the case of a single variable");
3259 (
"`kres` not implemented for inhomogeneous input or qring");
3271 (
"`hres` not implemented for inhomogeneous input or qring");
3274 ideal u_id_copy=
idCopy(u_id);
3276 r=
syHilb(u_id_copy,&dummy);
3282 res->
data=(
void *)r;
3283 if ((weights!=
NULL) && (ww!=
NULL)) {
delete ww; ww=
NULL; }
3287 if (weights!=
NULL) (*ww) += add_row_shift;
3317 n1 = (number)u->
CopyD();
3321 i = (int)(
long)u->
Data();
3329 i = (int)(
long)v->
Data();
3333 res->
data = (
char*)l;
3340 res->
data = (
char *)r;
3343 #define SIMPL_LMDIV 32 3344 #define SIMPL_LMEQ 16 3345 #define SIMPL_MULT 8 3347 #define SIMPL_NULL 2 3348 #define SIMPL_NORM 1 3351 int sw = (int)(
long)v->
Data();
3378 res->
data = (
char * )
id;
3385 int sw=(int)(
long)dummy->
Data();
3388 singclap_factorize_retry=0;
3400 l->
m[0].
data=(
void *)f;
3402 l->
m[1].
data=(
void *)v;
3403 res->
data=(
void *)l;
3408 res->
data=(
void *)f;
3421 res->
data=(
void *)p;
3442 int sw = (int)(
long)v->
Data();
3449 res->
data = (
char * )p;
3457 ideal u_id=(ideal)(u->
Data());
3473 res->
data = (
char *)result;
3482 ideal i1=(ideal)(u->
Data());
3520 res->
data = (
char *)result;
3524 i0=(ideal)v->
CopyD();
3563 res->
data = (
char *)result;
3571 int i=(
int)(long)v->
Data();
3592 int t = (int)(
long)v->
Data();
3602 res->
data = (
void*)(
long)
i;
3617 int timeout = 1000*(int)(
long)v->
Data();
3625 for(
int nfinished = 0; nfinished < Lforks->
nr+1; nfinished++)
3650 res->
data = (
void*)(
long)ret;
3658 #define jjWRONG2 (proc2)jjWRONG 3659 #define jjWRONG3 (proc3)jjWRONG 3704 res->
data = (
char *)n;
3709 res->
data = (
char *)(-(
long)u->
Data());
3716 res->
data = (
char *)n;
3734 res->
data = (
char *)iv;
3741 res->
data = (
char *)bim;
3759 l->m[0].data=(
void *)m;
3760 l->m[1].data=(
void *)iv;
3761 res->
data = (
char *)l;
3781 number n=(number)u->
CopyD();
3805 number n=(number) tmp.
data;
3843 res->
data = (
char *)p;
3875 ring
r=(ring)v->
Data();
3880 extern int ipower (
int b,
int n );
3881 elems=
ipower(r->cf->ch,r->cf->extRing->pFDeg(r->cf->extRing->qideal->m[0],r->cf->extRing));
3883 res->
data = (
char *)(
long)elems;
3891 else res->
data=(
char *)-1;
3896 ideal I=(ideal)u->
Data();
3902 res->
data = (
char *)(
long)d;
3911 ring tempR =
rCopy(origR);
3916 ideal vid = (ideal)v->
Data();
3919 sleftv vvAsLeftv; memset(&vvAsLeftv, 0,
sizeof(vvAsLeftv));
3924 PrintS(
"// NOTE: computation of degree is being performed for\n");
3925 PrintS(
"// generic fibre, that is, over Q\n");
3948 else if (v->
rtyp!=0) res->
data=(
void *)(-1);
3956 number n =
reinterpret_cast<number
>(v->
Data());
3965 number n =
reinterpret_cast<number
>(v->
Data());
3982 res ->
data = (
char *)p;
3994 Werror(
"det of %d x %d bigintmat",i,j);
4003 number2
r=(number2)
omAlloc0(
sizeof(*r));
4013 Werror(
"det of %d x %d cmatrix",i,j);
4028 Werror(
"det of %d x %d intmat",i,j);
4035 ideal I=(ideal)v->
Data();
4046 res->
data = (
char *)p;
4054 Warn(
"dim(%s) may be wrong because the mixed monomial ordering",v->
Name());
4058 ideal vid = (ideal)v->
Data();
4062 res->
data = (
char *)-1L;
4093 for(j = 0;j<
IDELEMS(vc)-1;j++)
4103 if (j != -1)
pDelete(&vc->m[j]);
4116 res->
data = (
char *)d;
4129 if ((l!=
NULL)&&(l->name!=
NULL)) s=l->name;
4131 Werror(
"cannot dump to `%s`",s);
4140 int co=(int)(
long)v->
Data();
4146 else WerrorS(
"argument of gen must be positive");
4151 char * d = (
char *)v->
Data();
4152 char *
s = (
char *)
omAlloc(strlen(d) + 13);
4153 strcpy( s, (
char *)d);
4154 strcat( s,
"\n;RETURN();\n");
4175 while (p!=
NULL) { p=p->next;l++; }
4180 L->
m[
l].
data=(
char *)h->d;
4191 WarnS(
"no factorization implemented");
4195 res->
data=(
void *)L;
4201 singclap_factorize_retry=0;
4208 l->
m[0].
data=(
void *)f;
4210 l->
m[1].
data=(
void *)v;
4211 res->
data=(
void *)l;
4220 if ((l!=
NULL)&&(l->name!=
NULL)) s=l->name;
4222 Werror(
"cannot get dump from `%s`",s);
4231 ideal I=(ideal)v->
Data();
4240 ideal I=(ideal)v->
Data();
4254 WerrorS(
"module must be zero-dimensional");
4255 if (delete_w)
delete w;
4278 if (delete_w)
delete w;
4279 res->
data=(
void *)po;
4287 ring tempR =
rCopy(origR);
4292 ideal vid = (ideal)v->
Data();
4295 sleftv vvAsLeftv; memset(&vvAsLeftv, 0,
sizeof(vvAsLeftv));
4300 PrintS(
"// NOTE: computation of Hilbert series etc. is being\n");
4301 PrintS(
"// performed for generic fibre, that is, over Q\n");
4320 PrintS(
"// NOTE: computation of Hilbert series etc. is being\n");
4321 PrintS(
"// performed for generic fibre, that is, over Q\n");
4329 ideal v_id=(ideal)v->
Data();
4337 char *s_isHomog=
omStrDup(
"isHomog");
4343 else if (w!=
NULL)
delete w;
4380 res->
data=(
char *)mat;
4390 res->
data=(
char *)I;
4397 ring q=(ring)v->
Data();
4400 if (q->qideal==
NULL)
4407 WerrorS(
"can only get ideal from identical qring");
4432 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;
4574 res->
data=(
char *)r;
4582 memset(&tmp, 0,
sizeof(tmp));
4598 WerrorS(
"matrix must be constant");
4612 res->
data=(
char*)ll;
4619 switch(((
int)(
long)v->
Data()))
4634 res->
data = (
char *)0;
4638 res->
data = (
char *)0;
4653 l->m[0].data=(
char *)r;
4656 l->m[1].data=(
char *)m;
4657 res->
data=(
char *)l;
4673 res->
data=(
char *)tmp;
4682 number n,
i; i=(number)v->
Data();
4687 res->
data=(
void *)n;
4711 res->
data=(
char*)(
long)((long)v->
Data()==0 ? 1 : 0);
4716 res->
data = (
char *)(
long)(((ring)(v->
Data()))->N);
4733 int i=(int)(
long)v->
Data();
4736 if ((0<i) && (i<=p))
4742 Werror(
"par number %d out of range 1..%d",i,p);
4749 number nn=(number)v->
Data();
4760 int i=(int)(
long)v->
Data();
4766 Werror(
"par number %d out of range 1..%d",i,p);
4777 WerrorS(
"poly must be constant");
4786 res->
data=(
void *)n;
4797 WerrorS(
"poly must be constant");
4812 res->
data = (
char *)(
long)(i > 1 ? i : 2);
4818 ideal v_id=(ideal)v->
Data();
4823 WarnS(
"wrong weights");
4852 res->
data = (
char *)n;
4857 char *
s= (
char *)v->
Data();
4859 for(i=0; i<sArithBase.
nCmdUsed; i++)
4862 if (strcmp(s, sArithBase.
sCmds[i].name) == 0)
4864 res->
data = (
char *)1;
4875 res->
data =(
char *)(
long)rank;
4894 ring
r=(ring)v->
Data();
4909 ring
r=(ring)v->
Data();
4917 ideal
i = (ideal)v->
Data();
4918 res->
data = (
char *)i->rank;
4941 const bool bIsSCA =
false;
4946 WerrorS(
"qring not supported by slimgb at the moment");
4951 WerrorS(
"ordering must be global for slimgb");
4956 ideal u_id=(ideal)u->
Data();
4961 WarnS(
"wrong weights");
4983 ideal v_id=(ideal)v->
Data();
4990 WarnS(
"wrong weights");
5001 res->
data = (
char *)result;
5009 ideal v_id=(ideal)v->
Data();
5016 WarnS(
"wrong weights");
5027 res->
data = (
char *)result;
5035 ideal v_id=(ideal)v->
Data();
5042 WarnS(
"wrong weights");
5053 res->
data = (
char *)result;
5061 ideal v_id=(ideal)v->
Data();
5068 WarnS(
"wrong weights");
5079 res->
data = (
char *)result;
5091 singclap_factorize_retry=0;
5099 l->
m[0].
data=(
void *)f;
5101 l->
m[1].
data=(
void *)v;
5102 res->
data=(
void *)l;
5110 if (w!=
NULL)
delete w;
5119 ideal v_id=(ideal)v->
Data();
5121 int add_row_shift=0;
5125 add_row_shift=w->
min_in();
5126 (*w)-=add_row_shift;
5162 ring
r = (ring)a->
Data();
5170 WarnS(
"opposite only for global orderings");
5177 ring
r = (ring)a->
Data();
5198 int t=(int)(
long)v->
data;
5248 int i=(int)(
long)v->
Data();
5249 if ((0<i) && (i<=currRing->
N))
5254 res->
data=(
char *)p;
5270 int i=(int)(
long)v->
Data();
5271 if ((0<i) && (i<=currRing->
N))
5298 res->
data = (
void*)(
long)
i;
5311 for(
int nfinished = 0; nfinished < Lforks->
nr+1; nfinished++)
5327 res->
data = (
void*)(
long)
j;
5337 #ifdef HAVE_DYNAMIC_LOADING 5344 Werror(
"%s: unknown type", s);
5347 Werror(
"cannot open %s", s);
5362 Werror(
"can not create package `%s`",plib);
5366 package savepack=currPack;
5369 char libnamebuf[256];
5382 #ifdef HAVE_DYNAMIC_LOADING 5385 WerrorS(
"Dynamic modules are not supported by this version of Singular");
5394 WerrorS_dummy_cnt++;
5400 WerrorS_dummy_cnt=0;
5403 Print(
"loading of >%s< failed\n",s);
5411 res->
data = (
char *)strlen((
char *)v->
Data());
5507 number n=(number)u->
CopyD();
5514 number n=(number)u->
Data();
5523 char *s= (
char *)u->
Data();
5524 int r = (int)(
long)v->
Data();
5525 int c = (int)(
long)w->
Data();
5528 if ( (r<1) || (r>l) || (c<0) )
5534 sprintf((
char *)res->
data,
"%-*.*s",c,c,s+r-1);
5540 int r = (int)(
long)v->
Data();
5541 int c = (int)(
long)w->
Data();
5542 if ((r<1)||(r>iv->
rows())||(c<1)||(c>iv->
cols()))
5544 Werror(
"wrong range[%d,%d] in intmat %s(%d x %d)",
5553 if (u->
e==
NULL) res->
e=e;
5557 while (h->next!=
NULL) h=h->next;
5567 int r = (int)(
long)v->
Data();
5568 int c = (int)(
long)w->
Data();
5569 if ((r<1)||(r>bim->
rows())||(c<1)||(c>bim->
cols()))
5571 Werror(
"wrong range[%d,%d] in bigintmat %s(%d x %d)",
5585 while (h->next!=
NULL) h=h->next;
5595 int r = (int)(
long)v->
Data();
5596 int c = (int)(
long)w->
Data();
5600 Werror(
"wrong range[%d,%d] in matrix %s(%d x %d)",r,c,u->
Fullname(),
5614 while (h->next!=
NULL) h=h->next;
5632 WerrorS(
"cannot build expression lists from unnamed objects");
5635 memcpy(&ut,u,
sizeof(ut));
5636 memset(&t,0,
sizeof(t));
5638 for (l=0;l< iv->
length(); l++)
5640 t.
data=(
char *)(
long)((*iv)[
l]);
5650 memcpy(u,&ut,
sizeof(ut));
5682 WerrorS(
"cannot build expression lists from unnamed objects");
5685 memcpy(&ut,u,
sizeof(ut));
5686 memset(&t,0,
sizeof(t));
5688 for (l=0;l< iv->
length(); l++)
5690 t.
data=(
char *)(
long)((*iv)[
l]);
5700 memcpy(u,&ut,
sizeof(ut));
5733 WerrorS(
"cannot build expression lists from unnamed objects");
5736 memcpy(&ut,u,
sizeof(ut));
5737 memset(&t1,0,
sizeof(
sleftv));
5738 memset(&t2,0,
sizeof(
sleftv));
5741 for (vl=0;vl< vv->
length(); vl++)
5743 t1.
data=(
char *)(
long)((*vv)[vl]);
5744 for (wl=0;wl< wv->
length(); wl++)
5746 t2.
data=(
char *)(
long)((*wv)[wl]);
5756 memcpy(u,&ut,
sizeof(ut));
5776 memset(w,0,
sizeof(
sleftv));
5784 int k=(int)(
long)w->
Data();
5791 l->
m[0].
data=(
void *)m;
5792 l->
m[1].
data=(
void *)iv;
5799 l->
m[0].
data=(
void *)m;
5801 res->
data = (
char *)l;
5808 WerrorS(
"3rd argument must be a name of a matrix");
5811 ideal
i=(ideal)u->
Data();
5812 int rank=(int)i->rank;
5828 WerrorS(
"3rd argument must be a name of a matrix");
5836 memset(&t,0,
sizeof(t));
5866 int n=(int)(
long)w->
Data();
5867 char *where=(
char *)u->
Data();
5868 char *what=(
char *)v->
Data();
5870 if ((1>n)||(n>(
int)strlen(where)))
5872 Werror(
"start position %d out of range",n);
5875 found = strchr(where+n-1,*what);
5876 if (*(what+1)!=
'\0')
5878 while((found !=
NULL) && (strncmp(found+1,what+1,strlen(what+1))!=0))
5880 found=strchr(found+1,*what);
5885 res->
data=(
char *)((found-where)+1);
5891 if ((
int)(
long)w->
Data()==0)
5903 Werror(
"weight vector must have size %d, not %d",
5910 ring tempR =
rCopy(origR);
5915 ideal uid = (ideal)u->
Data();
5918 sleftv uuAsLeftv; memset(&uuAsLeftv, 0,
sizeof(uuAsLeftv));
5923 PrintS(
"// NOTE: computation of Hilbert series etc. is being\n");
5924 PrintS(
"// performed for generic fibre, that is, over Q\n");
5927 int returnWithTrue = 1;
5928 switch((
int)(
long)v->
Data())
5931 res->
data=(
void *)iv;
5946 if (returnWithTrue)
return TRUE;
else return FALSE;
5951 switch((
int)(long)v->
Data())
5954 res->
data=(
void *)iv;
5980 WerrorS(
"variable must have weight 1");
5998 WerrorS(
"variable must have weight 1");
6009 (*im)[
i] = (*arg)[
i];
6012 res->
data = (
char *)im;
6026 WerrorS(
"2nd argument must be a unit");
6042 WerrorS(
"2nd argument must be a diagonal matrix of units");
6113 const int mk = (
const int)(
long)u->
Data();
6114 bool noIdeal =
true;
bool noK =
true;
bool noAlgorithm =
true;
6115 bool noCacheMinors =
true;
bool noCacheMonomials =
true;
6116 ideal IasSB;
int k;
char* algorithm;
int cacheMinors;
int cacheMonomials;
6132 noAlgorithm =
false;
6137 noCacheMinors =
false;
6143 noCacheMonomials =
false;
6157 noAlgorithm =
false;
6162 noCacheMinors =
false;
6167 noCacheMonomials =
false;
6174 algorithm = (
char*)u->
next->
Data();
6175 noAlgorithm =
false;
6179 noCacheMinors =
false;
6184 noCacheMonomials =
false;
6192 if (strcmp(algorithm,
"bareiss") == 0)
6193 algorithm = (
char*)
"Bareiss";
6194 if (strcmp(algorithm,
"laplace") == 0)
6195 algorithm = (
char*)
"Laplace";
6196 if (strcmp(algorithm,
"cache") == 0)
6197 algorithm = (
char*)
"Cache";
6206 if ((!noK) && (k == 0))
6208 WerrorS(
"Provided number of minors to be computed is zero.");
6211 if ((!noAlgorithm) && (strcmp(algorithm,
"Bareiss") != 0)
6212 && (strcmp(algorithm,
"Laplace") != 0)
6213 && (strcmp(algorithm,
"Cache") != 0))
6215 WerrorS(
"Expected as algorithm one of 'B/bareiss', 'L/laplace', or 'C/cache'.");
6218 if ((!noAlgorithm) && (strcmp(algorithm,
"Bareiss") == 0)
6221 Werror(
"Bareiss algorithm not defined over coefficient rings %s",
6222 "with zero divisors.");
6226 if ((mk < 1) || (mk > m->
rows()) || (mk > m->
cols()))
6235 if ((!noAlgorithm) && (strcmp(algorithm,
"Cache") == 0)
6236 && (noCacheMinors || noCacheMonomials))
6239 cacheMonomials = 100000;
6245 (noIdeal ? 0 : IasSB),
false);
6246 else if (strcmp(algorithm,
"Cache") == 0)
6248 (noIdeal ? 0 : IasSB), 3, cacheMinors,
6249 cacheMonomials,
false);
6252 (noIdeal ? 0 : IasSB),
false);
6262 (
const char *)w->
Data());
6276 WerrorS(
"2nd/3rd arguments must have names");
6280 const char *ring_name=u->
Name();
6287 if ((preim_ring==
NULL)
6290 Werror(
"preimage ring `%s` is not the basering",mapping->preimage);
6306 Werror(
"`%s` is not defined in `%s`",v->
name,ring_name);
6310 if (kernel_cmd) image=
idInit(1,1);
6327 Werror(
"`%s` is not defined in `%s`",w->
name,ring_name);
6334 WarnS(
"preimage in local qring may be wrong: use Ring::preimageLoc instead");
6343 int i=(int)(
long)u->
Data();
6344 int r=(int)(
long)v->
Data();
6345 int c=(int)(
long)w->
Data();
6346 if ((r<=0) || (c<=0))
return TRUE;
6357 for (k=0; k<iv->
length(); k++)
6359 (*iv)[
k] = ((
siRand() % di) - i);
6362 res->
data = (
char *)iv;
6370 if ((cf==
NULL) ||(cf->cfRandom==
NULL))
6372 Werror(
"no random function defined for coeff %d",cf->type);
6378 number2 nn=(number2)
omAlloc(
sizeof(*nn));
6388 int &ringvar,
poly &monomexpr)
6395 Werror(
"`%s` substitutes a ringvar only by a term",
6400 if ((ringvar=
pVar(p))==0)
6409 WerrorS(
"ringvar/par expected");
6420 if (nok)
return TRUE;
6446 if (nok)
return TRUE;
6447 ideal
id=(ideal)u->
Data();
6451 if (monomexpr!=
NULL)
6466 Warn(
"possible OVERFLOW in subst, max exponent is %ld",
currRing->bitmask/2);
6496 memset(&tmp,0,
sizeof(tmp));
6505 int mi=(int)(
long)v->
Data();
6506 int ni=(int)(
long)w->
Data();
6509 Werror(
"converting ideal to matrix: dimensions must be positive(%dx%d)",mi,ni);
6520 memcpy(m->
m,I->m,i*
sizeof(
poly));
6521 memset(I->m,0,i*
sizeof(
poly));
6523 res->
data = (
char *)m;
6528 int mi=(int)(
long)v->
Data();
6529 int ni=(int)(
long)w->
Data();
6532 Werror(
"converting module to matrix: dimensions must be positive(%dx%d)",mi,ni);
6541 int mi=(int)(
long)v->
Data();
6542 int ni=(int)(
long)w->
Data();
6545 Werror(
"converting matrix to matrix: dimensions must be positive(%dx%d)",mi,ni);
6562 res->
data = (
char *)m;
6586 &(hw->data.uideal));
6595 Werror(
"`%s` must be 0-dimensional",v->
Name());
6607 Werror(
"`%s` must be 0-dimensional",v->
Name());
6618 0,(int)(
long)w->
Data());
6625 0,(int)(
long)w->
Data());
6631 int maxl=(int)v->
Data();
6632 ideal u_id=(ideal)u->
Data();
6648 WarnS(
"wrong weights");
6676 yes = (strcmp((
char *) res->
data, (
char *) w->
Data()) == 0);
6678 res->
data = (
void *)(
long)yes;
6692 ideal u_id=(ideal)(u->
Data());
6697 WarnS(
"wrong weights");
6714 res->
data = (
char *)result;
6800 WarnS(
"<module>,<module>,<int>[,<intvec>] expected!");
6807 ideal
P=(ideal)w1.
Data();
6808 ideal
Q=(ideal)w2.
Data();
6810 int n=(int)(
long)v3->
Data();
6817 while( (i > 0) && ((*w0) > 0) )
6823 WarnS(
"not all weights are positive!");
6837 L->
m[1].
rtyp=v1->Typ();
6842 L->
m[1].
data=(
void *)R->m[0];
6851 L->
m[1].
data=(
void *)R;
6854 L->
m[0].
data=(
char *)T;
6920 number
b=(number)h->
Data();
6976 res->
data=(
char *)
id;
6981 ring
r=(ring)u->
Data();
6989 WerrorS(
"fetch(<ring>,<name>[,<intvec>[,<intvec>])");
6994 if (perm_par_l!=
NULL)
7003 int par_perm_size=0;
7016 par_perm_size=
rPar(r);
7024 par_perm_size=
rPar(r);
7026 if (par_perm_size!=0)
7027 par_perm=(
int *)
omAlloc0(par_perm_size*
sizeof(
int));
7029 if (perm_par_l==
NULL)
7031 if (par_perm_size!=0)
7036 if (par_perm_size==0)
WarnS(
"source ring has no parameters");
7039 for(i=
rPar(r)-1;i>=0;i--)
7041 if (i<perm_par_v->length()) par_perm[
i]=(*perm_par_v)[
i];
7045 Warn(
"invalid entry for par %d: %d\n",i,par_perm[i]);
7051 for(i=
rVar(r)-1;i>=0;i--)
7053 if (i<perm_var_v->length()) perm[i+1]=(*perm_var_v)[
i];
7057 Warn(
"invalid entry for var %d: %d\n",i,perm[i]);
7066 Print(
"// var nr %d: %s -> var %s\n",i,r->names[i-1],
currRing->names[perm[i]-1]);
7072 if (par_perm[i-1]<0)
7073 Print(
"// par nr %d: %s -> par %s\n",
7075 else if (par_perm[i-1]>0)
7076 Print(
"// par nr %d: %s -> var %s\n",
7082 memset(&tmpW,0,
sizeof(
sleftv));
7086 perm,par_perm,par_perm_size,nMap)))
7141 WerrorS(
"cannot convert to ideal or module");
7152 r[
i]=(ideal)h->
Data();
7164 r[
i]=(ideal)tmp.
Data();
7196 matrix iMat;
int invertible;
7202 int rr = aMat->
rows();
7203 int cc = aMat->
cols();
7206 Werror(
"given matrix (%d x %d) is not quadratic, hence not invertible", rr, cc);
7211 WerrorS(
"matrix must be constant");
7221 int rr = uMat->
rows();
7222 int cc = uMat->
cols();
7225 Werror(
"third matrix (%d x %d) is not quadratic, hence not invertible",
7234 WerrorS(
"matricesx must be constant");
7241 Werror(
"expected either one or three matrices");
7259 res->
data=(
char*)ll;
7283 WerrorS(
"expected exactly three matrices and one vector as input");
7293 Werror(
"first matrix (%d x %d) is not quadratic",
7299 Werror(
"second matrix (%d x %d) is not quadratic",
7305 Werror(
"second matrix (%d x %d) and third matrix (%d x %d) do not fit",
7311 Werror(
"third matrix (%d x %d) and vector (%d x 1) do not fit",
7320 WerrorS(
"matrices must be constant");
7340 res->
data=(
char*)ll;
7354 (*iv)[
i]=(int)(
long)h->
Data();
7373 res->
data=(
char *)iv;
7390 WerrorS(
"2nd argument must be a unit");
7403 WerrorS(
"2nd argument must be a diagonal matrix of units");
7408 (
int)(long)u3->
Data(),
7417 Werror(
"%s(`poly`,`poly`,`int`,`intvec`) exppected",
7453 memset(res,0,
sizeof(
sleftv));
7462 && ((strcmp(u->
Name(),
"real")==0) || (strcmp(u->
Name(),
"complex")==0)))
7464 memcpy(res,u,
sizeof(
sleftv));
7465 memset(u,0,
sizeof(
sleftv));
7487 int add_row_shift = 0;
7489 if (weights!=
NULL) add_row_shift=weights->
min_in();
7522 ((ring)L->
m[i].
data)->ref++;
7528 res->
data=(
char *)L;
7575 WerrorS(
"2nd argument must be a diagonal matrix of units");
7583 (
int)(long)u4->
Data()
7594 WerrorS(
"2nd argument must be a unit");
7621 WerrorS(
"2nd argument must be a diagonal matrix of units");
7629 (
int)(long)u4->
Data(),
7641 WerrorS(
"2nd argument must be a unit");
7652 Werror(
"%s(`ideal`,`ideal`,`matrix`,`int`,`intvec`) exppected",
7660 int nCount = (sArithBase.
nCmdUsed-1)/3;
7661 if((3*nCount)<sArithBase.
nCmdUsed) nCount++;
7664 for(i=0; i<nCount; i++)
7668 Print(
"%-20s",sArithBase.
sCmds[i+1+nCount].name);
7669 if(i+1+2*nCount<sArithBase.
nCmdUsed)
7670 Print(
"%-20s",sArithBase.
sCmds[i+1+2*nCount].name);
7692 char** slist = (
char**)
omAlloc(n*
sizeof(
char*));
7695 for (i=0, j=0; i<n; i++, v = v ->
next)
7697 slist[
i] = v->String();
7699 j+=strlen(slist[i]);
7701 char* s = (
char*)
omAlloc((j+1)*
sizeof(char));
7705 strcat(s, slist[i]);
7725 #if defined(__alpha) && !defined(linux) 7728 void usleep(
unsigned long usec);
7757 leftv u =
v;
int factorsGiven = 0;
7760 WerrorS(
"expected arguments (poly, int [, poly, poly] [, int, int])");
7767 WerrorS(
"expected arguments (poly, int [, poly, poly] [, int, int])");
7770 else d = (int)(
long)u->
Data();
7776 WerrorS(
"expected arguments (poly, int [, poly, poly] [, int, int])");
7791 WerrorS(
"expected arguments (poly, int [, poly, poly] [, int, int])");
7796 xIndex = (int)(
long)u->
Data();
7797 yIndex = (int)(
long)u->
next->
Data();
7803 WerrorS(
"expected arguments (poly, int [, poly, poly] [, int, int])");
7810 WerrorS(
"expected non-constant polynomial argument(s)");
7814 if ((xIndex < 1) || (n < xIndex))
7816 Werror(
"index for variable x (%d) out of range [1..%d]", xIndex, n);
7819 if ((yIndex < 1) || (n < yIndex))
7821 Werror(
"index for variable y (%d) out of range [1..%d]", yIndex, n);
7824 if (xIndex == yIndex)
7826 WerrorS(
"expected distinct indices for variables x and y");
7831 if (factorsGiven == 0)
7845 WerrorS(
"expected h(0,y) to have exactly two distinct monic factors");
7860 res->
data = (
char*)L;
7871 #if defined(HAVE_USLEEP) 7872 if (((
long) res->
data) == 0L)
7881 #elif defined(HAVE_SLEEP) 7882 if (((
int) res->
data) == 0)
7887 si_sleep((is - 1)/1000000 + 1);
7906 if ((rest!=
NULL) && (!b))
7911 memset(&tmp_res,0,
sizeof(tmp_res));
7913 memcpy(res,&tmp_res,
sizeof(tmp_res));
7928 WerrorS(
"expected (matrix, number, number, number) as arguments");
7933 (number)(v->
Data()),
7934 (number)(w->
Data()),
7935 (number)(x->
Data()));
7945 ideal i1=(ideal)(u->
Data());
7951 WerrorS(
"expected `std(`ideal/module`,`poly/vector`,`intvec`,`intvec`)");
7971 i0=(ideal)v->
Data();
7975 WerrorS(
"expected `std(`ideal/module`,`poly/vector`,`intvec`,`intvec`)");
7992 WarnS(
"wrong weights");
8015 res->
data = (
char *)result;
8024 Print(
"construct ring\n");
8027 WerrorS(
"expected `Ring` [ `id` ... ]");
8033 char **n=(
char**)
omAlloc0(N*
sizeof(
char*));
8034 for(
int i=0;
i<
N;
i++,names=names->
next)
8036 n[
i]=(
char *)names->Name();
8049 r->start =(int)(
long)e->
Data();
8053 #define NULL_VAL NULL 8057 #include "iparith.inc" 8069 memset(res,0,
sizeof(
sleftv));
8076 while (dA2[i].
cmd==op)
8078 if ((at==dA2[i].arg1)
8079 && (bt==dA2[i].arg2))
8096 if ((call_failed=dA2[i].
p(res,a,b)))
8116 while (dA2[i].
cmd==op)
8139 failed= ((
iiConvert(at,dA2[i].arg1,ai,a,an))
8141 || (call_failed=dA2[i].
p(res,an,bn)));
8181 Werror(
"`%s` is not defined",s);
8188 Werror(
"%s(`%s`,`%s`) failed" 8193 Werror(
"`%s` %s `%s` failed" 8198 while (dA2[i].
cmd==op)
8200 if(((at==dA2[i].arg1)||(bt==dA2[i].arg2))
8205 Werror(
"expected %s(`%s`,`%s`)" 8208 Werror(
"expected `%s` %s `%s`" 8237 memset(res,0,
sizeof(
sleftv));
8246 memcpy(&d->arg1,a,
sizeof(
sleftv));
8248 memcpy(&d->arg2,b,
sizeof(
sleftv));
8252 res->
data=(
char *)d;
8265 if (!bb->blackbox_Op2(op,res,a,b))
return FALSE;
8271 else if ((bt>
MAX_TOK)&&(op!=
'('))
8276 if(!bb->blackbox_Op2(op,res,a,b))
return FALSE;
8296 memset(res,0,
sizeof(
sleftv));
8304 while (dA1[i].
cmd==op)
8323 if ((call_failed=dA1[i].
p(res,a)))
8343 while (dA1[i].
cmd==op)
8364 failed= ((
iiConvert(at,dA1[i].arg,ai,a,an,dConvertTypes))
8365 || (call_failed=dA1[i].
p(res,an)));
8406 while (dA1[i].
cmd==op)
8410 Werror(
"expected %s(`%s`)" 8424 memset(res,0,
sizeof(
sleftv));
8433 memcpy(&d->arg1,a,
sizeof(
sleftv));
8437 res->
data=(
char *)d;
8450 res->
data=bb->blackbox_Init(bb);
8451 if(!bb->blackbox_Assign(res,a))
return FALSE;
8461 if(!bb->blackbox_Op1(op,res,a))
return FALSE;
8481 const struct sValCmd3* dA3,
int at,
int bt,
int ct,
8484 memset(res,0,
sizeof(
sleftv));
8493 while (dA3[i].
cmd==op)
8495 if ((at==dA3[i].arg1)
8496 && (bt==dA3[i].arg2)
8497 && (ct==dA3[i].arg3))
8505 Print(
"call %s(%s,%s,%s)\n",
8507 if ((call_failed=dA3[i].
p(res,a,b,c)))
8528 while (dA3[i].
cmd==op)
8542 Print(
"call %s(%s,%s,%s)\n",
8545 failed= ((
iiConvert(at,dA3[i].arg1,ai,a,an,dConvertTypes))
8546 || (
iiConvert(bt,dA3[i].arg2,bi,b,bn,dConvertTypes))
8547 || (
iiConvert(ct,dA3[i].arg3,ci,c,cn,dConvertTypes))
8548 || (call_failed=dA3[i].
p(res,an,bn,cn)));
8599 Werror(
"`%s` is not defined",s);
8605 Werror(
"%s(`%s`,`%s`,`%s`) failed" 8609 while (dA3[i].
cmd==op)
8611 if(((at==dA3[i].arg1)
8613 ||(ct==dA3[i].arg3))
8616 Werror(
"expected %s(`%s`,`%s`,`%s`)" 8636 memset(res,0,
sizeof(
sleftv));
8645 memcpy(&d->arg1,a,
sizeof(
sleftv));
8647 memcpy(&d->arg2,b,
sizeof(
sleftv));
8649 memcpy(&d->arg3,c,
sizeof(
sleftv));
8653 res->
data=(
char *)d;
8665 if(!bb->blackbox_Op3(op,res,a,b,c))
return FALSE;
8713 if(v==
NULL)
return failed;
8724 memset(res,0,
sizeof(
sleftv));
8734 res->
data=(
char *)d;
8739 memcpy(&d->arg1,a,
sizeof(
sleftv));
8774 if(!bb->blackbox_OpM(op,res,a))
return FALSE;
8788 if ((args==
dArithM[i].number_of_args)
8789 || (
dArithM[i].number_of_args==-1)
8790 || ((
dArithM[i].number_of_args==-2)&&(args>0)))
8819 Werror(
"%s(...) failed",s);
8841 if (strcmp(n, sArithBase.
sCmds[an].name) == 0)
8846 else if ((an!=en) && (strcmp(n, sArithBase.
sCmds[en].name) == 0))
8859 if (*n < *(sArithBase.
sCmds[i].name))
8863 else if (*n > *(sArithBase.
sCmds[i].name))
8869 int v=strcmp(n,sArithBase.
sCmds[i].name);
8885 tok=sArithBase.
sCmds[
i].tokval;
8886 if(sArithBase.
sCmds[i].alias==2)
8888 Warn(
"outdated identifier `%s` used - please change your code",
8889 sArithBase.
sCmds[i].name);
8890 sArithBase.
sCmds[
i].alias=1;
8927 return sArithBase.
sCmds[
i].toktype;
8939 if (op==dArithTab[p].
cmd)
return dArithTab[
p].start;
8940 if (op<dArithTab[p].cmd) e=p-1;
8956 return sArithBase.
sCmds[0].name;
8958 if (tok==
ANY_TYPE)
return "any_type";
8959 if (tok==
COMMAND)
return "command";
8960 if (tok==
NONE)
return "nothing";
8967 if (tok==
IDHDL)
return "identifier";
8973 for(i=0; i<sArithBase.
nCmdUsed; i++)
8976 if ((sArithBase.
sCmds[i].tokval == tok)&&
8977 (sArithBase.
sCmds[i].alias==0))
8979 return sArithBase.
sCmds[
i].name;
8983 for(i=0; i<sArithBase.
nCmdUsed; i++)
8985 if (sArithBase.
sCmds[i].tokval == tok)
8987 return sArithBase.
sCmds[
i].name;
8990 return sArithBase.
sCmds[0].name;
9006 cmdnames *pCmdL = (cmdnames*)a;
9007 cmdnames *pCmdR = (cmdnames*)b;
9012 if(pCmdL->name==
NULL)
return 1;
9013 if(pCmdR->name==
NULL)
return -1;
9016 if(strcmp(pCmdL->name,
"$INVALID$")==0)
return -1;
9017 if(strcmp(pCmdR->name,
"$INVALID$")==0)
return 1;
9020 if (pCmdL->tokval==-1)
9022 if (pCmdR->tokval==-1)
9023 return strcmp(pCmdL->name, pCmdR->name);
9028 if(pCmdR->tokval==-1)
return -1;
9030 return strcmp(pCmdL->name, pCmdR->name);
9044 memset(&sArithBase, 0,
sizeof(sArithBase));
9087 if (strcmp(szName, sArithBase.
sCmds[an].name) == 0)
9092 else if (strcmp(szName, sArithBase.
sCmds[en].name) == 0)
9104 if (*szName < *(sArithBase.
sCmds[i].name))
9108 else if (*szName > *(sArithBase.
sCmds[i].name))
9114 v=strcmp(szName,sArithBase.
sCmds[i].name);
9138 if(nPos<0)
return NULL;
9140 return sArithBase.
sCmds[nPos].name;
9147 if(szName==
NULL)
return -1;
9150 if(nIndex<0 || nIndex>=sArithBase.
nCmdUsed)
9152 Print(
"'%s' not found (%d)\n", szName, nIndex);
9157 qsort(sArithBase.
sCmds, sArithBase.
nCmdUsed,
sizeof(cmdnames),
9187 sArithBase.
sCmds[nPos].alias = nAlias;
9188 sArithBase.
sCmds[nPos].tokval = nTokval;
9189 sArithBase.
sCmds[nPos].toktype = nToktype;
9195 if(szName==
NULL)
return -1;
9199 Print(
"'%s' already exists at %d\n", szName, nIndex);
9218 qsort(sArithBase.
sCmds, sArithBase.
nCmdUsed,
sizeof(cmdnames),
9237 WerrorS(
"not implemented for non-commutative rings");
9240 else if ((p & PLURAL_MASK)==2 )
9252 WerrorS(
"not implemented for rings with rings as coeffients");
9259 WerrorS(
"domain required as coeffients");
9265 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
int compare(const intvec *o) const
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)
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)
static BOOLEAN jjANY2LIST(leftv res, leftv v, int cnt)
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)
syStrategy syConvList(lists li)
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 jjEQUAL_R(leftv res, leftv u, leftv v)
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)
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
ring rDefault(const coeffs cf, int N, char **n, int ord_size, int *ord, int *block0, int *block1, int **wvhdl)
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)
BOOLEAN rHasMixedOrdering(const ring r)
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)
void show(int mat=0, int spaces=0) const
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 BOOLEAN jjRING_PL(leftv res, leftv a)
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)
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)
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)
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)
int compare(const bigintmat *op) const
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)
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: