12 #include <factory/factory.h> 113 case LE:
return "<=";
114 case GE:
return ">=";
123 if (s[1]==
'\0')
return s[0];
124 else if (s[2]!=
'\0')
return 0;
127 case '.':
if (s[1]==
'.')
return DOTDOT;
133 case '+':
if (s[1]==
'+')
return PLUSPLUS;
137 case '<':
if (s[1]==
'=')
return LE;
138 else if (s[1]==
'>')
return NOTEQUAL;
140 case '>':
if (s[1]==
'=')
return GE;
142 case '!':
if (s[1]==
'=')
return NOTEQUAL;
154 if(fullname) sprintf(buf2,
"%s::%s",
"",
IDID(h));
155 else sprintf(buf2,
"%s",
IDID(h));
193 && (strlen(
IDPROC(h)->libname)>0))
204 if ((s=strchr(buffer,
'\n'))!=
NULL)
210 if((s!=
NULL) ||(l>20))
212 Print(
"..., %d char(s)",l);
229 { number2 n=(number2)
IDDATA(h);
235 Print(
" %d x %d (%s)",
370 && (((ring)d)->idroot!=
NULL))
422 package savePack=currPack;
429 if (strcmp(what,
"all")==0)
441 if (iterate)
list1(prefix,h,
TRUE,fullname);
465 Werror(
"%s is undefined",what);
505 package save_p=currPack;
539 Warn(
"Gerhard, use the option command");
601 WerrorS(
"write: need at least two arguments");
609 if ((l!=
NULL)&&(l->name!=
NULL)) s=l->name;
611 Werror(
"cannot write to %s",s);
638 Werror(
"can not map from ground field of %s to current ground field",
642 if (
IDELEMS(theMap)<src_ring->N)
646 (src_ring->N)*
sizeof(
poly));
647 for(i=
IDELEMS(theMap);i<src_ring->N;i++)
653 WerrorS(
"argument of a map must have a name");
660 memset(&tmpW,0,
sizeof(
sleftv));
665 save_r=
IDMAP(w)->preimage;
666 IDMAP(w)->preimage=0;
675 ideal
id=(ideal)tmpW.
data;
677 for(
int i=
IDELEMS(
id)-1;i>=0;i--)
683 for(
int j=
IDELEMS(theMap)-1;
j>=0 && !overflow;
j--)
685 if (theMap->m[
j]!=
NULL)
689 for(
int i=
IDELEMS(
id)-1;i>=0;i--)
692 if ((p!=
NULL) && (degs[i]!=0) &&
693 ((
unsigned long)deg_monexp > (
currRing->bitmask / ((
unsigned long)degs[i])/2)))
705 for(
int j=
IDELEMS(theMap)-1;
j>=0 && !overflow;
j--)
707 if (theMap->m[
j]!=
NULL)
713 ((
unsigned long)deg_monexp > (
currRing->bitmask / ((
unsigned long)deg)/2)))
722 Warn(
"possible OVERFLOW in map, max exponent is %ld",
currRing->bitmask/2);
738 char *tmp = theMap->preimage;
739 theMap->preimage=(
char*)1L;
742 theMap->preimage=tmp;
750 if (save_r!=
NULL)
IDMAP(w)->preimage=save_r;
757 IDMAP(w)->preimage=save_r;
765 Werror(
"%s undefined in %s",what,theMap->preimage);
770 Werror(
"cannot find preimage %s",theMap->preimage);
782 char *
s=(
char *)
omAlloc(strlen(name)+5);
786 sprintf(s,
"%s(%d)",name,i+1);
796 Print(
"//defining: %s as %d-th syzygy module\n",s,i+1);
801 Warn(
"cannot define %s",s);
881 int add_row_shift = 0;
884 if (weights!=
NULL) add_row_shift=weights->
min_in();
899 memset(&tmp,0,
sizeof(tmp));
919 memset(&tmp2,0,
sizeof(tmp2));
943 add_row_shift = ww->
min_in();
944 (*weights) -= add_row_shift;
953 if (weights!=
NULL)
delete weights;
971 add_row_shift = ww->
min_in();
972 (*weights) -= add_row_shift;
977 if (weights!=
NULL)
delete weights;
980 return reg+1+add_row_shift;
984 #define BREAK_LINE_LENGTH 80 1011 else if(strncmp(s,
"cont;",5)==0)
1018 strcat( s,
"\n;~\n");
1089 res->
m[
i].
data = (
void *)save->set;
1099 for (i=hMu;i<hMu+
hMu2;i++)
1101 res->
m[
i].
data = (
void *)save->set;
1126 const char *
id = name->
name;
1128 memset(sy,0,
sizeof(
sleftv));
1131 WerrorS(
"object to declare is not a name");
1168 if (iiCurrProc!=
NULL)
1173 memset(&tmp,0,
sizeof(
sleftv));
1185 if (ll!=(l-1))
return FALSE;
1187 short *t=(
short*)
omAlloc(l*
sizeof(
short));
1191 for(i=1;i<
l;i++,h=h->
next)
1196 Werror(
"arg %d is not a string",i);
1200 b=
IsCmd((
char *)h->Data(),tt);
1205 Werror(
"arg %d is not a type name",i);
1212 Werror(
"last arg (%d) is not a proc",i);
1217 if (b && (h->rtyp==
IDHDL) && (h->e==
NULL))
1223 if(
pi->data.s.body==
NULL )
1237 if (iiCurrArgs!=
NULL)
1239 if (!err)
Warn(
"too many arguments for %s",
IDID(iiCurrProc));
1250 if (iiCurrArgs==
NULL)
1252 if (strcmp(p->
name,
"#")==0)
1261 if (strcmp(p->
name,
"#")==0)
1263 is_default_list=
TRUE;
1271 if (is_default_list)
1319 #ifdef USE_IILOCALRING 1339 if (keepring)
IDRING(h)->ref--;
1351 Warn(
"'%s': no such identifier\n", v->
name);
1354 package frompack=v->req_packhdl;
1369 if (h==frompack->idroot)
1371 frompack->idroot=h->
next;
1375 idhdl hh=frompack->idroot;
1376 while ((hh!=
NULL) && (hh->
next!=h))
1386 h->
next=rootpack->idroot;
1526 WarnS(
"package not found\n");
1559 r->order = (
int *)
omAlloc(3 *
sizeof(
int *));
1560 r->block0 = (
int *)
omAlloc0(3 *
sizeof(
int *));
1561 r->block1 = (
int *)
omAlloc0(3 *
sizeof(
int *));
1580 if (h!=
NULL)
return h;
1582 if (h!=
NULL)
return h;
1589 if (h!=
NULL)
return h;
1597 if (h!=
NULL)
return h;
1616 L->
m[0].
data=(
void *)(
long)r->cf->ch;
1622 for(i=0; i<r->N; i++)
1628 L->
m[1].
data=(
void *)LL;
1645 if (r->block1[i]-r->block0[i] >=0 )
1647 j=r->block1[
i]-r->block0[
i];
1650 if ((r->wvhdl!=
NULL) && (r->wvhdl[i]!=
NULL))
1652 for(;j>=0; j--) (*iv)[
j]=r->wvhdl[
i][
j];
1654 else switch (r->order[i])
1661 for(;j>=0; j--) (*iv)[
j]=1;
1671 LLL->
m[1].
data=(
void *)iv;
1672 LL->
m[
i].
data=(
void *)LLL;
1675 L->
m[2].
data=(
void *)LL;
1685 pSetCoeff0(q->m[0],(number)(r->qideal->m[0]));
1686 L->
m[3].
data=(
void *)q;
1706 L->
m[0].
data=(
void *)0;
1716 L->
m[1].
data=(
void *)LL;
1741 L->
m[0].
data=(
void *)0;
1751 L->
m[1].
data=(
void *)LL;
1786 LL->
m[1].
data=(
void *) C->modExponent;
1788 L->
m[1].
data=(
void *)LL;
1814 LL->
m[0].
data=
nlMapGMP((number) R->cf->modBase, R->cf, R->cf);
1816 LL->
m[1].
data=(
void *) R->cf->modExponent;
1818 L->
m[1].
data=(
void *)LL;
1831 WerrorS(
"ring with polynomial data must be the base ring or compatible");
1844 else if ( C->extRing!=
NULL )
1854 Lc->
m[0].
data=(
void*)(
long)C->m_nfCharQ;
1861 Lc->
m[1].
data=(
void*)Lv;
1872 Loo->
m[1].
data=(
void *)iv;
1875 Lo->
m[0].
data=(
void*)Loo;
1878 Lc->
m[2].
data=(
void*)Lo;
1884 res->
data=(
void*)Lc;
1889 res->
data=(
void *)(
long)C->ch;
1906 || (r->qideal !=
NULL)
1913 WerrorS(
"ring with polynomial data must be the base ring or compatible");
1931 L->
m[0].
data=(
char*)r->cf; r->cf->ref++;
1937 for(i=0; i<r->N; i++)
1940 LL->m[
i].data=(
void *)
omStrDup(r->names[i]);
1943 L->
m[1].
data=(
void *)LL;
1963 assume( r->block0[i] == r->block1[i] );
1964 const int s = r->block0[
i];
1965 assume( -2 < s && s < 2);
1970 else if (r->block1[i]-r->block0[i] >=0 )
1972 int bl=j=r->block1[
i]-r->block0[
i];
1980 j+=r->wvhdl[
i][bl+1];
1983 if ((r->wvhdl!=
NULL) && (r->wvhdl[i]!=
NULL))
1985 for(;j>=0; j--) (*iv)[
j]=r->wvhdl[
i][j+(j>bl)];
1987 else switch (r->order[i])
1994 for(;j>=0; j--) (*iv)[
j]=1;
2004 LLL->
m[1].
data=(
void *)iv;
2005 LL->m[
i].data=(
void *)LLL;
2008 L->
m[2].
data=(
void *)LL;
2012 if (r->qideal==
NULL)
2017 #ifdef HAVE_PLURAL // NC! in rDecompose 2039 || (r->qideal !=
NULL)
2046 WerrorS(
"ring with polynomial data must be the base ring or compatible");
2073 else if ( r->cf->extRing!=
NULL )
2083 Lc->
m[0].
data=(
void*)(
long)r->cf->m_nfCharQ;
2090 Lc->
m[1].
data=(
void*)Lv;
2101 Loo->
m[1].
data=(
void *)iv;
2104 Lo->
m[0].
data=(
void*)Loo;
2107 Lc->
m[2].
data=(
void*)Lo;
2113 L->
m[0].
data=(
void*)Lc;
2118 L->
m[0].
data=(
void *)(
long)r->cf->ch;
2125 for(i=0; i<r->N; i++)
2131 L->
m[1].
data=(
void *)LL;
2151 assume( r->block0[i] == r->block1[i] );
2152 const int s = r->block0[
i];
2153 assume( -2 < s && s < 2);
2158 else if (r->block1[i]-r->block0[i] >=0 )
2160 int bl=j=r->block1[
i]-r->block0[
i];
2168 j+=r->wvhdl[
i][bl+1];
2171 if ((r->wvhdl!=
NULL) && (r->wvhdl[i]!=
NULL))
2173 for(;j>=0; j--) (*iv)[
j]=r->wvhdl[
i][j+(j>bl)];
2175 else switch (r->order[i])
2182 for(;j>=0; j--) (*iv)[
j]=1;
2192 LLL->
m[1].
data=(
void *)iv;
2193 LL->
m[
i].
data=(
void *)LLL;
2196 L->
m[2].
data=(
void *)LL;
2200 if (r->qideal==
NULL)
2205 #ifdef HAVE_PLURAL // NC! in rDecompose 2224 Werror(
"invald coeff. field description, expecting 0");
2232 Werror(
"invald coeff. field description, expecting precision list");
2242 Werror(
"invald coeff. field description list");
2245 int r1=(int)(
long)LL->
m[0].
data;
2246 int r2=(int)(
long)LL->
m[1].
data;
2268 R->cf->float_len=
si_min(r1,32767);
2269 R->cf->float_len2=
si_min(r2,32767);
2278 Werror(
"invald coeff. field description, expecting parameter name");
2294 mpz_ptr modBase =
NULL;
2295 unsigned int modExponent = 1;
2297 modBase = (mpz_ptr)
omAlloc(
sizeof(mpz_t));
2300 mpz_init_set_ui(modBase,0);
2311 number tmp= (number) LL->
m[0].
data;
2317 mpz_init_set_ui(modBase,(
unsigned long) LL->
m[0].
data);
2321 mpz_init_set_ui(modBase,0);
2325 modExponent = (
unsigned long) LL->
m[1].
data;
2333 if ((mpz_cmp_ui(modBase, 1) == 0) && (mpz_cmp_ui(modBase, 0) < 0))
2335 Werror(
"Wrong ground ring specification (module is 1)");
2338 if (modExponent < 1)
2340 Werror(
"Wrong ground ring specification (exponent smaller than 1");
2344 if (mpz_cmp_ui(modBase, 0) == 0)
2349 else if (modExponent > 1)
2352 if ((mpz_cmp_ui(modBase, 2) == 0) && (modExponent <= 8*
sizeof(
unsigned long)))
2364 info.
exp= modExponent;
2375 info.
exp= modExponent;
2388 for(i=0;i<R->N-1;i++)
2390 for(j=i+1;j<R->N;j++)
2392 if (strcmp(R->names[i],R->names[j])==0)
2395 Warn(
"name conflict var(%d) and var(%d): `%s`, rename to `@%s`",i+1,j+1,R->names[i],R->names[i]);
2397 R->names[
j]=(
char *)
omAlloc(2+strlen(R->names[i]));
2398 sprintf(R->names[j],
"@%s",R->names[i]);
2404 for(i=0;i<
rPar(R); i++)
2410 Warn(
"name conflict par(%d) and var(%d): `%s`, renaming the VARIABLE to `@@(%d)`",i+1,j+1,R->names[j],i+1);
2416 sprintf(R->names[j],
"@@(%d)",i+1);
2448 Werror(
"var name %d must be a string or a ring variable",i+1);
2454 Werror(
"var name %d must be `string`",i+1);
2461 WerrorS(
"variable must be given as `list`");
2477 for (
int j=0;
j < n-1;
j++)
2484 &&(strcmp((
char*)vv->
m[0].
Data(),
"L")==0))
2486 number nn=(number)vv->
m[1].
Data();
2493 Werror(
"illegal argument for pseudo ordering L: %d",vv->
m[1].
Typ());
2500 if (bitmask!=0) n--;
2503 R->order=(
int *)
omAlloc0(n*
sizeof(
int));
2504 R->block0=(
int *)
omAlloc0(n*
sizeof(
int));
2505 R->block1=(
int *)
omAlloc0(n*
sizeof(
int));
2508 for (j_in_R= n-2; j_in_R>=0; j_in_R--)
2511 for(j_in_R=0,j_in_L=0;j_in_R<n-1;j_in_R++,j_in_L++)
2516 WerrorS(
"ordering must be list of lists");
2523 if (strcmp((
char*)vv->
m[0].
Data(),
"L")==0)
2531 WerrorS(
"ordering name must be a (string,intvec)(1)");
2536 if (j_in_R==0) R->block0[0]=1;
2553 if (jj<0) R->block0[j_in_R]=1;
2554 else R->block0[j_in_R]=R->block1[jj]+1;
2562 R->block1[j_in_R]=
si_max(R->block0[j_in_R],R->block0[j_in_R]+iv_len-1);
2563 if (R->block1[j_in_R]>R->N)
2565 R->block1[j_in_R]=R->N;
2566 iv_len=R->block1[j_in_R]-R->block0[j_in_R]+1;
2570 switch (R->order[j_in_R])
2579 R->wvhdl[j_in_R] =(
int *)
omAlloc(iv_len*
sizeof(
int));
2580 for (i=0; i<iv_len;i++)
2582 R->wvhdl[j_in_R][
i]=(*iv)[
i];
2586 R->wvhdl[j_in_R] =(
int *)
omAlloc((iv->
length()+1)*
sizeof(
int));
2587 for (i=0; i<iv_len;i++)
2589 R->wvhdl[j_in_R][
i]=(*iv)[
i];
2591 R->wvhdl[j_in_R][
i]=iv->
length() - iv_len;
2593 for (; i<iv->
length(); i++)
2595 R->wvhdl[j_in_R][i+1]=(*iv)[
i];
2599 R->wvhdl[j_in_R] =(
int *)
omAlloc((iv->
length())*
sizeof(
int));
2600 for (i=0; i<iv->
length();i++) R->wvhdl[j_in_R][i]=(*iv)[
i];
2601 R->block1[j_in_R]=
si_max(R->block0[j_in_R],R->block0[j_in_R]+(
int)
sqrt((
double)(iv->
length()-1)));
2602 if (R->block1[j_in_R]>R->N)
2604 WerrorS(
"ordering matrix too big");
2622 R->block1[j_in_R]=R->block0[j_in_R]=0;
2630 R->block1[j_in_R] = R->block0[j_in_R] = 0;
2633 const int s = (*iv)[0];
2634 assume( -2 < s && s < 2 );
2635 R->block1[j_in_R] = R->block0[j_in_R] =
s;
2648 WerrorS(
"ordering name must be a (string,intvec)");
2657 if (R->block1[j_in_R] != R->N)
2668 R->block0[j_in_R] <= R->N)
2670 R->block1[j_in_R] = R->N;
2674 Werror(
"ordering incomplete: size (%d) should be %d",R->block1[j_in_R],R->N);
2678 if (R->block0[j_in_R]>R->N)
2680 Werror(
"not enough variables (%d) for ordering block %d, scanned so far:",R->N,j_in_R+1);
2681 for(
int ii=0;ii<=j_in_R;ii++)
2682 Werror(
"ord[%d]: %s from v%d to v%d",ii+1,
rSimpleOrdStr(R->order[ii]),R->block0[ii],R->block1[ii]);
2696 R->order=(
int*)
omRealloc0Size(R->order,n*
sizeof(
int),(n+1)*
sizeof(
int));
2697 R->block0=(
int*)
omRealloc0Size(R->block0,n*
sizeof(
int),(n+1)*
sizeof(
int));
2698 R->block1=(
int*)
omRealloc0Size(R->block1,n*
sizeof(
int),(n+1)*
sizeof(
int));
2710 WerrorS(
"ordering must be given as `list`");
2713 if (bitmask!=0) R->bitmask=bitmask*2;
2748 int ch = (int)(
long)L->
m[0].
Data();
2758 Warn(
"%d is invalid characteristic of ground field. %d is used.", ch, l);
2781 int ch = (int)(
long)LL->
m[0].
Data();
2782 while ((ch!=
fftable[is_gf_char]) && (
fftable[is_gf_char])) is_gf_char++;
2783 if (
fftable[is_gf_char]==0) is_gf_char=-1;
2804 WerrorS(
"could not create the specified coefficient field");
2808 if( extRing->qideal !=
NULL )
2812 extParam.
r = extRing;
2819 extParam.
r = extRing;
2829 WerrorS(
"coefficient field must be described by `int` or `list`");
2835 WerrorS(
"could not create coefficient field described by the input!");
2853 ideal q=(ideal)L->
m[3].
Data();
2859 WerrorS(
"coefficient fields must be equal if q-ideal !=0");
2866 int par_perm_size=0;
2885 par_perm_size=
rPar(orig_ring);
2895 WerrorS(
"coefficient fields must be equal if q-ideal !=0");
2899 perm=(
int *)
omAlloc0((orig_ring->N+1)*
sizeof(int));
2900 if (par_perm_size!=0)
2901 par_perm=(
int *)
omAlloc0(par_perm_size*
sizeof(
int));
2905 maFindPerm(orig_ring->names,orig_ring->N,orig_ring->parameter,orig_ring->P,
2914 else if (par_perm_size!=0)
2919 for(i=
IDELEMS(q)-1; i>=0; i--)
2922 par_perm,par_perm_size);
2924 pTest(dest_id->m[i]);
2940 WerrorS(
"q-ideal must be given as `ideal`");
2968 while (i>=0) {
if (R->names[i]!=
NULL)
omFree(R->names[i]); i--; }
2989 ideal
id=(ideal)a->
Data();
2992 for (i=1; i<=
IDELEMS(
id); i++)
2999 res->
data=(
char *)result;
3009 int n=(int)(
long)b->
Data();
3010 int d=(int)(
long)c->
Data();
3017 if ((d>n) || (d<1) || (n<1))
3022 int *choise = (
int*)
omAlloc(d*
sizeof(
int));
3026 temp=(ideal)id->
Data();
3039 if (choise[l-1]<=
IDELEMS(temp))
3041 p =
pCopy(temp->m[choise[l-1]-1]);
3042 if (sign == -1) p =
pNeg(p);
3053 res->
data=(
char *)result;
3068 int add_row_shift=0;
3074 add_row_shift = ww->
min_in();
3075 (*weights) -= add_row_shift;
3088 memset(&tmp,0,
sizeof(tmp));
3102 const int length = syzstr->
length;
3104 if ((fullres==
NULL) && (minres==
NULL))
3130 for (
int i=(length)-1;
i>=0;
i--)
3142 for (
int i=length-1;
i>=0;
i--)
3193 if (toDel) li->
Clean();
3218 ideal F=(ideal)id->
Data();
3224 res->
data=(
char *)iv;
3228 double wNsqr = (double)2.0 / (
double)n;
3230 x = (
int * )
omAlloc(2 * (n + 1) *
sizeof(int));
3232 for (i = n; i!=0; i--)
3233 (*iv)[i-1] = x[i + n + 1];
3251 res->
data=(
void *)b;
3269 #ifdef HAVE_SPECTRUM 3277 spec.
mu = (int)(
long)(l->
m[0].
Data( ));
3278 spec.
pg = (int)(
long)(l->
m[1].
Data( ));
3279 spec.
n = (int)(
long)(l->
m[2].
Data( ));
3287 for(
int i=0;
i<spec.
n;
i++ )
3290 spec.
w[
i] = (*mul)[
i];
3321 for(
int i=0;
i<spec.
n;
i++ )
3325 (*mult)[
i] = spec.
w[
i];
3335 L->
m[0].
data = (
void*)(
long)spec.
mu;
3336 L->
m[1].
data = (
void*)(
long)spec.
pg;
3337 L->
m[2].
data = (
void*)(
long)spec.
n;
3338 L->
m[3].
data = (
void*)num;
3339 L->
m[4].
data = (
void*)den;
3340 L->
m[5].
data = (
void*)mult;
3388 WerrorS(
"the list is too short" );
3391 WerrorS(
"the list is too long" );
3395 WerrorS(
"first element of the list should be int" );
3398 WerrorS(
"second element of the list should be int" );
3401 WerrorS(
"third element of the list should be int" );
3404 WerrorS(
"fourth element of the list should be intvec" );
3407 WerrorS(
"fifth element of the list should be intvec" );
3410 WerrorS(
"sixth element of the list should be intvec" );
3414 WerrorS(
"first element of the list should be positive" );
3417 WerrorS(
"wrong number of numerators" );
3420 WerrorS(
"wrong number of denominators" );
3423 WerrorS(
"wrong number of multiplicities" );
3427 WerrorS(
"the Milnor number should be positive" );
3430 WerrorS(
"the geometrical genus should be nonnegative" );
3433 WerrorS(
"all numerators should be positive" );
3436 WerrorS(
"all denominators should be positive" );
3439 WerrorS(
"all multiplicities should be positive" );
3443 WerrorS(
"it is not symmetric" );
3446 WerrorS(
"it is not monotonous" );
3450 WerrorS(
"the Milnor number is wrong" );
3453 WerrorS(
"the geometrical genus is wrong" );
3457 WerrorS(
"unspecific error" );
3493 ( fast==2 ? 2 : 1 ) );
3503 ( fast==0 || (*node)->weight<=smax ) )
3525 cmp =
pCmp( (*node)->mon,f );
3548 (*node)->nf = search->
nf;
3552 while( cmp<0 && f!=(
poly)NULL );
3554 search = search->
next;
3565 if( (*node)->weight<=(
Rational)1 ) pg++;
3566 if( (*node)->weight==smax ) z++;
3567 if( (*node)->weight>weight_prev ) n++;
3569 weight_prev = (*node)->weight;
3570 node = &((*node)->next);
3592 cmp =
pCmp( (*node)->mon,f );
3607 search = search->
next;
3621 n = ( z > 0 ? 2*n - 1 : 2*n );
3636 ( fast==0 || search->
weight<=smax );
3637 search=search->
next )
3662 for( n1=0, n2=n-1; n1<n2; n1++, n2-- )
3665 (*den) [n2] = (*den)[n1];
3666 (*mult)[n2] = (*mult)[n1];
3674 if( fast==0 || fast==1 )
3678 for(
int n1=0, n2=n-1 ; n1<n2 && symmetric==
TRUE; n1++, n2-- )
3680 if( (*mult)[n1]!=(*mult)[n2] ||
3681 (*den) [n1]!= (*den)[n2] ||
3688 if( symmetric==
FALSE )
3698 (*L)->m[0].data = (
void*)(
long)
mu;
3715 (*L)->m[0].data = (
void*)(
long)
mu;
3716 (*L)->m[1].data = (
void*)(
long)pg;
3717 (*L)->m[2].data = (
void*)(
long)n;
3718 (*L)->m[3].data = (
void*)nom;
3719 (*L)->m[4].data = (
void*)den;
3720 (*L)->m[5].data = (
void*)mult;
3729 #ifdef SPECTRUM_DEBUG 3730 #ifdef SPECTRUM_PRINT 3731 #ifdef SPECTRUM_IOSTREAM 3732 cout <<
"spectrumCompute\n";
3733 if( fast==0 ) cout <<
" no optimization" << endl;
3734 if( fast==1 ) cout <<
" weight optimization" << endl;
3735 if( fast==2 ) cout <<
" symmetry optimization" << endl;
3737 fprintf( stdout,
"spectrumCompute\n" );
3738 if( fast==0 ) fprintf( stdout,
" no optimization\n" );
3739 if( fast==1 ) fprintf( stdout,
" weight optimization\n" );
3740 if( fast==2 ) fprintf( stdout,
" symmetry optimization\n" );
3784 #ifdef SPECTRUM_DEBUG 3785 #ifdef SPECTRUM_PRINT 3786 #ifdef SPECTRUM_IOSTREAM 3787 cout <<
"\n computing the Jacobi ideal...\n";
3789 fprintf( stdout,
"\n computing the Jacobi ideal...\n" );
3798 #ifdef SPECTRUM_DEBUG 3799 #ifdef SPECTRUM_PRINT 3800 #ifdef SPECTRUM_IOSTREAM 3803 fprintf( stdout,
" " );
3814 #ifdef SPECTRUM_DEBUG 3815 #ifdef SPECTRUM_PRINT 3816 #ifdef SPECTRUM_IOSTREAM 3818 cout <<
" computing a standard basis..." << endl;
3820 fprintf( stdout,
"\n" );
3821 fprintf( stdout,
" computing a standard basis...\n" );
3829 #ifdef SPECTRUM_DEBUG 3830 #ifdef SPECTRUM_PRINT 3831 for( i=0; i<
IDELEMS(stdJ); i++ )
3833 #ifdef SPECTRUM_IOSTREAM 3836 fprintf( stdout,
" " );
3881 #ifdef SPECTRUM_DEBUG 3882 #ifdef SPECTRUM_PRINT 3883 #ifdef SPECTRUM_IOSTREAM 3884 cout <<
"\n computing the highest corner...\n";
3886 fprintf( stdout,
"\n computing the highest corner...\n" );
3895 if( hc!=(
poly)NULL )
3910 #ifdef SPECTRUM_DEBUG 3911 #ifdef SPECTRUM_PRINT 3912 #ifdef SPECTRUM_IOSTREAM 3915 fprintf( stdout,
" " );
3925 #ifdef SPECTRUM_DEBUG 3926 #ifdef SPECTRUM_PRINT 3927 #ifdef SPECTRUM_IOSTREAM 3928 cout <<
"\n computing the newton polygon...\n";
3930 fprintf( stdout,
"\n computing the newton polygon...\n" );
3937 #ifdef SPECTRUM_DEBUG 3938 #ifdef SPECTRUM_PRINT 3947 #ifdef SPECTRUM_DEBUG 3948 #ifdef SPECTRUM_PRINT 3949 #ifdef SPECTRUM_IOSTREAM 3950 cout <<
"\n computing the weight corner...\n";
3952 fprintf( stdout,
"\n computing the weight corner...\n" );
3962 #ifdef SPECTRUM_DEBUG 3963 #ifdef SPECTRUM_PRINT 3964 #ifdef SPECTRUM_IOSTREAM 3967 fprintf( stdout,
" " );
3977 #ifdef SPECTRUM_DEBUG 3978 #ifdef SPECTRUM_PRINT 3979 #ifdef SPECTRUM_IOSTREAM 3980 cout <<
"\n computing NF...\n" << endl;
3982 fprintf( stdout,
"\n computing NF...\n" );
3991 #ifdef SPECTRUM_DEBUG 3992 #ifdef SPECTRUM_PRINT 3994 #ifdef SPECTRUM_IOSTREAM 3997 fprintf( stdout,
"\n" );
4022 WerrorS(
"polynomial is zero" );
4025 WerrorS(
"polynomial has constant term" );
4028 WerrorS(
"not a singularity" );
4031 WerrorS(
"the singularity is not isolated" );
4034 WerrorS(
"highest corner cannot be computed" );
4037 WerrorS(
"principal part is degenerate" );
4043 WerrorS(
"unknown error occurred" );
4060 WerrorS(
"only works for local orderings" );
4068 WerrorS(
"does not work in quotient rings" );
4081 result->
data = (
char*)L;
4114 WerrorS(
"only works for local orderings" );
4119 WerrorS(
"does not work in quotient rings" );
4132 result->
data = (
char*)L;
4178 else if( l->
nr > 5 )
4216 int mu = (int)(
long)(l->
m[0].
Data( ));
4217 int pg = (int)(
long)(l->
m[1].
Data( ));
4218 int n = (int)(
long)(l->
m[2].
Data( ));
4229 if( n != num->
length( ) )
4233 else if( n != den->
length( ) )
4237 else if( n != mul->
length( ) )
4257 for( i=0; i<n; i++ )
4259 if( (*num)[
i] <= 0 )
4263 if( (*den)[
i] <= 0 )
4267 if( (*mul)[
i] <= 0 )
4279 for( i=0, j=n-1; i<=
j; i++,j-- )
4282 (*den)[
i] != (*den)[
j] ||
4283 (*mul)[
i] != (*mul)[
j] )
4293 for( i=0, j=1; i<n/2; i++,j++ )
4295 if( (*num)[
i]*(*den)[
j] >= (*num)[
j]*(*den)[
i] )
4305 for( mu=0, i=0; i<n; i++ )
4310 if( mu != (
int)(long)(l->
m[0].
Data( )) )
4319 for( pg=0, i=0; i<n; i++ )
4321 if( (*num)[
i]<=(*den)[
i] )
4327 if( pg != (
int)(long)(l->
m[1].
Data( )) )
4356 WerrorS(
"first argument is not a spectrum:" );
4361 WerrorS(
"second argument is not a spectrum:" );
4394 int k = (int)(
long)second->
Data( );
4398 WerrorS(
"first argument is not a spectrum" );
4403 WerrorS(
"second argument should be positive" );
4440 WerrorS(
"first argument is not a spectrum" );
4445 WerrorS(
"second argument is not a spectrum" );
4469 memset(&tmp,0,
sizeof(tmp));
4488 WerrorS(
"Ground field not implemented!");
4508 LP->
m= (int)(
long)(v->
Data());
4514 LP->
n= (int)(
long)(v->
Data());
4520 LP->
m1= (int)(
long)(v->
Data());
4526 LP->
m2= (int)(
long)(v->
Data());
4532 LP->
m3= (int)(
long)(v->
Data());
4534 #ifdef mprDEBUG_PROT 4535 Print(
"m (constraints) %d\n",LP->
m);
4536 Print(
"n (columns) %d\n",LP->
n);
4560 lres->
m[4].
data=(
void*)(
long)LP->
m;
4563 lres->
m[5].
data=(
void*)(
long)LP->
n;
4565 res->
data= (
void*)lres;
4572 ideal gls = (ideal)(arg1->
Data());
4573 int imtype= (int)(
long)arg2->
Data();
4598 int howclean= (int)(
long)arg3->
Data();
4605 WerrorS(
"Ground field not implemented!");
4612 unsigned long int ii = (
unsigned long int)arg2->
Data();
4618 WerrorS(
"Input polynomial is constant!");
4646 if ( (vpos != i) && (
pGetExp( piter, i ) != 0) )
4648 WerrorS(
"The input polynomial must be univariate!");
4656 number * pcoeffs= (number *)
omAlloc( (deg+1) *
sizeof( number ) );
4658 for ( i= deg; i >= 0; i-- )
4673 #ifdef mprDEBUG_PROT 4674 for (i=deg; i >= 0; i--)
4682 roots->
solver( howclean );
4689 rlist->
Init( elem );
4693 for ( j= 0; j < elem; j++ )
4702 for ( j= 0; j < elem; j++ )
4706 rlist->
m[
j].
data=(
void *)dummy;
4720 res->
data= (
void*)rlist;
4729 p= (ideal)arg1->
Data();
4730 w= (ideal)arg2->
Data();
4741 int tdg= (int)(
long)arg3->
Data();
4748 WerrorS(
"Last input parameter must be > 0!");
4756 if ( m != (
int)
pow((
double)tdg+1,(
double)n) )
4758 Werror(
"Size of second input ideal must be equal to %d!",
4759 (
int)
pow((
double)tdg+1,(
double)n));
4766 WerrorS(
"Ground field not implemented!");
4771 number *pevpoint= (number *)
omAlloc( n *
sizeof( number ) );
4772 for ( i= 0; i < n; i++ )
4781 WerrorS(
"Elements of first input ideal must not be equal to -1, 0, 1!");
4790 WerrorS(
"Elements of first input ideal must be numbers!");
4793 pevpoint[
i]=
nCopy( tmp );
4797 number *wresults= (number *)
omAlloc( m *
sizeof( number ) );
4798 for ( i= 0; i <
m; i++ )
4807 WerrorS(
"Elements of second input ideal must be numbers!");
4822 res->
data= (
void*)rpoly;
4837 else gls= (ideal)(v->
Data());
4843 else imtype= (int)(
long)v->
Data();
4848 ideal test_id=
idInit(1,1);
4850 for(j=
IDELEMS(gls)-1;j>=0;j--)
4852 if (gls->m[j]!=
NULL)
4854 test_id->m[0]=gls->m[
j];
4858 WerrorS(
"Newton polytope not of expected dimension");
4872 unsigned long int ii=(
unsigned long int)v->
Data();
4880 else howclean= (int)(
long)v->
Data();
4909 WerrorS(
"Error occurred during matrix setup!");
4917 #ifdef mprDEBUG_PROT 4922 WerrorS(
"Unsuitable input ideal: Minor of resultant matrix is singular!");
4928 if ( interpolate_det )
4934 if ( interpolate_det )
4939 #ifdef mprDEBUG_PROT 4941 for (i=0; i < c; i++)
pWrite(iproots[i]->getPoly());
4943 for (i=0; i < c; i++)
pWrite(muiproots[i]->getPoly());
4947 arranger=
new rootArranger( iproots, muiproots, howclean );
4958 WerrorS(
"Solver was unable to find any roots!");
4964 for (i=0; i <
count; i++)
delete iproots[i];
4967 for (i=0; i <
count; i++)
delete muiproots[i];
4974 res->
data= (
void *)listofroots;
4986 int count=
self->roots[0]->getAnzRoots();
4987 int elem=
self->roots[0]->getAnzElems();
4991 if ( self->found_roots )
4993 listofroots->
Init( count );
4995 for (i=0; i <
count; i++)
4998 onepoint->
Init(elem);
4999 for ( j= 0; j < elem; j++ )
5015 listofroots->
m[
i].
data=(
void *)onepoint;
5023 listofroots->
Init( 0 );
5037 if (rg==
NULL)
return;
5057 Warn(
"deleting denom_list for ring change to %s",
IDID(h));
5069 if ((rg!=
NULL) && (rg->idroot==
NULL))
5097 if((*iv)[
i]>=0) { neg=
FALSE;
break; }
5102 (*iv)[
i]= - (*iv)[
i];
5111 if((*iv)[
i]>=0) { neg=
FALSE;
break; }
5116 (*iv)[
i]= -(*iv)[
i];
5125 if((*iv)[
i]!=1) { all_one=
FALSE;
break; }
5131 (*iv2)[2]=iv->
length()-2;
5143 if((*iv)[
i]!=1) { all_one=
FALSE;
break; }
5149 (*iv2)[2]=iv->
length()-2;
5183 (*iv)[2] += (*iv2)[2];
5190 if (!change) h=h->
next;
5198 int last = 0, o=0, n = 1,
i=0, typ = 1,
j;
5210 R->bitmask=(*iv)[2];
5223 WerrorS(
"invalid combination of orderings");
5231 WerrorS(
"more than one ordering c/C specified");
5236 R->order=(
int *)
omAlloc0(n*
sizeof(
int));
5237 R->block0=(
int *)
omAlloc0(n*
sizeof(
int));
5238 R->block1=(
int *)
omAlloc0(n*
sizeof(
int));
5241 int *weights=(
int*)
omAlloc0((R->N+1)*
sizeof(int));
5244 for (
j=0;
j < n-1;
j++)
5265 R->order[n] = (*iv)[1];
5275 R->block0[n] = last+1;
5278 R->wvhdl[n][
i-2] = (*iv)[
i];
5280 if (weights[last]==0) weights[
last]=(*iv)[
i]*typ;
5282 R->block1[n] =
si_min(last,R->N);
5293 R->block0[n] = last+1;
5294 if (iv->
length() == 3) last+=(*iv)[2];
5295 else last += (*iv)[0];
5296 R->block1[n] =
si_min(last,R->N);
5300 if (weights[
i]==0) weights[
i]=typ;
5312 const int s = (*iv)[2];
5322 const int s = (*iv)[2];
5324 if( 1 < s || s < -1 )
return TRUE;
5340 R->block0[n] = last+1;
5345 R->wvhdl[n][
i-2]=(*iv)[
i];
5347 if (weights[last]==0) weights[
last]=(*iv)[
i]*typ;
5349 last=R->block0[n]-1;
5354 R->block0[n] = last+1;
5357 if (R->block1[n]- R->block0[n]+2>=iv->
length())
5358 WarnS(
"missing module weights");
5359 for (
i=2;
i<=(R->block1[n]-R->block0[n]+2);
i++)
5361 R->wvhdl[n][
i-2]=(*iv)[
i];
5363 if (weights[last]==0) weights[
last]=(*iv)[
i]*typ;
5365 R->wvhdl[n][
i-2]=iv->
length() -3 -(R->block1[n]- R->block0[n]);
5368 R->wvhdl[n][
i-1]=(*iv)[
i];
5370 last=R->block0[n]-1;
5375 R->block0[n] = last+1;
5383 if (weights[last]==0) weights[
last]=(*iv)[
i]*typ;
5385 last=R->block0[n]-1;
5391 if (Mtyp==0)
return TRUE;
5392 if (Mtyp==-1) typ = -1;
5396 R->wvhdl[n][
i-2]=(*iv)[
i];
5398 R->block0[n] = last+1;
5400 R->block1[n] =
si_min(last,R->N);
5401 for(
i=R->block1[n];
i>=R->block0[n];
i--)
5403 if (weights[
i]==0) weights[
i]=typ;
5413 Werror(
"Internal Error: Unknown ordering %d", (*iv)[1]);
5420 Werror(
"mismatch of number of vars (%d) and ordering (>=%d vars)",
5428 for(
i=1;
i<=R->N;
i++)
5429 {
if (weights[
i]<0) { R->OrdSgn=-1;
break; }}
5443 if (R->block1[n] != R->N)
5454 R->block0[n] <= R->N)
5456 R->block1[n] = R->N;
5460 Werror(
"mismatch of number of vars (%d) and ordering (%d vars)",
5479 *p = (
char*)sl->
name;
5520 mpz_ptr modBase =
NULL;
5521 unsigned int modExponent = 1;
5553 WerrorS(
"parameter expected");
5559 extParam.
r =
rDefault( cf, pars, names);
5560 for(
int i=pars-1;
i>=0;
i--)
5574 int ch = (int)(
long)pn->
Data();
5585 if ((ch<2)||(ch!=ch2))
5587 Warn(
"%d is invalid as characteristic of the ground field. 32003 is used.", ch);
5602 if ((ch!=0) && (ch!=
IsPrime(ch)) && (pars == 1))
5614 if ((ch!=0) && (ch!=
IsPrime(ch)))
5616 WerrorS(
"too many parameters");
5624 WerrorS(
"parameter expected");
5630 extParam.
r =
rDefault( ch, pars, names);
5631 for(
int i=pars-1;
i>=0;
i--)
5645 && ((strcmp(pn->
name,
"real")==0) || (strcmp(pn->
name,
"complex")==0)))
5648 BOOLEAN complex_flag=(strcmp(pn->
name,
"complex")==0);
5651 float_len=(int)(
long)pnn->
Data();
5652 float_len2=float_len;
5656 float_len2=(int)(
long)pnn->
Data();
5675 if (param.
float_len < SHORT_REAL_LENGTH)
5691 else if ((pn->
name !=
NULL) && (strcmp(pn->
name,
"integer") == 0))
5694 modBase = (mpz_ptr)
omAlloc(
sizeof(mpz_t));
5695 mpz_init_set_si(modBase, 0);
5702 mpz_set_ui(modBase, (
int)(
long) pnn->
Data());
5706 modExponent = (long) pnn->
Data();
5711 mpz_mul_ui(modBase, modBase, (
int)(
long) pnn->
Data());
5724 if ((mpz_cmp_ui(modBase, 1) == 0) && (mpz_cmp_ui(modBase, 0) < 0))
5726 Werror(
"Wrong ground ring specification (module is 1)");
5729 if (modExponent < 1)
5731 Werror(
"Wrong ground ring specification (exponent smaller than 1");
5736 if (modExponent > 1 && cf ==
NULL)
5738 if ((mpz_cmp_ui(modBase, 2) == 0) && (modExponent <= 8*
sizeof(
unsigned long)))
5749 if (mpz_cmp_ui(modBase,0)==0)
5751 WerrorS(
"modulus must not be 0 or parameter not allowed");
5757 info.
exp= modExponent;
5762 else if (cf ==
NULL)
5764 if (mpz_cmp_ui(modBase,0)==0)
5766 WerrorS(
"modulus must not be 0 or parameter not allowed");
5772 info.
exp= modExponent;
5782 extParam.
r = (ring)pn->
Data();
5788 extParam.
r = (ring)pn->
Data();
5794 Werror(
"Wrong or unknown ground field specification");
5821 Werror(
"Invalid ground field specification");
5837 Werror(
"too many ring variables(%d), max is %d",l,MAX_SHORT);
5845 WerrorS(
"name of ring variable expected");
5898 int *
perm=(
int *)
omAlloc0((org_ring->N+1)*
sizeof(int));
5906 Werror(
"too many ring variables(%d), max is %d",l,MAX_SHORT);
5915 WerrorS(
"name of ring variable expected");
5925 for(;
i<org_ring->N;
i++)
5927 if (strcmp(org_ring->names[
i],R->names[
j])==0)
5935 Werror(
"variable %d (%s) not in basering",
j+1,R->names[
j]);
5948 for(
j=R->block0[
i];j<=R->block1[
i];
j++)
5952 if (min_var==-1) min_var=perm[
j];
5960 R->block0[
i]=min_var;
5961 R->block1[
i]=max_var;
5962 if (R->wvhdl[
i]!=
NULL)
5965 R->wvhdl[
i]=(
int*)
omAlloc0((max_var-min_var+1)*
sizeof(int));
5966 for(
j=org_ring->block0[
i];j<=org_ring->block1[
i];
j++)
5970 R->wvhdl[
i][perm[
j]-R->block0[
i]]=
5971 org_ring->wvhdl[
i][
j-org_ring->block0[
i]];
5997 R->order[
j-1]=R->order[
j];
5998 R->block0[
j-1]=R->block0[
j];
5999 R->block1[
j-1]=R->block1[
j];
6001 R->wvhdl[
j-1]=R->wvhdl[
j];
6009 while (R->order[n]==0) n--;
6012 if (R->block1[n] != R->N)
6023 R->block0[n] <= R->N)
6025 R->block1[n] = R->N;
6029 Werror(
"mismatch of number of vars (%d) and ordering (%d vars) in block %d",
6030 R->N,R->block1[n],n);
6036 R->OrdSgn = org_ring->OrdSgn;
6059 if ((r->ref<=0)&&(r->order!=
NULL))
6064 if (r->qideal!=
NULL)
6070 #ifdef USE_IILOCALRING 6075 if (j+1==myynest)
Warn(
"killing the basering for level %d",j);
6085 for(; nshdl !=
NULL; nshdl = nshdl->
next)
6087 if (nshdl->
cRing==r)
6089 Warn(
"killing the basering for level %d",lev);
6097 while (r->idroot!=
NULL)
6100 killhdl2(r->idroot,&(r->idroot),r);
6196 resid=(ideal)(res.
data);
6249 ideal I=(ideal)u->
Data();
6252 for(i=I->nrows*I->ncols-1;i>=0;i--)
6264 switch (p->language)
6272 if(p->libname!=
NULL)
6273 Print(
",%s", p->libname);
6286 memset(&tmp_in,0,
sizeof(tmp_in));
6288 tmp_in.
data=(
void*)(
long)(*aa)[
i];
6292 bo=
jjPROC(&tmp_out,proc,&tmp_in);
6296 Werror(
"apply fails at index %d",
i+1);
6299 if (
i==0) { memcpy(res,&tmp_out,
sizeof(tmp_out)); }
6304 memcpy(curr,&tmp_out,
sizeof(tmp_out));
6326 for(
int i=0;
i<=aa->
nr;
i++)
6328 memset(&tmp_in,0,
sizeof(tmp_in));
6329 tmp_in.
Copy(&(aa->
m[
i]));
6333 bo=
jjPROC(&tmp_out,proc,&tmp_in);
6338 Werror(
"apply fails at index %d",
i+1);
6341 if (
i==0) { memcpy(res,&tmp_out,
sizeof(tmp_out)); }
6346 memcpy(curr,&tmp_out,
sizeof(tmp_out));
6353 memset(res,0,
sizeof(
sleftv));
6369 WerrorS(
"first argument to `apply` must allow an index");
6379 char assume_yylinebuf[80];
6381 int lev=(long)a->
Data();
6388 if (bo) {
WerrorS(
"syntax error in ASSUME");
return TRUE;}
6402 char *ss=(
char*)
omAlloc(strlen(a)+strlen(s)+30);
6404 int end_s=strlen(s);
6405 while ((end_s>0) && ((s[end_s]<=
' ')||(s[end_s]==
';'))) end_s--;
6407 char *
name=(
char *)
omAlloc(strlen(a)+strlen(s)+30);
6408 sprintf(name,
"%s->%s",a,s);
6410 int start_s=end_s-1;
6411 while ((start_s>=0) && (s[start_s]!=
';')) start_s--;
6414 sprintf(ss,
"parameter def %s;return(%s);\n",a,s);
6419 sprintf(ss,
"parameter def %s;%s;return(%s);\n",a,s,s+start_s+1);
6421 memset(r,0,
sizeof(*r));
6441 memset(&tmp,0,
sizeof(tmp));
6460 memset(&n,0,
sizeof(n));
6479 sprintf(buf,
"wrong length of parameters(%d), expected ",t);
6481 sprintf(buf,
"par. %d is of type `%s`, expected ",nr,
Tok2Cmdname(t));
6482 for(
int i=1;
i<=T[0];
i++)
6487 if (i<T[0]) strcat(buf,
",");
6496 if (type_list[0]==0)
return TRUE;
6499 if (report)
WerrorS(
"no arguments expected");
6504 if (l!=(
int)type_list[0])
6509 for(
int i=1;
i<=
l;
i++,args=args->
next)
6511 short t=type_list[
i];
6515 || (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)
virtual IStateType initState() const
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)
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)
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)
char name(const Variable &v)
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)
syStrategy syConvList(lists li, BOOLEAN toDel)
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...
#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)
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)