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

◆ translate_gbvector_from_vec_QQ()

gbvector * PolyRing::translate_gbvector_from_vec_QQ ( const FreeModule * F,
const vec v,
ring_elem & result_denominator ) const

Definition at line 2504 of file poly.cpp.

2508{
2509 if (v == nullptr)
2510 {
2511 result_denominator = globalZZ->one();
2512 return nullptr;
2513 }
2514 GBRing *GR = get_gb_ring();
2515 result_denominator = vec_get_denominator_QQ(v);
2516 gbvectorHeap H(GR, F);
2517 gbvector head;
2518 gbvector *inresult;
2519 mpz_t a;
2520 mpz_init(a);
2521 for (vec w = v; w != nullptr; w = w->next)
2522 {
2523 inresult = &head;
2524 int comp = w->comp + 1;
2525 for (Nterm& t : w->coeff)
2526 {
2527 // make a gbvector node.
2528 mpq_srcptr b = MPQ_VAL(t.coeff);
2529 mpz_mul(a, result_denominator.get_mpz(), mpq_numref(b));
2530 mpz_divexact(a, a, mpq_denref(b));
2531 gbvector *g = GR->gbvector_term(
2532 F, globalZZ->RingZZ::from_int(a), t.monom, comp);
2533 inresult->next = g;
2534 inresult = inresult->next;
2535 }
2536 H.add(head.next);
2537 }
2538 mpz_clear(a);
2539 return H.value();
2540}
gbvector * gbvector_term(const FreeModule *F, ring_elem coeff, int comp)
Definition gbring.cpp:300
ring_elem vec_get_denominator_QQ(vec f) const
Definition poly.cpp:2450
virtual GBRing * get_gb_ring() const
Definition polyring.hpp:276
ring_elem one() const
Definition ring.hpp:357
RingZZ * globalZZ
Definition relem.cpp:13
#define MPQ_VAL(f)
Definition ringelem.hpp:206
ring_elem coeff
Definition ringelem.hpp:158
int monom[1]
Definition ringelem.hpp:160
gbvector * next
Definition gbring.hpp:80
int comp
Definition gbring.hpp:82
mpz_srcptr get_mpz() const
Definition ringelem.hpp:127

References gbvectorHeap::add(), Nterm::coeff, gbvector::comp, FreeModule, GBRing::gbvector_term(), PolynomialRing::get_gb_ring(), ring_elem::get_mpz(), globalZZ, Nterm::monom, MPQ_VAL, gbvector::next, gbvectorHeap::value(), and vec_get_denominator_QQ().

Referenced by translate_gbvector_from_vec().