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

◆ convertToFactory() [1/2]

CanonicalForm convertToFactory ( const RingElement & g,
bool inExtension )
static

Definition at line 418 of file factory.cpp.

419{
420 const Ring *R = g.get_ring();
422 if (P == nullptr)
423 {
424 ERROR("expected a polynomial ring");
425 return 0;
426 }
427 const int n = P->n_vars();
428 const Monoid *M = P->getMonoid();
430 struct enter_factory foo(P);
431 if (foo.mode == modeError) return 0;
432 CanonicalForm f = 0;
433 for (Nterm *t = g.get_value(); t != nullptr; t = t->next)
434 {
435 int coef = 0;
436 M->to_varpower(t->monom, vp);
437 if (foo.mode == modeZn)
438 {
439 std::pair<bool, long> res = foo.Zn->coerceToLongInteger(t->coeff);
440 assert(res.first);
441 coef = static_cast<int>(res.second);
442 }
443 CanonicalForm m =
444 (foo.mode == modeZn
445 ? CanonicalForm(coef)
446 : foo.mode == modeGF
447 ? convertGFToFactory(t->coeff, P)
448 : foo.mode == modeZZ
449 ? convertToFactory(t->coeff.get_mpz())
450 : foo.mode == modeQQ
452 mpq_numref(MPQ_VAL(t->coeff))) /
454 mpq_denref(MPQ_VAL(t->coeff))))
455 : CanonicalForm(0) // shouldn't happen
456 );
457 for (index_varpower l = vp.data(); l.valid(); ++l)
458 {
459 int index = 1 +
460#if REVERSE_VARIABLES
461 (n - 1) -
462#endif
463 l.var();
464 m *= power(index == 1 && inExtension ? algebraicElement_Fac
465 : Variable(index),
466 l.exponent());
467 }
468 f += m;
469 }
470 return f;
471}
ExponentListIterator< int, true > index_varpower
Engine-side commutative monomial monoid: variable names, ordering, multidegree machinery,...
Definition monoid.hpp:89
virtual const Monoid * getMonoid() const
Definition polyring.hpp:282
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
ring_elem get_value() const
Definition relem.hpp:79
const Ring * get_ring() const
Definition relem.hpp:81
xxx xxx xxx
Definition ring.hpp:102
@ modeQQ
Definition factory.cpp:45
@ modeGF
Definition factory.cpp:48
@ modeZZ
Definition factory.cpp:46
@ modeZn
Definition factory.cpp:47
@ modeError
Definition factory.cpp:44
static CanonicalForm convertToFactory(mpz_srcptr p)
Definition factory.cpp:312
static CanonicalForm convertGFToFactory(const std::vector< long > &repr)
Definition factory.cpp:370
const int ERROR
Definition m2-mem.cpp:55
typename std::vector< T, gc_allocator< T > > gc_vector
a version of the STL vector, which allocates its backing memory with gc.
Definition newdelete.hpp:76
#define MPQ_VAL(f)
Definition ringelem.hpp:206
Singly linked-list node carrying one term of a polynomial-ring element.
Definition ringelem.hpp:156

References Ring::cast_to_PolynomialRing(), convertGFToFactory(), convertToFactory(), ERROR, RingElement::get_ring(), RingElement::get_value(), PolynomialRing::getMonoid(), enter_factory::mode, modeError, modeGF, modeQQ, modeZn, modeZZ, MPQ_VAL, and PolynomialRing::n_vars().