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

◆ IM2_Ring_frac()

const Ring * IM2_Ring_frac ( const Ring * R)

Definition at line 310 of file ring.cpp.

311{
312 try
313 {
314 if (R == globalZZ) return globalQQ;
315 const PolyRingFlat *P = R->cast_to_PolyRingFlat();
316 if (P == nullptr)
317 {
318 ERROR("expected polynomial ring");
319 return nullptr;
320 }
321 if (P->getMonoid()->numNonTermOrderVariables() > 0)
322 {
323 ERROR(
324 "cannot currently make fraction field over a polynomial ring "
325 "with a non-global monomial order");
326 return nullptr;
327 }
328 if (P->getMonoid()->numInvertibleVariables() > 0)
329 {
330 ERROR(
331 "cannot currently make fraction field over a polynomial ring "
332 "with Laurent variables, i.e. Inverses=>true set");
333 return nullptr;
334 }
335 if (R->get_precision() > 0)
336 {
337 ERROR("cannot make fraction field over approximate field base");
338 return nullptr;
339 }
340 if (P->getCoefficients()->cast_to_FractionField() != nullptr)
341 {
342 ERROR(
343 "fraction fields over other fraction fields not yet implemented");
344 return nullptr;
345 }
346 if (P->getCoefficients()->cast_to_LocalRing() != nullptr)
347 {
348 ERROR("fraction fields over other local rings not yet implemented");
349 return nullptr;
350 }
351 return FractionField::create(P);
352 } catch (const exc::engine_error& e)
353 {
354 ERROR(e.what());
355 return nullptr;
356 }
357}
const RingQQ * globalQQ
Definition aring.cpp:24
static FractionField * create(const PolyRingFlat *R)
Definition frac.cpp:55
int numNonTermOrderVariables() const
Definition monoid.hpp:190
int numInvertibleVariables() const
Definition monoid.hpp:189
PolynomialRing subclass whose elements are represented as a single flat Nterm* linked list (no fracti...
Definition polyring.hpp:466
virtual const Monoid * getMonoid() const
Definition polyring.hpp:282
virtual const Ring * getCoefficients() const
Definition polyring.hpp:277
virtual const PolyRingFlat * cast_to_PolyRingFlat() const
Definition ring.hpp:249
virtual unsigned long get_precision() const
Definition ring.cpp:438
virtual const LocalRing * cast_to_LocalRing() const
Definition ring.hpp:253
virtual const FractionField * cast_to_FractionField() const
Definition ring.hpp:251
RingZZ * globalZZ
Definition relem.cpp:13
const int ERROR
Definition m2-mem.cpp:55

References Ring::cast_to_FractionField(), Ring::cast_to_LocalRing(), Ring::cast_to_PolyRingFlat(), FractionField::create(), ERROR, Ring::get_precision(), PolynomialRing::getCoefficients(), PolynomialRing::getMonoid(), globalQQ, globalZZ, Monoid::numInvertibleVariables(), and Monoid::numNonTermOrderVariables().