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

◆ find_pairs()

void gb2_comp::find_pairs ( gb_elem * p)
private

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

199{
200 gc_vector<Bag*> elems;
201 gc_vector<int> vplcm;
202 monomial find_pairs_m = M->make_one();
203 monomial f_m = M->make_one();
204 int *find_pairs_lcm = newarray_atomic(int, M->n_vars());
205
206 GR->gbvector_get_lead_monomial(F, p->f, f_m);
207 if (GR->is_skew_commutative())
208 {
209 exponents_t find_pairs_exp = newarray_atomic(int, M->n_vars());
210 M->to_expvector(f_m, find_pairs_exp);
211
212 for (int v = 0; v < GR->n_skew_commutative_vars(); v++)
213 {
214 int w = GR->skew_variable(v);
215 if (find_pairs_exp[w] == 0) continue;
216
217 find_pairs_exp[w]++;
218 M->from_expvector(find_pairs_exp, find_pairs_lcm);
219 find_pairs_exp[w]--;
220
221 vplcm.resize(0);
222 M->to_varpower(find_pairs_lcm, vplcm);
223 s_pair *q = new_ring_pair(p, find_pairs_lcm);
224 elems.push_back(new Bag(q, vplcm));
225 }
226 freemem(find_pairs_exp);
227 }
228
229 // Add in syzygies arising from a base ring
230
231 if (originalR->is_quotient_ring())
232 {
233 for (int i = 0; i < originalR->n_quotients(); i++)
234 {
235 const Nterm *f = originalR->quotient_element(i);
236 M->lcm(f->monom, f_m, find_pairs_lcm);
237 vplcm.resize(0);
238 M->to_varpower(find_pairs_lcm, vplcm);
239 s_pair *q = new_ring_pair(p, find_pairs_lcm);
240 elems.push_back(new Bag(q, vplcm));
241 }
242 }
243
244 // Add in syzygies arising as s-pairs
245 MonomialIdeal *mi1 = monideals[p->f->comp]->mi;
246 for (Bag& a : *mi1)
247 {
248 M->from_varpower(a.monom().data(), find_pairs_m);
249 M->lcm(find_pairs_m, f_m, find_pairs_lcm);
250 vplcm.resize(0);
251 M->to_varpower(find_pairs_lcm, vplcm);
252 s_pair *q =
254 reinterpret_cast<gb_elem *>(a.basis_ptr()),
255 find_pairs_lcm);
256 elems.push_back(new Bag(q, vplcm));
257 }
258
259 // Add 'p' to the correct monideal
260 gc_vector<int> vp;
261 M->to_varpower(f_m, vp);
262 mi1->insert(new Bag(p, vp));
263
264 // Now minimalize these elements, and insert them into
265 // the proper degree.
266
267 VECTOR(Bag *) rejects;
268 MonomialIdeal *mi = new MonomialIdeal(originalR, elems, rejects, mi_stash);
269 for (auto& b : rejects)
270 {
271 s_pair *q = reinterpret_cast<s_pair *>(b->basis_ptr());
272 remove_pair(q);
273 delete b;
274 }
275
276 int is_ideal2 = (F->rank() == 1 && orig_syz == 0);
277 for (Bag& a : *mi)
278 {
279 n_pairs++;
280 s_pair *q = reinterpret_cast<s_pair *>(a.basis_ptr());
281 if (is_ideal2 && q->syz_type == SPAIR_PAIR)
282 {
283 // MES: the following line is suspect, for Schreyer orders
284 M->gcd(q->first->f->monom, q->second->f->monom, find_pairs_m);
285 if (M->is_one(find_pairs_m))
286 {
287 n_pairs_gcd++;
288 if (M2_gbTrace >= 8)
289 {
290 buffer o;
291 o << "removed pair[" << q->first->me << " " << q->second->me
292 << "]" << newline;
293 emit(o.str());
294 }
295 remove_pair(q);
296 }
297 else
298 spairs->insert(q);
299 }
300 else
301 spairs->insert(q);
302 }
303
304 delete mi;
305 // Remove the local variables
306 M->remove(find_pairs_m);
307 M->remove(f_m);
308 freemem(find_pairs_lcm);
309}
exponents::Exponents exponents_t
char * str()
Definition buffer.hpp:72
int n_pairs
Definition res-a2.hpp:146
s_pair * new_ring_pair(gb_elem *p, const int *lcm)
void remove_pair(s_pair *&p)
Definition res-a2-gb.cpp:90
int orig_syz
Definition res-a2.hpp:157
stash * mi_stash
Definition res-a2.hpp:118
FreeModule * F
Definition res-a2.hpp:120
s_pair_heap * spairs
Definition res-a2.hpp:129
int n_pairs_gcd
Definition res-a2.hpp:154
const Monoid * M
Definition res-a2.hpp:115
const PolynomialRing * originalR
Definition res-a2.hpp:113
GBRing * GR
Definition res-a2.hpp:114
s_pair * new_s_pair(gb_elem *p, gb_elem *q, const int *lcm)
const int SPAIR_PAIR
Definition comp-gb.hpp:56
#define monomial
Definition gb-toric.cpp:11
int p
int_bag Bag
Definition int-bag.hpp:70
void freemem(void *s)
Definition m2-mem.cpp:103
char newline[]
Definition m2-types.cpp:49
int M2_gbTrace
Definition m2-types.cpp:52
typename std::vector< T, gc_allocator< T > > gc_vector
a version of the STL vector, which allocates its backing memory with gc.
Definition newdelete.hpp:76
#define VECTOR(T)
Definition newdelete.hpp:78
#define newarray_atomic(T, len)
Definition newdelete.hpp:91
int monom[1]
Definition ringelem.hpp:160
gbvector * f
Definition spair.hpp:58
int me
Definition spair.hpp:62
int monom[1]
Definition gbring.hpp:83
gb_elem * second
Definition spair.hpp:97
int syz_type
Definition spair.hpp:92
gb_elem * first
Definition spair.hpp:96
void emit(const char *s)
Definition text-io.cpp:41

References emit(), F, gb_elem::f, s_pair::first, freemem(), GR, MonomialIdeal::insert(), M, M2_gbTrace, gb_elem::me, MonomialIdeal::mi, mi_stash, gbvector::monom, Nterm::monom, monomial, n_pairs, n_pairs_gcd, new_ring_pair(), new_s_pair(), newarray_atomic, newline, orig_syz, originalR, p, remove_pair(), s_pair::second, SPAIR_PAIR, spairs, buffer::str(), s_pair::syz_type, and VECTOR.

Referenced by calc_gb().