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))
205 if ((s=strchr(buffer,
'\n'))!=
NULL)
211 if((s!=
NULL) ||(l>20))
213 Print(
"..., %d char(s)",l);
229 { number2 n=(number2)
IDDATA(h);
235 Print(
" %d x %d (%s)",
368 && (((ring)d)->idroot!=
NULL))
419 package savePack=currPack;
426 if (strcmp(what,
"all")==0)
438 if (iterate)
list1(prefix,h,
TRUE,fullname);
461 Werror(
"%s is undefined",what);
495 package save_p=currPack;
529 Warn(
"Gerhard, use the option command");
591 WerrorS(
"write: need at least two arguments");
599 if ((l!=
NULL)&&(l->name!=
NULL)) s=l->name;
601 Werror(
"cannot write to %s",s);
628 Werror(
"can not map from ground field of %s to current ground field",
632 if (
IDELEMS(theMap)<src_ring->N)
636 (src_ring->N)*
sizeof(
poly));
637 for(i=
IDELEMS(theMap);i<src_ring->N;i++)
643 WerrorS(
"argument of a map must have a name");
650 memset(&tmpW,0,
sizeof(
sleftv));
655 save_r=
IDMAP(w)->preimage;
656 IDMAP(w)->preimage=0;
665 ideal
id=(ideal)tmpW.
data;
667 for(
int i=
IDELEMS(
id)-1;i>=0;i--)
673 for(
int j=
IDELEMS(theMap)-1;
j>=0 && !overflow;
j--)
675 if (theMap->m[
j]!=
NULL)
679 for(
int i=
IDELEMS(
id)-1;i>=0;i--)
682 if ((p!=
NULL) && (degs[i]!=0) &&
683 ((
unsigned long)deg_monexp > (
currRing->bitmask / ((
unsigned long)degs[i])/2)))
695 for(
int j=
IDELEMS(theMap)-1;
j>=0 && !overflow;
j--)
697 if (theMap->m[
j]!=
NULL)
703 ((
unsigned long)deg_monexp > (
currRing->bitmask / ((
unsigned long)deg)/2)))
712 Warn(
"possible OVERFLOW in map, max exponent is %ld",
currRing->bitmask/2);
728 char *tmp = theMap->preimage;
729 theMap->preimage=(
char*)1L;
732 theMap->preimage=tmp;
740 if (save_r!=
NULL)
IDMAP(w)->preimage=save_r;
747 IDMAP(w)->preimage=save_r;
755 Werror(
"%s undefined in %s",what,theMap->preimage);
760 Werror(
"cannot find preimage %s",theMap->preimage);
772 char *
s=(
char *)
omAlloc(strlen(name)+5);
776 sprintf(s,
"%s(%d)",name,i+1);
786 Print(
"//defining: %s as %d-th syzygy module\n",s,i+1);
791 Warn(
"cannot define %s",s);
871 int add_row_shift = 0;
874 if (weights!=
NULL) add_row_shift=weights->
min_in();
889 memset(&tmp,0,
sizeof(tmp));
909 memset(&tmp2,0,
sizeof(tmp2));
934 add_row_shift = ww->
min_in();
935 (*weights) -= add_row_shift;
942 res->
data=(
void*)res_im;
945 for(
int i=1;
i<=res_im->
rows();
i++)
947 if (
IMATELEM(*res_im,1,
i)==0) { add_row_shift--; }
952 if (weights!=
NULL)
delete weights;
970 add_row_shift = ww->
min_in();
971 (*weights) -= add_row_shift;
976 if (weights!=
NULL)
delete weights;
979 return reg+1+add_row_shift;
983 #define BREAK_LINE_LENGTH 80 1010 else if(strncmp(s,
"cont;",5)==0)
1017 strcat( s,
"\n;~\n");
1088 res->
m[
i].
data = (
void *)save->set;
1098 for (i=hMu;i<hMu+
hMu2;i++)
1100 res->
m[
i].
data = (
void *)save->set;
1125 const char *
id = name->
name;
1127 memset(sy,0,
sizeof(
sleftv));
1130 WerrorS(
"object to declare is not a name");
1169 if (iiCurrProc!=
NULL)
1174 memset(&tmp,0,
sizeof(
sleftv));
1186 if (ll!=(l-1))
return FALSE;
1188 short *t=(
short*)
omAlloc(l*
sizeof(
short));
1192 for(i=1;i<
l;i++,h=h->
next)
1197 Werror(
"arg %d is not a string",i);
1201 b=
IsCmd((
char *)h->Data(),tt);
1206 Werror(
"arg %d is not a type name",i);
1213 Werror(
"last arg (%d) is not a proc",i);
1218 if (b && (h->rtyp==
IDHDL) && (h->e==
NULL))
1224 if(
pi->data.s.body==
NULL )
1238 if (iiCurrArgs!=
NULL)
1240 if (!err)
Warn(
"too many arguments for %s",
IDID(iiCurrProc));
1251 if (iiCurrArgs==
NULL)
1253 if (strcmp(p->
name,
"#")==0)
1262 if (strcmp(p->
name,
"#")==0)
1264 is_default_list=
TRUE;
1272 if (is_default_list)
1330 if (keepring)
IDRING(h)->ref--;
1342 Warn(
"'%s': no such identifier\n", v->
name);
1345 package frompack=v->req_packhdl;
1360 if (h==frompack->idroot)
1362 frompack->idroot=h->
next;
1366 idhdl hh=frompack->idroot;
1367 while ((hh!=
NULL) && (hh->
next!=h))
1377 h->
next=rootpack->idroot;
1513 WarnS(
"package not found\n");
1546 r->order = (
int *)
omAlloc(3 *
sizeof(
int *));
1547 r->block0 = (
int *)
omAlloc0(3 *
sizeof(
int *));
1548 r->block1 = (
int *)
omAlloc0(3 *
sizeof(
int *));
1567 if (h!=
NULL)
return h;
1569 if (h!=
NULL)
return h;
1576 if (h!=
NULL)
return h;
1584 if (h!=
NULL)
return h;
1603 L->
m[0].
data=(
void *)(
long)r->cf->ch;
1609 for(i=0; i<r->N; i++)
1615 L->
m[1].
data=(
void *)LL;
1632 if (r->block1[i]-r->block0[i] >=0 )
1634 j=r->block1[
i]-r->block0[
i];
1637 if ((r->wvhdl!=
NULL) && (r->wvhdl[i]!=
NULL))
1639 for(;j>=0; j--) (*iv)[
j]=r->wvhdl[
i][
j];
1641 else switch (r->order[i])
1648 for(;j>=0; j--) (*iv)[
j]=1;
1658 LLL->
m[1].
data=(
void *)iv;
1659 LL->
m[
i].
data=(
void *)LLL;
1662 L->
m[2].
data=(
void *)LL;
1672 pSetCoeff0(q->m[0],(number)(r->qideal->m[0]));
1673 L->
m[3].
data=(
void *)q;
1692 L->
m[0].
data=(
void *)0;
1702 L->
m[1].
data=(
void *)LL;
1726 L->
m[0].
data=(
void *)0;
1736 L->
m[1].
data=(
void *)LL;
1770 LL->
m[1].
data=(
void *) C->modExponent;
1772 L->
m[1].
data=(
void *)LL;
1797 LL->
m[0].
data=
nlMapGMP((number) R->cf->modBase, R->cf, R->cf);
1799 LL->
m[1].
data=(
void *) R->cf->modExponent;
1801 L->
m[1].
data=(
void *)LL;
1815 WerrorS(
"ring with polynomial data must be the base ring or compatible");
1828 else if ( C->extRing!=
NULL )
1838 Lc->
m[0].
data=(
void*)(
long)C->m_nfCharQ;
1845 Lc->
m[1].
data=(
void*)Lv;
1856 Loo->
m[1].
data=(
void *)iv;
1859 Lo->
m[0].
data=(
void*)Loo;
1862 Lc->
m[2].
data=(
void*)Lo;
1868 res->
data=(
void*)Lc;
1873 res->
data=(
void *)(
long)C->ch;
1894 WerrorS(
"ring with polynomial data must be the base ring or compatible");
1912 L->
m[0].
data=(
char*)r->cf; r->cf->ref++;
1918 for(i=0; i<r->N; i++)
1921 LL->m[
i].data=(
void *)
omStrDup(r->names[i]);
1924 L->
m[1].
data=(
void *)LL;
1944 assume( r->block0[i] == r->block1[i] );
1945 const int s = r->block0[
i];
1946 assume( -2 < s && s < 2);
1951 else if (r->block1[i]-r->block0[i] >=0 )
1953 int bl=j=r->block1[
i]-r->block0[
i];
1961 j+=r->wvhdl[
i][bl+1];
1964 if ((r->wvhdl!=
NULL) && (r->wvhdl[i]!=
NULL))
1966 for(;j>=0; j--) (*iv)[
j]=r->wvhdl[
i][j+(j>bl)];
1968 else switch (r->order[i])
1975 for(;j>=0; j--) (*iv)[
j]=1;
1985 LLL->
m[1].
data=(
void *)iv;
1986 LL->m[
i].data=(
void *)LLL;
1989 L->
m[2].
data=(
void *)LL;
1993 if (r->qideal==
NULL)
1998 #ifdef HAVE_PLURAL // NC! in rDecompose 2019 || (r->qideal !=
NULL)
2026 WerrorS(
"ring with polynomial data must be the base ring or compatible");
2051 else if ( r->cf->extRing!=
NULL )
2061 Lc->
m[0].
data=(
void*)(
long)r->cf->m_nfCharQ;
2068 Lc->
m[1].
data=(
void*)Lv;
2079 Loo->
m[1].
data=(
void *)iv;
2082 Lo->
m[0].
data=(
void*)Loo;
2085 Lc->
m[2].
data=(
void*)Lo;
2091 L->
m[0].
data=(
void*)Lc;
2096 L->
m[0].
data=(
void *)(
long)r->cf->ch;
2103 for(i=0; i<r->N; i++)
2109 L->
m[1].
data=(
void *)LL;
2129 assume( r->block0[i] == r->block1[i] );
2130 const int s = r->block0[
i];
2131 assume( -2 < s && s < 2);
2136 else if (r->block1[i]-r->block0[i] >=0 )
2138 int bl=j=r->block1[
i]-r->block0[
i];
2146 j+=r->wvhdl[
i][bl+1];
2149 if ((r->wvhdl!=
NULL) && (r->wvhdl[i]!=
NULL))
2151 for(;j>=0; j--) (*iv)[
j]=r->wvhdl[
i][j+(j>bl)];
2153 else switch (r->order[i])
2160 for(;j>=0; j--) (*iv)[
j]=1;
2170 LLL->
m[1].
data=(
void *)iv;
2171 LL->
m[
i].
data=(
void *)LLL;
2174 L->
m[2].
data=(
void *)LL;
2178 if (r->qideal==
NULL)
2183 #ifdef HAVE_PLURAL // NC! in rDecompose 2202 WerrorS(
"invalid coeff. field description, expecting 0");
2210 WerrorS(
"invalid coeff. field description, expecting precision list");
2220 WerrorS(
"invalid coeff. field description list");
2223 int r1=(int)(
long)LL->
m[0].
data;
2224 int r2=(int)(
long)LL->
m[1].
data;
2246 R->cf->float_len=
si_min(r1,32767);
2247 R->cf->float_len2=
si_min(r2,32767);
2256 WerrorS(
"invalid coeff. field description, expecting parameter name");
2272 mpz_ptr modBase =
NULL;
2273 unsigned int modExponent = 1;
2275 modBase = (mpz_ptr)
omAlloc(
sizeof(mpz_t));
2278 mpz_init_set_ui(modBase,0);
2289 number tmp= (number) LL->
m[0].
data;
2295 mpz_init_set_ui(modBase,(
unsigned long) LL->
m[0].
data);
2299 mpz_init_set_ui(modBase,0);
2303 modExponent = (
unsigned long) LL->
m[1].
data;
2311 if ((mpz_cmp_ui(modBase, 1) == 0) && (mpz_cmp_ui(modBase, 0) < 0))
2313 WerrorS(
"Wrong ground ring specification (module is 1)");
2316 if (modExponent < 1)
2318 WerrorS(
"Wrong ground ring specification (exponent smaller than 1)");
2322 if (mpz_cmp_ui(modBase, 0) == 0)
2327 else if (modExponent > 1)
2330 if ((mpz_cmp_ui(modBase, 2) == 0) && (modExponent <= 8*
sizeof(
unsigned long)))
2342 info.
exp= modExponent;
2353 info.
exp= modExponent;
2366 for(i=0;i<R->N-1;i++)
2368 for(j=i+1;j<R->N;j++)
2370 if (strcmp(R->names[i],R->names[j])==0)
2373 Warn(
"name conflict var(%d) and var(%d): `%s`, rename to `@%s`",i+1,j+1,R->names[i],R->names[i]);
2375 R->names[
j]=(
char *)
omAlloc(2+strlen(R->names[i]));
2376 sprintf(R->names[j],
"@%s",R->names[i]);
2382 for(i=0;i<
rPar(R); i++)
2388 Warn(
"name conflict par(%d) and var(%d): `%s`, renaming the VARIABLE to `@@(%d)`",i+1,j+1,R->names[j],i+1);
2394 sprintf(R->names[j],
"@@(%d)",i+1);
2426 Werror(
"var name %d must be a string or a ring variable",i+1);
2432 Werror(
"var name %d must be `string`",i+1);
2439 WerrorS(
"variable must be given as `list`");
2455 for (
int j=0;
j < n-1;
j++)
2462 &&(strcmp((
char*)vv->
m[0].
Data(),
"L")==0))
2464 number nn=(number)vv->
m[1].
Data();
2471 Werror(
"illegal argument for pseudo ordering L: %d",vv->
m[1].
Typ());
2478 if (bitmask!=0) n--;
2481 R->order=(
int *)
omAlloc0(n*
sizeof(
int));
2482 R->block0=(
int *)
omAlloc0(n*
sizeof(
int));
2483 R->block1=(
int *)
omAlloc0(n*
sizeof(
int));
2486 for (j_in_R= n-2; j_in_R>=0; j_in_R--)
2489 for(j_in_R=0,j_in_L=0;j_in_R<n-1;j_in_R++,j_in_L++)
2494 WerrorS(
"ordering must be list of lists");
2501 if (strcmp((
char*)vv->
m[0].
Data(),
"L")==0)
2509 WerrorS(
"ordering name must be a (string,intvec)(1)");
2514 if (j_in_R==0) R->block0[0]=1;
2531 if (jj<0) R->block0[j_in_R]=1;
2532 else R->block0[j_in_R]=R->block1[jj]+1;
2540 R->block1[j_in_R]=
si_max(R->block0[j_in_R],R->block0[j_in_R]+iv_len-1);
2541 if (R->block1[j_in_R]>R->N)
2543 R->block1[j_in_R]=R->N;
2544 iv_len=R->block1[j_in_R]-R->block0[j_in_R]+1;
2548 switch (R->order[j_in_R])
2557 R->wvhdl[j_in_R] =(
int *)
omAlloc(iv_len*
sizeof(
int));
2558 for (i=0; i<iv_len;i++)
2560 R->wvhdl[j_in_R][
i]=(*iv)[
i];
2564 R->wvhdl[j_in_R] =(
int *)
omAlloc((iv->
length()+1)*
sizeof(
int));
2565 for (i=0; i<iv_len;i++)
2567 R->wvhdl[j_in_R][
i]=(*iv)[
i];
2569 R->wvhdl[j_in_R][
i]=iv->
length() - iv_len;
2571 for (; i<iv->
length(); i++)
2573 R->wvhdl[j_in_R][i+1]=(*iv)[
i];
2577 R->wvhdl[j_in_R] =(
int *)
omAlloc((iv->
length())*
sizeof(
int));
2578 for (i=0; i<iv->
length();i++) R->wvhdl[j_in_R][i]=(*iv)[
i];
2579 R->block1[j_in_R]=
si_max(R->block0[j_in_R],R->block0[j_in_R]+(
int)
sqrt((
double)(iv->
length()-1)));
2580 if (R->block1[j_in_R]>R->N)
2582 WerrorS(
"ordering matrix too big");
2600 R->block1[j_in_R]=R->block0[j_in_R]=0;
2608 R->block1[j_in_R] = R->block0[j_in_R] = 0;
2611 const int s = (*iv)[0];
2612 assume( -2 < s && s < 2 );
2613 R->block1[j_in_R] = R->block0[j_in_R] =
s;
2626 WerrorS(
"ordering name must be a (string,intvec)");
2635 if (R->block1[j_in_R] != R->N)
2646 R->block0[j_in_R] <= R->N)
2648 R->block1[j_in_R] = R->N;
2652 Werror(
"ordering incomplete: size (%d) should be %d",R->block1[j_in_R],R->N);
2656 if (R->block0[j_in_R]>R->N)
2658 Werror(
"not enough variables (%d) for ordering block %d, scanned so far:",R->N,j_in_R+1);
2659 for(
int ii=0;ii<=j_in_R;ii++)
2660 Werror(
"ord[%d]: %s from v%d to v%d",ii+1,
rSimpleOrdStr(R->order[ii]),R->block0[ii],R->block1[ii]);
2674 R->order=(
int*)
omRealloc0Size(R->order,n*
sizeof(
int),(n+1)*
sizeof(
int));
2675 R->block0=(
int*)
omRealloc0Size(R->block0,n*
sizeof(
int),(n+1)*
sizeof(
int));
2676 R->block1=(
int*)
omRealloc0Size(R->block1,n*
sizeof(
int),(n+1)*
sizeof(
int));
2688 WerrorS(
"ordering must be given as `list`");
2691 if (bitmask!=0) R->bitmask=bitmask*2;
2724 int ch = (int)(
long)L->
m[0].
Data();
2734 Warn(
"%d is invalid characteristic of ground field. %d is used.", ch, l);
2757 int ch = (int)(
long)LL->
m[0].
Data();
2758 while ((ch!=
fftable[is_gf_char]) && (
fftable[is_gf_char])) is_gf_char++;
2759 if (
fftable[is_gf_char]==0) is_gf_char=-1;
2780 WerrorS(
"could not create the specified coefficient field");
2784 if( extRing->qideal !=
NULL )
2788 extParam.
r = extRing;
2795 extParam.
r = extRing;
2805 WerrorS(
"coefficient field must be described by `int` or `list`");
2811 WerrorS(
"could not create coefficient field described by the input!");
2829 ideal q=(ideal)L->
m[3].
Data();
2835 WerrorS(
"coefficient fields must be equal if q-ideal !=0");
2842 int par_perm_size=0;
2861 par_perm_size=
rPar(orig_ring);
2871 WerrorS(
"coefficient fields must be equal if q-ideal !=0");
2875 perm=(
int *)
omAlloc0((orig_ring->N+1)*
sizeof(int));
2876 if (par_perm_size!=0)
2877 par_perm=(
int *)
omAlloc0(par_perm_size*
sizeof(
int));
2881 maFindPerm(orig_ring->names,orig_ring->N,orig_ring->parameter,orig_ring->P,
2890 else if (par_perm_size!=0)
2895 for(i=
IDELEMS(q)-1; i>=0; i--)
2898 par_perm,par_perm_size);
2900 pTest(dest_id->m[i]);
2916 WerrorS(
"q-ideal must be given as `ideal`");
2944 while (i>=0) {
if (R->names[i]!=
NULL)
omFree(R->names[i]); i--; }
2965 ideal
id=(ideal)a->
Data();
2968 for (i=1; i<=
IDELEMS(
id); i++)
2975 res->
data=(
char *)result;
2985 int n=(int)(
long)b->
Data();
2986 int d=(int)(
long)c->
Data();
2993 if ((d>n) || (d<1) || (n<1))
2998 int *choise = (
int*)
omAlloc(d*
sizeof(
int));
3002 temp=(ideal)id->
Data();
3015 if (choise[l-1]<=
IDELEMS(temp))
3017 p =
pCopy(temp->m[choise[l-1]-1]);
3018 if (sign == -1) p =
pNeg(p);
3029 res->
data=(
char *)result;
3044 int add_row_shift=0;
3050 add_row_shift = ww->
min_in();
3051 (*weights) -= add_row_shift;
3064 memset(&tmp,0,
sizeof(tmp));
3078 const int length = syzstr->
length;
3080 if ((fullres==
NULL) && (minres==
NULL))
3106 for (
int i=(length)-1;
i>=0;
i--)
3118 for (
int i=length-1;
i>=0;
i--)
3193 ideal F=(ideal)id->
Data();
3199 res->
data=(
char *)iv;
3203 double wNsqr = (double)2.0 / (
double)n;
3205 x = (
int * )
omAlloc(2 * (n + 1) *
sizeof(int));
3207 for (i = n; i!=0; i--)
3208 (*iv)[i-1] = x[i + n + 1];
3226 res->
data=(
void *)b;
3244 #ifdef HAVE_SPECTRUM 3252 spec.
mu = (int)(
long)(l->
m[0].
Data( ));
3253 spec.
pg = (int)(
long)(l->
m[1].
Data( ));
3254 spec.
n = (int)(
long)(l->
m[2].
Data( ));
3262 for(
int i=0;
i<spec.
n;
i++ )
3265 spec.
w[
i] = (*mul)[
i];
3296 for(
int i=0;
i<spec.
n;
i++ )
3300 (*mult)[
i] = spec.
w[
i];
3310 L->
m[0].
data = (
void*)(
long)spec.
mu;
3311 L->
m[1].
data = (
void*)(
long)spec.
pg;
3312 L->
m[2].
data = (
void*)(
long)spec.
n;
3313 L->
m[3].
data = (
void*)num;
3314 L->
m[4].
data = (
void*)den;
3315 L->
m[5].
data = (
void*)mult;
3363 WerrorS(
"the list is too short" );
3366 WerrorS(
"the list is too long" );
3370 WerrorS(
"first element of the list should be int" );
3373 WerrorS(
"second element of the list should be int" );
3376 WerrorS(
"third element of the list should be int" );
3379 WerrorS(
"fourth element of the list should be intvec" );
3382 WerrorS(
"fifth element of the list should be intvec" );
3385 WerrorS(
"sixth element of the list should be intvec" );
3389 WerrorS(
"first element of the list should be positive" );
3392 WerrorS(
"wrong number of numerators" );
3395 WerrorS(
"wrong number of denominators" );
3398 WerrorS(
"wrong number of multiplicities" );
3402 WerrorS(
"the Milnor number should be positive" );
3405 WerrorS(
"the geometrical genus should be nonnegative" );
3408 WerrorS(
"all numerators should be positive" );
3411 WerrorS(
"all denominators should be positive" );
3414 WerrorS(
"all multiplicities should be positive" );
3418 WerrorS(
"it is not symmetric" );
3421 WerrorS(
"it is not monotonous" );
3425 WerrorS(
"the Milnor number is wrong" );
3428 WerrorS(
"the geometrical genus is wrong" );
3432 WerrorS(
"unspecific error" );
3468 ( fast==2 ? 2 : 1 ) );
3478 ( fast==0 || (*node)->weight<=smax ) )
3500 cmp =
pCmp( (*node)->mon,f );
3523 (*node)->nf = search->
nf;
3527 while( cmp<0 && f!=(
poly)NULL );
3529 search = search->
next;
3540 if( (*node)->weight<=(
Rational)1 ) pg++;
3541 if( (*node)->weight==smax ) z++;
3542 if( (*node)->weight>weight_prev ) n++;
3544 weight_prev = (*node)->weight;
3545 node = &((*node)->next);
3567 cmp =
pCmp( (*node)->mon,f );
3582 search = search->
next;
3596 n = ( z > 0 ? 2*n - 1 : 2*n );
3611 ( fast==0 || search->
weight<=smax );
3612 search=search->
next )
3637 for( n1=0, n2=n-1; n1<n2; n1++, n2-- )
3640 (*den) [n2] = (*den)[n1];
3641 (*mult)[n2] = (*mult)[n1];
3649 if( fast==0 || fast==1 )
3653 for(
int n1=0, n2=n-1 ; n1<n2 && symmetric==
TRUE; n1++, n2-- )
3655 if( (*mult)[n1]!=(*mult)[n2] ||
3656 (*den) [n1]!= (*den)[n2] ||
3663 if( symmetric==
FALSE )
3673 (*L)->m[0].data = (
void*)(
long)
mu;
3690 (*L)->m[0].data = (
void*)(
long)
mu;
3691 (*L)->m[1].data = (
void*)(
long)pg;
3692 (*L)->m[2].data = (
void*)(
long)n;
3693 (*L)->m[3].data = (
void*)nom;
3694 (*L)->m[4].data = (
void*)den;
3695 (*L)->m[5].data = (
void*)mult;
3704 #ifdef SPECTRUM_DEBUG 3705 #ifdef SPECTRUM_PRINT 3706 #ifdef SPECTRUM_IOSTREAM 3707 cout <<
"spectrumCompute\n";
3708 if( fast==0 ) cout <<
" no optimization" << endl;
3709 if( fast==1 ) cout <<
" weight optimization" << endl;
3710 if( fast==2 ) cout <<
" symmetry optimization" << endl;
3712 fprintf( stdout,
"spectrumCompute\n" );
3713 if( fast==0 ) fprintf( stdout,
" no optimization\n" );
3714 if( fast==1 ) fprintf( stdout,
" weight optimization\n" );
3715 if( fast==2 ) fprintf( stdout,
" symmetry optimization\n" );
3759 #ifdef SPECTRUM_DEBUG 3760 #ifdef SPECTRUM_PRINT 3761 #ifdef SPECTRUM_IOSTREAM 3762 cout <<
"\n computing the Jacobi ideal...\n";
3764 fprintf( stdout,
"\n computing the Jacobi ideal...\n" );
3773 #ifdef SPECTRUM_DEBUG 3774 #ifdef SPECTRUM_PRINT 3775 #ifdef SPECTRUM_IOSTREAM 3778 fprintf( stdout,
" " );
3789 #ifdef SPECTRUM_DEBUG 3790 #ifdef SPECTRUM_PRINT 3791 #ifdef SPECTRUM_IOSTREAM 3793 cout <<
" computing a standard basis..." << endl;
3795 fprintf( stdout,
"\n" );
3796 fprintf( stdout,
" computing a standard basis...\n" );
3804 #ifdef SPECTRUM_DEBUG 3805 #ifdef SPECTRUM_PRINT 3806 for( i=0; i<
IDELEMS(stdJ); i++ )
3808 #ifdef SPECTRUM_IOSTREAM 3811 fprintf( stdout,
" " );
3856 #ifdef SPECTRUM_DEBUG 3857 #ifdef SPECTRUM_PRINT 3858 #ifdef SPECTRUM_IOSTREAM 3859 cout <<
"\n computing the highest corner...\n";
3861 fprintf( stdout,
"\n computing the highest corner...\n" );
3870 if( hc!=(
poly)NULL )
3885 #ifdef SPECTRUM_DEBUG 3886 #ifdef SPECTRUM_PRINT 3887 #ifdef SPECTRUM_IOSTREAM 3890 fprintf( stdout,
" " );
3900 #ifdef SPECTRUM_DEBUG 3901 #ifdef SPECTRUM_PRINT 3902 #ifdef SPECTRUM_IOSTREAM 3903 cout <<
"\n computing the newton polygon...\n";
3905 fprintf( stdout,
"\n computing the newton polygon...\n" );
3912 #ifdef SPECTRUM_DEBUG 3913 #ifdef SPECTRUM_PRINT 3922 #ifdef SPECTRUM_DEBUG 3923 #ifdef SPECTRUM_PRINT 3924 #ifdef SPECTRUM_IOSTREAM 3925 cout <<
"\n computing the weight corner...\n";
3927 fprintf( stdout,
"\n computing the weight corner...\n" );
3937 #ifdef SPECTRUM_DEBUG 3938 #ifdef SPECTRUM_PRINT 3939 #ifdef SPECTRUM_IOSTREAM 3942 fprintf( stdout,
" " );
3952 #ifdef SPECTRUM_DEBUG 3953 #ifdef SPECTRUM_PRINT 3954 #ifdef SPECTRUM_IOSTREAM 3955 cout <<
"\n computing NF...\n" << endl;
3957 fprintf( stdout,
"\n computing NF...\n" );
3966 #ifdef SPECTRUM_DEBUG 3967 #ifdef SPECTRUM_PRINT 3969 #ifdef SPECTRUM_IOSTREAM 3972 fprintf( stdout,
"\n" );
3997 WerrorS(
"polynomial is zero" );
4000 WerrorS(
"polynomial has constant term" );
4003 WerrorS(
"not a singularity" );
4006 WerrorS(
"the singularity is not isolated" );
4009 WerrorS(
"highest corner cannot be computed" );
4012 WerrorS(
"principal part is degenerate" );
4018 WerrorS(
"unknown error occurred" );
4035 WerrorS(
"only works for local orderings" );
4043 WerrorS(
"does not work in quotient rings" );
4056 result->
data = (
char*)L;
4089 WerrorS(
"only works for local orderings" );
4094 WerrorS(
"does not work in quotient rings" );
4107 result->
data = (
char*)L;
4153 else if( l->
nr > 5 )
4191 int mu = (int)(
long)(l->
m[0].
Data( ));
4192 int pg = (int)(
long)(l->
m[1].
Data( ));
4193 int n = (int)(
long)(l->
m[2].
Data( ));
4204 if( n != num->
length( ) )
4208 else if( n != den->
length( ) )
4212 else if( n != mul->
length( ) )
4232 for( i=0; i<n; i++ )
4234 if( (*num)[
i] <= 0 )
4238 if( (*den)[
i] <= 0 )
4242 if( (*mul)[
i] <= 0 )
4254 for( i=0, j=n-1; i<=
j; i++,j-- )
4257 (*den)[
i] != (*den)[
j] ||
4258 (*mul)[
i] != (*mul)[
j] )
4268 for( i=0, j=1; i<n/2; i++,j++ )
4270 if( (*num)[
i]*(*den)[
j] >= (*num)[
j]*(*den)[
i] )
4280 for( mu=0, i=0; i<n; i++ )
4285 if( mu != (
int)(long)(l->
m[0].
Data( )) )
4294 for( pg=0, i=0; i<n; i++ )
4296 if( (*num)[
i]<=(*den)[
i] )
4302 if( pg != (
int)(long)(l->
m[1].
Data( )) )
4331 WerrorS(
"first argument is not a spectrum:" );
4336 WerrorS(
"second argument is not a spectrum:" );
4369 int k = (int)(
long)second->
Data( );
4373 WerrorS(
"first argument is not a spectrum" );
4378 WerrorS(
"second argument should be positive" );
4415 WerrorS(
"first argument is not a spectrum" );
4420 WerrorS(
"second argument is not a spectrum" );
4444 memset(&tmp,0,
sizeof(tmp));
4463 WerrorS(
"Ground field not implemented!");
4483 LP->
m= (int)(
long)(v->
Data());
4489 LP->
n= (int)(
long)(v->
Data());
4495 LP->
m1= (int)(
long)(v->
Data());
4501 LP->
m2= (int)(
long)(v->
Data());
4507 LP->
m3= (int)(
long)(v->
Data());
4509 #ifdef mprDEBUG_PROT 4510 Print(
"m (constraints) %d\n",LP->
m);
4511 Print(
"n (columns) %d\n",LP->
n);
4535 lres->
m[4].
data=(
void*)(
long)LP->
m;
4538 lres->
m[5].
data=(
void*)(
long)LP->
n;
4540 res->
data= (
void*)lres;
4547 ideal gls = (ideal)(arg1->
Data());
4548 int imtype= (int)(
long)arg2->
Data();
4573 int howclean= (int)(
long)arg3->
Data();
4580 WerrorS(
"Ground field not implemented!");
4587 unsigned long int ii = (
unsigned long int)arg2->
Data();
4593 WerrorS(
"Input polynomial is constant!");
4619 if ( (vpos != i) && (
pGetExp( piter, i ) != 0) )
4621 WerrorS(
"The input polynomial must be univariate!");
4629 number * pcoeffs= (number *)
omAlloc( (deg+1) *
sizeof( number ) );
4631 for ( i= deg; i >= 0; i-- )
4645 #ifdef mprDEBUG_PROT 4646 for (i=deg; i >= 0; i--)
4654 roots->
solver( howclean );
4661 rlist->
Init( elem );
4665 for ( j= 0; j < elem; j++ )
4674 for ( j= 0; j < elem; j++ )
4678 rlist->
m[
j].
data=(
void *)dummy;
4692 res->
data= (
void*)rlist;
4701 p= (ideal)arg1->
Data();
4702 w= (ideal)arg2->
Data();
4713 int tdg= (int)(
long)arg3->
Data();
4720 WerrorS(
"Last input parameter must be > 0!");
4728 if ( m != (
int)
pow((
double)tdg+1,(
double)n) )
4730 Werror(
"Size of second input ideal must be equal to %d!",
4731 (
int)
pow((
double)tdg+1,(
double)n));
4738 WerrorS(
"Ground field not implemented!");
4743 number *pevpoint= (number *)
omAlloc( n *
sizeof( number ) );
4744 for ( i= 0; i < n; i++ )
4753 WerrorS(
"Elements of first input ideal must not be equal to -1, 0, 1!");
4762 WerrorS(
"Elements of first input ideal must be numbers!");
4765 pevpoint[
i]=
nCopy( tmp );
4769 number *wresults= (number *)
omAlloc( m *
sizeof( number ) );
4770 for ( i= 0; i <
m; i++ )
4779 WerrorS(
"Elements of second input ideal must be numbers!");
4794 res->
data= (
void*)rpoly;
4809 else gls= (ideal)(v->
Data());
4815 else imtype= (int)(
long)v->
Data();
4820 ideal test_id=
idInit(1,1);
4822 for(j=
IDELEMS(gls)-1;j>=0;j--)
4824 if (gls->m[j]!=
NULL)
4826 test_id->m[0]=gls->m[
j];
4830 WerrorS(
"Newton polytope not of expected dimension");
4844 unsigned long int ii=(
unsigned long int)v->
Data();
4852 else howclean= (int)(
long)v->
Data();
4881 WerrorS(
"Error occurred during matrix setup!");
4889 #ifdef mprDEBUG_PROT 4894 WerrorS(
"Unsuitable input ideal: Minor of resultant matrix is singular!");
4900 if ( interpolate_det )
4906 if ( interpolate_det )
4911 #ifdef mprDEBUG_PROT 4913 for (i=0; i < c; i++)
pWrite(iproots[i]->getPoly());
4915 for (i=0; i < c; i++)
pWrite(muiproots[i]->getPoly());
4919 arranger=
new rootArranger( iproots, muiproots, howclean );
4930 WerrorS(
"Solver was unable to find any roots!");
4936 for (i=0; i <
count; i++)
delete iproots[i];
4939 for (i=0; i <
count; i++)
delete muiproots[i];
4946 res->
data= (
void *)listofroots;
4958 int count=
self->roots[0]->getAnzRoots();
4959 int elem=
self->roots[0]->getAnzElems();
4963 if ( self->found_roots )
4965 listofroots->
Init( count );
4967 for (i=0; i <
count; i++)
4970 onepoint->
Init(elem);
4971 for ( j= 0; j < elem; j++ )
4987 listofroots->
m[
i].
data=(
void *)onepoint;
4995 listofroots->
Init( 0 );
5009 if (rg==
NULL)
return;
5029 Warn(
"deleting denom_list for ring change to %s",
IDID(h));
5041 if ((rg!=
NULL) && (rg->idroot==
NULL))
5069 if((*iv)[
i]>=0) { neg=
FALSE;
break; }
5074 (*iv)[
i]= - (*iv)[
i];
5083 if((*iv)[
i]>=0) { neg=
FALSE;
break; }
5088 (*iv)[
i]= -(*iv)[
i];
5097 if((*iv)[
i]!=1) { all_one=
FALSE;
break; }
5103 (*iv2)[2]=iv->
length()-2;
5115 if((*iv)[
i]!=1) { all_one=
FALSE;
break; }
5121 (*iv2)[2]=iv->
length()-2;
5155 (*iv)[2] += (*iv2)[2];
5162 if (!change) h=h->
next;
5170 int last = 0, o=0, n = 1,
i=0, typ = 1,
j;
5182 R->bitmask=(*iv)[2];
5195 WerrorS(
"invalid combination of orderings");
5203 WerrorS(
"more than one ordering c/C specified");
5208 R->order=(
int *)
omAlloc0(n*
sizeof(
int));
5209 R->block0=(
int *)
omAlloc0(n*
sizeof(
int));
5210 R->block1=(
int *)
omAlloc0(n*
sizeof(
int));
5213 int *weights=(
int*)
omAlloc0((R->N+1)*
sizeof(int));
5216 for (
j=0;
j < n-1;
j++)
5237 R->order[n] = (*iv)[1];
5247 R->block0[n] = last+1;
5250 R->wvhdl[n][
i-2] = (*iv)[
i];
5252 if (weights[last]==0) weights[
last]=(*iv)[
i]*typ;
5254 R->block1[n] =
si_min(last,R->N);
5265 R->block0[n] = last+1;
5266 if (iv->
length() == 3) last+=(*iv)[2];
5267 else last += (*iv)[0];
5268 R->block1[n] =
si_min(last,R->N);
5272 if (weights[
i]==0) weights[
i]=typ;
5284 const int s = (*iv)[2];
5294 const int s = (*iv)[2];
5296 if( 1 < s || s < -1 )
return TRUE;
5312 R->block0[n] = last+1;
5317 R->wvhdl[n][
i-2]=(*iv)[
i];
5319 if (weights[last]==0) weights[
last]=(*iv)[
i]*typ;
5321 last=R->block0[n]-1;
5326 R->block0[n] = last+1;
5329 if (R->block1[n]- R->block0[n]+2>=iv->
length())
5330 WarnS(
"missing module weights");
5331 for (
i=2;
i<=(R->block1[n]-R->block0[n]+2);
i++)
5333 R->wvhdl[n][
i-2]=(*iv)[
i];
5335 if (weights[last]==0) weights[
last]=(*iv)[
i]*typ;
5337 R->wvhdl[n][
i-2]=iv->
length() -3 -(R->block1[n]- R->block0[n]);
5340 R->wvhdl[n][
i-1]=(*iv)[
i];
5342 last=R->block0[n]-1;
5347 R->block0[n] = last+1;
5355 if (weights[last]==0) weights[
last]=(*iv)[
i]*typ;
5357 last=R->block0[n]-1;
5363 if (Mtyp==0)
return TRUE;
5364 if (Mtyp==-1) typ = -1;
5368 R->wvhdl[n][
i-2]=(*iv)[
i];
5370 R->block0[n] = last+1;
5372 R->block1[n] =
si_min(last,R->N);
5373 for(
i=R->block1[n];
i>=R->block0[n];
i--)
5375 if (weights[
i]==0) weights[
i]=typ;
5385 Werror(
"Internal Error: Unknown ordering %d", (*iv)[1]);
5392 Werror(
"mismatch of number of vars (%d) and ordering (>=%d vars)",
5400 for(
i=1;
i<=R->N;
i++)
5401 {
if (weights[
i]<0) { R->OrdSgn=-1;
break; }}
5415 if (R->block1[n] != R->N)
5426 R->block0[n] <= R->N)
5428 R->block1[n] = R->N;
5432 Werror(
"mismatch of number of vars (%d) and ordering (%d vars)",
5451 *p = (
char*)sl->
name;
5492 mpz_ptr modBase =
NULL;
5493 unsigned int modExponent = 1;
5524 WerrorS(
"parameter expected");
5530 extParam.
r =
rDefault( cf, pars, names);
5531 for(
int i=pars-1;
i>=0;
i--)
5543 int ch = (int)(
long)pn->
Data();
5554 if ((ch<2)||(ch!=ch2))
5556 Warn(
"%d is invalid as characteristic of the ground field. 32003 is used.", ch);
5571 if ((ch!=0) && (ch!=
IsPrime(ch)) && (pars == 1))
5583 if ((ch!=0) && (ch!=
IsPrime(ch)))
5585 WerrorS(
"too many parameters");
5593 WerrorS(
"parameter expected");
5599 extParam.
r =
rDefault( ch, pars, names);
5600 for(
int i=pars-1;
i>=0;
i--)
5613 && ((strcmp(pn->
name,
"real")==0) || (strcmp(pn->
name,
"complex")==0)))
5616 BOOLEAN complex_flag=(strcmp(pn->
name,
"complex")==0);
5619 float_len=(int)(
long)pnn->
Data();
5620 float_len2=float_len;
5624 float_len2=(int)(
long)pnn->
Data();
5643 if (param.
float_len < SHORT_REAL_LENGTH)
5659 else if ((pn->
name !=
NULL) && (strcmp(pn->
name,
"integer") == 0))
5662 modBase = (mpz_ptr)
omAlloc(
sizeof(mpz_t));
5663 mpz_init_set_si(modBase, 0);
5670 mpz_set_ui(modBase, (
int)(
long) pnn->
Data());
5674 modExponent = (long) pnn->
Data();
5679 mpz_mul_ui(modBase, modBase, (
int)(
long) pnn->
Data());
5692 if ((mpz_cmp_ui(modBase, 1) == 0) && (mpz_cmp_ui(modBase, 0) < 0))
5694 WerrorS(
"Wrong ground ring specification (module is 1)");
5697 if (modExponent < 1)
5699 WerrorS(
"Wrong ground ring specification (exponent smaller than 1");
5704 if (modExponent > 1 && cf ==
NULL)
5706 if ((mpz_cmp_ui(modBase, 2) == 0) && (modExponent <= 8*
sizeof(
unsigned long)))
5717 if (mpz_cmp_ui(modBase,0)==0)
5719 WerrorS(
"modulus must not be 0 or parameter not allowed");
5725 info.
exp= modExponent;
5730 else if (cf ==
NULL)
5732 if (mpz_cmp_ui(modBase,0)==0)
5734 WerrorS(
"modulus must not be 0 or parameter not allowed");
5740 info.
exp= modExponent;
5750 extParam.
r = (ring)pn->
Data();
5762 WerrorS(
"Wrong or unknown ground field specification");
5790 WerrorS(
"Invalid ground field specification");
5806 Werror(
"too many ring variables(%d), max is %d",l,MAX_SHORT);
5814 WerrorS(
"name of ring variable expected");
5867 int *perm=(
int *)
omAlloc0((org_ring->N+1)*
sizeof(int));
5875 Werror(
"too many ring variables(%d), max is %d",l,MAX_SHORT);
5884 WerrorS(
"name of ring variable expected");
5894 for(;
i<org_ring->N;
i++)
5896 if (strcmp(org_ring->names[
i],R->names[
j])==0)
5904 Werror(
"variable %d (%s) not in basering",
j+1,R->names[
j]);
5917 for(
j=R->block0[
i];j<=R->block1[
i];
j++)
5921 if (min_var==-1) min_var=perm[
j];
5929 R->block0[
i]=min_var;
5930 R->block1[
i]=max_var;
5931 if (R->wvhdl[
i]!=
NULL)
5934 R->wvhdl[
i]=(
int*)
omAlloc0((max_var-min_var+1)*
sizeof(int));
5935 for(
j=org_ring->block0[
i];j<=org_ring->block1[
i];
j++)
5939 R->wvhdl[
i][perm[
j]-R->block0[
i]]=
5940 org_ring->wvhdl[
i][
j-org_ring->block0[
i]];
5966 R->order[
j-1]=R->order[
j];
5967 R->block0[
j-1]=R->block0[
j];
5968 R->block1[
j-1]=R->block1[
j];
5970 R->wvhdl[
j-1]=R->wvhdl[
j];
5978 while (R->order[n]==0) n--;
5981 if (R->block1[n] != R->N)
5992 R->block0[n] <= R->N)
5994 R->block1[n] = R->N;
5998 Werror(
"mismatch of number of vars (%d) and ordering (%d vars) in block %d",
5999 R->N,R->block1[n],n);
6005 R->OrdSgn = org_ring->OrdSgn;
6028 if ((r->ref<=0)&&(r->order!=
NULL))
6033 if (r->qideal!=
NULL)
6043 if (j==0)
WarnS(
"killing the basering for level 0");
6048 while (r->idroot!=
NULL)
6051 killhdl2(r->idroot,&(r->idroot),r);
6146 resid=(ideal)(res.
data);
6199 ideal I=(ideal)u->
Data();
6202 for(i=I->nrows*I->ncols-1;i>=0;i--)
6214 switch (p->language)
6222 if(p->libname!=
NULL)
6223 Print(
",%s", p->libname);
6236 memset(&tmp_in,0,
sizeof(tmp_in));
6238 tmp_in.
data=(
void*)(
long)(*aa)[
i];
6242 bo=
jjPROC(&tmp_out,proc,&tmp_in);
6246 Werror(
"apply fails at index %d",
i+1);
6249 if (
i==0) { memcpy(res,&tmp_out,
sizeof(tmp_out)); }
6254 memcpy(curr,&tmp_out,
sizeof(tmp_out));
6276 for(
int i=0;
i<=aa->
nr;
i++)
6278 memset(&tmp_in,0,
sizeof(tmp_in));
6279 tmp_in.
Copy(&(aa->
m[
i]));
6283 bo=
jjPROC(&tmp_out,proc,&tmp_in);
6288 Werror(
"apply fails at index %d",
i+1);
6291 if (
i==0) { memcpy(res,&tmp_out,
sizeof(tmp_out)); }
6296 memcpy(curr,&tmp_out,
sizeof(tmp_out));
6303 memset(res,0,
sizeof(
sleftv));
6319 WerrorS(
"first argument to `apply` must allow an index");
6329 char assume_yylinebuf[80];
6331 int lev=(long)a->
Data();
6338 if (bo) {
WerrorS(
"syntax error in ASSUME");
return TRUE;}
6352 char *ss=(
char*)
omAlloc(strlen(a)+strlen(s)+30);
6354 int end_s=strlen(s);
6355 while ((end_s>0) && ((s[end_s]<=
' ')||(s[end_s]==
';'))) end_s--;
6357 char *
name=(
char *)
omAlloc(strlen(a)+strlen(s)+30);
6358 sprintf(name,
"%s->%s",a,s);
6360 int start_s=end_s-1;
6361 while ((start_s>=0) && (s[start_s]!=
';')) start_s--;
6364 sprintf(ss,
"parameter def %s;return(%s);\n",a,s);
6369 sprintf(ss,
"parameter def %s;%s;return(%s);\n",a,s,s+start_s+1);
6371 memset(r,0,
sizeof(*r));
6391 memset(&tmp,0,
sizeof(tmp));
6409 memset(&n,0,
sizeof(n));
6427 sprintf(buf,
"wrong length of parameters(%d), expected ",t);
6429 sprintf(buf,
"par. %d is of type `%s`, expected ",nr,
Tok2Cmdname(t));
6430 for(
int i=1;
i<=T[0];
i++)
6435 if (i<T[0]) strcat(buf,
",");
6444 if (type_list[0]==0)
return TRUE;
6447 if (report)
WerrorS(
"no arguments expected");
6452 if (l!=(
int)type_list[0])
6457 for(
int i=1;
i<=
l;
i++,args=args->
next)
6459 short t=type_list[
i];
6463 || (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)
#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)
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)
procinfo * iiInitSingularProcinfo(procinfov pi, const char *libname, const char *procname, int, long pos, BOOLEAN pstatic)
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)
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)
static unsigned pLength(poly a)
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)