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

◆ denseCancelFromSparse() [2/2]

template<typename RingType>
void ConcreteVectorArithmetic< RingType >::denseCancelFromSparse ( ElementArray & dense,
const ElementArray & sparse,
const Range< const int > & comps,
ElementArray & result_multiplier ) const
inline

Definition at line 254 of file VectorArithmetic.hpp.

258 {
259 // ASSUMPTION: svec[0] == 1, comps.size() >= 1
260 auto& dvec = * elementArray(dense);
261 auto& svec = * elementArray(sparse);
263
265 mRing->init(b);
266 mRing->set(b, dvec[comps[0]]);
267
269 mRing->init(one);
270 mRing->set_from_long(one, 1);
271 if (not mRing->is_equal(svec[0], one)) // should be minus_one
272 mRing->negate(b, b);
273
274 for (int i=1; i < comps.size(); ++i)
275 {
276 mRing->subtract_multiple(dvec[comps[i]], b, svec[i]);
277 mStats.incrementNumAdditions();
278 }
279 mRing->set_zero(dvec[comps[0]]);
280
281 mRing->negate(b, b);
282 mults.push_back(b); // this transfers ownership of b.
283 }
size_t size(const ElementArray &coeffs) const
Linear Algebra /////.
VectorArithmeticStats mStats
ElementArrayContainer * elementArray(const ElementArray &f) const
typename RingType::ElementType FieldElement

References dvec(), elementArray(), mRing, mStats, and Range< T >::size().