54 "rawGaloisField expected an element of a quotient ring of the form "
81 for (i = 2; i <
Q_; i++)
89 if (polys.size() !=
Q_)
99 for (i = 1; i <=
Q_ - 1; i++)
103 for (j = 1; j <=
Q_ - 1; j++)
104 if (
_originalR->is_equal(f1, polys[j]))
break;
130 if (!
result->initialize_GF(prim))
return nullptr;
172 return (t <=
p ? t : t -
p);
178 return (t <= 0 ? t +
p : t);
199 _originalR->elem_text_out(o, h, p_one, p_plus, p_parens);
212 int m =
static_cast<int>(m1);
222 long m1 = mpz_get_si(
result);
225 int m =
static_cast<int>(m1);
234 bool ok1 =
_originalR->getCoefficients()->from_rational(q, a);
235 if (not ok1)
return false;
236 std::pair<bool, long> b =
237 _originalR->getCoefficients()->coerceToLongInteger(a);
268 _originalR->getMonoid()->to_expvector(t.monom, exp);
308 if (cmp < 0)
return -1;
309 if (cmp == 0)
return 0;
328 if (b ==
_ZERO)
return a;
329 if (a ==
_ZERO)
return b;
351 if (g ==
_ZERO)
return f;
352 if (f == g)
return _ZERO;
383 if (m <= 0) m +=
Q1_;
403 if (m <= 0) m +=
Q1_;
410 else if (mpz_sgn(n) > 0)
static int modulus_add(int a, int b, int p)
static int modulus_sub(int a, int b, int p)
Legacy Ring-based Galois field with explicit Zech-style lookup tables.
Legacy RingZZ — a Ring-derived integer ring backed by GMP mpz_t.
M2::ARingGFM2 — native engine Galois field, no FLINT dependency.
ring_elem get_rep(ring_elem f) const
virtual ring_elem invert(const ring_elem f) const
virtual bool from_rational(mpq_srcptr q, ring_elem &result) const
virtual bool is_equal(const ring_elem f, const ring_elem g) const
int internal_add(int f, int g) const
virtual ring_elem eval(const RingMap *map, const ring_elem f, int first_var) const
virtual void syzygy(const ring_elem a, const ring_elem b, ring_elem &x, ring_elem &y) const
virtual void text_out(buffer &o) const
virtual ring_elem subtract(const ring_elem f, const ring_elem g) const
const RingElement * _primitive_element
bool initialize_GF(const RingElement *prim)
virtual int compare_elems(const ring_elem f, const ring_elem g) const
virtual void elem_text_out(buffer &o, const ring_elem f, bool p_one=true, bool p_plus=false, bool p_parens=false) const
int internal_subtract(int f, int g) const
virtual const RingElement * getGenerator() const
int internal_negate(int f) const
virtual ring_elem copy(const ring_elem f) const
virtual bool promote(const Ring *R, const ring_elem f, ring_elem &result) const
virtual ring_elem from_int(mpz_srcptr n) const
virtual void remove(ring_elem &f) const
virtual ring_elem var(int v) const
virtual bool is_zero(const ring_elem f) const
virtual bool lift(const Ring *R, const ring_elem f, ring_elem &result) const
virtual ring_elem random() const
virtual ring_elem add(const ring_elem f, const ring_elem g) const
const PolynomialRing * _originalR
virtual ring_elem from_long(long n) const
virtual ring_elem power(const ring_elem f, mpz_srcptr n) const
Exponentiation. This is the default function, if a class doesn't define this.
static GF * create(const RingElement *prim)
virtual const RingElement * getRepresentation(const ring_elem &a) const
int discrete_log(ring_elem a) const
virtual ring_elem negate(const ring_elem f) const
virtual ring_elem mult(const ring_elem f, const ring_elem g) const
virtual bool is_unit(const ring_elem f) const
virtual ring_elem divide(const ring_elem f, const ring_elem g) const
const RingElement * getMinimalPolynomial() const
static const PolyRing * get_trivial_poly_ring()
virtual std::pair< bool, long > coerceToLongInteger(ring_elem a) const
void initialize_ring(long charac, const PolynomialRing *DR=nullptr, const std::vector< int > &heft_vec={})
virtual const PolynomialRing * cast_to_PolynomialRing() const
long characteristic() const
virtual ring_elem copy(const ring_elem f) const =0
virtual ring_elem power(const ring_elem f, mpz_srcptr n) const
Exponentiation. This is the default function, if a class doesn't define this.
ring_elem get_value() const
static RingElement * make_raw(const Ring *R, ring_elem f)
const Ring * get_ring() const
Front-end-visible "ring element" value: an engine ring_elem paired with the Ring* that gives it meani...
const ring_elem elem(int i) const
const Ring * get_ring() const
Engine-side ring homomorphism: stores, for each source-ring variable, the target-ring element it maps...
static unsigned int mod_ui(mpz_srcptr n, unsigned int p)
bool system_interrupted()
system_interrupted() — thread-safe polling predicate for Ctrl+C handling.
VALGRIND_MAKE_MEM_DEFINED & result(result)
Monoid — variable count, naming, grading, and monomial order of a polynomial ring.
#define newarray_atomic(T, len)
Concrete commutative PolyRing — standard polynomial ring inheriting from PolyRingFlat.
int32_t rawRandomInt(int32_t max)
RingMap — engine representation of a ring homomorphism.
Singly linked-list node carrying one term of a polynomial-ring element.
Text-formatting helpers layered on buffer: bignum print, line wrapping, M2_gbTrace-gated emit.