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

◆ make_logical_term()

ring_elem PolyRing::make_logical_term ( const Ring * coeffR,
const ring_elem a,
const_exponents exp ) const
virtual

Definition at line 1882 of file poly.cpp.

1885{
1886 const PolynomialRing *logicalK = coeffR->cast_to_PolynomialRing();
1887
1888 int nvars0 = n_vars();
1889 if (K_ == coeffR)
1890 {
1891 monomial m = M_->make_one();
1892 M_->from_expvector(exp0, m);
1893 return make_flat_term(a, m);
1894 }
1895 if (logicalK == nullptr)
1896 {
1897 ERROR("expected actual coefficient ring");
1898 return from_long(0);
1899 }
1900 nvars0 -= logicalK->n_vars();
1901
1902 Nterm head;
1903 Nterm *inresult = &head;
1904 exponents_t exp = newarray_atomic(int, M_->n_vars());
1905 exponents::copy(nvars0, exp0, exp); // Sets the first part of exp
1906 for (Nterm& f : a)
1907 {
1908 Nterm *t = new_term();
1909 inresult->next = t;
1910 inresult = t;
1911 t->coeff = f.coeff;
1912 logicalK->getMonoid()->to_expvector(f.monom, exp + nvars0);
1913 M_->from_expvector(exp, t->monom);
1914 }
1915 inresult->next = nullptr;
1916 return head.next;
1917}
exponents::Exponents exponents_t
static void copy(int nvars, ConstExponents a, Exponents result)
void to_expvector(const_monomial m, exponents_t result_exp) const
Definition monoid.cpp:747
virtual ring_elem from_long(long n) const
Definition poly.cpp:169
virtual ring_elem make_flat_term(const ring_elem a, const_monomial m) const
Definition poly.cpp:1965
Nterm * new_term() const
Definition poly.cpp:146
const Ring * K_
Definition polyring.hpp:123
virtual const Monoid * getMonoid() const
Definition polyring.hpp:282
const Monoid * M_
Definition polyring.hpp:124
int n_vars() const
Definition polyring.hpp:196
virtual const PolynomialRing * cast_to_PolynomialRing() const
Definition ring.hpp:243
#define monomial
Definition gb-toric.cpp:11
const int ERROR
Definition m2-mem.cpp:55
const mpreal exp(const mpreal &x, mp_rnd_t r=mpreal::get_default_rnd())
Definition mpreal.h:2298
#define newarray_atomic(T, len)
Definition newdelete.hpp:91
Nterm * next
Definition ringelem.hpp:157
ring_elem coeff
Definition ringelem.hpp:158
int monom[1]
Definition ringelem.hpp:160

References Ring::cast_to_PolynomialRing(), Nterm::coeff, ExponentVector< int, true >::copy(), ERROR, from_long(), PolynomialRing::getMonoid(), PolynomialRing::K_, PolynomialRing::M_, make_flat_term(), Nterm::monom, monomial, PolynomialRing::n_vars(), new_term(), newarray_atomic, Nterm::next, PolynomialRing::PolynomialRing(), Ring::Ring(), and Monoid::to_expvector().

Referenced by promote().