281{
283 gc_vector<int> vplcm;
284 s_pair *q;
285 int nvars =
M->n_vars();
293
294 GR->gbvector_get_lead_monomial(
F,
p->f, f_m);
295 if (
GR->is_skew_commutative())
296 {
298 M->to_expvector(f_m, find_pairs_exp);
299
300 for (
int v = 0; v <
GR->n_skew_commutative_vars(); v++)
301 {
302 int w =
GR->skew_variable(v);
303 if (find_pairs_exp[w] == 0) continue;
304
305 find_pairs_exp[w]++;
306 M->from_expvector(find_pairs_exp, find_pairs_lcm);
307 find_pairs_exp[w]--;
308
309 vplcm.resize(0);
310 M->to_varpower(find_pairs_lcm, vplcm);
312 elems.push_back(
new Bag(q2, vplcm));
313 }
315 }
316
317
318#ifdef DEVELOPMENT
319#warning "quotient ring stuff"
320#endif
322 {
323 for (
int i = 0; i <
originalR->n_quotients(); i++)
324 {
325 const gbvector *f =
originalR->quotient_gbvector(i);
326 M->lcm(f->
monom, f_m, find_pairs_lcm);
327 vplcm.resize(0);
328 M->to_varpower(find_pairs_lcm, vplcm);
330 elems.push_back(
new Bag(q2, vplcm));
331 }
332 }
333
334
335 for (gb_elem *
s =
gb->next_min;
s !=
nullptr;
s =
s->next_min)
336 {
337 if (
p->f->comp !=
s->f->comp)
continue;
338
339 GR->gbvector_get_lead_monomial(
F,
s->f, f_m2);
340 M->lcm(f_m, f_m2, find_pairs_lcm);
341
342 vplcm.resize(0);
343 M->to_varpower(find_pairs_lcm, vplcm);
345 elems.push_back(
new Bag(q, vplcm));
346 }
347
348
349
351 MonomialIdeal mi(
originalR, elems, rejects);
352 for (auto& b : rejects)
353 {
354 s_pair *q2 = reinterpret_cast<s_pair *>(b->basis_ptr());
356 delete b;
357 }
358
359 s_pair head;
360 s_pair *nextsame = &head;
361 int len = 0;
362
364 {
365 q = reinterpret_cast<s_pair *>(a.basis_ptr());
367 nextsame = q;
368 len++;
370 {
372 if (
M->is_one(find_pairs_mon))
373 {
376
378 {
379 buffer o;
381 << "]";
383 }
384 }
385 }
386 }
388 nextsame->
next =
nullptr;
389 p->pair_list = head.
next;
390 spairs->sort_list(
p->pair_list);
392 {
393 buffer o;
394 for (q =
p->pair_list; q !=
nullptr; q = q->
next)
395 {
396 o << "insert ";
399 }
401 }
403 spairs->insert(
p->pair_list, len);
404
405
406
407
408
409
410
411 for (s_pair *s1 =
p->pair_list; s1 !=
nullptr; s1 = s1->next_same)
412 {
414
415 GR->gbvector_get_lead_monomial(
F, s1->second->f, f_m);
416
417 M->divide(s1->lcm, f_m, pi);
418
419 for (s_pair *t1 = s1->next_same; t1 != nullptr; t1 = t1->next_same)
420 {
422 GR->gbvector_get_lead_monomial(
F, t1->second->f, f_m);
423 M->divide(t1->lcm, f_m, pj);
426 {
428 {
430 }
431 }
432 }
433 }
434
435
440 M->remove(find_pairs_mon);
443}
exponents::Exponents exponents_t
int mark_pair(gb_elem *p, gb_elem *q) const
s_pair * new_ring_pair(gb_elem *p, const int *lcm)
void remove_pair(s_pair *&p)
s_pair * new_s_pair(gb_elem *p, gb_elem *q, const int *lcm)
s_pair * new_var_pair(gb_elem *p, const int *lcm)
void debug_out(s_pair *q) const
const PolynomialRing * originalR
typename std::vector< T, gc_allocator< T > > gc_vector
a version of the STL vector, which allocates its backing memory with gc.
#define newarray_atomic(T, len)
void emit_line(const char *s)