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

◆ IM2_RingElement_term()

const RingElement * IM2_RingElement_term ( const Ring * R,
const RingElement * a,
const EngineMonomial * m )

Definition at line 529 of file ringelement.cpp.

535{
536 try {
538 if (P != nullptr)
539 {
540 int nvars0 = P->n_vars();
542 if (K != nullptr && K != P->getCoefficients()) nvars0 -= K->n_vars();
543 exponents_t exp = newarray_atomic(int, nvars0);
544 varpower::to_expvector(nvars0, m->ints(), exp);
545 ring_elem val = P->make_logical_term(a->get_ring(), a->get_value(), exp);
546 return RingElement::make_raw(R,val);
547 }
548 auto Q = dynamic_cast<const M2FreeAlgebraOrQuotient *>(R);
549 if (Q != nullptr)
550 {
551 if (Q->coefficientRing() != a->get_ring())
552 {
553 ERROR("wrong coefficient ring");
554 return nullptr;
555 }
556 return RingElement::make_raw(Q,
557 Q->makeTerm(a->get_value(),
558 m->ints()));
559 }
560 ERROR("requires a polynomial ring");
561 return nullptr;
562 }
563 catch (exc::engine_error& e) {
564 ERROR(e.what());
565 return nullptr;
566 }
567}
exponents::Exponents exponents_t
static void to_expvector(int n, ConstExponents a, exponents::Exponents result)
Abstract Ring subclass that lifts either a FreeAlgebra or a FreeAlgebraQuotient into the engine's Rin...
virtual const Ring * getCoefficients() const
Definition polyring.hpp:277
virtual ring_elem make_logical_term(const Ring *coeffR, const ring_elem a, const_exponents exp) const =0
int n_vars() const
Definition polyring.hpp:196
Abstract base for the engine's polynomial-ring hierarchy.
Definition polyring.hpp:96
virtual const PolynomialRing * cast_to_PolynomialRing() const
Definition ring.hpp:243
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
const int ERROR
Definition m2-mem.cpp:55
const mpreal exp(const mpreal &x, mp_rnd_t r=mpreal::get_default_rnd())
Definition mpreal.h:2298
#define newarray_atomic(T, len)
Definition newdelete.hpp:91

References Ring::cast_to_PolynomialRing(), ERROR, RingElement::get_ring(), RingElement::get_value(), PolynomialRing::getCoefficients(), EngineMonomial::ints(), PolynomialRing::make_logical_term(), RingElement::make_raw(), PolynomialRing::n_vars(), newarray_atomic, and ExponentList< int, true >::to_expvector().