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

◆ gb_geo_reduce()

void GB_comp::gb_geo_reduce ( gbvector *& f,
gbvector *& fsyz )
private

Definition at line 463 of file gb-homog2.cpp.

464{
465 gbvector head;
466 gbvector *result = &head;
467 result->next = nullptr;
468
469 exponents_t div_totalexp = newarray_atomic(int, _M->n_vars());
470 int count = 0;
471
472 gbvectorHeap fb(_GR, _F);
473 gbvectorHeap fsyzb(_GR, _Fsyz);
474 fb.add(f);
475 fsyzb.add(fsyz);
476 const gbvector *lead;
477 while ((lead = fb.get_lead_term()) != nullptr)
478 {
479 Bag *b;
480 _GR->gbvector_get_lead_exponents(_F, lead, div_totalexp);
481 if (originalR->is_quotient_ring() &&
482 originalR->get_quotient_monomials()->search_expvector(div_totalexp,
483 b))
484 {
485 const gbvector *g = originalR->quotient_gbvector(b->basis_elem());
486 _GR->reduce_lead_term_heap(_F,
487 _Fsyz,
488 lead,
489 div_totalexp, // are these two needed
490 head.next,
491 fb,
492 fsyzb,
493 g,
494 nullptr);
495 count++;
496 }
497 else if (_monideals[lead->comp]->mi_search->search_expvector(div_totalexp,
498 b))
499 {
500 gb_elem *q = reinterpret_cast<gb_elem *>(b->basis_ptr());
501 _GR->reduce_lead_term_heap(_F,
502 _Fsyz,
503 lead,
504 div_totalexp,
505 head.next,
506 fb,
507 fsyzb,
508 q->f,
509 q->fsyz);
510 count++;
511 }
512 else
513 {
514 result->next = fb.remove_lead_term();
515 result = result->next;
516 result->next = nullptr;
517 }
518 }
519
520 if (M2_gbTrace >= 4)
521 {
522 buffer o;
523 o << "." << count;
524 emit_wrapped(o.str());
525 }
526 f = head.next;
527
528 fsyz = fsyzb.value();
529 freemem(div_totalexp);
530}
exponents::Exponents exponents_t
const FreeModule * _Fsyz
Definition gb-homog2.hpp:74
const Monoid * _M
Definition gb-homog2.hpp:70
const FreeModule * _F
Definition gb-homog2.hpp:73
GBRing * _GR
Definition gb-homog2.hpp:68
const PolynomialRing * originalR
Definition gb-homog2.hpp:67
char * str()
Definition buffer.hpp:72
int basis_elem() const
Definition int-bag.hpp:66
void * basis_ptr() const
Definition int-bag.hpp:67
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_wrapped(const char *s)
Definition text-io.cpp:27

References _F, _Fsyz, _GR, _M, gbvectorHeap::add(), int_bag::basis_elem(), int_bag::basis_ptr(), gbvector::comp, emit_wrapped(), gb_elem::f, freemem(), gb_elem::fsyz, gbvectorHeap::get_lead_term(), M2_gbTrace, newarray_atomic, gbvector::next, originalR, gbvectorHeap::remove_lead_term(), result(), buffer::str(), and gbvectorHeap::value().

Referenced by gb_reduce().