32 const std::vector<int> &heft_vector)
78 ERROR(
"attempting to declare a ring with known non-units to be a field");
112 int cmp = mpz_sgn(m);
113 if (cmp == 0)
return one();
135 "either element not invertible, or no method available to "
136 "compute its inverse");
152 mpz_tdiv_q_2exp(n, n, 1);
170 if (n == 0)
return one();
177 ERROR(
"negative power of noninvertible element requested");
195 if (n == 0) {
return prod; }
239 return std::pair<bool, long>(
false,
286 ERROR(
"random scalar elements for this ring are not implemented");
379 if (d == 0)
return a;
392 const std::vector<int> &)
const
394 if (deg != 0)
ERROR(
"homogenize: no homogenization exists");
400 const std::vector<int> &)
const
416 const std::vector<int> &,
exponents::ConstExponents const_exponents
exponents::Exponents exponents_t
Legacy RingZZ — a Ring-derived integer ring backed by GMP mpz_t.
Generic CoefficientRing adapter that wraps an arbitrary const Ring* and forwards every operation to i...
Engine-side free module R^n over a Ring.
Engine-side commutative monomial monoid: variable names, ordering, multidegree machinery,...
static const PolyRing * get_trivial_poly_ring()
Abstract base for the engine's polynomial-ring hierarchy.
virtual ring_elem divide_by_expvector(const_exponents exp, const ring_elem a) const
void set_non_unit(ring_elem zero_div) const
virtual void monomial_divisor(const ring_elem a, exponents_t exp) const
virtual ring_elem var(int v) const
virtual ring_elem content(ring_elem f) const
virtual bool from_BigReal(gmp_RR a, ring_elem &result) const
void subtract_to(ring_elem &f, const ring_elem &g) const
virtual FreeModule * make_FreeModule() const
void negate_to(ring_elem &f) const
virtual bool from_Interval(gmp_RRi a, ring_elem &result) const
virtual ring_elem divide(const ring_elem f, const ring_elem g) const =0
virtual void increase_maxnorm(gmp_RRmutable norm, const ring_elem f) const
virtual void degree_weights(const ring_elem f, const std::vector< int > &wts, int &lo, int &hi) const
virtual ring_elem subtract(const ring_elem f, const ring_elem g) const =0
virtual std::pair< bool, long > coerceToLongInteger(ring_elem a) const
virtual ring_elem add(const ring_elem f, const ring_elem g) const =0
virtual bool is_homogeneous(const ring_elem f) const
virtual bool from_ComplexInterval(gmp_CCi z, ring_elem &result) const
virtual ring_elem divide_by_given_content(ring_elem f, ring_elem c) const
virtual ring_elem quotient(const ring_elem f, const ring_elem g) const
virtual void degree_of_var(int n, const ring_elem a, int &lo, int &hi) const
virtual bool in_subring(int nslots, const ring_elem a) const
void initialize_ring(long charac, const PolynomialRing *DR=nullptr, const std::vector< int > &heft_vec={})
ring_elem divide_by_content(ring_elem f) const
virtual ring_elem remainderAndQuotient(const ring_elem f, const ring_elem g, ring_elem ") const
virtual ring_elem homogenize(const ring_elem f, int v, int deg, const std::vector< int > &wts) const
virtual bool from_BigComplex(gmp_CC z, ring_elem &result) const
virtual unsigned long get_precision() const
virtual void lower_content(ring_elem &c, ring_elem g) const
virtual ring_elem invert(const ring_elem f) const =0
virtual ring_elem from_long(long n) const =0
virtual ring_elem negate(const ring_elem f) const =0
virtual ring_elem preferred_associate(ring_elem f) const
ring_elem get_non_unit() const
virtual ring_elem copy(const ring_elem f) const =0
virtual bool from_complex_double(double re, double im, ring_elem &result) const
virtual int index_of_var(const ring_elem a) const
virtual bool from_double(double a, ring_elem &result) const
virtual ring_elem divide_by_var(int n, int d, const ring_elem a) const
virtual bool multi_degree(const ring_elem f, monomial d) const
virtual ring_elem zeroize_tiny(gmp_RR epsilon, const ring_elem f) const
virtual FreeModule * make_Schreyer_FreeModule() const
virtual bool is_zero(const ring_elem f) const =0
virtual ring_elem diff(ring_elem a, ring_elem b, int use_coeff) const
std::vector< int > mHeftVector
virtual ring_elem random() const
const CoefficientRingR * cR
void add_to(ring_elem &f, const ring_elem &g) const
const CoefficientRingR * getCoefficientRingR() const
void mult_to(ring_elem &f, const ring_elem g) 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.
virtual bool lower_associate_divisor(ring_elem &f, ring_elem g) const
const PolynomialRing * degree_ring
virtual ring_elem mult(const ring_elem f, const ring_elem g) const =0
ring_elem split_off_content(ring_elem f, ring_elem &result) const
virtual ring_elem remainder(const ring_elem f, const ring_elem g) const
virtual M2_arrayint support(const ring_elem a) const
const Monoid * degree_monoid() const
virtual SumCollector * make_SumCollector() const
static unsigned int mod_ui(mpz_srcptr n, unsigned int p)
Engine-side ring of integers, backed by GMP mpz_ptr elements.
SumCollectorDefault(const Ring *R0)
virtual ~SumCollectorDefault()
virtual void add(ring_elem f)
virtual ring_elem getValue()
Generic SumCollector that accumulates into a single ring_elem via repeated Ring::add_to.
Abstract incremental accumulator that builds a ring_elem from many add(f) calls.
Two SimpleARing-style coefficient adapters: CoefficientRingZZp and CoefficientRingR.
namespace exc — internal C++ exception types and the TRY / CATCH macro pair.
static CanonicalForm base
FreeModule — finite-rank free module R^n, the type-level anchor for every Matrix.
VALGRIND_MAKE_MEM_DEFINED & result(result)
M2_arrayint M2_makearrayint(int n)
struct gmp_CC_struct * gmp_CC
struct gmp_CCi_struct * gmp_CCi
Monoid — variable count, naming, grading, and monomial order of a polynomial ring.
Concrete commutative PolyRing — standard polynomial ring inheriting from PolyRingFlat.
PolynomialRing — abstract polynomial-ring base, the engine's most-reused class.
RingZZ * makeIntegerRing()
Ring — the legacy abstract base class for every coefficient and polynomial ring.