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

◆ rawTowerTranslatePoly()

const RingElement * rawTowerTranslatePoly ( const Ring * newRing,
const RingElement * F )

Definition at line 534 of file tower.cpp.

536{
537 // either: F is an element in a Tower, or is an element in a PolynomialRing.
538 // In both cases: the number of variables and the characteristic should
539 // be the same.
541 const Tower *T = newRing->cast_to_Tower();
542 if (P != nullptr && T != nullptr)
543 {
544 if (P->n_vars() != T->n_vars())
545 {
546 ERROR("expected rings with the same number of variables");
547 return nullptr;
548 }
549 if (P->characteristic() != T->characteristic())
550 {
551 ERROR("expected rings with the same characteristic");
552 return nullptr;
553 }
554 ring_elem a = T->translate(P, F->get_value());
555 return RingElement::make_raw(T, a);
556 }
557#if 0
558 P = newRing->cast_to_PolynomialRing();
559 T = F->get_ring()->cast_to_Tower();
560 if (P != 0 && T != 0)
561 {
562 ring_elem a = T->translateFromTower(P, F->get_value());
563 return RingElement::make_raw(P, a);
564 }
565#endif
566 ERROR("expected an element of a TowerRing or a PolynomialRing");
567 return nullptr;
568}
int n_vars() const
Definition polyring.hpp:196
Abstract base for the engine's polynomial-ring hierarchy.
Definition polyring.hpp:96
virtual const PolynomialRing * cast_to_PolynomialRing() const
Definition ring.hpp:243
long characteristic() const
Definition ring.hpp:159
virtual const Tower * cast_to_Tower() const
Definition ring.hpp:241
ring_elem get_value() const
Definition relem.hpp:79
static RingElement * make_raw(const Ring *R, ring_elem f)
Definition relem.cpp:20
const Ring * get_ring() const
Definition relem.hpp:81
Ring subclass for tower polynomial rings (Z/p)[x_0][x_1]...[x_{n-1}] modulo a chain of algebraic exte...
Definition tower.hpp:59
const int ERROR
Definition m2-mem.cpp:55
#define T
Definition table.c:13

References Ring::cast_to_PolynomialRing(), Ring::cast_to_Tower(), Ring::characteristic(), ERROR, RingElement::get_ring(), RingElement::get_value(), RingElement::make_raw(), PolynomialRing::n_vars(), and T.