17namespace layer4_classification {
18namespace poset_classification {
39 Schreier_vector_handler = NULL;
53 tmp_set_apply_fusion = NULL;
54 tmp_find_node_for_subspace_by_rank1 = NULL;
55 tmp_find_node_for_subspace_by_rank2 = NULL;
68 f_has_invariant_subset_for_root_node =
FALSE;
69 invariant_subset_for_root_node = NULL;
70 invariant_subset_for_root_node_size = 0;
76 f_do_group_extension_in_upstep =
TRUE;
78 f_allowed_to_show_group_elements =
FALSE;
79 downstep_orbits_print_max_orbits = 25;
80 downstep_orbits_print_max_points_per_orbit = 50;
82 nb_times_image_of_called0 = 0;
83 nb_times_mult_called0 = 0;
84 nb_times_invert_called0 = 0;
85 nb_times_retrieve_called0 = 0;
86 nb_times_store_called0 = 0;
88 progress_last_time = 0.;
89 progress_epsilon = 0.;
98poset_classification::~poset_classification()
103void poset_classification::null()
107void poset_classification::freeself()
110 int verbose_level = 1;
111 int f_v = (verbose_level >= 1);
114 cout <<
"poset_classification::freeself" << endl;
125 cout <<
"poset_classification::freeself deleting S" << endl;
129 if (Schreier_vector_handler) {
132 if (tmp_set_apply_fusion) {
135 if (tmp_find_node_for_subspace_by_rank1) {
136 FREE_int(tmp_find_node_for_subspace_by_rank1);
138 if (tmp_find_node_for_subspace_by_rank2) {
139 FREE_int(tmp_find_node_for_subspace_by_rank2);
143 cout <<
"poset_classification::freeself "
144 "deleting transporter and set[]" << endl;
148 for (i = 0; i <= sz; i++) {
160 cout <<
"poset_classification::freeself done" << endl;
166void poset_classification::init_internal(
172 int f_v = (verbose_level >= 1);
173 int f_vv = (verbose_level >= 2);
178 cout <<
"poset_classification::init_internal sz=" << sz << endl;
179 cout <<
"poset_classification::init_internal Control=" << endl;
183 Control = PC_control;
184 poset_classification::Poset = Poset;
185 poset_classification::sz = sz;
188 problem_label_with_path.assign(Control->
path);
193 cout <<
"poset_classification::init_internal, problem_label=" << problem_label << endl;
194 cout <<
"poset_classification::init_internal, problem_label_with_path=" << problem_label_with_path << endl;
198 cout <<
"poset_classification::init_internal "
199 "Poset == NULL" << endl;
202 if (Poset->
A == NULL) {
203 cout <<
"poset_classification::init_internal "
204 "Poset->A == NULL" << endl;
207 if (Poset->
A2 == NULL) {
208 cout <<
"poset_classification::init_internal "
209 "Poset->A2 == NULL" << endl;
215 cout <<
"poset_classification::init_internal max_set_size=" << max_set_size << endl;
219 cout <<
"poset_classification::init_internal "
220 "sz = " << sz << endl;
221 cout <<
"poset_classification::init_internal "
222 "A->degree=" << Poset->
A->
degree << endl;
223 cout <<
"poset_classification::init_internal "
224 "A2->degree=" << Poset->
A2->
degree << endl;
235 progress_epsilon = 0.005;
239 cout <<
"poset_classification::init_internal action A:" << endl;
241 cout <<
"poset_classification::init_internal action A2:" << endl;
247 cout <<
"poset_classification::init_internal group order is ";
248 cout << Poset->
go << endl;
252 Schreier_vector_handler->
init(Poset->
A, Poset->
A2,
257 cout <<
"poset_classification::init_internal sz = " << sz << endl;
261 cout <<
"poset_classification::init_internal "
262 "allocating S of size " << sz << endl;
265 for (i = 0; i < sz; i++) {
269 tmp_set_apply_fusion =
NEW_lint(sz + 1);
272 cout <<
"poset_classification::init_internal "
273 "allocating Elt_memory" << endl;
287 cout <<
"poset_classification::init_internal sz == 0" << endl;
291 transporter->
init(Poset->
A, verbose_level - 2);
292 transporter->
allocate(sz + 1, verbose_level - 2);
296 for (i = 0; i <= sz; i++) {
300 int nb_poset_orbit_nodes = 1000;
304 cout <<
"poset_classification::init_internal "
305 "before Poo->init" << endl;
307 Poo->
init(
this, nb_poset_orbit_nodes, sz, max_set_size, t0, verbose_level);
309 cout <<
"poset_classification::init_internal "
310 "after Poo->init" << endl;
314 cout <<
"poset_classification::init_internal before Control->prepare" << endl;
316 Control->
prepare(
this, verbose_level);
318 cout <<
"poset_classification::init_internal after Control->prepare" << endl;
336 cout <<
"poset_classification::init_internal done" << endl;
340void poset_classification::initialize_and_allocate_root_node(
346 int f_v = (verbose_level >= 1);
347 int f_vv = (verbose_level >= 2);
350 cout <<
"poset_classification::initialize_and_allocate_root_node" << endl;
351 cout <<
"poset_classification::initialize_and_allocate_root_node "
352 "depth = " << depth << endl;
356 poset_classification::depth = depth;
357 poset_classification::Control = PC_control;
358 downstep_orbits_print_max_orbits = 50;
359 downstep_orbits_print_max_points_per_orbit = INT_MAX;
366 cout <<
"poset_classification::initialize_and_allocate_root_node "
367 "before init_internal" << endl;
374 cout <<
"poset_classification::initialize_and_allocate_root_node "
375 "after init_internal" << endl;
382 cout <<
"poset_classification::initialize_and_allocate_root_node done" << endl;
387void poset_classification::initialize_with_base_case(
394 int f_v = (verbose_level >= 1);
395 int f_vv = (verbose_level >= 2);
398 cout <<
"poset_classification::initialize_with_base_case" << endl;
401 Control = PC_control;
403 poset_classification::depth = depth;
404 downstep_orbits_print_max_orbits = 50;
405 downstep_orbits_print_max_points_per_orbit = INT_MAX;
412 cout <<
"poset_classification::initialize_with_base_case "
413 "before init_internal" << endl;
416 depth, verbose_level - 2);
418 cout <<
"poset_classification::initialize_with_base_case "
419 "after init_internal" << endl;
424 cout <<
"poset_classification::initialize_with_base_case "
425 "calling init_starter" << endl;
432 cout <<
"poset_classification::initialize_with_base_case done" << endl;
436void poset_classification::init_root_node_invariant_subset(
437 int *invariant_subset,
int invariant_subset_size,
440 int f_v = (verbose_level >= 1);
443 cout <<
"poset_classification::init_root_node_"
444 "invariant_subset" << endl;
446 f_has_invariant_subset_for_root_node =
TRUE;
447 invariant_subset_for_root_node = invariant_subset;
448 invariant_subset_for_root_node_size = invariant_subset_size;
450 cout <<
"poset_classification::init_root_node_"
452 "installed invariant subset of size "
453 << invariant_subset_size << endl;
463 int f_v = (verbose_level >= 1);
466 cout <<
"poset_classification::init_base_case" << endl;
469 poset_classification::Base_case = Base_case;
interface to system functions
int nb_times_retrieve_called
int nb_times_image_of_called
int nb_times_store_called
int nb_times_invert_called
void element_one(void *elt, int verbose_level)
action_pointer_table * ptr
manages access to schreier vectors
void init(actions::action *A, actions::action *A2, int f_allow_failure, int verbose_level)
to hold a vector of group elements
void allocate(int length, int verbose_level)
void init(actions::action *A, int verbose_level)
represents a known classification with constructive recognition, to be used as base case for poset_cl...
poset_classification * PC
to control the behavior of the poset classification algorithm
void prepare(poset_classification *PC, int verbose_level)
std::string problem_label
the poset classification algorithm
void init_internal(poset_classification_control *PC_control, poset_with_group_action *Poset, int sz, int verbose_level)
void init_base_case(classification_base_case *Base_case, int verbose_level)
the data structure for the poset of orbits in the poset classification algorithm
void init_root_node(int verbose_level)
void init(poset_classification *PC, int nb_poset_orbit_nodes, int sz, int max_set_size, long int t0, int verbose_level)
a poset with a group action on it
algebra::vector_space * VS
orbit_based_testing * Orbit_based_testing
ring_theory::longinteger_object go
the orbiter library for the classification of combinatorial objects