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

◆ ARingGFFlint()

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

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

11 : mOriginalRing(R),
14{
15 ring_elem b = R.copy(a);
17 ring_elem minpoly = mOriginalRing.quotient_element(0);
18
19 std::vector<long> poly;
20 RingElement F(&R, minpoly);
21 F.getSmallIntegerCoefficients(poly);
22
23 // warning: flint expects unsigned longs, so we must make
24 // all of these coeffs non-negative.
25 for (long i = poly.size() - 1; i >= 0; i--)
26 {
27 long a = poly[i];
28 if (a == 0) continue;
29 if (a < 0) poly[i] += characteristic();
30 }
31
32 mDimension = poly.size() - 1;
33
34#if 0
35 printf("minpoly: ");
36 for (long i=0; i<poly.size(); i++)
37 printf(" %ld", poly[i]);
38 printf("\n");
39#endif
40 nmod_poly_t mMinPoly;
41 nmod_poly_init(mMinPoly, R.characteristic());
42
43 for (long i = poly.size() - 1; i >= 0; i--)
44 if (poly[i] != 0) nmod_poly_set_coeff_ui(mMinPoly, i, poly[i]);
45
46 fq_zech_ctx_init_modulus(mContext, mMinPoly, "a");
47 fq_nmod_ctx_init_modulus(mBigContext, mMinPoly, "a");
48#if 0
49 fq_zech_ctx_print(mContext);
50#endif
51 nmod_poly_clear(mMinPoly);
52
53 // powers of p, as ulongs's
54 mPPowers = newarray_atomic(mp_limb_t, mDimension + 1);
55 mPPowers[0] = 1;
56 for (long i = 1; i <= mDimension; i++)
57 mPPowers[i] = mPPowers[i - 1] * static_cast<ulong>(mCharacteristic);
58
60}
#define FLINT_RAND_INIT(x)
Definition aring.hpp:59
fq_nmod_ctx_t mBigContext
flint_rand_t mRandomState
const RingElement * mPrimitiveElement
fq_zech_ctx_t mContext
long characteristic() const
const PolynomialRing & mOriginalRing
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
unsigned long int ulong
Definition comb.cpp:7
#define newarray_atomic(T, len)
Definition newdelete.hpp:91

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

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