51 if(modulweight==
NULL)
return 0;
53 for(i=modulweight->
rows()-1;i!=0;i--)
66 for (i = Nvar; i>0; i--)
69 for (j = 0; j < Nstc; j++)
81 WerrorS(
"internal arrays too big");
84 p = (
int *)
omAlloc((
unsigned long)z *
sizeof(int));
88 memcpy(p,
Qpol[j],
Ql[j] *
sizeof(
int));
93 for (x =
Ql[j]; x < z; x++)
108 memcpy(pon, pol, l *
sizeof(
int));
111 for (i = x; i <
l; i++)
112 pon[i] -= pol[i - x];
113 for (i = l; i < ln; i++)
114 pon[i] = -pol[i - x];
118 for (i = l; i <
x; i++)
120 for (i = x; i < ln; i++)
121 pon[i] = -pol[i - x];
131 for (i = Nv; i>0; i--)
133 x = pure[var[i + 1]];
139 for (i = 0; i <
l; i++)
145 for (i = 0; i <
l; i++)
154 int Nvar,
int *pol,
int Lpol)
156 int iv = Nvar -1, ln,
a, a0, a1,
b,
i;
169 hStepS(sn, Nstc, var, Nvar, &a, &x);
193 hStepS(sn, Nstc, var, Nvar, &a, &x);
194 hElimS(sn, &b, a0, a, var, iv);
196 hPure(sn, a0, &a1, var, iv, pn, &i);
202 pon =
hAddHilb(iv, x - x0, pol, &ln);
209 pon =
hAddHilb(iv, x - x0, pol, &ln);
253 WerrorS(
"Ideal is not deg sorted!!");
339 for(j =
IDELEMS(I)-1; j>=i+1;j--)
350 for(j =
IDELEMS(I)-1; j>=i+2;j--)
373 for(i = 0; i<=
IDELEMS(I)-1;i++)
433 for(i = 0; i<=
IDELEMS(res)-1; i++)
463 for(j=
IDELEMS(I)-1;(j>=0)&&(flag);j--)
491 for(i =
IDELEMS(I)-1; (i>=0) && (dummy == 0); i--)
493 for(j = 1; (j<=
currRing->N) && (dummy == 0); j++)
524 for(i =0 ; (i<=
IDELEMS(I)-1) && (dummy == 0); i++)
526 for(j = 1; (j<=
currRing->N) && (dummy == 0); j++)
587 for(i = 0 ;i<=
IDELEMS(I)-1;i++)
618 for(i =
IDELEMS(I)-1;(i>=0) && (flag);i--)
621 for(j=1;(j<=
currRing->N) && (flag);j++)
646 for(i = 0;(i<=
IDELEMS(I)-1) && (flag);i++)
649 for(j=1;(j<=
currRing->N) && (flag);j++)
674 for(i =
IDELEMS(I)-1;(i>=0) && (flag);i--)
677 for(j=1;(j<=
currRing->N) && (flag);j++)
702 for(i = 0;(i<=
IDELEMS(I)-1) && (flag);i++)
705 for(j=1;(j<=
currRing->N) && (flag);j++)
808 if((variables % 2) == 0)
809 {mpz_set_si(dummy, 1);}
811 {mpz_set_si(dummy, -1);}
812 mpz_add(ec, ec, dummy);
825 int i,howmanyvarinp = 0;
833 eulerchar(Ip, variables-howmanyvarinp, ec);
849 for(i=
IDELEMS(I)-1;(i>=0)&&(flag);i--)
851 for(j=1;(j<=
currRing->N)&&(flag);j++)
861 if(notsqrfree !=
NULL)
892 for(j = 1;(j<=
currRing->N) &&(flag);j++)
934 void rouneslice(ideal I, ideal S,
poly q,
poly x,
int &
prune,
int &moreprune,
int &steps,
int &NNN, mpz_ptr &hilbertcoef,
int* &hilbpower)
1029 mpz_ptr ec_ptr = ec;
1034 hilbertcoef = (mpz_ptr)
omAlloc((NNN+1)*
sizeof(mpz_t));
1035 hilbpower = (
int*)
omAlloc((NNN+1)*
sizeof(int));
1036 mpz_init( &hilbertcoef[NNN]);
1037 mpz_set( &hilbertcoef[NNN], ec);
1045 for(i = 0;(i<NNN)&&(flag == FALSE)&&(p_Totaldegree(q,currRing)>=hilbpower[
i]);i++)
1050 mpz_add(&hilbertcoef[i],&hilbertcoef[i],ec_ptr);
1055 hilbertcoef = (mpz_ptr)
omRealloc(hilbertcoef, (NNN+1)*
sizeof(mpz_t));
1056 hilbpower = (
int*)
omRealloc(hilbpower, (NNN+1)*
sizeof(int));
1057 mpz_init(&hilbertcoef[NNN]);
1058 for(j = NNN; j>
i; j--)
1060 mpz_set(&hilbertcoef[j],&hilbertcoef[j-1]);
1061 hilbpower[
j] = hilbpower[j-1];
1063 mpz_set( &hilbertcoef[i], ec);
1077 rouneslice(Ip, Sp, pq, x, prune, moreprune, steps, NNN, hilbertcoef,hilbpower);
1092 int steps = 0,
prune = 0, moreprune = 0;
1093 mpz_ptr hilbertcoef;
1107 rouneslice(I,S,q,X->m[0],
prune, moreprune, steps, NNN, hilbertcoef, hilbpower);
1115 printf(
"\n// %8d t^0",1);
1116 for(i = 0; i<NNN; i++)
1118 if(mpz_sgn(&hilbertcoef[i])!=0)
1120 gmp_printf(
"\n// %8Zd t^%d",&hilbertcoef[i],hilbpower[i]);
1123 omFreeSize(hilbertcoef, (NNN)*
sizeof(mpz_t));
1137 int i,
j,
k,
l, ii, mw;
1148 if (wdegree ==
NULL)
1183 if (modulweight !=
NULL)
1184 j = (*modulweight)[mc-1]-mw;
1189 for (i =
hNvar; i>=0; i--)
1219 while ((i > 0) && ((*Qpol)[i - 1] == 0))
1227 for (ii=0; ii<
k; ii++)
1228 (*work)[ii] = (*hseries1)[ii];
1229 if (hseries1 !=
NULL)
1236 (*hseries1)[i + j - 1] += (*Qpol)[i - 1];
1255 while ((*hseries1)[l-2]==0) l--;
1259 for (ii=l-2; ii>=0; ii--)
1260 (*work)[ii] = (*hseries1)[ii];
1264 (*hseries1)[l-1] = mw;
1266 for (i = 0; i <= (
currRing->N); i++)
1289 return hSeries(S, modulweight, 0, wdegree, Q, tailRing);
1297 return hSeries(S, modulweight, 1, wdegree, Q, tailRing);
1303 int i,
j,
k,
s, t,
l;
1304 if (hseries1 ==
NULL)
1306 work =
new intvec(hseries1);
1307 k = l = work->
length()-1;
1309 for (i = k-1; i >= 0; i--)
1313 if ((s != 0) || (k == 1))
1318 for (i = k-1; i >= 0; i--)
1326 hseries2 =
new intvec(k+1);
1327 for (i = k-1; i >= 0; i--)
1328 (*hseries2)[
i] = (*work)[
i];
1329 (*hseries2)[
k] = (*work)[
l];
1345 for(k=j-2; k>=0; k--)
1354 if (hseries ==
NULL)
1358 for (i = 0; i <
l; i++)
1363 Print(
"// %8d t^%d\n", j, i+k);
1379 const int l = hseries1->
length()-1;
1388 if ((l == 1) &&(mu == 0))
1416 while ((j >= 0) && (I->m[j] ==
NULL))
1459 if(JCount != ObCount)
1464 for(i = 0; i < JCount; i++)
1518 if(JCount != ObCount)
1523 for(i = 0; i< JCount; i++)
1548 int orbCount = idorb.size();
1574 for(i = 1;i < orbCount; i++)
1595 dtrp = trInd - degp;
1625 int OrbCount = idorb.size();
1632 for(i = 1; i < OrbCount; i++)
1680 for(k = ICount - 1; k >=1; k--)
1682 for(i = 0; i <
k; i++)
1708 int *e=(
int *)
omAlloc((r->N+1)*
sizeof(int));
1709 int *
s=(
int *)
omAlloc0((r->N+1)*
sizeof(int));
1712 for(j = 1; j <= cnt; j++)
1739 int *e = (
int *)
omAlloc((r->N+1)*
sizeof(int));
1740 int *
s=(
int *)
omAlloc0((r->N+1)*
sizeof(int));
1749 for(j = (cnt+1); j < (r->N+1); j++)
1780 for(i = 0;i <= d - 1; i++)
1845 for(i = 0; i < SCount; i++)
1847 TwordMap(S->m[i], w, lV, d, Jwi, flag);
1874 int (*POS)(ideal,
poly, std::vector<ideal>, std::vector<poly>, int);
1885 std::vector<ideal > idorb;
1886 std::vector< poly > polist;
1888 ideal orb_init =
idInit(1, 1);
1889 idorb.push_back(orb_init);
1893 std::vector< std::vector<int> > mat;
1894 std::vector<int> row;
1905 while(lpcnt < idorb.size())
1925 for(is = 1; is <= lV; is++)
1944 ps = (*POS)(Jwi, wi, idorb, polist, trInd);
1949 idorb.push_back(Jwi);
1950 polist.push_back(wi);
1955 row[ps-1] = row[ps-1] + 1;
1966 for(is = idorb.size()-1; is >= 0; is--)
1970 for(is = polist.size()-1; is >= 0; is--)
1980 int rowCount, colCount;
1982 for(rowCount = 0; rowCount < mat.size(); rowCount++)
1984 for(colCount = 0; colCount < mat[rowCount].size(); colCount++)
1986 Print(
"%d,",mat[rowCount][colCount]);
1990 printf(
"rhs column matrix::\n");
1991 for(colCount = 0; colCount < C.size(); colCount++)
1992 printf(
"%d,",C[colCount]);
1996 char** tt=(
char**)
omalloc(
sizeof(
char*));
2002 char** xx = (
char**)
omalloc(
sizeof(
char*));
2013 for(rowCount = 0; rowCount < lO; rowCount++)
2015 for(colCount = 0; colCount < mat[rowCount].size(); colCount++)
2017 if(mat[rowCount][colCount] != 0)
2019 MATELEM(mR, rowCount + 1, colCount + 1) =
p_ISet(mat[rowCount][colCount], R);
2023 if(C[rowCount] != 0)
2025 cMat->
m[rowCount] =
p_ISet(C[rowCount], R);
2027 mat[rowCount].resize(0);
2037 luDecomp(gMat, pMat, lMat, uMat, R);
2053 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)