41 ring Zp_ring=
rCopy0(save_ring);
72 for (
int i=
rVar(Zp_ring)-1;
i>0;
i--)
174 int nblocks=
rBlocks(save_ring)+1;
175 names=(
char**)
omAlloc0((save_ring->N+1) *
sizeof(
char *));
176 for(
int i=0;
i<save_ring->N;
i++)
182 int *block0 = (
int *)
omAlloc0(nblocks *
sizeof(
int));
183 int *block1 = (
int *)
omAlloc0(nblocks *
sizeof(
int));
184 int **wvhdl=(
int**)
omAlloc0(nblocks *
sizeof(
int *));
185 for (
int j=0;
j<nblocks-1;
j++)
187 if (save_ring->wvhdl[
j]!=
NULL)
190 wvhdl[
j] = (
int*)
omMemDup(save_ring->wvhdl[
j]);
193 int l=save_ring->block1[
j]-save_ring->block0[
j]+1;
198 l+=save_ring->wvhdl[
j][save_ring->block1[
j]-save_ring->block0[
j]+1]+1;
201 memcpy(wvhdl[
j],save_ring->wvhdl[
j],
l*
sizeof(
int));
206 memcpy(order,save_ring->order,(nblocks-1) *
sizeof(
rRingOrder_t));
207 memcpy(block0,save_ring->block0,(nblocks-1) *
sizeof(
int));
208 memcpy(block1,save_ring->block1,(nblocks-1) *
sizeof(
int));
210 block0[nblocks-1]=save_ring->N+1;
211 block1[nblocks-1]=save_ring->N+1;
213 ring Q_ring=
rDefault(
cf,save_ring->N+1,names,nblocks,order,block0,block1,wvhdl,save_ring->wanted_maxExp);
215 nMap=
n_SetMap(save_ring->cf,Q_ring->cf);
240 tmp=
id_Subst(tmp,Q_ring->N,one,Q_ring);
244 nMap=
n_SetMap(Q_ring->cf,save_ring->cf);
288 int err1=pipe(cp_std);
289 int err2=pipe(cp_hstd);
292 Werror(
"pipe failed with %d\n",errno);
295 si_close(cp_hstd[0]);
296 si_close(cp_hstd[1]);
299 pid_t pid_std=fork();
304 si_close(cp_hstd[0]);
305 si_close(cp_hstd[1]);
307 memset(&d,0,
sizeof(d));
308 d.
f_write=fdopen(cp_std[1],
"w");
317 pid_t pid_hstd=fork();
321 si_close(cp_hstd[0]);
325 memset(&d,0,
sizeof(d));
326 d.
f_write=fdopen(cp_hstd[1],
"w");
341 si_close(cp_hstd[1]);
345 pfd[0].events=POLLIN;
346 pfd[1].fd=cp_hstd[0];
347 pfd[1].events=POLLIN;
348 int s=si_poll(pfd,2,-1);
351 memset(&d,0,
sizeof(d));
358 si_close(cp_hstd[0]);
361 kill(pid_hstd,SIGTERM);
362 si_waitpid(pid_std,
NULL,0);
363 si_waitpid(pid_hstd,
NULL,0);
372 si_close(cp_hstd[0]);
373 kill(pid_std,SIGTERM);
374 si_waitpid(pid_hstd,
NULL,0);
375 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
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
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
const CanonicalForm int s
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 ideal kTryHilbstd_homog(ideal F, ideal Q)
ideal kTryHilbstd_par(ideal F, ideal Q, tHomog h, intvec **mw)
poly kTryHC(ideal F, ideal Q)
ideal kTryHilbstd(ideal F, ideal Q)
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 int rBlocks(const ring r)
@ ringorder_a64
for int64 weights
static short rVar(const ring r)
#define rVar(r) (r->N)
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)