21 result->initialize_local(R, P);
68 bool res = (
mPrime->contains(M) == -1);
116 mRing->getCoefficients()->elem_text_out(o,ct);
121 if (!
mRing->getCoefficients()->is_equal(ct,
122 mRing->getCoefficients()->one()))
153 std::cout <<
"set_non_unit_frac is called!" << std::endl;
205 if (cmp != 0)
return cmp;
232 Matrix::column_iterator i(m),
end(m);
233 for (
int c = 0; c < m->
n_cols(); c++)
237 for (i = Matrix::column_iterator(m, c); i !=
end; ++i)
239 const local_elem * f = ((*i)->coeff).get_local_elem();
249 std::cout<<std::endl;
254 for (i = Matrix::column_iterator(m, c); i !=
end; ++i)
256 const local_elem * f = ((*i)->coeff).get_local_elem();
285 if (
mRing->is_field())
367 for (
int i = 0; i < result1->len; i++)
result->array[i] = result1->array[i];
368 for (
int i = 0; i < result2->len; i++)
369 result->array[result1->len + i] = result2->array[i];
414 bool tophom =
mRing->multi_degree(f->
numer, d);
416 bool bottomhom =
mRing->multi_degree(f->
denom, e);
419 return tophom && bottomhom;
423 const std::vector<int> &,
435 const std::vector<int> &wts)
const
437 int d1, d2, lo1, lo2;
440 mRing->degree_weights(f->
numer, wts, lo1, d1);
441 mRing->degree_weights(f->
denom, wts, lo2, d2);
444 top =
mRing->homogenize(f->
numer, v, deg + d2, wts);
445 bottom =
mRing->homogenize(f->
denom, v, d2, wts);
449 top =
mRing->homogenize(f->
numer, v, d1, wts);
450 bottom =
mRing->homogenize(f->
denom, v, -deg + d1, wts);
458 const std::vector<int> &wts)
const
502 mRing->add_to(top, tmp);
525 mRing->subtract_to(top, tmp);
584 mpz_init(negative_n);
585 mpz_neg(negative_n, n);
592 mpz_clear(negative_n);
642 if (
mRing->is_zero(b))
645 b =
mRing->from_long(1);
658 if (S->
is_zero(top))
return top;
659 bottom =
mRing->eval(map, f->
denom, first_var);
696 o <<
", Prime ideal => ";
697 mPrime->get_mingens()->text_out(o);
710 p_one = p_one || !denom_one;
711 p_parens = p_parens || !denom_one;
712 mRing->elem_text_out(o, f->
numer, p_one, p_plus, p_parens);
717 mRing->elem_text_out(o, f->
denom, p_one, p_plus, p_parens);
724 return (16473 *
mRing->computeHashValue(g->
numer) +
739 ERROR(
"expected an object over a local ring");
745 ERROR(
"expected an object over a localization of the first argument");
758 ERROR(
"expected an object over a local ring");
base class for Groebner basis computations.
virtual ring_elem add(const ring_elem f, const ring_elem g) const
ring_elem set_non_unit_frac(ring_elem top) const
virtual void text_out(buffer &o) const
virtual bool is_homogeneous(const ring_elem f) const
virtual ring_elem copy(const ring_elem f) const
virtual ring_elem eval(const RingMap *map, const ring_elem f, int first_var) const
virtual ring_elem homogenize(const ring_elem f, int v, int deg, const std::vector< int > &wts) const
virtual int index_of_var(const ring_elem a) const
ring_elem numerator(ring_elem f) const
virtual void lift_up(const Ring *R, const Matrix *m, Matrix *&result) const
virtual ring_elem from_long(long n) const
virtual ring_elem var(int v) const
virtual ring_elem mult(const ring_elem f, const ring_elem g) const
local_elem * make_elem(ring_elem a, ring_elem b) const
virtual ring_elem negate(const ring_elem f) 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
virtual ring_elem get_coeff(const ring_elem f, const_monomial m) const
virtual ring_elem term(const ring_elem a, const_monomial m) const
virtual bool multi_degree(const ring_elem f, monomial d) const
virtual ring_elem invert(const ring_elem f) const
virtual bool promote(const Ring *R, const ring_elem f, ring_elem &result) const
ring_elem fraction(const ring_elem top, const ring_elem bottom) const
virtual CoefficientType coefficient_type() const
virtual void syzygy(const ring_elem a, const ring_elem b, ring_elem &x, ring_elem &y) const
virtual ring_elem lead_coeff(const ring_elem f) 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 is_unit(const ring_elem f) const
ring_elem denominator(ring_elem f) const
virtual unsigned int computeHashValue(const ring_elem a) const
virtual ring_elem get_terms(int nvars0, const ring_elem f, int lo, int hi) const
virtual int n_terms(const ring_elem f) const
const PolyRing * get_ring() const
bool is_in_prime(const ring_elem f) const
virtual bool is_equal(const ring_elem f, const ring_elem g) const
virtual void remove(ring_elem &f) const
virtual ring_elem from_int(mpz_srcptr n) const
virtual ring_elem random() const
virtual int compare_elems(const ring_elem f, const ring_elem g) const
virtual void degree_weights(const ring_elem f, const std::vector< int > &wts, int &lo, int &hi) const
virtual M2_arrayint support(const ring_elem a) const
void lower_content(ring_elem &c, const ring_elem g) const
virtual ring_elem divide(const ring_elem f, const ring_elem g) const
virtual bool from_rational(mpq_srcptr n, ring_elem &result) const
static LocalRing * create(const PolyRing *R, GBComputation *P)
virtual bool is_zero(const ring_elem f) const
bool initialize_local(const PolyRing *R, GBComputation *P)
virtual int n_fraction_vars() const
virtual ring_elem subtract(const ring_elem f, const ring_elem g) const
local_elem * new_local_elem() const
virtual bool lift(const Ring *R, const ring_elem f, ring_elem &result) const
void simplify(local_elem *f) const
Engine-side localisation of a polynomial ring at a prime ideal.
const Ring * get_ring() const
void compute_column_degrees()
void set_entry(int r, int c, ring_elem a)
Mutable builder used to assemble an immutable Matrix one column (or one term) at a time.
monomial make_one() const
void remove(monomial d) const
void divide(const_monomial m, const_monomial n, monomial result) const
Concrete PolyRingFlat subclass implementing ordinary commutative polynomial rings K[x_1,...
const Ring * getCoefficientRing() const
Abstract base for the engine's polynomial-ring hierarchy.
virtual void remove(ring_elem &f) const =0
void set_non_unit(ring_elem zero_div) const
virtual ring_elem divide(const ring_elem f, const ring_elem g) const =0
virtual bool is_unit(const ring_elem f) const =0
void initialize_ring(long charac, const PolynomialRing *DR=nullptr, const std::vector< int > &heft_vec={})
long characteristic() const
virtual const LocalRing * cast_to_LocalRing() const
virtual bool is_zero(const ring_elem f) const =0
const PolynomialRing * get_degree_ring() const
virtual CoefficientType coefficient_type() const
const Monoid * degree_monoid() const
const std::vector< int > & get_heft_vector() const
void text_out(buffer &o) const
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 * get_ring() const
Engine-side ring homomorphism: stores, for each source-ring variable, the target-ring element it maps...
void drelem(const RingElement *f)
Debugger-callable d* helpers that pretty-print engine values to stderr.
namespace exc — internal C++ exception types and the TRY / CATCH macro pair.
const RingElement * rawGCDRingElement(const RingElement *f, const RingElement *g, const RingElement *mipo, const M2_bool inExtension)
Engine-boundary C API for polynomial GCD, factorisation, and root finding.
GBRing and gbvector — the GB-tuned polynomial-ring view used by classical Buchberger code.
M2_bool rawIsLocalUnit(const RingElement *f)
Matrix * rawLiftLocalMatrix(const Ring *R, const Matrix *f)
LocalRing — localisation of a polynomial ring at a prime ideal P.
VALGRIND_MAKE_MEM_DEFINED & result(result)
M2_arrayint M2_makearrayint(int n)
MatrixConstructor — the mutable builder that produces an immutable Matrix.
Matrix — the engine's immutable homomorphism F -> G between free modules.
Monoid — variable count, naming, grading, and monomial order of a polynomial ring.
MutableComplex — in-place chain complex of MutableMatrix differentials.
RingElement — tagged (Ring*, ring_elem) pair, the engine's universal element type.
TermIterator< Nterm > end(Nterm *)
RingMap — engine representation of a ring homomorphism.
Text-formatting helpers layered on buffer: bignum print, line wrapping, M2_gbTrace-gated emit.
const local_elem * get_local_elem() const