14namespace layer4_classification {
15namespace poset_classification {
51 int verbose_level = 0;
52 int f_v = (verbose_level >= 1);
55 cout <<
"upstep_work::~upstep_work" << endl;
59 cout <<
"upstep_work::~upstep_work "
60 "before FREE_OBJECT(G)" << endl;
67 cout <<
"upstep_work::~upstep_work "
68 "before FREE_OBJECT(H)" << endl;
75 cout <<
"upstep_work::~upstep_work "
76 "before FREE_OBJECT(coset_table)" << endl;
83 cout <<
"upstep_work::~upstep_work "
84 "before FREE_int(path)" << endl;
90 cout <<
"upstep_work::~upstep_work done" << endl;
100 int f_implicit_fusion,
101 int f_indicate_not_canonicals,
106 int f_v = (verbose_level >= 1);
110 cout <<
"upstep_work::init size=" <<
size
111 <<
" prev=" <<
prev <<
" prev_ex="
141 for (i =
size - 1; i >= 0; i--) {
145 cout <<
"upstep_work::init path: ";
150 cout <<
"upstep_work::init done" << endl;
156 int &nb_ext_cur,
int verbose_level)
166 int f_v = (verbose_level >= 1);
173 cout <<
"upstep_work::handle_extension verbose_level = "
174 << verbose_level << endl;
175 cout <<
"prev=" <<
prev <<
" prev_ex=" <<
prev_ex << endl;
189 cout <<
"upstep_work::handle_extension fusion type" << endl;
196 cout <<
"upstep_work::handle_extension unprocessed type" << endl;
204 cout <<
"upstep_work::handle_extension extension "
205 "not of unprocessed type, error" << endl;
212 cout <<
"upstep_work::handle_extension prev=" <<
prev
213 <<
" prev_ex=" <<
prev_ex <<
" done" << endl;
221 int f_v = (verbose_level >= 1);
222 int f_vv = (verbose_level >= 2);
229 cout <<
"upstep_work::handle_extension_fusion_type" << endl;
244 cout <<
" point " <<
pt <<
" ";
246 cout <<
" is a fusion node, skipping" << endl;
250 if (
gen->f_print_function) {
251 (*
gen->print_function)(cout,
size + 1,
252 gen->S1,
gen->print_function_data);
254 gen->generator_apply_isomorphism_no_transporter(
258 cout <<
"fusion elt: " << endl;
260 cout <<
"maps it to: ";
261 int_set_print(cout,
gen->S2,
size + 1);
263 if (
gen->f_print_function) {
264 (*
gen->print_function)(cout,
size + 1,
265 gen->S2,
gen->print_function_data);
276 int f_v = (verbose_level >= 1);
277 int f_vv = (verbose_level >= 2);
278 int f_vvv = (verbose_level >= 3);
284 cout <<
"upstep_work::handle_extension_unprocessed_type" << endl;
285 cout <<
"verbose_level = " << verbose_level << endl;
291 cout <<
"with point " <<
pt <<
" : " << endl;
294 cout <<
"extension not of unprocessed type, error" << endl;
312 <<
" : before init_extension_node" << endl;
319 cout <<
"with point " <<
pt <<
" : after init_extension_node ";
323 cout <<
"upstep_work::handle_extension_unprocessed_type "
324 "coset_table:" << endl;
329 cout <<
"init_extension_node returns TRUE" << endl;
334 cout <<
"init_extension_node returns FALSE, "
335 "the set is not canonical" << endl;
340 cout <<
"the set is not canonical, we skip it" << endl;
342 cout <<
"setting type of extension to "
343 "EXTENSION_TYPE_NOT_CANONICAL" << endl;
346 cout <<
"reducing cur to " <<
cur << endl;
355 cout <<
"cur=" <<
cur << endl;
360 cout <<
"with point " <<
pt <<
" done" << endl;
361 cout <<
"upstep_work::handle_extension_unprocessed_type done" << endl;
386 cout <<
"upstep_work::init_extension_node we are at node (12,3)" << endl;
393 cout <<
"upstep_work::init_extension_node Node=26" << endl;
398 int f_v = (verbose_level >= 1);
399 int f_vv = (verbose_level >= 2);
400 int f_vvv = (verbose_level >= 3);
406 cout <<
"upstep_work::init_extension_node cur=" <<
cur
408 <<
" verbose_level=" << verbose_level << endl;
413 cout <<
"upstep_work::init_extension_node cur=" <<
cur << endl;
435 cout <<
"upstep_work::init_extension_node "
436 "initializing Node " <<
cur <<
" ";
438 cout <<
" f_indicate_not_canonicals="
440 cout <<
" verbose_level=" << verbose_level;
445 cout <<
"point " <<
pt <<
" lies in an orbit of length "
447 <<
" verbose_level = " << verbose_level << endl;
452 cout <<
"upstep_work::init_extension_node "
453 "G is already allocated" << endl;
457 cout <<
"upstep_work::init_extension_node "
458 "H is already allocated" << endl;
468 cout <<
"upstep_work::init_extension_node "
469 "before O_cur->init_extension_node_prepare_G" << endl;
477 cout <<
"upstep_work::init_extension_node "
478 "after O_cur->init_extension_node_prepare_G" << endl;
494 cout <<
"(orbit length = " <<
pt_orbit_len <<
")" << endl;
508 cout <<
"upstep_work::init_extension_node "
509 "before O_cur->init_extension_node_prepare_H" << endl;
522 cout <<
"upstep_work::init_extension_node Node=26" << endl;
523 cout <<
"go_G=" <<
go_G << endl;
524 cout <<
"go_H=" <<
go_H << endl;
531 cout <<
"upstep_work::init_extension_node "
532 "after O_cur->init_extension_node_prepare_H" << endl;
539 cout <<
"upstep_work::init_extension_node calling upstep" << endl;
546 cout <<
"upstep_work::init_extension_node "
547 "calling upstep_subspace_action" << endl;
553 cout <<
"the set is not canonical" << endl;
557 cout <<
"upstep_subspace_action returns FALSE, "
558 "the set is not canonical, this should not happen"
565 cout <<
"upstep_work::init_extension_node "
566 "after upstep_subspace_action" << endl;
573 cout <<
"upstep_work::init_extension_node calling "
574 "upstep_for_sets, verbose_level = "
575 << verbose_level - 2 << endl;
580 cout <<
"the set is not canonical" << endl;
584 cout <<
"upstep returns FALSE, the set is not canonical, "
585 "this should not happen" << endl;
591 cout <<
"upstep_work::init_extension_node after "
592 "upstep_for_sets" << endl;
598 cout <<
"extension with point " <<
pt <<
" : " << endl;
599 cout <<
"after upstep_for_sets/upstep_subspace_action" << endl;
622 longinteger_object go;
623 cout <<
"upstep_work::init_extension_node Node=26 before "
624 "upstep_subspace_action group order=";
628 cout <<
"generators are:" << endl;
631 int_vec_print(cout, Strong_gens->
tl,
gen->A->base_len);
648 cout <<
"} (double check)" << endl;
649 cout <<
"upstep_work::init_extension_node done" << endl;
661 int f_v = (verbose_level >= 1);
662 int f_vv = (verbose_level >= 2);
663 int f_vvv = (verbose_level >= 3);
664 int f_v4 = (verbose_level >= 4);
665 int f_v5 = (verbose_level >= 5);
671 int final_node, final_ex;
677 cout <<
"upstep for set ";
679 cout <<
" verbose_level=" << verbose_level;
680 cout <<
" f_indicate_not_canonicals="
692 cout <<
"upstep_work::upstep_for_sets fatal: "
693 "gen->S[size - 1] != pt" << endl;
699 cout <<
"initializing up_orbit with restricted action ";
702 up_orbit.
init(A_by_restriction, verbose_level - 2);
706 cout <<
"initializing up_orbit with generators" << endl;
714 cout <<
"computing orbit of point " <<
pt << endl;
724 cout <<
"upstep_work::upstep_for_sets "
725 "initializing union_find:" << endl;
727 UF.
init(A_by_restriction, 0 );
729 cout <<
"upstep_work::upstep_for_sets "
730 "adding generators to union_find:" << endl;
734 cout <<
"upstep_work::upstep_for_sets "
735 "initializing union_find done" << endl;
743 cout <<
"upstep_work::upstep_for_sets "
744 "coset_table is allocated" << endl;
753 cout <<
"upstep_work::upstep_for_sets "
760 cout <<
" we are trying to map " << possible_image <<
" to " <<
pt << endl;
770 <<
" is at " << idx <<
" which has already "
771 "been done, so we save one trace" << endl;
781 cout <<
" orbit length upstep so far: " << up_orbit.
orbit_len[0]
782 <<
" checking possible image " << possible_image << endl;
789 for (h = 0; h <
size; h++) {
790 gen->set[0][h] =
gen->S[h];
800 cout <<
"exchanged set: ";
803 cout <<
"upstep_work::upstep_for_sets "
804 "calling recognize, verbose_level="
805 << verbose_level << endl;
819 cout <<
"upstep_work::upstep_for_sets coset "
821 <<
" recognize returns "
843 cout <<
"upstep_work::upstep_for_sets calling find_automorphism "
852 cout <<
"upstep_work::upstep_for_sets found automorphism "
853 "mapping " << possible_image <<
" to " <<
pt << endl;
861 cout <<
"upstep_work::upstep_for_sets image of possible_"
862 "image is not pt" << endl;
868 cout <<
"upstep_work::upstep_for_sets n e w orbit length "
869 "upstep = " << up_orbit.
orbit_len[0] << endl;
875 cout <<
"upstep_work::upstep_for_sets not canonical"
883 cout <<
"upstep_work::upstep_for_sets fatal: find_automorphism_"
884 "by_tracing returns not_canonical, this should "
885 "not happen" << endl;
891 cout <<
"upstep_work::upstep_for_sets no_result_"
892 "extension_not_found" << endl;
897 cout <<
"upstep_work::upstep_for_sets no_result_"
898 "fusion_node_installed" << endl;
903 cout <<
"upstep_work::upstep_for_sets no_result_"
904 "fusion_node_already_installed" << endl;
910 cout <<
"upstep_work::upstep_for_sets upstep orbit "
913 cout <<
" is " << up_orbit.
orbit_len[0] << endl;
921 int f_tolerant =
TRUE;
924 cout <<
"upstep_work::upstep_for_sets H->S->transitive_"
925 "extension_tolerant up_orbit.orbit_len[0]="
930 SG_extension, tl_extension, f_tolerant,
939 cout <<
"upstep_work::upstep_for_sets done "
949void upstep_work::print_level_extension_info_original_size()
972 cout <<
"coset table" << endl;
973 cout <<
"i : coset : node : ex : nb_times_mult : nb_times_invert : "
974 "nb_times_retrieve : trace_result" << endl;
975 for (i = 0; i < len; i++) {
976 cout << setw(3) << i <<
" : "
977 << setw(5) << coset_table[i].
coset <<
" : "
978 << setw(5) << coset_table[i].
node <<
" : "
979 << setw(5) << coset_table[i].
ex <<
" : ("
984 coset_table[i].type) << endl;
void set_print(long int *v, int len)
data_structures::lint_vec * Lint_vec
a class to represent arbitrary precision integers
int nb_times_retrieve_called
int nb_times_image_of_called
int nb_times_invert_called
a permutation group in a fixed action.
void element_print_quick(void *elt, std::ostream &ost)
void element_one(void *elt, int verbose_level)
action * create_induced_action_by_restriction(groups::sims *S, int size, long int *set, int f_induce, int verbose_level)
action_pointer_table * ptr
long int element_image_of(long int a, void *elt, int verbose_level)
a container data structure for groups
void init_strong_generators(vector_ge &SG, int *tl, int verbose_level)
void delete_strong_generators()
void print_group_order(std::ostream &ost)
a union find data structure (used in the poset classification algorithm)
void init(actions::action *A, int verbose_level)
void add_generator(int *Elt, int verbose_level)
void add_generators(vector_ge *gens, int verbose_level)
to hold a vector of group elements
Schreier trees for orbits of groups on points.
void extend_orbit(int *elt, int verbose_level)
void init_generators(data_structures_groups::vector_ge &generators, int verbose_level)
void compute_point_orbit(int pt, int verbose_level)
void init(actions::action *A, int verbose_level)
int transitive_extension_tolerant(schreier &O, data_structures_groups::vector_ge &SG, int *tl, int f_tolerant, int verbose_level)
a strong generating set for a permutation group with respect to a fixed action
void print_generators(std::ostream &ost)
void init_from_sims(groups::sims *S, int verbose_level)
void group_order(ring_theory::longinteger_object &go)
the poset classification algorithm
actions::action * get_A2()
actions::action * get_A()
poset_of_orbits * get_Poo()
void stabilizer_order(int node, ring_theory::longinteger_object &go)
poset_with_group_action * get_poset()
poset_orbit_node * get_node(int node_idx)
long int * get_set_i(int i)
void print_level_extension_coset_info(int prev_level, int prev, int cur_extension, int coset, int nb_cosets)
int allowed_to_show_group_elements()
void print_level_extension_info(int prev_level, int prev, int cur_extension)
data_structures_groups::vector_ge * get_transporter()
void change_extension_type(int level, int node, int cur_ext, int type, int verbose_level)
extension * get_E(int idx)
void init_node(int node, int prev, long int pt, int verbose_level)
void init_extension_node_prepare_H(poset_classification *gen, int prev, int prev_ex, int size, data_structures_groups::group_container &G, ring_theory::longinteger_object &go_G, data_structures_groups::group_container &H, ring_theory::longinteger_object &go_H, long int pt, int pt_orbit_len, int verbose_level)
void store_strong_generators(poset_classification *gen, groups::strong_generators *Strong_gens)
void init_extension_node_prepare_G(poset_classification *gen, int prev, int prev_ex, int size, data_structures_groups::group_container &G, ring_theory::longinteger_object &go_G, int verbose_level)
void store_set(poset_classification *gen, int i)
void store_set_to(poset_classification *gen, int i, long int *to)
int get_nb_of_extensions()
void invoke_print_function(std::ostream &ost, int sz, long int *set)
void print_level_extension_info()
int f_indicate_not_canonicals
int init_extension_node(int verbose_level)
data_structures_groups::group_container * G
ring_theory::longinteger_object go_G
data_structures_groups::group_container * H
void init(poset_classification *gen, int size, int prev, int prev_ex, int cur, int f_debug, int f_implicit_fusion, int f_indicate_not_canonicals, int verbose_level)
void print_level_extension_coset_info()
int upstep_for_sets(int verbose_level)
coset_table_entry * coset_table
void handle_extension_fusion_type(int verbose_level)
int upstep_subspace_action(int verbose_level)
ring_theory::longinteger_object go_H
poset_orbit_node * O_prev
poset_classification * gen
void handle_extension(int &nb_fuse_cur, int &nb_ext_cur, int verbose_level)
void handle_extension_unprocessed_type(int verbose_level)
trace_result recognize(int &final_node, int &final_ex, int f_tolerant, int verbose_level)
#define Lint_vec_copy(A, B, C)
#define Lint_vec_print(A, B, C)
#define NEW_OBJECTS(type, n)
#define Int_vec_print(A, B, C)
orbiter_kernel_system::orbiter_session * Orbiter
global Orbiter session
struct coset_table_entry coset_table_entry
const char * trace_result_as_text(trace_result r)
void print_extension_type(ostream &ost, int t)
@ no_result_fusion_node_installed
@ no_result_extension_not_found
@ no_result_fusion_node_already_installed
the orbiter library for the classification of combinatorial objects
#define EXTENSION_TYPE_PROCESSING
#define EXTENSION_TYPE_FUSION
#define EXTENSION_TYPE_UNPROCESSED
#define EXTENSION_TYPE_NOT_CANONICAL
#define EXTENSION_TYPE_EXTENSION
a helper class for the poset classification algorithm to build up a coset transversal for the automor...
int nb_times_invert_called
int nb_times_retrieve_called
int nb_times_image_of_called