17#define TRANSEXT_PRIVATES
19#undef TRANSEXT_PRIVATES
46 ring Zp_ring=
rCopy0(save_ring);
52 nMapFunc nMap=n_SetMap(save_ring->cf,Zp_ring->cf);
77 for (
int i=rVar(Zp_ring)-1;
i>0;
i--)
96static number nMapQa2Zp(number a,
const coeffs src,
const coeffs dst)
98 if (a==
NULL)
return a;
99 fraction
f=(fraction)a;
102 return nlModP(pGetCoeff(
p),src->extRing->cf,dst);
105static number nMapZpa2Zp(number a,
const coeffs src,
const coeffs dst)
107 if (a==
NULL)
return a;
108 fraction
f=(fraction)a;
124 if(nCoeff_is_Zp(save_ring->cf))
125 prim=save_ring->cf->ch;
129 nMapFunc nMap=n_SetMap(save_ring->cf,Zp_ring->cf);
199 nMapFunc nMap=n_SetMap(save_ring->cf,Zp_ring->cf);
229 cf=nCopyCoeff(save_ring->cf);
230 int nblocks=rBlocks(save_ring)+1;
231 names=(
char**)
omAlloc0((save_ring->N+1) *
sizeof(
char *));
232 for(
int i=0;
i<save_ring->N;
i++)
238 int *block0 = (
int *)
omAlloc0(nblocks *
sizeof(
int));
239 int *block1 = (
int *)
omAlloc0(nblocks *
sizeof(
int));
240 int **wvhdl=(
int**)
omAlloc0(nblocks *
sizeof(
int *));
241 for (
int j=0;
j<nblocks-1;
j++)
243 if (save_ring->wvhdl[
j]!=
NULL)
246 wvhdl[
j] = (
int*)
omMemDup(save_ring->wvhdl[
j]);
249 int l=save_ring->block1[
j]-save_ring->block0[
j]+1;
254 l+=save_ring->wvhdl[
j][save_ring->block1[
j]-save_ring->block0[
j]+1]+1;
257 memcpy(wvhdl[
j],save_ring->wvhdl[
j],
l*
sizeof(
int));
262 memcpy(order,save_ring->order,(nblocks-1) *
sizeof(
rRingOrder_t));
263 memcpy(block0,save_ring->block0,(nblocks-1) *
sizeof(
int));
264 memcpy(block1,save_ring->block1,(nblocks-1) *
sizeof(
int));
266 block0[nblocks-1]=save_ring->N+1;
267 block1[nblocks-1]=save_ring->N+1;
269 ring Q_ring=
rDefault(
cf,save_ring->N+1,names,nblocks,order,block0,block1,wvhdl,save_ring->wanted_maxExp);
271 nMap=n_SetMap(save_ring->cf,Q_ring->cf);
296 tmp=
id_Subst(tmp,Q_ring->N,one,Q_ring);
297 p_Delete(&one,Q_ring);
300 nMap=n_SetMap(Q_ring->cf,save_ring->cf);
354 int err1=pipe(cp_std);
355 int err2=pipe(cp_hstd);
358 Werror(
"pipe failed with %d\n",errno);
361 si_close(cp_hstd[0]);
362 si_close(cp_hstd[1]);
365 pid_t pid_std=fork();
370 si_close(cp_hstd[0]);
371 si_close(cp_hstd[1]);
373 memset(&d,0,
sizeof(d));
374 d.
f_write=fdopen(cp_std[1],
"w");
383 pid_t pid_hstd=fork();
387 si_close(cp_hstd[0]);
391 memset(&d,0,
sizeof(d));
392 d.
f_write=fdopen(cp_hstd[1],
"w");
407 si_close(cp_hstd[1]);
411 pfd[0].events=POLLIN;
412 pfd[1].fd=cp_hstd[0];
413 pfd[1].events=POLLIN;
414 int s=si_poll(pfd,2,-1);
417 memset(&d,0,
sizeof(d));
424 si_close(cp_hstd[0]);
427 kill(pid_hstd,SIGTERM);
428 si_waitpid(pid_std,
NULL,0);
429 si_waitpid(pid_hstd,
NULL,0);
438 si_close(cp_hstd[0]);
439 kill(pid_std,SIGTERM);
440 si_waitpid(pid_hstd,
NULL,0);
441 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)
coeffs nInitChar(n_coeffType t, void *parameter)
one-time initialisations for new coeffs in case of an error return NULL
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
int feOptValue(feOptIndex opt, char **val)
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
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)
ideal kTryHilbstd_par(ideal F, ideal Q, tHomog h, intvec **mw)
poly kTryHC(ideal F, ideal Q)
ideal kTryHilbstd(ideal F, ideal Q)
static ideal kTryHilbstd_nonhomog(ideal F, ideal Q)
static int kFindLuckyPrime(ideal F, ideal Q)
static ideal kTryHilbstd_homog(ideal F, ideal Q)
number nlModP(number q, const coeffs, const coeffs Zp)
The main handler for Singular numbers which are suitable for Singular polynomials.
#define SI_RESTORE_OPT1(A)
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).
#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)
@ ringorder_a64
for int64 weights
#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)