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--)
96static number nMapQa2Zp(number a,
const coeffs src,
const coeffs dst)
98 if (a==
NULL)
return a;
99 fraction
f=(fraction)a;
105static number nMapZpa2Zp(number a,
const coeffs src,
const coeffs dst)
107 if (a==
NULL)
return a;
108 fraction
f=(fraction)a;
125 prim=save_ring->cf->ch;
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);
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)
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
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
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 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)
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)