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

◆ eval()

ring_elem FreeAlgebra::eval ( const RingMap * map,
const Poly & f,
int first_var ) const

Definition at line 731 of file FreeAlgebra.cpp.

734{
735 // map: R --> S, this = R.
736 // f is an element in R
737 // return an element of S - we don't know anything about S
738
739 // plan: do it as in polyring:
740 // cast f to a Poly
741 // loop through the terms of f
742 // for each term: call map->eval_term, need varpower monomial here.
743 // add to a heap object
744 // return value of the heap object
745
746 const Ring* target = map->get_ring();
747 SumCollector *H = target->make_SumCollector();
748
749 std::vector<int> vp;
750 for (auto i = f.cbegin(); i != f.cend(); ++i)
751 {
752 vp.clear();
753 monoid().getMonomialReversed(i.monom(), vp);
754 ring_elem g = map->eval_term(coefficientRing(), i.coeff(), vp.data(), first_var, numVars());
755 H->add(g);
756 }
757 ring_elem result = H->getValue();
758 return result;
759}
const Ring * coefficientRing() const
int numVars() const
const FreeMonoid & monoid() const
void getMonomialReversed(Monom monom, std::vector< int > &result) const
virtual SumCollector * make_SumCollector() const
Definition ring.cpp:486
const Ring * get_ring() const
Definition ringmap.hpp:111
ring_elem eval_term(const Ring *coeff_ring, const ring_elem coeff, const int *vp, int first_var, int nvars_in_source) const
Definition ringmap.cpp:140
virtual ring_elem getValue()=0
virtual void add(ring_elem f)=0
VALGRIND_MAKE_MEM_DEFINED & result(result)

References SumCollector::add(), coefficientRing(), RingMap::eval_term(), RingMap::get_ring(), FreeMonoid::getMonomialReversed(), SumCollector::getValue(), Ring::make_SumCollector(), monoid(), numVars(), and result().

Referenced by M2FreeAlgebra::eval().