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

◆ reduce()

res2_pair * res2_comp::reduce ( res2term *& f,
res2term *& fsyz,
res2term *& pivot,
res2_pair * p )
private

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

1134{
1135 // 'lastterm' is used to append the next monomial to fsyz->syz
1138
1139 res2term *lastterm = (fsyz->next == nullptr ? fsyz : fsyz->next);
1140
1141 res2_pair *q;
1142 ring_elem rg;
1143 // Bag *b;
1144
1145 int count = 0;
1146 if (M2_gbTrace >= 4) emit_wrapped(",");
1147
1148 while (f != nullptr)
1149 {
1150 M->divide(f->monom, f->comp->syz->monom, REDUCE_mon);
1151 M->to_expvector(REDUCE_mon, REDUCE_exp);
1152 if (find_ring_divisor(REDUCE_exp, rg))
1153 {
1154 // Subtract off f, leave fsyz alone
1155 Nterm *r = rg;
1156 M->divide(f->monom, r->monom, REDUCE_mon);
1157 R->ring_subtract_multiple_to(f, f->coeff, REDUCE_mon, f->comp, rg);
1159 count++;
1160 }
1161 // else if (f->comp->mi.search_expvector(REDUCE_exp, b))
1162 else if (find_divisor(f->comp->mi, REDUCE_exp, q))
1163 {
1164 // q = (res2_pair *) (b->basis_ptr());
1165 lastterm->next = R->new_term(K->negate(f->coeff), f->monom, q);
1166 lastterm = lastterm->next;
1167 pivot = lastterm;
1169 {
1170 if (M2_gbTrace >= 4)
1171 {
1172 buffer o;
1173 o << count;
1174 emit_wrapped(o.str());
1175 }
1176 return q; // i.e. not computed yet
1177 }
1178 M->divide(f->monom, q->syz->monom, REDUCE_mon);
1179 R->subtract_multiple_to(f, f->coeff, REDUCE_mon, q->syz);
1181 count++;
1182 }
1183 else
1184 {
1185 res2term *tmp = f;
1186 f = f->next;
1187 tmp->next = nullptr;
1188 R->remove(tmp);
1189 }
1190 }
1191 if (M2_gbTrace >= 4)
1192 {
1193 buffer o;
1194 o << count;
1195 emit_wrapped(o.str());
1196 }
1197 return nullptr;
1198}
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
@ SYZ2_MAYBE_MINIMAL
@ SYZ2_S_PAIR
int monom[1]
Definition ringelem.hpp:160
MonomialIdeal * mi
res2term * syz
unsigned char syz_type
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, R, buffer::str(), res2_pair::syz, SYZ2_MAYBE_MINIMAL, SYZ2_S_PAIR, res2_pair::syz_type, and total_reduce_count.

Referenced by handle_pair(), and handle_pair_by_level().