18namespace layer4_classification {
21 int f_implicit_fusion,
int &orbit_no,
22 int &f_failure_to_find_point,
int verbose_level)
29 int f_v = (verbose_level >= 1);
30 int f_vv = (verbose_level >= 2);
31 int i, id, id0, orbit, case_nb;
35 f_failure_to_find_point =
FALSE;
42 <<
" isomorph::identify_solution_relaxed: ";
57 <<
" isomorph::identify_solution_relaxed "
58 "calling trace : " << endl;
61 f_implicit_fusion, f_failure_to_find_point,
64 if (f_failure_to_find_point) {
67 <<
" isomorph::identify_solution_relaxed "
68 "after trace: trace_set returns "
69 "f_failure_to_find_point" << endl;
75 <<
" isomorph::identify_solution_relaxed "
80 cout <<
"canonical_set:" << endl;
83 for (i = 0; i <
size; i++) {
84 cout << setw(5) << i <<
" : " << setw(6)
96 <<
" isomorph::identify_solution_relaxed "
100 cout <<
"solution is identified as id=" <<
id << endl;
103 orbit, Elt, verbose_level - 2);
117 <<
" isomorph::identify_solution_relaxed "
121 cout <<
"did not find extension" << endl;
135 size, set, data, verbose_level - 2)) {
136 cout <<
"isomorph::identify_solution_relaxed, "
137 "check fails, stop" << endl;
146 <<
" isomorph::identify_solution_relaxed "
150 cout <<
"id0 = " << id0 <<
" orbit=" << orbit << endl;
153 cout <<
"id0 != orbit_perm[orbit_fst[orbit]]" << endl;
154 cout <<
"id0=" << id0 << endl;
155 cout <<
"orbit=" << orbit << endl;
156 cout <<
"orbit_fst[orbit]=" <<
orbit_fst[orbit] << endl;
157 cout <<
"orbit_perm[orbit_fst[orbit]]="
163 <<
" isomorph::identify_solution_relaxed "
167 cout <<
"solution is identified as id=" <<
id << endl;
176 int f_implicit_fusion,
int &f_failure_to_find_point,
185 int f_v = (verbose_level >= 1);
186 int f_vv = (verbose_level >= 2);
187 int id, id0, orbit, case_nb, cnt = 0;
196 <<
" isomorph::identify_solution: ";
209 <<
" isomorph::identify_solution "
210 "calling trace, cnt = " << cnt <<
" : " << endl;
213 f_implicit_fusion, f_failure_to_find_point, verbose_level - 2);
214 if (f_failure_to_find_point) {
217 <<
" isomorph::identify_solution "
218 "trace returns f_failure_to_find_point" << endl;
224 <<
" isomorph::identify_solution "
237 verbose_level - 2)) {
240 <<
" isomorph::identify_solution "
244 cout <<
"solution is identified as id=" << id;
245 cout <<
" (with " << cnt <<
" iterations)" << endl;
250 <<
" isomorph::identify_solution "
253 cout <<
" : orbit_representative = " << id0 << endl;
267 <<
" isomorph::identify_solution "
271 cout <<
"did not find extension, we are now trying to "
272 "make the set smaller (iteration " << cnt
287 data, verbose_level - 2)) {
288 cout <<
"isomorph::identify_solution, "
289 "check fails, stop" << endl;
298 <<
" isomorph::identify_solution after trace: ";
301 cout <<
"id0 = " << id0 <<
" orbit=" << orbit << endl;
304 cout <<
"id0 != orbit_perm[orbit_fst[orbit]]" << endl;
305 cout <<
"id0=" << id0 << endl;
306 cout <<
"orbit=" << orbit << endl;
307 cout <<
"orbit_fst[orbit]=" <<
orbit_fst[orbit] << endl;
308 cout <<
"orbit_perm[orbit_fst[orbit]]="
314 <<
" isomorph::identify_solution after trace: ";
317 cout <<
"solution is identified as id=" <<
id
318 <<
" belonging to orbit " << orbit
319 <<
" with representative " << id0;
320 cout <<
" (" << cnt <<
" iterations)" << endl;
327 long int *canonical_set,
int *transporter,
328 int f_implicit_fusion,
int &f_failure_to_find_point,
335 int f_v = (verbose_level >= 1);
336 int f_vv = (verbose_level >= 2);
341 <<
" isomorph::trace_set" << endl;
342 cout <<
"verbose_level=" << verbose_level << endl;
344 cout <<
"size=" <<
size << endl;
345 cout <<
"level=" <<
level << endl;
349 f_implicit_fusion, f_failure_to_find_point, verbose_level - 1);
351 if (f_failure_to_find_point) {
354 <<
" isomorph::trace_set "
355 "failure to find point" << endl;
363 <<
" isomorph::trace_set the set traces to ";
369 <<
" isomorph::trace_set transporter:" << endl;
379 <<
" isomorph::trace_set, case_nb < 0, "
380 "case_nb = " << case_nb << endl;
387 long int *set,
int *transporter,
int verbose_level)
398 int f_v = (verbose_level >= 1);
399 int f_vv = (verbose_level >= 2);
411 <<
" isomorph::make_set_smaller: " << endl;
419 <<
" make_set_smaller_database case_nb_local = "
420 << case_nb_local <<
" n = " << n << endl;
428 gens, go, verbose_level);
436 <<
"isomorph::make_set_smaller a = " << a
437 <<
" m = " << m << endl;
448 <<
"isomorph::make_set_smaller the reordered set is ";
465 <<
"isomorph::make_set_smaller "
466 "the set is made smaller: " << endl;
474 cout <<
"isomorph::make_set_smaller: "
475 "error, something is wrong" << endl;
476 cout <<
"isomorph::make_set_smaller no stabilizer element maps "
477 "any element to something smaller" << endl;
480 cout <<
"j : set[j] : least image" << endl;
481 for (j = 0; j <
size; j++) {
484 cout << setw(4) << j <<
" " << setw(4) << a <<
" "
485 << setw(4) << b <<
" ";
487 cout <<
"smaller" << endl;
493 cout <<
"case_nb_local = " << case_nb_local << endl;
494 cout <<
"iso_node = " <<
iso_nodes << endl;
495 cout <<
"level = " <<
level << endl;
496 cout <<
"m = " << m << endl;
497 for (i = 0; i < gens.
len; i++) {
498 cout <<
"isomorph::make_set_smaller "
499 "generator " << i <<
":" << endl;
511 cout <<
"f=" << f <<
" l=" << l << endl;
512 for (i = 0; i < l; i++) {
517 cout << setw(4) <<
id <<
" : compare = " << c <<
" : ";
525 int cur_level,
int cur_node_global,
526 long int *canonical_set,
int *transporter,
527 int f_implicit_fusion,
int &f_failure_to_find_point,
534 int f_v = (verbose_level >= 1);
535 int f_vv = (verbose_level >= 2);
540 f_failure_to_find_point =
FALSE;
544 <<
" isomorph::trace_set_recursion ";
552 int *next_transporter;
566 <<
" isomorph::trace_set_recursion ";
569 cout <<
"after trace_starter" << endl;
579 <<
iso_nodes <<
" isomorph::trace_set_recursion ";
582 cout <<
"after trace_starter, calling trace_set_recursion "
587 f_implicit_fusion, f_failure_to_find_point, verbose_level);
592 <<
iso_nodes <<
" isomorph::trace_set_recursion ";
595 cout <<
"tracing point " << pt << endl;
596 cout <<
"calling trace_next_point" << endl;
600 f_failure_to_find_point, verbose_level - 2);
603 <<
iso_nodes <<
" isomorph::trace_set_recursion ";
606 cout <<
"after tracing point " << pt << endl;
610 if (f_failure_to_find_point) {
621 <<
iso_nodes <<
" isomorph::trace_set_recursion ";
624 cout <<
"trace_next_point returns FALSE" << endl;
636 <<
iso_nodes <<
" isomorph::trace_set_recursion ";
639 cout <<
"restarting the trace" << endl;
647 transporter, f_implicit_fusion, f_failure_to_find_point,
652 transporter, f_implicit_fusion, f_failure_to_find_point,
659 <<
iso_nodes <<
" isomorph::trace_set_recursion ";
662 cout <<
"point " << pt <<
" has been mapped to "
663 << pt0 <<
", calling handle_extension" << endl;
668 f_implicit_fusion, f_failure_to_find_point, verbose_level);
670 if (f_failure_to_find_point) {
677 <<
iso_nodes <<
" isomorph::trace_set_recursion ";
680 cout <<
"after handle_extension" << endl;
691 long int *canonical_set,
int *transporter,
692 int f_implicit_fusion,
int &f_failure_to_find_point,
699 int f_v = (verbose_level >= 1);
700 int f_vv = (verbose_level >= 2);
705 f_failure_to_find_point =
FALSE;
709 <<
" isomorph::trace_next_point ";
717 <<
" isomorph::trace_next_point ";
720 cout <<
"cur_level <= depth_completed" << endl;
725 cur_level, cur_node_global,
size,
728 f_implicit_fusion, f_failure_to_find_point, verbose_level - 2);
729 if (f_failure_to_find_point) {
730 cout <<
"isomorph::trace_next_point "
731 "f_failure_to_find_point" << endl;
733 <<
" isomorph::trace_next_point ";
736 cout <<
"cur_level <= depth_completed" << endl;
741 <<
" isomorph::trace_next_point after "
742 "O->trace_next_point_in_place, "
743 "return value ret = " << ret << endl;
749 <<
" isomorph::trace_next_point ";
752 cout <<
"cur_level is not <= depth_completed, "
753 "using database" << endl;
759 <<
" isomorph::trace_next_point ";
762 cout <<
"after trace_next_point_database, "
763 "return value ret = " << ret << endl;
768 <<
" isomorph::trace_next_point ";
771 cout <<
"returning FALSE" << endl;
788 int cur_level,
int cur_node_global,
789 long int *canonical_set,
int *Elt_transporter,
793 int f_v = (verbose_level >= 1);
794 int f_vv = (verbose_level >= 2);
795 int f_vvv = (verbose_level >= 3);
796 int cur_node_local, i;
804 <<
" isomorph::trace_next_point_database ";
824 <<
" isomorph::trace_next_point_database ";
827 cout <<
"v=" << *
v << endl;
829 for (i = 0; i < cur_level; i++) {
830 set[i] =
v->
s_ii(2 + i);
834 <<
" isomorph::trace_next_point_database ";
841 int nb_strong_generators;
844 nb_strong_generators =
v->
s_ii(pos++);
847 <<
" isomorph::trace_next_point_database ";
850 cout <<
"nb_strong_generators=" << nb_strong_generators << endl;
852 if (nb_strong_generators == 0) {
856 ref =
v->
s_ii(pos++);
859 <<
" isomorph::trace_next_point_database ";
862 cout <<
"ref = " << ref << endl;
869 gens.
allocate(nb_strong_generators, verbose_level - 2);
872 for (i = 0; i < nb_strong_generators; i++) {
882 <<
" isomorph::trace_next_point_database ";
885 cout <<
"computing least_image_of_point "
886 "for point " << pt << endl;
889 pt, tmp_ELT, verbose_level - 3);
892 <<
" isomorph::trace_next_point_database ";
895 cout <<
"least_image_of_point for point "
896 << pt <<
" returns " << image << endl;
900 <<
" isomorph::trace_next_point_database ";
903 cout <<
"image = " << image << endl;
912 cout <<
"applying:" << endl;
917 for (i = cur_level; i <
size; i++) {
933 <<
" isomorph::trace_next_point_database ";
939 cout <<
"done" << endl;
954 <<
" isomorph::trace_next_point_database ";
957 cout <<
"the set becomes lexicographically less, "
958 "we return FALSE" << endl;
968 int cur_level,
int cur_node_global,
969 long int *canonical_set,
int *Elt_transporter,
970 int f_implicit_fusion,
int &f_failure_to_find_point,
973 int f_v = (verbose_level >= 1);
974 int f_vv = (verbose_level >= 2);
975 int pt0, next_node_global;
981 <<
" isomorph::handle_extension node ";
983 cout <<
" taking care of point " << pt0 << endl;
989 <<
" isomorph::handle_extension calling "
990 "handle_extension_oracle" << endl;
995 f_failure_to_find_point, verbose_level);
998 <<
" isomorph::handle_extension "
999 " handle_extension_oracle returns "
1000 << next_node_global << endl;
1006 <<
" isomorph::handle_extension "
1007 "calling handle_extension_database" << endl;
1010 cur_level, cur_node_global,
1013 f_failure_to_find_point,
1017 <<
" isomorph::handle_extension "
1018 "handle_extension_database returns "
1019 << next_node_global << endl;
1022 return next_node_global;
1026 int cur_node_global,
1027 long int *canonical_set,
int *Elt_transporter,
1028 int f_implicit_fusion,
int &f_failure_to_find_point,
1031 int f_v = (verbose_level >= 1);
1032 int f_vv = (verbose_level >= 2);
1033 int f_vvv = (verbose_level >= 3);
1034 int i, pt0, pt, t = 0, d = 0;
1035 int pos, ref, nb_strong_generators, nb_extensions;
1036 int nb_fusion, next_node_global;
1042 <<
" isomorph::handle_extension_database "
1048 pos = 2 + cur_level;
1049 nb_strong_generators =
v->
s_ii(pos++);
1052 <<
" isomorph::handle_extension_database "
1056 cout <<
"nb_strong_generators = " << nb_strong_generators << endl;
1058 if (nb_strong_generators) {
1061 nb_extensions =
v->
s_ii(pos++);
1064 <<
" isomorph::handle_extension_database "
1068 cout <<
"nb_extensions = " << nb_extensions << endl;
1071 for (i = 0; i < nb_extensions; i++) {
1072 pt =
v->
s_ii(pos++);
1079 <<
" isomorph::handle_extension_database "
1083 cout <<
"we are in extension " << i << endl;
1091 if (i == nb_extensions) {
1093 <<
" isomorph::handle_extension_database "
1097 cout <<
"did not find point " << pt0
1098 <<
" in the list of extensions" << endl;
1102 ref =
v->
s_ii(pos++);
1105 <<
" isomorph::handle_extension_database "
1109 cout <<
"handle_extension_database ref = " << ref << endl;
1111 ref += nb_strong_generators;
1116 <<
" isomorph::handle_extension_database "
1121 cout <<
"point has been mapped to " << pt0
1122 <<
", next node is node " << d << endl;
1124 if (cur_level + 1 ==
level) {
1130 <<
" isomorph::handle_extension_database "
1134 cout <<
"calling trace_set_recursion for level "
1135 << cur_level + 1 <<
" and node " << d << endl;
1140 f_failure_to_find_point,
1147 cur_level, cur_node_global,
1153 <<
" isomorph::handle_extension_database "
1157 cout <<
"current_extension = " << i
1158 <<
" : fusion element has been applied";
1168 <<
" handle_extension_database cur_level = " << cur_level
1169 <<
" cur_node_global = " << cur_node_global <<
" : "
1170 <<
" current_extension = " << i
1171 <<
" : after sorting the initial part : ";
1179 <<
" isomorph::handle_extension_database "
1183 cout <<
"next_node=" ;
1186 return next_node_global;
1192 f_implicit_fusion, verbose_level - 1);
1196 cout <<
"handle_extension_database: illegal value of t" << endl;
1202 int cur_node_global,
1203 long int *canonical_set,
int *Elt_transporter,
1204 int f_implicit_fusion,
int &f_failure_to_find_point,
1208 int f_v = (verbose_level >= 1);
1209 int f_vv = (verbose_level >= 2);
1211 int pt0, current_extension, t, d, next_node_global;
1214 f_failure_to_find_point =
FALSE;
1217 <<
" isomorph::handle_extension_oracle "
1224 if (current_extension < 0) {
1226 <<
" isomorph::handle_extension_oracle "
1230 cout <<
"did not find point pt0=" << pt0 << endl;
1231 f_failure_to_find_point =
TRUE;
1236 <<
" isomorph::handle_extension_oracle "
1240 cout <<
"current_extension = " << current_extension << endl;
1245 <<
" isomorph::handle_extension_oracle "
1249 cout <<
"type = " << t << endl;
1254 <<
" isomorph::handle_extension_oracle "
1258 cout <<
"extension node" << endl;
1264 <<
" isomorph::handle_extension_oracle "
1269 cout <<
" point has been mapped to " << pt0
1270 <<
", next node is node " << d << endl;
1272 if (cur_level + 1 ==
level) {
1278 <<
" isomorph::handle_extension_oracle "
1282 cout <<
"calling trace_set_recursion for level "
1283 << cur_level + 1 <<
" and node " << d << endl;
1288 f_failure_to_find_point,
1296 <<
" isomorph::handle_extension_oracle "
1300 cout <<
"fusion node" << endl;
1309 <<
" isomorph::handle_extension_oracle "
1313 cout <<
"fusion element has been applied";
1322 <<
" isomorph::handle_extension_oracle "
1326 cout <<
" current_extension = " << current_extension
1327 <<
" : after sorting the initial part ";
1331 <<
" isomorph::handle_extension_oracle "
1332 <<
" before gen->find_oracle_node_for_set" << endl;
1339 <<
" isomorph::handle_extension_oracle "
1343 cout <<
"next_node=" ;
1347 return next_node_global;
1351 if (cur_level + 1 ==
level) {
1352 return next_node_global;
1357 <<
" isomorph::handle_extension_oracle "
1361 cout <<
"calling trace_set_recursion for level "
1362 << cur_level + 1 <<
" and node " << next_node_global << endl;
1367 f_failure_to_find_point, verbose_level);
1379 f_implicit_fusion, verbose_level);
1386 <<
" isomorph::handle_extension_oracle "
1390 cout <<
"current_extension = " << current_extension <<
" : ";
1391 cout <<
"unknown type " << t << endl;
1396 int cur_level,
int cur_node_global,
1397 int current_extension,
long int *canonical_set,
1398 int *Elt_transporter,
int ref,
1401 int f_v = (verbose_level >= 1);
1406 <<
"isomorph::apply_isomorphism_database "
1410 cout <<
"ref = " << ref << endl;
1432 int cur_level,
int cur_node_global,
1433 int current_extension,
long int *canonical_set,
int *Elt_transporter,
1436 int f_v = (verbose_level >= 1);
1442 <<
" apply_isomorphism_oracle node ";
1444 cout <<
" : " << endl;
long int minimum(long int *v, int len)
a collection of functions related to sorted vectors
int lint_vec_compare(long int *p, long int *q, int len)
void lint_vec_heapsort(long int *v, int len)
data_structures::lint_vec * Lint_vec
a class to represent arbitrary precision integers
void ith_object(int i, int btree_idx, Vector &the_object, int verbose_level)
void element_print(void *elt, std::ostream &ost)
int coded_elt_size_in_char
void element_retrieve(int hdl, void *elt, int verbose_level)
void mult_apply_from_the_right(void *a, void *b)
void map_a_set(long int *set, long int *image_set, int n, int *Elt, int verbose_level)
void element_mult(void *a, void *b, void *ab, int verbose_level)
int check_if_transporter_for_set(int *Elt, int size, long int *set1, long int *set2, int verbose_level)
void element_one(void *elt, int verbose_level)
void element_read_file_fp(int *Elt, std::ifstream &fp, int verbose_level)
int least_image_of_point(data_structures_groups::vector_ge &strong_generators, int pt, int *transporter, int verbose_level)
void element_move(void *a, void *b, int verbose_level)
void element_print_as_permutation(void *elt, std::ostream &ost)
void map_a_set_and_reorder(long int *set, long int *image_set, int n, int *Elt, int verbose_level)
long int element_image_of(long int a, void *elt, int verbose_level)
to hold a vector of group elements
void allocate(int length, int verbose_level)
void init(actions::action *A, int verbose_level)
int trace_set_recursion(int cur_level, int cur_node_global, long int *canonical_set, int *transporter, int f_implicit_fusion, int &f_failure_to_find_point, int verbose_level)
int * make_set_smaller_Elt2
int nb_times_make_set_smaller_called
int trace_set(long int *canonical_set, int *transporter, int f_implicit_fusion, int &f_failure_to_find_point, int verbose_level)
int identify_solution(long int *set, int *transporter, int f_implicit_fusion, int &f_failure_to_find_point, int verbose_level)
int * make_set_smaller_Elt1
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 make_set_smaller(int case_nb_local, long int *set, int *transporter, int verbose_level)
void load_solution(int id, long int *data)
int find_extension_easy(long int *set, int case_nb, int &idx, int verbose_level)
void print_node_local(int level, int node_local)
void apply_isomorphism_oracle(int cur_level, int cur_node_global, int current_extension, long int *canonical_set, int *Elt_transporter, int verbose_level)
void load_strong_generators(int cur_level, int cur_node_local, data_structures_groups::vector_ge &gens, ring_theory::longinteger_object &go, int verbose_level)
void orbit_representative(int i, int &i0, int &orbit, int *transporter, int verbose_level)
poset_classification::poset_classification * gen
int * trace_set_recursion_Elt1
void prepare_database_access(int cur_level, int verbose_level)
void apply_isomorphism_database(int cur_level, int cur_node_global, int current_extension, long int *canonical_set, int *Elt_transporter, int ref, int verbose_level)
long int * trace_set_recursion_tmp_set1
int trace_next_point(int cur_level, int cur_node_global, long int *canonical_set, int *transporter, int f_implicit_fusion, int &f_failure_to_find_point, int verbose_level)
long int * make_set_smaller_set
int handle_extension_oracle(int cur_level, int cur_node_global, long int *canonical_set, int *Elt_transporter, int f_implicit_fusion, int &f_failure_to_find_point, int verbose_level)
int trace_next_point_database(int cur_level, int cur_node_global, long int *canonical_set, int *Elt_transporter, int verbose_level)
long int * apply_fusion_tmp_set1
int handle_extension_database(int cur_level, int cur_node_global, long int *canonical_set, int *Elt_transporter, int f_implicit_fusion, int &f_failure_to_find_point, int verbose_level)
int handle_extension(int cur_level, int cur_node_global, long int *canonical_set, int *Elt_transporter, int f_implicit_fusion, int &f_failure_to_find_point, int verbose_level)
void print_node_global(int level, int node_global)
actions::action * get_A2()
actions::action * get_A()
int first_node_at_level(int i)
poset_orbit_node * get_node(int node_idx)
classification_base_case * get_Base_case()
int find_poset_orbit_node_for_set(int len, long int *set, int f_tolerant, int verbose_level)
to represent one poset orbit; related to the class poset_classification
extension * get_E(int idx)
int trace_next_point_in_place(poset_classification *gen, int lvl, int current_node, int size, long int *cur_set, long int *tmp_set, int *cur_transporter, int *tmp_transporter, int f_implicit_fusion, int &f_failure_to_find_point, int verbose_level)
void trace_starter(poset_classification *gen, int size, long int *cur_set, long int *next_set, int *cur_transporter, int *next_transporter, int verbose_level)
int find_extension_from_point(poset_classification *gen, long int pt, int verbose_level)
#define Lint_vec_copy(A, B, C)
#define Lint_vec_print(A, B, C)
orbiter_kernel_system::orbiter_session * Orbiter
global Orbiter session
the orbiter library for the classification of combinatorial objects