17namespace layer4_classification {
18namespace poset_classification {
21void poset_classification::compute_orbits_on_subsets(
27 int f_v = (verbose_level >= 1);
29 int schreier_depth = target_depth;
30 int f_use_invariant_subset_if_available =
TRUE;
37 cout <<
"poset_classification::compute_orbits_on_subsets "
38 "verbose_level=" << verbose_level << endl;
42 downstep_orbits_print_max_orbits = 50;
43 downstep_orbits_print_max_points_per_orbit = INT_MAX;
47 f_allowed_to_show_group_elements =
FALSE;
50 cout <<
"poset_classification::compute_orbits_on_subsets "
51 "calling initialize_and_allocate_root_node" << endl;
55 target_depth, verbose_level - 1);
62 cout <<
"poset_classification::compute_orbits_on_subsets "
63 "calling main" << endl;
67 f_use_invariant_subset_if_available,
71 cout <<
"poset_classification::compute_orbits_on_subsets "
78 cout <<
"poset_classification::compute_orbits_on_subsets done" << endl;
79 cout <<
"depth : number of orbits" << endl;
81 for (i = 0; i < target_depth + 1; i++) {
85 cout << i <<
" : " << len << endl;
93 for (level = 0; level <= target_depth; level++) {
96 for (level = 0; level < target_depth; level++) {
100 cout <<
"poset_classification::compute_orbits_on_subsets N=" << N << endl;
101 cout <<
"poset_classification::compute_orbits_on_subsets F=" << F << endl;
105 cout <<
"poset_classification::compute_orbits_on_subsets "
114 int f_use_invariant_subset_if_available,
126 int f_v = (verbose_level >= 1);
127 int size, depth_completed = 0;
135 cout <<
"poset_classification::main" << endl;
136 cout <<
"poset_classification::main ";
138 cout <<
" depth = " << depth << endl;
139 cout <<
"f_W = " << Control->
f_W << endl;
140 cout <<
"f_w = " << Control->
f_w << endl;
141 cout <<
"verbose_level = " << verbose_level << endl;
146 cout <<
"poset_classification::main: recovering from file "
163 cout <<
"depth_completed = " << depth_completed << endl;
164 cout <<
"poset_classification::main: "
165 "recreating schreier vectors "
166 "to depth " << depth_completed - 1 << endl;
173 depth_completed = Base_case->
size;
178 target_depth = Control->
depth;
181 target_depth = depth;
184 cout <<
"poset_classification::main "
185 "target_depth=" << target_depth << endl;
191 cout <<
"poset_classification::main before compute_orbits" << endl;
195 f_use_invariant_subset_if_available,
198 cout <<
"poset_classification::main after compute_orbits" << endl;
205 cout <<
"poset_classification::main before post_processing" << endl;
209 cout <<
"poset_classification::main after post_processing" << endl;
213 cout <<
"poset_classification::main done" << endl;
218int poset_classification::compute_orbits(
int from_level,
int to_level,
220 int f_use_invariant_subset_if_available,
224 int f_v = (verbose_level >= 1);
226 int f_create_schreier_vector =
TRUE;
233 cout <<
"poset_classification::compute_orbits ";
235 cout <<
" from " << from_level <<
" to " << to_level << endl;
236 cout <<
"f_lex=" << Control->
f_lex << endl;
237 cout <<
"problem_label_with_path=" << problem_label_with_path << endl;
238 cout <<
"schreier_depth=" << schreier_depth << endl;
239 cout <<
"f_use_invariant_subset_if_available=" << f_use_invariant_subset_if_available << endl;
240 cout <<
"poset_classification_control:" << endl;
245 for (level = from_level; level < to_level; level++) {
248 cout <<
"poset_classification::compute_orbits: ";
250 cout <<
" level " << level << endl;
253 int f_write_candidate_file =
FALSE;
256 if (Control->
f_W && level) {
257 f_write_candidate_file =
TRUE;
260 if (Control->
f_w && level == to_level - 1) {
261 f_write_candidate_file =
TRUE;
265 if (level <= schreier_depth) {
266 f_create_schreier_vector =
TRUE;
268 cout <<
"poset_classification::compute_orbits "
269 "we will store schreier vectors "
270 "for this level" << endl;
275 cout <<
"poset_classification::compute_orbits "
276 "we will NOT store schreier vectors "
277 "for this level" << endl;
279 f_create_schreier_vector =
FALSE;
283 cout <<
"poset_classification::compute_orbits: ";
285 cout <<
" before extend_level" << endl;
288 f_create_schreier_vector,
289 f_use_invariant_subset_if_available,
291 f_write_candidate_file,
294 cout <<
"poset_classification::compute_orbits: ";
296 cout <<
" after extend_level" << endl;
300 f_write_files = (Control->
f_W || (Control->
f_w && level == to_level - 1));
306 cout <<
"poset_classification::compute_orbits before write_reps_csv" << endl;
310 cout <<
"poset_classification::compute_orbits after write_reps_csv" << endl;
316 cout <<
"poset_classification::compute_orbits before housekeeping f_write_files = TRUE" << endl;
321 cout <<
"poset_classification::compute_orbits after housekeeping" << endl;
326 cout <<
"poset_classification::compute_orbits before housekeeping_no_data_file" << endl;
331 cout <<
"poset_classification::compute_orbits after housekeeping_no_data_file" << endl;
340 for (j = level + 2; j <= to_level + 1; j++) {
351 cout <<
"poset_classification::compute_orbits from "
352 << from_level <<
" to " << to_level <<
" done, "
353 "last level with nodes is " << level << endl;
359void poset_classification::post_processing(
int actual_size,
int verbose_level)
361 int f_v = (verbose_level >= 1);
364 cout <<
"poset_classification::post_processing problem_label_with_path=" << problem_label_with_path <<
" verbose_level=" << verbose_level << endl;
370 problem_label_with_path, depth,
378 cout <<
"poset_classification::post_processing f_table_of_nodes" << endl;
385 cout <<
"poset_classification::post_processing f_list_all" << endl;
390 for (d = 0; d <= depth; d++) {
392 <<
" orbits on subsets of size " << d <<
":" << endl;
395 if (d < Descr->orbits_on_subsets_size) {
413 cout <<
"poset_classification::post_processing f_list" << endl;
422 cout <<
"poset_classification::post_processing before "
423 "list_all_orbits_at_level" << endl;
435 cout <<
"poset_classification::post_processing after "
436 "list_all_orbits_at_level" << endl;
441 for (d = 0; d < 3; d++) {
442 gen->print_schreier_vectors_at_depth(d, verbose_level);
450 cout <<
"poset_classification::post_processing preparing level spreadsheet" << endl;
458 fname_csv.assign(problem_label_with_path);
459 sprintf(str,
"_levels_%d.csv", actual_size);
460 fname_csv.append(str);
461 Sp->
save(fname_csv, verbose_level);
465 cout <<
"poset_classification::post_processing preparing level spreadsheet done" << endl;
472 cout <<
"poset_classification::post_processing preparing orbit spreadsheet" << endl;
480 fname_csv.assign(problem_label_with_path);
481 sprintf(str,
"_orbits_at_level_%d.csv", actual_size);
482 fname_csv.append(str);
483 Sp->
save(fname_csv, verbose_level);
487 cout <<
"poset_classification::post_processing preparing orbit spreadsheet done" << endl;
494 cout <<
"poset_classification::post_processing before draw_poset" << endl;
497 cout <<
"poset_classification::post_processing Control->f_draw_poset && !Control->f_draw_options" << endl;
505 cout <<
"poset_classification::post_processing after draw_poset" << endl;
511 cout <<
"poset_classification::post_processing before draw_full_poset" << endl;
518 cout <<
"poset_classification::post_processing after draw_full_poset" << endl;
525 fname_prefix.assign(problem_label_with_path);
526 fname_prefix.append(
"_flag_orbits");
529 cout <<
"poset_classification::post_processing before make_flag_orbits_on_relations" << endl;
532 depth, fname_prefix.c_str(), verbose_level);
534 cout <<
"poset_classification::post_processing after make_flag_orbits_on_relations" << endl;
540 for (h = 0; h < Control->
recognize.size(); h++) {
549 cout <<
"poset_classification::post_processing f_print_data_structure" << endl;
558 cout <<
"poset_classification::post_processing computing "
559 "Kramer Mesner matrices" << endl;
564 int *Nb_rows, *Nb_cols;
573 cout <<
"poset_classification::post_processing matrix "
574 "level " << h <<
" computed" << endl;
577 for (i = 0; i < Nb_rows[h]; i++) {
578 for (j = 0; j < Nb_cols[h]; j++) {
579 cout << pM[h][i * Nb_cols[h] + j];
580 if (j < Nb_cols[h]) {
595 cout <<
"poset_classification::post_processing before Mtk_from_MM" << endl;
603 cout <<
"poset_classification::post_processing after Mtk_from_MM" << endl;
604 cout <<
"poset_classification::post_processing M_{" << Control->
Kramer_Mesner_t <<
","
606 << nb_c <<
"." << endl;
610 for (i = 0; i < nb_r; i++) {
611 for (j = 0; j < nb_c; j++) {
612 cout << Mtk[i * nb_c + j];
630 fname.assign(problem_label);
631 sprintf(str,
"_KM_%d_%d.csv",
636 cout <<
"Written file " << fname <<
" of size " << Fio.
file_size(fname) << endl;
639 cout <<
"poset_classification::post_processing computing "
640 "Kramer Mesner matrices done" << endl;
654 cout <<
"poset_classification::post_processing f_report" << endl;
658 fname_report.assign(problem_label);
659 fname_report.append(
"_poset.tex");
664 ofstream ost(fname_report);
668 cout <<
"poset_classification::post_processing "
669 "before get_A()->report" << endl;
679 cout <<
"poset_classification::post_processing "
680 "after LG->A_linear->report" << endl;
684 cout <<
"poset_classification::post_processing "
685 "before report" << endl;
689 cout <<
"poset_classification::post_processing "
690 "after report" << endl;
695 cout <<
"Written file " << fname_report <<
" of size "
705 cout <<
"poset_classification::post_processing done" << endl;
709void poset_classification::recognize(std::string &set_to_recognize,
710 int h,
int nb_to_recognize,
int verbose_level)
712 int f_v = (verbose_level >= 1);
715 cout <<
"poset_classification::recognize" << endl;
717 long int *recognize_set;
718 int recognize_set_sz;
720 long int *canonical_set;
721 int *Elt_transporter;
722 int *Elt_transporter_inv;
724 cout <<
"recognize " << h <<
" / " << nb_to_recognize << endl;
725 Lint_vec_scan(set_to_recognize, recognize_set, recognize_set_sz);
726 cout <<
"input set = " << h <<
" / " << nb_to_recognize <<
" : ";
730 canonical_set =
NEW_lint(recognize_set_sz);
732 Elt_transporter_inv =
NEW_int(
get_A()->elt_size_in_int);
740 recognize_set, recognize_set_sz, Elt_transporter,
746 recognize_set_sz, recognize_set_sz ,
747 canonical_set, Elt_transporter,
750 cout <<
"recognize " << h <<
" / " << nb_to_recognize << endl;
751 cout <<
"canonical set = ";
754 cout <<
"is orbit " << orb << endl;
755 cout <<
"recognize " << h <<
" / " << nb_to_recognize << endl;
756 cout <<
"transporter:" << endl;
760 cout <<
"recognize " << h <<
" / " << nb_to_recognize << endl;
761 cout <<
"transporter inverse:" << endl;
772 cout <<
"poset_classification::recognize done" << endl;
776void poset_classification::extend_level(
int size,
777 int f_create_schreier_vector,
778 int f_use_invariant_subset_if_available,
780 int f_write_candidate_file,
784 int f_v = (verbose_level >= 1);
787 cout <<
"####################################################"
788 "##############################################" << endl;
791 cout <<
"poset_classification::extend_level "
792 "constructing orbits at depth "
794 cout <<
"poset_classification::extend_level from "
796 <<
" nodes at depth " << size << endl;
804 cout <<
"verbose_level=" << verbose_level << endl;
808 cout <<
"poset_classification::extend_level size = " << size
809 <<
" calling compute_flag_orbits" << endl;
812 f_create_schreier_vector,
813 f_use_invariant_subset_if_available,
816 cout <<
"poset_classification::extend_level size = " << size <<
817 "after compute_flag_orbits" << endl;
820 if (f_write_candidate_file) {
822 cout <<
"poset_classification::extend_level "
824 <<
" before write_candidates_binary_using_sv" << endl;
827 size, t0, verbose_level - 1);
829 cout <<
"poset_classification::extend_level "
831 <<
" after write_candidates_binary_using_sv" << endl;
836 cout <<
"poset_classification::extend_level "
837 "calling upstep" << endl;
843 cout <<
"poset_classification::extend_level "
844 "after upstep" << endl;
850void poset_classification::compute_flag_orbits(
int size,
851 int f_create_schreier_vector,
852 int f_use_invariant_subset_if_available,
857 int f_v = (verbose_level >= 1);
858 int f_vv = (verbose_level >= 2);
859 int f_v4 = (verbose_level >= 4);
860 int f, cur, l, prev, u;
869 cout <<
"################################################"
870 "##################################################" << endl;
873 cout <<
"poset_classification::compute_flag_orbits at level " << size
874 <<
" creating orbits at level " << size + 1
875 <<
" verbose_level=" << verbose_level << endl;
877 progress_last_time = 0;
880 for (u = 0; u < l; u++) {
888 cout <<
" poset_classification::compute_flag_orbits "
889 "level " << size <<
" node " << u <<
" / " << l
890 <<
" starting" << endl;
895 cout <<
"poset_classification::compute_flag_orbits "
896 "level " << size <<
" before compute_flag_orbits_subspace_action" << endl;
899 f_create_schreier_vector,
900 f_use_invariant_subset_if_available,
904 cout <<
"poset_classification::compute_flag_orbits "
905 "level " << size <<
" after compute_flag_orbits_subspace_action" << endl;
910 cout <<
"poset_classification::compute_flag_orbits "
911 "level " << size <<
" before compute_flag_orbits" << endl;
914 f_create_schreier_vector,
915 f_use_invariant_subset_if_available,
919 cout <<
"poset_classification::compute_flag_orbits "
920 "level " << size <<
" after compute_flag_orbits" << endl;
926 cout <<
" compute_flag_orbits level " << size <<
" node " << u <<
" / " << l
931 cout <<
" found " << nb <<
" live points in "
936 cout <<
"The live points are : ";
943 cout <<
" compute_flag_orbits level " << size <<
" node " << u <<
" / " << l
944 <<
" the extensions are : ";
953 progress = (double) u / (
double) l;
955 if (f_v &&
ABS(progress - progress_last_time) > progress_epsilon) {
957 progress_last_time = progress;
967 cout <<
"poset_classification::compute_flag_orbits at "
968 "level " << size <<
" done" << endl;
973void poset_classification::upstep(
int size,
978 int f_v = (verbose_level >= 1);
979 int f_vv = (verbose_level >= 2);
980 int f, cur, l, prev, u;
981 int f_indicate_not_canonicals =
FALSE;
985 cout <<
"poset_classification::upstep at level " << size << endl;
986 cout <<
"verbose_level = " << verbose_level << endl;
995 progress_last_time = 0;
998 cout <<
"#################################################"
999 "#################################################" << endl;
1002 cout <<
"extension step at level " << size << endl;
1003 cout <<
"verbose_level=" << verbose_level << endl;
1004 cout <<
"f_indicate_not_canonicals="
1005 << f_indicate_not_canonicals << endl;
1010 <<
" extension nodes" << endl;
1012 for (u = 0; u < l; u++) {
1015 cout <<
"poset_classification::upstep level " << size <<
1016 " case " << u <<
" / " << l << endl;
1022 cout <<
" Upstep : " << endl;
1029 cout <<
"poset_classification::upstep "
1030 "before extend_node" << endl;
1036 cout <<
"poset_classification::upstep level " << size <<
1037 " case " << u <<
" / " << l <<
" before extend_node" << endl;
1041 f_indicate_not_canonicals,
1046 cout <<
"poset_classification::upstep level " << size <<
1047 " after extend_node, size="
1059 cout <<
" Upstep : ";
1064 ABS(progress - progress_last_time) > progress_epsilon) {
1066 progress_last_time = progress;
1080 cout <<
"poset_classification::upstep at level " << size <<
" done" << endl;
1086void poset_classification::extend_node(
1087 int size,
int prev,
int &cur,
1089 int f_indicate_not_canonicals,
1095 int nb_fuse_cur, nb_ext_cur, prev_ex;
1096 int f_v = (verbose_level >= 1);
1097 int f_vv = (verbose_level >= 2);
1098 int f_vvv = (verbose_level >= 3);
1101 cout <<
"poset_classification::extend_node prev=" << prev
1102 <<
" cur=" << cur << endl;
1109 cout <<
"poset_classification::extend_node "
1110 "running out of nodes" << endl;
1111 cout <<
"cur = " << cur << endl;
1112 cout <<
"allocated nodes = "
1114 cout <<
"reallocating" << endl;
1118 cout <<
"allocated nodes = "
1131 cout <<
" extending set ";
1138 cout <<
" with " << nb <<
" live points" << endl;
1142 <<
" extensions" << endl;
1143 cout <<
" verbose_level=" << verbose_level << endl;
1145 cout <<
"poset_classification::extend_node prev=" << prev
1146 <<
" cur=" << cur <<
" extensions:" << endl;
1153 int f_show_progress =
FALSE;
1155 f_show_progress =
TRUE;
1163 if (f_show_progress && (prev_ex % nb_flags_10) == 0) {
1165 cout <<
"poset_classification::extend_node "
1166 "working on extension "
1168 <<
" : progress " << prev_ex / nb_flags_10 <<
" * 10 %" << endl;
1175 cout <<
"poset_classification::extend_node "
1176 "working on extension "
1188 cout <<
"poset_classification::extend_node "
1189 "we are at node (32,3)" << endl;
1190 verbose_level_down = verbose_level + 20;
1193 verbose_level_down = verbose_level - 2;
1200 cout <<
"poset_classification::extend_node "
1201 "working on extension "
1203 <<
": before Work.init" << endl;
1206 Work.
init(
this, size, prev, prev_ex, cur,
1209 f_indicate_not_canonicals,
1214 cout <<
"poset_classification::extend_node "
1215 "working on extension "
1217 <<
": after Work.init" << endl;
1225 prev, prev_ex, nb_ext_cur, nb_fuse_cur);
1230 cout <<
"poset_classification::extend_node "
1231 "working on extension "
1233 <<
": before Work.handle_extension nb_ext_cur="
1234 << nb_ext_cur << endl;
1242 cout <<
"poset_classification::extend_node after "
1243 "Work.handle_extension" << endl;
1254 cout <<
"poset_classification::extend_node "
1255 "working on extension "
1258 cout <<
"poset_classification::extend_node "
1259 "after freeing Work" << endl;
1270 cout <<
"poset_classification::extend_node prev=" << prev
1271 <<
" cur=" << cur <<
" done" << endl;
for reading and writing of csv files
void save(std::string &fname, int verbose_level)
a collection of functions related to file io
void lint_matrix_write_csv(std::string &fname, long int *M, int m, int n)
long int file_size(std::string &fname)
interface to create latex output files
void head_easy(std::ostream &ost)
void foot(std::ostream &ost)
interface to system functions
void time_check_delta(std::ostream &ost, int dt)
a class to represent arbitrary precision integers
void element_print_quick(void *elt, std::ostream &ost)
void report(std::ostream &ost, int f_sims, groups::sims *S, int f_strong_gens, groups::strong_generators *SG, graphics::layered_graph_draw_options *LG_Draw_options, int verbose_level)
void element_invert(void *a, void *av, int verbose_level)
a set and its known set stabilizer
void print_generators_tex(std::ostream &ost)
to control the behavior of the poset classification algorithm
int f_print_data_structure
int f_show_orbit_decomposition
int f_Kramer_Mesner_matrix
std::string recover_fname
int f_make_relations_with_flag_orbits
graphics::layered_graph_draw_options * draw_options
poset_classification_report_options * report_options
int f_test_multi_edge_in_decomposition_matrix
std::vector< std::string > recognize
void print_progress_by_extension(int size, int cur, int prev, int cur_ex, int nb_ext_cur, int nb_fuse_cur)
void initialize_and_allocate_root_node(poset_classification_control *PC_control, poset_with_group_action *Poset, int depth, int verbose_level)
void upstep(int size, int f_debug, int verbose_level)
void post_processing(int actual_size, int verbose_level)
actions::action * get_A2()
int compute_orbits(int from_level, int to_level, int schreier_depth, int f_use_invariant_subset_if_available, int verbose_level)
int trace_set(long int *set, int size, int level, long int *canonical_set, int *Elt_transporter, int verbose_level)
void print_progress(int size, int cur, int prev, int nb_ext_cur, int nb_fuse_cur)
actions::action * get_A()
long int count_extension_nodes_at_level(int lvl)
void extend_level(int size, int f_create_schreier_vector, int f_use_invariant_subset_if_available, int f_debug, int f_write_candidate_file, int verbose_level)
void make_spreadsheet_of_level_info(data_structures::spreadsheet *&Sp, int max_depth, int verbose_level)
int main(int t0, int schreier_depth, int f_use_invariant_subset_if_available, int f_debug, int verbose_level)
void housekeeping(int i, int f_write_files, int t0, int verbose_level)
void extend_node(int size, int prev, int &cur, int f_debug, int f_indicate_not_canonicals, int verbose_level)
double level_progress(int lvl)
void list_all_orbits_at_level(int depth, int f_has_print_function, void(*print_function)(std::ostream &ost, int len, long int *S, void *data), void *print_function_data, int f_show_orbit_decomposition, int f_show_stab, int f_save_stab, int f_show_whole_orbit)
long int nb_flag_orbits_up_at_level(int level)
data_structures_groups::set_and_stabilizer * identify_and_get_stabilizer(long int *set, int sz, int *transporter, int &orbit_at_level, int verbose_level)
void write_treefile(std::string &fname_base, int lvl, graphics::layered_graph_draw_options *draw_options, int verbose_level)
void write_reps_csv(int lvl, int verbose_level)
void make_flag_orbits_on_relations(int depth, const char *fname_prefix, int verbose_level)
void make_spreadsheet_of_orbit_reps(data_structures::spreadsheet *&Sp, int max_depth)
void Kramer_Mesner_matrix_neighboring(int level, long int *&M, int &nb_rows, int &nb_cols, int verbose_level)
int nb_orbits_at_level(int level)
std::string & get_problem_label_with_path()
void print_level_info(int prev_level, int prev)
void print_data_structure_tex(int depth, int verbose_level)
void recreate_schreier_vectors_up_to_level(int lvl, int verbose_level)
void print_extensions_at_level(std::ostream &ost, int lvl)
void print_problem_label()
void compute_flag_orbits(int size, int f_create_schreier_vector, int f_use_invariant_subset_if_available, int verbose_level)
void recover(std::string &recover_fname, int &depth_completed, int verbose_level)
void draw_poset(std::string &fname_base, int depth, int data, graphics::layered_graph_draw_options *LG_Draw_options, int verbose_level)
void test_for_multi_edge_in_classification_graph(int depth, int verbose_level)
void report(std::ostream &ost, poset_classification_report_options *Opt, int verbose_level)
void recognize(std::string &set_to_recognize, int h, int nb_to_recognize, int verbose_level)
void housekeeping_no_data_file(int i, int t0, int verbose_level)
void Mtk_from_MM(long int **pM, int *Nb_rows, int *Nb_cols, int t, int k, long int *&Mtk, int &nb_r, int &nb_c, int verbose_level)
void draw_poset_full(std::string &fname_base, int depth, int data, graphics::layered_graph_draw_options *LG_Draw_options, double x_stretch, int verbose_level)
void write_candidates_binary_using_sv(const char *fname_base, int lvl, int t0, int verbose_level)
void make_tabe_of_nodes(int verbose_level)
long int get_nb_poset_orbit_nodes_allocated()
int node_get_nb_of_extensions(int node)
poset_orbit_node * get_node(int node_idx)
long int get_nb_extension_nodes_at_level_total(int level)
int first_node_at_level(int i)
void set_first_node_at_level(int i, int value)
void set_nb_poset_orbit_nodes_used(int value)
void compute_flag_orbits_subspace_action(poset_classification *gen, int lvl, int f_create_schreier_vector, int f_use_invariant_subset_if_available, int f_implicit_fusion, int verbose_level)
int has_Schreier_vector()
void print_extensions(std::ostream &ost)
int get_nb_of_live_points()
void compute_flag_orbits(poset_classification *gen, int lvl, int f_create_schreier_vector, int f_use_invariant_subset_if_available, int f_implicit_fusion, int verbose_level)
a poset with a group action on it
auxiliary class for the poset classification algorithm to deal with flag orbits
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 handle_extension(int &nb_fuse_cur, int &nb_ext_cur, int verbose_level)
#define Lint_vec_scan(A, B, C)
#define Lint_vec_print(A, B, C)
#define Int_vec_print(A, B, C)
the orbiter library for the classification of combinatorial objects
int main(int argc, const char **argv)
This is the Orbiter front-end. It passes the command line on to the user interface.