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

◆ mult()

ring_elem SchurRing2::mult ( const ring_elem f,
const ring_elem g ) const
virtual

Implements Ring.

Reimplemented in SchurSnRing.

Definition at line 616 of file schur2.cpp.

617{
618 ring_elem resultRE;
619 const schur_poly *f1 = f.get_schur_poly();
620 const schur_poly *g1 = g.get_schur_poly();
621 ring_elem a;
622 if (get_scalar(f1, a))
623 {
624 return ring_elem(mult_by_coefficient(a, g1));
625 // In this case, do a simple multiplication
626 }
627 else if (get_scalar(g1, a))
628 {
629 return ring_elem(mult_by_coefficient(a, f1));
630 }
631 else
632 {
633 // use the poly heap
634 schur_poly_heap H(this);
635 for (schur_poly::iterator i = f1->begin(); i != f1->end(); ++i)
636 for (schur_poly::iterator j = g1->begin(); j != g1->end(); ++j)
637 {
638 ring_elem c =
639 coefficientRing->mult(i.getCoefficient(), j.getCoefficient());
640 ring_elem r = const_cast<SchurRing2 *>(this)->mult_terms(
641 i.getMonomial(), j.getMonomial());
642 H.add(ring_elem(mult_by_coefficient(c, r.get_schur_poly())));
643 }
644 return H.value();
645 }
646}
bool get_scalar(const schur_poly *f, ring_elem &result) const
Definition schur2.cpp:273
ring_elem mult_terms(const_schur_partition a, const_schur_partition b)
Definition schur2.cpp:867
schur_poly * mult_by_coefficient(ring_elem a, const schur_poly *f) const
Definition schur2.cpp:600
const Ring * coefficientRing
Definition schur2.hpp:154
schur_poly_iterator iterator
Definition schur2.hpp:90
iterator begin() const
Definition schur2.hpp:128
iterator end() const
Definition schur2.hpp:132
const schur_poly * get_schur_poly() const
Definition ringelem.hpp:137

References schur_poly_heap::add(), schur_poly::begin(), coefficientRing, schur_poly::end(), get_scalar(), ring_elem::get_schur_poly(), mult_by_coefficient(), mult_terms(), SchurRing2(), and schur_poly_heap::value().

Referenced by SchurSnRing::mult(), and SchurSnRing::tensor_mult().