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

◆ minimalize_pairs_non_ZZ()

void gbA::minimalize_pairs_non_ZZ ( spairs & new_set)
private

Definition at line 788 of file gb-default.cpp.

790{
791#if 0
792// spairs keep_for_now;
793// emit("--minimalize pairs--\n");
794// for (int i=0; i<new_set.size(); i++) {
795// keep_for_now.push_back(new_set[i]);
796// debug_spair(new_set[i]);
797// }
798#endif
799 std::stable_sort(new_set.begin(), new_set.end(), spair_sorter(_nvars));
800 MonomialTable *montab = MonomialTable::make(_nvars);
801
802 // array_sort(new_set, (compareFcn)spair_compare, 0);
803 spairs::iterator first = new_set.begin();
804 spairs::iterator next = first;
805 spairs::iterator end = new_set.end();
806 for (; first != end; first = next)
807 {
808 next = first + 1;
809 spair *me = *first;
810 while (next != end)
811 {
812 spair *p = *next;
813 if (!exponents_equal(_nvars, me->lcm, p->lcm)) break;
814 next++;
815 }
816 /* At this point: [first,next) is the range of equal monomials */
817
818 int inideal = montab->find_divisors(1, me->lcm, 1);
819 if (inideal == 0)
820 {
821 spairs::iterator t = choose_pair(first, next);
822 spair *p = *t;
824 {
825 stats_ngcd1++;
826 if ((M2_gbTrace & PRINT_SPAIR_TRACKING) != 0)
827 {
828 buffer o;
829 o << "removing spair because of gcd: ";
830 spair_text_out(o, p);
831 emit_line(o.str());
832 }
834 }
835 else
836 {
837 if (M2_gbTrace >= 4)
838 {
839 buffer o;
840 o << " new ";
841 spair_text_out(o, p);
842 emit_line(o.str());
843 }
845 montab->insert(p->lcm, 1, 0);
846 }
847 *t = 0;
848 }
849 }
850
851 delete montab;
852 for (spairs::iterator i = new_set.begin(); i != new_set.end(); i++)
853 spair_delete(*i);
854}
void insert(exponents_t exp, int comp, int id)
Definition montable.cpp:218
static MonomialTable * make(int nvars)
Definition montable.cpp:61
int find_divisors(int max, exponents_t exp, int comp, VECTOR(mon_term *) *result=nullptr)
Definition montable.cpp:152
char * str()
Definition buffer.hpp:72
void spair_delete(spair *&p)
void spair_text_out(buffer &o, spair *p)
int _nvars
void spair_set_insert(spair *p)
bool is_gcd_one_pair(spair *p)
spairs::iterator choose_pair(spairs::iterator first, spairs::iterator next)
bool _is_ideal
int stats_ngcd1
@ PRINT_SPAIR_TRACKING
static bool exponents_equal(int nvars, exponents_t a, exponents_t b)
int p
int M2_gbTrace
Definition m2-types.cpp:52
TermIterator< Nterm > end(Nterm *)
Definition ringelem.cpp:5
monomial_word * lcm
Definition f4-types.hpp:130
void emit_line(const char *s)
Definition text-io.cpp:47

References _is_ideal, _nvars, choose_pair(), emit_line(), end(), exponents_equal(), MonomialTable::find_divisors(), MonomialTable::insert(), is_gcd_one_pair(), gbA::spair::lcm, M2_gbTrace, MonomialTable::make(), p, PRINT_SPAIR_TRACKING, spair_delete(), spair_set_insert(), spair_text_out(), stats_ngcd1, and buffer::str().

Referenced by minimalize_pairs().