115 case LE:
return "<=";
116 case GE:
return ">=";
125 if (
s[1]==
'\0')
return s[0];
126 else if (
s[2]!=
'\0')
return 0;
129 case '.':
if (
s[1]==
'.')
return DOTDOT;
135 case '+':
if (
s[1]==
'+')
return PLUSPLUS;
139 case '<':
if (
s[1]==
'=')
return LE;
142 case '>':
if (
s[1]==
'=')
return GE;
144 case '!':
if (
s[1]==
'=')
return NOTEQUAL;
156 if(fullname) snprintf(
buf2,128,
"%s::%s",
"",
IDID(
h));
200 && (strlen(
IDPROC(
h)->libname)>0))
211 memset(buffer,0,
sizeof(buffer));
213 if ((
s=strchr(buffer,
'\n'))!=
NULL)
221 Print(
"..., %d char(s)",
l);
238 { number2 n=(number2)
IDDATA(
h);
244 Print(
" %d x %d (%s)",
270 ((
intvec*)(
v->Data()))->cols());
break;
274 case MODUL_CMD:
Print(
", rk %d\n", (
int)(((ideal)(
v->Data()))->rank));
break;
377 && (((ring)d)->idroot!=
NULL))
403 if (((ring)
h->data)->idroot!=
NULL)
428 package savePack=currPack;
435 if (strcmp(what,
"all")==0)
468 Werror(
"%s is undefined",what);
502 package save_p=currPack;
536 WarnS(
"Gerhard, use the option command");
566 rc += ((
intvec *)(
v->Data()))->length();
577 rc+=((
lists)
v->Data())->nr+1;
598 WerrorS(
"write: need at least two arguments");
608 Werror(
"cannot write to %s",
s);
635 Werror(
"can not map from ground field of %s to current ground field",
639 if (
IDELEMS(theMap)<src_ring->N)
643 (src_ring->N)*
sizeof(poly));
653 short src_lV = src_ring->isLPring;
654 short src_ncGenCount = src_ring->LPncGenCount;
655 short src_nVars = src_lV - src_ncGenCount;
656 int src_nblocks = src_ring->N / src_lV;
659 short dest_ncGenCount =
currRing->LPncGenCount;
662 for(
i=
IDELEMS(theMap);
i < src_lV - src_ncGenCount;
i++)
670 if (theMap->m[
i] !=
NULL)
678 for(
i = src_nVars;
i < src_lV;
i++)
680 short ncGenIndex =
i - src_nVars;
681 if (ncGenIndex < dest_ncGenCount)
695 for(
i = 1;
i < src_nblocks;
i++)
697 for(
int j = 0;
j < src_lV;
j++)
715 WerrorS(
"argument of a map must have a name");
727 save_r=
IDMAP(
w)->preimage;
738 ideal
id=(ideal)tmpW.
data;
747 for(
int j=
IDELEMS(theMap)-1;
j>=0 && !overflow;
j--)
749 if (theMap->m[
j]!=
NULL)
756 if ((
p!=
NULL) && (degs[
i]!=0) &&
757 ((
unsigned long)deg_monexp > (
currRing->bitmask / ((
unsigned long)degs[
i])/2)))
770 for(
int j=
IDELEMS(theMap)-1;
j>=0 && !overflow;
j--)
772 if (theMap->m[
j]!=
NULL)
775 poly
p=(poly)tmpW.
data;
778 ((
unsigned long)deg_monexp > (
currRing->bitmask / ((
unsigned long)deg)/2)))
792 Warn(
"possible OVERFLOW in map, max exponent is %ld",
currRing->bitmask/2);
812 char *tmp = theMap->preimage;
813 theMap->preimage=(
char*)1L;
816 theMap->preimage=tmp;
831 IDMAP(
w)->preimage=save_r;
839 Werror(
"%s undefined in %s",what,theMap->preimage);
844 Werror(
"cannot find preimage %s",theMap->preimage);
856 size_t len=strlen(
name)+5;
861 snprintf(
s,len,
"%s(%d)",
name,
i+1);
868 h->data.uideal=(ideal)L->
m[
i].
data;
871 Print(
"//defining: %s as %d-th syzygy module\n",
s,
i+1);
876 Warn(
"cannot define %s",
s);
956 int add_row_shift = 0;
959 if (weights!=
NULL) add_row_shift=weights->
min_in();
988 l->m[0].rtyp=u->
Typ();
989 l->m[0].data=u->
Data();
992 l->m[0].attribute=*a;
999 l->m[0].attribute=
NULL;
1013 int add_row_shift=0;
1019 add_row_shift = ww->
min_in();
1020 (*weights) -= add_row_shift;
1027 res->data=(
void*)res_im;
1030 for(
int i=1;
i<=res_im->
rows();
i++)
1032 if (
IMATELEM(*res_im,1,
i)==0) { add_row_shift--; }
1037 if (weights!=
NULL)
delete weights;
1050 int add_row_shift=0;
1055 add_row_shift = ww->
min_in();
1056 (*weights) -= add_row_shift;
1061 if (weights!=
NULL)
delete weights;
1064 return reg+1+add_row_shift;
1068#define BREAK_LINE_LENGTH 80
1095 else if(strncmp(
s,
"cont;",5)==0)
1102 strcat(
s,
"\n;~\n");
1168 res->m[
i].data = (
void *)save->set;
1180 res->m[
i].data = (
void *)save->set;
1206 const char *
id =
name->name;
1211 WerrorS(
"object to declare is not a name");
1221 Werror(
"can not define `%s` in other package",
name->name);
1268 at=
iiCurrProc->attribute->get(
"default_arg");
1282 WerrorS(
"branchTo can only occur in a proc");
1290 if (ll!=(
l-1))
return FALSE;
1293 short *t=(
short*)
omAlloc(
l*
sizeof(
short));
1297 for(
i=1;
i<
l;
i++,
h=
h->next)
1302 Werror(
"arg %d is not a string",
i);
1306 b=
IsCmd((
char *)
h->Data(),tt);
1311 Werror(
"arg %d is not a type name",
i);
1318 Werror(
"last(%d.) arg.(%s) is not a proc(but %s(%d)), nesting=%d",
1331 if(
pi->data.s.body==
NULL )
1360 if (err==0)
Warn(
"too many arguments for %s",
IDID(currProc));
1384 if (strcmp(
p->name,
"#")==0)
1392 if (strcmp(
p->name,
"#")==0)
1447 WerrorS(
"object with a different type exists");
1465 Warn(
"'%s': no such identifier\n",
v->name);
1468 package frompack=v->req_packhdl;
1482 v->req_packhdl=rootpack;
1483 if (
h==frompack->idroot)
1485 frompack->idroot=
h->next;
1489 idhdl hh=frompack->idroot;
1496 Werror(
"`%s` not found",
v->Name());
1500 h->next=rootpack->idroot;
1514 Werror(
"cannot export:%s of internal type %d",
v->name,
v->rtyp);
1540 Werror(
"cannot export:%s of internal type %d",
v->name,
v->rtyp);
1545 idhdl old=pack->idroot->get(
v->name,toLev);
1553 else if (
IDTYP(old)==
v->Typ())
1591 WerrorS(
"no ring active (9)");
1633 WarnS(
"package not found\n");
1653 #ifndef TEST_ZN_AS_ZP
1657 mpz_init_set_ui(modBase, (
long)32003);
1664 r->cf->has_simple_Inverse=1;
1677 r->block0 = (
int *)
omAlloc0(3 *
sizeof(
int *));
1678 r->block1 = (
int *)
omAlloc0(3 *
sizeof(
int *));
1697 if ((r==
NULL)||(r->VarOffset==
NULL))
1736 L->
m[0].
data=(
void *)(
long)r->cf->ch;
1742 for(
i=0;
i<r->N;
i++)
1748 L->
m[1].
data=(
void *)LL;
1765 if (r->block1[
i]-r->block0[
i] >=0 )
1767 j=r->block1[
i]-r->block0[
i];
1770 if ((r->wvhdl!=
NULL) && (r->wvhdl[
i]!=
NULL))
1772 for(;
j>=0;
j--) (*iv)[
j]=r->wvhdl[
i][
j];
1774 else switch (r->order[
i])
1783 for(;
j>=0;
j--) (*iv)[
j]=1;
1793 LLL->
m[1].
data=(
void *)iv;
1794 LL->
m[
i].
data=(
void *)LLL;
1797 L->
m[2].
data=(
void *)LL;
1808 L->
m[3].
data=(
void *)q;
1827 L->
m[0].
data=(
void *)0;
1837 L->
m[1].
data=(
void *)LL;
1861 L->
m[0].
data=(
void *)0;
1871 L->
m[1].
data=(
void *)LL;
1904 LL->
m[1].
data=(
void *) C->modExponent;
1906 L->
m[1].
data=(
void *)LL;
1931 LL->
m[1].
data=(
void *)
R->cf->modExponent;
1933 L->
m[1].
data=(
void *)LL;
1944 WerrorS(
"ring with polynomial data must be the base ring or compatible");
1955 else if ( C->extRing!=
NULL )
1965 Lc->m[0].data=(
void*)(
long)C->m_nfCharQ;
1972 Lc->m[1].data=(
void*)Lv;
1983 Loo->
m[1].
data=(
void *)iv;
1986 Lo->
m[0].
data=(
void*)Loo;
1989 Lc->m[2].data=(
void*)Lo;
1995 res->data=(
void*)
Lc;
2000 res->data=(
void *)(
long)C->ch;
2014 for(
i=0;
i<r->N;
i++)
2020 L->
m[1].
data=(
void *)LL;
2041 assume( r->block0[
i] == r->block1[
i] );
2042 const int s = r->block0[
i];
2048 else if (r->block1[
i]-r->block0[
i] >=0 )
2050 int bl=
j=r->block1[
i]-r->block0[
i];
2058 j+=r->wvhdl[
i][bl+1];
2061 if ((r->wvhdl!=
NULL) && (r->wvhdl[
i]!=
NULL))
2063 for(;
j>=0;
j--) (*iv)[
j]=r->wvhdl[
i][
j+(
j>bl)];
2065 else switch (r->order[
i])
2074 for(;
j>=0;
j--) (*iv)[
j]=1;
2084 LLL->
m[1].
data=(
void *)iv;
2085 LL->
m[
i].
data=(
void *)LLL;
2088 L->
m[2].
data=(
void *)LL;
2092 if (r->qideal==
NULL)
2123 WerrorS(
"ring with polynomial data must be the base ring or compatible");
2141 L->
m[0].
data=(
char*)r->cf; r->cf->ref++;
2156 || (r->qideal !=
NULL)
2163 WerrorS(
"ring with polynomial data must be the base ring or compatible");
2188 else if ( r->cf->extRing!=
NULL )
2198 Lc->m[0].data=(
void*)(
long)r->cf->m_nfCharQ;
2205 Lc->m[1].data=(
void*)Lv;
2216 Loo->
m[1].
data=(
void *)iv;
2219 Lo->
m[0].
data=(
void*)Loo;
2222 Lc->m[2].data=(
void*)Lo;
2233 L->
m[0].
data=(
void *)(
long)r->cf->ch;
2238 L->
m[0].
data=(
void *)r->cf;
2253 WerrorS(
"invalid coeff. field description, expecting 0");
2261 WerrorS(
"invalid coeff. field description, expecting precision list");
2269 WerrorS(
"invalid coeff. field description list, expected list(`int`,`int`)");
2272 int r1=(int)(
long)LL->
m[0].
data;
2273 int r2=(int)(
long)LL->
m[1].
data;
2283 WerrorS(
"invalid coeff. field description, expecting parameter name");
2304 unsigned int modExponent = 1;
2308 mpz_init_set_ui(modBase,0);
2319 number tmp= (number) LL->
m[0].
data;
2326 mpz_init_set_ui(modBase,(
unsigned long) LL->
m[0].
data);
2330 mpz_init_set_ui(modBase,0);
2334 modExponent = (
unsigned long) LL->
m[1].
data;
2342 if ((mpz_cmp_ui(modBase, 1) == 0) && (
mpz_sgn1(modBase) < 0))
2344 WerrorS(
"Wrong ground ring specification (module is 1)");
2347 if (modExponent < 1)
2349 WerrorS(
"Wrong ground ring specification (exponent smaller than 1)");
2358 else if (modExponent > 1)
2361 if ((mpz_cmp_ui(modBase, 2) == 0) && (modExponent <= 8*
sizeof(
unsigned long)))
2372 info.exp= modExponent;
2383 info.exp= modExponent;
2396 for(
i=0;
i<
R->N-1;
i++)
2398 for(
j=
i+1;
j<
R->N;
j++)
2400 if (strcmp(
R->names[
i],
R->names[
j])==0)
2405 size_t len=2+strlen(
R->names[
i]);
2407 snprintf(
R->names[
j],len,
"@%s",
R->names[
i]);
2425 snprintf(
R->names[
j],16,
"@@(%d)",
i+1);
2451 poly
p=(poly)
v->m[
i].Data();
2457 Werror(
"var name %d must be a string or a ring variable",
i+1);
2463 Werror(
"var name %d must be `string` (not %d)",
i+1,
v->m[
i].Typ());
2470 WerrorS(
"variable must be given as `list`");
2486 for (
int j=0;
j < n-1;
j++)
2493 &&(strcmp((
char*)vv->
m[0].
Data(),
"L")==0))
2495 number nn=(number)vv->
m[1].
Data();
2502 Werror(
"illegal argument for pseudo ordering L: %d",vv->
m[1].
Typ());
2509 if (bitmask!=0) n--;
2513 R->block0=(
int *)
omAlloc0((n+1)*
sizeof(
int));
2514 R->block1=(
int *)
omAlloc0((n+1)*
sizeof(
int));
2517 for (j_in_R= n-2; j_in_R>=0; j_in_R--)
2520 for(j_in_R=0,j_in_L=0;j_in_R<n-1;j_in_R++,j_in_L++)
2525 WerrorS(
"ordering must be list of lists");
2532 if (strcmp((
char*)vv->
m[0].
Data(),
"L")==0)
2546 if (j_in_R==0)
R->block0[0]=1;
2563 if (jj<0)
R->block0[j_in_R]=1;
2564 else R->block0[j_in_R]=
R->block1[jj]+1;
2571 for(
int i=0;
i<
l;
i++) (*iv)[
i]=1;
2592 int sq=(int)
sqrt((
double)(iv_len));
2593 R->block1[j_in_R]=
si_max(
R->block0[j_in_R],
R->block0[j_in_R]+sq-1);
2596 R->block1[j_in_R]=
si_max(
R->block0[j_in_R],
R->block0[j_in_R]+iv_len-1);
2597 if (
R->block1[j_in_R]>
R->N)
2599 if (
R->block0[j_in_R]>
R->N)
2601 Print(
"R->block0[j_in_R]=%d,N=%d\n",
R->block0[j_in_R],
R->N);
2605 R->block1[j_in_R]=
R->N;
2606 iv_len=
R->block1[j_in_R]-
R->block0[j_in_R]+1;
2612 switch (
R->order[j_in_R])
2621 R->wvhdl[j_in_R] =(
int *)
omAlloc(iv_len*
sizeof(
int));
2622 for (
i=0;
i<iv_len;
i++)
2624 R->wvhdl[j_in_R][
i]=(*iv)[
i];
2629 for (
i=0;
i<iv_len;
i++)
2631 R->wvhdl[j_in_R][
i]=(*iv)[
i];
2633 R->wvhdl[j_in_R][
i]=iv->
length() - iv_len;
2637 R->wvhdl[j_in_R][
i+1]=(*iv)[
i];
2642 for (
i=0;
i<iv->
length();
i++)
R->wvhdl[j_in_R][
i]=(*iv)[
i];
2643 if (
R->block1[j_in_R]>
R->N)
2645 R->block1[j_in_R]=
R->N;
2659 for (
i=0;
i<iv_len;
i++)
2661 if (((*iv)[
i]!=1)&&(iv_len!=1))
2664 Warn(
"ignore weight %d for ord %d (%s) at pos %d\n>>%s<<",
2675 R->block1[j_in_R]=
R->block0[j_in_R]=0;
2679 R->block1[j_in_R]=
R->block0[j_in_R]=(*iv)[0];
2685 R->block1[j_in_R] =
R->block0[j_in_R] = 0;
2688 const int s = (*iv)[0];
2690 R->block1[j_in_R] =
R->block0[j_in_R] =
s;
2699 WerrorS(
"ring order not implemented");
2707 WerrorS(
"ordering name must be a (string,intvec)");
2716 if (
R->block1[j_in_R] !=
R->N)
2727 R->block0[j_in_R] <=
R->N)
2729 R->block1[j_in_R] =
R->N;
2733 Werror(
"ordering incomplete: size (%d) should be %d",
R->block1[j_in_R],
R->N);
2737 if (
R->block0[j_in_R]>
R->N)
2739 Werror(
"not enough variables (%d) for ordering block %d, scanned so far:",
R->N,j_in_R+1);
2740 for(
int ii=0;ii<=j_in_R;ii++)
2769 WerrorS(
"ordering must be given as `list`");
2772 if (bitmask!=0) {
R->bitmask=bitmask;
R->wanted_maxExp=bitmask; }
2804 int ch = (int)(
long)L->
m[0].
Data();
2814 Warn(
"%d is invalid characteristic of ground field. %d is used.", ch,
l);
2817 #ifndef TEST_ZN_AS_ZP
2821 mpz_init_set_ui(modBase,(
long) ch);
2828 R->cf->has_simple_Inverse=1;
2847 int ch = (int)(
long)LL->
m[0].
Data();
2848 while ((ch!=
fftable[is_gf_char]) && (
fftable[is_gf_char])) is_gf_char++;
2849 if (
fftable[is_gf_char]==0) is_gf_char=-1;
2870 WerrorS(
"could not create the specified coefficient field");
2874 if( extRing->qideal !=
NULL )
2877 extParam.
r = extRing;
2883 extParam.
r = extRing;
2892 WerrorS(
"coefficient field must be described by `int` or `list`");
2898 WerrorS(
"could not create coefficient field described by the input!");
2910 #ifdef HAVE_SHIFTBBA
2913 R->isLPring=isLetterplace;
2918 if ((bitmask!=0)&&(
R->wanted_maxExp==0))
R->wanted_maxExp=bitmask;
2925 ideal q=(ideal)L->
m[3].
Data();
2931 WerrorS(
"coefficient fields must be equal if q-ideal !=0");
2938 int par_perm_size=0;
2958 par_perm_size=
rPar(orig_ring);
2968 WerrorS(
"coefficient fields must be equal if q-ideal !=0");
2972 perm=(
int *)
omAlloc0((orig_ring->N+1)*
sizeof(
int));
2973 if (par_perm_size!=0)
2974 par_perm=(
int *)
omAlloc0(par_perm_size*
sizeof(
int));
2978 maFindPerm(orig_ring->names,orig_ring->N,orig_ring->parameter,orig_ring->P,
2987 else if (par_perm_size!=0)
2995 par_perm,par_perm_size);
3013 WerrorS(
"q-ideal must be given as `ideal`");
3062 ideal
id=(ideal)a->
Data();
3082 int n=(int)(
long)
b->Data();
3083 int d=(int)(
long)c->
Data();
3090 if ((d>n) || (d<1) || (n<1))
3095 int *choise = (
int*)
omAlloc(d*
sizeof(
int));
3099 temp=(ideal)id->
Data();
3114 p =
pCopy(temp->m[choise[
l-1]-1]);
3140 BOOLEAN minim=(int)(
long)
w->Data();
3142 int add_row_shift=0;
3148 add_row_shift = ww->
min_in();
3149 (*weights) -= add_row_shift;
3153 if (ww!=
NULL)
delete weights;
3179 if ((fullres==
NULL) && (minres==
NULL))
3293 ideal F=(ideal)id->
Data();
3299 res->data=(
char *)iv;
3305 for(
int i=0;
i<n;
i++) (*iv)[
i]=1;
3309 double wNsqr = (double)2.0 / (
double)n;
3311 x = (
int * )
omAlloc(2 * (n + 1) *
sizeof(
int));
3313 for (
i = n;
i!=0;
i--)
3314 (*iv)[
i-1] =
x[
i + n + 1];
3332 res->data=(
void *)
b;
3358 spec.
mu = (int)(
long)(
l->m[0].Data( ));
3359 spec.
pg = (int)(
long)(
l->m[1].Data( ));
3360 spec.
n = (int)(
long)(
l->m[2].Data( ));
3368 for(
int i=0;
i<spec.
n;
i++ )
3371 spec.
w[
i] = (*mul)[
i];
3402 for(
int i=0;
i<spec.
n;
i++ )
3406 (*mult)[
i] = spec.
w[
i];
3416 L->
m[0].
data = (
void*)(
long)spec.
mu;
3417 L->
m[1].
data = (
void*)(
long)spec.
pg;
3418 L->
m[2].
data = (
void*)(
long)spec.
n;
3469 WerrorS(
"the list is too short" );
3472 WerrorS(
"the list is too long" );
3476 WerrorS(
"first element of the list should be int" );
3479 WerrorS(
"second element of the list should be int" );
3482 WerrorS(
"third element of the list should be int" );
3485 WerrorS(
"fourth element of the list should be intvec" );
3488 WerrorS(
"fifth element of the list should be intvec" );
3491 WerrorS(
"sixth element of the list should be intvec" );
3495 WerrorS(
"first element of the list should be positive" );
3498 WerrorS(
"wrong number of numerators" );
3501 WerrorS(
"wrong number of denominators" );
3504 WerrorS(
"wrong number of multiplicities" );
3508 WerrorS(
"the Milnor number should be positive" );
3511 WerrorS(
"the geometrical genus should be nonnegative" );
3514 WerrorS(
"all numerators should be positive" );
3517 WerrorS(
"all denominators should be positive" );
3520 WerrorS(
"all multiplicities should be positive" );
3524 WerrorS(
"it is not symmetric" );
3527 WerrorS(
"it is not monotonous" );
3531 WerrorS(
"the Milnor number is wrong" );
3534 WerrorS(
"the geometrical genus is wrong" );
3538 WerrorS(
"unspecific error" );
3574 ( fast==2 ? 2 : 1 ) );
3584 ( fast==0 || (*node)->weight<=smax ) )
3606 cmp =
pCmp( (*node)->mon,
f );
3629 (*node)->nf =
search->nf;
3633 while( cmp<0 &&
f!=(poly)
NULL );
3646 if( (*node)->weight<=(
Rational)1 ) pg++;
3647 if( (*node)->weight==smax ) z++;
3648 if( (*node)->weight>weight_prev ) n++;
3650 weight_prev = (*node)->weight;
3651 node = &((*node)->next);
3673 cmp =
pCmp( (*node)->mon,
f );
3686 while( cmp<0 &&
f!=(poly)
NULL );
3702 n = ( z > 0 ? 2*n - 1 : 2*n );
3717 ( fast==0 ||
search->weight<=smax );
3743 for( n1=0, n2=n-1; n1<n2; n1++, n2-- )
3746 (*den) [n2] = (*den)[n1];
3747 (*mult)[n2] = (*mult)[n1];
3755 if( fast==0 || fast==1 )
3759 for(
int n1=0, n2=n-1 ; n1<n2 && symmetric==
TRUE; n1++, n2-- )
3762 (*
den) [n1]!= (*
den)[n2] ||
3769 if( symmetric==
FALSE )
3779 (*L)->m[0].data = (
void*)(
long)
mu;
3796 (*L)->m[0].data = (
void*)(
long)
mu;
3797 (*L)->m[1].data = (
void*)(
long)pg;
3798 (*L)->m[2].data = (
void*)(
long)n;
3799 (*L)->m[3].data = (
void*)nom;
3800 (*L)->m[4].data = (
void*)
den;
3801 (*L)->m[5].data = (
void*)
mult;
3810 #ifdef SPECTRUM_DEBUG
3811 #ifdef SPECTRUM_PRINT
3812 #ifdef SPECTRUM_IOSTREAM
3813 cout <<
"spectrumCompute\n";
3814 if( fast==0 ) cout <<
" no optimization" << endl;
3815 if( fast==1 ) cout <<
" weight optimization" << endl;
3816 if( fast==2 ) cout <<
" symmetry optimization" << endl;
3818 fputs(
"spectrumCompute\n",stdout );
3819 if( fast==0 ) fputs(
" no optimization\n", stdout );
3820 if( fast==1 ) fputs(
" weight optimization\n", stdout );
3821 if( fast==2 ) fputs(
" symmetry optimization\n", stdout );
3865 #ifdef SPECTRUM_DEBUG
3866 #ifdef SPECTRUM_PRINT
3867 #ifdef SPECTRUM_IOSTREAM
3868 cout <<
"\n computing the Jacobi ideal...\n";
3870 fputs(
"\n computing the Jacobi ideal...\n",stdout );
3879 #ifdef SPECTRUM_DEBUG
3880 #ifdef SPECTRUM_PRINT
3881 #ifdef SPECTRUM_IOSTREAM
3884 fputs(
" ", stdout );
3895 #ifdef SPECTRUM_DEBUG
3896 #ifdef SPECTRUM_PRINT
3897 #ifdef SPECTRUM_IOSTREAM
3899 cout <<
" computing a standard basis..." << endl;
3901 fputs(
"\n", stdout );
3902 fputs(
" computing a standard basis...\n", stdout );
3910 #ifdef SPECTRUM_DEBUG
3911 #ifdef SPECTRUM_PRINT
3914 #ifdef SPECTRUM_IOSTREAM
3917 fputs(
" ",stdout );
3962 #ifdef SPECTRUM_DEBUG
3963 #ifdef SPECTRUM_PRINT
3964 #ifdef SPECTRUM_IOSTREAM
3965 cout <<
"\n computing the highest corner...\n";
3967 fputs(
"\n computing the highest corner...\n", stdout );
3972 poly hc = (poly)
NULL;
3976 if( hc!=(poly)
NULL )
3991 #ifdef SPECTRUM_DEBUG
3992 #ifdef SPECTRUM_PRINT
3993 #ifdef SPECTRUM_IOSTREAM
3996 fputs(
" ", stdout );
4006 #ifdef SPECTRUM_DEBUG
4007 #ifdef SPECTRUM_PRINT
4008 #ifdef SPECTRUM_IOSTREAM
4009 cout <<
"\n computing the newton polygon...\n";
4011 fputs(
"\n computing the newton polygon...\n", stdout );
4018 #ifdef SPECTRUM_DEBUG
4019 #ifdef SPECTRUM_PRINT
4028 #ifdef SPECTRUM_DEBUG
4029 #ifdef SPECTRUM_PRINT
4030 #ifdef SPECTRUM_IOSTREAM
4031 cout <<
"\n computing the weight corner...\n";
4033 fputs(
"\n computing the weight corner...\n", stdout );
4038 poly wc = ( fast==0 ?
pCopy( hc ) :
4043 #ifdef SPECTRUM_DEBUG
4044 #ifdef SPECTRUM_PRINT
4045 #ifdef SPECTRUM_IOSTREAM
4048 fputs(
" ", stdout );
4058 #ifdef SPECTRUM_DEBUG
4059 #ifdef SPECTRUM_PRINT
4060 #ifdef SPECTRUM_IOSTREAM
4061 cout <<
"\n computing NF...\n" << endl;
4063 fputs(
"\n computing NF...\n", stdout );
4072 #ifdef SPECTRUM_DEBUG
4073 #ifdef SPECTRUM_PRINT
4075 #ifdef SPECTRUM_IOSTREAM
4078 fputs(
"\n", stdout );
4103 WerrorS(
"polynomial is zero" );
4106 WerrorS(
"polynomial has constant term" );
4109 WerrorS(
"not a singularity" );
4112 WerrorS(
"the singularity is not isolated" );
4115 WerrorS(
"highest corner cannot be computed" );
4118 WerrorS(
"principal part is degenerate" );
4124 WerrorS(
"unknown error occurred" );
4141 WerrorS(
"only works for local orderings" );
4149 WerrorS(
"does not work in quotient rings" );
4195 WerrorS(
"only works for local orderings" );
4200 WerrorS(
"does not work in quotient rings" );
4259 else if(
l->nr > 5 )
4297 int mu = (int)(
long)(
l->m[0].Data( ));
4298 int pg = (int)(
long)(
l->m[1].Data( ));
4299 int n = (int)(
long)(
l->m[2].Data( ));
4310 if( n !=
num->length( ) )
4314 else if( n !=
den->length( ) )
4318 else if( n != mul->
length( ) )
4338 for(
i=0;
i<n;
i++ )
4340 if( (*
num)[
i] <= 0 )
4344 if( (*
den)[
i] <= 0 )
4348 if( (*mul)[
i] <= 0 )
4360 for(
i=0,
j=n-1;
i<=
j;
i++,
j-- )
4364 (*mul)[
i] != (*mul)[
j] )
4374 for(
i=0,
j=1;
i<n/2;
i++,
j++ )
4386 for(
mu=0,
i=0;
i<n;
i++ )
4391 if(
mu != (
int)(
long)(
l->m[0].Data( )) )
4400 for( pg=0,
i=0;
i<n;
i++ )
4408 if( pg != (
int)(
long)(
l->m[1].Data( )) )
4437 WerrorS(
"first argument is not a spectrum:" );
4442 WerrorS(
"second argument is not a spectrum:" );
4475 int k = (int)(
long)second->
Data( );
4479 WerrorS(
"first argument is not a spectrum" );
4484 WerrorS(
"second argument should be positive" );
4510 BOOLEAN qh=(((int)(long)
w->Data())==1);
4521 WerrorS(
"first argument is not a spectrum" );
4526 WerrorS(
"second argument is not a spectrum" );
4569 WerrorS(
"Ground field not implemented!");
4589 LP->
m= (int)(
long)(
v->Data());
4595 LP->
n= (int)(
long)(
v->Data());
4601 LP->
m1= (int)(
long)(
v->Data());
4607 LP->
m2= (int)(
long)(
v->Data());
4613 LP->
m3= (int)(
long)(
v->Data());
4616 Print(
"m (constraints) %d\n",LP->
m);
4617 Print(
"n (columns) %d\n",LP->
n);
4641 lres->
m[4].
data=(
void*)(
long)LP->
m;
4644 lres->
m[5].
data=(
void*)(
long)LP->
n;
4646 res->data= (
void*)lres;
4653 ideal gls = (ideal)(arg1->
Data());
4654 int imtype= (int)(
long)arg2->
Data();
4677 gls= (poly)(arg1->
Data());
4678 int howclean= (int)(
long)arg3->
Data();
4682 WerrorS(
"Input polynomial is constant!");
4691 rlist->
Init( r[0] );
4692 for(
int i=r[0];
i>0;
i--)
4707 WerrorS(
"Ground field not implemented!");
4714 unsigned long int ii = (
unsigned long int)arg2->
Data();
4739 if ( (vpos !=
i) && (
pGetExp( piter,
i ) != 0) )
4741 WerrorS(
"The input polynomial must be univariate!");
4749 number * pcoeffs= (number *)
omAlloc( (deg+1) *
sizeof( number ) );
4751 for (
i= deg;
i >= 0;
i-- )
4766 for (
i=deg;
i >= 0;
i--)
4774 roots->
solver( howclean );
4782 rlist->
Init( elem );
4786 for (
j= 0;
j < elem;
j++ )
4795 for (
j= 0;
j < elem;
j++ )
4799 rlist->
m[
j].
data=(
void *)dummy;
4812 res->data= (
void*)rlist;
4821 p= (ideal)arg1->
Data();
4822 w= (ideal)arg2->
Data();
4833 int tdg= (int)(
long)arg3->
Data();
4840 WerrorS(
"Last input parameter must be > 0!");
4848 if (
m != (
int)
pow((
double)tdg+1,(
double)n) )
4850 Werror(
"Size of second input ideal must be equal to %d!",
4851 (
int)
pow((
double)tdg+1,(
double)n));
4858 WerrorS(
"Ground field not implemented!");
4863 number *pevpoint= (number *)
omAlloc( n *
sizeof( number ) );
4864 for (
i= 0;
i < n;
i++ )
4873 WerrorS(
"Elements of first input ideal must not be equal to -1, 0, 1!");
4882 WerrorS(
"Elements of first input ideal must be numbers!");
4885 pevpoint[
i]=
nCopy( tmp );
4889 number *wresults= (number *)
omAlloc(
m *
sizeof( number ) );
4890 for (
i= 0;
i <
m;
i++ )
4899 WerrorS(
"Elements of second input ideal must be numbers!");
4914 res->data= (
void*)rpoly;
4929 else gls= (ideal)(
v->Data());
4935 else imtype= (int)(
long)
v->Data();
4940 ideal test_id=
idInit(1,1);
4944 if (gls->m[
j]!=
NULL)
4946 test_id->m[0]=gls->m[
j];
4950 WerrorS(
"Newton polytope not of expected dimension");
4964 unsigned long int ii=(
unsigned long int)
v->Data();
4972 else howclean= (int)(
long)
v->Data();
5001 WerrorS(
"Error occurred during matrix setup!");
5014 WerrorS(
"Unsuitable input ideal: Minor of resultant matrix is singular!");
5020 if ( interpolate_det )
5026 if ( interpolate_det )
5033 for (
i=0;
i < c;
i++)
pWrite(iproots[
i]->getPoly());
5035 for (
i=0;
i < c;
i++)
pWrite(muiproots[
i]->getPoly());
5039 arranger=
new rootArranger( iproots, muiproots, howclean );
5050 WerrorS(
"Solver was unable to find any roots!");
5056 for (
i=0;
i <
count;
i++)
delete iproots[
i];
5059 for (
i=0;
i <
count;
i++)
delete muiproots[
i];
5066 res->data= (
void *)listofroots;
5090 onepoint->
Init(elem);
5091 for (
j= 0;
j < elem;
j++ )
5107 listofroots->
m[
i].
data=(
void *)onepoint;
5115 listofroots->
Init( 0 );
5129 if (rg==
NULL)
return;
5153 Warn(
"deleting denom_list for ring change to %s",
IDID(
h));
5167 if ((rg!=
NULL) && (rg->idroot==
NULL))
5195 if((*iv)[
i]>=0) { neg=
FALSE;
break; }
5200 (*iv)[
i]= - (*iv)[
i];
5209 if((*iv)[
i]>=0) { neg=
FALSE;
break; }
5214 (*iv)[
i]= -(*iv)[
i];
5223 if((*iv)[
i]!=1) { all_one=
FALSE;
break; }
5229 (*iv2)[2]=iv->
length()-2;
5241 if((*iv)[
i]!=1) { all_one=
FALSE;
break; }
5247 (*iv2)[2]=iv->
length()-2;
5288 (*iv)[2] += (*iv2)[2];
5295 if (!change)
h=
h->next;
5303 int last = 0, o=0, n = 1,
i=0, typ = 1,
j;
5315 R->wanted_maxExp=(*iv)[2]*2+1;
5328 WerrorS(
"invalid combination of orderings");
5336 WerrorS(
"more than one ordering c/C specified");
5342 R->block0=(
int *)
omAlloc0(n*
sizeof(
int));
5343 R->block1=(
int *)
omAlloc0(n*
sizeof(
int));
5346 int *weights=(
int*)
omAlloc0((
R->N+1)*
sizeof(
int));
5349 for (
j=0;
j < n-1;
j++)
5380 R->block0[n] =
last+1;
5383 R->wvhdl[n][
i-2] = (*iv)[
i];
5385 if (weights[
last]==0) weights[
last]=(*iv)[
i]*typ;
5398 R->block0[n] =
last+1;
5400 else last += (*iv)[0];
5405 if (weights[
i]==0) weights[
i]=typ;
5417 const int s = (*iv)[2];
5427 const int s = (*iv)[2];
5429 if( 1 <
s ||
s < -1 )
return TRUE;
5445 R->block0[n] =
last+1;
5450 R->wvhdl[n][
i-2]=(*iv)[
i];
5452 if (weights[
last]==0) weights[
last]=(*iv)[
i]*typ;
5454 last=
R->block0[n]-1;
5459 R->block0[n] =
last+1;
5462 if (
R->block1[n]-
R->block0[n]+2>=iv->
length())
5463 WarnS(
"missing module weights");
5464 for (
i=2;
i<=(
R->block1[n]-
R->block0[n]+2);
i++)
5466 R->wvhdl[n][
i-2]=(*iv)[
i];
5468 if (weights[
last]==0) weights[
last]=(*iv)[
i]*typ;
5470 R->wvhdl[n][
i-2]=iv->
length() -3 -(
R->block1[n]-
R->block0[n]);
5473 R->wvhdl[n][
i-1]=(*iv)[
i];
5475 last=
R->block0[n]-1;
5480 R->block0[n] =
last+1;
5488 if (weights[
last]==0) weights[
last]=(*iv)[
i]*typ;
5490 last=
R->block0[n]-1;
5496 if (Mtyp==0)
return TRUE;
5497 if (Mtyp==-1) typ = -1;
5501 R->wvhdl[n][
i-2]=(*iv)[
i];
5503 R->block0[n] =
last+1;
5506 for(
i=
R->block1[n];
i>=
R->block0[n];
i--)
5508 if (weights[
i]==0) weights[
i]=typ;
5518 Werror(
"Internal Error: Unknown ordering %d", (*iv)[1]);
5525 Werror(
"mismatch of number of vars (%d) and ordering (>=%d vars)",
5533 for(
i=1;
i<=
R->N;
i++)
5534 {
if (weights[
i]<0) {
R->OrdSgn=-1;
break; }}
5548 if (
R->block1[n] !=
R->N)
5559 R->block0[n] <=
R->N)
5561 R->block1[n] =
R->N;
5565 Werror(
"mismatch of number of vars (%d) and ordering (%d vars)",
5584 *
p = (
char*)sl->
name;
5652 WerrorS(
"parameter expected");
5659 for(
int i=pars-1;
i>=0;
i--)
5671 int ch = (int)(
long)pn->
Data();
5682 if ((ch<2)||(ch!=ch2))
5684 Warn(
"%d is invalid as characteristic of the ground field. 32003 is used.", ch);
5687 #ifndef TEST_ZN_AS_ZP
5691 mpz_init_set_ui(modBase, (
long)ch);
5698 cf->has_simple_Inverse=1;
5711 if ((ch!=0) && (ch!=
IsPrime(ch)) && (pars == 1))
5723 if ((ch!=0) && (ch!=
IsPrime(ch)))
5725 WerrorS(
"too many parameters");
5733 WerrorS(
"parameter expected");
5739 extParam.
r =
rDefault( ch, pars, names);
5740 for(
int i=pars-1;
i>=0;
i--)
5753 && ((strcmp(pn->
name,
"real")==0) || (strcmp(pn->
name,
"complex")==0)))
5756 BOOLEAN complex_flag=(strcmp(pn->
name,
"complex")==0);
5759 float_len=(int)(
long)pnn->
Data();
5760 float_len2=float_len;
5764 float_len2=(int)(
long)pnn->
Data();
5798 else if ((pn->
name !=
NULL) && (strcmp(pn->
name,
"integer") == 0))
5802 unsigned int modExponent = 1;
5803 mpz_init_set_si(modBase, 0);
5810 mpz_set_ui(modBase, (
long) pnn->
Data());
5814 modExponent = (long) pnn->
Data();
5819 mpz_mul_ui(modBase, modBase, (
int)(
long) pnn->
Data());
5832 if ((mpz_cmp_ui(modBase, 1) == 0) && (
mpz_sgn1(modBase) < 0))
5834 WerrorS(
"Wrong ground ring specification (module is 1)");
5837 if (modExponent < 1)
5839 WerrorS(
"Wrong ground ring specification (exponent smaller than 1");
5844 if (modExponent > 1 &&
cf ==
NULL)
5846 if ((mpz_cmp_ui(modBase, 2) == 0) && (modExponent <= 8*
sizeof(
unsigned long)))
5857 WerrorS(
"modulus must not be 0 or parameter not allowed");
5863 info.exp= modExponent;
5872 WerrorS(
"modulus must not be 0 or parameter not allowed");
5878 info.exp= modExponent;
5887 ring r=(ring)pn->
Data();
5888 if (r->qideal==
NULL)
5895 else if (
IDELEMS(r->qideal)==1)
5904 WerrorS(
"algebraic extension ring must have one minpoly");
5910 WerrorS(
"Wrong or unknown ground field specification");
5916 Print(
"pn[%p]: type: %d [%s]: %p, name: %s", (
void*)
p,
p->Typ(),
Tok2Cmdname(
p->Typ()),
p->Data(), (
p->name ==
NULL?
"NULL" :
p->name) );
5938 WerrorS(
"Invalid ground field specification");
5962 WerrorS(
"name of ring variable expected");
6015 int *perm=(
int *)
omAlloc0((org_ring->N+1)*
sizeof(
int));
6032 WerrorS(
"name of ring variable expected");
6042 for(;
i<org_ring->N;
i++)
6044 if (strcmp(org_ring->names[
i],
R->names[
j])==0)
6052 Werror(
"variable %d (%s) not in basering",
j+1,
R->names[
j]);
6069 if (min_var==-1) min_var=perm[
j];
6077 R->block0[
i]=min_var;
6078 R->block1[
i]=max_var;
6082 R->wvhdl[
i]=(
int*)
omAlloc0((max_var-min_var+1)*
sizeof(
int));
6087 R->wvhdl[
i][perm[
j]-
R->block0[
i]]=
6088 org_ring->wvhdl[
i][
j-org_ring->block0[
i]];
6114 R->order[
j-1]=
R->order[
j];
6115 R->block0[
j-1]=
R->block0[
j];
6116 R->block1[
j-1]=
R->block1[
j];
6118 R->wvhdl[
j-1]=
R->wvhdl[
j];
6126 while (
R->order[n]==0) n--;
6129 if (
R->block1[n] !=
R->N)
6140 R->block0[n] <=
R->N)
6142 R->block1[n] =
R->N;
6146 Werror(
"mismatch of number of vars (%d) and ordering (%d vars) in block %d",
6147 R->N,
R->block1[n],n);
6153 R->OrdSgn = org_ring->OrdSgn;
6176 if ((r->ref<=0)&&(r->order!=
NULL))
6186 if (
j==0)
WarnS(
"killing the basering for level 0");
6191 while (r->idroot!=
NULL)
6194 killhdl2(r->idroot,&(r->idroot),r);
6240 Warn(
"deleting denom_list for ring change from %s",
IDID(
h));
6314 ideal I=(ideal)u->
Data();
6317 for(
i=I->nrows*I->ncols-1;
i>=0;
i--)
6329 switch (
p->language)
6338 if(
p->libname!=
NULL)
6339 Print(
",%s",
p->libname);
6354 tmp_in.
data=(
void*)(
long)(*aa)[
i];
6362 Werror(
"apply fails at index %d",
i+1);
6365 if (
i==0) { memcpy(
res,&tmp_out,
sizeof(tmp_out)); }
6370 memcpy(curr,&tmp_out,
sizeof(tmp_out));
6392 res->data=(
void *)
l;
6399 for(
int i=0;
i<=aa->
nr;
i++)
6402 tmp_in.
Copy(&(aa->
m[
i]));
6411 Werror(
"apply fails at index %d",
i+1);
6414 if (
i==0) { memcpy(
res,&tmp_out,
sizeof(tmp_out)); }
6419 memcpy(curr,&tmp_out,
sizeof(tmp_out));
6442 WerrorS(
"first argument to `apply` must allow an index");
6452 char assume_yylinebuf[80];
6454 int lev=(long)a->
Data();
6461 if (bo) {
WerrorS(
"syntax error in ASSUME");
return TRUE;}
6463 if (
b->Data()==
NULL) {
Werror(
"ASSUME failed:%s",assume_yylinebuf);
return TRUE;}
6475 size_t len=strlen(a)+strlen(
s)+30;
6478 int end_s=strlen(
s);
6479 while ((end_s>0) && ((
s[end_s]<=
' ')||(
s[end_s]==
';'))) end_s--;
6482 snprintf(
name,len,
"%s->%s",a,
s);
6484 int start_s=end_s-1;
6485 while ((start_s>=0) && (
s[start_s]!=
';')) start_s--;
6488 snprintf(ss,len,
"parameter def %s;return(%s);\n",a,
s);
6493 snprintf(ss,len,
"parameter def %s;%s;return(%s);\n",a,
s,
s+start_s+1);
6554 snprintf(
buf,250,
"wrong length of parameters(%d), expected ",t);
6556 snprintf(
buf,250,
"par. %d is of undefined, expected ",nr);
6558 snprintf(
buf,250,
"par. %d is of type `%s`, expected ",nr,
Tok2Cmdname(t));
6559 for(
int i=1;
i<=
T[0];
i++)
6564 if (
i<
T[0]) strcat(
buf,
",");
6574 if (type_list[0]==0)
return TRUE;
6577 if (
l!=(
int)type_list[0])
6582 for(
int i=1;
i<=
l;
i++,args=args->
next)
6584 short t=type_list[
i];
6588 || (t!=args->
Typ()))
6599void iiReportMethods(
int args,
int iiOp,
char* cmd)
6611 Print(
" %s (%s) -> %s",
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)
void show(int mat=0, int spaces=0) const
virtual number getSubDet()
virtual ideal getMatrix()
virtual IStateType initState() const
rootArranger(rootContainer **_roots, rootContainer **_mu, const int _howclean=PM_CORRUPT)
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
int search(const CFArray &A, const CanonicalForm &F, int i, int j)
search for F in A between index i and j
‘factory.h’ is the user interface to Factory.
void WerrorS(const char *s)
const char * feSetOptValue(feOptIndex opt, char *optarg)
static void * feOptValue(feOptIndex opt)
VAR char my_yylinebuf[80]
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 * iiTwoOps(int t)
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)
const struct sValCmd1 dArith1[]
ideal kStd2(ideal F, ideal Q, tHomog h, intvec **w, bigintmat *hilb, int syzComp, int newIdeal, intvec *vw, s_poly_proc_t sp)
generic interface to GB/SB computations, large hilbert vectors
VAR denominator_list DENOMINATOR_LIST
denominator_list_s * 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 initialized 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 rHasLocalOrMixedOrdering(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_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)
#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)