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

◆ create_quotient() [3/3]

PolynomialRing * PolynomialRing::create_quotient ( const PolynomialRing * R,
VECTOR(Nterm *) & elems )
staticprotected

Definition at line 79 of file polyring.cpp.

83{
84 // Here are the cases:
85 // (1) R is a polynomial ring over a basic field
86 // (2) R is a polynomial ring over ZZ
87 // (3) R is a polynomial ring over QQ
88
89 // case (1), (2): PolyRingQuotient
90 // case (3): PolyQQ
91
92 PolynomialRing *result = nullptr;
94
95 QRingInfo *qrinfo = nullptr;
96 switch (coeff_type)
97 {
98 case COEFF_BASIC:
99 qrinfo = new QRingInfo_field_basic(R->getNumeratorRing(), elems);
100 result = new PolyRingQuotient;
101 break;
102 case COEFF_QQ:
103 qrinfo = new QRingInfo_field_QQ(R->getNumeratorRing(), elems);
104 result = new PolyRingQuotient;
105 break;
106 case COEFF_ZZ:
107 QRingInfo_ZZ *qrinfoZZ = new QRingInfo_ZZ(R->getNumeratorRing(), elems);
108 qrinfo = qrinfoZZ;
109 result = new PolyRingQuotient;
111 result->ZZ_quotient_value_ = qrinfoZZ->ZZ_quotient_value();
112 break;
113 }
114
115 result->initialize_ring(
117
118 result->initialize_PolynomialRing(R->getCoefficients(),
119 R->getMonoid(),
120 R->getNumeratorRing(),
121 R->getAmbientRing(),
122 R->getDenominatorRing());
123
124 result->gb_ring_ = R->get_gb_ring();
125 result->setQuotientInfo(qrinfo); // Also sets graded-ness
126
127 result->zeroV = result->from_long(0);
128 result->oneV = result->from_long(1);
129 result->minus_oneV = result->from_long(-1);
130
131 return result;
132}
virtual GBRing * get_gb_ring() const
Definition polyring.hpp:276
virtual const PolynomialRing * getAmbientRing() const
Definition polyring.hpp:260
virtual const Monoid * getMonoid() const
Definition polyring.hpp:282
virtual const Ring * getCoefficients() const
Definition polyring.hpp:277
virtual const PolyRing * getNumeratorRing() const
Definition polyring.hpp:259
CoefficientType coefficient_type() const
Definition polyring.hpp:191
virtual const Ring * getDenominatorRing() const
Definition polyring.hpp:266
bool is_ZZ_quotient() const
Definition qring.hpp:259
bool is_ZZ_quotient_
Definition qring.hpp:246
ring_elem ZZ_quotient_value() const
Definition qring.hpp:260
long characteristic() const
Definition ring.hpp:159
CoefficientType
Definition ring.hpp:222
@ COEFF_QQ
Definition ring.hpp:222
@ COEFF_ZZ
Definition ring.hpp:222
@ COEFF_BASIC
Definition ring.hpp:222
const PolynomialRing * get_degree_ring() const
Definition ring.hpp:161
const std::vector< int > & get_heft_vector() const
Definition ring.hpp:162
VALGRIND_MAKE_MEM_DEFINED & result(result)

References Ring::characteristic(), Ring::COEFF_BASIC, Ring::COEFF_QQ, Ring::COEFF_ZZ, coefficient_type(), Ring::get_degree_ring(), get_gb_ring(), Ring::get_heft_vector(), getAmbientRing(), getCoefficients(), getDenominatorRing(), getMonoid(), getNumeratorRing(), QRingInfo_ZZ::is_ZZ_quotient(), PolynomialRing(), result(), and QRingInfo_ZZ::ZZ_quotient_value().

Referenced by create_quotient(), create_quotient(), IM2_Ring_quotient(), and IM2_Ring_quotient1().