17#define TRANSEXT_PRIVATES
19#undef TRANSEXT_PRIVATES
46 ring Zp_ring=
rCopy0(save_ring);
77 for (
int i=
rVar(Zp_ring)-1;
i>0;
i--)
97 if (a==
NULL)
return a;
98 fraction
f=(fraction)a;
106 if (a==
NULL)
return a;
107 fraction
f=(fraction)a;
123 prim=save_ring->cf->ch;
227 int nblocks=
rBlocks(save_ring)+1;
228 names=(
char**)
omAlloc0((save_ring->N+1) *
sizeof(
char *));
229 for(
int i=0;
i<save_ring->N;
i++)
235 int *block0 = (
int *)
omAlloc0(nblocks *
sizeof(
int));
236 int *block1 = (
int *)
omAlloc0(nblocks *
sizeof(
int));
237 int **wvhdl=(
int**)
omAlloc0(nblocks *
sizeof(
int *));
238 for (
int j=0;
j<nblocks-1;
j++)
240 if (save_ring->wvhdl[
j]!=
NULL)
243 wvhdl[
j] = (
int*)
omMemDup(save_ring->wvhdl[
j]);
246 int l=save_ring->block1[
j]-save_ring->block0[
j]+1;
251 l+=save_ring->wvhdl[
j][save_ring->block1[
j]-save_ring->block0[
j]+1]+1;
254 memcpy(wvhdl[
j],save_ring->wvhdl[
j],
l*
sizeof(
int));
259 memcpy(order,save_ring->order,(nblocks-1) *
sizeof(
rRingOrder_t));
260 memcpy(block0,save_ring->block0,(nblocks-1) *
sizeof(
int));
261 memcpy(block1,save_ring->block1,(nblocks-1) *
sizeof(
int));
263 block0[nblocks-1]=save_ring->N+1;
264 block1[nblocks-1]=save_ring->N+1;
266 ring Q_ring=
rDefault(
cf,save_ring->N+1,names,nblocks,order,block0,block1,wvhdl,save_ring->wanted_maxExp);
268 nMap=
n_SetMap(save_ring->cf,Q_ring->cf);
293 tmp=
id_Subst(tmp,Q_ring->N,one,Q_ring);
297 nMap=
n_SetMap(Q_ring->cf,save_ring->cf);
351 int err1=pipe(cp_std);
352 int err2=pipe(cp_hstd);
355 Werror(
"pipe failed with %d\n",errno);
358 si_close(cp_hstd[0]);
359 si_close(cp_hstd[1]);
362 pid_t pid_std=fork();
367 si_close(cp_hstd[0]);
368 si_close(cp_hstd[1]);
370 memset(&d,0,
sizeof(d));
371 d.
f_write=fdopen(cp_std[1],
"w");
380 pid_t pid_hstd=fork();
384 si_close(cp_hstd[0]);
388 memset(&d,0,
sizeof(d));
389 d.
f_write=fdopen(cp_hstd[1],
"w");
404 si_close(cp_hstd[1]);
408 pfd[0].events=POLLIN;
409 pfd[1].fd=cp_hstd[0];
410 pfd[1].events=POLLIN;
411 int s=si_poll(pfd,2,-1);
414 memset(&d,0,
sizeof(d));
421 si_close(cp_hstd[0]);
424 kill(pid_hstd,SIGTERM);
425 si_waitpid(pid_std,
NULL,0);
426 si_waitpid(pid_hstd,
NULL,0);
435 si_close(cp_hstd[0]);
436 kill(pid_std,SIGTERM);
437 si_waitpid(pid_hstd,
NULL,0);
438 si_waitpid(pid_std,
NULL,0);
si_hdl_typ si_set_signal(int sig, si_hdl_typ signal_handler)
meta function for binding a signal to an handler
void sig_term_hdl_child(int)
static FORCE_INLINE nMapFunc n_SetMap(const coeffs src, const coeffs dst)
set the mapping function pointers for translating numbers from src to dst
static FORCE_INLINE BOOLEAN nCoeff_is_Q(const coeffs r)
coeffs nInitChar(n_coeffType t, void *parameter)
one-time initialisations for new coeffs in case of an error return NULL
static FORCE_INLINE coeffs nCopyCoeff(const coeffs r)
"copy" coeffs, i.e. increment ref
static FORCE_INLINE BOOLEAN nCoeff_is_Zp(const coeffs r)
number(* nMapFunc)(number a, const coeffs src, const coeffs dst)
maps "a", which lives in src, into dst
void nKillChar(coeffs r)
undo all initialisations
static FORCE_INLINE BOOLEAN nCoeff_is_transExt(const coeffs r)
TRUE iff r represents a transcendental extension field.
const CanonicalForm int s
static void * feOptValue(feOptIndex opt)
void scComputeHC(ideal S, ideal Q, int ak, poly &hEdge)
bigintmat * hFirstSeries0b(ideal I, ideal Q, intvec *wdegree, intvec *shifts, const ring src, const coeffs biv_cf)
#define idDelete(H)
delete an ideal
static BOOLEAN idHomIdeal(ideal id, ideal Q=NULL)
ideal kStd_internal(ideal F, ideal Q, tHomog h, intvec **w, bigintmat *hilb, int syzComp, int newIdeal, intvec *vw, s_poly_proc_t sp)
pure GB/SB computations
ideal kInterRedBba(ideal F, ideal Q, int &need_retry)
ideal mora(ideal F, ideal Q, intvec *w, bigintmat *hilb, kStrategy strat)
static ideal kTryHilbstd_nonhomog(ideal F, ideal Q)
static int kFindLuckyPrime(ideal F, ideal Q)
static number nMapQa2Zp(number a, const coeffs src, const coeffs dst)
static ideal kTryHilbstd_homog(ideal F, ideal Q)
static number nMapZpa2Zp(number a, const coeffs src, const coeffs dst)
ideal kTryHilbstd_par(ideal F, ideal Q, tHomog h, intvec **mw)
poly kTryHC(ideal F, ideal Q)
ideal kTryHilbstd(ideal F, ideal Q)
number nlModP(number q, const coeffs, const coeffs Zp)
static number & pGetCoeff(poly p)
return an alias to the leading coefficient of p assumes that p != NULL NOTE: not copy
The main handler for Singular numbers which are suitable for Singular polynomials.
#define SI_RESTORE_OPT1(A)
static void p_Setm(poly p, const ring r)
static void p_Delete(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 ...
Compatibility layer for legacy polynomial operations (over currRing).
static long pTotaldegree(poly p)
#define pGetExp(p, i)
Exponent.
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 rCopy0(const ring r, BOOLEAN copy_qideal, BOOLEAN copy_ordering)
void rDelete(ring r)
unconditionally deletes fields in r
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 BOOLEAN rField_is_Zp(const ring r)
static int rBlocks(const ring r)
@ ringorder_a64
for int64 weights
static BOOLEAN rField_is_Q(const ring r)
static short rVar(const ring r)
define rVar(r) (r->N)
#define rField_is_Ring(R)
void id_Delete(ideal *h, ring r)
deletes an ideal/module/matrix
BOOLEAN id_HomIdealDP(ideal id, ideal Q, const ring r)
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_HomogenDP(ideal h, int varnum, const ring r)
void idSkipZeroes(ideal ide)
gives an ideal/module the minimal possible size
ideal id_PermIdeal(ideal I, int R, int C, const int *perm, const ring src, const ring dst, nMapFunc nMap, const int *par_perm, int P, BOOLEAN use_mult)
mapping ideals/matrices to other rings
ideal id_Subst(ideal id, int n, poly e, const ring r)
ideal ssiReadIdeal(ssiInfo *d)
void ssiWriteIdeal(const ssiInfo *d, int typ, const ideal I)