15#if __FLINT_RELEASE >= 20503
24BOOLEAN convSingRFlintR(fmpq_mpoly_ctx_t ctx,
const ring r)
28 fmpq_mpoly_ctx_init(ctx,r->N,ORD_DEGREVLEX);
33 fmpq_mpoly_ctx_init(ctx,r->N,ORD_DEGLEX);
38 fmpq_mpoly_ctx_init(ctx,r->N,ORD_LEX);
44BOOLEAN convSingRFlintR(nmod_mpoly_ctx_t ctx,
const ring r)
48 nmod_mpoly_ctx_init(ctx,r->N,ORD_DEGREVLEX,r->cf->ch);
53 nmod_mpoly_ctx_init(ctx,r->N,ORD_DEGLEX,r->cf->ch);
58 nmod_mpoly_ctx_init(ctx,r->N,ORD_LEX,r->cf->ch);
64BOOLEAN convSingRFlintR(fmpz_mpoly_ctx_t ctx,
const ring r)
68 fmpz_mpoly_ctx_init(ctx,r->N,ORD_DEGREVLEX);
73 fmpz_mpoly_ctx_init(ctx,r->N,ORD_DEGLEX);
78 fmpz_mpoly_ctx_init(ctx,r->N,ORD_LEX);
96static void _fmpq_mpoly_clear_readonly_sing(fmpq_mpoly_t a, fmpq_mpoly_ctx_t ctx)
98 fmpq_mpoly_clear(a, ctx);
101void convSingPFlintMP(fmpq_mpoly_t
res, fmpq_mpoly_ctx_t ctx, poly
p,
int lp,
const ring r)
103 fmpq_mpoly_init2(
res, lp, ctx);
104 ulong*
exp=(ulong*)
omAlloc((r->N+1)*
sizeof(ulong));
112 fmpq_mpoly_push_term_fmpq_ui(
res, c,
exp, ctx);
115 fmpq_mpoly_push_term_fmpq_ui(
res, c, &(
exp[1]), ctx);
120 fmpq_mpoly_reduce(
res, ctx);
124poly convFlintMPSingP(fmpq_mpoly_t
f, fmpq_mpoly_ctx_t ctx,
const ring r)
126 int d=fmpq_mpoly_length(
f,ctx)-1;
128 ulong*
exp=(ulong*)
omAlloc0((r->N+1)*
sizeof(ulong));
131 for(
int i=d;
i>=0;
i--)
133 fmpq_mpoly_get_term_coeff_fmpq(c,
f,
i,ctx);
136 fmpq_mpoly_get_term_exp_ui(
exp,
f,
i,ctx);
139 fmpq_mpoly_get_term_exp_ui(&(
exp[1]),
f,
i,ctx);
154void convSingPFlintMP(fmpz_mpoly_t
res, fmpz_mpoly_ctx_t ctx, poly
p,
int lp,
const ring r)
156 fmpz_mpoly_init2(
res, lp, ctx);
157 ulong*
exp=(ulong*)
omAlloc((r->N+1)*
sizeof(ulong));
165 fmpz_mpoly_push_term_fmpz_ui(
res, c,
exp, ctx);
168 fmpz_mpoly_push_term_fmpz_ui(
res, c, &(
exp[1]), ctx);
176poly convFlintMPSingP(fmpz_mpoly_t
f, fmpz_mpoly_ctx_t ctx,
const ring r)
178 int d=fmpz_mpoly_length(
f,ctx)-1;
180 ulong*
exp=(ulong*)
omAlloc0((r->N+1)*
sizeof(ulong));
183 for(
int i=d;
i>=0;
i--)
185 fmpz_mpoly_get_term_coeff_fmpz(c,
f,
i,ctx);
188 fmpz_mpoly_get_term_exp_ui(
exp,
f,
i,ctx);
191 fmpz_mpoly_get_term_exp_ui(&(
exp[1]),
f,
i,ctx);
206poly convFlintMPSingP(nmod_mpoly_t
f, nmod_mpoly_ctx_t ctx,
const ring r)
208 int d=nmod_mpoly_length(
f,ctx)-1;
210 ulong*
exp=(ulong*)
omAlloc0((r->N+1)*
sizeof(ulong));
211 for(
int i=d;
i>=0;
i--)
213 ulong c=nmod_mpoly_get_term_coeff_ui(
f,
i,ctx);
216 nmod_mpoly_get_term_exp_ui(
exp,
f,
i,ctx);
219 nmod_mpoly_get_term_exp_ui(&(
exp[1]),
f,
i,ctx);
232void convSingPFlintMP(nmod_mpoly_t
res, nmod_mpoly_ctx_t ctx, poly
p,
int lp,
const ring r)
234 nmod_mpoly_init2(
res, lp, ctx);
235 ulong*
exp=(ulong*)
omAlloc((r->N+1)*
sizeof(ulong));
241 nmod_mpoly_push_term_ui_ui(
res, (ulong)n,
exp, ctx);
244 nmod_mpoly_push_term_ui_ui(
res, (ulong)n, &(
exp[1]), ctx);
253poly Flint_Mult_MP(poly
p,
int lp, poly q,
int lq, fmpq_mpoly_ctx_t ctx,
const ring r)
255 fmpq_mpoly_t
pp,qq,
res;
256 convSingPFlintMP(
pp,ctx,
p,lp,r);
257 convSingPFlintMP(qq,ctx,q,
lq,r);
258 fmpq_mpoly_init(
res,ctx);
259 fmpq_mpoly_mul(
res,
pp,qq,ctx);
260 poly pres=convFlintMPSingP(
res,ctx,r);
261 fmpq_mpoly_clear(
res,ctx);
262 _fmpq_mpoly_clear_readonly_sing(
pp,ctx);
263 _fmpq_mpoly_clear_readonly_sing(qq,ctx);
264 fmpq_mpoly_ctx_clear(ctx);
269poly Flint_Mult_MP(poly
p,
int lp, poly q,
int lq, nmod_mpoly_ctx_t ctx,
const ring r)
271 nmod_mpoly_t
pp,qq,
res;
272 convSingPFlintMP(
pp,ctx,
p,lp,r);
273 convSingPFlintMP(qq,ctx,q,
lq,r);
274 nmod_mpoly_init(
res,ctx);
275 nmod_mpoly_mul(
res,
pp,qq,ctx);
276 poly pres=convFlintMPSingP(
res,ctx,r);
277 nmod_mpoly_clear(
res,ctx);
278 nmod_mpoly_clear(
pp,ctx);
279 nmod_mpoly_clear(qq,ctx);
280 nmod_mpoly_ctx_clear(ctx);
285poly Flint_Mult_MP(poly
p,
int lp, poly q,
int lq, fmpz_mpoly_ctx_t ctx,
const ring r)
287 fmpz_mpoly_t
pp,qq,
res;
288 convSingPFlintMP(
pp,ctx,
p,lp,r);
289 convSingPFlintMP(qq,ctx,q,
lq,r);
290 fmpz_mpoly_init(
res,ctx);
291 fmpz_mpoly_mul(
res,
pp,qq,ctx);
292 poly pres=convFlintMPSingP(
res,ctx,r);
293 fmpz_mpoly_clear(
res,ctx);
294 fmpz_mpoly_clear(
pp,ctx);
295 fmpz_mpoly_clear(qq,ctx);
296 fmpz_mpoly_ctx_clear(ctx);
302poly Flint_Divide_MP(poly
p,
int lp, poly q,
int lq, fmpq_mpoly_ctx_t ctx,
const ring r)
304 fmpq_mpoly_t
pp,qq,
res;
305 convSingPFlintMP(
pp,ctx,
p,lp,r);
306 convSingPFlintMP(qq,ctx,q,
lq,r);
307 fmpq_mpoly_init(
res,ctx);
308 fmpq_mpoly_divides(
res,
pp,qq,ctx);
309 poly pres = convFlintMPSingP(
res,ctx,r);
310 fmpq_mpoly_clear(
res,ctx);
311 _fmpq_mpoly_clear_readonly_sing(
pp,ctx);
312 _fmpq_mpoly_clear_readonly_sing(qq,ctx);
313 fmpq_mpoly_ctx_clear(ctx);
318poly Flint_Divide_MP(poly
p,
int lp, poly q,
int lq, nmod_mpoly_ctx_t ctx,
const ring r)
320 nmod_mpoly_t
pp,qq,
res;
321 convSingPFlintMP(
pp,ctx,
p,lp,r);
322 convSingPFlintMP(qq,ctx,q,
lq,r);
323 nmod_mpoly_init(
res,ctx);
324 nmod_mpoly_divides(
res,
pp,qq,ctx);
325 poly pres=convFlintMPSingP(
res,ctx,r);
326 nmod_mpoly_clear(
res,ctx);
327 nmod_mpoly_clear(
pp,ctx);
328 nmod_mpoly_clear(qq,ctx);
329 nmod_mpoly_ctx_clear(ctx);
334poly Flint_GCD_MP(poly
p,
int lp,poly q,
int lq,nmod_mpoly_ctx_t ctx,
const ring r)
336 nmod_mpoly_t
pp,qq,
res;
337 convSingPFlintMP(
pp,ctx,
p,lp,r);
338 convSingPFlintMP(qq,ctx,q,
lq,r);
339 nmod_mpoly_init(
res,ctx);
340 int ok=nmod_mpoly_gcd(
res,
pp,qq,ctx);
344 pres=convFlintMPSingP(
res,ctx,r);
351 nmod_mpoly_clear(
res,ctx);
352 nmod_mpoly_clear(
pp,ctx);
353 nmod_mpoly_clear(qq,ctx);
354 nmod_mpoly_ctx_clear(ctx);
358poly Flint_GCD_MP(poly
p,
int lp,poly q,
int lq,fmpq_mpoly_ctx_t ctx,
const ring r)
360 fmpq_mpoly_t
pp,qq,
res;
361 convSingPFlintMP(
pp,ctx,
p,lp,r);
362 convSingPFlintMP(qq,ctx,q,
lq,r);
363 fmpq_mpoly_init(
res,ctx);
364 int ok=fmpq_mpoly_gcd(
res,
pp,qq,ctx);
378 pres=convFlintMPSingP(
res,ctx,r);
385 fmpq_mpoly_clear(
res,ctx);
386 _fmpq_mpoly_clear_readonly_sing(
pp,ctx);
387 _fmpq_mpoly_clear_readonly_sing(qq,ctx);
388 fmpq_mpoly_ctx_clear(ctx);
392poly Flint_GCD_MP(poly
p,
int lp,poly q,
int lq,fmpz_mpoly_ctx_t ctx,
const ring r)
394 fmpz_mpoly_t
pp,qq,
res;
395 convSingPFlintMP(
pp,ctx,
p,lp,r);
396 convSingPFlintMP(qq,ctx,q,
lq,r);
397 fmpz_mpoly_init(
res,ctx);
398 int ok=fmpz_mpoly_gcd(
res,
pp,qq,ctx);
403 pres=convFlintMPSingP(
res,ctx,r);
410 fmpz_mpoly_clear(
res,ctx);
411 fmpz_mpoly_clear(
pp,ctx);
412 fmpz_mpoly_clear(qq,ctx);
413 fmpz_mpoly_ctx_clear(ctx);
Coefficient rings, fields and other domains suitable for Singular polynomials.
This file is work in progress and currently not part of the official Singular.
void convSingNFlintN(fmpz_t f, mpz_t z)
void convSingNFlintN_QQ(fmpq_t f, number n)
void convFlintNSingN(mpz_t z, fmpz_t f)
number convFlintNSingN_QQ(fmpq_t f, const coeffs cf)
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)
#define omFreeSize(addr, size)
static void p_SetExpVL(poly p, int64 *ev, const ring r)
static void p_SetExpV(poly p, int *ev, const ring r)
static void p_Setm(poly p, const ring r)
static void p_GetExpVL(poly p, int64 *ev, const ring r)
static void p_GetExpV(poly p, int *ev, const ring r)
static poly p_Init(const ring r, omBin bin)
BOOLEAN rRing_ord_pure_Dp(const ring r)
BOOLEAN rRing_ord_pure_dp(const ring r)
BOOLEAN rRing_ord_pure_lp(const ring r)