30 #if __FLINT_RELEASE >= 20503
31 #include <flint/fmpq_mpoly.h>
38#define OVERFLOW_MAX LONG_MAX
39#define OVERFLOW_MIN LONG_MIN
41#define OVERFLOW_MAX (((int64)LONG_MAX)<<30)
42#define OVERFLOW_MIN (-OVERFLOW_MAX)
81 for (
i =
k-1;
i >= 0;
i--)
85 if ((
s != 0) || (
k == 1))
90 for (
i =
k-1;
i >= 0;
i--)
99 for (
i =
k-1;
i >= 0;
i--)
101 (*hseries2)[
k] = (*work)[
l];
118 for(
k=
j-2;
k>=0;
k--)
131#if defined(HAVE_FLINT) && (__FLINT_RELEASE >= 20503)
169 Print(
"module weights:%s\n",
s);
188 Print(
"// dimension (proj.) = %d\n// degree (proj.) = %d\n",
di-1,
mu);
190 Print(
"// dimension (affine) = 0\n// degree (affine) = %d\n",
mu);
193 Print(
"// dimension (local) = %d\n// multiplicity = %d\n",
di,
mu);
205 Qt->block0 = (
int *)
omAlloc0(3 *
sizeof(
int *));
206 Qt->block1 = (
int *)
omAlloc0(3 *
sizeof(
int *));
239 Print(
"module weights:%s\n",
s);
266 while ((
j >= 0) && (
I->m[
j] ==
NULL))
592 for(
i = 0;
i <
k;
i++)
622 for(
j = 1;
j <= cnt;
j++)
649 int *e = (
int *)
omAlloc((r->N+1)*
sizeof(
int));
659 for(
j = (cnt+1);
j < (r->N+1);
j++)
690 for(
i = 0;
i <= d - 1;
i++)
793 PrintS(
"Hilbert Series:\n 0\n");
808 WerrorS(
"wrong input: it is not an infinitely gen. case");
817 std::vector<ideal >
idorb;
818 std::vector< poly >
polist;
825 std::vector< std::vector<int> >
posMat;
830 unsigned long lpcnt = 0;
856 for(is = 1; is <=
lV; is++)
899 Print(
"\nlength of the Orbit = %d",
lO);
904 Print(
"words description of the Orbit: \n");
905 for(is = 0; is <
lO; is++)
911 PrintS(
"\nmaximal degree, #(sum_j R(w,w_j))");
913 for(is = 0; is <
lO; is++)
926 for(is =
idorb.size()-1; is >= 0; is--)
930 for(is =
polist.size()-1; is >= 0; is--)
967 for(is = 0; is <
lV; is++)
969 tt[is] = (
char*)
omAlloc(12*
sizeof(
char));
977 char**
xx = (
char**)
omAlloc(
sizeof(
char*));
1032 PrintS(
"\nlinear system:\n");
1047 PrintS(
"where H(1) represents the series corresp. to input ideal\n");
1048 PrintS(
"and i^th summand in the rhs of an eqn. is according\n");
1049 PrintS(
"to the right colon map corresp. to the i^th variable\n");
1065 PrintS(
"where H(1) represents the series corresp. to input ideal\n");
1097 Print(
"Hilbert series:");
1106 for(is =
lV-1; is >= 0; is--)
1155 for(
int i=src->N;
i>0;
i--)
1172#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__CYGWIN__)
1178 poly p1=*(poly*)
pp1;
1179 poly p2=*(poly*)
pp2;
1181 for(
int i=src->N;
i>0;
i--)
1185 if(
e1<
e2)
return -1;
1193 poly p1=*(poly*)
pp1;
1194 poly p2=*(poly*)
pp2;
1199 if(
e1<
e2)
return -1;
1208 while(id->m[
k]==
NULL)
k--;
1214 for (
int i=
k;
i>=0;
i--)
1222 for (
int i=
k;
i>=0;
i--)
1229 for (
int i=
k;
i>=0;
i--)
1236 for (
int i=0;
i<
k;
i++)
1242 for (
int j=
i+1;
j<=
k;
j++)
1262 for (
int i=0;
i<
k;
i++)
1268 for (
int j=
i+1;
j<=
k;
j++)
1307 for(
int j=src->N;
j>0;
j--)
1309 int w=(*wdegree)[
j-1];
1312 WerrorS(
"weights must be positive");
1331 for (
int i=1;
i<r;
i++)
1334 for(
int ii=src->N;
ii>0;
ii--)
1409 #if defined(__APPLE__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__CYGWIN__)
1431 for(
int i=1;
i<=
rk;
i++)
1465 int sh=(*shifts)[
i-1]-
m;
1523 while(
prod<(1<<15) && (a>1))
1529 if (a==1)
b=(1<<15);
1573 for(
int c=1;c<=
A->rank;c++)
1608 x = (*wdegree)[
i-1];
1627 for (
i =
x;
i <
l;
i++)
1629 #ifndef __SIZEOF_INT128__
1645 #ifndef __SIZEOF_INT128__
1658 for (
i =
l;
i <
x;
i++)
1672 for (
i =
Nv;
i>0;
i--)
1680 for (
i = 0;
i <
l;
i++)
1682 #ifndef __SIZEOF_INT128__
1700 for (
i = 0;
i <
l;
i++)
1702 #ifndef __SIZEOF_INT128__
1742 WerrorS(
"internal arrays too big");
1754 for (
x =
Ql[
j];
x < z;
x++)
1874 j = (*modulweight)[mc-1]-
mw;
1909 while ((
i > 0) && ((*Qpol)[
i - 1] == 0))
1926 (*hseries1)[
i +
j - 1] += (*Qpol)[
i - 1];
1954 (*hseries1)[
l-1] =
mw;
2009 for(
int d=0;d<
b->rows()-1;d++)
2081 for(
int i=0;
i<
h1->cols();
i++)
2096 if ((
l == 1) &&(
mu == 0))
#define BIMATELEM(M, I, J)
CanonicalForm convSingPFactoryP(poly p, const ring r)
poly convFactoryPSingP(const CanonicalForm &f, const ring r)
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...
static FORCE_INLINE nMapFunc n_SetMap(const coeffs src, const coeffs dst)
set the mapping function pointers for translating numbers from src to dst
coeffs nInitChar(n_coeffType t, void *parameter)
one-time initialisations for new coeffs in case of an error return NULL
static FORCE_INLINE void n_Delete(number *p, const coeffs r)
delete 'p'
static FORCE_INLINE number n_Init(long i, const coeffs r)
a number representing i in the given coeff field/ring r
number(* nMapFunc)(number a, const coeffs src, const coeffs dst)
maps "a", which lives in src, into dst
const CanonicalForm int s
const CanonicalForm int const CFList const Variable & y
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)
poly hBIV2Poly(bigintmat *b, const ring Qt, const coeffs biv_cf)
poly hFirstSeries0m(ideal A, ideal Q, intvec *wdegree, intvec *shifts, const ring src, const ring Qt)
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 int comapreMonoIdBases(ideal J, ideal Ob)
static void TwordMap(poly p, poly w, int lV, int d, ideal Jwi, bool &flag)
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 int CountOnIdUptoTruncationIndex(ideal I, int tr)
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)
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)
poly hFirst2Second(poly h, const ring Qt, int &co)
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 int positionInOrbit_FG_Case(ideal I, poly, std::vector< ideal > idorb, std::vector< poly >, int, int)
static void sortMonoIdeal_pCompare(ideal I)
bigintmat * hPoly2BIV(poly h, const ring Qt, const coeffs biv_cf)
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)
bigintmat * hFirstSeries0b(ideal I, ideal Q, intvec *wdegree, intvec *shifts, const ring src, const coeffs biv_cf)
static void hWDegree(intvec *wdegree)
static BOOLEAN p_Div_hi(poly p, const int *exp_q, const ring src)
bigintmat * hSecondSeries0b(ideal I, ideal Q, intvec *wdegree, intvec *shifts, const ring src, const coeffs biv_cf)
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 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)
void scDegree(ideal S, intvec *modulweight, ideal Q)
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 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)
static matrix mu(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)
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)
static void p_SetExpV(poly p, int *ev, 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 poly p_New(const ring, omBin bin)
static BOOLEAN p_LmDivisibleBy(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)
void p_Write0(poly p, ring lmRing, ring tailRing)
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
BOOLEAN id_IsModule(ideal A, const ring src)
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_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