Macaulay2 Engine
Loading...
Searching...
No Matches

◆ ARingGFFlintBig()

M2::ARingGFFlintBig::ARingGFFlintBig ( const PolynomialRing & R,
const ring_elem a )

Definition at line 10 of file aring-gf-flint-big.cpp.

11 : mOriginalRing(R),
14{
15
16 // TODO: assert that the base ring of R is ZZ/p.
17 // TODO: if mDimension <= 1 then give an error.
18 ring_elem b = R.copy(a);
20 ring_elem minpoly = mOriginalRing.quotient_element(0);
21
22 std::vector<long> poly;
23 RingElement F(&R, minpoly);
24 F.getSmallIntegerCoefficients(poly);
25
26 // warning: flint expects unsigned longs, so we must make
27 // all of these coeffs non-negative.
28 for (long i = poly.size() - 1; i >= 0; i--)
29 {
30 long a = poly[i];
31 if (a == 0) continue;
32 if (a < 0) poly[i] += characteristic();
33 }
34
35 mDimension = poly.size() - 1;
36
37#if 0
38 printf("minpoly: ");
39 for (long i=0; i<poly.size(); i++)
40 printf(" %ld", poly[i]);
41 printf("\n");
42#endif
43 nmod_poly_t mMinPoly;
44 nmod_poly_init(mMinPoly, R.characteristic());
45
46 for (long i = poly.size() - 1; i >= 0; i--)
47 if (poly[i] != 0) nmod_poly_set_coeff_ui(mMinPoly, i, poly[i]);
48
49 fq_nmod_ctx_init_modulus(mContext, mMinPoly, "a");
50#if 0
51 fq_nmod_ctx_print(mContext);
52#endif
53 nmod_poly_clear(mMinPoly);
54
55 // powers of p, as ulongs's
56 mPPowers = newarray_atomic(unsigned int, mDimension + 1);
57 mPPowers[0] = 1;
58 for (long i = 1; i <= mDimension; i++)
59 mPPowers[i] = mPPowers[i - 1] * static_cast<unsigned int>(mCharacteristic);
60
62}
#define FLINT_RAND_INIT(x)
Definition aring.hpp:59
const PolynomialRing & mOriginalRing
const RingElement * mPrimitiveElement
long characteristic() const
Definition ring.hpp:159
virtual ring_elem copy(const ring_elem f) const =0
static RingElement * make_raw(const Ring *R, ring_elem f)
Definition relem.cpp:20
#define newarray_atomic(T, len)
Definition newdelete.hpp:91

References characteristic(), Ring::characteristic(), Ring::copy(), FLINT_RAND_INIT, RingElement::getSmallIntegerCoefficients(), RingElement::make_raw(), mCharacteristic, mContext, mDimension, mGeneratorComputed, mOriginalRing, mPPowers, mPrimitiveElement, mRandomState, and newarray_atomic.

Referenced by M2::ARingGFFlintBig::Element::Element(), M2::ARingGFFlintBig::Element::Element(), and M2::ARingGFFlintBig::ElementArray::ElementArray().