18namespace layer4_classification {
19namespace poset_classification {
31 nb_poset_orbit_nodes_used = 0;
32 nb_poset_orbit_nodes_allocated = 0;
33 poset_orbit_nodes_increment = 0;
34 poset_orbit_nodes_increment_last = 0;
37 first_poset_orbit_node_at_level = NULL;
38 nb_extension_nodes_at_level_total = NULL;
39 nb_extension_nodes_at_level = NULL;
40 nb_fusion_nodes_at_level = NULL;
41 nb_unprocessed_nodes_at_level = NULL;
54 cout <<
"poset_of_orbits::exit_poset_orbit_node" << endl;
59 cout <<
"poset_of_orbits::exit_poset_orbit_node deleting root" << endl;
63 cout <<
"poset_of_orbits::exit_poset_orbit_node after deleting root" << endl;
67 if (first_poset_orbit_node_at_level) {
68 FREE_lint(first_poset_orbit_node_at_level);
69 first_poset_orbit_node_at_level = NULL;
72 if (nb_extension_nodes_at_level_total) {
73 FREE_lint(nb_extension_nodes_at_level_total);
74 nb_extension_nodes_at_level_total = NULL;
76 if (nb_extension_nodes_at_level) {
78 nb_extension_nodes_at_level = NULL;
80 if (nb_fusion_nodes_at_level) {
82 nb_fusion_nodes_at_level = NULL;
84 if (nb_unprocessed_nodes_at_level) {
86 nb_unprocessed_nodes_at_level = NULL;
104 int nb_poset_orbit_nodes,
int sz,
int max_set_size,
long int t0,
107 int f_v = (verbose_level >= 1);
110 cout <<
"poset_of_orbits::init" << endl;
113 poset_of_orbits::PC = PC;
114 poset_of_orbits::sz = sz;
115 poset_of_orbits::max_set_size = max_set_size;
116 poset_of_orbits::t0 = t0;
118 nb_poset_orbit_nodes_used = 0;
119 nb_poset_orbit_nodes_allocated = 0;
122 nb_poset_orbit_nodes,
126 cout <<
"poset_of_orbits::init done" << endl;
132 int nb_poset_orbit_nodes,
int verbose_level)
134 int f_v = (verbose_level >= 1);
138 cout <<
"poset_of_orbits::init_poset_orbit_node" << endl;
141 for (i = 0; i < nb_poset_orbit_nodes; i++) {
144 nb_poset_orbit_nodes_allocated = nb_poset_orbit_nodes;
145 nb_poset_orbit_nodes_used = 0;
146 poset_orbit_nodes_increment = nb_poset_orbit_nodes;
147 poset_orbit_nodes_increment_last = nb_poset_orbit_nodes;
148 first_poset_orbit_node_at_level =
NEW_lint(sz + 2);
149 first_poset_orbit_node_at_level[0] = 0;
150 first_poset_orbit_node_at_level[1] = 1;
154 nb_extension_nodes_at_level_total =
NEW_lint(sz + 1);
155 nb_extension_nodes_at_level =
NEW_lint(sz + 1);
156 nb_fusion_nodes_at_level =
NEW_lint(sz + 1);
157 nb_unprocessed_nodes_at_level =
NEW_lint(sz + 1);
158 for (i = 0; i < sz + 1; i++) {
159 nb_extension_nodes_at_level_total[i] = 0;
160 nb_extension_nodes_at_level[i] = 0;
161 nb_fusion_nodes_at_level[i] = 0;
162 nb_unprocessed_nodes_at_level[i] = 0;
165 cout <<
"poset_of_orbits::init_poset_orbit_node done" << endl;
173 long int increment_new;
175 int verbose_level = 0;
177 increment_new = poset_orbit_nodes_increment + poset_orbit_nodes_increment_last;
180 length = nb_poset_orbit_nodes_allocated +
181 poset_orbit_nodes_increment;
183 if (length > (1L << 31) - 1) {
184 long int length_wanted;
186 length_wanted = length;
187 length = (1L << 31) - 1;
188 cout <<
"poset_of_orbits::reallocate reducing length from " << length_wanted <<
" to " << length << endl;
189 poset_orbit_nodes_increment = length_wanted - nb_poset_orbit_nodes_allocated;
191 cout <<
"poset_of_orbits::reallocate from " << nb_poset_orbit_nodes_allocated <<
" to " << length << endl;
193 poset_orbit_nodes_increment_last = poset_orbit_nodes_increment;
194 poset_orbit_nodes_increment = increment_new;
201 int f_v = (verbose_level >= 1);
206 cout <<
"poset_of_orbits::reallocate_to" << endl;
208 if (new_number_of_nodes <= nb_poset_orbit_nodes_allocated) {
209 cout <<
"poset_of_orbits::reallocate_to "
210 "new_number_of_nodes <= "
211 "nb_poset_orbit_nodes_allocated" << endl;
215 cout <<
"poset_of_orbits::reallocate_to from "
216 << nb_poset_orbit_nodes_allocated
217 <<
" to " << new_number_of_nodes << endl;
220 for (i = 0; i < nb_poset_orbit_nodes_allocated; i++) {
221 new_root[i] = root[i];
226 nb_poset_orbit_nodes_allocated = new_number_of_nodes;
228 cout <<
"poset_of_orbits::reallocate_to done" << endl;
234 return nb_poset_orbit_nodes_allocated;
239 return nb_extension_nodes_at_level_total[level];
244 nb_poset_orbit_nodes_used = value;
249 return first_poset_orbit_node_at_level[i];
254 first_poset_orbit_node_at_level[i] = value;
259 return root + node_idx;
281 f = first_poset_orbit_node_at_level[level];
282 l = first_poset_orbit_node_at_level[level + 1] - f;
291 f = first_poset_orbit_node_at_level[level];
294 for (i = 0; i < l; i++) {
304 f = first_poset_orbit_node_at_level[level];
305 return root + f + node;
314 int node,
long int *set,
int &size)
321 int level,
int orbit,
long int *set,
int &size)
325 node = first_poset_orbit_node_at_level[level] + orbit;
332 long int pt,
int verbose_level)
338 if (root[node_idx].get_E(i)->get_pt() == pt) {
342 if (i == root[node_idx].get_nb_of_extensions()) {
352 nb_extension_nodes_at_level_total[lvl] = 0;
353 for (prev = first_poset_orbit_node_at_level[lvl];
354 prev < first_poset_orbit_node_at_level[lvl + 1];
357 nb_extension_nodes_at_level_total[lvl] +=
361 nb_unprocessed_nodes_at_level[lvl] =
362 nb_extension_nodes_at_level_total[lvl];
363 nb_fusion_nodes_at_level[lvl] = 0;
364 nb_extension_nodes_at_level[lvl] = 0;
365 return nb_extension_nodes_at_level_total[lvl];
371 ((
double)(nb_fusion_nodes_at_level[lvl] +
372 nb_extension_nodes_at_level[lvl])) /
373 (double) nb_extension_nodes_at_level_total[lvl];
377 int node,
int cur_ext,
int type,
int verbose_level)
383 cout <<
"poset_classification::change_extension_type trying to install "
384 "extension node, fatal: root[node].get_E(cur_ext)->type != "
385 "EXTENSION_TYPE_UNPROCESSED && root[node].get_E(cur_ext)->type "
386 "!= EXTENSION_TYPE_PROCESSING" << endl;
387 cout <<
"root[node].get_E(cur_ext)->get_type()="
391 nb_extension_nodes_at_level[level]++;
392 nb_unprocessed_nodes_at_level[level]--;
398 cout <<
"poset_classification::change_extension_type trying to install "
399 "fusion node, fatal: root[node].E[cur_ext].get_type() != "
400 "EXTENSION_TYPE_UNPROCESSED" << endl;
401 cout <<
"root[node].get_E(cur_ext)->get_type()="
405 nb_fusion_nodes_at_level[level]++;
406 nb_unprocessed_nodes_at_level[level]--;
412 int &nb_rows,
int &nb_cols,
int verbose_level)
414 int f_v = (verbose_level >= 1);
418 cout <<
"poset_of_orbits::get_table_of_nodes "
419 "nb_poset_orbit_nodes_used="
420 << nb_poset_orbit_nodes_used << endl;
422 nb_rows = nb_poset_orbit_nodes_used;
424 Table =
NEW_lint(nb_poset_orbit_nodes_used * nb_cols);
426 for (i = 0; i < nb_poset_orbit_nodes_used; i++) {
429 cout <<
"poset_of_orbits::get_table_of_nodes "
431 <<
" / " << nb_poset_orbit_nodes_used << endl;
434 Table[i * nb_cols + 0] = root[i].
get_level(PC);
436 Table[i * nb_cols + 2] = root[i].
get_pt();
441 Table[i * nb_cols + 3] = go.
as_int();
446 cout <<
"poset_of_orbits::get_table_of_nodes done" << endl;
452 int node_local,
int verbose_level)
454 int f_v = (verbose_level >= 1);
459 cout <<
"poset_of_orbits::count_live_points" << endl;
462 if (!root[node].has_Schreier_vector()) {
474 for (i = 0; i < lvl; i++) {
477 cout << setw(5) << i <<
" : " << setw(10)
478 << nb_extension_nodes_at_level[i] <<
" : "
479 << setw(10) << nb_fusion_nodes_at_level[i] <<
" : "
480 << setw(10) << nb_extension_nodes_at_level_total[i] <<
" : "
481 << setw(10) << nb_unprocessed_nodes_at_level[i];
491 cout <<
"poset_classification::print_tree "
492 "nb_poset_orbit_nodes_used="
493 << nb_poset_orbit_nodes_used << endl;
494 for (i = 0; i < nb_poset_orbit_nodes_used; i++) {
501 int f_v = (verbose_level >= 1);
505 cout <<
"poset_of_orbits::init_root_node_from_base_case" << endl;
509 cout <<
"poset_of_orbits::init_root_node_from_base_case Base_case == NULL" << endl;
513 first_poset_orbit_node_at_level[0] = 0;
518 root[0].nb_strong_generators = 0;
519 root[0].Schreier_vector = NULL;
529 nb_extension_nodes_at_level_total[i] = 0;
530 nb_extension_nodes_at_level[i] = 0;
531 nb_fusion_nodes_at_level[i] = 0;
532 nb_unprocessed_nodes_at_level[i] = 0;
535 cout <<
"poset_of_orbits::init_root_node_from_base_case "
536 "initializing node at level " << i << endl;
538 first_poset_orbit_node_at_level[i + 1] =
539 first_poset_orbit_node_at_level[i] + 1;
542 root[i].nb_extensions = 1;
550 root[i + 1].node = i + 1;
551 root[i + 1].prev = i;
552 root[i + 1].pt = Base_case->orbit_rep[i];
553 root[i + 1].nb_strong_generators = 0;
554 root[i + 1].Schreier_vector = NULL;
563 cout <<
"poset_of_orbits::init_root_node_from_base_case "
564 "storing strong poset_classifications" << endl;
570 cout <<
"i : first_poset_orbit_node_at_level[i]" << endl;
578 cout <<
"poset_of_orbits::init_root_node_from_base_case done" << endl;
584 int f_v = (verbose_level >= 1);
587 cout <<
"poset_of_orbits::init_root_node" << endl;
592 cout <<
"poset_of_orbits::init_root_node before init_root_node_from_base_case" << endl;
596 cout <<
"poset_of_orbits::init_root_node after init_root_node_from_base_case" << endl;
602 cout <<
"poset_of_orbits::init_root_node before root[0].init_root_node" << endl;
606 cout <<
"poset_of_orbits::init_root_node after root[0].init_root_node" << endl;
610 cout <<
"poset_of_orbits::init_root_node done" << endl;
616 int f_v = (verbose_level >= 1);
619 cout <<
"poset_of_orbits::make_tabe_of_nodes" << endl;
622 int nb_rows, nb_cols;
627 nb_rows, nb_cols, 0 );
630 fname.append(
"_table_of_orbits.csv");
635 cout <<
"poset_classification::post_processing written file " << fname
636 <<
" of size " << Fio.
file_size(fname) << endl;
643 cout <<
"poset_of_orbits::make_tabe_of_nodes done" << endl;
649 int *&perm,
int *&perm_inv,
int verbose_level)
651 int f_v = (verbose_level >= 1);
656 cout <<
"poset_of_orbits::poset_orbit_node_depth_breadth_perm_and_inverse" << endl;
657 cout <<
"max_depth = " << max_depth << endl;
662 cout <<
"N = first_poset_orbit_node_at_level[max_depth + 1] = "
670 cout <<
"calling root->poset_orbit_node_"
671 "depth_breadth_perm_and_inverse" << endl;
675 max_depth, idx, 0, 0, perm, perm_inv);
678 cout <<
"poset_of_orbits::poset_orbit_node_depth_breadth_perm_and_inverse done" << endl;
684 int &depth_completed,
688 int f_v = (verbose_level >= 1);
692 int version, magic_sync;
695 cout <<
"poset_of_orbits::read_memory_object, "
696 "data size (in chars) = " << m->
used_length << endl;
698 nb_group_elements = 0;
701 cout <<
"poset_of_orbits::read_memory_object "
702 "version = " << version <<
" unknown" << endl;
707 cout <<
"poset_of_orbits::read_memory_object "
708 "depth_completed = " << depth_completed << endl;
711 if (depth_completed > sz) {
712 cout <<
"poset_of_orbits::read_memory_object "
713 "depth_completed > sz" << endl;
718 cout <<
"poset_of_orbits::read_memory_object "
719 "before m->read_int" << endl;
723 cout <<
"poset_of_orbits::read_memory_object "
724 "nb_nodes = " << nb_nodes << endl;
729 if (nb_nodes > nb_poset_orbit_nodes_allocated) {
733 for (i = 0; i <= depth_completed + 1; i++) {
734 m->
read_lint(&first_poset_orbit_node_at_level[i]);
743 one_percent = (int)((
double) nb_nodes * 0.01);
745 cout <<
"poset_of_orbits::read_memory_object "
746 " one_percent = " << one_percent <<
" nodes" << endl;
749 for (i = 0; i < nb_nodes; i++) {
750 if (nb_nodes > 1000) {
751 if ((i % one_percent) == 0) {
761 cout <<
" : " << i / one_percent <<
" percent done, "
762 " node=" << i <<
" / " << nb_nodes <<
" "
763 "nb_group_elements=" << nb_group_elements << endl;
772 cout <<
"poset_of_orbits::read_memory_object "
773 "reading nodes completed" << endl;
777 cout <<
"poset_of_orbits::read_memory_object "
778 "could not read MAGIC_SYNC, file is corrupt" << endl;
781 nb_poset_orbit_nodes_used = nb_nodes;
783 cout <<
"poset_of_orbits::read_memory_object finished ";
784 cout <<
"depth_completed=" << depth_completed
785 <<
", with " << nb_nodes <<
" nodes"
786 <<
" and " << nb_group_elements <<
" group elements"
796 int f_v = (verbose_level >= 1);
802 cout <<
"poset_of_orbits::write_memory_object "
803 << nb_nodes <<
" nodes" << endl;
805 nb_group_elements = 0;
809 for (i = 0; i <= depth_completed + 1; i++) {
813 cout <<
"poset_of_orbits::write_memory_object "
814 " writing " << nb_nodes <<
" node" << endl;
818 int verbose_level_down = 0;
821 one_percent = (int)((
double) nb_nodes * 0.01);
823 cout <<
"poset_of_orbits::write_memory_object "
824 " one_percent = " << one_percent <<
" nodes" << endl;
827 for (i = 0; i < nb_nodes; i++) {
828 if (nb_nodes > 1000) {
829 if ((i % one_percent) == 0) {
839 cout <<
" : " << i / one_percent <<
" percent done, "
840 " node=" << i <<
" / " << nb_nodes <<
" "
841 "nb_group_elements=" << nb_group_elements << endl;
846 verbose_level_down );
850 cout <<
"poset_of_orbits::write_memory_object "
851 " done, written " << nb_group_elements
852 <<
" group elements" << endl;
855 cout <<
"poset_of_orbits::write_memory_object "
856 "finished, data size (in chars) = "
864 int f_v = (verbose_level >= 1);
870 cout <<
"poset_of_orbits::calc_size_on_file "
871 "depth_completed=" << depth_completed << endl;
876 s +=
sizeof(
long int);
880 for (i = 0; i <= depth_completed + 1; i++) {
881 s +=
sizeof(
long int);
883 for (i = 0; i < nb_nodes; i++) {
888 cout <<
"poset_of_orbits::calc_size_on_file "
889 "depth_completed=" << depth_completed
890 <<
" s=" << s << endl;
896 int level, std::ifstream &fp,
897 int f_split,
int split_mod,
int split_case,
898 int f_recreate_extensions,
int f_dont_keep_sv,
902 int f_v = (verbose_level >= 1);
909 cout <<
"poset_of_orbits::read_sv_level_file_binary2 "
910 << nb_nodes <<
" nodes" << endl;
911 cout <<
"f_recreate_extensions="
912 << f_recreate_extensions << endl;
913 cout <<
"f_dont_keep_sv=" << f_dont_keep_sv << endl;
915 cout <<
"f_split is TRUE, split_mod=" << split_mod
916 <<
" split_case=" << split_case << endl;
921 fp.read((
char *) &I,
sizeof(
int));
924 cout <<
"poset_of_orbits::read_sv_level_file_binary2: "
925 "unknown file version" << endl;
928 fp.read((
char *) &I,
sizeof(
int));
931 cout <<
"poset_of_orbits::read_sv_level_file_binary2: "
932 "level does not match" << endl;
935 fp.read((
char *) &I,
sizeof(
int));
938 cout <<
"poset_of_orbits::read_sv_level_file_binary2: "
939 "nb_nodes does not match" << endl;
942 for (i = 0; i < nb_nodes; i++) {
944 if ((i % split_mod) != split_case)
948 if (f_recreate_extensions) {
952 if (f_dont_keep_sv) {
958 fp.read((
char *) &I,
sizeof(
int));
961 cout <<
"poset_of_orbits::read_sv_level_file_binary2: "
962 "MAGIC_SYNC does not match" << endl;
967 cout <<
"poset_of_orbits::read_sv_level_file_binary2 "
973 int level, std::ofstream &fp,
974 int f_split,
int split_mod,
int split_case,
977 int f, i, nb_nodes, tmp;
978 int f_v = (verbose_level >= 1);
984 cout <<
"poset_of_orbits::write_sv_level_file_binary2 "
985 << nb_nodes <<
" nodes" << endl;
989 fp.write((
char *) &tmp,
sizeof(
int));
991 fp.write((
char *) &level,
sizeof(
int));
993 fp.write((
char *) &nb_nodes,
sizeof(
int));
995 for (i = 0; i < nb_nodes; i++) {
997 if ((i % split_mod) != split_case)
1003 fp.write((
char *) &tmp,
sizeof(
int));
1007 cout <<
"poset_of_orbits::write_sv_level_file_binary2 "
1014 int level, std::ifstream &fp,
1015 int &nb_group_elements,
int verbose_level)
1017 int f, i, nb_nodes, magic_sync;
1018 int f_v = (verbose_level >= 1);
1019 int f_vv = (verbose_level >= 2);
1024 cout <<
"poset_of_orbits::read_level_file_binary2" << endl;
1027 nb_group_elements = 0;
1028 fp.read((
char *) &I,
sizeof(
int));
1030 cout <<
"poset_of_orbits::read_level_file_binary2 "
1031 "version = " << I <<
" unknown" << endl;
1035 fp.read((
char *) &I,
sizeof(
int));
1037 cout <<
"poset_of_orbits::read_level_file_binary2 "
1038 "level = " << I <<
" should be " << level << endl;
1042 fp.read((
char *) &nb_nodes,
sizeof(
int));
1044 cout <<
"poset_of_orbits::read_level_file_binary, "
1045 "nb_nodes = " << nb_nodes << endl;
1047 first_poset_orbit_node_at_level[level + 1] = f + nb_nodes;
1050 cout <<
"poset_of_orbits::read_level_file_binary2 "
1051 "f + nb_nodes = " << f + nb_nodes << endl;
1052 cout <<
"poset_of_orbits::read_level_file_binary2 "
1053 "nb_poset_orbit_nodes_allocated = "
1054 << nb_poset_orbit_nodes_allocated << endl;
1056 if (f + nb_nodes > nb_poset_orbit_nodes_allocated) {
1059 for (i = 0; i < nb_nodes; i++) {
1060 if (f_vv && nb_nodes > 1000 && ((i % 1000) == 0)) {
1061 cout <<
"reading node " << i << endl;
1067 cout <<
"reading nodes completed" << endl;
1069 fp.read((
char *) &magic_sync,
sizeof(
int));
1071 cout <<
"poset_of_orbits::read_level_file_binary2 "
1072 "could not read MAGIC_SYNC, file is corrupt" << endl;
1074 cout <<
"we read =" << magic_sync << endl;
1078 cout <<
"poset_of_orbits::read_level_file_binary2 "
1080 cout <<
"level=" << level
1081 <<
", with " << nb_nodes <<
" nodes"
1082 <<
" and " << nb_group_elements <<
" group elements"
1088 int level, std::ofstream &fp,
1089 int &nb_group_elements,
int verbose_level)
1091 int f, i, nb_nodes, tmp;
1098 cout <<
"poset_of_orbits::write_level_file_binary2 "
1099 << nb_nodes <<
" nodes" << endl;
1101 nb_group_elements = 0;
1104 fp.write((
char *) &tmp,
sizeof(
int));
1105 fp.write((
char *) &level,
sizeof(
int));
1106 fp.write((
char *) &nb_nodes,
sizeof(
int));
1107 for (i = 0; i < nb_nodes; i++) {
1109 nb_group_elements, verbose_level - 2);
1112 fp.write((
char *) &tmp,
sizeof(
int));
1115 cout <<
"poset_of_orbits::write_level_file_binary2 "
1121 const char *fname_base,
1122 int lvl,
int t0,
int verbose_level)
1124 int f_v = (verbose_level >= 1);
1129 cout <<
"poset_of_orbits::write_candidates_binary_using_sv "
1130 "lvl=" << lvl <<
" fname_base=" << fname_base << endl;
1138 int total_nb_cand = 0;
1141 int i, j, node, nb, pos;
1147 cout <<
"poset_of_orbits::write_candidates_binary_using_sv "
1148 "first node at level " << lvl <<
" is " << fst << endl;
1149 cout <<
"poset_of_orbits::write_candidates_binary_using_sv "
1150 "number of nodes at level " << lvl <<
" is " << len << endl;
1154 for (i = 0; i < len; i++) {
1156 if (!root[node].has_Schreier_vector()) {
1157 cout <<
"poset_of_orbits::write_candidates_binary_using_sv "
1158 "node " << i <<
" / " << len
1159 <<
" no schreier vector" << endl;
1164 cout <<
"poset_of_orbits::write_candidates_binary_using_sv "
1165 "node " << i <<
" / " << len << endl;
1169 total_nb_cand += nb;
1172 cout <<
"poset_of_orbits::write_candidates_binary_using_sv "
1173 "total_nb_cand=" << total_nb_cand << endl;
1177 for (i = 0; i < len; i++) {
1181 cand_first[i] = pos;
1183 for (j = 0; j < nb; j++) {
1184 Cand[pos + j] = subset[j];
1191 cout <<
"poset_of_orbits::write_candidates_binary_using_sv "
1192 "writing file" << fname << endl;
1195 ofstream fp(fname, ios::binary);
1197 fp.write((
char *) &len,
sizeof(
int));
1198 for (i = 0; i < len; i++) {
1199 fp.write((
char *) &nb_cand[i],
sizeof(
int));
1200 fp.write((
char *) &cand_first[i],
sizeof(
int));
1202 for (i = 0; i < len; i++) {
1206 for (j = 0; j < nb; j++) {
1207 fp.write((
char *) &subset[j],
sizeof(
int));
1212 cout <<
"Written file " << fname <<
" of size "
1217 cout <<
"poset_of_orbits::write_candidates_binary_using_sv "
1218 "written file " << fname <<
" of size "
1228 cout <<
"poset_of_orbits::write_candidates_binary_using_sv "
1234 std::string &fname,
int verbose_level)
1236 int f_v = (verbose_level >= 1);
1237 int f_vv = (verbose_level >= 2);
1242 int nb_nodes, first_at_level;
1248 cout <<
"poset_of_orbits::read_level_file "
1249 "fname=" << fname << endl;
1253 data, sets, set_sizes, verbose_level - 1);
1257 nb_nodes = first_at_level + nb_cases;
1259 if (nb_nodes > nb_poset_orbit_nodes_allocated) {
1261 cout <<
"poset_of_orbits::read_level_file "
1262 "reallocating to " << nb_nodes <<
" nodes" << endl;
1266 first_poset_orbit_node_at_level[level + 1] = nb_nodes;
1267 for (i = 0; i < nb_cases; i++) {
1268 I = first_at_level + i;
1271 cout << setw(10) << i <<
" : ";
1278 cout <<
"J=" << J << endl;
1283 O->pt = sets[i][level - 1];
1284 O->nb_strong_generators = 0;
1285 O->hdl_strong_generators = NULL;
1287 O->nb_extensions = 0;
1289 O->Schreier_vector = NULL;
1291 O->
init_node(I , J , sets[i][level - 1] , verbose_level);
1299 if (strlen(data[i])) {
1308 cout <<
"the automorphism group has order ";
1318 cout <<
"and is strongly generated by the "
1319 "following " << Aut.
SG->
len <<
" elements:" << endl;
1325 cout <<
"strong poset_classifications stored" << endl;
1339 cout <<
"poset_of_orbits::read_level_file "
1340 "fname=" << fname <<
" done" << endl;
1345 std::string &fname_base,
int lvl,
int t0,
1348 int f_v = (verbose_level >= 1);
1354 fname1.assign(fname_base);
1355 sprintf(str,
"_lvl_%d_candidates.txt", lvl);
1365 PC, lvl, f, verbose_level - 2);
1375 cout <<
"written file " << fname1
1376 <<
" of size " << Fio.
file_size(fname1) << endl;
1381 int lvl,
long int *&Data,
int &nb_reps,
int verbose_level)
1383 int f_v = (verbose_level >= 1);
1386 cout <<
"poset_of_orbits::get_orbit_reps_at_level" << endl;
1395 for (i = 0; i < nb_reps; i++) {
1400 cout <<
"poset_of_orbits::get_orbit_reps_at_level done" << endl;
1405 std::string &fname_base,
1409 int f_v = (verbose_level >= 1);
1414 cout <<
"poset_of_orbits::write_orbit_reps_at_level" << endl;
1422 lvl, Data, nb_reps, verbose_level);
1430 f <<
"Row,REP" << endl;
1431 for (i = 0; i < nb_reps; i++) {
1437 f <<
"," << S << endl;
1443 cout <<
"poset_of_orbits::write_orbit_reps_at_level Written file "
1444 << fname1 <<
" of size " << Fio.
file_size(fname1) << endl;
1449 cout <<
"poset_of_orbits::write_orbit_reps_at_level done" << endl;
1455 std::string &fname_base,
1456 int lvl,
int t0,
int f_with_stabilizer_generators,
1460 int f_v = (verbose_level >= 1);
1476 f <<
"# " << lvl << endl;
1477 for (i = 0; i < len; i++) {
1479 lvl, f, f_with_stabilizer_generators,
1482 f <<
"-1 " << len <<
" "
1490 cout <<
"written file " << fname1
1491 <<
" of size " << Fio.
file_size(fname1) << endl;
1496 std::ostream &f,
int lvl,
int t0,
1497 int f_with_stabilizer_generators,
int f_long_version,
1509 f <<
"# " << lvl << endl;
1510 for (i = 0; i < len; i++) {
1512 f_with_stabilizer_generators, f_long_version);
1525 std::ostream &f,
int f_recurse,
int verbose_level)
1527 int f_v = (verbose_level >= 1);
1533 cout <<
"poset_classification::log_nodes_for_treefile "
1534 "cur=" << cur << endl;
1550 depth + 1, f,
TRUE, verbose_level);
1558 int lvl,
int verbose_level)
1560 int f_v = (verbose_level >= 1);
1566 cout <<
"poset_classification::save_representatives_at_level_to_csv" << endl;
1569 ofstream ost(fname);
1576 ost <<
"ROW,REP,AGO,OL" << endl;
1577 for (i = 0; i < l; i++) {
1603 ost <<
"END" << endl;
1611 cout <<
"Written file " << fname <<
" of size " << Fio.
file_size(fname) << endl;
1615 cout <<
"poset_classification::save_representatives_at_level_to_csv done" << endl;
void create_string_with_quotes(std::string &str, long int *v, int len)
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)
void read_and_parse_data_file(std::string &fname, int &nb_cases, char **&data, long int **&sets, int *&set_sizes, int verbose_level)
for serialization of complex data types
void read_lint(long int *i)
void write_lint(long int i)
data_structures::lint_vec * Lint_vec
interface to system functions
void time_check(std::ostream &ost, int t0)
void time_check_delta(std::ostream &ost, int dt)
a class to represent arbitrary precision integers
a container data structure for groups
void init_ascii_coding(const char *ascii_coding, int verbose_level)
void print_group_order(std::ostream &ost)
void schreier_sims(int verbose_level)
void init(actions::action *A, int verbose_level)
void decode_ascii(int verbose_level)
void print(std::ostream &ost)
a strong generating set for a permutation group with respect to a fixed action
void init_from_sims(groups::sims *S, int verbose_level)
groups::strong_generators * Stab_gens
represents a flag in the poset classification algorithm; related to poset_orbit_node
the poset classification algorithm
void print_node(int node)
void make_fname_candidates_file_default(char *fname2000, int level)
void orbit_length(int orbit_at_level, int level, ring_theory::longinteger_object &len)
void make_fname_lvl_file(std::string &fname, std::string &fname_base, int lvl)
poset_with_group_action * get_poset()
void compute_and_print_automorphism_group_orders(int lvl, std::ostream &ost)
int nb_orbits_at_level(int level)
std::string & get_problem_label_with_path()
classification_base_case * get_Base_case()
void make_fname_lvl_reps_file(std::string &fname, std::string &fname_base, int lvl)
int find_poset_orbit_node_for_set(int len, long int *set, int f_tolerant, int verbose_level)
void print_problem_label()
void read_sv_level_file_binary2(int level, std::ifstream &fp, int f_split, int split_mod, int split_case, int f_recreate_extensions, int f_dont_keep_sv, int verbose_level)
void write_candidates_binary_using_sv(const char *fname_base, int lvl, int t0, int verbose_level)
void read_level_file_binary2(int level, std::ifstream &fp, int &nb_group_elements, int verbose_level)
void write_level_file_binary2(int level, std::ofstream &fp, int &nb_group_elements, int verbose_level)
void poset_orbit_node_depth_breadth_perm_and_inverse(int max_depth, int *&perm, int *&perm_inv, int verbose_level)
void write_lvl(std::ostream &f, int lvl, int t0, int f_with_stabilizer_generators, int f_long_version, int verbose_level)
long int count_extension_nodes_at_level(int lvl)
int count_live_points(int level, int node_local, int verbose_level)
void save_representatives_at_level_to_csv(std::string &fname, int lvl, int verbose_level)
void make_tabe_of_nodes(int verbose_level)
int find_extension_from_point(int node_idx, long int pt, int verbose_level)
void init_poset_orbit_node(int nb_poset_orbit_nodes, int verbose_level)
long int get_nb_poset_orbit_nodes_allocated()
void write_memory_object(int depth_completed, orbiter_kernel_system::memory_object *m, int &nb_group_elements, int verbose_level)
long int nb_flag_orbits_up_at_level(int level)
poset_orbit_node * get_node_ij(int level, int node)
long int calc_size_on_file(int depth_completed, int verbose_level)
int node_get_nb_of_extensions(int node)
void read_memory_object(int &depth_completed, orbiter_kernel_system::memory_object *m, int &nb_group_elements, int verbose_level)
void get_set(int node, long int *set, int &size)
void log_nodes_for_treefile(int cur, int depth, std::ostream &f, int f_recurse, int verbose_level)
void write_sv_level_file_binary2(int level, std::ofstream &fp, int f_split, int split_mod, int split_case, int verbose_level)
void reallocate_to(long int new_number_of_nodes, int verbose_level)
poset_orbit_node * get_node(int node_idx)
void write_orbit_reps_at_level(std::string &fname_base, int lvl, int verbose_level)
void print_progress_by_level(int lvl)
void get_orbit_reps_at_level(int lvl, long int *&Data, int &nb_reps, int verbose_level)
long int get_nb_extension_nodes_at_level_total(int level)
void write_lvl_file(std::string &fname_base, int lvl, int t0, int f_with_stabilizer_generators, int f_long_version, int verbose_level)
void read_level_file(int level, std::string &fname, int verbose_level)
void change_extension_type(int level, int node, int cur_ext, int type, int verbose_level)
int nb_orbits_at_level(int level)
void init_root_node_from_base_case(int verbose_level)
int first_node_at_level(int i)
void get_table_of_nodes(long int *&Table, int &nb_rows, int &nb_cols, int verbose_level)
void write_lvl_file_with_candidates(std::string &fname_base, int lvl, int t0, int verbose_level)
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)
double level_progress(int lvl)
void set_first_node_at_level(int i, int value)
void set_nb_poset_orbit_nodes_used(int value)
to represent one poset orbit; related to the class poset_classification
extension * get_E(int idx)
long int calc_size_on_file(actions::action *A, int verbose_level)
void init_node(int node, int prev, long int pt, int verbose_level)
void log_current_node(poset_classification *gen, int s, std::ostream &f, int f_with_stabilizer_poset_classifications, int verbose_level)
void read_memory_object(poset_classification *PC, actions::action *A, orbiter_kernel_system::memory_object *m, int &nb_group_elements, int verbose_level)
void sv_read_file(poset_classification *PC, std::ifstream &fp, int verbose_level)
void write_memory_object(poset_classification *PC, actions::action *A, orbiter_kernel_system::memory_object *m, int &nb_group_elements, int verbose_level)
int get_node_in_level(poset_classification *gen)
void delete_Schreier_vector()
void poset_orbit_node_depth_breadth_perm_and_inverse(poset_classification *gen, int max_depth, int &idx, int hdl, int cur_depth, int *perm, int *perm_inv)
void compute_schreier_vector(poset_classification *gen, int lvl, int verbose_level)
void write_file(actions::action *A, std::ofstream &fp, int &nb_group_elements, int verbose_level)
void store_strong_generators(poset_classification *gen, groups::strong_generators *Strong_gens)
void reconstruct_extensions_from_sv(poset_classification *gen, int verbose_level)
int get_nb_of_live_points()
long int get_stabilizer_order_lint(poset_classification *PC)
int depth_of_node(poset_classification *gen)
void get_stabilizer_order(poset_classification *gen, ring_theory::longinteger_object &go)
void sv_write_file(poset_classification *PC, std::ofstream &fp, int verbose_level)
int get_level(poset_classification *gen)
void log_current_node_with_candidates(poset_classification *gen, int lvl, std::ostream &f, int verbose_level)
void read_file(actions::action *A, std::ifstream &fp, int &nb_group_elements, int verbose_level)
void store_set_to(poset_classification *gen, int i, long int *to)
int get_nb_of_extensions()
int get_nb_of_orbits_under_stabilizer()
void allocate_E(int nb_extensions, int verbose_level)
void init_root_node(poset_classification *gen, int verbose_level)
#define Lint_vec_print(A, B, C)
#define NEW_OBJECTS(type, n)
orbiter_kernel_system::orbiter_session * Orbiter
global Orbiter session
the orbiter library for the classification of combinatorial objects
#define EXTENSION_TYPE_PROCESSING
#define EXTENSION_TYPE_FUSION
#define EXTENSION_TYPE_UNPROCESSED
#define EXTENSION_TYPE_EXTENSION