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

◆ rawRingElementCRA()

const RingElement * rawRingElementCRA ( const RingElement * f,
const RingElement * g,
mpz_srcptr m,
mpz_srcptr n )

Chinese remainder and rational reconstruction interface routines

Definition at line 14 of file cra.cpp.

18{
19 // Assumption: f and g are either in ZZ, or in a polynomial ring whose coeff
20 // ring is ZZ. The output is a ring element in the same ring.
21
22 const Ring *Rf = f->get_ring();
23 const Ring *Rg = g->get_ring();
24 if (Rf != Rg)
25 {
26 ERROR("expected same ring");
27 return nullptr;
28 }
29 const PolyRing *P = Rf->cast_to_PolyRing();
30 if (P == nullptr)
31 {
32 // check whether Rf is ZZ. If not, error.
33 if (!Rf->is_ZZ())
34 {
35 ERROR("expected ZZ, or polynomial ring over ZZ");
36 return nullptr;
37 }
38 ERROR("not implemented yet");
39 return nullptr;
40 }
41 else
42 {
43 const Ring *K = P->getCoefficientRing();
44 if (K->is_ZZ())
45 {
46 ring_elem rf = f->get_value();
47 ring_elem rg = g->get_value();
48 ring_elem result = ChineseRemainder::CRA(P, rf, rg, m, n);
49 return RingElement::make_raw(Rf, result);
50 }
51 else
52 {
53 ERROR("expected coefficient ring to be ZZ");
54 return nullptr;
55 }
56 }
57 ERROR("not written yet");
58 return nullptr;
59}
static ring_elem CRA(const PolyRing *R, const ring_elem f, const ring_elem g, mpz_srcptr um, mpz_srcptr vn, mpz_srcptr mn)
Definition cra.cpp:53
Concrete PolyRingFlat subclass implementing ordinary commutative polynomial rings K[x_1,...
Definition poly.hpp:64
const Ring * getCoefficientRing() const
Definition polyring.hpp:200
virtual bool is_ZZ() const
Definition ring.hpp:171
virtual const PolyRing * cast_to_PolyRing() const
Definition ring.hpp:245
ring_elem get_value() const
Definition relem.hpp:79
static RingElement * make_raw(const Ring *R, ring_elem f)
Definition relem.cpp:20
const Ring * get_ring() const
Definition relem.hpp:81
xxx xxx xxx
Definition ring.hpp:102
const int ERROR
Definition m2-mem.cpp:55
VALGRIND_MAKE_MEM_DEFINED & result(result)

References Ring::cast_to_PolyRing(), ChineseRemainder::CRA(), ERROR, RingElement::get_ring(), RingElement::get_value(), PolynomialRing::getCoefficientRing(), Ring::is_ZZ(), RingElement::make_raw(), and result().