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

◆ find_pairs()

void GB_comp::find_pairs ( gb_elem * p)
private

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

269{
270 gc_vector<Bag*> elems;
271 gc_vector<int> vplcm;
272 monomial find_pairs_m = _M->make_one();
273 monomial f_m = _M->make_one();
274 exponents_t find_pairs_exp = newarray_atomic(int, _M->n_vars());
275 int *find_pairs_lcm = newarray_atomic(int, _M->n_vars());
276
277 _GR->gbvector_get_lead_monomial(_F, p->f, f_m);
278 if (_GR->is_skew_commutative())
279 {
280 _M->to_expvector(f_m, find_pairs_exp);
281
282 for (int v = 0; v < _GR->n_skew_commutative_vars(); v++)
283 {
284 int w = _GR->skew_variable(v);
285 if (find_pairs_exp[w] == 0) continue;
286
287 find_pairs_exp[w]++;
288 _M->from_expvector(find_pairs_exp, find_pairs_lcm);
289 find_pairs_exp[w]--;
290
291 vplcm.resize(0);
292 _M->to_varpower(find_pairs_lcm, vplcm);
293 s_pair *q = new_var_pair(p, find_pairs_lcm);
294 elems.push_back(new Bag(q, vplcm));
295 }
296 }
297
298 // Add in syzygies arising from a base ring
299
300 if (originalR->is_quotient_ring())
301 {
302 for (int i = 0; i < originalR->n_quotients(); i++)
303 {
304 const gbvector *f = originalR->quotient_gbvector(i);
305 _M->lcm(f->monom, f_m, find_pairs_lcm);
306 vplcm.resize(0);
307 _M->to_varpower(find_pairs_lcm, vplcm);
308 s_pair *q = new_ring_pair(p, find_pairs_lcm);
309 elems.push_back(new Bag(q, vplcm));
310 }
311 }
312 // Add in syzygies arising as s-pairs
313 MonomialIdeal *mi1 = _monideals[p->f->comp]->mi;
314 for (Bag& a : *mi1)
315 {
316 _M->from_varpower(a.monom().data(), find_pairs_m);
317 _M->lcm(find_pairs_m, f_m, find_pairs_lcm);
318 vplcm.resize(0);
319 _M->to_varpower(find_pairs_lcm, vplcm);
320 s_pair *q =
322 reinterpret_cast<gb_elem *>(a.basis_ptr()),
323 find_pairs_lcm);
324 elems.push_back(new Bag(q, vplcm));
325 }
326
327 // Add 'p' to the correct monideal
328 gc_vector<int> vp;
329 _M->to_varpower(f_m, vp);
330 mi1->insert(new Bag(p, vp));
331
332 // Now minimalize these elements, and insert them into
333 // the proper degree.
334
335 VECTOR(Bag *) rejects;
336 MonomialIdeal mi(originalR, elems, rejects);
337 for (auto& b : rejects)
338 {
339 s_pair *q = reinterpret_cast<s_pair *>(b->basis_ptr());
340 remove_pair(q);
341 delete b;
342 }
343 for (Bag& a : mi)
344 {
345 s_pair *q = reinterpret_cast<s_pair *>(a.basis_ptr());
346 if (_is_ideal && q->syz_type == SPAIR_PAIR)
347 {
348 _M->gcd(q->first->f->monom, q->second->f->monom, find_pairs_m);
349 if (_M->is_one(find_pairs_m))
350 {
351 _n_saved_gcd++;
352 if (M2_gbTrace >= 8)
353 {
354 buffer o;
355 o << "removed pair[" << q->first->me << " " << q->second->me
356 << "]" << newline;
357 emit(o.str());
358 }
359 remove_pair(q);
360 }
361 else
362 _spairs->insert(q);
363 }
364 else
365 _spairs->insert(q);
366 }
367
368 // Remove the local variables
369 _M->remove(find_pairs_m);
370 _M->remove(f_m);
371 freemem(find_pairs_exp);
372 freemem(find_pairs_lcm);
373}
exponents::Exponents exponents_t
s_pair * new_ring_pair(gb_elem *p, const int *lcm)
void remove_pair(s_pair *&p)
const Monoid * _M
Definition gb-homog2.hpp:70
const FreeModule * _F
Definition gb-homog2.hpp:73
s_pair * new_var_pair(gb_elem *p, const int *lcm)
s_pair * new_s_pair(gb_elem *p, gb_elem *q, const int *lcm)
s_pair_heap * _spairs
Definition gb-homog2.hpp:82
GBRing * _GR
Definition gb-homog2.hpp:68
const PolynomialRing * originalR
Definition gb-homog2.hpp:67
bool _is_ideal
int _n_saved_gcd
Definition gb-homog2.hpp:98
char * str()
Definition buffer.hpp:72
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
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 _F, _GR, _is_ideal, _M, _n_saved_gcd, _spairs, emit(), gb_elem::f, s_pair::first, freemem(), MonomialIdeal::insert(), M2_gbTrace, gb_elem::me, MonomialIdeal::mi, gbvector::monom, monomial, new_ring_pair(), new_s_pair(), new_var_pair(), newarray_atomic, newline, originalR, p, remove_pair(), s_pair::second, SPAIR_PAIR, buffer::str(), s_pair::syz_type, and VECTOR.

Referenced by new_pairs_step().