12 #include <factory/factory.h> 112 case LE:
return "<=";
113 case GE:
return ">=";
122 if (s[1]==
'\0')
return s[0];
123 else if (s[2]!=
'\0')
return 0;
126 case '.':
if (s[1]==
'.')
return DOTDOT;
132 case '+':
if (s[1]==
'+')
return PLUSPLUS;
136 case '<':
if (s[1]==
'=')
return LE;
137 else if (s[1]==
'>')
return NOTEQUAL;
139 case '>':
if (s[1]==
'=')
return GE;
141 case '!':
if (s[1]==
'=')
return NOTEQUAL;
153 if(fullname) sprintf(buf2,
"%s::%s",
"",
IDID(h));
154 else sprintf(buf2,
"%s",
IDID(h));
192 && (strlen(
IDPROC(h)->libname)>0))
203 if ((s=strchr(buffer,
'\n'))!=
NULL)
209 if((s!=
NULL) ||(l>20))
211 Print(
"..., %d char(s)",l);
227 { number2 n=(number2)
IDDATA(h);
233 Print(
" %d x %d (%s)",
366 && (((ring)d)->idroot!=
NULL))
417 package savePack=currPack;
424 if (strcmp(what,
"all")==0)
436 if (iterate)
list1(prefix,h,
TRUE,fullname);
459 Werror(
"%s is undefined",what);
497 package save_p=currPack;
531 Warn(
"Gerhard, use the option command");
593 WerrorS(
"write: need at least two arguments");
601 if ((l!=
NULL)&&(l->name!=
NULL)) s=l->name;
603 Werror(
"cannot write to %s",s);
630 Werror(
"can not map from ground field of %s to current ground field",
634 if (
IDELEMS(theMap)<src_ring->N)
638 (src_ring->N)*
sizeof(
poly));
639 for(i=
IDELEMS(theMap);i<src_ring->N;i++)
645 WerrorS(
"argument of a map must have a name");
652 memset(&tmpW,0,
sizeof(
sleftv));
657 save_r=
IDMAP(w)->preimage;
658 IDMAP(w)->preimage=0;
667 ideal
id=(ideal)tmpW.
data;
669 for(
int i=
IDELEMS(
id)-1;i>=0;i--)
675 for(
int j=
IDELEMS(theMap)-1;
j>=0 && !overflow;
j--)
677 if (theMap->m[
j]!=
NULL)
681 for(
int i=
IDELEMS(
id)-1;i>=0;i--)
684 if ((p!=
NULL) && (degs[i]!=0) &&
685 ((
unsigned long)deg_monexp > (
currRing->bitmask / ((
unsigned long)degs[i])/2)))
697 for(
int j=
IDELEMS(theMap)-1;
j>=0 && !overflow;
j--)
699 if (theMap->m[
j]!=
NULL)
705 ((
unsigned long)deg_monexp > (
currRing->bitmask / ((
unsigned long)deg)/2)))
714 Warn(
"possible OVERFLOW in map, max exponent is %ld",
currRing->bitmask/2);
730 char *tmp = theMap->preimage;
731 theMap->preimage=(
char*)1L;
734 theMap->preimage=tmp;
742 if (save_r!=
NULL)
IDMAP(w)->preimage=save_r;
749 IDMAP(w)->preimage=save_r;
757 Werror(
"%s undefined in %s",what,theMap->preimage);
762 Werror(
"cannot find preimage %s",theMap->preimage);
774 char *
s=(
char *)
omAlloc(strlen(name)+5);
778 sprintf(s,
"%s(%d)",name,i+1);
788 Print(
"//defining: %s as %d-th syzygy module\n",s,i+1);
793 Warn(
"cannot define %s",s);
873 int add_row_shift = 0;
876 if (weights!=
NULL) add_row_shift=weights->
min_in();
891 memset(&tmp,0,
sizeof(tmp));
911 memset(&tmp2,0,
sizeof(tmp2));
936 add_row_shift = ww->
min_in();
937 (*weights) -= add_row_shift;
944 res->
data=(
void*)res_im;
947 for(
int i=1;
i<=res_im->
rows();
i++)
949 if (
IMATELEM(*res_im,1,
i)==0) { add_row_shift--; }
954 if (weights!=
NULL)
delete weights;
972 add_row_shift = ww->
min_in();
973 (*weights) -= add_row_shift;
978 if (weights!=
NULL)
delete weights;
981 return reg+1+add_row_shift;
985 #define BREAK_LINE_LENGTH 80 1012 else if(strncmp(s,
"cont;",5)==0)
1019 strcat( s,
"\n;~\n");
1090 res->
m[
i].
data = (
void *)save->set;
1100 for (i=hMu;i<hMu+
hMu2;i++)
1102 res->
m[
i].
data = (
void *)save->set;
1127 const char *
id = name->
name;
1129 memset(sy,0,
sizeof(
sleftv));
1132 WerrorS(
"object to declare is not a name");
1171 if (iiCurrProc!=
NULL)
1176 memset(&tmp,0,
sizeof(
sleftv));
1188 if (ll!=(l-1))
return FALSE;
1190 short *t=(
short*)
omAlloc(l*
sizeof(
short));
1194 for(i=1;i<
l;i++,h=h->
next)
1199 Werror(
"arg %d is not a string",i);
1203 b=
IsCmd((
char *)h->Data(),tt);
1208 Werror(
"arg %d is not a type name",i);
1215 Werror(
"last arg (%d) is not a proc",i);
1220 if (b && (h->rtyp==
IDHDL) && (h->e==
NULL))
1226 if(
pi->data.s.body==
NULL )
1240 if (iiCurrArgs!=
NULL)
1242 if (!err)
Warn(
"too many arguments for %s",
IDID(iiCurrProc));
1253 if (iiCurrArgs==
NULL)
1255 if (strcmp(p->
name,
"#")==0)
1264 if (strcmp(p->
name,
"#")==0)
1266 is_default_list=
TRUE;
1274 if (is_default_list)
1332 if (keepring)
IDRING(h)->ref--;
1344 Warn(
"'%s': no such identifier\n", v->
name);
1347 package frompack=v->req_packhdl;
1362 if (h==frompack->idroot)
1364 frompack->idroot=h->
next;
1368 idhdl hh=frompack->idroot;
1369 while ((hh!=
NULL) && (hh->
next!=h))
1379 h->
next=rootpack->idroot;
1517 WarnS(
"package not found\n");
1550 r->order = (
int *)
omAlloc(3 *
sizeof(
int *));
1551 r->block0 = (
int *)
omAlloc0(3 *
sizeof(
int *));
1552 r->block1 = (
int *)
omAlloc0(3 *
sizeof(
int *));
1571 if (h!=
NULL)
return h;
1573 if (h!=
NULL)
return h;
1580 if (h!=
NULL)
return h;
1588 if (h!=
NULL)
return h;
1607 L->
m[0].
data=(
void *)(
long)r->cf->ch;
1613 for(i=0; i<r->N; i++)
1619 L->
m[1].
data=(
void *)LL;
1636 if (r->block1[i]-r->block0[i] >=0 )
1638 j=r->block1[
i]-r->block0[
i];
1641 if ((r->wvhdl!=
NULL) && (r->wvhdl[i]!=
NULL))
1643 for(;j>=0; j--) (*iv)[
j]=r->wvhdl[
i][
j];
1645 else switch (r->order[i])
1652 for(;j>=0; j--) (*iv)[
j]=1;
1662 LLL->
m[1].
data=(
void *)iv;
1663 LL->
m[
i].
data=(
void *)LLL;
1666 L->
m[2].
data=(
void *)LL;
1676 pSetCoeff0(q->m[0],(number)(r->qideal->m[0]));
1677 L->
m[3].
data=(
void *)q;
1697 L->
m[0].
data=(
void *)0;
1707 L->
m[1].
data=(
void *)LL;
1732 L->
m[0].
data=(
void *)0;
1742 L->
m[1].
data=(
void *)LL;
1777 LL->
m[1].
data=(
void *) C->modExponent;
1779 L->
m[1].
data=(
void *)LL;
1805 LL->
m[0].
data=
nlMapGMP((number) R->cf->modBase, R->cf, R->cf);
1807 LL->
m[1].
data=(
void *) R->cf->modExponent;
1809 L->
m[1].
data=(
void *)LL;
1824 WerrorS(
"ring with polynomial data must be the base ring or compatible");
1837 else if ( C->extRing!=
NULL )
1847 Lc->
m[0].
data=(
void*)(
long)C->m_nfCharQ;
1854 Lc->
m[1].
data=(
void*)Lv;
1865 Loo->
m[1].
data=(
void *)iv;
1868 Lo->
m[0].
data=(
void*)Loo;
1871 Lc->
m[2].
data=(
void*)Lo;
1877 res->
data=(
void*)Lc;
1882 res->
data=(
void *)(
long)C->ch;
1899 || (r->qideal !=
NULL)
1906 WerrorS(
"ring with polynomial data must be the base ring or compatible");
1924 L->
m[0].
data=(
char*)r->cf; r->cf->ref++;
1930 for(i=0; i<r->N; i++)
1933 LL->m[
i].data=(
void *)
omStrDup(r->names[i]);
1936 L->
m[1].
data=(
void *)LL;
1956 assume( r->block0[i] == r->block1[i] );
1957 const int s = r->block0[
i];
1958 assume( -2 < s && s < 2);
1963 else if (r->block1[i]-r->block0[i] >=0 )
1965 int bl=j=r->block1[
i]-r->block0[
i];
1973 j+=r->wvhdl[
i][bl+1];
1976 if ((r->wvhdl!=
NULL) && (r->wvhdl[i]!=
NULL))
1978 for(;j>=0; j--) (*iv)[
j]=r->wvhdl[
i][j+(j>bl)];
1980 else switch (r->order[i])
1987 for(;j>=0; j--) (*iv)[
j]=1;
1997 LLL->
m[1].
data=(
void *)iv;
1998 LL->m[
i].data=(
void *)LLL;
2001 L->
m[2].
data=(
void *)LL;
2005 if (r->qideal==
NULL)
2010 #ifdef HAVE_PLURAL // NC! in rDecompose 2032 || (r->qideal !=
NULL)
2039 WerrorS(
"ring with polynomial data must be the base ring or compatible");
2064 else if ( r->cf->extRing!=
NULL )
2074 Lc->
m[0].
data=(
void*)(
long)r->cf->m_nfCharQ;
2081 Lc->
m[1].
data=(
void*)Lv;
2092 Loo->
m[1].
data=(
void *)iv;
2095 Lo->
m[0].
data=(
void*)Loo;
2098 Lc->
m[2].
data=(
void*)Lo;
2104 L->
m[0].
data=(
void*)Lc;
2109 L->
m[0].
data=(
void *)(
long)r->cf->ch;
2116 for(i=0; i<r->N; i++)
2122 L->
m[1].
data=(
void *)LL;
2142 assume( r->block0[i] == r->block1[i] );
2143 const int s = r->block0[
i];
2144 assume( -2 < s && s < 2);
2149 else if (r->block1[i]-r->block0[i] >=0 )
2151 int bl=j=r->block1[
i]-r->block0[
i];
2159 j+=r->wvhdl[
i][bl+1];
2162 if ((r->wvhdl!=
NULL) && (r->wvhdl[i]!=
NULL))
2164 for(;j>=0; j--) (*iv)[
j]=r->wvhdl[
i][j+(j>bl)];
2166 else switch (r->order[i])
2173 for(;j>=0; j--) (*iv)[
j]=1;
2183 LLL->
m[1].
data=(
void *)iv;
2184 LL->
m[
i].
data=(
void *)LLL;
2187 L->
m[2].
data=(
void *)LL;
2191 if (r->qideal==
NULL)
2196 #ifdef HAVE_PLURAL // NC! in rDecompose 2215 WerrorS(
"invalid coeff. field description, expecting 0");
2223 WerrorS(
"invalid coeff. field description, expecting precision list");
2233 WerrorS(
"invalid coeff. field description list");
2236 int r1=(int)(
long)LL->
m[0].
data;
2237 int r2=(int)(
long)LL->
m[1].
data;
2259 R->cf->float_len=
si_min(r1,32767);
2260 R->cf->float_len2=
si_min(r2,32767);
2269 WerrorS(
"invalid coeff. field description, expecting parameter name");
2285 mpz_ptr modBase =
NULL;
2286 unsigned int modExponent = 1;
2288 modBase = (mpz_ptr)
omAlloc(
sizeof(mpz_t));
2291 mpz_init_set_ui(modBase,0);
2302 number tmp= (number) LL->
m[0].
data;
2308 mpz_init_set_ui(modBase,(
unsigned long) LL->
m[0].
data);
2312 mpz_init_set_ui(modBase,0);
2316 modExponent = (
unsigned long) LL->
m[1].
data;
2324 if ((mpz_cmp_ui(modBase, 1) == 0) && (mpz_cmp_ui(modBase, 0) < 0))
2326 WerrorS(
"Wrong ground ring specification (module is 1)");
2329 if (modExponent < 1)
2331 WerrorS(
"Wrong ground ring specification (exponent smaller than 1)");
2335 if (mpz_cmp_ui(modBase, 0) == 0)
2340 else if (modExponent > 1)
2343 if ((mpz_cmp_ui(modBase, 2) == 0) && (modExponent <= 8*
sizeof(
unsigned long)))
2355 info.
exp= modExponent;
2366 info.
exp= modExponent;
2379 for(i=0;i<R->N-1;i++)
2381 for(j=i+1;j<R->N;j++)
2383 if (strcmp(R->names[i],R->names[j])==0)
2386 Warn(
"name conflict var(%d) and var(%d): `%s`, rename to `@%s`",i+1,j+1,R->names[i],R->names[i]);
2388 R->names[
j]=(
char *)
omAlloc(2+strlen(R->names[i]));
2389 sprintf(R->names[j],
"@%s",R->names[i]);
2395 for(i=0;i<
rPar(R); i++)
2401 Warn(
"name conflict par(%d) and var(%d): `%s`, renaming the VARIABLE to `@@(%d)`",i+1,j+1,R->names[j],i+1);
2407 sprintf(R->names[j],
"@@(%d)",i+1);
2439 Werror(
"var name %d must be a string or a ring variable",i+1);
2445 Werror(
"var name %d must be `string`",i+1);
2452 WerrorS(
"variable must be given as `list`");
2468 for (
int j=0;
j < n-1;
j++)
2475 &&(strcmp((
char*)vv->
m[0].
Data(),
"L")==0))
2477 number nn=(number)vv->
m[1].
Data();
2484 Werror(
"illegal argument for pseudo ordering L: %d",vv->
m[1].
Typ());
2491 if (bitmask!=0) n--;
2494 R->order=(
int *)
omAlloc0(n*
sizeof(
int));
2495 R->block0=(
int *)
omAlloc0(n*
sizeof(
int));
2496 R->block1=(
int *)
omAlloc0(n*
sizeof(
int));
2499 for (j_in_R= n-2; j_in_R>=0; j_in_R--)
2502 for(j_in_R=0,j_in_L=0;j_in_R<n-1;j_in_R++,j_in_L++)
2507 WerrorS(
"ordering must be list of lists");
2514 if (strcmp((
char*)vv->
m[0].
Data(),
"L")==0)
2522 WerrorS(
"ordering name must be a (string,intvec)(1)");
2527 if (j_in_R==0) R->block0[0]=1;
2544 if (jj<0) R->block0[j_in_R]=1;
2545 else R->block0[j_in_R]=R->block1[jj]+1;
2553 R->block1[j_in_R]=
si_max(R->block0[j_in_R],R->block0[j_in_R]+iv_len-1);
2554 if (R->block1[j_in_R]>R->N)
2556 R->block1[j_in_R]=R->N;
2557 iv_len=R->block1[j_in_R]-R->block0[j_in_R]+1;
2561 switch (R->order[j_in_R])
2570 R->wvhdl[j_in_R] =(
int *)
omAlloc(iv_len*
sizeof(
int));
2571 for (i=0; i<iv_len;i++)
2573 R->wvhdl[j_in_R][
i]=(*iv)[
i];
2577 R->wvhdl[j_in_R] =(
int *)
omAlloc((iv->
length()+1)*
sizeof(
int));
2578 for (i=0; i<iv_len;i++)
2580 R->wvhdl[j_in_R][
i]=(*iv)[
i];
2582 R->wvhdl[j_in_R][
i]=iv->
length() - iv_len;
2584 for (; i<iv->
length(); i++)
2586 R->wvhdl[j_in_R][i+1]=(*iv)[
i];
2590 R->wvhdl[j_in_R] =(
int *)
omAlloc((iv->
length())*
sizeof(
int));
2591 for (i=0; i<iv->
length();i++) R->wvhdl[j_in_R][i]=(*iv)[
i];
2592 R->block1[j_in_R]=
si_max(R->block0[j_in_R],R->block0[j_in_R]+(
int)
sqrt((
double)(iv->
length()-1)));
2593 if (R->block1[j_in_R]>R->N)
2595 WerrorS(
"ordering matrix too big");
2613 R->block1[j_in_R]=R->block0[j_in_R]=0;
2621 R->block1[j_in_R] = R->block0[j_in_R] = 0;
2624 const int s = (*iv)[0];
2625 assume( -2 < s && s < 2 );
2626 R->block1[j_in_R] = R->block0[j_in_R] =
s;
2639 WerrorS(
"ordering name must be a (string,intvec)");
2648 if (R->block1[j_in_R] != R->N)
2659 R->block0[j_in_R] <= R->N)
2661 R->block1[j_in_R] = R->N;
2665 Werror(
"ordering incomplete: size (%d) should be %d",R->block1[j_in_R],R->N);
2669 if (R->block0[j_in_R]>R->N)
2671 Werror(
"not enough variables (%d) for ordering block %d, scanned so far:",R->N,j_in_R+1);
2672 for(
int ii=0;ii<=j_in_R;ii++)
2673 Werror(
"ord[%d]: %s from v%d to v%d",ii+1,
rSimpleOrdStr(R->order[ii]),R->block0[ii],R->block1[ii]);
2687 R->order=(
int*)
omRealloc0Size(R->order,n*
sizeof(
int),(n+1)*
sizeof(
int));
2688 R->block0=(
int*)
omRealloc0Size(R->block0,n*
sizeof(
int),(n+1)*
sizeof(
int));
2689 R->block1=(
int*)
omRealloc0Size(R->block1,n*
sizeof(
int),(n+1)*
sizeof(
int));
2701 WerrorS(
"ordering must be given as `list`");
2704 if (bitmask!=0) R->bitmask=bitmask*2;
2739 int ch = (int)(
long)L->
m[0].
Data();
2749 Warn(
"%d is invalid characteristic of ground field. %d is used.", ch, l);
2772 int ch = (int)(
long)LL->
m[0].
Data();
2773 while ((ch!=
fftable[is_gf_char]) && (
fftable[is_gf_char])) is_gf_char++;
2774 if (
fftable[is_gf_char]==0) is_gf_char=-1;
2795 WerrorS(
"could not create the specified coefficient field");
2799 if( extRing->qideal !=
NULL )
2803 extParam.
r = extRing;
2810 extParam.
r = extRing;
2820 WerrorS(
"coefficient field must be described by `int` or `list`");
2826 WerrorS(
"could not create coefficient field described by the input!");
2844 ideal q=(ideal)L->
m[3].
Data();
2850 WerrorS(
"coefficient fields must be equal if q-ideal !=0");
2857 int par_perm_size=0;
2876 par_perm_size=
rPar(orig_ring);
2886 WerrorS(
"coefficient fields must be equal if q-ideal !=0");
2890 perm=(
int *)
omAlloc0((orig_ring->N+1)*
sizeof(int));
2891 if (par_perm_size!=0)
2892 par_perm=(
int *)
omAlloc0(par_perm_size*
sizeof(
int));
2896 maFindPerm(orig_ring->names,orig_ring->N,orig_ring->parameter,orig_ring->P,
2905 else if (par_perm_size!=0)
2910 for(i=
IDELEMS(q)-1; i>=0; i--)
2913 par_perm,par_perm_size);
2915 pTest(dest_id->m[i]);
2931 WerrorS(
"q-ideal must be given as `ideal`");
2959 while (i>=0) {
if (R->names[i]!=
NULL)
omFree(R->names[i]); i--; }
2980 ideal
id=(ideal)a->
Data();
2983 for (i=1; i<=
IDELEMS(
id); i++)
2990 res->
data=(
char *)result;
3000 int n=(int)(
long)b->
Data();
3001 int d=(int)(
long)c->
Data();
3008 if ((d>n) || (d<1) || (n<1))
3013 int *choise = (
int*)
omAlloc(d*
sizeof(
int));
3017 temp=(ideal)id->
Data();
3030 if (choise[l-1]<=
IDELEMS(temp))
3032 p =
pCopy(temp->m[choise[l-1]-1]);
3033 if (sign == -1) p =
pNeg(p);
3044 res->
data=(
char *)result;
3059 int add_row_shift=0;
3065 add_row_shift = ww->
min_in();
3066 (*weights) -= add_row_shift;
3079 memset(&tmp,0,
sizeof(tmp));
3093 const int length = syzstr->
length;
3095 if ((fullres==
NULL) && (minres==
NULL))
3121 for (
int i=(length)-1;
i>=0;
i--)
3133 for (
int i=length-1;
i>=0;
i--)
3208 ideal F=(ideal)id->
Data();
3214 res->
data=(
char *)iv;
3218 double wNsqr = (double)2.0 / (
double)n;
3220 x = (
int * )
omAlloc(2 * (n + 1) *
sizeof(int));
3222 for (i = n; i!=0; i--)
3223 (*iv)[i-1] = x[i + n + 1];
3241 res->
data=(
void *)b;
3259 #ifdef HAVE_SPECTRUM 3267 spec.
mu = (int)(
long)(l->
m[0].
Data( ));
3268 spec.
pg = (int)(
long)(l->
m[1].
Data( ));
3269 spec.
n = (int)(
long)(l->
m[2].
Data( ));
3277 for(
int i=0;
i<spec.
n;
i++ )
3280 spec.
w[
i] = (*mul)[
i];
3311 for(
int i=0;
i<spec.
n;
i++ )
3315 (*mult)[
i] = spec.
w[
i];
3325 L->
m[0].
data = (
void*)(
long)spec.
mu;
3326 L->
m[1].
data = (
void*)(
long)spec.
pg;
3327 L->
m[2].
data = (
void*)(
long)spec.
n;
3328 L->
m[3].
data = (
void*)num;
3329 L->
m[4].
data = (
void*)den;
3330 L->
m[5].
data = (
void*)mult;
3378 WerrorS(
"the list is too short" );
3381 WerrorS(
"the list is too long" );
3385 WerrorS(
"first element of the list should be int" );
3388 WerrorS(
"second element of the list should be int" );
3391 WerrorS(
"third element of the list should be int" );
3394 WerrorS(
"fourth element of the list should be intvec" );
3397 WerrorS(
"fifth element of the list should be intvec" );
3400 WerrorS(
"sixth element of the list should be intvec" );
3404 WerrorS(
"first element of the list should be positive" );
3407 WerrorS(
"wrong number of numerators" );
3410 WerrorS(
"wrong number of denominators" );
3413 WerrorS(
"wrong number of multiplicities" );
3417 WerrorS(
"the Milnor number should be positive" );
3420 WerrorS(
"the geometrical genus should be nonnegative" );
3423 WerrorS(
"all numerators should be positive" );
3426 WerrorS(
"all denominators should be positive" );
3429 WerrorS(
"all multiplicities should be positive" );
3433 WerrorS(
"it is not symmetric" );
3436 WerrorS(
"it is not monotonous" );
3440 WerrorS(
"the Milnor number is wrong" );
3443 WerrorS(
"the geometrical genus is wrong" );
3447 WerrorS(
"unspecific error" );
3483 ( fast==2 ? 2 : 1 ) );
3493 ( fast==0 || (*node)->weight<=smax ) )
3515 cmp =
pCmp( (*node)->mon,f );
3538 (*node)->nf = search->
nf;
3542 while( cmp<0 && f!=(
poly)NULL );
3544 search = search->
next;
3555 if( (*node)->weight<=(
Rational)1 ) pg++;
3556 if( (*node)->weight==smax ) z++;
3557 if( (*node)->weight>weight_prev ) n++;
3559 weight_prev = (*node)->weight;
3560 node = &((*node)->next);
3582 cmp =
pCmp( (*node)->mon,f );
3597 search = search->
next;
3611 n = ( z > 0 ? 2*n - 1 : 2*n );
3626 ( fast==0 || search->
weight<=smax );
3627 search=search->
next )
3652 for( n1=0, n2=n-1; n1<n2; n1++, n2-- )
3655 (*den) [n2] = (*den)[n1];
3656 (*mult)[n2] = (*mult)[n1];
3664 if( fast==0 || fast==1 )
3668 for(
int n1=0, n2=n-1 ; n1<n2 && symmetric==
TRUE; n1++, n2-- )
3670 if( (*mult)[n1]!=(*mult)[n2] ||
3671 (*den) [n1]!= (*den)[n2] ||
3678 if( symmetric==
FALSE )
3688 (*L)->m[0].data = (
void*)(
long)
mu;
3705 (*L)->m[0].data = (
void*)(
long)
mu;
3706 (*L)->m[1].data = (
void*)(
long)pg;
3707 (*L)->m[2].data = (
void*)(
long)n;
3708 (*L)->m[3].data = (
void*)nom;
3709 (*L)->m[4].data = (
void*)den;
3710 (*L)->m[5].data = (
void*)mult;
3719 #ifdef SPECTRUM_DEBUG 3720 #ifdef SPECTRUM_PRINT 3721 #ifdef SPECTRUM_IOSTREAM 3722 cout <<
"spectrumCompute\n";
3723 if( fast==0 ) cout <<
" no optimization" << endl;
3724 if( fast==1 ) cout <<
" weight optimization" << endl;
3725 if( fast==2 ) cout <<
" symmetry optimization" << endl;
3727 fprintf( stdout,
"spectrumCompute\n" );
3728 if( fast==0 ) fprintf( stdout,
" no optimization\n" );
3729 if( fast==1 ) fprintf( stdout,
" weight optimization\n" );
3730 if( fast==2 ) fprintf( stdout,
" symmetry optimization\n" );
3774 #ifdef SPECTRUM_DEBUG 3775 #ifdef SPECTRUM_PRINT 3776 #ifdef SPECTRUM_IOSTREAM 3777 cout <<
"\n computing the Jacobi ideal...\n";
3779 fprintf( stdout,
"\n computing the Jacobi ideal...\n" );
3788 #ifdef SPECTRUM_DEBUG 3789 #ifdef SPECTRUM_PRINT 3790 #ifdef SPECTRUM_IOSTREAM 3793 fprintf( stdout,
" " );
3804 #ifdef SPECTRUM_DEBUG 3805 #ifdef SPECTRUM_PRINT 3806 #ifdef SPECTRUM_IOSTREAM 3808 cout <<
" computing a standard basis..." << endl;
3810 fprintf( stdout,
"\n" );
3811 fprintf( stdout,
" computing a standard basis...\n" );
3819 #ifdef SPECTRUM_DEBUG 3820 #ifdef SPECTRUM_PRINT 3821 for( i=0; i<
IDELEMS(stdJ); i++ )
3823 #ifdef SPECTRUM_IOSTREAM 3826 fprintf( stdout,
" " );
3871 #ifdef SPECTRUM_DEBUG 3872 #ifdef SPECTRUM_PRINT 3873 #ifdef SPECTRUM_IOSTREAM 3874 cout <<
"\n computing the highest corner...\n";
3876 fprintf( stdout,
"\n computing the highest corner...\n" );
3885 if( hc!=(
poly)NULL )
3900 #ifdef SPECTRUM_DEBUG 3901 #ifdef SPECTRUM_PRINT 3902 #ifdef SPECTRUM_IOSTREAM 3905 fprintf( stdout,
" " );
3915 #ifdef SPECTRUM_DEBUG 3916 #ifdef SPECTRUM_PRINT 3917 #ifdef SPECTRUM_IOSTREAM 3918 cout <<
"\n computing the newton polygon...\n";
3920 fprintf( stdout,
"\n computing the newton polygon...\n" );
3927 #ifdef SPECTRUM_DEBUG 3928 #ifdef SPECTRUM_PRINT 3937 #ifdef SPECTRUM_DEBUG 3938 #ifdef SPECTRUM_PRINT 3939 #ifdef SPECTRUM_IOSTREAM 3940 cout <<
"\n computing the weight corner...\n";
3942 fprintf( stdout,
"\n computing the weight corner...\n" );
3952 #ifdef SPECTRUM_DEBUG 3953 #ifdef SPECTRUM_PRINT 3954 #ifdef SPECTRUM_IOSTREAM 3957 fprintf( stdout,
" " );
3967 #ifdef SPECTRUM_DEBUG 3968 #ifdef SPECTRUM_PRINT 3969 #ifdef SPECTRUM_IOSTREAM 3970 cout <<
"\n computing NF...\n" << endl;
3972 fprintf( stdout,
"\n computing NF...\n" );
3981 #ifdef SPECTRUM_DEBUG 3982 #ifdef SPECTRUM_PRINT 3984 #ifdef SPECTRUM_IOSTREAM 3987 fprintf( stdout,
"\n" );
4012 WerrorS(
"polynomial is zero" );
4015 WerrorS(
"polynomial has constant term" );
4018 WerrorS(
"not a singularity" );
4021 WerrorS(
"the singularity is not isolated" );
4024 WerrorS(
"highest corner cannot be computed" );
4027 WerrorS(
"principal part is degenerate" );
4033 WerrorS(
"unknown error occurred" );
4050 WerrorS(
"only works for local orderings" );
4058 WerrorS(
"does not work in quotient rings" );
4071 result->
data = (
char*)L;
4104 WerrorS(
"only works for local orderings" );
4109 WerrorS(
"does not work in quotient rings" );
4122 result->
data = (
char*)L;
4168 else if( l->
nr > 5 )
4206 int mu = (int)(
long)(l->
m[0].
Data( ));
4207 int pg = (int)(
long)(l->
m[1].
Data( ));
4208 int n = (int)(
long)(l->
m[2].
Data( ));
4219 if( n != num->
length( ) )
4223 else if( n != den->
length( ) )
4227 else if( n != mul->
length( ) )
4247 for( i=0; i<n; i++ )
4249 if( (*num)[
i] <= 0 )
4253 if( (*den)[
i] <= 0 )
4257 if( (*mul)[
i] <= 0 )
4269 for( i=0, j=n-1; i<=
j; i++,j-- )
4272 (*den)[
i] != (*den)[
j] ||
4273 (*mul)[
i] != (*mul)[
j] )
4283 for( i=0, j=1; i<n/2; i++,j++ )
4285 if( (*num)[
i]*(*den)[
j] >= (*num)[
j]*(*den)[
i] )
4295 for( mu=0, i=0; i<n; i++ )
4300 if( mu != (
int)(long)(l->
m[0].
Data( )) )
4309 for( pg=0, i=0; i<n; i++ )
4311 if( (*num)[
i]<=(*den)[
i] )
4317 if( pg != (
int)(long)(l->
m[1].
Data( )) )
4346 WerrorS(
"first argument is not a spectrum:" );
4351 WerrorS(
"second argument is not a spectrum:" );
4384 int k = (int)(
long)second->
Data( );
4388 WerrorS(
"first argument is not a spectrum" );
4393 WerrorS(
"second argument should be positive" );
4430 WerrorS(
"first argument is not a spectrum" );
4435 WerrorS(
"second argument is not a spectrum" );
4459 memset(&tmp,0,
sizeof(tmp));
4478 WerrorS(
"Ground field not implemented!");
4498 LP->
m= (int)(
long)(v->
Data());
4504 LP->
n= (int)(
long)(v->
Data());
4510 LP->
m1= (int)(
long)(v->
Data());
4516 LP->
m2= (int)(
long)(v->
Data());
4522 LP->
m3= (int)(
long)(v->
Data());
4524 #ifdef mprDEBUG_PROT 4525 Print(
"m (constraints) %d\n",LP->
m);
4526 Print(
"n (columns) %d\n",LP->
n);
4550 lres->
m[4].
data=(
void*)(
long)LP->
m;
4553 lres->
m[5].
data=(
void*)(
long)LP->
n;
4555 res->
data= (
void*)lres;
4562 ideal gls = (ideal)(arg1->
Data());
4563 int imtype= (int)(
long)arg2->
Data();
4588 int howclean= (int)(
long)arg3->
Data();
4595 WerrorS(
"Ground field not implemented!");
4602 unsigned long int ii = (
unsigned long int)arg2->
Data();
4608 WerrorS(
"Input polynomial is constant!");
4634 if ( (vpos != i) && (
pGetExp( piter, i ) != 0) )
4636 WerrorS(
"The input polynomial must be univariate!");
4644 number * pcoeffs= (number *)
omAlloc( (deg+1) *
sizeof( number ) );
4646 for ( i= deg; i >= 0; i-- )
4660 #ifdef mprDEBUG_PROT 4661 for (i=deg; i >= 0; i--)
4669 roots->
solver( howclean );
4676 rlist->
Init( elem );
4680 for ( j= 0; j < elem; j++ )
4689 for ( j= 0; j < elem; j++ )
4693 rlist->
m[
j].
data=(
void *)dummy;
4707 res->
data= (
void*)rlist;
4716 p= (ideal)arg1->
Data();
4717 w= (ideal)arg2->
Data();
4728 int tdg= (int)(
long)arg3->
Data();
4735 WerrorS(
"Last input parameter must be > 0!");
4743 if ( m != (
int)
pow((
double)tdg+1,(
double)n) )
4745 Werror(
"Size of second input ideal must be equal to %d!",
4746 (
int)
pow((
double)tdg+1,(
double)n));
4753 WerrorS(
"Ground field not implemented!");
4758 number *pevpoint= (number *)
omAlloc( n *
sizeof( number ) );
4759 for ( i= 0; i < n; i++ )
4768 WerrorS(
"Elements of first input ideal must not be equal to -1, 0, 1!");
4777 WerrorS(
"Elements of first input ideal must be numbers!");
4780 pevpoint[
i]=
nCopy( tmp );
4784 number *wresults= (number *)
omAlloc( m *
sizeof( number ) );
4785 for ( i= 0; i <
m; i++ )
4794 WerrorS(
"Elements of second input ideal must be numbers!");
4809 res->
data= (
void*)rpoly;
4824 else gls= (ideal)(v->
Data());
4830 else imtype= (int)(
long)v->
Data();
4835 ideal test_id=
idInit(1,1);
4837 for(j=
IDELEMS(gls)-1;j>=0;j--)
4839 if (gls->m[j]!=
NULL)
4841 test_id->m[0]=gls->m[
j];
4845 WerrorS(
"Newton polytope not of expected dimension");
4859 unsigned long int ii=(
unsigned long int)v->
Data();
4867 else howclean= (int)(
long)v->
Data();
4896 WerrorS(
"Error occurred during matrix setup!");
4904 #ifdef mprDEBUG_PROT 4909 WerrorS(
"Unsuitable input ideal: Minor of resultant matrix is singular!");
4915 if ( interpolate_det )
4921 if ( interpolate_det )
4926 #ifdef mprDEBUG_PROT 4928 for (i=0; i < c; i++)
pWrite(iproots[i]->getPoly());
4930 for (i=0; i < c; i++)
pWrite(muiproots[i]->getPoly());
4934 arranger=
new rootArranger( iproots, muiproots, howclean );
4945 WerrorS(
"Solver was unable to find any roots!");
4951 for (i=0; i <
count; i++)
delete iproots[i];
4954 for (i=0; i <
count; i++)
delete muiproots[i];
4961 res->
data= (
void *)listofroots;
4973 int count=
self->roots[0]->getAnzRoots();
4974 int elem=
self->roots[0]->getAnzElems();
4978 if ( self->found_roots )
4980 listofroots->
Init( count );
4982 for (i=0; i <
count; i++)
4985 onepoint->
Init(elem);
4986 for ( j= 0; j < elem; j++ )
5002 listofroots->
m[
i].
data=(
void *)onepoint;
5010 listofroots->
Init( 0 );
5024 if (rg==
NULL)
return;
5044 Warn(
"deleting denom_list for ring change to %s",
IDID(h));
5056 if ((rg!=
NULL) && (rg->idroot==
NULL))
5084 if((*iv)[
i]>=0) { neg=
FALSE;
break; }
5089 (*iv)[
i]= - (*iv)[
i];
5098 if((*iv)[
i]>=0) { neg=
FALSE;
break; }
5103 (*iv)[
i]= -(*iv)[
i];
5112 if((*iv)[
i]!=1) { all_one=
FALSE;
break; }
5118 (*iv2)[2]=iv->
length()-2;
5130 if((*iv)[
i]!=1) { all_one=
FALSE;
break; }
5136 (*iv2)[2]=iv->
length()-2;
5170 (*iv)[2] += (*iv2)[2];
5177 if (!change) h=h->
next;
5185 int last = 0, o=0, n = 1,
i=0, typ = 1,
j;
5197 R->bitmask=(*iv)[2];
5210 WerrorS(
"invalid combination of orderings");
5218 WerrorS(
"more than one ordering c/C specified");
5223 R->order=(
int *)
omAlloc0(n*
sizeof(
int));
5224 R->block0=(
int *)
omAlloc0(n*
sizeof(
int));
5225 R->block1=(
int *)
omAlloc0(n*
sizeof(
int));
5228 int *weights=(
int*)
omAlloc0((R->N+1)*
sizeof(int));
5231 for (
j=0;
j < n-1;
j++)
5252 R->order[n] = (*iv)[1];
5262 R->block0[n] = last+1;
5265 R->wvhdl[n][
i-2] = (*iv)[
i];
5267 if (weights[last]==0) weights[
last]=(*iv)[
i]*typ;
5269 R->block1[n] =
si_min(last,R->N);
5280 R->block0[n] = last+1;
5281 if (iv->
length() == 3) last+=(*iv)[2];
5282 else last += (*iv)[0];
5283 R->block1[n] =
si_min(last,R->N);
5287 if (weights[
i]==0) weights[
i]=typ;
5299 const int s = (*iv)[2];
5309 const int s = (*iv)[2];
5311 if( 1 < s || s < -1 )
return TRUE;
5327 R->block0[n] = last+1;
5332 R->wvhdl[n][
i-2]=(*iv)[
i];
5334 if (weights[last]==0) weights[
last]=(*iv)[
i]*typ;
5336 last=R->block0[n]-1;
5341 R->block0[n] = last+1;
5344 if (R->block1[n]- R->block0[n]+2>=iv->
length())
5345 WarnS(
"missing module weights");
5346 for (
i=2;
i<=(R->block1[n]-R->block0[n]+2);
i++)
5348 R->wvhdl[n][
i-2]=(*iv)[
i];
5350 if (weights[last]==0) weights[
last]=(*iv)[
i]*typ;
5352 R->wvhdl[n][
i-2]=iv->
length() -3 -(R->block1[n]- R->block0[n]);
5355 R->wvhdl[n][
i-1]=(*iv)[
i];
5357 last=R->block0[n]-1;
5362 R->block0[n] = last+1;
5370 if (weights[last]==0) weights[
last]=(*iv)[
i]*typ;
5372 last=R->block0[n]-1;
5378 if (Mtyp==0)
return TRUE;
5379 if (Mtyp==-1) typ = -1;
5383 R->wvhdl[n][
i-2]=(*iv)[
i];
5385 R->block0[n] = last+1;
5387 R->block1[n] =
si_min(last,R->N);
5388 for(
i=R->block1[n];
i>=R->block0[n];
i--)
5390 if (weights[
i]==0) weights[
i]=typ;
5400 Werror(
"Internal Error: Unknown ordering %d", (*iv)[1]);
5407 Werror(
"mismatch of number of vars (%d) and ordering (>=%d vars)",
5415 for(
i=1;
i<=R->N;
i++)
5416 {
if (weights[
i]<0) { R->OrdSgn=-1;
break; }}
5430 if (R->block1[n] != R->N)
5441 R->block0[n] <= R->N)
5443 R->block1[n] = R->N;
5447 Werror(
"mismatch of number of vars (%d) and ordering (%d vars)",
5466 *p = (
char*)sl->
name;
5507 mpz_ptr modBase =
NULL;
5508 unsigned int modExponent = 1;
5540 WerrorS(
"parameter expected");
5546 extParam.
r =
rDefault( cf, pars, names);
5547 for(
int i=pars-1;
i>=0;
i--)
5561 int ch = (int)(
long)pn->
Data();
5572 if ((ch<2)||(ch!=ch2))
5574 Warn(
"%d is invalid as characteristic of the ground field. 32003 is used.", ch);
5589 if ((ch!=0) && (ch!=
IsPrime(ch)) && (pars == 1))
5601 if ((ch!=0) && (ch!=
IsPrime(ch)))
5603 WerrorS(
"too many parameters");
5611 WerrorS(
"parameter expected");
5617 extParam.
r =
rDefault( ch, pars, names);
5618 for(
int i=pars-1;
i>=0;
i--)
5631 && ((strcmp(pn->
name,
"real")==0) || (strcmp(pn->
name,
"complex")==0)))
5634 BOOLEAN complex_flag=(strcmp(pn->
name,
"complex")==0);
5637 float_len=(int)(
long)pnn->
Data();
5638 float_len2=float_len;
5642 float_len2=(int)(
long)pnn->
Data();
5661 if (param.
float_len < SHORT_REAL_LENGTH)
5677 else if ((pn->
name !=
NULL) && (strcmp(pn->
name,
"integer") == 0))
5680 modBase = (mpz_ptr)
omAlloc(
sizeof(mpz_t));
5681 mpz_init_set_si(modBase, 0);
5688 mpz_set_ui(modBase, (
int)(
long) pnn->
Data());
5692 modExponent = (long) pnn->
Data();
5697 mpz_mul_ui(modBase, modBase, (
int)(
long) pnn->
Data());
5710 if ((mpz_cmp_ui(modBase, 1) == 0) && (mpz_cmp_ui(modBase, 0) < 0))
5712 WerrorS(
"Wrong ground ring specification (module is 1)");
5715 if (modExponent < 1)
5717 WerrorS(
"Wrong ground ring specification (exponent smaller than 1");
5722 if (modExponent > 1 && cf ==
NULL)
5724 if ((mpz_cmp_ui(modBase, 2) == 0) && (modExponent <= 8*
sizeof(
unsigned long)))
5735 if (mpz_cmp_ui(modBase,0)==0)
5737 WerrorS(
"modulus must not be 0 or parameter not allowed");
5743 info.
exp= modExponent;
5748 else if (cf ==
NULL)
5750 if (mpz_cmp_ui(modBase,0)==0)
5752 WerrorS(
"modulus must not be 0 or parameter not allowed");
5758 info.
exp= modExponent;
5768 extParam.
r = (ring)pn->
Data();
5780 WerrorS(
"Wrong or unknown ground field specification");
5808 WerrorS(
"Invalid ground field specification");
5824 Werror(
"too many ring variables(%d), max is %d",l,MAX_SHORT);
5832 WerrorS(
"name of ring variable expected");
5885 int *
perm=(
int *)
omAlloc0((org_ring->N+1)*
sizeof(int));
5893 Werror(
"too many ring variables(%d), max is %d",l,MAX_SHORT);
5902 WerrorS(
"name of ring variable expected");
5912 for(;
i<org_ring->N;
i++)
5914 if (strcmp(org_ring->names[
i],R->names[
j])==0)
5922 Werror(
"variable %d (%s) not in basering",
j+1,R->names[
j]);
5935 for(
j=R->block0[
i];j<=R->block1[
i];
j++)
5939 if (min_var==-1) min_var=perm[
j];
5947 R->block0[
i]=min_var;
5948 R->block1[
i]=max_var;
5949 if (R->wvhdl[
i]!=
NULL)
5952 R->wvhdl[
i]=(
int*)
omAlloc0((max_var-min_var+1)*
sizeof(int));
5953 for(
j=org_ring->block0[
i];j<=org_ring->block1[
i];
j++)
5957 R->wvhdl[
i][perm[
j]-R->block0[
i]]=
5958 org_ring->wvhdl[
i][
j-org_ring->block0[
i]];
5984 R->order[
j-1]=R->order[
j];
5985 R->block0[
j-1]=R->block0[
j];
5986 R->block1[
j-1]=R->block1[
j];
5988 R->wvhdl[
j-1]=R->wvhdl[
j];
5996 while (R->order[n]==0) n--;
5999 if (R->block1[n] != R->N)
6010 R->block0[n] <= R->N)
6012 R->block1[n] = R->N;
6016 Werror(
"mismatch of number of vars (%d) and ordering (%d vars) in block %d",
6017 R->N,R->block1[n],n);
6023 R->OrdSgn = org_ring->OrdSgn;
6046 if ((r->ref<=0)&&(r->order!=
NULL))
6051 if (r->qideal!=
NULL)
6061 if (j==0)
WarnS(
"killing the basering for level 0");
6066 while (r->idroot!=
NULL)
6069 killhdl2(r->idroot,&(r->idroot),r);
6164 resid=(ideal)(res.
data);
6217 ideal I=(ideal)u->
Data();
6220 for(i=I->nrows*I->ncols-1;i>=0;i--)
6232 switch (p->language)
6240 if(p->libname!=
NULL)
6241 Print(
",%s", p->libname);
6254 memset(&tmp_in,0,
sizeof(tmp_in));
6256 tmp_in.
data=(
void*)(
long)(*aa)[
i];
6260 bo=
jjPROC(&tmp_out,proc,&tmp_in);
6264 Werror(
"apply fails at index %d",
i+1);
6267 if (
i==0) { memcpy(res,&tmp_out,
sizeof(tmp_out)); }
6272 memcpy(curr,&tmp_out,
sizeof(tmp_out));
6294 for(
int i=0;
i<=aa->
nr;
i++)
6296 memset(&tmp_in,0,
sizeof(tmp_in));
6297 tmp_in.
Copy(&(aa->
m[
i]));
6301 bo=
jjPROC(&tmp_out,proc,&tmp_in);
6306 Werror(
"apply fails at index %d",
i+1);
6309 if (
i==0) { memcpy(res,&tmp_out,
sizeof(tmp_out)); }
6314 memcpy(curr,&tmp_out,
sizeof(tmp_out));
6321 memset(res,0,
sizeof(
sleftv));
6337 WerrorS(
"first argument to `apply` must allow an index");
6347 char assume_yylinebuf[80];
6349 int lev=(long)a->
Data();
6356 if (bo) {
WerrorS(
"syntax error in ASSUME");
return TRUE;}
6370 char *ss=(
char*)
omAlloc(strlen(a)+strlen(s)+30);
6372 int end_s=strlen(s);
6373 while ((end_s>0) && ((s[end_s]<=
' ')||(s[end_s]==
';'))) end_s--;
6375 char *
name=(
char *)
omAlloc(strlen(a)+strlen(s)+30);
6376 sprintf(name,
"%s->%s",a,s);
6378 int start_s=end_s-1;
6379 while ((start_s>=0) && (s[start_s]!=
';')) start_s--;
6382 sprintf(ss,
"parameter def %s;return(%s);\n",a,s);
6387 sprintf(ss,
"parameter def %s;%s;return(%s);\n",a,s,s+start_s+1);
6389 memset(r,0,
sizeof(*r));
6409 memset(&tmp,0,
sizeof(tmp));
6428 memset(&n,0,
sizeof(n));
6447 sprintf(buf,
"wrong length of parameters(%d), expected ",t);
6449 sprintf(buf,
"par. %d is of type `%s`, expected ",nr,
Tok2Cmdname(t));
6450 for(
int i=1;
i<=T[0];
i++)
6455 if (i<T[0]) strcat(buf,
",");
6464 if (type_list[0]==0)
return TRUE;
6467 if (report)
WerrorS(
"no arguments expected");
6472 if (l!=(
int)type_list[0])
6477 for(
int i=1;
i<=
l;
i++,args=args->
next)
6479 short t=type_list[
i];
6483 || (t!=args->Typ()))
int status int void size_t count
BOOLEAN jjCHARSERIES(leftv res, leftv u)
for idElimination, like a, except pFDeg, pWeigths ignore it
CanonicalForm map(const CanonicalForm &primElem, const Variable &alpha, const CanonicalForm &F, const Variable &beta)
map from to such that is mapped onto
complex root finder for univariate polynomials based on laguers algorithm
#define omRealloc0Size(addr, o_size, size)
static FORCE_INLINE char const ** n_ParameterNames(const coeffs r)
Returns a (const!) pointer to (const char*) names of parameters.
#define idMaxIdeal(D)
initialise the maximal ideal (at 0)
const CanonicalForm int s
int iiTestConvert(int inputType, int outputType)
char *(* fe_fgets_stdin)(const char *pr, char *s, int size)
unsigned char * proc[NUM_PROC]
#define omCheckAddrSize(addr, size)
void atSet(idhdl root, const char *name, void *data, int typ)
Class used for (list of) interpreter objects.
void hDimSolve(scmon pure, int Npure, scfmon rad, int Nrad, varset var, int Nvar)
static FORCE_INLINE BOOLEAN nCoeff_is_numeric(const coeffs r)
resolvente syReorder(resolvente res, int length, syStrategy syzstr, BOOLEAN toCopy=TRUE, resolvente totake=NULL)
number * interpolateDense(const number *q)
Solves the Vandermode linear system {i=1}^{n} x_i^k-1 w_i = q_k, k=1,..,n.
matrix mapToMatrix(matrix m)
ring rSubring(ring org_ring, sleftv *rv)
Base class for solving 0-dim poly systems using u-resultant.
only used if HAVE_RINGS is defined
void mu(int **points, int sizePoints)
void hIndAllMult(scmon pure, int Npure, scfmon rad, int Nrad, varset var, int Nvar)
#define SHORT_REAL_LENGTH
vandermonde system solver for interpolating polynomials from their values
resolvente liFindRes(lists L, int *len, int *typ0, intvec ***weights)
#define idDelete(H)
delete an ideal
static BOOLEAN rField_is_Zp_a(const ring r)
static BOOLEAN rSleftvList2StringArray(leftv sl, char **p)
static BOOLEAN rComposeVar(const lists L, ring R)
procinfo * iiInitSingularProcinfo(procinfov pi, const char *libname, const char *procname, int line, long pos, BOOLEAN pstatic)
ring rCompose(const lists L, const BOOLEAN check_comp)
only used if HAVE_RINGS is defined
BOOLEAN mpKoszul(leftv res, leftv c, leftv b, leftv id)
used for all transcendental extensions, i.e., the top-most extension in an extension tower is transce...
BOOLEAN iiExprArith1(leftv res, leftv a, int op)
static int si_min(const int a, const int b)
BOOLEAN jjVARIABLES_P(leftv res, leftv u)
idhdl rSimpleFindHdl(ring r, idhdl root, idhdl n)
Linear Programming / Linear Optimization using Simplex - Algorithm.
Compatiblity layer for legacy polynomial operations (over currRing)
BOOLEAN rSleftvOrdering2Ordering(sleftv *ord, ring R)
BOOLEAN iiConvert(int inputType, int outputType, int index, leftv input, leftv output, const struct sConvertTypes *dConvertTypes)
int exprlist_length(leftv v)
BOOLEAN semicProc3(leftv res, leftv u, leftv v, leftv w)
void syMinimizeResolvente(resolvente res, int length, int first)
static int rPar(const ring r)
(r->cf->P)
spectrum spectrumFromList(lists l)
BOOLEAN jjPROC(leftv res, leftv u, leftv v)
lists syConvRes(syStrategy syzstr, BOOLEAN toDel, int add_row_shift)
BOOLEAN jjRESULTANT(leftv res, leftv u, leftv v, leftv w)
static BOOLEAN rField_is_R(const ring r)
void list_error(semicState state)
static FORCE_INLINE void nSetChar(const coeffs r)
initialisations after each ring change
resMatrixBase * accessResMat()
static FORCE_INLINE BOOLEAN nCoeff_is_Ring_Z(const coeffs r)
#define omFreeSize(addr, size)
BOOLEAN jjBETTI2(leftv res, leftv u, leftv v)
static short rVar(const ring r)
#define rVar(r) (r->N)
void id_Delete(ideal *h, ring r)
deletes an ideal/module/matrix
intvec * ivCopy(const intvec *o)
static int * multiplicity
poly singclap_resultant(poly f, poly g, poly x, const ring r)
void scComputeHC(ideal S, ideal Q, int ak, poly &hEdge, ring tailRing)
intvec * id_QHomWeight(ideal id, const ring r)
BOOLEAN nuVanderSys(leftv res, leftv arg1, leftv arg2, leftv arg3)
COMPUTE: polynomial p with values given by v at points p1,..,pN derived from p; more precisely: consi...
#define pCmp(p1, p2)
pCmp: args may be NULL returns: (p2==NULL ? 1 : (p1 == NULL ? -1 : p_LmCmp(p1, p2))) ...
BOOLEAN spectrumProc(leftv result, leftv first)
static BOOLEAN rField_is_Q_a(const ring r)
BOOLEAN jjVARIABLES_ID(leftv res, leftv u)
denominator_list DENOMINATOR_LIST
uResultant::resMatType determineMType(int imtype)
ideal kStd(ideal F, ideal Q, tHomog h, intvec **w, intvec *hilb, int syzComp, int newIdeal, intvec *vw, s_poly_proc_t sp)
BOOLEAN maApplyFetch(int what, map theMap, leftv res, leftv w, ring preimage_r, int *perm, int *par_perm, int P, nMapFunc nMap)
BOOLEAN iiAssignCR(leftv r, leftv arg)
static long p_Totaldegree(poly p, const ring r)
poly iiHighCorner(ideal I, int ak)
bool solver(const int polishmode=PM_NONE)
BOOLEAN spmulProc(leftv result, leftv first, leftv second)
BOOLEAN hasConstTerm(poly h, const ring r)
void WerrorS(const char *s)
static BOOLEAN rField_is_GF(const ring r)
static char const ** rParameter(const ring r)
(r->cf->parameter)
void nlGMP(number &i, number n, const coeffs r)
char * lString(lists l, BOOLEAN typed, int dim)
ring rAssure_HasComp(const ring r)
ideal loNewtonPolytope(const ideal id)
void killlocals_rec(idhdl *root, int v, ring r)
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 ...
void hRadical(scfmon rad, int *Nrad, int Nvar)
static FORCE_INLINE BOOLEAN nCoeff_is_long_C(const coeffs r)
rootContainer ** specializeInU(BOOLEAN matchUp=false, const number subDetVal=NULL)
int hasOne(ideal J, const ring r)
BOOLEAN exitBuffer(feBufferTypes typ)
static void list1(const char *s, idhdl h, BOOLEAN c, BOOLEAN fullname)
poly numvec2poly(const number *q)
void rComposeC(lists L, ring R)
static void jjINT_S_TO_ID(int n, int *e, leftv res)
void Print(leftv store=NULL, int spaces=0)
Called by type_cmd (e.g. "r;") or as default in jPRINT.
static FORCE_INLINE BOOLEAN nCoeff_is_Ring(const coeffs r)
static int pLength(poly a)
Creation data needed for finite fields.
BOOLEAN iiExport(leftv v, int toLev)
idhdl rDefault(const char *s)
static BOOLEAN idIsZeroDim(ideal i)
idhdl get(const char *s, int lev)
real floating point (GMP) numbers
BOOLEAN iiApplyBIGINTMAT(leftv, leftv, int, leftv)
BOOLEAN iiParameter(leftv p)
short float_len2
additional char-flags, rInit
#define pGetVariables(p, e)
void rDecomposeRing_41(leftv h, const coeffs C)
#define nPrint(a)
only for debug, over any initalized currRing
lists getList(spectrum &spec)
int iiRegularity(lists L)
void rDecomposeCF(leftv h, const ring r, const ring R)
void hDelete(scfmon ev, int ev_length)
BOOLEAN iiTestAssume(leftv a, leftv b)
semicState list_is_spectrum(lists l)
BOOLEAN kWeight(leftv res, leftv id)
#define omReallocSize(addr, o_size, size)
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
#define pGetExp(p, i)
Exponent.
single prescision (6,6) real numbers
void killhdl2(idhdl h, idhdl *ih, ring r)
idhdl enterid(const char *s, int lev, int t, idhdl *root, BOOLEAN init, BOOLEAN search)
BOOLEAN hasLinearTerm(poly h, const ring r)
static int rBlocks(ring r)
BOOLEAN syBetti1(leftv res, leftv u)
spectrumState spectrumStateFromList(spectrumPolyList &speclist, lists *L, int fast)
BOOLEAN nuLagSolve(leftv res, leftv arg1, leftv arg2, leftv arg3)
find the (complex) roots an univariate polynomial Determines the roots of an univariate polynomial us...
short float_len
additional char-flags, rInit
poly p_PermPoly(poly p, const int *perm, const ring oldRing, const ring dst, nMapFunc nMap, const int *par_perm, int OldPar, BOOLEAN use_mult)
Coefficient rings, fields and other domains suitable for Singular polynomials.
BOOLEAN killlocals_list(int v, lists L)
static BOOLEAN rComposeOrder(const lists L, const BOOLEAN check_comp, ring R)
static FORCE_INLINE BOOLEAN nCoeff_is_algExt(const coeffs r)
TRUE iff r represents an algebraic extension field.
long id_RankFreeModule(ideal s, ring lmRing, ring tailRing)
return the maximal component number found in any polynomial in s
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 ...
void hKill(monf xmem, int Nvar)
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...
for(int i=0;i< R->ExpL_Size;i++) Print("%09lx "
ideal maMapIdeal(const ideal map_id, const ring preimage_r, const ideal image_id, const ring image_r, const nMapFunc nMap)
polynomial map for ideals/module/matrix map_id: the ideal to map map_r: the base ring for map_id imag...
BOOLEAN mapFromMatrix(matrix m)
void list_cmd(int typ, const char *what, const char *prefix, BOOLEAN iterate, BOOLEAN fullname)
void computeNF(ideal stdJ, poly hc, poly wc, spectrumPolyList *NF, const ring r)
only used if HAVE_RINGS is defined
static long pTotaldegree(poly p)
static leftv rOptimizeOrdAsSleftv(leftv ord)
static BOOLEAN rIsPluralRing(const ring r)
we must always have this test!
int search(const CFArray &A, const CanonicalForm &F, int i, int j)
search for F in A between index i and j
The main handler for Singular numbers which are suitable for Singular polynomials.
BOOLEAN iiBranchTo(leftv, leftv args)
static BOOLEAN iiNoKeepRing
void hIndMult(scmon pure, int Npure, scfmon rad, int Nrad, varset var, int Nvar)
double(* wFunctional)(int *degw, int *lpol, int npol, double *rel, double wx, double wNsqr)
int status int void * buf
ring rCopy0(const ring r, BOOLEAN copy_qideal, BOOLEAN copy_ordering)
void hPure(scfmon stc, int a, int *Nstc, varset var, int Nvar, scmon pure, int *Npure)
const ExtensionInfo & info
< [in] sqrfree poly
number(* nMapFunc)(number a, const coeffs src, const coeffs dst)
maps "a", which lives in src, into dst
static void rDecomposeC(leftv h, const ring R)
BOOLEAN hasAxis(ideal J, int k, const ring r)
complex floating point (GMP) numbers
static FORCE_INLINE char * nCoeffName(const coeffs cf)
const char * rSimpleOrdStr(int ord)
int mult_spectrumh(spectrum &)
gmp_float sqrt(const gmp_float &a)
static resolvente iiCopyRes(resolvente r, int l)
BOOLEAN nuUResSolve(leftv res, leftv args)
solve a multipolynomial system using the u-resultant Input ideal must be 0-dimensional and (currRing-...
static void iiReportTypes(int nr, int t, const short *T)
BOOLEAN rCheckIV(const intvec *iv)
int rOrderName(char *ordername)
const unsigned short fftable[]
void idGetNextChoise(int r, int end, BOOLEAN *endch, int *choise)
#define pIsConstant(p)
like above, except that Comp might be != 0
struct for passing initialization parameters to naInitChar
only used if HAVE_RINGS is defined
BOOLEAN iiApplyLIST(leftv res, leftv a, int op, leftv proc)
void spectrumPrintError(spectrumState state)
void fillContainer(number *_coeffs, number *_ievpoint, const int _var, const int _tdg, const rootType _rt, const int _anz)
const char * iiTwoOps(int t)
static int si_max(const int a, const int b)
static FORCE_INLINE BOOLEAN nCoeff_is_transExt(const coeffs r)
TRUE iff r represents a transcendental extension field.
virtual ideal getMatrix()
ring rInit(leftv pn, leftv rv, leftv ord)
Induced (Schreyer) ordering.
void PrintS(const char *s)
matrix singclap_irrCharSeries(ideal I, const ring r)
static BOOLEAN rField_is_Q(const ring r)
lists rDecompose(const ring r)
BOOLEAN iiApplyIDEAL(leftv, leftv, int, leftv)
BOOLEAN spectrumfProc(leftv result, leftv first)
char name(const Variable &v)
gmp_complex * getRoot(const int i)
idhdl rFindHdl(ring r, idhdl n)
BOOLEAN loSimplex(leftv res, leftv args)
Implementation of the Simplex Algorithm.
static FORCE_INLINE BOOLEAN nCoeff_is_GF(const coeffs r)
BOOLEAN slWrite(si_link l, leftv v)
BOOLEAN rEqual(ring r1, ring r2, BOOLEAN qr)
returns TRUE, if r1 equals r2 FALSE, otherwise Equality is determined componentwise, if qr == 1, then qrideal equality is tested, as well
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)
spectrumState spectrumCompute(poly h, lists *L, int fast)
mprState mprIdealCheck(const ideal theIdeal, const char *name, uResultant::resMatType mtype, BOOLEAN rmatrix=false)
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)
rootContainer ** interpolateDenseSP(BOOLEAN matchUp=false, const number subDetVal=NULL)
static void rRenameVars(ring R)
static void rDecomposeC_41(leftv h, const coeffs C)
static BOOLEAN rField_is_long_C(const ring r)
#define rHasLocalOrMixedOrdering_currRing()
void rChangeCurrRing(ring r)
static BOOLEAN rField_is_Zp(const ring r)
void hLexR(scfmon rad, int Nrad, varset var, int Nvar)
INLINE_THIS void Init(int l=0)
matrix mpNew(int r, int c)
create a r x c zero-matrix
BOOLEAN syBetti2(leftv res, leftv u, leftv w)
int iiDeclCommand(leftv sy, leftv name, int lev, int t, idhdl *root, BOOLEAN isring, BOOLEAN init_b)
BOOLEAN iiAllStart(procinfov pi, char *p, feBufferTypes t, int l)
void paPrint(const char *n, package p)
BOOLEAN iiCheckRing(int i)
ideal idInit(int idsize, int rank)
initialise an ideal / module
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
BOOLEAN kQHWeight(leftv res, leftv v)
static BOOLEAN iiInternalExport(leftv v, int toLev)
void * atGet(idhdl root, const char *name, int t, void *defaultReturnValue)
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)
void rComposeRing(lists L, ring R)
void mult(unsigned long *result, unsigned long *a, unsigned long *b, unsigned long p, int dega, int degb)
#define BREAK_LINE_LENGTH
static BOOLEAN rField_is_Ring(const ring r)
void rDecomposeRing(leftv h, const ring R)
intvec * syBettiOfComputation(syStrategy syzstr, BOOLEAN minim=TRUE, int *row_shift=NULL, intvec *weights=NULL)
BOOLEAN iiDefaultParameter(leftv p)
static FORCE_INLINE number n_Copy(number n, const coeffs r)
return a copy of 'n'
struct for passing initialization parameters to naInitChar
void wCall(poly *s, int sl, int *x, double wNsqr, const ring R)
BOOLEAN semicProc(leftv res, leftv u, leftv v)
void rDelete(ring r)
unconditionally deletes fields in r
BOOLEAN nuMPResMat(leftv res, leftv arg1, leftv arg2)
returns module representing the multipolynomial resultant matrix Arguments 2: ideal i...
const char * Tok2Cmdname(int tok)
used for all algebraic extensions, i.e., the top-most extension in an extension tower is algebraic ...
BOOLEAN iiWRITE(leftv, leftv v)
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 (...
BOOLEAN jjBETTI(leftv res, leftv u)
coeffs basecoeffs() const
static BOOLEAN rField_is_Ring_Z(const ring r)
void pNorm(poly p, const ring R=currRing)
static BOOLEAN rField_is_long_R(const ring r)
lists liMakeResolv(resolvente r, int length, int reallen, int typ0, intvec **weights, int add_row_shift)
void idInitChoise(int r, int beg, int end, BOOLEAN *endch, int *choise)
int rTypeOfMatrixOrder(const intvec *order)
int iiOpsTwoChar(const char *s)
BOOLEAN jjMINRES(leftv res, leftv v)
void CleanUp(ring r=currRing)
void Clean(ring r=currRing)
const char * par_name
parameter name
ideal idrCopyR(ideal id, ring src_r, ring dest_r)
lists rDecompose_list_cf(const ring r)
static int rInternalChar(const ring r)
matrix mp_Copy(matrix a, const ring r)
copies matrix a (from ring r to r)
void newBuffer(char *s, feBufferTypes t, procinfo *pi, int lineno)
BOOLEAN iiApplyINTVEC(leftv res, leftv a, int op, leftv proc)
number nlMapGMP(number from, const coeffs src, const coeffs dst)
BOOLEAN iiARROW(leftv r, char *a, char *s)
BOOLEAN ringIsLocal(const ring r)
BOOLEAN spaddProc(leftv result, leftv first, leftv second)
int idGetNumberOfChoise(int t, int d, int begin, int end, int *choise)
char * complexToStr(gmp_complex &c, const unsigned int oprec, const coeffs src)
intvec * syBetti(resolvente res, int length, int *regularity, intvec *weights, BOOLEAN tomin, int *row_shift)
leftv iiMap(map theMap, const char *what)
idhdl packFindHdl(package r)
#define omCheckAddr(addr)
static FORCE_INLINE void n_Delete(number *p, const coeffs r)
delete 'p'
void iiCheckPack(package &p)
ideal singclap_factorize(poly f, intvec **v, int with_exps, const ring r)
void setGMPFloatDigits(size_t digits, size_t rest)
Set size of mantissa digits - the number of output digits (basis 10) the size of mantissa consists of...
virtual IStateType initState() const
#define omFreeBin(addr, bin)
BOOLEAN rDecompose_CF(leftv res, const coeffs C)
Rational pow(const Rational &a, int e)
char * iiGetLibProcBuffer(procinfo *pi, int part)
#define IMATELEM(M, I, J)
static poly p_Init(const ring r, omBin bin)
BOOLEAN idIs0(ideal h)
returns true if h is the zero ideal
BOOLEAN jjBETTI2_ID(leftv res, leftv u, leftv v)
void syKillEmptyEntres(resolvente res, int length)
BOOLEAN iiApply(leftv res, leftv a, int op, leftv proc)
int mult_spectrum(spectrum &)
lists listOfRoots(rootArranger *self, const unsigned int oprec)
static BOOLEAN rField_is_numeric(const ring r)
BOOLEAN lRingDependend(lists L)
scfmon hInit(ideal S, ideal Q, int *Nexist, ring tailRing)
void copy_deep(spectrum &spec, lists l)
void delete_node(spectrumPolyNode **)
void Werror(const char *fmt,...)
virtual number getSubDet()
ideal kGroebner(ideal F, ideal Q)
void syKillComputation(syStrategy syzstr, ring r=currRing)
const char * lastreserved
idhdl ggetid(const char *n, BOOLEAN, idhdl *packhdl)
static FORCE_INLINE void n_MPZ(mpz_t result, number &n, const coeffs r)
conversion of n to a GMP integer; 0 if not possible
static void killlocals0(int v, idhdl *localhdl, const ring r)
double wFunctionalBuch(int *degw, int *lpol, int npol, double *rel, double wx, double wNsqr)
BOOLEAN loNewtonP(leftv res, leftv arg1)
compute Newton Polytopes of input polynomials
#define pCopy(p)
return a copy of the poly
#define MATELEM(mat, i, j)
poly computeWC(const newtonPolygon &np, Rational max_weight, const ring r)
coeffs nInitChar(n_coeffType t, void *parameter)
one-time initialisations for new coeffs in case of an error return NULL
syStrategy syForceMin(lists li)
int IsCmd(const char *n, int &tok)
void hSupp(scfmon stc, int Nstc, varset var, int *Nvar)
BOOLEAN iiAssign(leftv l, leftv r, BOOLEAN toplevel)
BOOLEAN mpJacobi(leftv res, leftv a)