18namespace layer4_classification {
21static void callback_compute_down_orbits_worker(
22 isomorph *Iso,
void *data,
int verbose_level);
42 int f_v = (verbose_level >= 1);
45 cout <<
"isomorph_global::init" << endl;
53 cout <<
"isomorph_global::init done" << endl;
59 int size, std::string &prefix_classify,
60 std::string &prefix,
int level,
61 std::string *fname,
int nb_files,
64 int f_v = (verbose_level >= 1);
65 int f_implicit_fusion =
FALSE;
69 cout <<
"isomorph_global::read_statistic_files" << endl;
70 cout <<
"nb_files = " << nb_files << endl;
71 cout <<
"prefix_classify = " << prefix_classify << endl;
72 cout <<
"prefix = " << prefix << endl;
80 int f_use_database_for_starter =
TRUE;
85 cout <<
"size = " << size << endl;
89 cout <<
"isomorph_global::read_statistic_files "
90 "before Iso.init" << endl;
93 f_use_database_for_starter,
94 f_implicit_fusion, verbose_level);
100 cout <<
"isomorph_global::read_statistic_files "
101 "before Iso.read_data_files_for_starter" << endl;
104 prefix_classify, verbose_level);
112 int i, h, Case_nb, Nb_sol, Nb_backtrack, Nb_col, Dt, Dt_in_sec;
113 int case_nb, nb_sol, nb_backtrack, nb_col, dt, dt_in_sec;
117 for (i = 0; i < nb_files; i++) {
118 cout <<
"reading file " << fname[i] <<
":" << endl;
122 cout <<
"Allocating array Stats for " << Iso.
nb_starter
123 <<
" starter cases" << endl;
128 Stats[i * 6 + 0] = -1;
131 cout <<
"Reading all the statistic files" << endl;
133 for (h = 0; h < nb_files; h++) {
140 for (i = 1; i < S[h].
nb_rows; i++) {
141 case_nb = S[h].
get_int(i, Case_nb);
142 nb_sol = S[h].
get_int(i, Nb_sol);
143 nb_backtrack = S[h].
get_int(i, Nb_backtrack);
144 nb_col = S[h].
get_int(i, Nb_col);
146 dt_in_sec = S[h].
get_int(i, Dt_in_sec);
147 Stats[case_nb * 6 + 0] = 1;
148 Stats[case_nb * 6 + 1] = nb_sol;
149 Stats[case_nb * 6 + 2] = nb_backtrack;
150 Stats[case_nb * 6 + 3] = nb_col;
151 Stats[case_nb * 6 + 4] = dt;
152 Stats[case_nb * 6 + 5] = dt_in_sec;
156 cout <<
"Read all the statistic files" << endl;
158 if (Stats[i * 6 + 0] == -1) {
159 cout <<
"The run is incomplete, I don't have data for case "
160 << i <<
" for instance" << endl;
165 cout <<
"The run is complete" << endl;
169 cout <<
"The cases where solutions exist are:" << endl;
171 if (Stats[i * 6 + 1]) {
172 cout << setw(5) << i <<
" : " << setw(5)
173 << Stats[i * 6 + 1] <<
" : ";
182 if (Stats[i * 6 + 1]) {
190 Stats_short =
NEW_int(6 * Nb_cases);
193 if (Stats[i * 6 + 1]) {
195 Stats_short[h * 6 + 0] = i;
202 const char *Column_label[] = {
210 string fname_collected;
212 fname_collected.assign(
"stats_collected.csv");
214 Stats_short, Nb_cases, 6, Column_label);
216 cout <<
"Written file " << fname_collected <<
" of size "
217 << Fio.
file_size(fname_collected) << endl;
224 Nb_sol += Stats[i * 6 + 1];
225 Nb_col += Stats[i * 6 + 3];
226 Dt_in_sec += Stats[i * 6 + 5];
229 cout <<
"In total we have:" << endl;
230 cout <<
"Nb_sol = " << Nb_sol << endl;
231 cout <<
"Nb_col = " << Nb_col << endl;
232 cout <<
"Nb_col (average) = "
234 cout <<
"Dt_in_sec = " << Dt_in_sec << endl;
241 cout <<
"isomorph_read_statistic_files "
242 "before Iso.count_solutions" << endl;
244 int f_get_statistics =
FALSE;
248 f_get_statistics, verbose_level);
253 registry_dump_sorted_by_size();
259 cout <<
"isomorph_global::read_statistic_files done" << endl;
265 int size, std::string &prefix_classify,
266 std::string &prefix_iso,
int level,
269 int f_v = (verbose_level >= 1);
270 int f_implicit_fusion =
FALSE;
274 cout <<
"isomorph_global::build_db" << endl;
275 cout <<
"size = " << size << endl;
276 cout <<
"level = " << level << endl;
277 cout <<
"prefix_classify = " << prefix_classify << endl;
278 cout <<
"prefix_iso = " << prefix_iso << endl;
286 int f_use_database_for_starter =
TRUE;
289 cout <<
"isomorph_global::build_db before Iso.init" << endl;
292 f_use_database_for_starter,
293 f_implicit_fusion, verbose_level);
300 for (i = 0; i <= level; i++) {
302 cout <<
"isomorph_global::build_db creating level database for "
303 "level " << i <<
" / " << level << endl;
310 cout <<
"isomorph_global::build_db done" << endl;
317 int size, std::string &prefix_classify,
318 std::string &prefix_iso,
int level,
319 std::string *fname,
int nb_files,
320 int f_has_final_test_function,
321 int (*final_test_function)(
long int *data,
int sz,
322 void *final_test_data,
int verbose_level),
323 void *final_test_data,
326 int f_v = (verbose_level >= 1);
327 int f_implicit_fusion =
FALSE;
331 cout <<
"isomorph_global::read_solution_files" << endl;
332 cout <<
"nb_files = " << nb_files << endl;
333 cout <<
"prefix_classify = " << prefix_classify << endl;
334 cout <<
"prefix_iso = " << prefix_iso << endl;
342 int f_use_database_for_starter =
TRUE;
346 cout <<
"size = " << size << endl;
350 cout <<
"isomorph_global::read_solution_files "
351 "before Iso.init" << endl;
354 f_use_database_for_starter,
355 f_implicit_fusion, verbose_level);
360 cout <<
"isomorph_global::read_solution_files "
361 "before Iso.read_data_files_for_starter" << endl;
364 prefix_classify, verbose_level);
369 cout <<
"isomorph_global::read_solution_files "
370 "before Iso.count_solutions" << endl;
372 int f_get_statistics =
FALSE;
374 f_has_final_test_function,
375 final_test_function, final_test_data,
384 f_has_final_test_function,
385 final_test_function, final_test_data,
390 cout <<
"isomorph_global::read_solution_files done" << endl;
396 int size, std::string &prefix_classify,
397 std::string &prefix_iso,
int level,
398 int **Solutions,
int *Nb_sol,
int verbose_level)
400 int f_v = (verbose_level >= 1);
401 int f_implicit_fusion =
FALSE;
404 cout <<
"isomorph_global::init_solutions_from_memory" << endl;
405 cout <<
"prefix_classify = " << prefix_classify << endl;
406 cout <<
"prefix_iso = " << prefix_iso << endl;
414 int f_use_database_for_starter =
TRUE;
418 cout <<
"size = " << size << endl;
422 cout <<
"isomorph_global::init_solutions_from_memory "
423 "before Iso.init" << endl;
426 level, f_use_database_for_starter,
427 f_implicit_fusion, 0);
429 cout <<
"isomorph_global::init_solutions_from_memory "
430 "after Iso.init" << endl;
436 cout <<
"isomorph_global::init_solutions_from_memory "
437 "before Iso.read_data_files_for_starter" << endl;
443 cout <<
"isomorph_global::init_solutions_from_memory "
444 "after Iso.read_data_files_for_starter" << endl;
450 cout <<
"isomorph_global::init_solutions_from_memory "
451 "before Iso.init_solutions" << endl;
460 cout <<
"isomorph_global::init_solutions_from_memory "
461 "after Iso.init_solutions" << endl;
466 cout <<
"isomorph_global::init_solutions_from_memory done" << endl;
473 int size, std::string &prefix_classify, std::string &prefix_iso,
int level,
474 std::string *fname,
long int *list_of_cases,
int nb_files,
int verbose_level)
476 int f_v = (verbose_level >= 1);
477 int f_implicit_fusion =
FALSE;
480 cout <<
"isomorph_global::read_solution_files_from_clique_finder_case_by_case" << endl;
481 cout <<
"nb_files = " << nb_files << endl;
482 cout <<
"prefix_iso = " << prefix_iso << endl;
490 int f_use_database_for_starter =
TRUE;
494 cout <<
"size = " << size << endl;
498 cout <<
"isomorph_global::read_solution_files_from_clique_finder_case_by_case before Iso.init" << endl;
501 f_use_database_for_starter,
502 f_implicit_fusion, 0);
504 cout <<
"isomorph_global::read_solution_files_from_clique_finder_case_by_case after Iso.init" << endl;
509 cout <<
"isomorph_global::read_solution_files_from_clique_finder_case_by_case before Iso.read_data_files_"
510 "for_starter" << endl;
516 cout <<
"isomorph_global::read_solution_files_from_clique_finder_case_by_case after Iso.read_data_files_"
517 "for_starter" << endl;
523 cout <<
"isomorph_global::read_solution_files_from_clique_finder_case_by_case before Iso.count_solutions_"
524 "from_clique_finder" << endl;
528 list_of_cases, fname,
537 cout <<
"isomorph_global::read_solution_files_from_clique_finder_case_by_case before Iso.read_solutions_from_clique_"
538 "finder_case_by_case" << endl;
541 list_of_cases, fname, verbose_level - 1);
544 cout <<
"isomorph_global::read_solution_files_from_clique_finder_case_by_case after Iso.read_solutions_from_clique_"
545 "finder_case_by_case" << endl;
551 cout <<
"isomorph_global::read_solution_files_from_clique_finder_case_by_case done" << endl;
558 int size, std::string &prefix_classify, std::string &prefix_iso,
int level,
559 std::string *fname,
int nb_files,
int verbose_level)
561 int f_v = (verbose_level >= 1);
562 int f_implicit_fusion =
FALSE;
565 cout <<
"isomorph_global::read_solution_files_from_clique_finder" << endl;
566 cout <<
"nb_files = " << nb_files << endl;
567 cout <<
"prefix_iso = " << prefix_iso << endl;
575 int f_use_database_for_starter =
TRUE;
579 cout <<
"size = " << size << endl;
583 cout <<
"isomorph_global::read_solution_files_from_clique_finder "
584 "before Iso.init" << endl;
587 size, level, f_use_database_for_starter,
588 f_implicit_fusion, 0);
590 cout <<
"isomorph_global::read_solution_files_from_clique_finder "
591 "after Iso.init" << endl;
596 cout <<
"isomorph_global::read_solution_files_from_clique_finder "
597 "before Iso.read_data_files_for_starter" << endl;
603 cout <<
"isomorph_global::read_solution_files_from_clique_finder "
604 "after Iso.read_data_files_for_starter" << endl;
610 cout <<
"isomorph_global::read_solution_files_from_clique_finder "
611 "before Iso.count_solutions_from_clique_finder" << endl;
623 cout <<
"isomorph_global::read_solution_files_from_clique_finder "
624 "before Iso.read_solutions_from_clique_finder" << endl;
627 fname, verbose_level - 1);
629 cout <<
"isomorph_global::read_solution_files_from_clique_finder "
630 "after Iso.read_solutions_from_clique_finder" << endl;
636 cout <<
"isomorph_global::read_solution_files_from_clique_finder "
644 int size, std::string &prefix_classify,
645 std::string &prefix_iso,
int level,
int verbose_level)
647 int f_v = (verbose_level >= 1);
648 int f_implicit_fusion =
FALSE;
651 cout <<
"isomorph_global::compute_orbits" << endl;
659 int f_use_database_for_starter =
TRUE;
663 cout <<
"isomorph_global::compute_orbits before Iso.init" << endl;
666 f_use_database_for_starter,
667 f_implicit_fusion, verbose_level);
670 cout <<
"isomorph_global::compute_orbits after Iso.init" << endl;
676 cout <<
"isomorph_global::compute_orbits before Iso.read_data_files_for_starter" << endl;
679 prefix_classify, verbose_level);
681 cout <<
"isomorph_global::compute_orbits after Iso.read_data_files_for_starter" << endl;
685 cout <<
"isomorph_global::compute_orbits before Iso.init_solution" << endl;
689 cout <<
"isomorph_global::compute_orbits after Iso.init_solution" << endl;
693 cout <<
"isomorph_global::compute_orbits before Iso.orbits_of_stabilizer" << endl;
697 cout <<
"isomorph_global::compute_orbits after Iso.orbits_of_stabilizer" << endl;
701 cout <<
"isomorph_global::compute_orbits before Iso.write_orbit_data" << endl;
705 cout <<
"isomorph_global::compute_orbits after Iso.write_orbit_data" << endl;
712 cout <<
"isomorph_global::compute_orbits done" << endl;
719 int size, std::string &prefix_classify,
720 std::string &prefix_iso,
int level,
721 int f_play_back, std::string &old_event_file,
722 int print_mod,
int verbose_level)
724 int f_v = (verbose_level >= 1);
725 int f_implicit_fusion =
FALSE;
734 cout <<
"isomorph_global::isomorph_testing" << endl;
742 int f_use_database_for_starter =
FALSE;
747 cout <<
"isomorph_global::isomorph_testing before Iso.init" << endl;
752 f_use_database_for_starter,
759 prefix_classify, verbose_level - 1);
771 cout <<
"isomorph_global::isomorph_testing before Iso.gen->recreate_schreier_"
772 "vectors_up_to_level" << endl;
780 for (i = 0; i <= level + 1; i++) {
781 cout <<
"gen->first_node_at_level[" << i <<
"]="
788 cout <<
"Node 28:" << endl;
794 int f_implicit_fusion =
FALSE;
802 cout <<
"isomorph_global::isomorph_testing before Iso.isomorph_testing" << endl;
805 f_implicit_fusion, print_mod, verbose_level);
807 cout <<
"isomorph_global::isomorph_testing after Iso.isomorph_testing" << endl;
811 cout <<
"isomorph_global::isomorph_testing before Iso.Reps->save" << endl;
815 cout <<
"isomorph_global::isomorph_testing after Iso.Reps->save" << endl;
819 long int data1[1000];
826 fname.assign(prefix_iso);
827 fname.append(
"orbits.txt");
831 fp <<
"# " << Iso.
size << endl;
832 for (orbit = 0; orbit < Iso.
Reps->
count; orbit++) {
839 cout <<
"read representative of orbit " << orbit
840 <<
" (id=" <<
id <<
")" << endl;
846 for (i = 0; i < Iso.
size; i++) {
847 cout << setw(8) << data1[i] <<
", ";
852 for (i = 0; i < Iso.
size; i++) {
853 fp <<
" " << data1[i];
867 cout <<
"Written file " << fname <<
" of size "
880 cout <<
"isomorph_global::isomorph_testing done" << endl;
886 int size, std::string &prefix_classify,
887 std::string &prefix_iso,
int level,
890 int f_v = (verbose_level >= 1);
891 int f_implicit_fusion =
FALSE;
899 cout <<
"isomorph_global::classification_graph" << endl;
907 int f_use_database_for_starter =
FALSE;
911 cout <<
"isomorph_global::classification_graph "
912 "before Iso.init" << endl;
917 f_use_database_for_starter,
924 prefix_classify, verbose_level);
937 cout <<
"isomorph_global::classification_graph done" << endl;
944 int size, std::string &prefix_classify,
945 std::string &prefix_iso,
int level,
946 int identify_nb_files, std::string *fname,
int *Iso_type,
947 int f_save,
int verbose_level)
949 int f_v = (verbose_level >= 1);
950 int f_implicit_fusion =
FALSE;
953 string fname_transporter;
959 cout <<
"isomorph_global::identify" << endl;
967 int f_use_database_for_starter =
FALSE;
972 cout <<
"isomorph_global::identify before Iso.init" << endl;
976 f_use_database_for_starter,
983 prefix_classify, verbose_level);
988 for (i = 0; i < identify_nb_files; i++) {
992 cout <<
"isomorph_global::identify read file " << fname[i] << endl;
993 cout <<
"the_set = ";
999 fname_transporter.assign(
"transporter_");
1000 fname_transporter.append(fname[i]);
1005 cout <<
"isomorph_identify before Iso.identify" << endl;
1007 Iso_type[i] = Iso.
identify(the_set,
1008 f_implicit_fusion, verbose_level - 2);
1010 cout <<
"isomorph_identify after Iso.identify" << endl;
1017 f2 = fopen(fname_transporter,
"wb");
1024 fname_transporter, 0 );
1026 cout <<
"isomorph_identify written file " << fname_transporter
1027 <<
" of size " << Fio.
file_size(fname_transporter) << endl;
1032 cout <<
"isomorph_global::identify The set in " << fname[i]
1033 <<
" belongs to isomorphism type " << Iso_type[i] << endl;
1041 cout <<
"isomorph_global::identify Summary:" << endl;
1042 for (i = 0; i < identify_nb_files; i++) {
1043 cout << i <<
" : " << fname[i] <<
" : " << Iso_type[i] << endl;
1049 cout <<
"isomorph_global::identify done" << endl;
1054 int size, std::string &prefix_classify,
1055 std::string &prefix_iso,
int level,
1056 int nb_rows,
long int *Table,
int *Iso_type,
1060 int f_v = (verbose_level >= 1);
1061 int f_implicit_fusion =
FALSE;
1069 cout <<
"isomorph_global::identify_table" << endl;
1077 int f_use_database_for_starter =
FALSE;
1081 cout <<
"isomorph_global::identify_table before Iso.init" << endl;
1085 f_use_database_for_starter,
1094 prefix_classify, verbose_level);
1103 for (i = 0; i < nb_rows; i++) {
1108 cout <<
"isomorph_global::identify_table "
1109 "Identifying set no " << i << endl;
1110 cout <<
"the_set = ";
1118 cout <<
"isomorph_global::identify_table "
1119 "before Iso.identify" << endl;
1121 Iso_type[i] = Iso.
identify(the_set,
1122 f_implicit_fusion, verbose_level - 2);
1124 cout <<
"isomorph_global::identify_table "
1125 "after Iso.identify" << endl;
1131 cout <<
"isomorph_global::identify_table The set no " << i
1132 <<
" belongs to isomorphism type "
1133 << Iso_type[i] << endl;
1141 cout <<
"isomorph_global::identify_table Summary:" << endl;
1142 for (i = 0; i < nb_rows; i++) {
1143 cout << i <<
" : " << Iso_type[i] << endl;
1149 cout <<
"isomorph_global::identify_table done" << endl;
1154 int size, std::string &prefix_classify, std::string &prefix_iso,
1155 void (*work_callback)(
isomorph *Iso,
void *data,
int verbose_level),
1157 int level,
int verbose_level)
1159 int f_v = (verbose_level >= 1);
1162 cout <<
"isomorph_global::worker" << endl;
1163 cout <<
"isomorph_global::worker size=" << size << endl;
1164 cout <<
"isomorph_global::worker level=" << level << endl;
1172 int f_use_database_for_starter =
FALSE;
1173 int f_implicit_fusion =
FALSE;
1176 cout <<
"isomorph_global::worker before Iso.init" << endl;
1178 Iso.
init(prefix_iso,
1181 f_use_database_for_starter,
1186 cout <<
"isomorph_global::worker after Iso.init" << endl;
1190 cout <<
"isomorph_global::worker before Iso.read_everything_including_classification" << endl;
1193 prefix_classify, verbose_level);
1195 cout <<
"isomorph_global::worker after Iso.read_everything_including_classification" << endl;
1202 cout <<
"isomorph_global::worker before Iso.setup_and_open_solution_database" << endl;
1206 cout <<
"isomorph_global::worker after Iso.setup_and_open_solution_database" << endl;
1209 cout <<
"isomorph_global::worker before Iso.setup_and_open_level_database" << endl;
1213 cout <<
"isomorph_global::worker after Iso.setup_and_open_level_database" << endl;
1220 select_len, verbose_level);
1225 cout <<
"isomorph_global::worker before work_callback" << endl;
1227 (*work_callback)(&Iso, work_data, verbose_level);
1229 cout <<
"isomorph_global::worker after work_callback" << endl;
1241 cout <<
"isomorph_global::worker done" << endl;
1246 int size, std::string &prefix_classify, std::string &prefix,
1247 int level,
int verbose_level)
1249 int f_v = (verbose_level >= 1);
1252 cout <<
"isomorph_global::compute_down_orbits "
1253 "level = " << level << endl;
1254 cout <<
"isomorph_compute_down_orbits "
1255 "verbose_level = " << verbose_level << endl;
1258 size, prefix_classify, prefix,
1259 callback_compute_down_orbits_worker,
1261 level, verbose_level);
1263 cout <<
"isomorph_global::compute_down_orbits done" << endl;
1269 int &cnt_orbits,
int &cnt_special_orbits,
1270 int *&special_orbit_identify,
int verbose_level)
1272 int f_v = (verbose_level >= 1);
1273 int f_vv = (verbose_level >= 2);
1274 int f_vvv = (verbose_level >= 3);
1276 long int data[1000];
1281 cout <<
"isomorph_global::compute_down_orbits_for_isomorphism_type "
1282 "orbit=" << orbit << endl;
1286 cnt_special_orbits = 0;
1302 cout <<
"isomorph_global::compute_down_orbits_for_isomorphism_type "
1303 "computing induced action on the set (in data)" << endl;
1314 cout <<
"data after induced_action_on_set:" << endl;
1324 cout <<
"action " << Iso->
AA->
label <<
" computed, "
1325 "group order is " << go1 << endl;
1327 cout <<
"Order of the group that is induced on the object is ";
1330 cout <<
"$\\\\" << endl;
1335 cnt_special_orbits = 1;
1338 long int *orbit_reps;
1342 cout <<
"isomorph_global::compute_down_orbits_for_isomorphism_type "
1343 "orbit=" << orbit <<
" / " << Iso->
Reps->
count
1344 <<
" computing orbits on subsets" << endl;
1354 Iso->
level, orbit_reps, nb_orbits, verbose_level - 5);
1358 cout <<
"isomorph_global::compute_down_orbits_for_isomorphism_type "
1359 "orbit=" << orbit <<
" / " << Iso->
Reps->
count
1360 <<
" computing orbits on subsets done" << endl;
1364 cout <<
"Orbit reps: nb_orbits=" << nb_orbits << endl;
1369 cout <<
"Number of orbits on $" << Iso->
level <<
"$-sets is "
1370 << nb_orbits <<
".\\\\" << endl;
1373 long int *rearranged_set;
1377 int f_implicit_fusion =
FALSE;
1383 cnt_orbits = nb_orbits;
1384 cnt_special_orbits = 0;
1385 special_orbit_identify =
NEW_int(nb_orbits);
1386 for (u = 0; u < nb_orbits; u++) {
1389 cout <<
"iso type " << orbit <<
" / " << Iso->
Reps->
count
1390 <<
" down_orbit " << u <<
" / "
1391 << nb_orbits <<
":" << endl;
1399 data, orbit_reps + u * Iso->
level, rearranged_set,
1405 int f_failure_to_find_point, f_found;
1408 case_nb = Iso->
trace_set(rearranged_set, transporter,
1409 f_implicit_fusion, f_failure_to_find_point,
1415 if (f_failure_to_find_point) {
1416 cout <<
"isomorph_global::compute_down_orbits_for_isomorphism_type "
1417 "f_failure_to_find_point" << endl;
1425 f_implicit_fusion, orbit_no0,
1426 f_failure_to_find_point, 3 );
1432 cout <<
"isomorph_global::compute_down_orbits_for_isomorphism_type not found" << endl;
1438 cout <<
"iso type " << orbit <<
" / " << Iso->
Reps->
count
1439 <<
" down orbit " << u <<
" / " << nb_orbits
1440 <<
" leads to orbit " << idx << endl;
1443 special_orbit_identify[cnt_special_orbits] = idx;
1444 cnt_special_orbits++;
1447 cout <<
"Number of special orbits on $" << Iso->
level
1448 <<
"$-sets is " << cnt_special_orbits
1455 soi =
NEW_int(cnt_special_orbits);
1456 for (i = 0; i < cnt_special_orbits; i++) {
1457 soi[i] = special_orbit_identify[i];
1460 special_orbit_identify = soi;
1470 cout <<
"isomorph_global::compute_down_orbits_for_isomorphism_type "
1477 char *label_of_structure_plural, std::ostream &f,
1480 int f_v = (verbose_level >= 1);
1488 cout <<
"isomorph_global::report_data_in_source_code_inside_tex" << endl;
1491 selection =
NEW_int(selection_size);
1492 for (i = 0; i < selection_size; i++) {
1497 label_of_structure_plural, f,
1498 selection_size, selection, verbose_level);
1505 char *label_of_structure_plural, std::ostream &fp,
1506 int selection_size,
int *selection,
1509 int f_v = (verbose_level >= 1);
1510 int f_vv = (verbose_level >= 2);
1512 int h, rep, first, id, i, s;
1513 long int data[1000];
1516 cout <<
"isomorph_global::report_data_in_source_code_inside_tex_with_selection" << endl;
1519 fp <<
"\\section{The " << label_of_structure_plural
1520 <<
" in Numeric Form}" << endl << endl;
1523 for (s = 0; s < selection_size; s++) {
1530 for (i = 0; i < Iso.
size; i++) {
1532 if (i < Iso.
size - 1) {
1536 fp <<
"\\\\" << endl;
1538 fp <<
"\\begin{verbatim}" << endl << endl;
1539 fp <<
"int " << prefix <<
"_size = " << Iso.
size <<
";" << endl;
1540 fp <<
"int " << prefix <<
"_nb_reps = " << selection_size <<
";" << endl;
1541 fp <<
"int " << prefix <<
"_reps[] = {" << endl;
1542 for (s = 0; s < selection_size; s++) {
1550 for (i = 0; i < Iso.
size; i++) {
1557 fp <<
"const char *" << prefix <<
"_stab_order[] = {" << endl;
1558 for (s = 0; s < selection_size; s++) {
1572 fp <<
"\"," << endl;
1577 fp <<
"\"," << endl;
1583 int *stab_gens_first;
1587 stab_gens_first =
NEW_int(selection_size);
1588 stab_gens_len =
NEW_int(selection_size);
1590 fp <<
"int " << prefix <<
"_stab_gens[] = {" << endl;
1591 for (s = 0; s < selection_size; s++) {
1601 cout <<
"isomorph_global::report_data_in_source_code_inside_tex_with_selection before extract_strong_"
1602 "generators_in_order" << endl;
1607 stab_gens_first[s] = fst;
1608 stab_gens_len[s] = gens->
len;
1611 for (j = 0; j < gens->
len; j++) {
1613 cout <<
"isomorph_global::report_data_in_source_code_inside_tex_with_selection before extract_strong_"
1614 "generators_in_order generator " << j
1615 <<
" / " << gens->
len << endl;
1626 fp <<
"int " << prefix <<
"_stab_gens_fst[] = { ";
1627 for (s = 0; s < selection_size; s++) {
1628 fp << stab_gens_first[s];
1629 if (s < selection_size - 1) {
1634 fp <<
"int " << prefix <<
"_stab_gens_len[] = { ";
1635 for (s = 0; s < selection_size; s++) {
1636 fp << stab_gens_len[s];
1637 if (s < selection_size - 1) {
1642 fp <<
"int " << prefix <<
"_make_element_size = "
1645 fp <<
"\\end{verbatim}" << endl << endl;
1648static void callback_compute_down_orbits_worker(
1649 isomorph *Iso,
void *data,
int verbose_level)
1651 int f_v = (verbose_level >= 1);
1652 int f_vv = (verbose_level >= 2);
1656 int nb_special_orbits = 0;
1657 int **Down_orbit_identify;
1663 cout <<
"callback_compute_down_orbits_worker" << endl;
1665 isomorph_global *IG = (isomorph_global *) data;
1670 for (orbit = 0; orbit < Iso->
Reps->
count; orbit++) {
1672 int cnt_orbits, cnt_special_orbits;
1673 int *special_orbit_identify;
1675 IG->compute_down_orbits_for_isomorphism_type(
1676 Iso, orbit, cnt_orbits, cnt_special_orbits,
1677 special_orbit_identify, verbose_level - 1);
1680 cout <<
"callback_compute_down_orbits_worker orbit "
1682 <<
" cnt_orbits=" << cnt_orbits
1683 <<
" cnt_special_orbits=" << cnt_special_orbits << endl;
1685 Nb_orbits[orbit * 2 + 0] = cnt_orbits;
1686 Nb_orbits[orbit * 2 + 1] = cnt_special_orbits;
1687 Down_orbit_identify[orbit] = special_orbit_identify;
1689 nb_orbits += cnt_orbits;
1690 nb_special_orbits += cnt_special_orbits;
1693 if (orbit && ((orbit % 100) == 0)) {
1694 registry_dump_sorted();
1703 fname.assign(
"Nb_down_orbits.csv");
1708 cout <<
"callback_compute_down_orbits_worker" << endl;
1709 cout <<
"nb_orbits=" << nb_orbits << endl;
1710 cout <<
"nb_special_orbits=" << nb_special_orbits << endl;
1713 Down_identify =
NEW_int(nb_special_orbits * 3);
1715 for (orbit = 0; orbit < Iso->
Reps->
count; orbit++) {
1716 for (i = 0; i < Nb_orbits[orbit * 2 + 1]; i++) {
1717 idx = Down_orbit_identify[orbit][i];
1718 Down_identify[h * 3 + 0] = orbit;
1719 Down_identify[h * 3 + 1] = i;
1720 Down_identify[h * 3 + 2] = idx;
1728 fname.assign(
"Down_identify.csv");
1732 for (orbit = 0; orbit < Iso->
Reps->
count; orbit++) {
1733 FREE_int(Down_orbit_identify[orbit]);
1739 cout <<
"callback_compute_down_orbits_worker done" << endl;
a collection of combinatorial functions
long int int_n_choose_k(int n, int k)
a collection of functions related to sorted vectors
void rearrange_subset_lint_all(int n, int k, long int *set, long int *subset, long int *rearranged_set, int verbose_level)
for reading and writing of csv files
void read_spreadsheet(std::string &fname, int verbose_level)
long int get_int(int i, int j)
int find_by_column(const char *join_by)
a collection of functions related to file io
void int_matrix_write_csv(std::string &fname, int *M, int m, int n)
long int file_size(std::string &fname)
void int_matrix_write_csv_with_labels(std::string &fname, int *M, int m, int n, const char **column_label)
void read_set_from_file(std::string &fname, long int *&the_set, int &set_size, int verbose_level)
interface to system functions
a class to represent arbitrary precision integers
std::ostream & print_not_scientific(std::ostream &ost)
a permutation group in a fixed action.
void element_print_for_make_element(void *elt, std::ostream &ost)
void element_one(void *elt, int verbose_level)
void element_write_file_fp(int *Elt, std::ofstream &fp, int verbose_level)
void group_order(ring_theory::longinteger_object &go)
void element_write_file(int *Elt, std::string &fname, int verbose_level)
to hold a vector of group elements
a permutation group represented via a stabilizer chain
void extract_strong_generators_in_order(data_structures_groups::vector_ge &SG, int *tl, int verbose_level)
void group_order(ring_theory::longinteger_object &go)
a strong generating set for a permutation group with respect to a fixed action
void init_from_sims(groups::sims *S, int verbose_level)
void report_data_in_source_code_inside_tex(isomorph &Iso, const char *prefix, char *label_of_structure_plural, std::ostream &f, int verbose_level)
void compute_down_orbits(int size, std::string &prefix_classify, std::string &prefix, int level, int verbose_level)
void read_solution_files(int size, std::string &prefix_classify, std::string &prefix_iso, int level, std::string *fname, int nb_files, int f_has_final_test_function, int(*final_test_function)(long int *data, int sz, void *final_test_data, int verbose_level), void *final_test_data, int verbose_level)
void init_solutions_from_memory(int size, std::string &prefix_classify, std::string &prefix_iso, int level, int **Solutions, int *Nb_sol, int verbose_level)
void read_solution_files_from_clique_finder(int size, std::string &prefix_classify, std::string &prefix_iso, int level, std::string *fname, int nb_files, int verbose_level)
void init(actions::action *A_base, actions::action *A, poset_classification::poset_classification *gen, int verbose_level)
void identify_table(int size, std::string &prefix_classify, std::string &prefix_iso, int level, int nb_rows, long int *Table, int *Iso_type, int verbose_level)
void report_data_in_source_code_inside_tex_with_selection(isomorph &Iso, const char *prefix, char *label_of_structure_plural, std::ostream &fp, int selection_size, int *selection, int verbose_level)
void worker(int size, std::string &prefix_classify, std::string &prefix_iso, void(*work_callback)(isomorph *Iso, void *data, int verbose_level), void *work_data, int level, int verbose_level)
void build_db(int size, std::string &prefix_classify, std::string &prefix_iso, int level, int verbose_level)
void read_statistic_files(int size, std::string &prefix_classify, std::string &prefix, int level, std::string *fname, int nb_files, int verbose_level)
poset_classification::poset_classification * gen
void compute_down_orbits_for_isomorphism_type(isomorph *Iso, int orbit, int &cnt_orbits, int &cnt_special_orbits, int *&special_orbit_identify, int verbose_level)
void identify(int size, std::string &prefix_classify, std::string &prefix_iso, int level, int identify_nb_files, std::string *fname, int *Iso_type, int f_save, int verbose_level)
void compute_orbits(int size, std::string &prefix_classify, std::string &prefix_iso, int level, int verbose_level)
void read_solution_files_from_clique_finder_case_by_case(int size, std::string &prefix_classify, std::string &prefix_iso, int level, std::string *fname, long int *list_of_cases, int nb_files, int verbose_level)
void classification_graph(int size, std::string &prefix_classify, std::string &prefix_iso, int level, int verbose_level)
void isomorph_testing(int size, std::string &prefix_classify, std::string &prefix_iso, int level, int f_play_back, std::string &old_event_file, int print_mod, int verbose_level)
classification of combinatorial objects using subobjects
int identify(long int *set, int f_implicit_fusion, int verbose_level)
void read_orbit_data(int verbose_level)
void write_classification_matrix(int verbose_level)
void read_solutions_from_clique_finder(int nb_files, std::string *fname, int verbose_level)
void isomorph_testing(int t0, int f_play_back, std::string &play_back_file_name, int f_implicit_fusion, int print_mod, int verbose_level)
void write_orbit_data(int verbose_level)
int find_extension_easy_new(long int *set, int case_nb, int &idx, int verbose_level)
int trace_set(long int *canonical_set, int *transporter, int f_implicit_fusion, int &f_failure_to_find_point, int verbose_level)
void setup_and_open_solution_database(int verbose_level)
void count_solutions_from_clique_finder_case_by_case(int nb_files, long int *list_of_cases, std::string *fname, int verbose_level)
void build_up_database(int nb_files, std::string *fname, int f_has_final_test_function, int(*final_test_function)(long int *data, int sz, void *final_test_data, int verbose_level), void *final_test_data, int verbose_level)
void write_classification_graph(int verbose_level)
void iso_test_init(int verbose_level)
void decomposition_matrix(int verbose_level)
void read_starter_nb_orbits(int verbose_level)
int identify_solution_relaxed(long int *set, int *transporter, int f_implicit_fusion, int &orbit_no, int &f_failure_to_find_point, int verbose_level)
void read_data_files_for_starter(int level, std::string &prefix, int verbose_level)
void read_everything_including_classification(std::string &prefix_classify, int verbose_level)
void load_solution(int id, long int *data)
void init_solution(int verbose_level)
void induced_action_on_set(groups::sims *S, long int *set, int verbose_level)
poset_classification::poset_classification * gen
void print_isomorphism_types(int f_select, int select_first, int select_len, int verbose_level)
void setup_and_open_level_database(int verbose_level)
void(* print_set_function)(isomorph *Iso, int iso_cnt, groups::sims *Stab, groups::schreier &Orb, long int *data, void *print_set_data, int verbose_level)
void init(std::string &prefix, actions::action *A_base, actions::action *A, poset_classification::poset_classification *gen, int size, int level, int f_use_database_for_starter, int f_implicit_fusion, int verbose_level)
void create_level_database(int level, int verbose_level)
void init_solutions(int **Solutions, int *Nb_sol, int verbose_level)
void close_level_database(int verbose_level)
void load_table_of_solutions(int verbose_level)
void close_solution_database(int verbose_level)
void orbits_of_stabilizer(int verbose_level)
void count_solutions_from_clique_finder(int nb_files, std::string *fname, int verbose_level)
void read_solutions_from_clique_finder_case_by_case(int nb_files, long int *list_of_cases, std::string *fname, int verbose_level)
void count_solutions(int nb_files, std::string *fname, int f_get_statistics, int f_has_final_test_function, int(*final_test_function)(long int *data, int sz, void *final_test_data, int verbose_level), void *final_test_data, int verbose_level)
to control the behavior of the poset classification algorithm
the poset classification algorithm
void print_node(int node)
int first_node_at_level(int i)
void recreate_schreier_vectors_up_to_level(int lvl, int verbose_level)
a poset with a group action on it
void init_subset_lattice(actions::action *A, actions::action *A2, groups::strong_generators *Strong_gens, int verbose_level)
void orbits_on_k_sets(poset_classification_control *Control, int k, long int *&orbit_reps, int &nb_orbits, int verbose_level)
void save(int verbose_level)
#define Lint_vec_copy(A, B, C)
#define Lint_matrix_print(A, B, C)
#define Int_vec_zero(A, B)
#define Lint_vec_print(A, B, C)
#define NEW_OBJECTS(type, n)
#define Int_vec_copy(A, B, C)
the orbiter library for the classification of combinatorial objects