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

◆ partition()

void partition_table::partition ( MonomialIdeal *& I,
gc_vector< MonomialIdeal * > & result )

Definition at line 121 of file hilb.cpp.

124{
125 int k;
126 reset(I->topvar() + 1);
127 // Create the sets
128 for (Bag& a : *I)
129 if (n_sets > 1)
130 merge_in(a.monom().data());
131 else
132 break;
133
134 if (n_sets == 1)
135 {
136 result.push_back(I);
137 return;
138 }
139
140 int this_label = -1;
141 n_sets = 0;
142 for (k = 0; k < n_vars; k++)
143 if (occurs[k] && dad[k] < 0)
144 {
145 dad[k] = this_label--;
146 n_sets++;
147 }
148
149 if (n_sets == 1)
150 {
151 result.push_back(I);
152 return;
153 }
154
155 int first = result.size();
156 for (k = 0; k < n_sets; k++)
157 result.push_back(new MonomialIdeal(I->get_ring(), mi_stash));
158
159 // Now partition the monomials
160 Bag *b;
161 while (I->remove(b))
162 {
163 int v = varpower::topvar(b->monom().data());
164 int loc = -1 - dad[representative(v)];
165 result[first + loc]->insert_minimal(b);
166 }
167
168 delete I;
169}
static Exponent topvar(ConstExponents a)
int topvar() const
Definition monideal.hpp:187
gc_vector< int > & monom()
Definition int-bag.hpp:60
int * occurs
Definition hilb.hpp:61
stash * mi_stash
Definition hilb.hpp:67
int representative(int x)
Definition hilb.cpp:29
int merge_in(int x, int y)
Definition hilb.cpp:43
void reset(int nvars)
Definition hilb.cpp:111
int_bag Bag
Definition int-bag.hpp:70
VALGRIND_MAKE_MEM_DEFINED & result(result)

References dad, MonomialIdeal::get_ring(), merge_in(), mi_stash, int_bag::monom(), n_sets, n_vars, occurs, MonomialIdeal::remove(), representative(), reset(), result(), ExponentList< int, true >::topvar(), and MonomialIdeal::topvar().