10 #include "factory/factory.h"
112 case LE:
return "<=";
113 case GE:
return ">=";
122 if (
s[1]==
'\0')
return s[0];
123 else if (
s[2]!=
'\0')
return 0;
126 case '.':
if (
s[1]==
'.')
return DOTDOT;
132 case '+':
if (
s[1]==
'+')
return PLUSPLUS;
136 case '<':
if (
s[1]==
'=')
return LE;
139 case '>':
if (
s[1]==
'=')
return GE;
141 case '!':
if (
s[1]==
'=')
return NOTEQUAL;
153 if(fullname) sprintf(
buf2,
"%s::%s",
"",
IDID(
h));
197 && (strlen(
IDPROC(
h)->libname)>0))
208 memset(buffer,0,
sizeof(buffer));
210 if ((
s=strchr(buffer,
'\n'))!=
NULL)
218 Print(
"..., %d char(s)",
l);
235 { number2 n=(number2)
IDDATA(
h);
241 Print(
" %d x %d (%s)",
267 ((
intvec*)(
v->Data()))->cols());
break;
271 case MODUL_CMD:
Print(
", rk %d\n", (
int)(((ideal)(
v->Data()))->rank));
break;
374 && (((ring)d)->idroot!=
NULL))
400 if (((ring)
h->data)->idroot!=
NULL)
425 package savePack=currPack;
432 if (strcmp(what,
"all")==0)
467 Werror(
"%s is undefined",what);
501 package save_p=currPack;
535 WarnS(
"Gerhard, use the option command");
565 rc += ((
intvec *)(
v->Data()))->length();
576 rc+=((
lists)
v->Data())->nr+1;
597 WerrorS(
"write: need at least two arguments");
607 Werror(
"cannot write to %s",
s);
634 Werror(
"can not map from ground field of %s to current ground field",
638 if (
IDELEMS(theMap)<src_ring->N)
642 (src_ring->N)*
sizeof(poly));
649 WerrorS(
"argument of a map must have a name");
661 save_r=
IDMAP(
w)->preimage;
671 ideal
id=(ideal)tmpW.
data;
679 for(
int j=
IDELEMS(theMap)-1;
j>=0 && !overflow;
j--)
681 if (theMap->m[
j]!=
NULL)
688 if ((
p!=
NULL) && (degs[
i]!=0) &&
689 ((
unsigned long)deg_monexp > (
currRing->bitmask / ((
unsigned long)degs[
i])/2)))
701 for(
int j=
IDELEMS(theMap)-1;
j>=0 && !overflow;
j--)
703 if (theMap->m[
j]!=
NULL)
706 poly
p=(poly)tmpW.
data;
709 ((
unsigned long)deg_monexp > (
currRing->bitmask / ((
unsigned long)deg)/2)))
718 Warn(
"possible OVERFLOW in map, max exponent is %ld",
currRing->bitmask/2);
734 char *tmp = theMap->preimage;
735 theMap->preimage=(
char*)1L;
738 theMap->preimage=tmp;
753 IDMAP(
w)->preimage=save_r;
761 Werror(
"%s undefined in %s",what,theMap->preimage);
766 Werror(
"cannot find preimage %s",theMap->preimage);
782 sprintf(
s,
"%s(%d)",
name,
i+1);
789 h->data.uideal=(ideal)L->
m[
i].
data;
792 Print(
"//defining: %s as %d-th syzygy module\n",
s,
i+1);
797 Warn(
"cannot define %s",
s);
877 int add_row_shift = 0;
880 if (weights!=
NULL) add_row_shift=weights->
min_in();
909 l->m[0].rtyp=u->
Typ();
910 l->m[0].data=u->
Data();
913 l->m[0].attribute=*a;
920 l->m[0].attribute=
NULL;
940 add_row_shift = ww->
min_in();
941 (*weights) -= add_row_shift;
948 res->data=(
void*)res_im;
951 for(
int i=1;
i<=res_im->
rows();
i++)
953 if (
IMATELEM(*res_im,1,
i)==0) { add_row_shift--; }
958 if (weights!=
NULL)
delete weights;
976 add_row_shift = ww->
min_in();
977 (*weights) -= add_row_shift;
982 if (weights!=
NULL)
delete weights;
985 return reg+1+add_row_shift;
989 #define BREAK_LINE_LENGTH 80
1016 else if(strncmp(
s,
"cont;",5)==0)
1023 strcat(
s,
"\n;~\n");
1093 res->m[
i].data = (
void *)save->set;
1105 res->m[
i].data = (
void *)save->set;
1131 const char *
id =
name->name;
1136 WerrorS(
"object to declare is not a name");
1146 Werror(
"can not define `%s` in other package",
name->name);
1207 WerrorS(
"branchTo can only occur in a proc");
1215 if (ll!=(
l-1))
return FALSE;
1218 short *t=(
short*)
omAlloc(
l*
sizeof(
short));
1222 for(
i=1;
i<
l;
i++,
h=
h->next)
1227 Werror(
"arg %d is not a string",
i);
1231 b=
IsCmd((
char *)
h->Data(),tt);
1236 Werror(
"arg %d is not a type name",
i);
1243 Werror(
"last(%d.) arg.(%s) is not a proc(but %s(%d)), nesting=%d",
1256 if(
pi->data.s.body==
NULL )
1285 if (err==0)
Warn(
"too many arguments for %s",
IDID(currProc));
1309 if (strcmp(
p->name,
"#")==0)
1318 if (strcmp(
p->name,
"#")==0)
1320 is_default_list=
TRUE;
1328 if (is_default_list)
1398 Warn(
"'%s': no such identifier\n",
v->
name);
1401 package frompack=v->req_packhdl;
1415 v->req_packhdl=rootpack;
1416 if (
h==frompack->idroot)
1418 frompack->idroot=
h->next;
1422 idhdl hh=frompack->idroot;
1429 Werror(
"`%s` not found",
v->Name());
1433 h->next=rootpack->idroot;
1447 Werror(
"cannot export:%s of internal type %d",
v->
name,
v->rtyp);
1476 Werror(
"cannot export:%s of internal type %d",
v->
name,
v->rtyp);
1489 else if (
IDTYP(old)==
v->Typ())
1527 WerrorS(
"no ring active (9)");
1569 WarnS(
"package not found\n");
1590 #ifndef TEST_ZN_AS_ZP
1594 mpz_init_set_ui(modBase, (
long)32003);
1601 r->cf->has_simple_Inverse=1;
1614 r->block0 = (
int *)
omAlloc0(3 *
sizeof(
int *));
1615 r->block1 = (
int *)
omAlloc0(3 *
sizeof(
int *));
1634 if ((r==
NULL)||(r->VarOffset==
NULL))
1673 L->
m[0].
data=(
void *)(
long)r->cf->ch;
1679 for(
i=0;
i<r->N;
i++)
1685 L->
m[1].
data=(
void *)LL;
1702 if (r->block1[
i]-r->block0[
i] >=0 )
1704 j=r->block1[
i]-r->block0[
i];
1707 if ((r->wvhdl!=
NULL) && (r->wvhdl[
i]!=
NULL))
1709 for(;
j>=0;
j--) (*iv)[
j]=r->wvhdl[
i][
j];
1711 else switch (r->order[
i])
1720 for(;
j>=0;
j--) (*iv)[
j]=1;
1730 LLL->
m[1].
data=(
void *)iv;
1731 LL->
m[
i].
data=(
void *)LLL;
1734 L->
m[2].
data=(
void *)LL;
1744 pSetCoeff0(q->m[0],(number)(r->qideal->m[0]));
1745 L->
m[3].
data=(
void *)q;
1764 L->
m[0].
data=(
void *)0;
1774 L->
m[1].
data=(
void *)LL;
1798 L->
m[0].
data=(
void *)0;
1808 L->
m[1].
data=(
void *)LL;
1842 LL->
m[1].
data=(
void *) C->modExponent;
1844 L->
m[1].
data=(
void *)LL;
1871 LL->
m[1].
data=(
void *)
R->cf->modExponent;
1873 L->
m[1].
data=(
void *)LL;
1887 WerrorS(
"ring with polynomial data must be the base ring or compatible");
1900 else if ( C->extRing!=
NULL )
1910 Lc->m[0].data=(
void*)(
long)C->m_nfCharQ;
1917 Lc->m[1].data=(
void*)Lv;
1928 Loo->
m[1].
data=(
void *)iv;
1931 Lo->
m[0].
data=(
void*)Loo;
1934 Lc->m[2].data=(
void*)Lo;
1940 res->data=(
void*)
Lc;
1945 res->data=(
void *)(
long)C->ch;
1966 WerrorS(
"ring with polynomial data must be the base ring or compatible");
1984 L->
m[0].
data=(
char*)r->cf; r->cf->ref++;
1990 for(
i=0;
i<r->N;
i++)
1996 L->
m[1].
data=(
void *)LL;
2016 assume( r->block0[
i] == r->block1[
i] );
2017 const int s = r->block0[
i];
2023 else if (r->block1[
i]-r->block0[
i] >=0 )
2025 int bl=
j=r->block1[
i]-r->block0[
i];
2033 j+=r->wvhdl[
i][bl+1];
2036 if ((r->wvhdl!=
NULL) && (r->wvhdl[
i]!=
NULL))
2038 for(;
j>=0;
j--) (*iv)[
j]=r->wvhdl[
i][
j+(
j>bl)];
2040 else switch (r->order[
i])
2047 for(;
j>=0;
j--) (*iv)[
j]=1;
2057 LLL->
m[1].
data=(
void *)iv;
2058 LL->m[
i].data=(
void *)LLL;
2061 L->
m[2].
data=(
void *)LL;
2065 if (r->qideal==
NULL)
2091 || (r->qideal !=
NULL)
2098 WerrorS(
"ring with polynomial data must be the base ring or compatible");
2123 else if ( r->cf->extRing!=
NULL )
2133 Lc->m[0].data=(
void*)(
long)r->cf->m_nfCharQ;
2140 Lc->m[1].data=(
void*)Lv;
2151 Loo->
m[1].
data=(
void *)iv;
2154 Lo->
m[0].
data=(
void*)Loo;
2157 Lc->m[2].data=(
void*)Lo;
2168 L->
m[0].
data=(
void *)(
long)r->cf->ch;
2175 for(
i=0;
i<r->N;
i++)
2181 L->
m[1].
data=(
void *)LL;
2202 assume( r->block0[
i] == r->block1[
i] );
2203 const int s = r->block0[
i];
2209 else if (r->block1[
i]-r->block0[
i] >=0 )
2211 int bl=
j=r->block1[
i]-r->block0[
i];
2219 j+=r->wvhdl[
i][bl+1];
2222 if ((r->wvhdl!=
NULL) && (r->wvhdl[
i]!=
NULL))
2224 for(;
j>=0;
j--) (*iv)[
j]=r->wvhdl[
i][
j+(
j>bl)];
2226 else switch (r->order[
i])
2235 for(;
j>=0;
j--) (*iv)[
j]=1;
2245 LLL->
m[1].
data=(
void *)iv;
2246 LL->
m[
i].
data=(
void *)LLL;
2249 L->
m[2].
data=(
void *)LL;
2253 if (r->qideal==
NULL)
2277 WerrorS(
"invalid coeff. field description, expecting 0");
2285 WerrorS(
"invalid coeff. field description, expecting precision list");
2293 WerrorS(
"invalid coeff. field description list, expected list(`int`,`int`)");
2296 int r1=(int)(
long)LL->
m[0].
data;
2297 int r2=(int)(
long)LL->
m[1].
data;
2307 WerrorS(
"invalid coeff. field description, expecting parameter name");
2329 unsigned int modExponent = 1;
2333 mpz_init_set_ui(modBase,0);
2344 number tmp= (number) LL->
m[0].
data;
2351 mpz_init_set_ui(modBase,(
unsigned long) LL->
m[0].
data);
2355 mpz_init_set_ui(modBase,0);
2359 modExponent = (
unsigned long) LL->
m[1].
data;
2367 if ((mpz_cmp_ui(modBase, 1) == 0) && (
mpz_sgn1(modBase) < 0))
2369 WerrorS(
"Wrong ground ring specification (module is 1)");
2372 if (modExponent < 1)
2374 WerrorS(
"Wrong ground ring specification (exponent smaller than 1)");
2383 else if (modExponent > 1)
2386 if ((mpz_cmp_ui(modBase, 2) == 0) && (modExponent <= 8*
sizeof(
unsigned long)))
2397 info.exp= modExponent;
2408 info.exp= modExponent;
2422 for(
i=0;
i<
R->N-1;
i++)
2424 for(
j=
i+1;
j<
R->N;
j++)
2426 if (strcmp(
R->names[
i],
R->names[
j])==0)
2431 R->names[
j]=(
char *)
omAlloc(2+strlen(
R->names[
i]));
2432 sprintf(
R->names[
j],
"@%s",
R->names[
i]);
2450 sprintf(
R->names[
j],
"@@(%d)",
i+1);
2476 poly
p=(poly)
v->m[
i].Data();
2482 Werror(
"var name %d must be a string or a ring variable",
i+1);
2488 Werror(
"var name %d must be `string` (not %d)",
i+1,
v->m[
i].Typ());
2495 WerrorS(
"variable must be given as `list`");
2511 for (
int j=0;
j < n-1;
j++)
2518 &&(strcmp((
char*)vv->
m[0].
Data(),
"L")==0))
2520 number nn=(number)vv->
m[1].
Data();
2527 Werror(
"illegal argument for pseudo ordering L: %d",vv->
m[1].
Typ());
2534 if (bitmask!=0) n--;
2538 R->block0=(
int *)
omAlloc0((n+1)*
sizeof(int));
2539 R->block1=(
int *)
omAlloc0((n+1)*
sizeof(int));
2542 for (j_in_R= n-2; j_in_R>=0; j_in_R--)
2545 for(j_in_R=0,j_in_L=0;j_in_R<n-1;j_in_R++,j_in_L++)
2550 WerrorS(
"ordering must be list of lists");
2557 if (strcmp((
char*)vv->
m[0].
Data(),
"L")==0)
2571 if (j_in_R==0)
R->block0[0]=1;
2588 if (jj<0)
R->block0[j_in_R]=1;
2589 else R->block0[j_in_R]=
R->block1[jj]+1;
2596 for(
int i=0;
i<
l;
i++) (*iv)[
i]=1;
2615 R->block1[j_in_R]=
si_max(
R->block0[j_in_R],
R->block0[j_in_R]+iv_len-1);
2616 if (
R->block1[j_in_R]>
R->N)
2618 if (
R->block0[j_in_R]>
R->N)
2623 R->block1[j_in_R]=
R->N;
2624 iv_len=
R->block1[j_in_R]-
R->block0[j_in_R]+1;
2629 switch (
R->order[j_in_R])
2638 R->wvhdl[j_in_R] =(
int *)
omAlloc(iv_len*
sizeof(
int));
2639 for (
i=0;
i<iv_len;
i++)
2641 R->wvhdl[j_in_R][
i]=(*iv)[
i];
2646 for (
i=0;
i<iv_len;
i++)
2648 R->wvhdl[j_in_R][
i]=(*iv)[
i];
2650 R->wvhdl[j_in_R][
i]=iv->
length() - iv_len;
2654 R->wvhdl[j_in_R][
i+1]=(*iv)[
i];
2659 for (
i=0;
i<iv->
length();
i++)
R->wvhdl[j_in_R][
i]=(*iv)[
i];
2660 R->block1[j_in_R]=
si_max(
R->block0[j_in_R],
R->block0[j_in_R]+(
int)
sqrt((
double)(iv->
length())));
2661 if (
R->block1[j_in_R]>
R->N)
2663 R->block1[j_in_R]=
R->N;
2676 for (
i=0;
i<iv_len;
i++)
2678 if (((*iv)[
i]!=1)&&(iv_len!=1))
2681 Warn(
"ignore weight %d for ord %d (%s) at pos %d\n>>%s<<",
2692 R->block1[j_in_R]=
R->block0[j_in_R]=0;
2696 R->block1[j_in_R]=
R->block0[j_in_R]=(*iv)[0];
2702 R->block1[j_in_R] =
R->block0[j_in_R] = 0;
2705 const int s = (*iv)[0];
2707 R->block1[j_in_R] =
R->block0[j_in_R] =
s;
2716 WerrorS(
"ring order not implemented");
2724 WerrorS(
"ordering name must be a (string,intvec)");
2733 if (
R->block1[j_in_R] !=
R->N)
2744 R->block0[j_in_R] <=
R->N)
2746 R->block1[j_in_R] =
R->N;
2750 Werror(
"ordering incomplete: size (%d) should be %d",
R->block1[j_in_R],
R->N);
2754 if (
R->block0[j_in_R]>
R->N)
2756 Werror(
"not enough variables (%d) for ordering block %d, scanned so far:",
R->N,j_in_R+1);
2757 for(
int ii=0;ii<=j_in_R;ii++)
2786 WerrorS(
"ordering must be given as `list`");
2789 if (bitmask!=0) {
R->bitmask=bitmask;
R->wanted_maxExp=bitmask; }
2821 int ch = (int)(
long)L->
m[0].
Data();
2831 Warn(
"%d is invalid characteristic of ground field. %d is used.", ch,
l);
2834 #ifndef TEST_ZN_AS_ZP
2838 mpz_init_set_ui(modBase,(
long) ch);
2845 R->cf->has_simple_Inverse=1;
2866 int ch = (int)(
long)LL->
m[0].
Data();
2867 while ((ch!=
fftable[is_gf_char]) && (
fftable[is_gf_char])) is_gf_char++;
2868 if (
fftable[is_gf_char]==0) is_gf_char=-1;
2889 WerrorS(
"could not create the specified coefficient field");
2893 if( extRing->qideal !=
NULL )
2897 extParam.
r = extRing;
2904 extParam.
r = extRing;
2914 WerrorS(
"coefficient field must be described by `int` or `list`");
2920 WerrorS(
"could not create coefficient field described by the input!");
2932 #ifdef HAVE_SHIFTBBA
2935 R->isLPring=isLetterplace;
2940 if ((bitmask!=0)&&(
R->wanted_maxExp==0))
R->wanted_maxExp=bitmask;
2947 ideal q=(ideal)L->
m[3].
Data();
2953 WerrorS(
"coefficient fields must be equal if q-ideal !=0");
2960 int par_perm_size=0;
2980 par_perm_size=
rPar(orig_ring);
2990 WerrorS(
"coefficient fields must be equal if q-ideal !=0");
2994 perm=(
int *)
omAlloc0((orig_ring->N+1)*
sizeof(int));
2995 if (par_perm_size!=0)
2996 par_perm=(
int *)
omAlloc0(par_perm_size*
sizeof(
int));
3000 maFindPerm(orig_ring->names,orig_ring->N,orig_ring->parameter,orig_ring->P,
3009 else if (par_perm_size!=0)
3017 par_perm,par_perm_size);
3035 WerrorS(
"q-ideal must be given as `ideal`");
3084 ideal
id=(ideal)a->
Data();
3104 int n=(int)(
long)
b->Data();
3105 int d=(int)(
long)c->
Data();
3112 if ((d>n) || (d<1) || (n<1))
3117 int *choise = (
int*)
omAlloc(d*
sizeof(
int));
3121 temp=(ideal)id->
Data();
3136 p =
pCopy(temp->m[choise[
l-1]-1]);
3162 BOOLEAN minim=(int)(
long)
w->Data();
3164 int add_row_shift=0;
3170 add_row_shift = ww->
min_in();
3171 (*weights) -= add_row_shift;
3200 if ((fullres==
NULL) && (minres==
NULL))
3312 ideal F=(ideal)id->
Data();
3318 res->data=(
char *)iv;
3322 double wNsqr = (double)2.0 / (
double)n;
3324 x = (
int * )
omAlloc(2 * (n + 1) *
sizeof(int));
3326 for (
i = n;
i!=0;
i--)
3327 (*iv)[
i-1] =
x[
i + n + 1];
3345 res->data=(
void *)
b;
3363 #ifdef HAVE_SPECTRUM
3371 spec.
mu = (int)(
long)(
l->m[0].Data( ));
3372 spec.
pg = (int)(
long)(
l->m[1].Data( ));
3373 spec.
n = (int)(
long)(
l->m[2].Data( ));
3381 for(
int i=0;
i<spec.
n;
i++ )
3384 spec.
w[
i] = (*mul)[
i];
3415 for(
int i=0;
i<spec.
n;
i++ )
3419 (*mult)[
i] = spec.
w[
i];
3429 L->
m[0].
data = (
void*)(
long)spec.
mu;
3430 L->
m[1].
data = (
void*)(
long)spec.
pg;
3431 L->
m[2].
data = (
void*)(
long)spec.
n;
3482 WerrorS(
"the list is too short" );
3485 WerrorS(
"the list is too long" );
3489 WerrorS(
"first element of the list should be int" );
3492 WerrorS(
"second element of the list should be int" );
3495 WerrorS(
"third element of the list should be int" );
3498 WerrorS(
"fourth element of the list should be intvec" );
3501 WerrorS(
"fifth element of the list should be intvec" );
3504 WerrorS(
"sixth element of the list should be intvec" );
3508 WerrorS(
"first element of the list should be positive" );
3511 WerrorS(
"wrong number of numerators" );
3514 WerrorS(
"wrong number of denominators" );
3517 WerrorS(
"wrong number of multiplicities" );
3521 WerrorS(
"the Milnor number should be positive" );
3524 WerrorS(
"the geometrical genus should be nonnegative" );
3527 WerrorS(
"all numerators should be positive" );
3530 WerrorS(
"all denominators should be positive" );
3533 WerrorS(
"all multiplicities should be positive" );
3537 WerrorS(
"it is not symmetric" );
3540 WerrorS(
"it is not monotonous" );
3544 WerrorS(
"the Milnor number is wrong" );
3547 WerrorS(
"the geometrical genus is wrong" );
3551 WerrorS(
"unspecific error" );
3587 ( fast==2 ? 2 : 1 ) );
3597 ( fast==0 || (*node)->weight<=smax ) )
3619 cmp =
pCmp( (*node)->mon,
f );
3642 (*node)->nf =
search->nf;
3646 while( cmp<0 &&
f!=(poly)
NULL );
3659 if( (*node)->weight<=(
Rational)1 ) pg++;
3660 if( (*node)->weight==smax ) z++;
3661 if( (*node)->weight>weight_prev ) n++;
3663 weight_prev = (*node)->weight;
3664 node = &((*node)->next);
3686 cmp =
pCmp( (*node)->mon,
f );
3699 while( cmp<0 &&
f!=(poly)
NULL );
3715 n = ( z > 0 ? 2*n - 1 : 2*n );
3730 ( fast==0 ||
search->weight<=smax );
3756 for( n1=0, n2=n-1; n1<n2; n1++, n2-- )
3759 (*den) [n2] = (*den)[n1];
3760 (*mult)[n2] = (*mult)[n1];
3768 if( fast==0 || fast==1 )
3772 for(
int n1=0, n2=n-1 ; n1<n2 && symmetric==
TRUE; n1++, n2-- )
3775 (*
den) [n1]!= (*
den)[n2] ||
3782 if( symmetric==
FALSE )
3792 (*L)->m[0].data = (
void*)(
long)
mu;
3809 (*L)->m[0].data = (
void*)(
long)
mu;
3810 (*L)->m[1].data = (
void*)(
long)pg;
3811 (*L)->m[2].data = (
void*)(
long)n;
3812 (*L)->m[3].data = (
void*)nom;
3813 (*L)->m[4].data = (
void*)
den;
3814 (*L)->m[5].data = (
void*)
mult;
3823 #ifdef SPECTRUM_DEBUG
3824 #ifdef SPECTRUM_PRINT
3825 #ifdef SPECTRUM_IOSTREAM
3826 cout <<
"spectrumCompute\n";
3827 if( fast==0 ) cout <<
" no optimization" << endl;
3828 if( fast==1 ) cout <<
" weight optimization" << endl;
3829 if( fast==2 ) cout <<
" symmetry optimization" << endl;
3831 fputs(
"spectrumCompute\n",stdout );
3832 if( fast==0 ) fputs(
" no optimization\n", stdout );
3833 if( fast==1 ) fputs(
" weight optimization\n", stdout );
3834 if( fast==2 ) fputs(
" symmetry optimization\n", stdout );
3878 #ifdef SPECTRUM_DEBUG
3879 #ifdef SPECTRUM_PRINT
3880 #ifdef SPECTRUM_IOSTREAM
3881 cout <<
"\n computing the Jacobi ideal...\n";
3883 fputs(
"\n computing the Jacobi ideal...\n",stdout );
3892 #ifdef SPECTRUM_DEBUG
3893 #ifdef SPECTRUM_PRINT
3894 #ifdef SPECTRUM_IOSTREAM
3897 fputs(
" ", stdout );
3908 #ifdef SPECTRUM_DEBUG
3909 #ifdef SPECTRUM_PRINT
3910 #ifdef SPECTRUM_IOSTREAM
3912 cout <<
" computing a standard basis..." << endl;
3914 fputs(
"\n", stdout );
3915 fputs(
" computing a standard basis...\n", stdout );
3923 #ifdef SPECTRUM_DEBUG
3924 #ifdef SPECTRUM_PRINT
3927 #ifdef SPECTRUM_IOSTREAM
3930 fputs(
" ",stdout );
3975 #ifdef SPECTRUM_DEBUG
3976 #ifdef SPECTRUM_PRINT
3977 #ifdef SPECTRUM_IOSTREAM
3978 cout <<
"\n computing the highest corner...\n";
3980 fputs(
"\n computing the highest corner...\n", stdout );
3985 poly hc = (poly)
NULL;
3989 if( hc!=(poly)
NULL )
4004 #ifdef SPECTRUM_DEBUG
4005 #ifdef SPECTRUM_PRINT
4006 #ifdef SPECTRUM_IOSTREAM
4009 fputs(
" ", stdout );
4019 #ifdef SPECTRUM_DEBUG
4020 #ifdef SPECTRUM_PRINT
4021 #ifdef SPECTRUM_IOSTREAM
4022 cout <<
"\n computing the newton polygon...\n";
4024 fputs(
"\n computing the newton polygon...\n", stdout );
4031 #ifdef SPECTRUM_DEBUG
4032 #ifdef SPECTRUM_PRINT
4041 #ifdef SPECTRUM_DEBUG
4042 #ifdef SPECTRUM_PRINT
4043 #ifdef SPECTRUM_IOSTREAM
4044 cout <<
"\n computing the weight corner...\n";
4046 fputs(
"\n computing the weight corner...\n", stdout );
4051 poly wc = ( fast==0 ?
pCopy( hc ) :
4056 #ifdef SPECTRUM_DEBUG
4057 #ifdef SPECTRUM_PRINT
4058 #ifdef SPECTRUM_IOSTREAM
4061 fputs(
" ", stdout );
4071 #ifdef SPECTRUM_DEBUG
4072 #ifdef SPECTRUM_PRINT
4073 #ifdef SPECTRUM_IOSTREAM
4074 cout <<
"\n computing NF...\n" << endl;
4076 fputs(
"\n computing NF...\n", stdout );
4085 #ifdef SPECTRUM_DEBUG
4086 #ifdef SPECTRUM_PRINT
4088 #ifdef SPECTRUM_IOSTREAM
4091 fputs(
"\n", stdout );
4116 WerrorS(
"polynomial is zero" );
4119 WerrorS(
"polynomial has constant term" );
4122 WerrorS(
"not a singularity" );
4125 WerrorS(
"the singularity is not isolated" );
4128 WerrorS(
"highest corner cannot be computed" );
4131 WerrorS(
"principal part is degenerate" );
4137 WerrorS(
"unknown error occurred" );
4154 WerrorS(
"only works for local orderings" );
4162 WerrorS(
"does not work in quotient rings" );
4208 WerrorS(
"only works for local orderings" );
4213 WerrorS(
"does not work in quotient rings" );
4272 else if(
l->nr > 5 )
4310 int mu = (int)(
long)(
l->m[0].Data( ));
4311 int pg = (int)(
long)(
l->m[1].Data( ));
4312 int n = (int)(
long)(
l->m[2].Data( ));
4323 if( n !=
num->length( ) )
4327 else if( n !=
den->length( ) )
4331 else if( n != mul->
length( ) )
4351 for(
i=0;
i<n;
i++ )
4353 if( (*
num)[
i] <= 0 )
4357 if( (*
den)[
i] <= 0 )
4361 if( (*mul)[
i] <= 0 )
4373 for(
i=0,
j=n-1;
i<=
j;
i++,
j-- )
4376 (*den)[
i] != (*den)[
j] ||
4377 (*mul)[
i] != (*mul)[
j] )
4387 for(
i=0,
j=1;
i<n/2;
i++,
j++ )
4389 if( (*
num)[
i]*(*den)[
j] >= (*num)[
j]*(*den)[
i] )
4399 for(
mu=0,
i=0;
i<n;
i++ )
4404 if(
mu != (
int)(long)(
l->m[0].Data( )) )
4413 for( pg=0,
i=0;
i<n;
i++ )
4415 if( (*
num)[
i]<=(*den)[
i] )
4421 if( pg != (
int)(long)(
l->m[1].Data( )) )
4450 WerrorS(
"first argument is not a spectrum:" );
4455 WerrorS(
"second argument is not a spectrum:" );
4488 int k = (int)(
long)second->
Data( );
4492 WerrorS(
"first argument is not a spectrum" );
4497 WerrorS(
"second argument should be positive" );
4523 BOOLEAN qh=(((int)(
long)
w->Data())==1);
4534 WerrorS(
"first argument is not a spectrum" );
4539 WerrorS(
"second argument is not a spectrum" );
4582 WerrorS(
"Ground field not implemented!");
4602 LP->
m= (int)(
long)(
v->Data());
4608 LP->
n= (int)(
long)(
v->Data());
4614 LP->
m1= (int)(
long)(
v->Data());
4620 LP->
m2= (int)(
long)(
v->Data());
4626 LP->
m3= (int)(
long)(
v->Data());
4628 #ifdef mprDEBUG_PROT
4629 Print(
"m (constraints) %d\n",LP->
m);
4630 Print(
"n (columns) %d\n",LP->
n);
4654 lres->
m[4].
data=(
void*)(
long)LP->
m;
4657 lres->
m[5].
data=(
void*)(
long)LP->
n;
4659 res->data= (
void*)lres;
4666 ideal gls = (ideal)(arg1->
Data());
4667 int imtype= (int)(
long)arg2->
Data();
4690 gls= (poly)(arg1->
Data());
4691 int howclean= (int)(
long)arg3->
Data();
4695 WerrorS(
"Input polynomial is constant!");
4704 rlist->
Init( r[0] );
4705 for(
int i=r[0];
i>0;
i--)
4720 WerrorS(
"Ground field not implemented!");
4727 unsigned long int ii = (
unsigned long int)arg2->
Data();
4752 if ( (vpos !=
i) && (
pGetExp( piter,
i ) != 0) )
4754 WerrorS(
"The input polynomial must be univariate!");
4762 number * pcoeffs= (number *)
omAlloc( (deg+1) *
sizeof( number ) );
4764 for (
i= deg;
i >= 0;
i-- )
4778 #ifdef mprDEBUG_PROT
4779 for (
i=deg;
i >= 0;
i--)
4787 roots->
solver( howclean );
4795 rlist->
Init( elem );
4799 for (
j= 0;
j < elem;
j++ )
4808 for (
j= 0;
j < elem;
j++ )
4812 rlist->
m[
j].
data=(
void *)dummy;
4825 res->data= (
void*)rlist;
4834 p= (ideal)arg1->
Data();
4835 w= (ideal)arg2->
Data();
4846 int tdg= (int)(
long)arg3->
Data();
4853 WerrorS(
"Last input parameter must be > 0!");
4861 if (
m != (
int)
pow((
double)tdg+1,(
double)n) )
4863 Werror(
"Size of second input ideal must be equal to %d!",
4864 (
int)
pow((
double)tdg+1,(
double)n));
4871 WerrorS(
"Ground field not implemented!");
4876 number *pevpoint= (number *)
omAlloc( n *
sizeof( number ) );
4877 for (
i= 0;
i < n;
i++ )
4886 WerrorS(
"Elements of first input ideal must not be equal to -1, 0, 1!");
4895 WerrorS(
"Elements of first input ideal must be numbers!");
4898 pevpoint[
i]=
nCopy( tmp );
4902 number *wresults= (number *)
omAlloc(
m *
sizeof( number ) );
4903 for (
i= 0;
i <
m;
i++ )
4912 WerrorS(
"Elements of second input ideal must be numbers!");
4927 res->data= (
void*)rpoly;
4942 else gls= (ideal)(
v->Data());
4948 else imtype= (int)(
long)
v->Data();
4953 ideal test_id=
idInit(1,1);
4957 if (gls->m[
j]!=
NULL)
4959 test_id->m[0]=gls->m[
j];
4963 WerrorS(
"Newton polytope not of expected dimension");
4977 unsigned long int ii=(
unsigned long int)
v->Data();
4985 else howclean= (int)(
long)
v->Data();
5014 WerrorS(
"Error occurred during matrix setup!");
5022 #ifdef mprDEBUG_PROT
5027 WerrorS(
"Unsuitable input ideal: Minor of resultant matrix is singular!");
5033 if ( interpolate_det )
5039 if ( interpolate_det )
5044 #ifdef mprDEBUG_PROT
5046 for (
i=0;
i < c;
i++)
pWrite(iproots[
i]->getPoly());
5048 for (
i=0;
i < c;
i++)
pWrite(muiproots[
i]->getPoly());
5052 arranger=
new rootArranger( iproots, muiproots, howclean );
5063 WerrorS(
"Solver was unable to find any roots!");
5069 for (
i=0;
i <
count;
i++)
delete iproots[
i];
5072 for (
i=0;
i <
count;
i++)
delete muiproots[
i];
5079 res->data= (
void *)listofroots;
5091 int count=
self->roots[0]->getAnzRoots();
5092 int elem=
self->roots[0]->getAnzElems();
5096 if ( self->found_roots )
5103 onepoint->
Init(elem);
5104 for (
j= 0;
j < elem;
j++ )
5120 listofroots->
m[
i].
data=(
void *)onepoint;
5128 listofroots->
Init( 0 );
5142 if (rg==
NULL)
return;
5166 Warn(
"deleting denom_list for ring change to %s",
IDID(
h));
5180 if ((rg!=
NULL) && (rg->idroot==
NULL))
5208 if((*iv)[
i]>=0) { neg=
FALSE;
break; }
5213 (*iv)[
i]= - (*iv)[
i];
5222 if((*iv)[
i]>=0) { neg=
FALSE;
break; }
5227 (*iv)[
i]= -(*iv)[
i];
5236 if((*iv)[
i]!=1) { all_one=
FALSE;
break; }
5242 (*iv2)[2]=iv->
length()-2;
5254 if((*iv)[
i]!=1) { all_one=
FALSE;
break; }
5260 (*iv2)[2]=iv->
length()-2;
5301 (*iv)[2] += (*iv2)[2];
5308 if (!change)
h=
h->next;
5316 int last = 0, o=0, n = 1,
i=0, typ = 1,
j;
5328 R->wanted_maxExp=(*iv)[2]*2+1;
5341 WerrorS(
"invalid combination of orderings");
5349 WerrorS(
"more than one ordering c/C specified");
5355 R->block0=(
int *)
omAlloc0(n*
sizeof(
int));
5356 R->block1=(
int *)
omAlloc0(n*
sizeof(
int));
5359 int *weights=(
int*)
omAlloc0((
R->N+1)*
sizeof(int));
5362 for (
j=0;
j < n-1;
j++)
5393 R->block0[n] =
last+1;
5396 R->wvhdl[n][
i-2] = (*iv)[
i];
5398 if (weights[
last]==0) weights[
last]=(*iv)[
i]*typ;
5411 R->block0[n] =
last+1;
5413 else last += (*iv)[0];
5418 if (weights[
i]==0) weights[
i]=typ;
5430 const int s = (*iv)[2];
5440 const int s = (*iv)[2];
5442 if( 1 <
s ||
s < -1 )
return TRUE;
5458 R->block0[n] =
last+1;
5463 R->wvhdl[n][
i-2]=(*iv)[
i];
5465 if (weights[
last]==0) weights[
last]=(*iv)[
i]*typ;
5467 last=
R->block0[n]-1;
5472 R->block0[n] =
last+1;
5475 if (
R->block1[n]-
R->block0[n]+2>=iv->
length())
5476 WarnS(
"missing module weights");
5477 for (
i=2;
i<=(
R->block1[n]-
R->block0[n]+2);
i++)
5479 R->wvhdl[n][
i-2]=(*iv)[
i];
5481 if (weights[
last]==0) weights[
last]=(*iv)[
i]*typ;
5483 R->wvhdl[n][
i-2]=iv->
length() -3 -(
R->block1[n]-
R->block0[n]);
5486 R->wvhdl[n][
i-1]=(*iv)[
i];
5488 last=
R->block0[n]-1;
5493 R->block0[n] =
last+1;
5501 if (weights[
last]==0) weights[
last]=(*iv)[
i]*typ;
5503 last=
R->block0[n]-1;
5509 if (Mtyp==0)
return TRUE;
5510 if (Mtyp==-1) typ = -1;
5514 R->wvhdl[n][
i-2]=(*iv)[
i];
5516 R->block0[n] =
last+1;
5519 for(
i=
R->block1[n];
i>=
R->block0[n];
i--)
5521 if (weights[
i]==0) weights[
i]=typ;
5531 Werror(
"Internal Error: Unknown ordering %d", (*iv)[1]);
5538 Werror(
"mismatch of number of vars (%d) and ordering (>=%d vars)",
5546 for(
i=1;
i<=
R->N;
i++)
5547 {
if (weights[
i]<0) {
R->OrdSgn=-1;
break; }}
5561 if (
R->block1[n] !=
R->N)
5572 R->block0[n] <=
R->N)
5574 R->block1[n] =
R->N;
5578 Werror(
"mismatch of number of vars (%d) and ordering (%d vars)",
5597 *
p = (
char*)sl->
name;
5665 WerrorS(
"parameter expected");
5672 for(
int i=pars-1;
i>=0;
i--)
5684 int ch = (int)(
long)pn->
Data();
5695 if ((ch<2)||(ch!=ch2))
5697 Warn(
"%d is invalid as characteristic of the ground field. 32003 is used.", ch);
5700 #ifndef TEST_ZN_AS_ZP
5704 mpz_init_set_ui(modBase, (
long)ch);
5711 cf->has_simple_Inverse=1;
5724 if ((ch!=0) && (ch!=
IsPrime(ch)) && (pars == 1))
5736 if ((ch!=0) && (ch!=
IsPrime(ch)))
5738 WerrorS(
"too many parameters");
5746 WerrorS(
"parameter expected");
5752 extParam.
r =
rDefault( ch, pars, names);
5753 for(
int i=pars-1;
i>=0;
i--)
5766 && ((strcmp(pn->
name,
"real")==0) || (strcmp(pn->
name,
"complex")==0)))
5769 BOOLEAN complex_flag=(strcmp(pn->
name,
"complex")==0);
5772 float_len=(int)(
long)pnn->
Data();
5773 float_len2=float_len;
5777 float_len2=(int)(
long)pnn->
Data();
5812 else if ((pn->
name !=
NULL) && (strcmp(pn->
name,
"integer") == 0))
5816 unsigned int modExponent = 1;
5817 mpz_init_set_si(modBase, 0);
5824 mpz_set_ui(modBase, (
long) pnn->
Data());
5828 modExponent = (long) pnn->
Data();
5833 mpz_mul_ui(modBase, modBase, (
int)(
long) pnn->
Data());
5846 if ((mpz_cmp_ui(modBase, 1) == 0) && (
mpz_sgn1(modBase) < 0))
5848 WerrorS(
"Wrong ground ring specification (module is 1)");
5851 if (modExponent < 1)
5853 WerrorS(
"Wrong ground ring specification (exponent smaller than 1");
5858 if (modExponent > 1 &&
cf ==
NULL)
5860 if ((mpz_cmp_ui(modBase, 2) == 0) && (modExponent <= 8*
sizeof(
unsigned long)))
5871 WerrorS(
"modulus must not be 0 or parameter not allowed");
5877 info.exp= modExponent;
5886 WerrorS(
"modulus must not be 0 or parameter not allowed");
5892 info.exp= modExponent;
5903 extParam.
r = (ring)pn->
Data();
5915 WerrorS(
"Wrong or unknown ground field specification");
5921 Print(
"pn[%p]: type: %d [%s]: %p, name: %s", (
void*)
p,
p->Typ(),
Tok2Cmdname(
p->Typ()),
p->Data(), (
p->name ==
NULL?
"NULL" :
p->name) );
5943 WerrorS(
"Invalid ground field specification");
5967 WerrorS(
"name of ring variable expected");
6020 int *perm=(
int *)
omAlloc0((org_ring->N+1)*
sizeof(int));
6037 WerrorS(
"name of ring variable expected");
6047 for(;
i<org_ring->N;
i++)
6049 if (strcmp(org_ring->names[
i],
R->names[
j])==0)
6057 Werror(
"variable %d (%s) not in basering",
j+1,
R->names[
j]);
6070 for(
j=
R->block0[
i];j<=R->block1[
i];
j++)
6074 if (min_var==-1) min_var=perm[
j];
6082 R->block0[
i]=min_var;
6083 R->block1[
i]=max_var;
6087 R->wvhdl[
i]=(
int*)
omAlloc0((max_var-min_var+1)*
sizeof(int));
6088 for(
j=org_ring->block0[
i];j<=org_ring->block1[
i];
j++)
6092 R->wvhdl[
i][perm[
j]-
R->block0[
i]]=
6093 org_ring->wvhdl[
i][
j-org_ring->block0[
i]];
6119 R->order[
j-1]=
R->order[
j];
6120 R->block0[
j-1]=
R->block0[
j];
6121 R->block1[
j-1]=
R->block1[
j];
6123 R->wvhdl[
j-1]=
R->wvhdl[
j];
6131 while (
R->order[n]==0) n--;
6134 if (
R->block1[n] !=
R->N)
6145 R->block0[n] <=
R->N)
6147 R->block1[n] =
R->N;
6151 Werror(
"mismatch of number of vars (%d) and ordering (%d vars) in block %d",
6152 R->N,
R->block1[n],n);
6158 R->OrdSgn = org_ring->OrdSgn;
6181 if ((r->ref<=0)&&(r->order!=
NULL))
6191 if (
j==0)
WarnS(
"killing the basering for level 0");
6196 while (r->idroot!=
NULL)
6199 killhdl2(r->idroot,&(r->idroot),r);
6246 Warn(
"deleting denom_list for ring change from %s",
IDID(
h));
6320 ideal I=(ideal)u->
Data();
6323 for(
i=I->nrows*I->ncols-1;
i>=0;
i--)
6335 switch (
p->language)
6344 if(
p->libname!=
NULL)
6345 Print(
",%s",
p->libname);
6360 tmp_in.
data=(
void*)(
long)(*aa)[
i];
6368 Werror(
"apply fails at index %d",
i+1);
6371 if (
i==0) { memcpy(
res,&tmp_out,
sizeof(tmp_out)); }
6376 memcpy(curr,&tmp_out,
sizeof(tmp_out));
6398 for(
int i=0;
i<=aa->
nr;
i++)
6401 tmp_in.
Copy(&(aa->
m[
i]));
6410 Werror(
"apply fails at index %d",
i+1);
6413 if (
i==0) { memcpy(
res,&tmp_out,
sizeof(tmp_out)); }
6418 memcpy(curr,&tmp_out,
sizeof(tmp_out));
6441 WerrorS(
"first argument to `apply` must allow an index");
6451 char assume_yylinebuf[80];
6453 int lev=(long)a->
Data();
6460 if (bo) {
WerrorS(
"syntax error in ASSUME");
return TRUE;}
6462 if (
b->Data()==
NULL) {
Werror(
"ASSUME failed:%s",assume_yylinebuf);
return TRUE;}
6474 char *ss=(
char*)
omAlloc(strlen(a)+strlen(
s)+30);
6476 int end_s=strlen(
s);
6477 while ((end_s>0) && ((
s[end_s]<=
' ')||(
s[end_s]==
';'))) end_s--;
6480 sprintf(
name,
"%s->%s",a,
s);
6482 int start_s=end_s-1;
6483 while ((start_s>=0) && (
s[start_s]!=
';')) start_s--;
6486 sprintf(ss,
"parameter def %s;return(%s);\n",a,
s);
6491 sprintf(ss,
"parameter def %s;%s;return(%s);\n",a,
s,
s+start_s+1);
6551 sprintf(
buf,
"wrong length of parameters(%d), expected ",t);
6553 sprintf(
buf,
"par. %d is of type `%s`, expected ",nr,
Tok2Cmdname(t));
6554 for(
int i=1;
i<=
T[0];
i++)
6559 if (
i<
T[0]) strcat(
buf,
",");
6569 if (type_list[0]==0)
return TRUE;
6572 if (
l!=(
int)type_list[0])
6577 for(
int i=1;
i<=
l;
i++,args=args->
next)
6579 short t=type_list[
i];
6583 || (t!=args->
Typ()))
Rational pow(const Rational &a, int e)
struct for passing initialization parameters to naInitChar
void * atGet(idhdl root, const char *name, int t, void *defaultReturnValue)
void atSet(idhdl root, char *name, void *data, int typ)
static int si_max(const int a, const int b)
static int si_min(const int a, const int b)
for(int i=0;i<=n;i++) degsf[i]
void mu(int **points, int sizePoints)
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
void fillContainer(number *_coeffs, number *_ievpoint, const int _var, const int _tdg, const rootType _rt, const int _anz)
gmp_complex * getRoot(const int i)
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)
static FORCE_INLINE char * nCoeffName(const coeffs cf)
@ 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
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 char const ** n_ParameterNames(const coeffs r)
Returns a (const!) pointer to (const char*) names of parameters.
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 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
const ExtensionInfo & info
< [in] sqrfree poly
int search(const CFArray &A, const CanonicalForm &F, int i, int j)
search for F in A between index i and j
char name(const Variable &v)
void WerrorS(const char *s)
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...
const char * Tok2Cmdname(int tok)
int iiTestConvert(int inputType, int outputType)
void hIndMult(scmon pure, int Npure, scfmon rad, int Nrad, varset var, int Nvar)
void scComputeHC(ideal S, ideal Q, int ak, poly &hEdge, ring tailRing)
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)
scfmon hInit(ideal S, ideal Q, int *Nexist, ring tailRing)
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)
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)
#define IMATELEM(M, I, J)
intvec * ivCopy(const intvec *o)
int IsCmd(const char *n, int &tok)
BOOLEAN iiExprArith1(leftv res, leftv a, int op)
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
procinfo * iiInitSingularProcinfo(procinfov pi, const char *libname, const char *procname, int, long pos, BOOLEAN pstatic)
INST_VAR sleftv iiRETURNEXPR
char * iiGetLibProcBuffer(procinfo *pi, int part)
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 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 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)
idhdl rDefault(const char *s)
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 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 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)
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
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)
syStrategy syForceMin(lists li)
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)
void copy_deep(spectrum &spec, lists l)
void killlocals_rec(idhdl *root, int v, ring r)
BOOLEAN nuMPResMat(leftv res, leftv arg1, leftv arg2)
returns module representing the multipolynomial resultant matrix Arguments 2: ideal i,...
semicState list_is_spectrum(lists l)
static void killlocals0(int v, idhdl *localhdl, const ring r)
BOOLEAN semicProc(leftv res, leftv u, leftv v)
BOOLEAN loSimplex(leftv res, leftv args)
Implementation of the Simplex Algorithm.
BOOLEAN jjPROC(leftv res, leftv u, leftv v)
ring rCompose(const lists L, const BOOLEAN check_comp, const long bitmask, const int isLetterplace)
BOOLEAN loNewtonP(leftv res, leftv arg1)
compute Newton Polytopes of input polynomials
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)
const char * iiTwoOps(int t)
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 nuUResSolve(leftv res, leftv args)
solve a multipolynomial system using the u-resultant Input ideal must be 0-dimensional and (currRing-...
BOOLEAN jjVARIABLES_ID(leftv res, leftv u)
void rDecomposeRing_41(leftv h, const coeffs C)
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,...
BOOLEAN lRingDependend(lists L)
resolvente liFindRes(lists L, int *len, int *typ0, intvec ***weights)
char * lString(lists l, BOOLEAN typed, int dim)
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)
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)
gmp_float sqrt(const gmp_float &a)
char * complexToStr(gmp_complex &c, const unsigned int oprec, const coeffs src)
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...
void report(const char *fmt, const char *name)
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 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)
#define __pp_Mult_nn(p, n, r)
static unsigned pLength(poly a)
static poly p_Init(const ring r, omBin bin)
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 ...
Compatiblity 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.
void pNorm(poly p, const ring R=currRing)
#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,...)
const char * rSimpleOrdStr(int ord)
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...
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
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_Ring(const ring r)
static BOOLEAN rField_is_R(const ring r)
static int rBlocks(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 ring rIncRefCnt(ring r)
static char const ** rParameter(const ring r)
(r->cf->parameter)
static BOOLEAN rField_is_Zn(const ring r)
static int rPar(const ring r)
(r->cf->P)
static int rInternalChar(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 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)
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)
poly computeWC(const newtonPolygon &np, Rational max_weight, const ring r)
void computeNF(ideal stdJ, poly hc, poly wc, spectrumPolyList *NF, const ring r)
BOOLEAN hasLinearTerm(poly h, const ring r)
BOOLEAN hasConstTerm(poly h, const ring r)
INST_VAR sleftv sLastPrinted
BOOLEAN RingDependend(int t)
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)
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)