16namespace layer4_classification {
17namespace poset_classification {
22 int f_create_schreier_vector,
23 int f_use_invariant_subset_if_available,
24 int f_implicit_fusion,
32 int f_v = (verbose_level >= 1);
34 int f_vvv = (verbose_level >= 3);
36 int good_orbits1, nb_points1;
37 int f_using_invariant_subset =
FALSE;
42 cout <<
"poset_orbit_node::compute_flag_orbits" << endl;
44 gen->print_level_info(lvl, node);
45 cout <<
" : Downstep for ";
47 cout <<
" verbose_level=" << verbose_level << endl;
54 cout <<
"poset_orbit_node::compute_flag_orbits "
55 "before schreier_forest" << endl;
59 f_use_invariant_subset_if_available,
60 f_using_invariant_subset,
63 cout <<
"poset_orbit_node::compute_flag_orbits "
64 "after schreier_forest" << endl;
69 cout <<
"poset_orbit_node::compute_flag_orbits "
70 "after downstep_orbits" << endl;
71 gen->root[49].print_extensions(cout);
85 f_using_invariant_subset, AR,
90 cout <<
"poset_orbit_node::compute_flag_orbits "
91 "before downstep_orbit_test_and_schreier_vector" << endl;
96 f_use_invariant_subset_if_available,
97 f_using_invariant_subset,
98 f_create_schreier_vector,
99 good_orbits1, nb_points1,
104 cout <<
"poset_orbit_node::compute_flag_orbits "
105 "after downstep_orbit_test_and_schreier_vector" << endl;
110 cout <<
"poset_orbit_node::compute_flag_orbits "
111 "after downstep_orbit_test_and_schreier_vector" << endl;
112 gen->root[49].print_extensions(cout);
117 cout <<
"poset_orbit_node::compute_flag_orbits "
118 "before downstep_implicit_fusion" << endl;
121 gen, Schreier, AR, f_using_invariant_subset,
124 good_orbits1, nb_points1,
127 cout <<
"poset_orbit_node::compute_flag_orbits "
128 "after downstep_implicit_fusion" << endl;
133 cout <<
"poset_orbit_node::compute_flag_orbits "
134 "after downstep_implicit_fusion" << endl;
135 gen->root[49].print_extensions(cout);
143 gen->print_level_info(lvl, node);
144 cout <<
" : calling find_extensions" << endl;
147 cout <<
"poset_orbit_node::compute_flag_orbits "
148 "before find_extensions" << endl;
151 gen, Schreier, AR, f_using_invariant_subset,
155 cout <<
"poset_orbit_node::compute_flag_orbits "
156 "after find_extensions" << endl;
159 gen->print_level_info(lvl, node);
160 cout <<
" : after test_orbits and find_extensions, "
161 "we have " << nb_extensions <<
" extensions" << endl;
171 gen->print_level_info(lvl, node);
172 cout <<
" : found " << nb_extensions <<
" extensions (out of "
173 << nb_orbits <<
" orbits) with "
180 cout <<
"poset_orbit_node::compute_flag_orbits done" << endl;
187 int lvl,
int verbose_level)
194 int f_v = (verbose_level >= 1);
201 long int *candidates = NULL;
208 cout <<
"poset_orbit_node::compute_schreier_vector" << endl;
213 cout <<
"poset_orbit_node::compute_schreier_vector: "
214 "before get_candidates" << endl;
219 candidates, nb_candidates,
222 cout <<
"poset_orbit_node::compute_schreier_vector: "
223 "after get_candidates, nb_candidates=" << nb_candidates << endl;
228 cout <<
"poset_orbit_node::compute_schreier_vector: "
229 "before downstep_apply_early_test" << endl;
232 nb_candidates, candidates,
236 cout <<
"poset_orbit_node::compute_schreier_vector: "
237 "after downstep_apply_early_test, nb_live_points=" << nb_live_points << endl;
241 cout <<
"poset_orbit_node::compute_schreier_vector: "
242 "before gen->Poset->A2->create_induced_action_by_restriction" << endl;
250 cout <<
"poset_orbit_node::compute_schreier_vector: "
251 "after gen->Poset->A2->create_induced_action_by_restriction" << endl;
255 cout <<
"poset_orbit_node::compute_schreier_vector: "
256 "before gen->Poset->A2->create_induced_action_by_restriction" << endl;
260 Schreier->
init(AR, verbose_level - 2);
266 gen->root[prev].Schreier_vector) {
268 int n = gen->root[prev].get_nb_of_live_points();
269 int *subset = gen->root[prev].live_points();
272 f_using_invariant_subset =
TRUE;
278 candidates, nb_candidates,
288 nb_candidates, candidates,
297 Schreier.
init(AR, verbose_level - 2);
300 cout <<
"poset_orbit_node::compute_schreier_vector "
301 "the stabilizer has " << Schreier.
nb_orbits
302 <<
" orbits on the live point" << endl;
309 int n = gen->Poset->A2->degree;
312 for (i = 0; i < n; i++) {
316 f_using_invariant_subset =
TRUE;
322 candidates, nb_candidates,
326 nb_candidates, candidates,
333 Schreier.
init(AR, verbose_level - 2);
337 cout <<
"poset_orbit_node::compute_schreier_vector "
338 "the stabilizer has " << Schreier.
nb_orbits
339 <<
" orbits on the live point" << endl;
344 f_using_invariant_subset =
FALSE;
345 Schreier.
init(gen->Poset->A2, verbose_level - 2);
350 cout <<
"poset_orbit_node::compute_schreier_vector "
351 "before Schreier->init_generators_by_handle" << endl;
354 std::vector<int> gen_handle;
363 cout <<
"poset_orbit_node::compute_schreier_vector "
364 "before Schreier->init_generators_by_handle" << endl;
368 cout <<
"poset_orbit_node::compute_schreier_vector "
369 "calling compute_all_point_orbits" << endl;
378 cout <<
"poset_orbit_node::compute_schreier_vector "
379 "the stabilizer has " << Schreier->
nb_orbits
380 <<
" orbits overall" << endl;
388 cout <<
"poset_orbit_node::compute_schreier_vector "
389 "the stabilizer has " << Schreier->
nb_orbits
390 <<
" good orbits with "
395 cout <<
"poset_orbit_node::compute_schreier_vector "
396 "before create_schreier_vector_wrapper" << endl;
406 Schreier, verbose_level - 1);
409 cout <<
"poset_orbit_node::compute_schreier_vector "
410 "after create_schreier_vector_wrapper" << endl;
420 cout <<
"poset_orbit_node::compute_schreier_vector "
421 "before relabel_schreier_vector" << endl;
425 cout <<
"poset_orbit_node::compute_schreier_vector: "
426 "after relabeling: Schreier vector is" << endl;
441 cout <<
"poset_orbit_node::compute_schreier_vector: "
442 "Schreier vector has been computed" << endl;
450 long int *&candidates,
int &nb_candidates,
453 int f_v = (verbose_level >= 1);
457 cout <<
"poset_orbit_node::get_candidates" << endl;
461 gen->node_has_schreier_vector(prev)) {
463 nb_candidates = gen->get_node(prev)->get_nb_of_live_points();
464 int *subset = gen->get_node(prev)->live_points();
466 candidates =
NEW_lint(nb_candidates);
467 for (i = 0; i < nb_candidates; i++) {
468 candidates[i] = subset[i];
472 nb_candidates = gen->get_A2()->degree;
474 candidates =
NEW_lint(nb_candidates);
475 for (i = 0; i < nb_candidates; i++) {
480 cout <<
"poset_orbit_node::get_candidates done" << endl;
495 int f_use_invariant_subset_if_available,
496 int &f_using_invariant_subset,
509 int f_v = (verbose_level >= 1);
510 int f_vv = (verbose_level >= 2);
511 int f_v4 = (verbose_level >= 4);
513 long int *subset = NULL;
514 long int *candidates = NULL;
515 int nb_candidates = 0;
517 f_using_invariant_subset =
FALSE;
520 gen->print_level_info(lvl, node);
521 cout <<
"poset_orbit_node::schreier_forest" << endl;
522 cout <<
"verbose_level=" << verbose_level << endl;
527 if (f_use_invariant_subset_if_available) {
530 cout <<
"poset_orbit_node::schreier_forest we are trying "
531 "to find an invariant subset" << endl;
543 if (lvl == 0 && !f_using_invariant_subset) {
544 cout <<
"poset_orbit_node::schreier_forest we are trying "
545 "to find an invariant subset. We did not find an invariant subset" << endl;
550 cout <<
"poset_orbit_node::schreier_forest we are NOT using "
551 "an invariant subset" << endl;
555 if (f_using_invariant_subset) {
558 gen->print_level_info(lvl, node);
559 cout <<
" : poset_orbit_node::schreier_forest we are using an invariant subset : "
560 "live points at the predecessor node: number=" << n;
567 cout <<
"too large to print";
578 gen->print_level_info(lvl, node);
579 cout <<
" : poset_orbit_node::schreier_forest before downstep_apply_early_test" << endl;
583 candidates, nb_candidates,
586 gen->print_level_info(lvl, node);
587 cout <<
" : poset_orbit_node::schreier_forest after downstep_apply_early_test" << endl;
591 gen->print_level_info(lvl, node);
592 cout <<
" : poset_orbit_node::schreier_forest live points after downstep_apply_early_test: "
593 "number=" << nb_candidates;
595 cout <<
" reduced from a set of size " << nb_candidates << endl;
599 if (nb_candidates < 100) {
600 int_vec_print(cout, candidates, nb_candidates);
603 cout <<
"too large to print";
616 gen->print_level_info(lvl, node);
617 cout <<
" : poset_orbit_node::schreier_forest before create_induced_action_by_restriction" << endl;
621 nb_candidates, candidates,
625 gen->print_level_info(lvl, node);
626 cout <<
" : poset_orbit_node::schreier_forest after create_induced_action_by_restriction" << endl;
627 gen->print_level_info(lvl, node);
628 cout <<
" : poset_orbit_node::schreier_forest created action " << AR->
label << endl;
632 cout <<
"poset_orbit_node::schreier_forest created restricted action ";
635 Schreier.
init(AR , verbose_level - 2);
638 gen->print_level_info(lvl, node);
639 cout <<
" : poset_orbit_node::schreier_forest we are NOT using an invariant subset" << endl;
640 Schreier.
init(gen->get_A2(), verbose_level - 2);
645 gen->print_level_info(lvl, node);
646 cout <<
" : poset_orbit_node::schreier_forest initializing generators. There are "
647 << nb_strong_generators <<
" strong generators" << endl;
654 std::vector<int> gen_handle;
663 gen->print_level_info(lvl, node);
664 cout <<
" : poset_orbit_node::schreier_forest calling Schreier.compute_all_point_orbits "
665 "for a set of size " << Schreier.
A->
degree << endl;
670 gen->print_level_info(lvl, node);
671 cout <<
" : generators:" << endl;
680 if (gen->get_control()->f_preferred_choice) {
682 for (
int i = 0; i < gen->get_control()->preferred_choice.size(); i++) {
683 if (gen->get_control()->preferred_choice[i][0] == node) {
696 gen->print_level_info(lvl, node);
697 cout <<
" : poset_orbit_node::schreier_forest before Schreier.compute_all_point_orbits" << endl;
701 gen->print_level_info(lvl, node);
702 cout <<
" : poset_orbit_node::schreier_forest after Schreier.compute_all_point_orbits" << endl;
707 gen->print_level_info(lvl, node);
708 cout <<
" : poset_orbit_node::schreier_forest before Schreier.compute_all_point_orbits" << endl;
712 gen->print_level_info(lvl, node);
713 cout <<
" : poset_orbit_node::schreier_forest after Schreier.compute_all_point_orbits" << endl;
718 gen->print_level_info(lvl, node);
719 cout <<
" : poset_orbit_node::schreier_forest before Schreier.compute_all_point_orbits" << endl;
723 gen->print_level_info(lvl, node);
724 cout <<
" : poset_orbit_node::schreier_forest after Schreier.compute_all_point_orbits" << endl;
729 int f_print_orbits =
FALSE;
731 f_print_orbits =
TRUE;
735 if (f_using_invariant_subset) {
739 gen->max_number_of_orbits_to_print(),
740 gen->max_number_of_points_to_print_in_orbit());
744 gen->print_level_info(lvl, node);
745 cout <<
"poset_orbit_node::schreier_forest: we found "
746 << Schreier.
nb_orbits <<
" orbits" << endl;
760 int f_use_invariant_subset_if_available,
761 int f_using_invariant_subset,
762 int f_create_schreier_vector,
763 int &nb_good_orbits,
int &nb_points,
769 int f_v = (verbose_level >= 1);
771 int f_vvv = (verbose_level >= 3);
772 int f_print_orbits =
FALSE;
774 f_print_orbits =
TRUE;
777 int max_points_per_orbit = 25;
779 if (verbose_level > 4) {
780 max_points_per_orbit = INT_MAX;
784 gen->print_level_info(lvl, node);
785 cout <<
"poset_orbit_node::downstep_orbit_"
786 "test_and_schreier_vector" << endl;
788 if (f_use_invariant_subset_if_available) {
791 lvl, nb_good_orbits, nb_points,
795 gen->print_level_info(lvl, node);
796 cout <<
" : after check_orbits_wrapper:" << endl;
797 cout <<
"nb_good_orbits=" << nb_good_orbits << endl;
798 cout <<
"nb_points=" << nb_points << endl;
804 max_orbits, max_points_per_orbit);
809 f_create_schreier_vector,
813 gen->print_level_info(lvl, node);
814 cout <<
" : after creating Schreier vector." << endl;
817 if (f_using_invariant_subset && f_create_schreier_vector) {
820 gen->print_level_info(lvl, node);
821 cout <<
" : after relabeling Schreier vector." << endl;
831 f_create_schreier_vector,
835 gen->print_level_info(lvl, node);
836 cout <<
" : after creating Schreier vector." << endl;
841 lvl, nb_good_orbits, nb_points,
847 gen->print_level_info(lvl, node);
848 cout <<
" : after check_orbits_wrapper:" << endl;
849 cout <<
"nb_good_orbits=" << nb_good_orbits << endl;
850 cout <<
"nb_points=" << nb_points << endl;
856 max_orbits, max_points_per_orbit);
864 int f_using_invariant_subset,
866 int f_implicit_fusion,
867 int good_orbits1,
int nb_points1,
873 int f_v = (verbose_level >= 1);
874 int f_vv = (verbose_level >= 2);
877 gen->print_level_info(lvl, node);
878 cout <<
"poset_orbit_node::downstep_implicit_fusion" << endl;
880 if (f_implicit_fusion) {
881 int good_orbits2, nb_points2;
884 gen->print_level_info(lvl, node);
885 cout <<
" : calling test_orbits_for_implicit_fusion" << endl;
890 f_using_invariant_subset, lvl,
897 gen->print_level_info(lvl, node);
898 cout <<
" : after eliminating implicit fusion nodes: "
899 "the stabilizer has " << good_orbits2
900 <<
" good orbits with "
901 << nb_points2 <<
" points" << endl;
902 cout <<
"we have eliminated " << good_orbits1 - good_orbits2
903 <<
" implicit fusion orbits with "
904 << nb_points1 - nb_points2 <<
" points" << endl;
909 gen->print_level_info(lvl, node);
910 cout <<
" : no implicit fusion" << endl;
927 int f_v = (verbose_level >= 1);
933 if (f_using_invariant_subset) {
938 cout <<
"poset_orbit_node::find_extensions computing all possible "
939 "extensions (out of " << O.
nb_orbits <<
" orbits)" << endl;
942 cout <<
"the stabilizer orbits are:" << endl;
943 cout <<
"i : orbit length : representative" << endl;
947 if (f_using_invariant_subset) {
950 cout << k <<
" : " << O.
orbit_len[k] <<
" : " << rep << endl;
962 if (f_using_invariant_subset) {
967 if (f_implicit_fusion) {
972 cout <<
"orbit " << k <<
" is not accepted because "
973 <<
"we use implicit fusion nodes and "
974 << rep <<
" is less than "
980 cout <<
"orbit " << k <<
" is accepted" << endl;
993 for (ii = 0; ii < lvl; ii++) {
994 if (gen->get_S()[ii] == rep)
999 cout <<
"orbit " << k <<
" is in the set "
1000 "so we skip" << endl;
1005 cout <<
"orbit " << k <<
" is accepted" << endl;
1017 E[nb_extensions].
set_pt(rep);
1029 cout <<
"found " << nb_extensions <<
" extensions with "
1035 cout <<
"Node 49:" << endl;
1038 else if (node > 49) {
1039 cout <<
"Node 49:" << endl;
1040 gen->root[49].print_extensions(cout);
1045 cout <<
"i : orbit_length : representing point" << endl;
1046 for (h = 0; h < nb_extensions; h++) {
1062 int &n,
long int *&subset,
1067 int f_v = (verbose_level >= 1);
1068 int f_vv = (verbose_level >= 2);
1078 cout <<
"poset_orbit_node::downstep_get_invariant_subset" << endl;
1081 if (gen->has_base_case() && lvl == gen->get_Base_case()->size) {
1083 gen->print_level_info(lvl, node);
1084 cout <<
"poset_orbit_node::downstep_get_invariant_subset "
1085 "Getting live points for the starter" << endl;
1087 n = gen->get_Base_case()->nb_live_points;
1090 for (i = 0; i < n; i++) {
1091 subset[i] = gen->get_Base_case()->live_points[i];
1098 else if (lvl == 0 && gen->has_invariant_subset_for_root_node()) {
1099 cout <<
"poset_orbit_node::downstep_get_invariant_subset "
1100 "root node has an invariant subset of size " << n << endl;
1101 n = gen->size_of_invariant_subset_for_root_node();
1103 for (i = 0; i < n; i++) {
1104 subset[i] = gen->get_invariant_subset_for_root_node()[i];
1110 else if (lvl == 0) {
1111 n = gen->get_A2()->degree;
1114 for (i = 0; i < n; i++) {
1121 else if (lvl && gen->node_has_schreier_vector(prev)) {
1124 gen->print_level_info(lvl, node);
1125 cout <<
"poset_orbit_node::downstep_get_invariant_subset "
1126 "Getting live points from previous level" << endl;
1128 n = gen->get_node(prev)->get_nb_of_live_points();
1131 for (i = 0; i < n; i++) {
1132 subset[i] = gen->get_node(prev)->live_points()[i];
1140 gen->print_level_info(lvl, node);
1141 cout <<
"poset_orbit_node::downstep_get_invariant_subset "
1142 "Getting live points from previous level "
1143 "using orbit calculations" << endl;
1146 int i, j, l, len, pt, cur_length, a;
1149 for (i = 0; i < O->nb_extensions; i++) {
1153 if (f_v && O->nb_extensions < 500) {
1154 cout <<
"len=" << len <<
"=";
1155 for (i = 0; i < O->nb_extensions; i++) {
1158 if (i < O->nb_extensions - 1)
1165 if (O->nb_strong_generators) {
1167 for (i = 0; i < O->nb_extensions; i++) {
1172 S.
init(gen->get_A2(), verbose_level - 2);
1174 std::vector<int> gen_handle;
1185 cout <<
"poset_orbit_node::downstep_get_invariant_subset "
1186 "fatal: S.orbit_len[0] != l" << endl;
1191 subset[cur_length++] = a;
1194 if (cur_length != len) {
1195 cout <<
"poset_orbit_node::downstep_get_invariant_subset "
1196 "fatal: cur_length != len" << endl;
1201 for (i = 0; i < O->nb_extensions; i++) {
1202 subset[i] = O->E[i].
get_pt();
1213 cout <<
"poset_orbit_node::downstep_get_invariant_subset "
1214 "subset has size " << n << endl;
1215 cout <<
"poset_orbit_node::downstep_get_invariant_subset done" << endl;
1223 int n,
long int *subset,
1224 long int *candidates,
int &nb_candidates,
1246 int f_v = (verbose_level >= 1);
1247 int f_vv = (verbose_level >= 2);
1252 gen->print_level_info(lvl, node);
1253 cout <<
" : downstep_apply_early_test "
1254 "number of live points = " << n << endl;
1262 gen->print_level_info(lvl, node);
1263 cout <<
" : downstep_apply_early_test "
1264 "number of live points = " << n << endl;
1268 cout <<
"calling Poset->early_test_func_by_using_group" << endl;
1271 gen->invoke_early_test_func(
1281 cout <<
"poset_orbit_node::downstep_apply_early_test "
1282 "nb_candidates=" << nb_candidates << endl;
1284 if (
FALSE && f_vv) {
1285 cout <<
"candidates: ";
1288 for (i = 0; i < nb_candidates; i++) {
1289 cout << candidates[i] <<
" ";
1301 int &nb_good_orbits1,
int &nb_points1,
1308 int f_v = (verbose_level >= 1);
1311 cout <<
"poset_orbit_node::check_orbits_wrapper" << endl;
1325 cout <<
"poset_orbit_node::check_orbits_wrapper "
1326 "the stabilizer has " << nb_good_orbits1
1327 <<
" good orbits with "
1328 << nb_points1 <<
" points" << endl;
1331 cout <<
"poset_orbit_node::check_orbits_wrapper done" << endl;
1339 int lvl,
int verbose_level)
1345 int f_v = (verbose_level >= 1);
1346 int f_vv = (verbose_level >= 2);
1347 int f_vvv = (verbose_level >= 3);
1352 if (f_using_invariant_subset) {
1360 cout <<
"test_orbits_for_implicit_fusion: "
1361 "testing " << L <<
" orbits" << endl;
1363 for (k = 0; k < L; k++) {
1366 rep = Schreier.
orbit[fst];
1367 if (f_using_invariant_subset) {
1375 cout <<
"orbit " << k
1376 <<
" is not accepted because "
1377 <<
"we use implicit fusion nodes and "
1378 << rep <<
" is less than "
1384 cout <<
"orbit " << k <<
" is accepted" << endl;
1394 cout <<
"test_orbits_for_implicit_fusion: "
1396 "finished: " << u <<
" orbits out of "
1397 << L <<
" accepted" << endl;
1400 cout <<
"the good orbits are:" << endl;
1401 cout <<
"i : representative : orbit length" << endl;
1402 for (k = 0; k < Schreier.
nb_orbits; k++) {
1405 rep = Schreier.
orbit[fst];
1406 if (f_using_invariant_subset) {
1409 cout << setw(5) << k <<
" : " << setw(5)
1410 << rep <<
" : " << setw(5) << len << endl;
1428 int f_v = (verbose_level >= 1);
1429 int f_vv = (verbose_level >= 2);
1432 int fst, len, rep, f_accept;
1438 cout <<
"poset_orbit_node::check_orbits" << endl;
1444 cout <<
"check_orbits: testing " << L <<
" orbits" << endl;
1450 for (k = 0; k < L; k++) {
1453 rep = Schreier->
orbit[fst];
1461 for (j = 0; j < lvl; j++) {
1462 if (gen->get_S()[j] == rep) {
1472 cout <<
"poset_orbit_node::check_orbits "
1473 "calling test_point_using_check_functions"
1481 verbose_level - 10);
1486 cout <<
"orbit " << k <<
" of point " << rep
1487 <<
" of length " << len
1488 <<
" is accepted as orbit " << u << endl;
1493 cout <<
"orbit " << k <<
" of point " << rep
1494 <<
" of length " << len
1495 <<
" is not accepted" << endl;
1506 cout <<
"check_orbits: orbit testing finished: " << u
1507 <<
" orbits out of " << L <<
" accepted" << endl;
1510 cout <<
"the good orbits are:" << endl;
1511 cout <<
"i : representative : orbit length" << endl;
1512 for (k = 0; k < Schreier->
nb_orbits; k++) {
1515 rep = Schreier->
orbit[fst];
1519 cout << setw(5) << k <<
" : " << setw(5) << rep <<
" : "
1520 << setw(5) << len << endl;
1530 int lvl,
int rep,
int *the_set,
1539 int f_v = (verbose_level >= 1);
1541 int f_accept =
TRUE;
1544 cout <<
"poset_orbit_node::test_point_using_check_functions" << endl;
1545 cout <<
"verbose_level=" << verbose_level << endl;
1548 if (gen->f_candidate_incremental_check_func) {
1550 cout <<
"checking point " << rep
1551 <<
" incrementally" << endl;
1554 if (gen->check_the_set_incrementally(lvl + 1,
1555 the_set, verbose_level - 2)) {
1561 else if (gen->f_candidate_check_func) {
1563 cout <<
"checking point " << rep << endl;
1567 cout <<
"calling gen->check_the_set" << endl;
1569 if (gen->check_the_set(lvl + 1, the_set, verbose_level - 2)) {
1591 int f_v = (verbose_level >= 1);
1592 int f_v5 = (verbose_level >= 5);
1600 cout <<
"poset_orbit_node::relabel_schreier_vector" << endl;
1601 cout <<
"verbose_level=" << verbose_level << endl;
1609 cout <<
"poset_orbit_node::relabel_schreier_vector "
1610 "sv before:" << endl;
1613 for (i = 0; i < n; i++) {
1614 pts[i] = ABR->
points[pts[i]];
1616 if (nb_strong_generators) {
1619 for (i = 0; i < n; i++) {
1621 prev[i] = ABR->
points[prev[i]];
1626 cout <<
"poset_orbit_node::relabel_schreier_vector "
1627 "sv after:" << endl;
1631 cout <<
"poset_orbit_node::relabel_schreier_vector "
1642 int max_orbits,
int max_points_per_orbit)
1644 gen->print_level_info(lvl, node);
1645 cout <<
"The " << Schreier->
nb_orbits <<
" orbits are:" << endl;
1649 cout <<
"h : orbit_len[h] : points[rep[h]] : "
1650 "orbit (if size is less than "
1651 << max_points_per_orbit <<
")" << endl;
1652 if (Schreier->
nb_orbits <= max_orbits) {
1657 for (h = 0; h < Schreier->
nb_orbits; h++) {
1662 cout << setw(4) << h <<
" : "
1663 << setw(5) << Schreier->
orbit_len[h] <<
" : "
1665 if (f_print_orbits) {
1666 if (Schreier->
orbit_len[h] <= max_points_per_orbit) {
1677 cout <<
" : too long to print";
1683 Schreier->
print(cout);
1685 if (gen->get_A()->degree < 1000 &&
FALSE) {
1692 cout <<
"Too many orbits to print: we have "
1693 << Schreier->
nb_orbits <<
" orbits" << endl;
a collection of functions related to sorted vectors
void lint_vec_heapsort(long int *v, int len)
a permutation group in a fixed action.
action * create_induced_action_by_restriction(groups::sims *S, int size, long int *set, int f_induce, int verbose_level)
Schreier trees for orbits of groups on points.
void print_tree(int orbit_no)
void compute_all_point_orbits(int verbose_level)
void init_generators_by_handle(std::vector< int > &gen_hdl, int verbose_level)
int sum_up_orbit_lengths()
void init_preferred_choice_function(void(*preferred_choice_function)(int pt, int &pt_pref, schreier *Sch, void *data, int data2, int verbose_level), void *preferred_choice_function_data, int preferred_choice_function_data2, int verbose_level)
void compute_point_orbit(int pt, int verbose_level)
void print_orbit_through_labels(std::ostream &ost, int orbit_no, long int *point_labels)
void init(actions::action *A, int verbose_level)
void print(std::ostream &ost)
void print_tables(std::ostream &ost, int f_with_cosetrep)
restricted action on an invariant subset
represents a flag in the poset classification algorithm; related to poset_orbit_node
void set_orbit_len(int orbit_len)
the poset classification algorithm
to represent one poset orbit; related to the class poset_classification
void downstep_apply_early_test(poset_classification *gen, int lvl, int n, long int *subset, long int *candidates, int &nb_candidates, int verbose_level)
void downstep_orbit_test_and_schreier_vector(poset_classification *gen, groups::schreier *Schreier, actions::action *AR, int lvl, int f_use_invariant_subset_if_available, int f_using_invariant_subset, int f_create_schreier_vector, int &nb_good_orbits, int &nb_points, int verbose_level)
int downstep_get_invariant_subset(poset_classification *gen, int lvl, int &n, long int *&subset, int verbose_level)
void draw_schreier_forest(poset_classification *PC, groups::schreier *Schreier, int f_using_invariant_subset, actions::action *AR, int verbose_level)
void print_set_verbose(poset_classification *gen)
void get_candidates(poset_classification *gen, int lvl, long int *&candidates, int &nb_candidates, int verbose_level)
int nb_extension_points()
void downstep_orbits_print(poset_classification *gen, groups::schreier *Schreier, actions::action *AR, int lvl, int f_print_orbits, int max_orbits, int max_points_per_orbit)
void get_strong_generators_handle(std::vector< int > &gen_hdl, int verbose_level)
void schreier_forest(poset_classification *gen, groups::schreier &Schreier, actions::action *&AR, int lvl, int f_use_invariant_subset_if_available, int &f_using_invariant_subset, int verbose_level)
int test_point_using_check_functions(poset_classification *gen, int lvl, int rep, int *the_set, int verbose_level)
void compute_schreier_vector(poset_classification *gen, int lvl, int verbose_level)
void downstep_implicit_fusion(poset_classification *gen, groups::schreier &Schreier, actions::action *AR, int f_using_invariant_subset, int lvl, int f_implicit_fusion, int good_orbits1, int nb_points1, int verbose_level)
void check_orbits_wrapper(poset_classification *gen, groups::schreier *Schreier, actions::action *AR, int lvl, int &nb_good_orbits1, int &nb_points1, int verbose_level)
void print_extensions(std::ostream &ost)
void check_orbits(poset_classification *gen, groups::schreier *Schreier, actions::action *AR, int lvl, int verbose_level)
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)
void save_schreier_forest(poset_classification *PC, groups::schreier *Schreier, int verbose_level)
void create_schreier_vector_wrapper(poset_classification *gen, int f_create_schreier_vector, groups::schreier *Schreier, int verbose_level)
void find_extensions(poset_classification *gen, groups::schreier &O, actions::action *AR, int f_using_invariant_subset, int lvl, int verbose_level)
void save_shallow_schreier_forest(poset_classification *PC, int verbose_level)
void print_set(poset_classification *gen)
void test_orbits_for_implicit_fusion(poset_classification *gen, groups::schreier &Schreier, actions::action *AR, int f_using_invariant_subset, int lvl, int verbose_level)
void store_set(poset_classification *gen, int i)
void store_set_to(poset_classification *gen, int i, long int *to)
void relabel_schreier_vector(actions::action *AR, int verbose_level)
#define Lint_vec_print(A, B, C)
#define NEW_OBJECTS(type, n)
void poset_classification_control_preferred_choice_function(int pt, int &pt_pref, groups::schreier *Sch, void *data, int data2, int verbose_level)
the orbiter library for the classification of combinatorial objects
induced_actions::action_by_restriction * ABR