52 if(modulweight==
NULL)
return 0;
54 for(i=modulweight->
rows()-1;i!=0;i--)
67 for (i = Nvar; i>0; i--)
70 for (j = 0; j < Nstc; j++)
82 WerrorS(
"interal arrays too big");
85 p = (
int *)
omAlloc((
unsigned long)z *
sizeof(int));
89 memcpy(p,
Qpol[j],
Ql[j] *
sizeof(
int));
94 for (x =
Ql[j]; x < z; x++)
109 memcpy(pon, pol, l *
sizeof(
int));
112 for (i = x; i <
l; i++)
113 pon[i] -= pol[i - x];
114 for (i = l; i < ln; i++)
115 pon[i] = -pol[i - x];
119 for (i = l; i <
x; i++)
121 for (i = x; i < ln; i++)
122 pon[i] = -pol[i - x];
132 for (i = Nv; i>0; i--)
134 x = pure[var[i + 1]];
140 for (i = 0; i <
l; i++)
146 for (i = 0; i <
l; i++)
155 int Nvar,
int *pol,
int Lpol)
157 int iv = Nvar -1, ln,
a, a0, a1,
b,
i;
170 hStepS(sn, Nstc, var, Nvar, &a, &x);
194 hStepS(sn, Nstc, var, Nvar, &a, &x);
195 hElimS(sn, &b, a0, a, var, iv);
197 hPure(sn, a0, &a1, var, iv, pn, &i);
203 pon =
hAddHilb(iv, x - x0, pol, &ln);
210 pon =
hAddHilb(iv, x - x0, pol, &ln);
254 WerrorS(
"Ideal is not deg sorted!!");
340 for(j =
IDELEMS(I)-1; j>=i+1;j--)
351 for(j =
IDELEMS(I)-1; j>=i+2;j--)
374 for(i = 0; i<=
IDELEMS(I)-1;i++)
434 for(i = 0; i<=
IDELEMS(res)-1; i++)
464 for(j=
IDELEMS(I)-1;(j>=0)&&(flag);j--)
492 for(i =
IDELEMS(I)-1; (i>=0) && (dummy == 0); i--)
494 for(j = 1; (j<=
currRing->N) && (dummy == 0); j++)
525 for(i =0 ; (i<=
IDELEMS(I)-1) && (dummy == 0); i++)
527 for(j = 1; (j<=
currRing->N) && (dummy == 0); j++)
588 for(i = 0 ;i<=
IDELEMS(I)-1;i++)
619 for(i =
IDELEMS(I)-1;(i>=0) && (flag);i--)
622 for(j=1;(j<=
currRing->N) && (flag);j++)
647 for(i = 0;(i<=
IDELEMS(I)-1) && (flag);i++)
650 for(j=1;(j<=
currRing->N) && (flag);j++)
675 for(i =
IDELEMS(I)-1;(i>=0) && (flag);i--)
678 for(j=1;(j<=
currRing->N) && (flag);j++)
703 for(i = 0;(i<=
IDELEMS(I)-1) && (flag);i++)
706 for(j=1;(j<=
currRing->N) && (flag);j++)
809 if((variables % 2) == 0)
810 {mpz_set_si(dummy, 1);}
812 {mpz_set_si(dummy, -1);}
813 mpz_add(ec, ec, dummy);
826 int i,howmanyvarinp = 0;
834 eulerchar(Ip, variables-howmanyvarinp, ec);
850 for(i=
IDELEMS(I)-1;(i>=0)&&(flag);i--)
852 for(j=1;(j<=
currRing->N)&&(flag);j++)
862 if(notsqrfree !=
NULL)
893 for(j = 1;(j<=
currRing->N) &&(flag);j++)
935 void rouneslice(ideal I, ideal S,
poly q,
poly x,
int &
prune,
int &moreprune,
int &steps,
int &NNN, mpz_ptr &hilbertcoef,
int* &hilbpower)
1030 mpz_ptr ec_ptr = ec;
1035 hilbertcoef = (mpz_ptr)
omAlloc((NNN+1)*
sizeof(mpz_t));
1036 hilbpower = (
int*)
omAlloc((NNN+1)*
sizeof(int));
1037 mpz_init( &hilbertcoef[NNN]);
1038 mpz_set( &hilbertcoef[NNN], ec);
1046 for(i = 0;(i<NNN)&&(flag == FALSE)&&(p_Totaldegree(q,currRing)>=hilbpower[
i]);i++)
1051 mpz_add(&hilbertcoef[i],&hilbertcoef[i],ec_ptr);
1056 hilbertcoef = (mpz_ptr)
omRealloc(hilbertcoef, (NNN+1)*
sizeof(mpz_t));
1057 hilbpower = (
int*)
omRealloc(hilbpower, (NNN+1)*
sizeof(int));
1058 mpz_init(&hilbertcoef[NNN]);
1059 for(j = NNN; j>
i; j--)
1061 mpz_set(&hilbertcoef[j],&hilbertcoef[j-1]);
1062 hilbpower[
j] = hilbpower[j-1];
1064 mpz_set( &hilbertcoef[i], ec);
1078 rouneslice(Ip, Sp, pq, x, prune, moreprune, steps, NNN, hilbertcoef,hilbpower);
1093 int steps = 0,
prune = 0, moreprune = 0;
1094 mpz_ptr hilbertcoef;
1108 rouneslice(I,S,q,X->m[0],
prune, moreprune, steps, NNN, hilbertcoef, hilbpower);
1116 printf(
"\n// %8d t^0",1);
1117 for(i = 0; i<NNN; i++)
1119 if(mpz_sgn(&hilbertcoef[i])!=0)
1121 gmp_printf(
"\n// %8Zd t^%d",&hilbertcoef[i],hilbpower[i]);
1124 omFreeSize(hilbertcoef, (NNN)*
sizeof(mpz_t));
1138 int i,
j,
k,
l, ii, mw;
1149 if (wdegree ==
NULL)
1184 if (modulweight !=
NULL)
1185 j = (*modulweight)[mc-1]-mw;
1190 for (i =
hNvar; i>=0; i--)
1220 while ((i > 0) && ((*Qpol)[i - 1] == 0))
1228 for (ii=0; ii<
k; ii++)
1229 (*work)[ii] = (*hseries1)[ii];
1230 if (hseries1 !=
NULL)
1237 (*hseries1)[i + j - 1] += (*Qpol)[i - 1];
1256 while ((*hseries1)[l-2]==0) l--;
1260 for (ii=l-2; ii>=0; ii--)
1261 (*work)[ii] = (*hseries1)[ii];
1265 (*hseries1)[l-1] = mw;
1267 for (i = 0; i <= (
currRing->N); i++)
1290 return hSeries(S, modulweight, 0, wdegree, Q, tailRing);
1298 return hSeries(S, modulweight, 1, wdegree, Q, tailRing);
1304 int i,
j,
k,
s, t,
l;
1305 if (hseries1 ==
NULL)
1307 work =
new intvec(hseries1);
1308 k = l = work->
length()-1;
1310 for (i = k-1; i >= 0; i--)
1314 if ((s != 0) || (k == 1))
1319 for (i = k-1; i >= 0; i--)
1327 hseries2 =
new intvec(k+1);
1328 for (i = k-1; i >= 0; i--)
1329 (*hseries2)[
i] = (*work)[
i];
1330 (*hseries2)[
k] = (*work)[
l];
1346 for(k=j-2; k>=0; k--)
1355 if (hseries ==
NULL)
1359 for (i = 0; i <
l; i++)
1364 Print(
"// %8d t^%d\n", j, i+k);
1380 const int l = hseries1->
length()-1;
1389 if ((l == 1) &&(mu == 0))
1417 while ((j >= 0) && (I->m[j] ==
NULL))
1460 if(JCount != ObCount)
1465 for(i = 0; i < JCount; i++)
1519 if(JCount != ObCount)
1524 for(i = 0; i< JCount; i++)
1549 int orbCount = idorb.size();
1575 for(i = 1;i < orbCount; i++)
1596 dtrp = trInd - degp;
1626 int OrbCount = idorb.size();
1633 for(i = 1; i < OrbCount; i++)
1683 for(k = ICount - 1; k >=1; k--)
1685 for(i = 0; i <
k; i++)
1711 int *e=(
int *)
omAlloc((r->N+1)*
sizeof(int));
1712 int *
s=(
int *)
omAlloc0((r->N+1)*
sizeof(int));
1715 for(j = 1; j <= cnt; j++)
1742 int *e = (
int *)
omAlloc((r->N+1)*
sizeof(int));
1743 int *
s=(
int *)
omAlloc0((r->N+1)*
sizeof(int));
1752 for(j = (cnt+1); j < (r->N+1); j++)
1783 for(i = 0;i <= d - 1; i++)
1849 for(i = 0; i < SCount; i++)
1851 TwordMap(S->m[i], w, lV, d, Jwi, flag);
1878 int (*POS)(ideal,
poly, std::vector<ideal>, std::vector<poly>, int);
1889 std::vector<ideal > idorb;
1890 std::vector< poly > polist;
1892 ideal orb_init =
idInit(1, 1);
1893 idorb.push_back(orb_init);
1897 std::vector< std::vector<int> > mat;
1898 std::vector<int> row;
1909 while(lpcnt < idorb.size())
1929 for(is = 1; is <= lV; is++)
1948 ps = (*POS)(Jwi, wi, idorb, polist, trInd);
1953 idorb.push_back(Jwi);
1954 polist.push_back(wi);
1959 row[ps-1] = row[ps-1] + 1;
1970 for(is = idorb.size()-1; is >= 0; is--)
1974 for(is = polist.size()-1; is >= 0; is--)
1984 int rowCount, colCount;
1986 for(rowCount = 0; rowCount < mat.size(); rowCount++)
1988 for(colCount = 0; colCount < mat[rowCount].size(); colCount++)
1990 Print(
"%d,",mat[rowCount][colCount]);
1994 printf(
"rhs column matrix::\n");
1995 for(colCount = 0; colCount < C.size(); colCount++)
1996 printf(
"%d,",C[colCount]);
2000 char** tt=(
char**)
omalloc(
sizeof(
char*));
2006 char** xx = (
char**)
omalloc(
sizeof(
char*));
2017 for(rowCount = 0; rowCount < lO; rowCount++)
2019 for(colCount = 0; colCount < mat[rowCount].size(); colCount++)
2021 if(mat[rowCount][colCount] != 0)
2023 MATELEM(mR, rowCount + 1, colCount + 1) =
p_ISet(mat[rowCount][colCount], R);
2027 if(C[rowCount] != 0)
2029 cMat->
m[rowCount] =
p_ISet(C[rowCount], R);
2031 mat[rowCount].resize(0);
2041 luDecomp(gMat, pMat, lMat, uMat, R);
2057 Print(
"\nOrbit size = %d\n", lO);
int status int void size_t count
ideal idQuotMon(ideal Iorig, ideal p)
void rouneslice(ideal I, ideal S, poly q, poly x, int &prune, int &moreprune, int &steps, int &NNN, mpz_ptr &hilbertcoef, int *&hilbpower)
#define id_TestTail(A, lR, tR)
const CanonicalForm int s
void hLexS(scfmon stc, int Nstc, varset var, int Nvar)
const CanonicalForm int const CFList const Variable & y
bool luSolveViaLUDecomp(const matrix pMat, const matrix lMat, const matrix uMat, const matrix bVec, matrix &xVec, matrix &H)
Solves the linear system A * x = b, where A is an (m x n)-matrix which is given by its LU-decompositi...
static int positionInOrbit_FG_Case(ideal I, poly, std::vector< ideal > idorb, std::vector< poly >, int)
static poly ChoosePVar(ideal I)
void mu(int **points, int sizePoints)
scfmon hGetmem(int lm, scfmon old, monp monmem)
void hElimS(scfmon stc, int *e1, int a2, int e2, varset var, int Nvar)
#define idDelete(H)
delete an ideal
void scPrintDegree(int co, int mu)
static void hHilbStep(scmon pure, scfmon stc, int Nstc, varset var, int Nvar, int *pol, int Lpol)
static int isMonoIdBasesSame(ideal J, ideal Ob)
used for all transcendental extensions, i.e., the top-most extension in an extension tower is transce...
static unsigned long p_SetComp(poly p, unsigned long c, ring r)
static void hLastHilb(scmon pure, int Nv, varset var, int *pol, int lp)
BEGIN_NAMESPACE_SINGULARXX const ring const ring tailRing
static void p_GetExpV(poly p, int *ev, const ring r)
#define omFreeSize(addr, size)
static short rVar(const ring r)
#define rVar(r) (r->N)
void id_Delete(ideal *h, ring r)
deletes an ideal/module/matrix
static poly ChoosePXL(ideal I)
static poly ChoosePOF(ideal I)
static bool JustVar(ideal I)
bool unitMatrix(const int n, matrix &unitMat, const ring R)
Creates a new matrix which is the (nxn) unit matrix, and returns true in case of success.
static bool IsIn(poly p, ideal I)
static poly pp_Mult_mm(poly p, poly m, const ring r)
static ideal idAddMon(ideal I, ideal p)
static long p_Totaldegree(poly p, const ring r)
void hDegreeSeries(intvec *s1, intvec *s2, int *co, int *mu)
void WerrorS(const char *s)
static void TwordMap(poly p, poly w, int lV, int d, ideal Jwi, bool &flag)
#define pLmDivisibleBy(a, b)
like pDivisibleBy, except that it is assumed that a!=NULL, b!=NULL
static number & pGetCoeff(poly p)
return an alias to the leading coefficient of p assumes that p != NULL NOTE: not copy ...
static poly ChoosePVF(ideal I)
static number p_SetCoeff(poly p, number n, ring r)
static int positionInOrbit_IG_Case(ideal I, poly w, std::vector< ideal > idorb, std::vector< poly > polist, int trInd)
static poly LCMmon(ideal I)
intvec * hHstdSeries(ideal S, intvec *modulweight, intvec *wdegree, ideal Q, ring tailRing)
static void p_SetExpV(poly p, int *ev, const ring r)
static poly p_Copy(poly p, const ring r)
returns a copy of p
void prune(Variable &alpha)
static FORCE_INLINE number n_Param(const int iParameter, const coeffs r)
return the (iParameter^th) parameter as a NEW number NOTE: parameter numbering: 1..n_NumberOfParameters(...)
void hDelete(scfmon ev, int ev_length)
static FORCE_INLINE number n_Mult(number a, number b, const coeffs r)
return the product of 'a' and 'b', i.e., a*b
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
void luDecomp(const matrix aMat, matrix &pMat, matrix &lMat, matrix &uMat, const ring R)
LU-decomposition of a given (m x n)-matrix.
Coefficient rings, fields and other domains suitable for Singular polynomials.
void hOrdSupp(scfmon stc, int Nstc, varset var, int Nvar)
const CanonicalForm CFMap CFMap & N
void hKill(monf xmem, int Nvar)
static long p_GetExp(const poly p, const unsigned long iBitmask, const int VarOffset)
get a single variable exponent : the integer VarOffset encodes:
static poly ChoosePJL(ideal I)
static int * hAddHilb(int Nv, int x, int *pol, int *lp)
static poly ChoosePXF(ideal I)
The main handler for Singular numbers which are suitable for Singular polynomials.
static void hWDegree(intvec *wdegree)
void hPure(scfmon stc, int a, int *Nstc, varset var, int Nvar, scmon pure, int *Npure)
static ideal minimalMonomialsGenSet(ideal I)
void hStaircase(scfmon stc, int *Nstc, varset var, int Nvar)
void sortMonoIdeal_pCompare(ideal I)
static BOOLEAN p_DivisibleBy(poly a, poly b, const ring r)
BOOLEAN idInsertPoly(ideal h1, poly h2)
insert h2 into h1 (if h2 is not the zero polynomial) return TRUE iff h2 was indeed inserted ...
static intvec * hSeries(ideal S, intvec *modulweight, int, intvec *wdegree, ideal Q, ring tailRing)
ring rDefault(const coeffs cf, int N, char **n, int ord_size, int *ord, int *block0, int *block1, int **wvhdl)
struct for passing initialization parameters to naInitChar
int p_Compare(const poly a, const poly b, const ring R)
static BOOLEAN p_IsOne(const poly p, const ring R)
either poly(1) or gen(k)?!
void hLex2S(scfmon rad, int e1, int a2, int e2, varset var, int Nvar, scfmon w)
poly p_Divide(poly a, poly b, const ring r)
static poly ChoosePVL(ideal I)
static int isMonoIdBasesSame_IG_Case(ideal J, int JCount, ideal Ob, int ObCount)
static BOOLEAN p_LmDivisibleBy(poly a, poly b, const ring r)
void mp_Delete(matrix *a, const ring r)
void idSkipZeroes(ideal ide)
gives an ideal/module the minimal possible size
static int monCompare(const void *m, const void *n)
void rChangeCurrRing(ring r)
static poly ChoosePJF(ideal I)
matrix mpNew(int r, int c)
create a r x c zero-matrix
static int CountOnIdUptoTruncationIndex(ideal I, int tr)
static void p_Delete(poly *p, const ring r)
static ideal colonIdeal(ideal S, poly w, int lV, ideal Jwi)
static void idInsertMonomials(ideal I, poly p)
ideal id_Mult(ideal h1, ideal h2, const ring R)
h1 * h2 one h_i must be an ideal (with at least one column) the other h_i may be a module (with no co...
ideal idInit(int idsize, int rank)
initialise an ideal / module
#define p_LmEqual(p1, p2, r)
static poly ChoosePOL(ideal I)
static unsigned long p_SetExp(poly p, const unsigned long e, const unsigned long iBitmask, const int VarOffset)
set a single variable exponent : VarOffset encodes the position in p->exp
static ideal SortByDeg(ideal I)
void pEnlargeSet(poly **p, int l, int increment)
void hStepS(scfmon stc, int Nstc, varset var, int Nvar, int *a, int *x)
void rDelete(ring r)
unconditionally deletes fields in r
void HilbertSeries_OrbitData(ideal S, int lV, bool IG_CASE)
ideal id_Add(ideal h1, ideal h2, const ring r)
h1 + h2
intvec * hSecondSeries(intvec *hseries1)
static poly shiftInMon(poly p, int i, int lV, const ring r)
static poly SearchP(ideal I)
searches for a monomial of degree d>=2 and divides it by a variable (result monomial of deg d-1) ...
static void p_Setm(poly p, const ring r)
static ideal SortByDeg_p(ideal I, poly p)
static poly ChooseP(ideal I)
static bool idDegSortTest(ideal I)
!!!!!!!!!!!!!!!!!!!! Just for Monomial Ideals !!!!!!!!!!!!!!!!!!!!!!!!!!!!
intvec * hFirstSeries(ideal S, intvec *modulweight, ideal Q, intvec *wdegree, ring tailRing)
matrix mp_Sub(matrix a, matrix b, const ring R)
void hLookSeries(ideal S, intvec *modulweight, ideal Q, intvec *wdegree, ring tailRing)
static int hMinModulweight(intvec *modulweight)
BOOLEAN idIs0(ideal h)
returns true if h is the zero ideal
#define omRealloc(addr, size)
void hComp(scfmon exist, int Nexist, int ak, scfmon stc, int *Nstc)
static poly SqFree(ideal I)
poly p_ISet(long i, const ring r)
returns the poly representing the integer i
scfmon hInit(ideal S, ideal Q, int *Nexist, ring tailRing)
static poly deleteInMon(poly w, int i, int lV, const ring r)
static void hHilbEst(scfmon stc, int Nstc, varset var, int Nvar)
#define pCopy(p)
return a copy of the poly
#define MATELEM(mat, i, j)
static void hPrintHilb(intvec *hseries)
coeffs nInitChar(n_coeffType t, void *parameter)
one-time initialisations for new coeffs in case of an error return NULL
void hSupp(scfmon stc, int Nstc, varset var, int *Nvar)
static void eulerchar(ideal I, int variables, mpz_ptr ec)