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

◆ eval()

ring_elem LocalRing::eval ( const RingMap * map,
const ring_elem f,
int first_var ) const
virtual

Implements Ring.

Definition at line 650 of file localring.cpp.

653{
654 ring_elem top, bottom, result;
655 const Ring *S = map->get_ring();
656 const local_elem *f = a.get_local_elem();
657 top = mRing->eval(map, f->numer, first_var);
658 if (S->is_zero(top)) return top;
659 bottom = mRing->eval(map, f->denom, first_var);
660 if (S->is_unit(bottom))
661 result = S->divide(top, bottom);
662 else
663 {
664 throw exc::engine_error("attempt to divide by a non-unit");
665 }
666 S->remove(top);
667 S->remove(bottom);
668 return result;
669}
const PolyRing * mRing
Definition localring.hpp:69
virtual void remove(ring_elem &f) const =0
virtual ring_elem divide(const ring_elem f, const ring_elem g) const =0
virtual bool is_unit(const ring_elem f) const =0
virtual bool is_zero(const ring_elem f) const =0
Ring()
Definition ring.hpp:136
const Ring * get_ring() const
Definition ringmap.hpp:111
VALGRIND_MAKE_MEM_DEFINED & result(result)
ring_elem numer
Definition localring.hpp:48
ring_elem denom
Definition localring.hpp:49
const local_elem * get_local_elem() const
Definition ringelem.hpp:136

References local_elem::denom, Ring::divide(), ring_elem::get_local_elem(), RingMap::get_ring(), Ring::is_unit(), Ring::is_zero(), mRing, local_elem::numer, Ring::remove(), result(), and Ring::Ring().