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

◆ is_homogeneous()

bool FreeAlgebra::is_homogeneous ( const Poly & f) const

Definition at line 815 of file FreeAlgebra.cpp.

816{
817 bool result = true;
818 if (f.numTerms() <= 1) return true;
820 monomial degf = degreeMonoid().make_one();
821 auto i = f.cbegin();
822 auto end = f.cend();
823 monoid().multi_degree(i.monom(), degf); // sets degf.
824 for (++i; i != end; ++i)
825 {
826 monoid().multi_degree(i.monom(), e);
827 if (not degreeMonoid().is_equal(e, degf))
828 {
829 result = false;
830 break;
831 }
832 }
833 degreeMonoid().remove(e);
834 degreeMonoid().remove(degf);
835 return result;
836}
const Monoid & degreeMonoid() const
const FreeMonoid & monoid() const
bool is_equal(const Poly &f, const Poly &g) const
void multi_degree(const Monom &m, monomial already_allocated_degree_vector) const
monomial make_one() const
Definition monoid.cpp:455
void remove(monomial d) const
Definition monoid.cpp:462
#define monomial
Definition gb-toric.cpp:11
VALGRIND_MAKE_MEM_DEFINED & result(result)
TermIterator< Nterm > end(Nterm *)
Definition ringelem.cpp:5

References degreeMonoid(), end(), is_equal(), Monoid::make_one(), monoid(), monomial, FreeMonoid::multi_degree(), Monoid::remove(), and result().

Referenced by M2FreeAlgebra::is_homogeneous().