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

◆ gb_geo_reduce()

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

Definition at line 397 of file res-a2-gb.cpp.

398{
399 gbvector head;
400 gbvector *result = &head;
401 result->next = nullptr;
402
403 exponents_t div_totalexp = newarray_atomic(int, M->n_vars());
404 int count = 0;
405
406 gbvectorHeap fb(GR, F);
407 gbvectorHeap fsyzb(GR, Fsyz);
408 fb.add(f);
409 fsyzb.add(fsyz);
410 const gbvector *lead;
411 while ((lead = fb.get_lead_term()) != nullptr)
412 {
413 Bag *b;
414 GR->gbvector_get_lead_exponents(F, lead, div_totalexp);
415 if (originalR->is_quotient_ring() &&
416 originalR->get_quotient_monomials()->search_expvector(div_totalexp,
417 b))
418 {
419 const gbvector *g = originalR->quotient_gbvector(b->basis_elem());
420 GR->reduce_lead_term_heap(F,
421 Fsyz,
422 lead,
423 div_totalexp, // are these two needed
424 head.next,
425 fb,
426 fsyzb,
427 g,
428 nullptr);
429 count++;
430 }
431 else if (monideals[lead->comp]->mi_search->search_expvector(div_totalexp,
432 b))
433 {
434 gb_elem *q = reinterpret_cast<gb_elem *>(b->basis_ptr());
435 GR->reduce_lead_term_heap(
436 F, Fsyz, lead, div_totalexp, head.next, fb, fsyzb, q->f, q->fsyz);
437 count++;
438 }
439 else
440 {
441 result->next = fb.remove_lead_term();
442 result = result->next;
443 result->next = nullptr;
444 }
445 }
446
447 if (M2_gbTrace >= 4)
448 {
449 buffer o;
450 o << "." << count;
451 emit_wrapped(o.str());
452 }
453 f = head.next;
454
455 fsyz = fsyzb.value();
456 freemem(div_totalexp);
457}
exponents::Exponents exponents_t
char * str()
Definition buffer.hpp:72
FreeModule * Fsyz
Definition res-a2.hpp:121
FreeModule * F
Definition res-a2.hpp:120
const Monoid * M
Definition res-a2.hpp:115
const PolynomialRing * originalR
Definition res-a2.hpp:113
GBRing * GR
Definition res-a2.hpp:114
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 gbvectorHeap::add(), int_bag::basis_elem(), int_bag::basis_ptr(), gbvector::comp, emit_wrapped(), 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(), buffer::str(), and gbvectorHeap::value().

Referenced by gb_reduce().