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

◆ gb_geo_reduce()

int GBinhom_comp::gb_geo_reduce ( gbvector *& f,
gbvector *& fsyz )
private

Definition at line 519 of file gb-sugarless.cpp.

520{
521 gb_elem *q;
522
523 gbvector head;
524 gbvector *result = &head;
525 result->next = nullptr;
526 exponents_t div_totalexp = newarray_atomic(int, M->n_vars());
527 int count = 0;
528
529 gbvectorHeap fb(GR, F);
530 gbvectorHeap fsyzb(GR, Fsyz);
531 fb.add(f);
532 fsyzb.add(fsyz);
533 const gbvector *lead;
534
535 while ((lead = fb.get_lead_term()) != nullptr)
536 {
537 GR->gbvector_get_lead_exponents(F, lead, div_totalexp);
538#ifdef DEVELOPMENT
539#warning "quotient ring stuff"
540#endif
541 Bag *b;
542 if (originalR->is_quotient_ring() &&
543 originalR->get_quotient_monomials()->search_expvector(div_totalexp,
544 b))
545 {
546 const gbvector *g = originalR->quotient_gbvector(b->basis_elem());
547 GR->reduce_lead_term_heap(F,
548 Fsyz,
549 lead,
550 div_totalexp, // are these two needed
551 head.next,
552 fb,
553 fsyzb,
554 g,
555 nullptr);
556 count++;
557 }
558 else if (search(div_totalexp, lead->comp, q))
559 {
560 GR->reduce_lead_term_heap(
561 F, Fsyz, lead, div_totalexp, head.next, fb, fsyzb, q->f, q->fsyz);
562 count++;
563 }
564 else
565 {
566 result->next = fb.remove_lead_term();
567 result = result->next;
568 result->next = nullptr;
569 }
570 }
571
572 if (M2_gbTrace >= 4)
573 {
574 buffer o;
575 o << "." << count;
576 emit(o.str());
577 }
578 f = head.next;
579
580 fsyz = fsyzb.value();
581 freemem(div_totalexp);
582 return 1;
583}
exponents::Exponents exponents_t
const FreeModule * Fsyz
const FreeModule * F
const Monoid * M
int search(const int *exp, int comp, gb_elem *&result)
const PolynomialRing * originalR
char * str()
Definition buffer.hpp:72
int basis_elem() const
Definition int-bag.hpp:66
int_bag Bag
Definition int-bag.hpp:70
void freemem(void *s)
Definition m2-mem.cpp:103
VALGRIND_MAKE_MEM_DEFINED & result(result)
int M2_gbTrace
Definition m2-types.cpp:52
#define newarray_atomic(T, len)
Definition newdelete.hpp:91
gbvector * fsyz
Definition spair.hpp:59
gbvector * f
Definition spair.hpp:58
gbvector * next
Definition gbring.hpp:80
int comp
Definition gbring.hpp:82
void emit(const char *s)
Definition text-io.cpp:41

References gbvectorHeap::add(), int_bag::basis_elem(), gbvector::comp, emit(), F, gb_elem::f, freemem(), Fsyz, gb_elem::fsyz, gbvectorHeap::get_lead_term(), GR, M, M2_gbTrace, newarray_atomic, gbvector::next, originalR, gbvectorHeap::remove_lead_term(), result(), search(), buffer::str(), and gbvectorHeap::value().

Referenced by gb_reduce().