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

◆ reduce_by_level()

res2_pair * res2_comp::reduce_by_level ( res2term *& f,
res2term *& fsyz )
private

Definition at line 1497 of file res-a0.cpp.

1502{
1503 // 'lastterm' is used to append the next monomial to fsyz->syz
1506
1507 res2term *lastterm = (fsyz->next == nullptr ? fsyz : fsyz->next);
1508
1509 res2_pair *q;
1510 ring_elem rg;
1511
1512 int count = 0;
1513 if (M2_gbTrace >= 4) emit_wrapped(",");
1514
1515 while (f != nullptr)
1516 {
1517 M->divide(f->monom, f->comp->syz->monom, REDUCE_mon);
1518 M->to_expvector(REDUCE_mon, REDUCE_exp);
1519 if (find_ring_divisor(REDUCE_exp, rg))
1520 {
1521 // Subtract off f, leave fsyz alone
1522 Nterm *r = rg;
1523 M->divide(f->monom, r->monom, REDUCE_mon);
1524 R->ring_subtract_multiple_to(f, f->coeff, REDUCE_mon, f->comp, rg);
1526 count++;
1527 }
1528 else if (find_divisor(f->comp->mi, REDUCE_exp, q))
1529 {
1530 lastterm->next = R->new_term(K->negate(f->coeff), f->monom, q);
1531 lastterm = lastterm->next;
1532 M->divide(f->monom, q->syz->monom, REDUCE_mon);
1533 R->subtract_multiple_to(f, f->coeff, REDUCE_mon, q->pivot_term);
1535 count++;
1536 }
1537 else
1538 {
1539 res2term *tmp = f;
1540 f = f->next;
1541 tmp->next = nullptr;
1542 R->remove(tmp);
1543 }
1544 }
1545 if (M2_gbTrace >= 4)
1546 {
1547 buffer o;
1548 o << count;
1549 emit_wrapped(o.str());
1550 }
1551 return nullptr;
1552}
exponents::Exponents exponents_t
char * str()
Definition buffer.hpp:72
size_t exp_size
Definition res-a0.hpp:192
int total_reduce_count
Definition res-a0.hpp:184
size_t monom_size
Definition res-a0.hpp:193
res2_poly * R
Definition res-a0.hpp:123
const Monoid * M
Definition res-a0.hpp:124
int find_ring_divisor(const int *exp, ring_elem &result) const
Definition res-a0.cpp:1048
int find_divisor(const MonomialIdeal *mi, const int *exp, res2_pair *&result)
Definition res-a0.cpp:1060
const Ring * K
Definition res-a0.hpp:125
#define monomial
Definition gb-toric.cpp:11
int M2_gbTrace
Definition m2-types.cpp:52
#define ALLOCATE_EXPONENTS(byte_len)
Definition monoid.hpp:62
#define ALLOCATE_MONOMIAL(byte_len)
Definition monoid.hpp:65
int monom[1]
Definition ringelem.hpp:160
MonomialIdeal * mi
res2term * syz
res2term * pivot_term
res2term * next
res2_pair * comp
ring_elem coeff
int monom[1]
void emit_wrapped(const char *s)
Definition text-io.cpp:27

References ALLOCATE_EXPONENTS, ALLOCATE_MONOMIAL, res2term::coeff, res2term::comp, emit_wrapped(), exp_size, find_divisor(), find_ring_divisor(), K, M, M2_gbTrace, res2_pair::mi, Nterm::monom, res2term::monom, monom_size, monomial, res2term::next, res2_pair::pivot_term, R, buffer::str(), res2_pair::syz, and total_reduce_count.

Referenced by handle_pair_by_level().