Macaulay2 Engine
Loading...
Searching...
No Matches
localring.hpp
Go to the documentation of this file.
1/* Copyright 2017 Mahrud Sayrafi and Michael E. Stillman
2 Mahrud Sayrafi's code in this file is in the public domain. */
3
4#ifndef _localring_hh_
5#define _localring_hh_
6
40
41#include "ring.hpp"
42#include "poly.hpp"
43#include "polyring.hpp"
44#include "comp-gb.hpp"
45
51
66class LocalRing : public Ring
67{
68 private:
71
73 virtual ~LocalRing() {}
74
75 bool initialize_local(const PolyRing *R, GBComputation *P);
78
79 bool is_in_prime(const ring_elem f) const;
80 void simplify(local_elem *f) const;
81
82 // FIXME remove:
83 bool use_gcd_simplify = true;
85
86 public:
87 LocalRing *cast_to_LocalRing() { return this; }
88 const LocalRing *cast_to_LocalRing() const { return this; }
89
90 const PolyRing *get_ring() const { return mRing; }
91 unsigned long get_precision() const { return mRing->get_precision(); }
92
93 virtual bool is_local_ring() const { return true; }
94 virtual bool is_graded() const { return mRing->is_graded(); }
95 virtual CoefficientType coefficient_type() const;
96
97 static LocalRing *create(const PolyRing *R, GBComputation *P);
98
99 virtual bool is_unit(const ring_elem f) const;
100 virtual bool is_zero(const ring_elem f) const;
101 virtual bool is_equal(const ring_elem f, const ring_elem g) const;
102 virtual int compare_elems(const ring_elem f, const ring_elem g) const;
103
106 ring_elem fraction(const ring_elem top, const ring_elem bottom) const;
107
108 virtual void lift_up(const Ring *R, const Matrix *m, Matrix *&result) const;
109 virtual bool lift(const Ring *R, const ring_elem f, ring_elem &result) const;
110 virtual bool promote(const Ring *R,
111 const ring_elem f,
112 ring_elem &result) const;
113
114 virtual bool from_rational(mpq_srcptr n, ring_elem &result) const;
115 virtual ring_elem from_long(long n) const;
116 virtual ring_elem from_int(mpz_srcptr n) const;
117 virtual ring_elem var(int v) const;
118
119 virtual int index_of_var(const ring_elem a) const;
120 virtual M2_arrayint support(const ring_elem a) const;
121
122 void lower_content(ring_elem &c, const ring_elem g) const;
123
124 virtual bool is_homogeneous(const ring_elem f) const;
125 virtual bool multi_degree(const ring_elem f, monomial d) const;
126 virtual void degree_weights(const ring_elem f,
127 const std::vector<int> &wts,
128 int &lo,
129 int &hi) const;
130 virtual ring_elem homogenize(const ring_elem f,
131 int v,
132 int deg,
133 const std::vector<int> &wts) const;
134 virtual ring_elem homogenize(const ring_elem f,
135 int v,
136 const std::vector<int> &wts) const;
137
138 virtual ring_elem copy(const ring_elem f) const;
139 virtual void remove(ring_elem &f) const;
140
141 virtual ring_elem negate(const ring_elem f) const;
142 virtual ring_elem add(const ring_elem f, const ring_elem g) const;
143 virtual ring_elem subtract(const ring_elem f, const ring_elem g) const;
144 virtual ring_elem mult(const ring_elem f, const ring_elem g) const;
145 virtual ring_elem power(const ring_elem f, mpz_srcptr n) const;
146 virtual ring_elem power(const ring_elem f, int n) const;
147 virtual ring_elem invert(const ring_elem f) const;
148 virtual ring_elem divide(const ring_elem f, const ring_elem g) const;
149
150 virtual void syzygy(const ring_elem a,
151 const ring_elem b,
152 ring_elem &x,
153 ring_elem &y) const;
154
155 virtual ring_elem random() const;
156
157 virtual ring_elem eval(const RingMap *map,
158 const ring_elem f,
159 int first_var) const;
160
161 virtual int n_fraction_vars() const; // FIXME
162 virtual int n_terms(const ring_elem f) const;
163 virtual ring_elem term(const ring_elem a, const_monomial m) const;
164 virtual ring_elem lead_coeff(const ring_elem f) const;
165 virtual ring_elem get_coeff(const ring_elem f, const_monomial m) const;
166 virtual ring_elem get_terms(int nvars0,
167 const ring_elem f,
168 int lo,
169 int hi) const;
170
171 virtual void text_out(buffer &o) const;
172 virtual void elem_text_out(buffer &o,
173 const ring_elem f,
174 bool p_one = true,
175 bool p_plus = false,
176 bool p_parens = false) const;
177 virtual unsigned int computeHashValue(const ring_elem a) const;
178};
179
180#endif
181
182// Local Variables:
183// compile-command: "make -C $M2BUILDDIR/Macaulay2/e "
184// indent-tabs-mode: nil
185// End:
base class for Groebner basis computations.
Definition comp-gb.hpp:69
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
Definition localring.cpp:52
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
GBComputation * mPrime
Definition localring.hpp:70
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
const PolyRing * mRing
Definition localring.hpp:69
virtual int n_terms(const ring_elem f) const
const PolyRing * get_ring() const
Definition localring.hpp:90
bool is_in_prime(const ring_elem f) const
Definition localring.cpp:63
const LocalRing * cast_to_LocalRing() const
Definition localring.hpp:88
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
unsigned long get_precision() const
Definition localring.hpp:91
virtual bool from_rational(mpq_srcptr n, ring_elem &result) const
static LocalRing * create(const PolyRing *R, GBComputation *P)
Definition localring.cpp:18
virtual bool is_zero(const ring_elem f) const
virtual ~LocalRing()
Definition localring.hpp:73
bool initialize_local(const PolyRing *R, GBComputation *P)
Definition localring.cpp:25
LocalRing * cast_to_LocalRing()
Definition localring.hpp:87
virtual int n_fraction_vars() const
bool use_gcd_simplify
Definition localring.hpp:83
virtual bool is_graded() const
Definition localring.hpp:94
virtual ring_elem subtract(const ring_elem f, const ring_elem g) const
local_elem * new_local_elem() const
Definition localring.cpp:61
virtual bool lift(const Ring *R, const ring_elem f, ring_elem &result) const
void simplify(local_elem *f) const
Definition localring.cpp:73
virtual bool is_local_ring() const
Definition localring.hpp:93
Engine-side localisation of a polynomial ring at a prime ideal.
Definition localring.hpp:67
Concrete PolyRingFlat subclass implementing ordinary commutative polynomial rings K[x_1,...
Definition poly.hpp:64
Ring()
Definition ring.hpp:136
xxx xxx xxx
Definition ring.hpp:102
Engine-side ring homomorphism: stores, for each source-ring variable, the target-ring element it maps...
Definition ringmap.hpp:60
GBComputation — abstract base of every Groebner-basis algorithm in the engine.
#define Matrix
Definition factory.cpp:14
#define monomial
Definition gb-toric.cpp:11
const int * const_monomial
Definition imonorder.hpp:45
VALGRIND_MAKE_MEM_DEFINED & result(result)
volatile int x
Concrete commutative PolyRing — standard polynomial ring inheriting from PolyRingFlat.
PolynomialRing — abstract polynomial-ring base, the engine's most-reused class.
Ring — the legacy abstract base class for every coefficient and polynomial ring.
ring_elem numer
Definition localring.hpp:48
ring_elem denom
Definition localring.hpp:49