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

◆ mult_by_term()

ring_elem WeylAlgebra::mult_by_term ( const ring_elem f,
const ring_elem c,
const_monomial m ) const
virtual

Reimplemented from PolyRing.

Definition at line 420 of file weylalg.cpp.

424{
425 int *top_derivative = newarray_atomic(int, _nderivatives);
426 int *current_derivative = newarray_atomic_clear(int, _nderivatives);
428 polyheap result(this);
429
430 M_->to_expvector(m, expf);
431 extractDerivativePart(expf, top_derivative);
432 // Loop over each current_derivative <= top_derivative.
433 do
434 {
435 ring_elem d = multinomial(c, top_derivative, current_derivative);
436 Nterm *h = weyl_diff(d, expf, current_derivative, f);
437 K_->remove(d);
438 result.add(h);
439 }
440 while (increment(current_derivative, top_derivative));
441
442 freemem(expf);
443 freemem(top_derivative);
444 freemem(current_derivative);
445 return result.value();
446}
exponents::Exponents exponents_t
const Ring * K_
Definition polyring.hpp:123
const Monoid * M_
Definition polyring.hpp:124
ring_elem multinomial(const ring_elem a, const_exponents exptop, const_exponents expbottom) const
void extractDerivativePart(const_exponents exp, int *result) const
Definition weylalg.cpp:290
int _nderivatives
Definition weylalg.hpp:62
Nterm * weyl_diff(const ring_elem c, const_exponents expf, const int *derivatives, const Nterm *g) const
Definition weylalg.cpp:339
bool increment(int *current_derivative, const int *top_derivative) const
Definition weylalg.cpp:273
void freemem(void *s)
Definition m2-mem.cpp:103
VALGRIND_MAKE_MEM_DEFINED & result(result)
#define newarray_atomic_clear(T, len)
Definition newdelete.hpp:93
#define newarray_atomic(T, len)
Definition newdelete.hpp:91

References _nderivatives, extractDerivativePart(), freemem(), increment(), PolynomialRing::K_, PolynomialRing::M_, multinomial(), newarray_atomic, newarray_atomic_clear, PolynomialRing::nvars_, result(), and weyl_diff().