10#include "factory/factory.h"
114 case LE:
return "<=";
115 case GE:
return ">=";
124 if (
s[1]==
'\0')
return s[0];
125 else if (
s[2]!=
'\0')
return 0;
128 case '.':
if (
s[1]==
'.')
return DOTDOT;
134 case '+':
if (
s[1]==
'+')
return PLUSPLUS;
138 case '<':
if (
s[1]==
'=')
return LE;
141 case '>':
if (
s[1]==
'=')
return GE;
143 case '!':
if (
s[1]==
'=')
return NOTEQUAL;
155 if(fullname) sprintf(
buf2,
"%s::%s",
"",
IDID(
h));
199 && (strlen(
IDPROC(
h)->libname)>0))
210 memset(buffer,0,
sizeof(buffer));
212 if ((
s=strchr(buffer,
'\n'))!=
NULL)
220 Print(
"..., %d char(s)",
l);
237 { number2 n=(number2)
IDDATA(
h);
243 Print(
" %d x %d (%s)",
269 ((
intvec*)(
v->Data()))->cols());
break;
273 case MODUL_CMD:
Print(
", rk %d\n", (
int)(((ideal)(
v->Data()))->rank));
break;
376 && (((ring)d)->idroot!=
NULL))
402 if (((ring)
h->data)->idroot!=
NULL)
427 package savePack=currPack;
434 if (strcmp(what,
"all")==0)
469 Werror(
"%s is undefined",what);
503 package save_p=currPack;
537 WarnS(
"Gerhard, use the option command");
567 rc += ((
intvec *)(
v->Data()))->length();
578 rc+=((
lists)
v->Data())->nr+1;
599 WerrorS(
"write: need at least two arguments");
609 Werror(
"cannot write to %s",
s);
636 Werror(
"can not map from ground field of %s to current ground field",
640 if (
IDELEMS(theMap)<src_ring->N)
644 (src_ring->N)*
sizeof(poly));
654 short src_lV = src_ring->isLPring;
655 short src_ncGenCount = src_ring->LPncGenCount;
656 short src_nVars = src_lV - src_ncGenCount;
657 int src_nblocks = src_ring->N / src_lV;
660 short dest_ncGenCount =
currRing->LPncGenCount;
663 for(
i=
IDELEMS(theMap);
i < src_lV - src_ncGenCount;
i++)
671 if (theMap->m[
i] !=
NULL)
679 for(
i = src_nVars;
i < src_lV;
i++)
681 short ncGenIndex =
i - src_nVars;
682 if (ncGenIndex < dest_ncGenCount)
696 for(
i = 1;
i < src_nblocks;
i++)
698 for(
int j = 0;
j < src_lV;
j++)
716 WerrorS(
"argument of a map must have a name");
728 save_r=
IDMAP(
w)->preimage;
738 ideal
id=(ideal)tmpW.
data;
746 for(
int j=
IDELEMS(theMap)-1;
j>=0 && !overflow;
j--)
748 if (theMap->m[
j]!=
NULL)
755 if ((
p!=
NULL) && (degs[
i]!=0) &&
756 ((
unsigned long)deg_monexp > (
currRing->bitmask / ((
unsigned long)degs[
i])/2)))
768 for(
int j=
IDELEMS(theMap)-1;
j>=0 && !overflow;
j--)
770 if (theMap->m[
j]!=
NULL)
773 poly
p=(poly)tmpW.
data;
776 ((
unsigned long)deg_monexp > (
currRing->bitmask / ((
unsigned long)deg)/2)))
790 Warn(
"possible OVERFLOW in map, max exponent is %ld",
currRing->bitmask/2);
809 char *tmp = theMap->preimage;
810 theMap->preimage=(
char*)1L;
813 theMap->preimage=tmp;
828 IDMAP(
w)->preimage=save_r;
836 Werror(
"%s undefined in %s",what,theMap->preimage);
841 Werror(
"cannot find preimage %s",theMap->preimage);
857 sprintf(
s,
"%s(%d)",
name,
i+1);
864 h->data.uideal=(ideal)L->
m[
i].
data;
867 Print(
"//defining: %s as %d-th syzygy module\n",
s,
i+1);
872 Warn(
"cannot define %s",
s);
952 int add_row_shift = 0;
955 if (weights!=
NULL) add_row_shift=weights->
min_in();
984 l->m[0].rtyp=u->
Typ();
985 l->m[0].data=u->
Data();
988 l->m[0].attribute=*a;
995 l->m[0].attribute=
NULL;
1009 int add_row_shift=0;
1015 add_row_shift = ww->
min_in();
1016 (*weights) -= add_row_shift;
1023 res->data=(
void*)res_im;
1026 for(
int i=1;
i<=res_im->
rows();
i++)
1028 if (
IMATELEM(*res_im,1,
i)==0) { add_row_shift--; }
1033 if (weights!=
NULL)
delete weights;
1046 int add_row_shift=0;
1051 add_row_shift = ww->
min_in();
1052 (*weights) -= add_row_shift;
1057 if (weights!=
NULL)
delete weights;
1060 return reg+1+add_row_shift;
1064#define BREAK_LINE_LENGTH 80
1091 else if(strncmp(
s,
"cont;",5)==0)
1098 strcat(
s,
"\n;~\n");
1164 res->m[
i].data = (
void *)save->set;
1176 res->m[
i].data = (
void *)save->set;
1202 const char *
id =
name->name;
1207 WerrorS(
"object to declare is not a name");
1217 Werror(
"can not define `%s` in other package",
name->name);
1278 WerrorS(
"branchTo can only occur in a proc");
1286 if (ll!=(
l-1))
return FALSE;
1289 short *t=(
short*)
omAlloc(
l*
sizeof(
short));
1293 for(
i=1;
i<
l;
i++,
h=
h->next)
1298 Werror(
"arg %d is not a string",
i);
1302 b=
IsCmd((
char *)
h->Data(),tt);
1307 Werror(
"arg %d is not a type name",
i);
1314 Werror(
"last(%d.) arg.(%s) is not a proc(but %s(%d)), nesting=%d",
1327 if(
pi->data.s.body==
NULL )
1356 if (err==0)
Warn(
"too many arguments for %s",
IDID(currProc));
1380 if (strcmp(
p->name,
"#")==0)
1389 if (strcmp(
p->name,
"#")==0)
1391 is_default_list=
TRUE;
1399 if (is_default_list)
1452 WerrorS(
"object with a different type exists");
1470 Warn(
"'%s': no such identifier\n",
v->
name);
1473 package frompack=v->req_packhdl;
1487 v->req_packhdl=rootpack;
1488 if (
h==frompack->idroot)
1490 frompack->idroot=
h->next;
1494 idhdl hh=frompack->idroot;
1501 Werror(
"`%s` not found",
v->Name());
1505 h->next=rootpack->idroot;
1519 Werror(
"cannot export:%s of internal type %d",
v->
name,
v->rtyp);
1545 Werror(
"cannot export:%s of internal type %d",
v->
name,
v->rtyp);
1558 else if (
IDTYP(old)==
v->Typ())
1596 WerrorS(
"no ring active (9)");
1638 WarnS(
"package not found\n");
1659 #ifndef TEST_ZN_AS_ZP
1663 mpz_init_set_ui(modBase, (
long)32003);
1670 r->cf->has_simple_Inverse=1;
1683 r->block0 = (
int *)
omAlloc0(3 *
sizeof(
int *));
1684 r->block1 = (
int *)
omAlloc0(3 *
sizeof(
int *));
1703 if ((r==
NULL)||(r->VarOffset==
NULL))
1742 L->
m[0].
data=(
void *)(
long)r->cf->ch;
1748 for(
i=0;
i<r->N;
i++)
1754 L->
m[1].
data=(
void *)LL;
1771 if (r->block1[
i]-r->block0[
i] >=0 )
1773 j=r->block1[
i]-r->block0[
i];
1776 if ((r->wvhdl!=
NULL) && (r->wvhdl[
i]!=
NULL))
1778 for(;
j>=0;
j--) (*iv)[
j]=r->wvhdl[
i][
j];
1780 else switch (r->order[
i])
1789 for(;
j>=0;
j--) (*iv)[
j]=1;
1799 LLL->
m[1].
data=(
void *)iv;
1800 LL->
m[
i].
data=(
void *)LLL;
1803 L->
m[2].
data=(
void *)LL;
1814 L->
m[3].
data=(
void *)q;
1833 L->
m[0].
data=(
void *)0;
1843 L->
m[1].
data=(
void *)LL;
1867 L->
m[0].
data=(
void *)0;
1877 L->
m[1].
data=(
void *)LL;
1911 LL->
m[1].
data=(
void *) C->modExponent;
1913 L->
m[1].
data=(
void *)LL;
1940 LL->
m[1].
data=(
void *)
R->cf->modExponent;
1942 L->
m[1].
data=(
void *)LL;
1956 WerrorS(
"ring with polynomial data must be the base ring or compatible");
1969 else if ( C->extRing!=
NULL )
1979 Lc->m[0].data=(
void*)(
long)C->m_nfCharQ;
1986 Lc->m[1].data=(
void*)Lv;
1997 Loo->
m[1].
data=(
void *)iv;
2000 Lo->
m[0].
data=(
void*)Loo;
2003 Lc->m[2].data=(
void*)Lo;
2009 res->data=(
void*)
Lc;
2014 res->data=(
void *)(
long)C->ch;
2028 for(
i=0;
i<r->N;
i++)
2034 L->
m[1].
data=(
void *)LL;
2055 assume( r->block0[
i] == r->block1[
i] );
2056 const int s = r->block0[
i];
2062 else if (r->block1[
i]-r->block0[
i] >=0 )
2064 int bl=
j=r->block1[
i]-r->block0[
i];
2072 j+=r->wvhdl[
i][bl+1];
2075 if ((r->wvhdl!=
NULL) && (r->wvhdl[
i]!=
NULL))
2077 for(;
j>=0;
j--) (*iv)[
j]=r->wvhdl[
i][
j+(
j>bl)];
2079 else switch (r->order[
i])
2088 for(;
j>=0;
j--) (*iv)[
j]=1;
2098 LLL->
m[1].
data=(
void *)iv;
2099 LL->
m[
i].
data=(
void *)LLL;
2102 L->
m[2].
data=(
void *)LL;
2106 if (r->qideal==
NULL)
2137 WerrorS(
"ring with polynomial data must be the base ring or compatible");
2155 L->
m[0].
data=(
char*)r->cf; r->cf->ref++;
2170 || (r->qideal !=
NULL)
2177 WerrorS(
"ring with polynomial data must be the base ring or compatible");
2202 else if ( r->cf->extRing!=
NULL )
2212 Lc->m[0].data=(
void*)(
long)r->cf->m_nfCharQ;
2219 Lc->m[1].data=(
void*)Lv;
2230 Loo->
m[1].
data=(
void *)iv;
2233 Lo->
m[0].
data=(
void*)Loo;
2236 Lc->m[2].data=(
void*)Lo;
2247 L->
m[0].
data=(
void *)(
long)r->cf->ch;
2252 L->
m[0].
data=(
void *)r->cf;
2267 WerrorS(
"invalid coeff. field description, expecting 0");
2275 WerrorS(
"invalid coeff. field description, expecting precision list");
2283 WerrorS(
"invalid coeff. field description list, expected list(`int`,`int`)");
2286 int r1=(int)(
long)LL->
m[0].
data;
2287 int r2=(int)(
long)LL->
m[1].
data;
2297 WerrorS(
"invalid coeff. field description, expecting parameter name");
2319 unsigned int modExponent = 1;
2323 mpz_init_set_ui(modBase,0);
2334 number tmp= (number) LL->
m[0].
data;
2341 mpz_init_set_ui(modBase,(
unsigned long) LL->
m[0].
data);
2345 mpz_init_set_ui(modBase,0);
2349 modExponent = (
unsigned long) LL->
m[1].
data;
2357 if ((mpz_cmp_ui(modBase, 1) == 0) && (
mpz_sgn1(modBase) < 0))
2359 WerrorS(
"Wrong ground ring specification (module is 1)");
2362 if (modExponent < 1)
2364 WerrorS(
"Wrong ground ring specification (exponent smaller than 1)");
2373 else if (modExponent > 1)
2376 if ((mpz_cmp_ui(modBase, 2) == 0) && (modExponent <= 8*
sizeof(
unsigned long)))
2387 info.exp= modExponent;
2398 info.exp= modExponent;
2412 for(
i=0;
i<
R->N-1;
i++)
2414 for(
j=
i+1;
j<
R->N;
j++)
2416 if (strcmp(
R->names[
i],
R->names[
j])==0)
2421 R->names[
j]=(
char *)
omAlloc(2+strlen(
R->names[
i]));
2422 sprintf(
R->names[
j],
"@%s",
R->names[
i]);
2440 sprintf(
R->names[
j],
"@@(%d)",
i+1);
2466 poly
p=(poly)
v->m[
i].Data();
2472 Werror(
"var name %d must be a string or a ring variable",
i+1);
2478 Werror(
"var name %d must be `string` (not %d)",
i+1,
v->m[
i].Typ());
2485 WerrorS(
"variable must be given as `list`");
2501 for (
int j=0;
j < n-1;
j++)
2508 &&(strcmp((
char*)vv->
m[0].
Data(),
"L")==0))
2510 number nn=(number)vv->
m[1].
Data();
2517 Werror(
"illegal argument for pseudo ordering L: %d",vv->
m[1].
Typ());
2524 if (bitmask!=0) n--;
2528 R->block0=(
int *)
omAlloc0((n+1)*
sizeof(int));
2529 R->block1=(
int *)
omAlloc0((n+1)*
sizeof(int));
2532 for (j_in_R= n-2; j_in_R>=0; j_in_R--)
2535 for(j_in_R=0,j_in_L=0;j_in_R<n-1;j_in_R++,j_in_L++)
2540 WerrorS(
"ordering must be list of lists");
2547 if (strcmp((
char*)vv->
m[0].
Data(),
"L")==0)
2561 if (j_in_R==0)
R->block0[0]=1;
2578 if (jj<0)
R->block0[j_in_R]=1;
2579 else R->block0[j_in_R]=
R->block1[jj]+1;
2586 for(
int i=0;
i<
l;
i++) (*iv)[
i]=1;
2605 R->block1[j_in_R]=
si_max(
R->block0[j_in_R],
R->block0[j_in_R]+iv_len-1);
2606 if (
R->block1[j_in_R]>
R->N)
2608 if (
R->block0[j_in_R]>
R->N)
2613 R->block1[j_in_R]=
R->N;
2614 iv_len=
R->block1[j_in_R]-
R->block0[j_in_R]+1;
2619 switch (
R->order[j_in_R])
2628 R->wvhdl[j_in_R] =(
int *)
omAlloc(iv_len*
sizeof(
int));
2629 for (
i=0;
i<iv_len;
i++)
2631 R->wvhdl[j_in_R][
i]=(*iv)[
i];
2636 for (
i=0;
i<iv_len;
i++)
2638 R->wvhdl[j_in_R][
i]=(*iv)[
i];
2640 R->wvhdl[j_in_R][
i]=iv->
length() - iv_len;
2644 R->wvhdl[j_in_R][
i+1]=(*iv)[
i];
2649 for (
i=0;
i<iv->
length();
i++)
R->wvhdl[j_in_R][
i]=(*iv)[
i];
2650 R->block1[j_in_R]=
si_max(
R->block0[j_in_R],
R->block0[j_in_R]+(
int)
sqrt((
double)(iv->
length())));
2651 if (
R->block1[j_in_R]>
R->N)
2653 R->block1[j_in_R]=
R->N;
2666 for (
i=0;
i<iv_len;
i++)
2668 if (((*iv)[
i]!=1)&&(iv_len!=1))
2671 Warn(
"ignore weight %d for ord %d (%s) at pos %d\n>>%s<<",
2682 R->block1[j_in_R]=
R->block0[j_in_R]=0;
2686 R->block1[j_in_R]=
R->block0[j_in_R]=(*iv)[0];
2692 R->block1[j_in_R] =
R->block0[j_in_R] = 0;
2695 const int s = (*iv)[0];
2697 R->block1[j_in_R] =
R->block0[j_in_R] =
s;
2706 WerrorS(
"ring order not implemented");
2714 WerrorS(
"ordering name must be a (string,intvec)");
2723 if (
R->block1[j_in_R] !=
R->N)
2734 R->block0[j_in_R] <=
R->N)
2736 R->block1[j_in_R] =
R->N;
2740 Werror(
"ordering incomplete: size (%d) should be %d",
R->block1[j_in_R],
R->N);
2744 if (
R->block0[j_in_R]>
R->N)
2746 Werror(
"not enough variables (%d) for ordering block %d, scanned so far:",
R->N,j_in_R+1);
2747 for(
int ii=0;ii<=j_in_R;ii++)
2776 WerrorS(
"ordering must be given as `list`");
2779 if (bitmask!=0) {
R->bitmask=bitmask;
R->wanted_maxExp=bitmask; }
2811 int ch = (int)(
long)L->
m[0].
Data();
2821 Warn(
"%d is invalid characteristic of ground field. %d is used.", ch,
l);
2824 #ifndef TEST_ZN_AS_ZP
2828 mpz_init_set_ui(modBase,(
long) ch);
2835 R->cf->has_simple_Inverse=1;
2856 int ch = (int)(
long)LL->
m[0].
Data();
2857 while ((ch!=
fftable[is_gf_char]) && (
fftable[is_gf_char])) is_gf_char++;
2858 if (
fftable[is_gf_char]==0) is_gf_char=-1;
2879 WerrorS(
"could not create the specified coefficient field");
2883 if( extRing->qideal !=
NULL )
2887 extParam.
r = extRing;
2894 extParam.
r = extRing;
2903 WerrorS(
"coefficient field must be described by `int` or `list`");
2909 WerrorS(
"could not create coefficient field described by the input!");
2921 #ifdef HAVE_SHIFTBBA
2924 R->isLPring=isLetterplace;
2929 if ((bitmask!=0)&&(
R->wanted_maxExp==0))
R->wanted_maxExp=bitmask;
2936 ideal q=(ideal)L->
m[3].
Data();
2942 WerrorS(
"coefficient fields must be equal if q-ideal !=0");
2949 int par_perm_size=0;
2969 par_perm_size=
rPar(orig_ring);
2979 WerrorS(
"coefficient fields must be equal if q-ideal !=0");
2983 perm=(
int *)
omAlloc0((orig_ring->N+1)*
sizeof(int));
2984 if (par_perm_size!=0)
2985 par_perm=(
int *)
omAlloc0(par_perm_size*
sizeof(
int));
2989 maFindPerm(orig_ring->names,orig_ring->N,orig_ring->parameter,orig_ring->P,
2998 else if (par_perm_size!=0)
3006 par_perm,par_perm_size);
3024 WerrorS(
"q-ideal must be given as `ideal`");
3073 ideal
id=(ideal)a->
Data();
3093 int n=(int)(
long)
b->Data();
3094 int d=(int)(
long)c->
Data();
3101 if ((d>n) || (d<1) || (n<1))
3106 int *choise = (
int*)
omAlloc(d*
sizeof(
int));
3110 temp=(ideal)id->
Data();
3125 p =
pCopy(temp->m[choise[
l-1]-1]);
3151 BOOLEAN minim=(int)(
long)
w->Data();
3153 int add_row_shift=0;
3159 add_row_shift = ww->
min_in();
3160 (*weights) -= add_row_shift;
3189 if ((fullres==
NULL) && (minres==
NULL))
3303 ideal F=(ideal)id->
Data();
3309 res->data=(
char *)iv;
3313 double wNsqr = (double)2.0 / (
double)n;
3315 x = (
int * )
omAlloc(2 * (n + 1) *
sizeof(int));
3317 for (
i = n;
i!=0;
i--)
3318 (*iv)[
i-1] =
x[
i + n + 1];
3336 res->data=(
void *)
b;
3362 spec.
mu = (int)(
long)(
l->m[0].Data( ));
3363 spec.
pg = (int)(
long)(
l->m[1].Data( ));
3364 spec.
n = (int)(
long)(
l->m[2].Data( ));
3372 for(
int i=0;
i<spec.
n;
i++ )
3375 spec.
w[
i] = (*mul)[
i];
3406 for(
int i=0;
i<spec.
n;
i++ )
3410 (*mult)[
i] = spec.
w[
i];
3420 L->
m[0].
data = (
void*)(
long)spec.
mu;
3421 L->
m[1].
data = (
void*)(
long)spec.
pg;
3422 L->
m[2].
data = (
void*)(
long)spec.
n;
3473 WerrorS(
"the list is too short" );
3476 WerrorS(
"the list is too long" );
3480 WerrorS(
"first element of the list should be int" );
3483 WerrorS(
"second element of the list should be int" );
3486 WerrorS(
"third element of the list should be int" );
3489 WerrorS(
"fourth element of the list should be intvec" );
3492 WerrorS(
"fifth element of the list should be intvec" );
3495 WerrorS(
"sixth element of the list should be intvec" );
3499 WerrorS(
"first element of the list should be positive" );
3502 WerrorS(
"wrong number of numerators" );
3505 WerrorS(
"wrong number of denominators" );
3508 WerrorS(
"wrong number of multiplicities" );
3512 WerrorS(
"the Milnor number should be positive" );
3515 WerrorS(
"the geometrical genus should be nonnegative" );
3518 WerrorS(
"all numerators should be positive" );
3521 WerrorS(
"all denominators should be positive" );
3524 WerrorS(
"all multiplicities should be positive" );
3528 WerrorS(
"it is not symmetric" );
3531 WerrorS(
"it is not monotonous" );
3535 WerrorS(
"the Milnor number is wrong" );
3538 WerrorS(
"the geometrical genus is wrong" );
3542 WerrorS(
"unspecific error" );
3578 ( fast==2 ? 2 : 1 ) );
3588 ( fast==0 || (*node)->weight<=smax ) )
3610 cmp =
pCmp( (*node)->mon,
f );
3633 (*node)->nf =
search->nf;
3637 while( cmp<0 &&
f!=(poly)
NULL );
3650 if( (*node)->weight<=(
Rational)1 ) pg++;
3651 if( (*node)->weight==smax ) z++;
3652 if( (*node)->weight>weight_prev ) n++;
3654 weight_prev = (*node)->weight;
3655 node = &((*node)->next);
3677 cmp =
pCmp( (*node)->mon,
f );
3690 while( cmp<0 &&
f!=(poly)
NULL );
3706 n = ( z > 0 ? 2*n - 1 : 2*n );
3721 ( fast==0 ||
search->weight<=smax );
3747 for( n1=0, n2=n-1; n1<n2; n1++, n2-- )
3750 (*den) [n2] = (*den)[n1];
3751 (*mult)[n2] = (*mult)[n1];
3759 if( fast==0 || fast==1 )
3763 for(
int n1=0, n2=n-1 ; n1<n2 && symmetric==
TRUE; n1++, n2-- )
3766 (*
den) [n1]!= (*
den)[n2] ||
3773 if( symmetric==
FALSE )
3783 (*L)->m[0].data = (
void*)(
long)
mu;
3800 (*L)->m[0].data = (
void*)(
long)
mu;
3801 (*L)->
m[1].data = (
void*)(
long)pg;
3802 (*L)->m[2].data = (
void*)(
long)n;
3803 (*L)->m[3].data = (
void*)nom;
3804 (*L)->m[4].data = (
void*)
den;
3805 (*L)->m[5].data = (
void*)
mult;
3814 #ifdef SPECTRUM_DEBUG
3815 #ifdef SPECTRUM_PRINT
3816 #ifdef SPECTRUM_IOSTREAM
3817 cout <<
"spectrumCompute\n";
3818 if( fast==0 ) cout <<
" no optimization" << endl;
3819 if( fast==1 ) cout <<
" weight optimization" << endl;
3820 if( fast==2 ) cout <<
" symmetry optimization" << endl;
3822 fputs(
"spectrumCompute\n",stdout );
3823 if( fast==0 ) fputs(
" no optimization\n", stdout );
3824 if( fast==1 ) fputs(
" weight optimization\n", stdout );
3825 if( fast==2 ) fputs(
" symmetry optimization\n", stdout );
3869 #ifdef SPECTRUM_DEBUG
3870 #ifdef SPECTRUM_PRINT
3871 #ifdef SPECTRUM_IOSTREAM
3872 cout <<
"\n computing the Jacobi ideal...\n";
3874 fputs(
"\n computing the Jacobi ideal...\n",stdout );
3883 #ifdef SPECTRUM_DEBUG
3884 #ifdef SPECTRUM_PRINT
3885 #ifdef SPECTRUM_IOSTREAM
3888 fputs(
" ", stdout );
3899 #ifdef SPECTRUM_DEBUG
3900 #ifdef SPECTRUM_PRINT
3901 #ifdef SPECTRUM_IOSTREAM
3903 cout <<
" computing a standard basis..." << endl;
3905 fputs(
"\n", stdout );
3906 fputs(
" computing a standard basis...\n", stdout );
3914 #ifdef SPECTRUM_DEBUG
3915 #ifdef SPECTRUM_PRINT
3918 #ifdef SPECTRUM_IOSTREAM
3921 fputs(
" ",stdout );
3966 #ifdef SPECTRUM_DEBUG
3967 #ifdef SPECTRUM_PRINT
3968 #ifdef SPECTRUM_IOSTREAM
3969 cout <<
"\n computing the highest corner...\n";
3971 fputs(
"\n computing the highest corner...\n", stdout );
3976 poly hc = (poly)
NULL;
3980 if( hc!=(poly)
NULL )
3995 #ifdef SPECTRUM_DEBUG
3996 #ifdef SPECTRUM_PRINT
3997 #ifdef SPECTRUM_IOSTREAM
4000 fputs(
" ", stdout );
4010 #ifdef SPECTRUM_DEBUG
4011 #ifdef SPECTRUM_PRINT
4012 #ifdef SPECTRUM_IOSTREAM
4013 cout <<
"\n computing the newton polygon...\n";
4015 fputs(
"\n computing the newton polygon...\n", stdout );
4022 #ifdef SPECTRUM_DEBUG
4023 #ifdef SPECTRUM_PRINT
4032 #ifdef SPECTRUM_DEBUG
4033 #ifdef SPECTRUM_PRINT
4034 #ifdef SPECTRUM_IOSTREAM
4035 cout <<
"\n computing the weight corner...\n";
4037 fputs(
"\n computing the weight corner...\n", stdout );
4042 poly wc = ( fast==0 ?
pCopy( hc ) :
4047 #ifdef SPECTRUM_DEBUG
4048 #ifdef SPECTRUM_PRINT
4049 #ifdef SPECTRUM_IOSTREAM
4052 fputs(
" ", stdout );
4062 #ifdef SPECTRUM_DEBUG
4063 #ifdef SPECTRUM_PRINT
4064 #ifdef SPECTRUM_IOSTREAM
4065 cout <<
"\n computing NF...\n" << endl;
4067 fputs(
"\n computing NF...\n", stdout );
4076 #ifdef SPECTRUM_DEBUG
4077 #ifdef SPECTRUM_PRINT
4079 #ifdef SPECTRUM_IOSTREAM
4082 fputs(
"\n", stdout );
4107 WerrorS(
"polynomial is zero" );
4110 WerrorS(
"polynomial has constant term" );
4113 WerrorS(
"not a singularity" );
4116 WerrorS(
"the singularity is not isolated" );
4119 WerrorS(
"highest corner cannot be computed" );
4122 WerrorS(
"principal part is degenerate" );
4128 WerrorS(
"unknown error occurred" );
4145 WerrorS(
"only works for local orderings" );
4153 WerrorS(
"does not work in quotient rings" );
4199 WerrorS(
"only works for local orderings" );
4204 WerrorS(
"does not work in quotient rings" );
4263 else if(
l->nr > 5 )
4301 int mu = (int)(
long)(
l->m[0].Data( ));
4302 int pg = (int)(
long)(
l->m[1].Data( ));
4303 int n = (int)(
long)(
l->m[2].Data( ));
4314 if( n !=
num->length( ) )
4318 else if( n !=
den->length( ) )
4322 else if( n != mul->
length( ) )
4342 for(
i=0;
i<n;
i++ )
4344 if( (*
num)[
i] <= 0 )
4348 if( (*
den)[
i] <= 0 )
4352 if( (*mul)[
i] <= 0 )
4364 for(
i=0,
j=n-1;
i<=
j;
i++,
j-- )
4367 (*den)[
i] != (*den)[
j] ||
4368 (*mul)[
i] != (*mul)[
j] )
4378 for(
i=0,
j=1;
i<n/2;
i++,
j++ )
4380 if( (*
num)[
i]*(*den)[
j] >= (*num)[
j]*(*den)[
i] )
4390 for(
mu=0,
i=0;
i<n;
i++ )
4395 if(
mu != (
int)(long)(
l->m[0].Data( )) )
4404 for( pg=0,
i=0;
i<n;
i++ )
4406 if( (*
num)[
i]<=(*den)[
i] )
4412 if( pg != (
int)(long)(
l->m[1].Data( )) )
4441 WerrorS(
"first argument is not a spectrum:" );
4446 WerrorS(
"second argument is not a spectrum:" );
4479 int k = (int)(
long)second->
Data( );
4483 WerrorS(
"first argument is not a spectrum" );
4488 WerrorS(
"second argument should be positive" );
4514 BOOLEAN qh=(((int)(
long)
w->Data())==1);
4525 WerrorS(
"first argument is not a spectrum" );
4530 WerrorS(
"second argument is not a spectrum" );
4573 WerrorS(
"Ground field not implemented!");
4593 LP->
m= (int)(
long)(
v->Data());
4599 LP->
n= (int)(
long)(
v->Data());
4605 LP->
m1= (int)(
long)(
v->Data());
4611 LP->
m2= (int)(
long)(
v->Data());
4617 LP->
m3= (int)(
long)(
v->Data());
4620 Print(
"m (constraints) %d\n",LP->
m);
4621 Print(
"n (columns) %d\n",LP->
n);
4645 lres->
m[4].
data=(
void*)(
long)LP->
m;
4648 lres->
m[5].
data=(
void*)(
long)LP->
n;
4650 res->data= (
void*)lres;
4657 ideal gls = (ideal)(arg1->
Data());
4658 int imtype= (int)(
long)arg2->
Data();
4681 gls= (poly)(arg1->
Data());
4682 int howclean= (int)(
long)arg3->
Data();
4686 WerrorS(
"Input polynomial is constant!");
4695 rlist->
Init( r[0] );
4696 for(
int i=r[0];
i>0;
i--)
4711 WerrorS(
"Ground field not implemented!");
4718 unsigned long int ii = (
unsigned long int)arg2->
Data();
4743 if ( (vpos !=
i) && (
pGetExp( piter,
i ) != 0) )
4745 WerrorS(
"The input polynomial must be univariate!");
4753 number * pcoeffs= (number *)
omAlloc( (deg+1) *
sizeof( number ) );
4755 for (
i= deg;
i >= 0;
i-- )
4770 for (
i=deg;
i >= 0;
i--)
4778 roots->
solver( howclean );
4786 rlist->
Init( elem );
4790 for (
j= 0;
j < elem;
j++ )
4799 for (
j= 0;
j < elem;
j++ )
4803 rlist->
m[
j].
data=(
void *)dummy;
4816 res->data= (
void*)rlist;
4825 p= (ideal)arg1->
Data();
4826 w= (ideal)arg2->
Data();
4837 int tdg= (int)(
long)arg3->
Data();
4844 WerrorS(
"Last input parameter must be > 0!");
4852 if (
m != (
int)
pow((
double)tdg+1,(
double)n) )
4854 Werror(
"Size of second input ideal must be equal to %d!",
4855 (
int)
pow((
double)tdg+1,(
double)n));
4862 WerrorS(
"Ground field not implemented!");
4867 number *pevpoint= (number *)
omAlloc( n *
sizeof( number ) );
4868 for (
i= 0;
i < n;
i++ )
4877 WerrorS(
"Elements of first input ideal must not be equal to -1, 0, 1!");
4886 WerrorS(
"Elements of first input ideal must be numbers!");
4889 pevpoint[
i]=
nCopy( tmp );
4893 number *wresults= (number *)
omAlloc(
m *
sizeof( number ) );
4894 for (
i= 0;
i <
m;
i++ )
4903 WerrorS(
"Elements of second input ideal must be numbers!");
4918 res->data= (
void*)rpoly;
4933 else gls= (ideal)(
v->Data());
4939 else imtype= (int)(
long)
v->Data();
4944 ideal test_id=
idInit(1,1);
4948 if (gls->m[
j]!=
NULL)
4950 test_id->m[0]=gls->m[
j];
4954 WerrorS(
"Newton polytope not of expected dimension");
4968 unsigned long int ii=(
unsigned long int)
v->Data();
4976 else howclean= (int)(
long)
v->Data();
5005 WerrorS(
"Error occurred during matrix setup!");
5018 WerrorS(
"Unsuitable input ideal: Minor of resultant matrix is singular!");
5024 if ( interpolate_det )
5030 if ( interpolate_det )
5037 for (
i=0;
i < c;
i++)
pWrite(iproots[
i]->getPoly());
5039 for (
i=0;
i < c;
i++)
pWrite(muiproots[
i]->getPoly());
5043 arranger=
new rootArranger( iproots, muiproots, howclean );
5054 WerrorS(
"Solver was unable to find any roots!");
5060 for (
i=0;
i <
count;
i++)
delete iproots[
i];
5063 for (
i=0;
i <
count;
i++)
delete muiproots[
i];
5070 res->data= (
void *)listofroots;
5094 onepoint->
Init(elem);
5095 for (
j= 0;
j < elem;
j++ )
5111 listofroots->
m[
i].
data=(
void *)onepoint;
5119 listofroots->
Init( 0 );
5133 if (rg==
NULL)
return;
5157 Warn(
"deleting denom_list for ring change to %s",
IDID(
h));
5171 if ((rg!=
NULL) && (rg->idroot==
NULL))
5199 if((*iv)[
i]>=0) { neg=
FALSE;
break; }
5204 (*iv)[
i]= - (*iv)[
i];
5213 if((*iv)[
i]>=0) { neg=
FALSE;
break; }
5218 (*iv)[
i]= -(*iv)[
i];
5227 if((*iv)[
i]!=1) { all_one=
FALSE;
break; }
5233 (*iv2)[2]=iv->
length()-2;
5245 if((*iv)[
i]!=1) { all_one=
FALSE;
break; }
5251 (*iv2)[2]=iv->
length()-2;
5292 (*iv)[2] += (*iv2)[2];
5299 if (!change)
h=
h->next;
5307 int last = 0, o=0, n = 1,
i=0, typ = 1,
j;
5319 R->wanted_maxExp=(*iv)[2]*2+1;
5332 WerrorS(
"invalid combination of orderings");
5340 WerrorS(
"more than one ordering c/C specified");
5346 R->block0=(
int *)
omAlloc0(n*
sizeof(
int));
5347 R->block1=(
int *)
omAlloc0(n*
sizeof(
int));
5350 int *weights=(
int*)
omAlloc0((
R->N+1)*
sizeof(int));
5353 for (
j=0;
j < n-1;
j++)
5384 R->block0[n] =
last+1;
5387 R->wvhdl[n][
i-2] = (*iv)[
i];
5389 if (weights[
last]==0) weights[
last]=(*iv)[
i]*typ;
5402 R->block0[n] =
last+1;
5404 else last += (*iv)[0];
5409 if (weights[
i]==0) weights[
i]=typ;
5421 const int s = (*iv)[2];
5431 const int s = (*iv)[2];
5433 if( 1 <
s ||
s < -1 )
return TRUE;
5449 R->block0[n] =
last+1;
5454 R->wvhdl[n][
i-2]=(*iv)[
i];
5456 if (weights[
last]==0) weights[
last]=(*iv)[
i]*typ;
5458 last=
R->block0[n]-1;
5463 R->block0[n] =
last+1;
5466 if (
R->block1[n]-
R->block0[n]+2>=iv->
length())
5467 WarnS(
"missing module weights");
5468 for (
i=2;
i<=(
R->block1[n]-
R->block0[n]+2);
i++)
5470 R->wvhdl[n][
i-2]=(*iv)[
i];
5472 if (weights[
last]==0) weights[
last]=(*iv)[
i]*typ;
5474 R->wvhdl[n][
i-2]=iv->
length() -3 -(
R->block1[n]-
R->block0[n]);
5477 R->wvhdl[n][
i-1]=(*iv)[
i];
5479 last=
R->block0[n]-1;
5484 R->block0[n] =
last+1;
5492 if (weights[
last]==0) weights[
last]=(*iv)[
i]*typ;
5494 last=
R->block0[n]-1;
5500 if (Mtyp==0)
return TRUE;
5501 if (Mtyp==-1) typ = -1;
5505 R->wvhdl[n][
i-2]=(*iv)[
i];
5507 R->block0[n] =
last+1;
5510 for(
i=
R->block1[n];
i>=
R->block0[n];
i--)
5512 if (weights[
i]==0) weights[
i]=typ;
5522 Werror(
"Internal Error: Unknown ordering %d", (*iv)[1]);
5529 Werror(
"mismatch of number of vars (%d) and ordering (>=%d vars)",
5537 for(
i=1;
i<=
R->N;
i++)
5538 {
if (weights[
i]<0) {
R->OrdSgn=-1;
break; }}
5552 if (
R->block1[n] !=
R->N)
5563 R->block0[n] <=
R->N)
5565 R->block1[n] =
R->N;
5569 Werror(
"mismatch of number of vars (%d) and ordering (%d vars)",
5588 *
p = (
char*)sl->
name;
5656 WerrorS(
"parameter expected");
5663 for(
int i=pars-1;
i>=0;
i--)
5675 int ch = (int)(
long)pn->
Data();
5686 if ((ch<2)||(ch!=ch2))
5688 Warn(
"%d is invalid as characteristic of the ground field. 32003 is used.", ch);
5691 #ifndef TEST_ZN_AS_ZP
5695 mpz_init_set_ui(modBase, (
long)ch);
5702 cf->has_simple_Inverse=1;
5715 if ((ch!=0) && (ch!=
IsPrime(ch)) && (pars == 1))
5727 if ((ch!=0) && (ch!=
IsPrime(ch)))
5729 WerrorS(
"too many parameters");
5737 WerrorS(
"parameter expected");
5743 extParam.
r =
rDefault( ch, pars, names);
5744 for(
int i=pars-1;
i>=0;
i--)
5757 && ((strcmp(pn->
name,
"real")==0) || (strcmp(pn->
name,
"complex")==0)))
5760 BOOLEAN complex_flag=(strcmp(pn->
name,
"complex")==0);
5763 float_len=(int)(
long)pnn->
Data();
5764 float_len2=float_len;
5768 float_len2=(int)(
long)pnn->
Data();
5803 else if ((pn->
name !=
NULL) && (strcmp(pn->
name,
"integer") == 0))
5807 unsigned int modExponent = 1;
5808 mpz_init_set_si(modBase, 0);
5815 mpz_set_ui(modBase, (
long) pnn->
Data());
5819 modExponent = (long) pnn->
Data();
5824 mpz_mul_ui(modBase, modBase, (
int)(
long) pnn->
Data());
5837 if ((mpz_cmp_ui(modBase, 1) == 0) && (
mpz_sgn1(modBase) < 0))
5839 WerrorS(
"Wrong ground ring specification (module is 1)");
5842 if (modExponent < 1)
5844 WerrorS(
"Wrong ground ring specification (exponent smaller than 1");
5849 if (modExponent > 1 &&
cf ==
NULL)
5851 if ((mpz_cmp_ui(modBase, 2) == 0) && (modExponent <= 8*
sizeof(
unsigned long)))
5862 WerrorS(
"modulus must not be 0 or parameter not allowed");
5868 info.exp= modExponent;
5877 WerrorS(
"modulus must not be 0 or parameter not allowed");
5883 info.exp= modExponent;
5893 ring r=(ring)pn->
Data();
5894 if (r->qideal==
NULL)
5901 else if (
IDELEMS(r->qideal)==1)
5910 WerrorS(
"algebraic extension ring must have one minpoly");
5916 WerrorS(
"Wrong or unknown ground field specification");
5922 Print(
"pn[%p]: type: %d [%s]: %p, name: %s", (
void*)
p,
p->Typ(),
Tok2Cmdname(
p->Typ()),
p->Data(), (
p->name ==
NULL?
"NULL" :
p->name) );
5944 WerrorS(
"Invalid ground field specification");
5968 WerrorS(
"name of ring variable expected");
6021 int *perm=(
int *)
omAlloc0((org_ring->N+1)*
sizeof(int));
6038 WerrorS(
"name of ring variable expected");
6048 for(;
i<org_ring->N;
i++)
6050 if (strcmp(org_ring->names[
i],
R->names[
j])==0)
6058 Werror(
"variable %d (%s) not in basering",
j+1,
R->names[
j]);
6071 for(
j=
R->block0[
i];j<=R->block1[
i];
j++)
6075 if (min_var==-1) min_var=perm[
j];
6083 R->block0[
i]=min_var;
6084 R->block1[
i]=max_var;
6088 R->wvhdl[
i]=(
int*)
omAlloc0((max_var-min_var+1)*
sizeof(int));
6089 for(
j=org_ring->block0[
i];j<=org_ring->block1[
i];
j++)
6093 R->wvhdl[
i][perm[
j]-
R->block0[
i]]=
6094 org_ring->wvhdl[
i][
j-org_ring->block0[
i]];
6120 R->order[
j-1]=
R->order[
j];
6121 R->block0[
j-1]=
R->block0[
j];
6122 R->block1[
j-1]=
R->block1[
j];
6124 R->wvhdl[
j-1]=
R->wvhdl[
j];
6132 while (
R->order[n]==0) n--;
6135 if (
R->block1[n] !=
R->N)
6146 R->block0[n] <=
R->N)
6148 R->block1[n] =
R->N;
6152 Werror(
"mismatch of number of vars (%d) and ordering (%d vars) in block %d",
6153 R->N,
R->block1[n],n);
6159 R->OrdSgn = org_ring->OrdSgn;
6182 if ((r->ref<=0)&&(r->order!=
NULL))
6192 if (
j==0)
WarnS(
"killing the basering for level 0");
6197 while (r->idroot!=
NULL)
6200 killhdl2(r->idroot,&(r->idroot),r);
6247 Warn(
"deleting denom_list for ring change from %s",
IDID(
h));
6321 ideal I=(ideal)u->
Data();
6324 for(
i=I->nrows*I->ncols-1;
i>=0;
i--)
6336 switch (
p->language)
6345 if(
p->libname!=
NULL)
6346 Print(
",%s",
p->libname);
6361 tmp_in.
data=(
void*)(
long)(*aa)[
i];
6369 Werror(
"apply fails at index %d",
i+1);
6372 if (
i==0) { memcpy(
res,&tmp_out,
sizeof(tmp_out)); }
6377 memcpy(curr,&tmp_out,
sizeof(tmp_out));
6399 res->data=(
void *)
l;
6406 for(
int i=0;
i<=aa->
nr;
i++)
6409 tmp_in.
Copy(&(aa->
m[
i]));
6418 Werror(
"apply fails at index %d",
i+1);
6421 if (
i==0) { memcpy(
res,&tmp_out,
sizeof(tmp_out)); }
6426 memcpy(curr,&tmp_out,
sizeof(tmp_out));
6449 WerrorS(
"first argument to `apply` must allow an index");
6459 char assume_yylinebuf[80];
6461 int lev=(long)a->
Data();
6468 if (bo) {
WerrorS(
"syntax error in ASSUME");
return TRUE;}
6470 if (
b->Data()==
NULL) {
Werror(
"ASSUME failed:%s",assume_yylinebuf);
return TRUE;}
6482 char *ss=(
char*)
omAlloc(strlen(a)+strlen(
s)+30);
6484 int end_s=strlen(
s);
6485 while ((end_s>0) && ((
s[end_s]<=
' ')||(
s[end_s]==
';'))) end_s--;
6488 sprintf(
name,
"%s->%s",a,
s);
6490 int start_s=end_s-1;
6491 while ((start_s>=0) && (
s[start_s]!=
';')) start_s--;
6494 sprintf(ss,
"parameter def %s;return(%s);\n",a,
s);
6499 sprintf(ss,
"parameter def %s;%s;return(%s);\n",a,
s,
s+start_s+1);
6559 sprintf(
buf,
"wrong length of parameters(%d), expected ",t);
6561 sprintf(
buf,
"par. %d is of type `%s`, expected ",nr,
Tok2Cmdname(t));
6562 for(
int i=1;
i<=
T[0];
i++)
6567 if (
i<
T[0]) strcat(
buf,
",");
6577 if (type_list[0]==0)
return TRUE;
6580 if (
l!=(
int)type_list[0])
6585 for(
int i=1;
i<=
l;
i++,args=args->
next)
6587 short t=type_list[
i];
6591 || (t!=args->
Typ()))
Rational pow(const Rational &a, int e)
struct for passing initialization parameters to naInitChar
void atSet(idhdl root, char *name, void *data, int typ)
void * atGet(idhdl root, const char *name, int t, void *defaultReturnValue)
static int si_max(const int a, const int b)
static int si_min(const int a, const int b)
CanonicalForm map(const CanonicalForm &primElem, const Variable &alpha, const CanonicalForm &F, const Variable &beta)
map from to such that is mapped onto
unsigned char * proc[NUM_PROC]
poly singclap_resultant(poly f, poly g, poly x, const ring r)
ideal singclap_factorize(poly f, intvec **v, int with_exps, const ring r)
matrix singclap_irrCharSeries(ideal I, const ring r)
int * Zp_roots(poly p, const ring r)
idhdl get(const char *s, int lev)
void show(int mat=0, int spaces=0) const
virtual number getSubDet()
virtual ideal getMatrix()
virtual IStateType initState() const
complex root finder for univariate polynomials based on laguers algorithm
gmp_complex * getRoot(const int i)
void fillContainer(number *_coeffs, number *_ievpoint, const int _var, const int _tdg, const rootType _rt, const int _anz)
bool solver(const int polishmode=PM_NONE)
Linear Programming / Linear Optimization using Simplex - Algorithm.
BOOLEAN mapFromMatrix(matrix m)
matrix mapToMatrix(matrix m)
Class used for (list of) interpreter objects.
void CleanUp(ring r=currRing)
void Clean(ring r=currRing)
INLINE_THIS void Init(int l=0)
void delete_node(spectrumPolyNode **)
int mult_spectrum(spectrum &)
int mult_spectrumh(spectrum &)
Base class for solving 0-dim poly systems using u-resultant.
rootContainer ** specializeInU(BOOLEAN matchUp=false, const number subDetVal=NULL)
rootContainer ** interpolateDenseSP(BOOLEAN matchUp=false, const number subDetVal=NULL)
resMatrixBase * accessResMat()
vandermonde system solver for interpolating polynomials from their values
poly numvec2poly(const number *q)
number * interpolateDense(const number *q)
Solves the Vandermode linear system \sum_{i=1}^{n} x_i^k-1 w_i = q_k, k=1,..,n.
Coefficient rings, fields and other domains suitable for Singular polynomials.
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 ....
static FORCE_INLINE number n_Copy(number n, const coeffs r)
return a copy of 'n'
static FORCE_INLINE BOOLEAN nCoeff_is_GF(const coeffs r)
static FORCE_INLINE BOOLEAN nCoeff_is_Z(const coeffs r)
@ n_R
single prescision (6,6) real numbers
@ n_Q
rational (GMP) numbers
@ n_Znm
only used if HAVE_RINGS is defined
@ n_algExt
used for all algebraic extensions, i.e., the top-most extension in an extension tower is algebraic
@ n_Zn
only used if HAVE_RINGS is defined
@ n_long_R
real floating point (GMP) numbers
@ n_Z2m
only used if HAVE_RINGS is defined
@ n_transExt
used for all transcendental extensions, i.e., the top-most extension in an extension tower is transce...
@ n_Z
only used if HAVE_RINGS is defined
@ n_long_C
complex floating point (GMP) numbers
short float_len2
additional char-flags, rInit
static FORCE_INLINE BOOLEAN nCoeff_is_numeric(const coeffs r)
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 FORCE_INLINE nMapFunc n_SetMap(const coeffs src, const coeffs dst)
set the mapping function pointers for translating numbers from src to dst
const char * par_name
parameter name
static FORCE_INLINE char const ** n_ParameterNames(const coeffs r)
Returns a (const!) pointer to (const char*) names of parameters.
coeffs nInitChar(n_coeffType t, void *parameter)
one-time initialisations for new coeffs in case of an error return NULL
const unsigned short fftable[]
static FORCE_INLINE void nSetChar(const coeffs r)
initialisations after each ring change
static FORCE_INLINE BOOLEAN nCoeff_is_Ring(const coeffs r)
static FORCE_INLINE void n_Delete(number *p, const coeffs r)
delete 'p'
static FORCE_INLINE char * nCoeffName(const coeffs cf)
static FORCE_INLINE number n_InitMPZ(mpz_t n, const coeffs r)
conversion of a GMP integer to number
static FORCE_INLINE number n_Init(long i, const coeffs r)
a number representing i in the given coeff field/ring r
static FORCE_INLINE BOOLEAN nCoeff_is_algExt(const coeffs r)
TRUE iff r represents an algebraic extension field.
short float_len
additional char-flags, rInit
number(* nMapFunc)(number a, const coeffs src, const coeffs dst)
maps "a", which lives in src, into dst
static FORCE_INLINE BOOLEAN nCoeff_is_long_C(const coeffs r)
static FORCE_INLINE BOOLEAN nCoeff_is_transExt(const coeffs r)
TRUE iff r represents a transcendental extension field.
Creation data needed for finite fields.
const CanonicalForm int s
const Variable & v
< [in] a sqrfree bivariate poly
for(j=0;j< factors.length();j++)
int search(const CFArray &A, const CanonicalForm &F, int i, int j)
search for F in A between index i and j
void WerrorS(const char *s)
VAR char my_yylinebuf[80]
if(!FE_OPT_NO_SHELL_FLAG)(void) system(sys)
char *(* fe_fgets_stdin)(const char *pr, char *s, int size)
void newBuffer(char *s, feBufferTypes t, procinfo *pi, int lineno)
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...
int iiTestConvert(int inputType, int outputType)
const char * Tok2Cmdname(int tok)
static int RingDependend(int t)
void scComputeHC(ideal S, ideal Q, int ak, poly &hEdge)
void hIndMult(scmon pure, int Npure, scfmon rad, int Nrad, varset var, int Nvar)
void hDimSolve(scmon pure, int Npure, scfmon rad, int Nrad, varset var, int Nvar)
void hIndAllMult(scmon pure, int Npure, scfmon rad, int Nrad, varset var, int Nvar)
void hKill(monf xmem, int Nvar)
void hDelete(scfmon ev, int ev_length)
void hPure(scfmon stc, int a, int *Nstc, varset var, int Nvar, scmon pure, int *Npure)
void hSupp(scfmon stc, int Nstc, varset var, int *Nvar)
void hLexR(scfmon rad, int Nrad, varset var, int Nvar)
scfmon hInit(ideal S, ideal Q, int *Nexist)
void hRadical(scfmon rad, int *Nrad, int Nvar)
#define idDelete(H)
delete an ideal
void idGetNextChoise(int r, int end, BOOLEAN *endch, int *choise)
static BOOLEAN idIsZeroDim(ideal i)
BOOLEAN idIs0(ideal h)
returns true if h is the zero ideal
#define idMaxIdeal(D)
initialise the maximal ideal (at 0)
int idGetNumberOfChoise(int t, int d, int begin, int end, int *choise)
void idInitChoise(int r, int beg, int end, BOOLEAN *endch, int *choise)
STATIC_VAR int * multiplicity
static BOOLEAN length(leftv result, leftv arg)
intvec * ivCopy(const intvec *o)
#define IMATELEM(M, I, J)
int IsCmd(const char *n, int &tok)
BOOLEAN iiExprArith1(leftv res, leftv a, int op)
BOOLEAN jjPROC(leftv res, leftv u, leftv v)
BOOLEAN iiAssign(leftv l, leftv r, BOOLEAN toplevel)
BOOLEAN iiConvert(int inputType, int outputType, int index, leftv input, leftv output, const struct sConvertTypes *dConvertTypes)
idhdl ggetid(const char *n)
void killhdl2(idhdl h, idhdl *ih, ring r)
idhdl enterid(const char *s, int lev, int t, idhdl *root, BOOLEAN init, BOOLEAN search)
VAR proclevel * procstack
idhdl packFindHdl(package r)
EXTERN_VAR omBin sleftv_bin
INST_VAR sleftv iiRETURNEXPR
char * iiGetLibProcBuffer(procinfo *pi, int part)
procinfo * iiInitSingularProcinfo(procinfov pi, const char *libname, const char *procname, int, long pos, BOOLEAN pstatic)
lists rDecompose(const ring r)
@ semicListWrongNumberOfNumerators
@ semicListFirstElementWrongType
@ semicListSecondElementWrongType
@ semicListFourthElementWrongType
@ semicListWrongNumberOfDenominators
@ semicListThirdElementWrongType
@ semicListWrongNumberOfMultiplicities
@ semicListFifthElementWrongType
@ semicListSixthElementWrongType
BOOLEAN iiApplyINTVEC(leftv res, leftv a, int op, leftv proc)
BOOLEAN jjVARIABLES_P(leftv res, leftv u)
lists rDecompose_list_cf(const ring r)
int iiOpsTwoChar(const char *s)
BOOLEAN spaddProc(leftv result, leftv first, leftv second)
BOOLEAN jjMINRES(leftv res, leftv v)
BOOLEAN killlocals_list(int v, lists L)
BOOLEAN iiParameter(leftv p)
STATIC_VAR BOOLEAN iiNoKeepRing
int iiDeclCommand(leftv sy, leftv name, int lev, int t, idhdl *root, BOOLEAN isring, BOOLEAN init_b)
static void rRenameVars(ring R)
void iiCheckPack(package &p)
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 iiApply(leftv res, leftv a, int op, leftv proc)
void list_cmd(int typ, const char *what, const char *prefix, BOOLEAN iterate, BOOLEAN fullname)
VAR BOOLEAN iiDebugMarker
ring rInit(leftv pn, leftv rv, leftv ord)
leftv iiMap(map theMap, const char *what)
int iiRegularity(lists L)
BOOLEAN rDecompose_CF(leftv res, const coeffs C)
static void rDecomposeC_41(leftv h, const coeffs C)
void iiMakeResolv(resolvente r, int length, int rlen, char *name, int typ0, intvec **weights)
BOOLEAN iiARROW(leftv r, char *a, char *s)
BOOLEAN semicProc3(leftv res, leftv u, leftv v, leftv w)
BOOLEAN syBetti1(leftv res, leftv u)
BOOLEAN iiApplyLIST(leftv res, leftv a, int op, leftv proc)
static void rDecomposeC(leftv h, const ring R)
int exprlist_length(leftv v)
BOOLEAN mpKoszul(leftv res, leftv c, leftv b, leftv id)
poly iiHighCorner(ideal I, int ak)
BOOLEAN spectrumfProc(leftv result, leftv first)
lists listOfRoots(rootArranger *self, const unsigned int oprec)
static void jjINT_S_TO_ID(int n, int *e, leftv res)
lists scIndIndset(ideal S, BOOLEAN all, ideal Q)
BOOLEAN jjCHARSERIES(leftv res, leftv u)
void rDecomposeCF(leftv h, const ring r, const ring R)
BOOLEAN iiApplyIDEAL(leftv, leftv, int, leftv)
static void list1(const char *s, idhdl h, BOOLEAN c, BOOLEAN fullname)
void list_error(semicState state)
BOOLEAN mpJacobi(leftv res, leftv a)
const char * iiTwoOps(int t)
BOOLEAN iiBranchTo(leftv, leftv args)
BOOLEAN jjBETTI2_ID(leftv res, leftv u, leftv v)
BOOLEAN iiTestAssume(leftv a, leftv b)
void iiSetReturn(const leftv source)
BOOLEAN iiAssignCR(leftv r, leftv arg)
BOOLEAN spmulProc(leftv result, leftv first, leftv second)
spectrumState spectrumCompute(poly h, lists *L, int fast)
idhdl rFindHdl(ring r, idhdl n)
syStrategy syConvList(lists li)
BOOLEAN spectrumProc(leftv result, leftv first)
BOOLEAN iiDefaultParameter(leftv p)
void rComposeC(lists L, ring R)
BOOLEAN iiCheckRing(int i)
#define BREAK_LINE_LENGTH
static void rDecomposeRing_41(leftv h, const coeffs C)
spectrumState spectrumStateFromList(spectrumPolyList &speclist, lists *L, int fast)
BOOLEAN syBetti2(leftv res, leftv u, leftv w)
ring rSubring(ring org_ring, sleftv *rv)
BOOLEAN kWeight(leftv res, leftv id)
static leftv rOptimizeOrdAsSleftv(leftv ord)
BOOLEAN rSleftvOrdering2Ordering(sleftv *ord, ring R)
static BOOLEAN rComposeOrder(const lists L, const BOOLEAN check_comp, ring R)
spectrum spectrumFromList(lists l)
static idhdl rSimpleFindHdl(const ring r, const idhdl root, const idhdl n)
static void iiReportTypes(int nr, int t, const short *T)
void rDecomposeRing(leftv h, const ring R)
BOOLEAN jjRESULTANT(leftv res, leftv u, leftv v, leftv w)
static BOOLEAN iiInternalExport(leftv v, int toLev)
static void rDecompose_23456(const ring r, lists L)
void copy_deep(spectrum &spec, lists l)
void killlocals_rec(idhdl *root, int v, ring r)
semicState list_is_spectrum(lists l)
static void killlocals0(int v, idhdl *localhdl, const ring r)
BOOLEAN semicProc(leftv res, leftv u, leftv v)
ring rCompose(const lists L, const BOOLEAN check_comp, const long bitmask, const int isLetterplace)
BOOLEAN iiApplyBIGINTMAT(leftv, leftv, int, leftv)
BOOLEAN jjBETTI2(leftv res, leftv u, leftv v)
const char * lastreserved
static BOOLEAN rSleftvList2StringArray(leftv sl, char **p)
lists syConvRes(syStrategy syzstr, BOOLEAN toDel, int add_row_shift)
BOOLEAN iiWRITE(leftv, leftv v)
void paPrint(const char *n, package p)
static resolvente iiCopyRes(resolvente r, int l)
BOOLEAN kQHWeight(leftv res, leftv v)
void rComposeRing(lists L, ring R)
BOOLEAN iiExport(leftv v, int toLev)
BOOLEAN jjBETTI(leftv res, leftv u)
void spectrumPrintError(spectrumState state)
lists getList(spectrum &spec)
BOOLEAN jjVARIABLES_ID(leftv res, leftv u)
static BOOLEAN rComposeVar(const lists L, ring R)
ideal kStd(ideal F, ideal Q, tHomog h, intvec **w, intvec *hilb, int syzComp, int newIdeal, intvec *vw, s_poly_proc_t sp)
VAR denominator_list DENOMINATOR_LIST
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,...
char * lString(lists l, BOOLEAN typed, int dim)
BOOLEAN lRingDependend(lists L)
resolvente liFindRes(lists L, int *len, int *typ0, intvec ***weights)
lists liMakeResolv(resolvente r, int length, int reallen, int typ0, intvec **weights, int add_row_shift)
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)
BOOLEAN maApplyFetch(int what, map theMap, leftv res, leftv w, ring preimage_r, int *perm, int *par_perm, int P, nMapFunc nMap)
static matrix mu(matrix A, const ring R)
matrix mpNew(int r, int c)
create a r x c zero-matrix
matrix mp_Copy(matrix a, const ring r)
copies matrix a (from ring r to r)
#define MATELEM(mat, i, j)
1-based access to matrix
void mult(unsigned long *result, unsigned long *a, unsigned long *b, unsigned long p, int dega, int degb)
static number & pGetCoeff(poly p)
return an alias to the leading coefficient of p assumes that p != NULL NOTE: not copy
ideal loNewtonPolytope(const ideal id)
EXTERN_VAR size_t gmp_output_digits
uResultant::resMatType determineMType(int imtype)
mprState mprIdealCheck(const ideal theIdeal, const char *name, uResultant::resMatType mtype, BOOLEAN rmatrix=false)
char * complexToStr(gmp_complex &c, const unsigned int oprec, const coeffs src)
gmp_float sqrt(const gmp_float &a)
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...
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...
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...
BOOLEAN nuMPResMat(leftv res, leftv arg1, leftv arg2)
returns module representing the multipolynomial resultant matrix Arguments 2: ideal i,...
BOOLEAN loSimplex(leftv res, leftv args)
Implementation of the Simplex Algorithm.
BOOLEAN loNewtonP(leftv res, leftv arg1)
compute Newton Polytopes of input polynomials
BOOLEAN nuUResSolve(leftv res, leftv args)
solve a multipolynomial system using the u-resultant Input ideal must be 0-dimensional and (currRing-...
The main handler for Singular numbers which are suitable for Singular polynomials.
#define nPrint(a)
only for debug, over any initalized currRing
#define SHORT_REAL_LENGTH
#define omFreeSize(addr, size)
#define omCheckAddr(addr)
#define omReallocSize(addr, o_size, size)
#define omCheckAddrSize(addr, size)
#define omFreeBin(addr, bin)
#define omFreeBinAddr(addr)
#define omRealloc0Size(addr, o_size, size)
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)
static int pLength(poly a)
#define __pp_Mult_nn(p, n, r)
static unsigned long p_SetExp(poly p, const unsigned long e, const unsigned long iBitmask, const int VarOffset)
set a single variable exponent @Note: VarOffset encodes the position in p->exp
static void p_Setm(poly p, const ring r)
static void p_Delete(poly *p, const ring r)
static poly p_Init(const ring r, omBin bin)
static poly p_Copy(poly p, const ring r)
returns a copy of p
static long p_Totaldegree(poly p, const ring r)
#define __p_Mult_nn(p, n, r)
void rChangeCurrRing(ring r)
VAR ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Compatibility layer for legacy polynomial operations (over currRing)
static long pTotaldegree(poly p)
#define pIsConstant(p)
like above, except that Comp must be 0
#define pCmp(p1, p2)
pCmp: args may be NULL returns: (p2==NULL ? 1 : (p1 == NULL ? -1 : p_LmCmp(p1, p2)))
#define pGetVariables(p, e)
#define pGetExp(p, i)
Exponent.
#define pCopy(p)
return a copy of the poly
ideal idrCopyR(ideal id, ring src_r, ring dest_r)
void PrintS(const char *s)
void Werror(const char *fmt,...)
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...
const char * rSimpleOrdStr(int ord)
int rTypeOfMatrixOrder(const intvec *order)
ring rAssure_HasComp(const ring r)
ring rCopy0(const ring r, BOOLEAN copy_qideal, BOOLEAN copy_ordering)
BOOLEAN rCheckIV(const intvec *iv)
rRingOrder_t rOrderName(char *ordername)
void rDelete(ring r)
unconditionally deletes fields in r
ring rDefault(const coeffs cf, int N, char **n, int ord_size, rRingOrder_t *ord, int *block0, int *block1, int **wvhdl, unsigned long bitmask)
BOOLEAN rEqual(ring r1, ring r2, BOOLEAN qr)
returns TRUE, if r1 equals r2 FALSE, otherwise Equality is determined componentwise,...
void rSetSyzComp(int k, const ring r)
static BOOLEAN rField_is_R(const ring r)
static BOOLEAN rField_is_Zp_a(const ring r)
static BOOLEAN rField_is_Z(const ring r)
static BOOLEAN rField_is_Zp(const ring r)
static BOOLEAN rIsPluralRing(const ring r)
we must always have this test!
static BOOLEAN rField_is_long_C(const ring r)
static int rBlocks(const ring r)
static ring rIncRefCnt(ring r)
static BOOLEAN rField_is_Zn(const ring r)
static int rPar(const ring r)
(r->cf->P)
static int rInternalChar(const ring r)
static BOOLEAN rIsLPRing(const ring r)
@ ringorder_a64
for int64 weights
@ ringorder_rs
opposite of ls
@ ringorder_aa
for idElimination, like a, except pFDeg, pWeigths ignore it
@ ringorder_IS
Induced (Schreyer) ordering.
static BOOLEAN rField_is_Q_a(const ring r)
static BOOLEAN rField_is_Q(const ring r)
static void rDecRefCnt(ring r)
static char const ** rParameter(const ring r)
(r->cf->parameter)
static BOOLEAN rField_is_long_R(const ring r)
static BOOLEAN rField_is_numeric(const ring r)
static BOOLEAN rField_is_GF(const ring r)
static short rVar(const ring r)
#define rVar(r) (r->N)
BOOLEAN rHasLocalOrMixedOrdering(const ring r)
#define rField_is_Ring(R)
int status int void size_t count
int status int void * buf
BOOLEAN slWrite(si_link l, leftv v)
ideal idInit(int idsize, int rank)
initialise an ideal / module
intvec * id_QHomWeight(ideal id, const ring r)
long id_RankFreeModule(ideal s, ring lmRing, ring tailRing)
return the maximal component number found in any polynomial in s
void idSkipZeroes(ideal ide)
gives an ideal/module the minimal possible size
BOOLEAN hasAxis(ideal J, int k, const ring r)
int hasOne(ideal J, const ring r)
BOOLEAN ringIsLocal(const ring r)
static BOOLEAN hasConstTerm(poly h, const ring r)
poly computeWC(const newtonPolygon &np, Rational max_weight, const ring r)
static BOOLEAN hasLinearTerm(poly h, const ring r)
void computeNF(ideal stdJ, poly hc, poly wc, spectrumPolyList *NF, const ring r)
INST_VAR sleftv sLastPrinted
intvec * syBetti(resolvente res, int length, int *regularity, intvec *weights, BOOLEAN tomin, int *row_shift)
void syMinimizeResolvente(resolvente res, int length, int first)
void syKillComputation(syStrategy syzstr, ring r=currRing)
resolvente syReorder(resolvente res, int length, syStrategy syzstr, BOOLEAN toCopy=TRUE, resolvente totake=NULL)
intvec * syBettiOfComputation(syStrategy syzstr, BOOLEAN minim=TRUE, int *row_shift=NULL, intvec *weights=NULL)
void syKillEmptyEntres(resolvente res, int length)
int name
New type name for int.
struct for passing initialization parameters to naInitChar
THREAD_VAR double(* wFunctional)(int *degw, int *lpol, int npol, double *rel, double wx, double wNsqr)
void wCall(poly *s, int sl, int *x, double wNsqr, const ring R)
double wFunctionalBuch(int *degw, int *lpol, int npol, double *rel, double wx, double wNsqr)