30 #if __FLINT_RELEASE >= 20503
31 #include <flint/fmpq_mpoly.h>
37#define OVERFLOW_MAX LONG_MAX
38#define OVERFLOW_MIN LONG_MIN
40#define OVERFLOW_MAX (((int64)LONG_MAX)<<30)
41#define OVERFLOW_MIN (-OVERFLOW_MAX)
383 mpz_set_ui(dummy, 1);
385 mpz_set_si(dummy, -1);
386 mpz_add(ec, ec, dummy);
399 int i,howmanyvarinp = 0;
419 poly notsqrfree =
NULL;
436 if(notsqrfree !=
NULL)
509static void rouneslice(ideal I, ideal S, poly q, poly
x,
int &
prune,
int &moreprune,
int &steps,
int &NNN, mpz_ptr &hilbertcoef,
int* &hilbpower)
611 hilbertcoef = (mpz_ptr)
omAlloc((NNN+1)*
sizeof(mpz_t));
612 hilbpower = (
int*)
omAlloc((NNN+1)*
sizeof(int));
613 mpz_init_set( &hilbertcoef[NNN], ec);
625 mpz_add(&hilbertcoef[
i],&hilbertcoef[
i],ec_ptr);
630 hilbertcoef = (mpz_ptr)
omRealloc(hilbertcoef, (NNN+1)*
sizeof(mpz_t));
631 hilbpower = (
int*)
omRealloc(hilbpower, (NNN+1)*
sizeof(int));
632 mpz_init(&hilbertcoef[NNN]);
633 for(
j = NNN;
j>
i;
j--)
635 mpz_set(&hilbertcoef[
j],&hilbertcoef[
j-1]);
636 hilbpower[
j] = hilbpower[
j-1];
638 mpz_set( &hilbertcoef[
i], ec);
656 rouneslice(Ip, Sp, pq,
x,
prune, moreprune, steps, NNN, hilbertcoef,hilbpower);
669 int steps = 0,
prune = 0, moreprune = 0;
686 rouneslice(I,S,q,X->m[0],
prune, moreprune, steps, NNN, hilbertcoef, hilbpower);
692 printf(
"\n// %8d t^0",1);
693 for(
i = 0;
i<NNN;
i++)
695 if(mpz_sgn(&hilbertcoef[
i])!=0)
697 gmp_printf(
"\n// %8Zd t^%d",&hilbertcoef[
i],hilbpower[
i]);
711 if (hseries1 ==
NULL)
713 work =
new intvec(hseries1);
716 for (
i =
k-1;
i >= 0;
i--)
720 if ((
s != 0) || (
k == 1))
725 for (
i =
k-1;
i >= 0;
i--)
734 for (
i =
k-1;
i >= 0;
i--)
735 (*hseries2)[
i] = (*work)[
i];
736 (*hseries2)[
k] = (*work)[
l];
753 for(
k=
j-2;
k>=0;
k--)
761 if ((modul_weight!=
NULL)&&(modul_weight->
compare(0)!=0))
764 Print(
"module weights:%s\n",
s);
772 poly di1=
p_Copy(hseries,Qt);
776 fmpq_mpoly_ctx_t ctx;
777 convSingRFlintR(ctx,Qt);
781 di2=Flint_Divide_MP(di1,0,o_t,0,ctx,Qt);
782 if (di2==
NULL)
break;
798 if (dummy!=Di1)
break;
815 if (hseries==
NULL) di=0;
819 Print(
"// dimension (proj.) = %d\n// degree (proj.) = %d\n", di-1,
mu);
821 Print(
"// dimension (affine) = 0\n// degree (affine) = %d\n",
mu);
824 Print(
"// dimension (local) = %d\n// multiplicity = %d\n", di,
mu);
836 Qt->block0 = (
int *)
omAlloc0(3 *
sizeof(
int *));
837 Qt->block1 = (
int *)
omAlloc0(3 *
sizeof(
int *));
853 if ((src->VarOffset[0]== -1)
854 || (src->pCompIndex<0))
890 if ((modulweight!=
NULL)&&(modulweight->
compare(0)!=0))
893 Print(
"module weights:%s\n",
s);
896 for (
i = 0;
i <
l;
i++)
906 const int l = hseries1->
length()-1;
918 if ((modulweight!=
NULL)&&(modulweight->
compare(0)!=0))
921 Print(
"module weights:%s\n",
s);
924 for (
i = 0;
i <
l;
i++)
932 if ((
l == 1) &&(
mu == 0))
962 while ((
j >= 0) && (I->m[
j] ==
NULL))
991 if(JCount != ObCount)
996 for(
i = 0;
i < JCount;
i++)
1047 if(JCount != ObCount)
1057 for(
i = 0;
i< JCount;
i++)
1081 int orbCount = idorb.size();
1107 for(
i = 1;
i < orbCount;
i++)
1128 dtrp = trInd - degp;
1157 int OrbCount = idorb.size();
1164 for(
i = 1;
i < OrbCount;
i++)
1189 int OrbCount = idorb.size();
1190 int dtr=0;
int IwCount, ObCount;
1195 for(
i = 1;
i < OrbCount;
i++)
1218 for(
i = 1;
i < OrbCount;
i++)
1231 for(
i = 1;
i < OrbCount;
i++)
1286 for(
k = ICount - 1;
k >=1;
k--)
1288 for(
i = 0;
i <
k;
i++)
1310 poly smon =
p_One(r);
1314 int *e=(
int *)
omAlloc((r->N+1)*
sizeof(int));
1315 int *
s=(
int *)
omAlloc0((r->N+1)*
sizeof(int));
1318 for(
j = 1;
j <= cnt;
j++)
1345 int *e = (
int *)
omAlloc((r->N+1)*
sizeof(int));
1346 int *
s=(
int *)
omAlloc0((r->N+1)*
sizeof(int));
1355 for(
j = (cnt+1);
j < (r->N+1);
j++)
1370static void TwordMap(poly
p, poly
w,
int lV,
int d, ideal Jwi,
bool &flag)
1386 for(
i = 0;
i <= d - 1;
i++)
1431static ideal
colonIdeal(ideal S, poly
w,
int lV, ideal Jwi,
int trunDegHs)
1446 if(trunDegHs !=0 && d >= trunDegHs)
1453 for(
i = 0;
i < SCount;
i++)
1489 PrintS(
"Hilbert Series:\n 0\n");
1492 int (*POS)(ideal, poly, std::vector<ideal>, std::vector<poly>, int, int);
1495 Print(
"\nTruncation degree = %d\n",trunDegHs);
1504 WerrorS(
"wrong input: it is not an infinitely gen. case");
1513 std::vector<ideal > idorb;
1514 std::vector< poly > polist;
1516 ideal orb_init =
idInit(1, 1);
1517 idorb.push_back(orb_init);
1521 std::vector< std::vector<int> > posMat;
1522 std::vector<int> posRow(lV,0);
1526 unsigned long lpcnt = 0;
1531 while(lpcnt < idorb.size())
1535 if(lpcnt >= 1 &&
idIs0(idorb[lpcnt]) ==
FALSE)
1552 for(is = 1; is <= lV; is++)
1573 ps = (*POS)(Jwi, wi, idorb, polist, trInd, trunDegHs);
1577 posRow[is-1] = idorb.size();
1579 idorb.push_back(Jwi);
1580 polist.push_back(wi);
1589 posMat.push_back(posRow);
1590 posRow.resize(lV,0);
1595 Print(
"\nlength of the Orbit = %d", lO);
1600 Print(
"words description of the Orbit: \n");
1601 for(is = 0; is < lO; is++)
1607 PrintS(
"\nmaximal degree, #(sum_j R(w,w_j))");
1609 for(is = 0; is < lO; is++)
1611 if(
idIs0(idorb[is]))
1622 for(is = idorb.size()-1; is >= 0; is--)
1626 for(is = polist.size()-1; is >= 0; is--)
1634 int adjMatrix[lO][lO];
1635 memset(adjMatrix, 0, lO*lO*
sizeof(
int));
1636 int rowCount, colCount;
1640 for(rowCount = 0; rowCount < lO; rowCount++)
1642 for(colCount = 0; colCount < lV; colCount++)
1644 tm = posMat[rowCount][colCount];
1645 adjMatrix[rowCount][tm] = adjMatrix[rowCount][tm] + 1;
1656 tt=(
char**)
omAlloc(
sizeof(
char*));
1662 tt=(
char**)
omalloc(lV*
sizeof(
char*));
1663 for(is = 0; is < lV; is++)
1665 tt[is] = (
char*)
omAlloc(7*
sizeof(
char));
1666 sprintf (tt[is],
"t%d", is+1);
1673 char** xx = (
char**)
omAlloc(
sizeof(
char*));
1686 for(rowCount = 0; rowCount < lO; rowCount++)
1688 for(colCount = 0; colCount < lO; colCount++)
1690 if(adjMatrix[rowCount][colCount] != 0)
1692 MATELEM(mR, rowCount + 1, colCount + 1) =
p_ISet(adjMatrix[rowCount][colCount],
R);
1700 for(rowCount = 0; rowCount < lO; rowCount++)
1702 for(colCount = 0; colCount < lV; colCount++)
1707 MATELEM(mR, rowCount +1, posMat[rowCount][colCount]+1)=
p_Add_q(rc,
MATELEM(mR, rowCount +1, posMat[rowCount][colCount]+1),
R);
1712 for(rowCount = 0; rowCount < lO; rowCount++)
1714 if(C[rowCount] != 0)
1728 PrintS(
"\nlinear system:\n");
1731 for(rowCount = 0; rowCount < lO; rowCount++)
1733 Print(
"H(%d) = ", rowCount+1);
1734 for(colCount = 0; colCount < lV; colCount++)
1739 Print(
"H(%d) + ", posMat[rowCount][colCount] + 1);
1741 Print(
" %d\n", C[rowCount] );
1743 PrintS(
"where H(1) represents the series corresp. to input ideal\n");
1744 PrintS(
"and i^th summand in the rhs of an eqn. is according\n");
1745 PrintS(
"to the right colon map corresp. to the i^th variable\n");
1749 for(rowCount = 0; rowCount < lO; rowCount++)
1751 Print(
"H(%d) = ", rowCount+1);
1752 for(colCount = 0; colCount < lV; colCount++)
1757 Print(
"H(%d) + ", posMat[rowCount][colCount] + 1);
1759 Print(
" %d\n", C[rowCount] );
1761 PrintS(
"where H(1) represents the series corresp. to input ideal\n");
1793 Print(
"Hilbert series:");
1802 for(is = lV-1; is >= 0; is--)
1851 for(
int i=src->N;
i>0;
i--)
1868#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__CYGWIN__)
1869static int compare_rp(
void *arg,
const void *pp1,
const void *pp2)
1871static int compare_rp(
const void *pp1,
const void *pp2,
void* arg)
1874 poly p1=*(poly*)pp1;
1875 poly p2=*(poly*)pp2;
1877 for(
int i=src->N;
i>0;
i--)
1881 if(e1<e2)
return -1;
1889 poly p1=*(poly*)pp1;
1890 poly p2=*(poly*)pp2;
1895 if(e1<e2)
return -1;
1904 while(id->m[
k]==
NULL)
k--;
1906 long *sev=(
long*)
omAlloc0(kk*
sizeof(
long));
1907 BOOLEAN only_lm=r->cf->has_simple_Alloc;
1910 for (
int i=
k;
i>=0;
i--)
1918 for (
int i=
k;
i>=0;
i--)
1925 for (
int i=
k;
i>=0;
i--)
1932 for (
int i=0;
i<
k;
i++)
1938 for (
int j=
i+1;
j<=
k;
j++)
1958 for (
int i=0;
i<
k;
i++)
1964 for (
int j=
i+1;
j<=
k;
j++)
1997 int*
exp=(
int*)
omAlloc((src->N+1)*
sizeof(int));
2003 for(
int j=src->N;
j>0;
j--)
2005 int w=(*wdegree)[
j-1];
2008 WerrorS(
"weights must be positive");
2025 int *exp_q=(
int*)
omAlloc((src->N+1)*
sizeof(int));
2027 for (
int i=1;
i<r;
i++)
2030 for(
int ii=src->N;ii>0;ii--)
2033 for(
int ii=0;ii<
i;ii++)
2041 for (
int ii=
IDELEMS(J)-1;ii>=0;ii--)
2105 #if defined(__APPLE__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__CYGWIN__)
2106 qsort_r(AA->m,
IDELEMS(AA),
sizeof(poly),src,compare_rp);
2108 qsort_r(AA->m,
IDELEMS(AA),
sizeof(poly),compare_rp,src);
2137 if((
l==0)||(
l<=-INT_MAX)||(
l>INT_MAX))
2141 else (*ss)[
i]=(int)
l;
2168 while(
prod<(1<<15) && (a>1))
2174 if (a==1)
b=(1<<15);
2212 int w_max=0,w_min=0;
2215 w_max=module_w->
max_in();
2216 w_min=module_w->
min_in();
2218 for(
int c=1;c<=
A->rank;c++)
2226 if ((module_w==
NULL) || ((*module_w)[c-1]==0)) tmp=
ivAdd(
res,res_c);
2235 (*res)[
res->length()-1]=w_min;
2242 if(modulweight==
NULL)
return 0;
2243 return modulweight->
min_in();
2253 x = (*wdegree)[
i-1];
2269 memcpy(pon, pol,
l *
sizeof(
int64));
2272 for (
i =
x;
i <
l;
i++)
2274 #ifndef __SIZEOF_INT128__
2282 __int128 t2=pol[
i -
x];
2284 if ((t>=LONG_MIN)&&(t<=LONG_MAX)) pon[
i]=t;
2288 for (
i =
l;
i < ln;
i++)
2290 #ifndef __SIZEOF_INT128__
2295 __int128 t= -pol[
i -
x];
2296 if ((t>=LONG_MIN)&&(t<=LONG_MAX)) pon[
i]=t;
2303 for (
i =
l;
i <
x;
i++)
2305 for (
i =
x;
i < ln;
i++)
2306 pon[
i] = -pol[
i -
x];
2313 int l = lp,
x,
i,
j;
2317 for (
i = Nv;
i>0;
i--)
2319 x = pure[var[
i + 1]];
2325 for (
i = 0;
i <
l;
i++)
2327 #ifndef __SIZEOF_INT128__
2337 if ((t>=LONG_MIN)&&(t<=LONG_MAX)) pl[
i+
j]=t;
2345 for (
i = 0;
i <
l;
i++)
2347 #ifndef __SIZEOF_INT128__
2357 if ((t>=LONG_MIN)&&(t<=LONG_MAX)) pl[
i+
j]=t;
2372 for (
i = Nvar;
i>0;
i--)
2375 for (
j = 0;
j < Nstc;
j++)
2387 WerrorS(
"internal arrays too big");
2399 for (
x =
Ql[
j];
x < z;
x++)
2409 int Nvar,
int64 *pol,
int Lpol)
2411 int iv = Nvar -1, ln, a, a0, a1,
b,
i;
2424 hStepS(sn, Nstc, var, Nvar, &a, &
x);
2430 x = pure[var[Nvar]];
2448 hStepS(sn, Nstc, var, Nvar, &a, &
x);
2449 hElimS(sn, &
b, a0, a, var, iv);
2451 hPure(sn, a0, &a1, var, iv, pn, &
i);
2462 x = pure[var[Nvar]];
2479 int i,
j,
k,
l, ii, mw;
2518 if (modulweight !=
NULL)
2519 j = (*modulweight)[mc-1]-mw;
2554 while ((
i > 0) && ((*Qpol)[
i - 1] == 0))
2562 for (ii=0; ii<
k; ii++)
2563 (*work)[ii] = (*hseries1)[ii];
2564 if (hseries1 !=
NULL)
2571 (*hseries1)[
i +
j - 1] += (*Qpol)[
i - 1];
2590 while ((*hseries1)[
l-2]==0)
l--;
2594 for (ii=
l-2; ii>=0; ii--)
2595 (*work)[ii] = (*hseries1)[ii];
2599 (*hseries1)[
l-1] = mw;
const CanonicalForm CFMap CFMap & N
void mu(int **points, int sizePoints)
CanonicalForm convSingPFactoryP(poly p, const ring r)
poly convFactoryPSingP(const CanonicalForm &f, const ring r)
int compare(const intvec *o) const
char * ivString(int not_mat=1, int spaces=0, int dim=2) const
Coefficient rings, fields and other domains suitable for Singular polynomials.
static FORCE_INLINE number n_Mult(number a, number b, const coeffs r)
return the product of 'a' and 'b', i.e., a*b
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....
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 ....
@ n_Q
rational (GMP) numbers
@ n_transExt
used for all transcendental extensions, i.e., the top-most extension in an extension tower is transce...
coeffs nInitChar(n_coeffType t, void *parameter)
one-time initialisations for new coeffs in case of an error return NULL
static FORCE_INLINE number n_Init(long i, const coeffs r)
a number representing i in the given coeff field/ring r
const CanonicalForm int s
const CanonicalForm int const CFList const Variable & y
void FACTORY_PUBLIC prune(Variable &alpha)
static int max(int a, int b)
VAR void(* WerrorS_callback)(const char *s)
void WerrorS(const char *s)
This file is work in progress and currently not part of the official Singular.
void scPrintDegree(int co, int mu)
static void idInsertMonomial(ideal I, poly p)
static int comapreMonoIdBases_IG_Case(ideal J, int JCount, ideal Ob, int ObCount)
static void rouneslice(ideal I, ideal S, poly q, poly x, int &prune, int &moreprune, int &steps, int &NNN, mpz_ptr &hilbertcoef, int *&hilbpower)
static poly hilbert_series(ideal A, const ring src, const intvec *wdegree, const ring Qt)
poly hFirstSeries0p(ideal A, ideal Q, intvec *wdegree, const ring src, const ring Qt)
static poly SqFree(ideal I)
static void idAddMon(ideal I, ideal p)
static int comapreMonoIdBases(ideal J, ideal Ob)
static void TwordMap(poly p, poly w, int lV, int d, ideal Jwi, bool &flag)
static poly ChooseP(ideal I)
static poly deleteInMon(poly w, int i, int lV, const ring r)
intvec * hSecondSeries(intvec *hseries1)
static void hLastHilb(scmon pure, int Nv, varset var, int64 *pol, int lp)
static BOOLEAN isModule(ideal A, const ring src)
static int CountOnIdUptoTruncationIndex(ideal I, int tr)
static poly ChoosePJL(ideal I)
static int monCompare(const void *m, const void *n)
static void hHilbEst(scfmon stc, int Nstc, varset var, int Nvar)
static int positionInOrbitTruncationCase(ideal I, poly w, std::vector< ideal > idorb, std::vector< poly > polist, int, int trunDegHs)
static intvec * hSeries(ideal S, intvec *modulweight, intvec *wdegree, ideal Q)
static poly LCMmon(ideal I)
void HilbertSeries_OrbitData(ideal S, int lV, bool IG_CASE, bool mgrad, bool odp, int trunDegHs)
static ideal colonIdeal(ideal S, poly w, int lV, ideal Jwi, int trunDegHs)
intvec * hFirstSeries(ideal A, intvec *module_w, ideal Q, intvec *wdegree)
static int hMinModulweight(intvec *modulweight)
static poly shiftInMon(poly p, int i, int lV, const ring r)
static ideal getModuleComp(ideal A, int c, const ring src)
intvec * hFirstSeries0(ideal A, ideal Q, intvec *wdegree, const ring src, const ring Qt)
static void hPrintHilb(poly hseries, const ring Qt, intvec *modul_weight)
static poly ChoosePVar(ideal I)
static int positionInOrbit_FG_Case(ideal I, poly, std::vector< ideal > idorb, std::vector< poly >, int, int)
static void sortMonoIdeal_pCompare(ideal I)
static ideal SortByDeg(ideal I)
static bool IsIn(poly p, ideal I)
static void eulerchar(ideal I, int variables, mpz_ptr ec)
ideal RightColonOperation(ideal S, poly w, int lV)
static void hHilbStep(scmon pure, scfmon stc, int Nstc, varset var, int Nvar, int64 *pol, int Lpol)
static void hWDegree(intvec *wdegree)
static BOOLEAN p_Div_hi(poly p, const int *exp_q, const ring src)
static int positionInOrbit_IG_Case(ideal I, poly w, std::vector< ideal > idorb, std::vector< poly > polist, int trInd, int)
void hDegreeSeries(intvec *s1, intvec *s2, int *co, int *mu)
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 int64 * hAddHilb(int Nv, int x, int64 *pol, int *lp)
static ideal minimalMonomialGenSet(ideal I)
intvec * hFirstSeries1(ideal S, intvec *modulweight, ideal Q, intvec *wdegree)
ideal idQuotMon(ideal Iorig, ideal p)
static void SortByDeg_p(ideal I, poly p)
static bool JustVar(ideal I)
void hLookSeries(ideal S, intvec *modulweight, ideal Q, intvec *wdegree)
static void id_DelDiv_hi(ideal id, BOOLEAN *bad, const ring r)
static int compare_rp_currRing(const void *pp1, const void *pp2)
void hComp(scfmon exist, int Nexist, int ak, scfmon stc, int *Nstc)
void hLex2S(scfmon rad, int e1, int a2, int e2, varset var, int Nvar, scfmon w)
void hKill(monf xmem, int Nvar)
void hElimS(scfmon stc, int *e1, int a2, int e2, varset var, int Nvar)
void hLexS(scfmon stc, int Nstc, varset var, int Nvar)
void hDelete(scfmon ev, int ev_length)
scfmon hGetmem(int lm, scfmon old, monp monmem)
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 hStepS(scfmon stc, int Nstc, varset var, int Nvar, int *a, int *x)
void hStaircase(scfmon stc, int *Nstc, varset var, int Nvar)
void hOrdSupp(scfmon stc, int Nstc, varset var, int Nvar)
scfmon hInit(ideal S, ideal Q, int *Nexist)
#define idDelete(H)
delete an ideal
BOOLEAN idInsertPoly(ideal h1, poly h2)
insert h2 into h1 (if h2 is not the zero polynomial) return TRUE iff h2 was indeed inserted
ideal id_Copy(ideal h1, const ring r)
copy an ideal
BOOLEAN idIs0(ideal h)
returns true if h is the zero ideal
intvec * ivAddShift(intvec *a, intvec *b, int s)
intvec * ivAdd(intvec *a, intvec *b)
static void WerrorS_dummy(const char *)
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.
void luDecomp(const matrix aMat, matrix &pMat, matrix &lMat, matrix &uMat, const ring R)
LU-decomposition of a given (m x n)-matrix.
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...
void mp_Delete(matrix *a, const ring r)
matrix mp_Sub(matrix a, matrix b, const ring R)
matrix mpNew(int r, int c)
create a r x c zero-matrix
#define MATELEM(mat, i, j)
1-based access to matrix
static number & pGetCoeff(poly p)
return an alias to the leading coefficient of p assumes that p != NULL NOTE: not copy
gmp_float exp(const gmp_float &a)
The main handler for Singular numbers which are suitable for Singular polynomials.
#define omFreeSize(addr, size)
#define omRealloc(addr, size)
poly p_ISet(long i, const ring r)
returns the poly representing the integer i
poly p_Power(poly p, int i, const ring r)
unsigned long p_GetShortExpVector0(const poly p, const ring r)
poly p_MDivide(poly a, poly b, const ring r)
int p_Compare(const poly a, const poly b, const ring R)
unsigned long p_GetShortExpVector(const poly p, const ring r)
void pEnlargeSet(poly **p, int l, int increment)
unsigned long p_GetShortExpVector1(const poly p, const ring r)
static poly p_Neg(poly p, const ring r)
static poly p_Add_q(poly p, poly q, const ring r)
static void p_LmDelete(poly p, const ring r)
static poly p_Mult_q(poly p, poly q, const ring r)
#define p_LmEqual(p1, p2, r)
void p_Write(poly p, ring lmRing, ring tailRing)
static void p_SetExpV(poly p, int *ev, const ring r)
static poly pp_Mult_mm(poly p, poly m, const ring 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 unsigned long p_SetComp(poly p, unsigned long c, ring r)
static void p_Setm(poly p, const ring r)
static number p_SetCoeff(poly p, number n, ring r)
static poly p_Head(const poly p, const ring r)
copy the (leading) term of p
static BOOLEAN p_LmShortDivisibleBy(poly a, unsigned long sev_a, poly b, unsigned long not_sev_b, const ring r)
static long p_GetExp(const poly p, const unsigned long iBitmask, const int VarOffset)
get a single variable exponent @Note: the integer VarOffset encodes:
static BOOLEAN p_IsOne(const poly p, const ring R)
either poly(1) or gen(k)?!
static BOOLEAN p_LmDivisibleBy(poly a, poly b, const ring r)
static BOOLEAN p_DivisibleBy(poly a, poly b, const ring r)
static void p_Delete(poly *p, const ring r)
static void p_GetExpV(poly p, int *ev, const ring r)
static void p_LmFree(poly p, ring)
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)
void rChangeCurrRing(ring r)
VAR ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
#define pLmDivisibleBy(a, b)
like pDivisibleBy, except that it is assumed that a!=NULL, b!=NULL
static void pLmFree(poly p)
frees the space of the monomial m, assumes m != NULL coef is not freed, m is not advanced
#define pCopy(p)
return a copy of the poly
void StringSetS(const char *st)
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...
ring rDefault(const coeffs cf, int N, char **n, int ord_size, rRingOrder_t *ord, int *block0, int *block1, int **wvhdl, unsigned long bitmask)
static short rVar(const ring r)
#define rVar(r) (r->N)
int status int void size_t count
ideal idInit(int idsize, int rank)
initialise an ideal / module
void id_Delete(ideal *h, ring r)
deletes an ideal/module/matrix
int idSkipZeroes0(ideal ide)
void id_Delete0(ideal *h, ring r)
ideal id_Head(ideal h, const ring r)
returns the ideals of initial terms
void id_DelDiv(ideal id, const ring r)
delete id[j], if LT(j) == coeff*mon*LT(i) and vice versa, i.e., delete id[i], if LT(i) == coeff*mon*L...
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 id_CopyFirstK(const ideal ide, const int k, const ring r)
copies the first k (>= 1) entries of the given ideal/module and returns these as a new ideal/module (...
ideal id_SimpleAdd(ideal h1, ideal h2, const ring R)
concat the lists h1 and h2 without zeros
void idSkipZeroes(ideal ide)
gives an ideal/module the minimal possible size
struct for passing initialization parameters to naInitChar