8#include "shallow_schreier_ai.h"
15namespace layer3_group_actions {
54 init(
A, verbose_level);
116 void (*preferred_choice_function)(
int pt,
int &pt_pref,
schreier *Sch,
void *data,
int data2,
int verbose_level),
117 void *preferred_choice_function_data,
118 int preferred_choice_function_data2,
121 int f_v = (verbose_level >= 1);
124 cout <<
"schreier::init_preferred_choice_function" << endl;
131 cout <<
"schreier::init_preferred_choice_function done" << endl;
138 int f_v = (verbose_level >= 1);
142 cout <<
"schreier::init_images" << endl;
146 cout <<
"schreier::init_images action is NULL" << endl;
155 cout <<
"schreier::init_images allocating images[i], i=" << i << endl;
158 for (j = 0; j < 2 *
degree; j++) {
163 cout <<
"schreier::init_images done" << endl;
168 long int degree,
int *images,
int verbose_level)
170 int f_v = (verbose_level >= 1);
175 cout <<
"schreier::init_images_only" << endl;
184 cout <<
"schreier::init_images_only allocating images[i], i=" << i << endl;
192 cout <<
"schreier::init_images_only done" << endl;
198 int **old_images,
int idx_deleted_generator,
201 int f_v = (verbose_level >= 1);
205 cout <<
"schreier::init_images_recycle" << endl;
209 cout <<
"schreier::init_images_recycle action is NULL" << endl;
218 cout <<
"schreier::init_images_recycle allocating images[i], i=" << i << endl;
221 if (i == idx_deleted_generator) {
222 for (j = 0; j < 2 *
degree; j++) {
231 for (j = 0; j < 2 *
degree; j++) {
239 cout <<
"schreier::init_images_recycle done" << endl;
246 int **old_images,
int verbose_level)
248 int f_v = (verbose_level >= 1);
252 cout <<
"schreier::init_images_recycle" << endl;
256 cout <<
"schreier::init_images_recycle action is NULL" << endl;
265 cout <<
"schreier::init_images_recycle allocating images[i], i=" << i << endl;
272 for (j = 0; j < 2 *
degree; j++) {
279 cout <<
"schreier::init_images_recycle done" << endl;
287 int f_v = (verbose_level >= 1);
290 cout <<
"schreier::images_append" << endl;
297 for (j = 0; j < 2 *
degree; j++) {
301 new_images[i] =
images[i];
314 cout <<
"schreier::init degree > INT_MAX" << endl;
354 for (i = 0; i <
degree; i++) {
362 int f_v = (verbose_level >= 1);
365 cout <<
"schreier::init_single_generator" << endl;
369 cout <<
"schreier::init_single_generator done" << endl;
376 int f_v = (verbose_level >= 1);
379 cout <<
"schreier::init_generators" << endl;
381 if (generators.
len) {
383 generators.
ith(0), verbose_level);
389 cout <<
"schreier::init_generators done" << endl;
396 int idx_generator_to_delete,
int verbose_level)
398 int f_v = (verbose_level >= 1);
401 cout <<
"schreier::init_generators_recycle_images" << endl;
403 if (generators.
len) {
405 generators.
ith(0), old_images, idx_generator_to_delete);
409 NULL, old_images, idx_generator_to_delete);
412 cout <<
"schreier::init_generators_recycle_images done" << endl;
419 int f_v = (verbose_level >= 1);
422 cout <<
"schreier::init_generators_recycle_images" << endl;
424 if (generators.
len) {
426 generators.
ith(0), old_images, verbose_level);
432 cout <<
"schreier::init_generators_recycle_images done" << endl;
442 int f_v = (verbose_level >= 1);
445 cout <<
"schreier::init_generators, nb=" << nb << endl;
450 for (i = 0; i < nb; i++) {
452 cout <<
"schreier::init_generators i = " << i <<
" / " << nb << endl;
458 cout <<
"schreier::init_generators, before init_images" << endl;
462 cout <<
"schreier::init_generators, after init_images" << endl;
465 cout <<
"schreier::init_generators done" << endl;
470 int **old_images,
int idx_generator_to_delete,
int verbose_level)
476 int f_v = (verbose_level >= 1);
479 cout <<
"schreier::init_generators_recycle_images" << endl;
484 for (i = 0; i < nb; i++) {
491 idx_generator_to_delete, 0 );
493 cout <<
"schreier::init_generators_recycle_images done" << endl;
500 int *elt,
int **old_images,
int verbose_level)
507 int f_v = (verbose_level >= 1);
510 cout <<
"schreier::init_generators_recycle_images" << endl;
514 for (i = 0; i < nb; i++) {
522 cout <<
"schreier::init_generators_recycle_images done" << endl;
530 int *gen_hdl,
int verbose_level)
532 int f_v = (verbose_level >= 1);
533 int f_vv = (verbose_level >= 2);
537 cout <<
"schreier::init_generators_by_hdl" << endl;
538 cout <<
"nb_gen = " << nb_gen << endl;
539 cout <<
"degree = " <<
degree << endl;
544 for (i = 0; i < nb_gen; i++) {
556 cout <<
"schreier::init_generators_by_hdl "
557 "generators:" << endl;
561 cout <<
"schreier::init_generators_by_hdl "
562 "before init_images()" << endl;
566 cout <<
"schreier::init_generators_by_hdl "
573 int f_v = (verbose_level >= 1);
574 int f_vv = (verbose_level >= 2);
579 cout <<
"schreier::init_generators_by_handle" << endl;
580 cout <<
"degree = " <<
degree << endl;
583 nb_gen = gen_hdl.size();
587 for (i = 0; i < nb_gen; i++) {
599 cout <<
"schreier::init_generators_by_handle "
600 "generators:" << endl;
604 cout <<
"schreier::init_generators_by_handle "
605 "before init_images()" << endl;
609 cout <<
"schreier::init_generators_by_handle "
617 int f_v = (verbose_level >= 1);
621 cout <<
"schreier::get_image computing image of point "
622 << i <<
" under generator " << gen_idx << endl;
626 cout <<
"schreier::get_image not using image table" << endl;
629 cout <<
"schreier::get_image images == NULL "
630 "and f_images_only" << endl;
634 cout <<
"schreier::get_image before A->element_image_of" << endl;
641 cout <<
"schreier::get_image after A->element_image_of" << endl;
649 cout <<
"schreier::get_image using image table" << endl;
654 cout <<
"schreier::get_image a == -1 "
655 "is not allowed if f_images_only is TRUE" << endl;
659 cout <<
"schreier::get_image before A->element_image_of" << endl;
663 cout <<
"schreier::get_image image of "
664 "i=" << i <<
" is " << a << endl;
671 cout <<
"schreier::get_image image of point "
672 << i <<
" under generator " << gen_idx
673 <<
" is " << a << endl;
680 int f_v = (verbose_level >= 1);
684 cout <<
"schreier::swap_points i=" << i <<
" j=" << j << endl;
693 cout <<
"schreier::swap_points done" << endl;
700 if (
orbit[here] == pt) {
736 int &orbit_idx,
int *Elt,
int verbose_level)
738 int f_v = (verbose_level >= 1);
742 cout <<
"schreier::transporter_from_orbit_rep_to_point" << endl;
745 cout <<
"schreier::transporter_from_orbit_rep_to_point is not "
746 "allowed if f_images_only is TRUE" << endl;
755 cout <<
"schreier::transporter_from_orbit_"
756 "rep_to_point done" << endl;
761 int &orbit_idx,
int *Elt,
int verbose_level)
763 int f_v = (verbose_level >= 1);
767 cout <<
"schreier::transporter_from_point_"
768 "to_orbit_rep" << endl;
771 cout <<
"schreier::transporter_from_point_to_orbit_rep is not "
772 "allowed if f_images_only is TRUE" << endl;
782 cout <<
"schreier::transporter_from_point_to_orbit_rep "
794 int f_v = (verbose_level >= 1);
798 cout <<
"schreier::coset_rep coset j=" << j <<
" pt=" <<
orbit[j] << endl;
801 cout <<
"schreier::coset_rep is not "
802 "allowed if f_images_only is TRUE" << endl;
807 cout <<
"schreier::coset_rep j=" << j <<
" pt=" <<
orbit[j];
808 cout <<
" prev[j]=" <<
prev[j] <<
" orbit_inv[prev[j]]=";
820 cout <<
"schreier::coset_rep j=" << j <<
" pt=" <<
orbit[j]<<
" done" << endl;
831 int f_v = (verbose_level >= 1);
835 cout <<
"schreier::coset_rep_with_verbosity j="
836 << j <<
" orbit[j]=" <<
orbit[j] << endl;
839 cout <<
"schreier::coset_rep_with_verbosity is not "
840 "allowed if f_images_only is TRUE" << endl;
845 cout <<
"schreier::coset_rep_with_verbosity j=" << j
846 <<
" label[j]=" <<
label[j]
847 <<
" orbit_inv[prev[j]]="
859 cout <<
"schreier::coset_rep_with_verbosity "
860 "j=" << j <<
" done" << endl;
868 int f_v = (verbose_level >= 1);
872 cout <<
"schreier::coset_rep_inv j=" << j << endl;
875 cout <<
"schreier::coset_rep_inv is not "
876 "allowed if f_images_only is TRUE" << endl;
881 cout <<
"schreier::coset_rep_inv j=" << j <<
" orbit_inv[prev[j]]=" <<
orbit_inv[
prev[j]] <<
" label[j]=" <<
label[j] << endl;
892 cout <<
"schreier::coset_rep_inv j=" << j <<
" done" << endl;
903 int f_v = (verbose_level >= 1);
904 int f_vv = (verbose_level >= 3);
905 int cur, total0, total, cur_pt;
906 int gen_first, i, next_pt, next_pt_loc;
909 cout <<
"schreier::extend_orbit" << endl;
912 cout <<
"schreier::extend_orbit extending orbit "
924 while (cur < total) {
927 cout <<
"schreier::extend_orbit "
928 "applying generator to " << cur_pt << endl;
937 for (i = gen_first; i <
gens.
len; i++) {
942 cout <<
"schreier::extend_orbit generator "
943 << i <<
" maps " << cur_pt
944 <<
" to " << next_pt << endl;
946 if (next_pt_loc < total) {
950 cout <<
"schreier::extend_orbit n e w pt "
951 << next_pt <<
" reached from "
952 << cur_pt <<
" under generator " << i << endl;
955 prev[total] = cur_pt;
959 cout <<
"cur = " << cur << endl;
960 cout <<
"total = " << total << endl;
969 cout <<
"schreier::extend_orbit orbit extended to length "
981 cout <<
" }" << endl;
984 cout <<
"schreier::extend_orbit done" << endl;
990 int pt, pt_loc, cur, pt0;
991 int f_v = (verbose_level >= 1);
992 int f_vv = (verbose_level >= 2);
995 cout <<
"schreier::compute_all_point_orbits "
996 "verbose_level=" << verbose_level << endl;
1002 for (pt0 = 0, pt = 0; pt <
degree; pt++) {
1014 cout <<
"schreier::compute_all_point_orbits "
1015 "before preferred_choice_function, pt=" << pt << endl;
1017 (*preferred_choice_function)(pt, pt_pref,
1023 cout <<
"schreier::compute_all_point_orbits "
1024 "before preferred_choice_function, pt=" << pt <<
" pt_pref=" << pt_pref << endl;
1028 cout <<
"schreier::compute_all_point_orbits preferred point is already in some other orbit" << endl;
1043 cout <<
"schreier::compute_all_point_orbits pt = "
1047 <<
", computing orbit of pt_pref=" << pt_pref << endl;
1050 cout <<
"schreier::compute_all_point_orbits pt = "
1054 <<
", computing orbit of pt_pref=" << pt_pref << endl;
1060 cout <<
"schreier::compute_all_point_orbits found "
1065 cout <<
"The distribution of orbit lengths is: ";
1071 int *prefered_reps,
int nb_prefered_reps,
1074 int i, pt, pt_loc, cur;
1075 int f_v = (verbose_level >= 1);
1078 cout <<
"schreier::compute_all_point_orbits_with_prefered_reps" << endl;
1081 for (i = 0; i < nb_prefered_reps; i++) {
1082 pt = prefered_reps[i];
1090 for (pt = 0; pt <
degree; pt++) {
1099 cout <<
"found " <<
nb_orbits <<
" orbits";
1100 cout <<
" on points" << endl;
1105 long int *preferred_labels,
int verbose_level)
1107 int pt, pt_loc, cur, a, i;
1108 int f_v = (verbose_level >= 1);
1109 int *labels, *perm, *perm_inv;
1113 cout <<
"schreier::compute_all_point_orbits_with_"
1114 "preferred_labels" << endl;
1118 cout <<
"degree = " <<
degree << endl;
1121 cout <<
"schreier::compute_all_point_orbits_with_"
1122 "preferred_labels allocating tables" << endl;
1128 for (i = 0; i <
degree; i++) {
1129 labels[i] = preferred_labels[i];
1132 cout <<
"schreier::compute_all_point_orbits_"
1133 "with_preferred_labels allocating tables done, "
1137 perm, perm_inv,
TRUE );
1140 cout <<
"schreier::compute_all_point_orbits_"
1141 "with_preferred_labels sorting done" << endl;
1144 for (a = 0; a <
degree; a++) {
1158 cout <<
"schreier::compute_all_point_orbits_with_"
1159 "preferred_labels computing orbit of point "
1160 << pt <<
" = " << a <<
" / " <<
degree << endl;
1164 cout <<
"schreier::compute_all_point_orbits_with_"
1165 "preferred_labels computing orbit of point "
1166 << pt <<
" done, found an orbit of length "
1168 <<
" nb_orbits = " <<
nb_orbits << endl;
1172 cout <<
"found " <<
nb_orbits <<
" orbit";
1175 cout <<
" on points" << endl;
1181 cout <<
"schreier::compute_all_point_orbits_with_"
1182 "preferred_labels done" << endl;
1187 int len,
long int *subset,
int verbose_level)
1189 int f_v = (verbose_level >= 1);
1193 cout <<
"schreier::compute_all_orbits_on_invariant_subset" << endl;
1194 cout <<
"computing orbits on a set of size " << len << endl;
1197 for (i = 0; i < len; i++) {
1208 cout <<
"schreier::compute_all_orbits_on_invariant_subset "
1209 "the set is not G-invariant" << endl;
1213 cout <<
"found " <<
nb_orbits <<
" orbits" << endl;
1217 cout <<
"schreier::compute_all_orbits_on_invariant_subset done" << endl;
1222 int len,
long int *subset,
int verbose_level)
1224 int f_v = (verbose_level >= 1);
1228 cout <<
"schreier::compute_all_orbits_on_invariant_subset" << endl;
1229 cout <<
"computing orbits on a set of size " << len << endl;
1232 for (i = 0; i < len; i++) {
1243 cout <<
"schreier::compute_all_orbits_on_invariant_subset "
1244 "the set is not G-invariant" << endl;
1248 cout <<
"found " <<
nb_orbits <<
" orbits" << endl;
1252 cout <<
"schreier::compute_all_orbits_on_invariant_subset done" << endl;
1258 int pt_loc, cur, cur_pt, total, i, next_pt;
1259 int next_pt_loc, total1, cur1;
1260 int f_v = (verbose_level >= 1);
1265 cout <<
"schreier::compute_point_orbit" << endl;
1266 cout <<
"computing orbit of point " << pt;
1268 cout <<
" in no action, using table of images only" << endl;
1271 cout <<
" in action " <<
A->
label << endl;
1278 cout <<
"schreier::compute_point_orbit "
1279 "i < orbit_first[nb_orbits]" << endl;
1283 cout <<
"schreier::compute_point_orbit "
1284 "computing orbit of pt " << pt <<
" cur=" << cur << endl;
1285 cout <<
"schreier::compute_point_orbit "
1287 cout <<
"schreier::compute_point_orbit "
1288 "pt_loc=" << pt_loc << endl;
1295 while (cur < total) {
1297 cout <<
"schreier::compute_point_orbit cur=" << cur <<
" total=" << total << endl;
1300 cur_pt =
orbit[cur];
1302 cout <<
"schreier::compute_point_orbit "
1303 "expanding point " << cur_pt << endl;
1307 cout <<
"schreier::compute_point_orbit "
1308 "expanding point " << cur_pt
1309 <<
" using generator " << i << endl;
1312 next_pt =
get_image(cur_pt, i, verbose_level);
1319 cout <<
"schreier::compute_point_orbit " << cur_pt
1320 <<
" -> " << next_pt << endl;
1323 if (next_pt_loc < total) {
1327 cout <<
"schreier::compute_point_orbit expanding: "
1328 << cur_pt <<
", " << next_pt <<
", " << i << endl;
1331 prev[total] = cur_pt;
1337 if ((total1 % 10000) == 0 ||
1338 (cur1 > 0 && (cur1 % 10000) == 0)) {
1339 cout <<
"schreier::compute_point_orbit degree = "
1340 <<
degree <<
" length = " << total1
1341 <<
" processed = " << cur1 <<
" nb_orbits="
1342 <<
nb_orbits <<
" cur_pt=" << cur_pt <<
" next_pt="
1343 << next_pt <<
" orbit_first[nb_orbits]="
1347 cout <<
"cur = " << cur << endl;
1348 cout <<
"total = " << total << endl;
1353 cout <<
"schreier::compute_point_orbit cur_pt " << cur_pt
1354 <<
" has been expanded" << endl;
1355 cout <<
"cur=" << cur <<
" total = " << total << endl;
1363 <<
" total length " << total
1364 <<
" degree=" <<
degree << endl;
1374 cout <<
" }" << endl;
1377 cout <<
"coset reps:" << endl;
1380 cout << i <<
" : " << endl;
1383 cout <<
"image = " <<
orbit[i] <<
" = "
1391 cout <<
"schreier::compute_point_orbit done" << endl;
1396 int pt,
int max_depth,
int verbose_level)
1398 int pt_loc, cur, cur_pt, total, i, next_pt;
1399 int next_pt_loc, total1, cur1;
1401 int f_v = (verbose_level >= 1);
1406 cout <<
"schreier::compute_point_orbit_with_limited_depth" << endl;
1407 cout <<
"computing orbit of point " << pt
1408 <<
" in action " <<
A->
label << endl;
1415 cout <<
"schreier::compute_point_orbit_with_limited_depth "
1416 "i < orbit_first[nb_orbits]" << endl;
1420 cout <<
"schreier::compute_point_orbit_with_limited_depth "
1421 "computing orbit of pt " << pt << endl;
1428 while (cur < total) {
1429 cur_pt =
orbit[cur];
1430 if (depth[cur] > max_depth) {
1434 cout <<
"schreier::compute_point_orbit_with_limited_depth cur="
1435 << cur <<
" total=" << total
1436 <<
" applying generators to " << cur_pt << endl;
1440 cout <<
"schreier::compute_point_orbit_with_limited_depth "
1441 "applying generator "
1442 << i <<
" to point " << cur_pt << endl;
1449 cout <<
"schreier::compute_point_orbit_with_limited_depth "
1451 << i <<
" maps " << cur_pt
1452 <<
" to " << next_pt << endl;
1454 if (next_pt_loc < total) {
1458 cout <<
"schreier::compute_point_orbit_with_limited_depth "
1460 << next_pt <<
" reached from "
1461 << cur_pt <<
" under generator " << i << endl;
1464 depth[total] = depth[cur] + 1;
1465 prev[total] = cur_pt;
1470 if ((total1 % 10000) == 0 ||
1471 (cur1 > 0 && (cur1 % 10000) == 0)) {
1472 cout <<
"schreier::compute_point_orbit_with_limited_depth "
1474 <<
A->
degree <<
" length = " << total1
1475 <<
" processed = " << cur1 <<
" nb_orbits="
1476 <<
nb_orbits <<
" cur_pt=" << cur_pt <<
" next_pt="
1477 << next_pt <<
" orbit_first[nb_orbits]="
1481 cout <<
"cur = " << cur << endl;
1482 cout <<
"total = " << total << endl;
1491 cout <<
"schreier::compute_point_orbit_with_limited_depth "
1492 "found an incomplete orbit of length "
1494 <<
" total length " << total
1495 <<
" degree=" <<
A->
degree << endl;
1500 cout <<
"schreier::compute_point_orbit_with_limited_depth done" << endl;
1522 int f_v = (verbose_level >= 1);
1523 int f_vv = (verbose_level >= 2);
1529 cout <<
"schreier::non_trivial_random_schreier_generator "
1530 "verbose_level=" << verbose_level << endl;
1533 cout <<
"schreier::non_trivial_random_schreier_generator is not "
1534 "allowed if f_images_only is TRUE" << endl;
1539 cout <<
"schreier::non_trivial_random_schreier_generator "
1540 "calling random_schreier_generator "
1541 "(cnt=" << cnt <<
")" << endl;
1547 cout <<
"schreier::non_trivial_random_schreier_generator "
1548 "found a non-trivial random Schreier generator in "
1549 << cnt <<
" trials" << endl;
1563 cout <<
"schreier::non_trivial_random_schreier_generator "
1564 "the element is the identity in action "
1565 << A_original->
label <<
", trying again" << endl;
1570 cout <<
"schreier::non_trivial_random_schreier_generator done" << endl;
1576 int orbit_no,
int verbose_level)
1579 int first, len, r1, r2, pt, pt2, pt2_coset;
1581 int f_v = (verbose_level >= 1);
1587 cout <<
"schreier::random_schreier_generator_ith_orbit, "
1588 "orbit " << orbit_no <<
" action=" <<
A->
label << endl;
1591 cout <<
"schreier::random_schreier_generator_ith_orbit is not "
1592 "allowed if f_images_only is TRUE" << endl;
1596 cout <<
"schreier::random_schreier_generator_ith_orbit generators are:" << endl;
1603 cout <<
"schreier::random_schreier_generator_ith_orbit pt=" << pt << endl;
1604 cout <<
"schreier::random_schreier_generator_ith_orbit orbit_first[orbit_no]=" <<
orbit_first[orbit_no] << endl;
1605 cout <<
"schreier::random_schreier_generator_ith_orbit orbit_len[orbit_no]=" <<
orbit_len[orbit_no] << endl;
1606 cout <<
"schreier::random_schreier_generator_ith_orbit gens.len=" <<
gens.
len << endl;
1612 cout <<
"schreier::random_schreier_generator_ith_orbit r1=" << r1 << endl;
1618 cout <<
"schreier::random_schreier_generator_ith_orbit cosetrep " <<
orbit_first[orbit_no] + r1 << endl;
1629 cout <<
"schreier::random_schreier_generator_ith_orbit r2=" << r2 << endl;
1633 cout <<
"schreier::random_schreier_generator_ith_orbit generator " << r2 << endl;
1641 cout <<
"schreier::random_schreier_generator_ith_orbit random coset " << r1
1642 <<
", random generator " << r2 << endl;
1647 cout <<
"schreier::random_schreier_generator_ith_orbit cosetrep * generator " << endl;
1657 cout <<
"schreier::random_schreier_generator_ith_orbit maps " << pt <<
" to " << pt2 << endl;
1661 cout <<
"schreier::random_schreier_generator_ith_orbit pt2_coset=" << pt2_coset << endl;
1663 if (pt2_coset < first) {
1664 cout <<
"schreier::random_schreier_generator_ith_orbit "
1665 "pt2_coset < first" << endl;
1668 if (pt2_coset >= first + len) {
1669 cout <<
"schreier::random_schreier_generator_ith_orbit "
1670 "pt2_coset >= first + len" << endl;
1677 cout <<
"schreier::random_schreier_generator_ith_orbit cosetrep (inverse) " << pt2_coset << endl;
1687 cout <<
"schreier::random_schreier_generator_ith_orbit "
1688 "fatal: schreier generator does not stabilize pt" << endl;
1692 cout <<
"schreier::random_schreier_generator_ith_orbit "
1704 cout <<
"schreier::random_schreier_generator_ith_orbit, "
1705 "orbit " << orbit_no <<
" done" << endl;
1712 int f_v = (verbose_level >= 1);
1713 int f_vv = (verbose_level >= 2);
1714 int r1, r2, pt, pt2, pt2b, pt2_coset;
1720 cout <<
"schreier::random_schreier_generator orbit_len = "
1725 cout <<
"schreier::random_schreier_generator is not "
1726 "allowed if f_images_only is TRUE" << endl;
1731 cout <<
"schreier::random_schreier_generator pt=" << pt << endl;
1742 cout <<
"schreier::random_schreier_generator random coset " << r1 << endl;
1743 cout <<
"schreier::random_schreier_generator pt1=" << pt1 << endl;
1744 cout <<
"schreier::random_schreier_generator cosetrep:" << endl;
1746 cout <<
"schreier::random_schreier_generator image of pt under cosetrep = " << pt1b << endl;
1749 cout <<
"schreier::random_schreier_generator fatal: "
1750 "cosetrep does not work" << endl;
1751 cout <<
"pt=" << pt << endl;
1752 cout <<
"random coset " << r1 << endl;
1753 cout <<
"pt1=" << pt1 << endl;
1754 cout <<
"cosetrep:" << endl;
1756 cout <<
"image of pt under cosetrep = " << pt1b << endl;
1765 cout <<
"schreier::random_schreier_generator random coset " << r1 <<
", "
1766 "schreier::random_schreier_generator random generator " << r2 << endl;
1767 cout <<
"schreier::random_schreier_generator generator:" << endl;
1769 cout <<
"schreier::random_schreier_generator image of pt1 under generator = pt2 = "
1776 cout <<
"schreier::random_schreier_generator cosetrep * gen=" << endl;
1781 cout <<
"schreier::random_schreier_generator image of pt under cosetrep*gen = " << pt2 << endl;
1784 cout <<
"schreier::random_schreier_generator "
1785 "something is wrong! " << endl;
1786 cout <<
"pt2=" << pt2 <<
" = image of pt "
1787 "under cosetrep * gen" << endl;
1788 cout <<
"pt2b=" << pt2b <<
" = image of pt1 "
1789 "under gen" << endl;
1790 cout <<
"cosetrep:" << endl;
1792 cout <<
"generator:" << endl;
1794 cout <<
"cosetrep * gen=" << endl;
1796 cout <<
"pt=" << pt << endl;
1797 cout <<
"pt1=" << pt1 << endl;
1798 cout <<
"pt1b=" << pt1b << endl;
1799 cout <<
"pt2=" << pt2 << endl;
1800 cout <<
"pt2b=" << pt2b << endl;
1802 cout <<
"repeat 1" << endl;
1803 cout <<
"repeating pt1b = A->element_image_of(pt, "
1804 "cosetrep, 0):" << endl;
1806 cout <<
"pt1b = " << pt1b << endl;
1808 cout <<
"repeat 2" << endl;
1809 cout <<
"repeating pt2b = A->element_image_of(pt1, "
1813 cout <<
"repeat 3" << endl;
1814 cout <<
"repeating pt2 = A->element_image_of(pt, "
1815 "schreier_gen1, 0):" << endl;
1827 cout <<
"schreier::random_schreier_generator cosetrep:" << endl;
1829 cout <<
"schreier::random_schreier_generator image of pt2 under cosetrep = "
1835 cout <<
"schreier::random_schreier_generator Elt=cosetrep*gen*cosetrep:" << endl;
1837 cout <<
"schreier::random_schreier_generator image of pt under Elt = "
1843 cout <<
"schreier::random_schreier_generator "
1844 "fatal: schreier generator does not stabilize pt" << endl;
1845 cout <<
"pt=" << pt << endl;
1846 cout <<
"pt image=" << pt3 << endl;
1847 cout <<
"r1=" << r1 << endl;
1848 cout <<
"pt1=" << pt1 << endl;
1850 cout <<
"r2=" << r2 << endl;
1851 cout <<
"schreier::random_schreier_generator generator r2:" << endl;
1854 cout <<
"schreier::random_schreier_generator cosetrep * gen=" << endl;
1857 cout <<
"pt2=" << pt2 << endl;
1858 cout <<
"pt2_coset=" << pt2_coset << endl;
1860 cout <<
"schreier::random_schreier_generator coset_rep_inv=" << endl;
1863 cout <<
"schreier::random_schreier_generator cosetrep * gen * coset_rep_inv=" << endl;
1867 cout <<
"schreier::random_schreier_generator recomputing original cosetrep" << endl;
1868 coset_rep(pt2_coset, verbose_level + 5);
1869 cout <<
"schreier::random_schreier_generator original cosetrep=" << endl;
1873 cout <<
"schreier::random_schreier_generator recomputing original cosetrep inverse" << endl;
1875 cout <<
"schreier::random_schreier_generator original cosetrep_inv=" << endl;
1878 cout <<
"redoing the multiplication, schreier_gen1 * cosetrep=" << endl;
1879 cout <<
"in action " <<
A->
label << endl;
1887 cout <<
"schreier::random_schreier_generator random Schreier generator:" << endl;
1892 cout <<
"schreier::random_schreier_generator done" << endl;
1900 if (
prev[ii] == -1) {
1916 int len,
int *intersection_cnt)
1922 intersection_cnt[i] = 0;
1924 for (i = 0; i < len; i++) {
1927 intersection_cnt[o]++;
1932 int len,
int *subset,
int verbose_level)
1935 int f_v = (verbose_level >= 1);
1937 int f_vvv = (verbose_level >= 3);
1940 cout <<
"schreier::orbits_on_invariant_subset_fast "
1941 "computing orbits on invariant subset "
1944 cout <<
" using images only" << endl;
1947 cout <<
" in action " <<
A->
label << endl;
1952 for (i = 0; i < len; i++) {
1957 cout <<
"schreier::orbits_on_invariant_subset_fast computing orbit no " <<
nb_orbits << endl;
1964 cout <<
"schreier::orbits_on_invariant_subset_"
1965 "fast orbit_first[nb_orbits] != len" << endl;
1966 cout <<
"orbit_first[nb_orbits] = "
1968 cout <<
"len = " << len << endl;
1969 cout <<
"subset:" << endl;
1970 int_vec_print(cout, subset, len);
1977 cout <<
"schreier::orbits_on_invariant_subset_fast "
1979 <<
" orbits on the invariant subset of size " << len << endl;
1984 int len,
long int *subset,
int verbose_level)
1987 int f_v = (verbose_level >= 1);
1989 int f_vvv = (verbose_level >= 3);
1992 cout <<
"schreier::orbits_on_invariant_subset_fast_lint "
1993 "computing orbits on invariant subset "
1996 cout <<
" using images only" << endl;
1999 cout <<
" in action " <<
A->
label << endl;
2004 for (i = 0; i < len; i++) {
2009 cout <<
"schreier::orbits_on_invariant_subset_fast_lint computing orbit no " <<
nb_orbits << endl;
2016 cout <<
"schreier::orbits_on_invariant_subset_"
2017 "fast orbit_first[nb_orbits] != len" << endl;
2018 cout <<
"orbit_first[nb_orbits] = "
2020 cout <<
"len = " << len << endl;
2021 cout <<
"subset:" << endl;
2022 int_vec_print(cout, subset, len);
2029 cout <<
"schreier::orbits_on_invariant_subset_fast_lint "
2031 <<
" orbits on the invariant subset of size " << len << endl;
2036 int &nb_orbits_on_subset,
2037 int *&orbit_perm,
int *&orbit_perm_inv)
2042 nb_orbits_on_subset = 0;
2046 orbit_perm_inv[i] = -1;
2051 for (pos = 0; pos < len; pos++) {
2052 if (subset[pos] == a) {
2053 orbit_perm[nb_orbits_on_subset] = i;
2054 orbit_perm_inv[i] = nb_orbits_on_subset;
2055 nb_orbits_on_subset++;
2060 j = nb_orbits_on_subset;
2062 if (orbit_perm_inv[i] == -1) {
2064 orbit_perm_inv[i] = j;
2073 int first_column_element, pos, first_column_orbit, i, j, f, l, a;
2074 int f_v = (verbose_level >= 1);
2077 cout <<
"schreier::get_orbit_partition_"
2078 "of_points_and_lines" << endl;
2082 cout <<
"first_column_element = "
2083 << first_column_element << endl;
2086 first_column_orbit =
orbit_number(first_column_element);
2088 for (i = first_column_orbit - 1; i > 0; i--) {
2091 for (j = 0; j < l; j++) {
2099 for (i =
nb_orbits - 1; i > first_column_orbit; i--) {
2102 for (j = 0; j < l; j++) {
2115 int pos, i, j, f, l, a;
2116 int f_v = (verbose_level >= 1);
2119 cout <<
"schreier::get_orbit_partition" << endl;
2124 for (j = 0; j < l; j++) {
2135 int orbit_idx,
int verbose_level)
2137 int f, l, j, a, pos;
2141 for (j = 0; j < l; j++) {
2154 int f_v = (verbose_level >= 1);
2164 cout <<
"schreier::stabilizer_any_point_plus_cosets" << endl;
2167 cout <<
"schreier::stabilizer_any_point_plus_cosets is not "
2168 "allowed if f_images_only is TRUE" << endl;
2173 cosets->
init(
A, verbose_level - 2);
2180 full_group_order, orbit_index, 0 );
2184 cosets->
allocate(len, verbose_level - 2);
2187 orbit_index1, transporter, 0 );
2189 if (orbit_index1 != orbit_index) {
2190 cout <<
"schreier::stabilizer_any_point_plus_cosets "
2191 "orbit_index1 != orbit_index" << endl;
2199 cout <<
"schreier::stabilizer_any_point_plus_cosets before "
2200 "gens->init_generators_for_the_conjugate_group_aGav" << endl;
2202 gens->init_generators_for_the_conjugate_group_aGav(gens0,
2203 transporter, verbose_level);
2205 cout <<
"schreier::stabilizer_any_point_plus_cosets after "
2206 "gens->init_generators_for_the_conjugate_group_aGav" << endl;
2210 cout <<
"schreier::stabilizer_any_point_plus_cosets computing "
2211 "coset representatives" << endl;
2213 for (i = 0; i < len; i++) {
2215 orbit_index1, transporter1, 0 );
2219 cout <<
"schreier::stabilizer_any_point_plus_cosets computing "
2220 "coset representatives done" << endl;
2227 cout <<
"schreier::stabilizer_any_point_plus_cosets done" << endl;
2238 int f_v = (verbose_level >= 1);
2246 cout <<
"schreier::stabilizer_any_point" << endl;
2249 cout <<
"schreier::stabilizer_any_point is not "
2250 "allowed if f_images_only is TRUE" << endl;
2259 full_group_order, orbit_index, 0 );
2262 orbit_index1, transporter, 0 );
2264 if (orbit_index1 != orbit_index) {
2265 cout <<
"schreier::stabilizer_any_point "
2266 "orbit_index1 != orbit_index" << endl;
2274 cout <<
"schreier::stabilizer_any_point "
2275 "before gens->init_generators_"
2276 "for_the_conjugate_group_aGav" << endl;
2278 gens->init_generators_for_the_conjugate_group_aGav(gens0,
2279 transporter, verbose_level);
2281 cout <<
"schreier::stabilizer_any_point "
2282 "after gens->init_generators_"
2283 "for_the_conjugate_group_aGav" << endl;
2289 cout <<
"schreier::stabilizer_any_point done" << endl;
2298 int orbit_idx,
int verbose_level)
2305 cout <<
"schreier::get_orbit_rep is not "
2306 "allowed if f_images_only is TRUE" << endl;
2311 full_group_order, orbit_idx, verbose_level);
2330 cout <<
"schreier::get_orbit_rep is not "
2331 "allowed if f_images_only is TRUE" << endl;
2336 full_group_order, orbit_idx, verbose_level);
2350 int f_v = (verbose_level >= 1);
2355 cout <<
"schreier::stabilizer_orbit_rep" << endl;
2356 cout <<
"default_action=" << default_action->
label << endl;
2359 cout <<
"schreier::stabilizer_orbit_rep is not "
2360 "allowed if f_images_only is TRUE" << endl;
2366 Stab, orbit_idx, verbose_level);
2372 cout <<
"schreier::stabilizer_orbit_rep "
2373 "found a stabilizer group "
2374 "of order " << stab_order << endl;
2379 gens->init_from_sims(Stab, verbose_level);
2383 cout <<
"schreier::stabilizer_orbit_rep done" << endl;
2396 int len, r, cnt = 0, f_added, drop_out_level, image;
2398 int f_v = (verbose_level >= 1);
2399 int f_vv = (verbose_level >= 2);
2400 int f_vvv = (verbose_level >= 3);
2401 int f_v4 = (verbose_level >= 4);
2407 cout <<
"schreier::point_stabilizer" << endl;
2408 cout <<
"default_action=" << default_action->
label << endl;
2409 cout <<
"default_action->elt_size_in_int=" << default_action->
elt_size_in_int << endl;
2412 cout <<
"schreier::point_stabilizer is not "
2413 "allowed if f_images_only is TRUE" << endl;
2433 cout <<
"schreier::point_stabilizer "
2434 "computing stabilizer of representative of orbit "
2435 << orbit_no <<
" inside a group of "
2436 "order " << go <<
" in action ";
2443 cout <<
"schreier::point_stabilizer orbit length does not divide group order" << endl;
2447 cout <<
"schreier::point_stabilizer expecting group of order " << target_go << endl;
2451 cout <<
"schreier::point_stabilizer before Stab->init" << endl;
2453 Stab->
init(default_action, verbose_level);
2455 cout <<
"schreier::point_stabilizer after Stab->init" << endl;
2458 cout <<
"schreier::point_stabilizer before Stab->init_trivial_group" << endl;
2462 cout <<
"schreier::point_stabilizer after Stab->init_trivial_group" << endl;
2467 cout <<
"schreier::point_stabilizer Stab->my_base_len=" << Stab->
my_base_len << endl;
2473 cout <<
"schreier::point_stabilizer cnt=" << cnt << endl;
2476 cout <<
"schreier::point_stabilizer Stab->my_base_len=" << Stab->
my_base_len << endl;
2480 if (D.
compare(cur_go, target_go) == 0) {
2483 if (cnt % 2 || Stab->
nb_gen[0] == 0) {
2485 cout <<
"schreier::point_stabilizer "
2486 "before random_schreier_generator_ith_orbit" << endl;
2487 cout <<
"schreier::point_stabilizer Stab->my_base_len=" << Stab->
my_base_len << endl;
2497 cout <<
"schreier::point_stabilizer "
2498 "after random_schreier_generator_ith_orbit" << endl;
2499 cout <<
"schreier::point_stabilizer Stab->my_base_len=" << Stab->
my_base_len << endl;
2508 cout <<
"schreier::point_stabilizer "
2509 "random Schreier generator from the orbit:" << endl;
2515 cout <<
"schreier::point_stabilizer "
2516 "before Stab->random_schreier_generator" << endl;
2517 cout <<
"schreier::point_stabilizer Stab->my_base_len=" << Stab->
my_base_len << endl;
2521 cout <<
"schreier::point_stabilizer "
2522 "after Stab->random_schreier_generator" << endl;
2523 cout <<
"schreier::point_stabilizer Stab->my_base_len=" << Stab->
my_base_len << endl;
2526 cout <<
"schreier::point_stabilizer "
2527 "random schreier generator from sims:" << endl;
2535 cout <<
"schreier::point_stabilizer before Stab->strip" << endl;
2538 cout <<
"schreier::point_stabilizer Stab->my_base_len=" << Stab->
my_base_len << endl;
2540 if (Stab->
strip(Elt, residue,
2541 drop_out_level, image, verbose_level - 5)) {
2543 cout <<
"schreier::point_stabilizer "
2544 "element strips through" << endl;
2546 cout <<
"schreier::point_stabilizer residue:" << endl;
2556 cout <<
"schreier::point_stabilizer "
2557 "element needs to be inserted at level = "
2558 << drop_out_level <<
" with image " << image << endl;
2565 cout <<
"schreier::point_stabilizer "
2566 "before Stab->add_generator_at_level, drop_out_level=" << drop_out_level << endl;
2569 drop_out_level, verbose_level - 1);
2571 cout <<
"schreier::point_stabilizer "
2572 "after Stab->add_generator_at_level, drop_out_level=" << drop_out_level << endl;
2576 cout <<
"schreier::point_stabilizer "
2577 "before Stab->group_order" << endl;
2581 if ((f_vv && f_added) || f_vvv) {
2582 cout <<
"schreier::point_stabilizer "
2584 <<
" the n e w group order is " << cur_go
2585 <<
" expecting a group of order "
2586 << target_go << endl;
2594 cout <<
"schreier::point_stabilizer finished" << endl;
2605 for (i = 0; i < len; i++) {
2606 set[i] =
orbit[f + i];
2611 int *orbit_count,
int verbose_level)
2614 int f_v = (verbose_level >= 1);
2618 cout <<
"schreier::compute_orbit_statistic" << endl;
2621 for (i = 0; i < set_size; i++) {
2627 cout <<
"schreier::compute_orbit_statistic done" << endl;
2632 int *orbit_count,
int verbose_level)
2635 int f_v = (verbose_level >= 1);
2639 cout <<
"schreier::compute_orbit_statistic_lint" << endl;
2642 for (i = 0; i < set_size; i++) {
2648 cout <<
"schreier::compute_orbit_statistic_lint done" << endl;
2656 int f_v = (verbose_level >= 1);
2661 cout <<
"schreier::orbits_as_set_of_sets" << endl;
2675 for (j = 0; j < l; j++) {
2682 cout <<
"schreier::orbits_as_set_of_sets done" << endl;
2687 int &nb_reps,
int verbose_level)
2689 int f_v = (verbose_level >= 1);
2693 cout <<
"schreier::get_orbit_reps" << endl;
2697 for (i = 0; i < nb_reps; i++) {
2703 cout <<
"schreier::get_orbit_reps done" << endl;
2709 int l_min = 0, l, i;
2711 int f_is_unique =
TRUE;
2715 if (idx_min == -1) {
2720 else if (l < l_min) {
2725 else if (l_min == l) {
2726 f_is_unique =
FALSE;
2734 int *orb,
int &nb,
int verbose_level)
2736 int f_v = (verbose_level >= 1);
2740 cout <<
"schreier::elements_in_orbit_of" << endl;
2747 cout <<
"schreier::elements_in_orbit_of done" << endl;
2753 int f_v = (verbose_level >= 1);
2757 cout <<
"schreier::get_orbit_length" << endl;
2763 for (h = 0; h < l; h++) {
2765 orbit_length[a] = l;
2769 cout <<
"schreier::get_orbit_length done" << endl;
2774 int *&orbit_lengths,
int &nb_orbit_lengths)
2776 int *val, *mult, len;
2782 nb_orbit_lengths = len;
2784 orbit_lengths =
NEW_int(nb_orbit_lengths);
2805 cout <<
"schreier::orbit_number idx == 0" << endl;
2815 cout <<
"schreier::orbit_number something is wrong, "
2816 "perhaps the orbit of the point has not yet "
2817 "been computed" << endl;
2824 int f_v = (verbose_level >= 1);
2829 cout <<
"schreier::get_orbit_number_and_position" << endl;
2836 if (orbit_idx == 0) {
2837 cout <<
"schreier::get_orbit_number_and_position orbit_idx == 0" << endl;
2847 cout <<
"schreier::get_orbit_number_and_position something is wrong, "
2848 "perhaps the orbit of the point has not yet "
2849 "been computed" << endl;
2853 cout <<
"schreier::get_orbit_number_and_position done" << endl;
2859 int *Adj,
int n,
int *&Decomp_scheme,
2862 int f_v = (verbose_level >= 1);
2866 int i, j, r, r0, a, b;
2869 cout <<
"schreier::get_orbit_decomposition_"
2870 "scheme_of_graph" << endl;
2878 cout <<
"I = " << I <<
" f1 = " << f1
2879 <<
" l1 = " << l1 << endl;
2886 cout <<
"J = " << J <<
" f2 = " << f2
2887 <<
" l2 = " << l2 << endl;
2889 for (i = 0; i < l1; i++) {
2892 for (j = 0; j < l2; j++) {
2894 if (Adj[a * n + b]) {
2903 cout <<
"schreier::get_orbit_decomposition_"
2904 "scheme_of_graph not tactical" << endl;
2905 cout <<
"I=" << I << endl;
2906 cout <<
"J=" << J << endl;
2907 cout <<
"r0=" << r0 << endl;
2908 cout <<
"r=" << r << endl;
2914 cout <<
"I = " << I <<
" J = " << J <<
" r = " << r0 << endl;
2920 cout <<
"Decomp_scheme = " << endl;
2924 cout <<
"schreier::get_orbit_decomposition_"
2925 "scheme_of_graph done" << endl;
2932 int *&point_list,
int &point_list_length)
2934 int i, j, k, f, l, ff, p;
2937 point_list_length = 0;
2941 point_list =
NEW_int(point_list_length);
2947 for (j = 0; j < l; j++) {
2950 point_list[ff + j] = p;
2954 if (ff != point_list_length) {
2955 cout <<
"schreier::get_schreier_vector_compact "
2956 "ff != point_list_length" << endl;
2967 int f_v = (verbose_level >= 1);
2968 int fst, len, root, cnt, l;
2976 cout <<
"schreier::shallow_tree_generators " << endl;
2977 cout <<
"computing shallow tree for orbit " << orbit_idx
2978 <<
" in action " <<
A->
label << endl;
2997 cout <<
"schreier::shallow_tree_generators "
2998 "iteration " << cnt <<
":" << endl;
3003 S->
init(
A, verbose_level - 2);
3006 cout <<
"schreier::shallow_tree_generators "
3008 <<
" before compute_point_orbit:" << endl;
3015 cout <<
"schreier::shallow_tree_generators "
3017 <<
" after compute_point_orbit, "
3018 "found an orbit of length " << l << endl;
3031 for (i = 0; i < len; i++) {
3035 candidates[nb_candidates++] = a;
3039 if (nb_candidates == 0) {
3040 cout <<
"schreier::shallow_tree_generators "
3041 "did not find element in orbit" << endl;
3045 cout <<
"schreier::shallow_tree_generators "
3046 "found " << nb_candidates
3047 <<
" candidates of points outside the orbit" << endl;
3057 cout <<
"schreier::shallow_tree_generators "
3058 "picking random candidate " << j <<
" / "
3059 << nb_candidates << endl;
3063 cout <<
"schreier::shallow_tree_generators "
3064 "found point " << a <<
" outside of orbit" << endl;
3072 cout <<
"schreier::shallow_tree_generators "
3073 "new generator is:" << endl;
3078 cout <<
"The order of the element is: " << o << endl;
3089 cout <<
"schreier::shallow_tree_generators cnt=" << cnt
3090 <<
" number of generators=" <<
gens->
len << endl;
3091 cout <<
"done" << endl;
3100 cout <<
"schreier::shallow_tree_generators " << endl;
3101 cout <<
"done" << endl;
3107 int gen_hdl_first,
int nb_gen,
int verbose_level)
3109 int f_v = (verbose_level >= 1);
3112 cout <<
"schreier::get_schreier_vector" << endl;
3115 schreier_vector * Schreier_vector;
3116 int f_trivial_group =
FALSE;
3119 f_trivial_group =
TRUE;
3122 Schreier_vector =
NEW_OBJECT(schreier_vector);
3124 Schreier_vector->init(gen_hdl_first, nb_gen, NULL, verbose_level - 1);
3127 Schreier_vector->init_from_schreier(
this,
3128 f_trivial_group, verbose_level);
3130 Schreier_vector->init_shallow_schreier_forest(
this,
3131 f_trivial_group, verbose_level);
3135 Schreier_vector->init_local_generators(
3141 cout <<
"schreier::get_schreier_vector done" << endl;
3143 return Schreier_vector;
3147 int gen_hdl_first,
int nb_gen,
3151 int f_v = (verbose_level >= 1);
3154 cout <<
"schreier::get_schreier_vector" << endl;
3158 int f_trivial_group =
FALSE;
3161 f_trivial_group =
TRUE;
3166 Schreier_vector->
init(gen_hdl_first, nb_gen, NULL, verbose_level - 1);
3170 switch (Shallow_schreier_tree_strategy) {
3175 cout <<
"schreier::get_schreier_vector "
3176 "shallow_schreier_tree_standard" << endl;
3191 cout <<
"schreier::get_schreier_vector "
3192 "shallow_schreier_tree_Seress" << endl;
3200 cout <<
"schreier::get_schreier_vector after "
3201 "Schreier_vector->init_shallow_schreier_forest, nb "
3202 "local gens in Schreier_vector = "
3204 cout <<
"f_has_local_generators=" <<
3215 cout <<
"schreier::get_schreier_vector "
3216 "shallow_schreier_tree_Seress" << endl;
3224 cout <<
"schreier::get_schreier_vector after Schreier_vector->"
3225 "init_shallow_schreier_forest, nb local gens in "
3228 cout <<
"f_has_local_generators="
3239 cout <<
"schreier::get_schreier_vector "
3240 "shallow_schreier_tree_Sajeeb" << endl;
3243 shallow_schreier_ai shallow_tree;
3244 shallow_tree.generate_shallow_tree(*
this, verbose_level);
3245 shallow_tree.get_degree_sequence(*
this, verbose_level);
3246 shallow_tree.print_degree_sequence();
3268 cout <<
"schreier::get_schreier_vector done" << endl;
3270 return Schreier_vector;
3279 int total_points_in_forest = 0;
3281 for (
int orbit_idx = 0; orbit_idx <
nb_orbits; orbit_idx++) {
3282 total_points_in_forest += this->
orbit_len[orbit_idx];
3285 return total_points_in_forest;
3294 for (
int orbit_idx = 0; orbit_idx <
nb_orbits; orbit_idx++) {
3296 / total_points_in_forest;
3311 int L = 0, N = last - fst;
3312 for (
int j = 0; j < last; j++) {
3317 return L / double(N);
3321 int (*compute_orbit_invariant_callback)(
schreier *Sch,
3322 int orbit_idx,
void *data,
int verbose_level),
3323 void *compute_orbit_invariant_data,
3326 int f_v = (verbose_level >= 1);
3330 cout <<
"schreier::compute_orbit_invariant" << endl;
3333 for (orbit_idx = 0; orbit_idx <
nb_orbits; orbit_idx++) {
3334 orbit_invariant[orbit_idx] = (*compute_orbit_invariant_callback)
3335 (
this, orbit_idx, compute_orbit_invariant_data, verbose_level - 2);
3338 cout <<
"schreier::compute_orbit_invariant done" << endl;
3347 int f_v = (verbose_level >= 1);
3350 cout <<
"schreier::print_TDA" << endl;
3361 ost <<
"\\\\" << endl;
3367 cout <<
"schreier::print_TDA done" << endl;
3375 int f_v = (verbose_level >= 1);
3378 cout <<
"schreier::latex_TDA" << endl;
3382 cout <<
"schreier::latex_TDA before Enc->latex_TDA" << endl;
3387 ost <<
"\\\\" << endl;
3389 cout <<
"schreier::latex_TDA after Enc->latex_TDA" << endl;
3394 cout <<
"schreier::latex_TDA done" << endl;
options for the report for a classification of combinatorial objects
int f_show_incidence_matrices
a collection of combinatorial functions
void perm_inverse(int *a, int *b, long int n)
void perm_identity(int *a, long int n)
encoding of combinatorial object for use with nauty
void latex_TDA_with_labels(std::ostream &ost, int nb_orbits, int *orbit_first, int *orbit_len, int *orbit, int verbose_level)
void distribution(int *v, int len_v, int *&val, int *&mult, int &len)
data structure for set partitions following Jeffrey Leon
void split_cell(int verbose_level)
void init_basic_with_Sz_in_int(int underlying_set_size, int nb_sets, int *Sz, int verbose_level)
a collection of functions related to sorted vectors
int int_vec_search(int *v, int len, int a, int &idx)
void int_vec_heapsort(int *v, int len)
void int_vec_sorting_permutation(int *v, int len, int *perm, int *perm_inv, int f_increasingly)
a statistical analysis of data consisting of single integers
void init(int *data, int data_length, int f_second, int verbose_level)
void print(int f_backwards)
data_structures::int_vec * Int_vec
interface to system functions
int random_integer(int p)
domain to compute with objects of type longinteger
int compare(longinteger_object &a, longinteger_object &b)
void integral_division_by_int(longinteger_object &a, int b, longinteger_object &q, int &r)
a class to represent arbitrary precision integers
int nb_times_image_of_called
a permutation group in a fixed action.
void element_print_quick(void *elt, std::ostream &ost)
void element_print(void *elt, std::ostream &ost)
void element_retrieve(int hdl, void *elt, int verbose_level)
void element_mult(void *a, void *b, void *ab, int verbose_level)
int element_is_one(void *elt, int verbose_level)
void element_invert(void *a, void *av, int verbose_level)
void element_one(void *elt, int verbose_level)
void element_move(void *a, void *b, int verbose_level)
void element_print_as_permutation(void *elt, std::ostream &ost)
action_pointer_table * ptr
int element_order(void *elt)
long int element_image_of(long int a, void *elt, int verbose_level)
compact storage of schreier vectors
int f_has_local_generators
void init_from_schreier(groups::schreier *S, int f_trivial_group, int verbose_level)
void init_shallow_schreier_forest(groups::schreier *S, int f_trivial_group, int f_randomized, int verbose_level)
void init(int gen_hdl_first, int nb_gen, int *sv, int verbose_level)
void init_local_generators(vector_ge *gens, int verbose_level)
a set and its known set stabilizer
void init_everything(actions::action *A, actions::action *A2, long int *Set, int set_sz, groups::strong_generators *gens, int verbose_level)
to hold a vector of group elements
void append(int *elt, int verbose_level)
void allocate(int length, int verbose_level)
void copy_in(int i, int *elt)
void print(std::ostream &ost)
void init(actions::action *A, int verbose_level)
Schreier trees for orbits of groups on points.
void init_generators_recycle_images(data_structures_groups::vector_ge &generators, int **old_images, int idx_generator_to_delete, int verbose_level)
void get_orbit_decomposition_scheme_of_graph(int *Adj, int n, int *&Decomp_scheme, int verbose_level)
void compute_orbit_invariant(int *&orbit_invariant, int(*compute_orbit_invariant_callback)(schreier *Sch, int orbit_idx, void *data, int verbose_level), void *compute_orbit_invariant_data, int verbose_level)
void shallow_tree_generators(int orbit_idx, int f_randomized, schreier *&shallow_tree, int verbose_level)
void * print_function_data
int preferred_choice_function_data2
void compute_point_orbit_with_limited_depth(int pt, int max_depth, int verbose_level)
void compute_all_point_orbits(int verbose_level)
void init_images_only(int nb_images, long int degree, int *images, int verbose_level)
void elements_in_orbit_of(int pt, int *orb, int &nb, int verbose_level)
void orbits_as_set_of_sets(data_structures::set_of_sets *&S, int verbose_level)
void orbits_on_invariant_subset_fast(int len, int *subset, int verbose_level)
void compute_all_orbits_on_invariant_subset_lint(int len, long int *subset, int verbose_level)
void get_orbit_number_and_position(int pt, int &orbit_idx, int &orbit_pos, int verbose_level)
void coset_rep_with_verbosity(int j, int verbose_level)
void orbits_on_invariant_subset(int len, int *subset, int &nb_orbits_on_subset, int *&orbit_perm, int *&orbit_perm_inv)
void get_orbit_partition_of_points_and_lines(data_structures::partitionstack &S, int verbose_level)
void print_orbit(int orbit_no)
void print_TDA(std::ostream &ost, geometry::object_with_canonical_form *OwCF, combinatorics::classification_of_objects_report_options *Report_options, int verbose_level)
void random_schreier_generator(int *Elt, int verbose_level)
void compute_orbit_statistic_lint(long int *set, int set_size, int *orbit_count, int verbose_level)
void random_schreier_generator_ith_orbit(int *Elt, int orbit_no, int verbose_level)
void swap_points(int i, int j, int verbose_level)
void init_generators_by_handle(std::vector< int > &gen_hdl, int verbose_level)
void extend_orbit(int *elt, int verbose_level)
void compute_all_point_orbits_with_preferred_labels(long int *preferred_labels, int verbose_level)
data_structures_groups::vector_ge gens_inv
void(* preferred_choice_function)(int pt, int &pt_pref, schreier *Sch, void *data, int data2, int verbose_level)
int sum_up_orbit_lengths()
void init_single_generator(int *elt, int verbose_level)
void get_orbit_length(int *&orbit_length, int verbose_level)
void(* print_function)(std::ostream &ost, int pt, void *data)
int find_shortest_orbit_if_unique(int &idx)
void init_images(int nb_images, int verbose_level)
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 orbits_on_invariant_subset_fast_lint(int len, long int *subset, int verbose_level)
void transporter_from_orbit_rep_to_point(int pt, int &orbit_idx, int *Elt, int verbose_level)
strong_generators * stabilizer_orbit_rep(actions::action *default_action, ring_theory::longinteger_object &full_group_order, int orbit_idx, int verbose_level)
void init_generators(data_structures_groups::vector_ge &generators, int verbose_level)
void transporter_from_point_to_orbit_rep(int pt, int &orbit_idx, int *Elt, int verbose_level)
void compute_point_orbit(int pt, int verbose_level)
data_structures_groups::set_and_stabilizer * get_orbit_rep(actions::action *default_action, ring_theory::longinteger_object &full_group_order, int orbit_idx, int verbose_level)
void print_orbit_length_distribution(std::ostream &ost)
double get_average_word_length()
void compute_all_point_orbits_with_prefered_reps(int *prefered_reps, int nb_prefered_reps, int verbose_level)
void point_stabilizer(actions::action *default_action, ring_theory::longinteger_object &go, groups::sims *&Stab, int orbit_no, int verbose_level)
void compute_orbit_statistic(int *set, int set_size, int *orbit_count, int verbose_level)
void images_append(int verbose_level)
void get_orbit_reps(int *&Reps, int &nb_reps, int verbose_level)
void move_point_here(int here, int pt)
void create_point_list_sorted(int *&point_list, int &point_list_length)
void init_images_recycle(int nb_images, int **old_images, int idx_deleted_generator, int verbose_level)
long int get_image(long int i, int gen_idx, int verbose_level)
void intersection_vector(int *set, int len, int *intersection_cnt)
data_structures_groups::vector_ge gens
void init(actions::action *A, int verbose_level)
int f_preferred_choice_function
void get_orbit(int orbit_idx, long int *set, int &len, int verbose_level)
void get_orbit_rep_to(actions::action *default_action, ring_theory::longinteger_object &full_group_order, int orbit_idx, data_structures_groups::set_and_stabilizer *Rep, int verbose_level)
void * preferred_choice_function_data
void coset_rep_inv(int j, int verbose_level)
strong_generators * stabilizer_any_point_plus_cosets(actions::action *default_action, ring_theory::longinteger_object &full_group_order, int pt, data_structures_groups::vector_ge *&cosets, int verbose_level)
void compute_all_orbits_on_invariant_subset(int len, long int *subset, int verbose_level)
void get_orbit_in_order(std::vector< int > &Orb, int orbit_idx, int verbose_level)
data_structures_groups::schreier_vector * get_schreier_vector(int gen_hdl_first, int nb_gen, enum shallow_schreier_tree_strategy Shallow_schreier_tree_strategy, int verbose_level)
void non_trivial_random_schreier_generator(actions::action *A_original, int *Elt, int verbose_level)
void get_orbit_lengths_once_each(int *&orbit_lengths, int &nb_orbit_lengths)
void trace_back(int *path, int i, int &j)
void get_orbit_partition(data_structures::partitionstack &S, int verbose_level)
strong_generators * stabilizer_any_point(actions::action *default_action, ring_theory::longinteger_object &full_group_order, int pt, int verbose_level)
void coset_rep(int j, int verbose_level)
int orbit_representative(int pt)
void print_tables(std::ostream &ost, int f_with_cosetrep)
void latex_TDA(std::ostream &ost, combinatorics::encoded_combinatorial_object *Enc, int verbose_level)
void init_generators_by_hdl(int nb_gen, int *gen_hdl, int verbose_level)
a permutation group represented via a stabilizer chain
void init(actions::action *A, int verbose_level)
void group_order(ring_theory::longinteger_object &go)
void init_trivial_group(int verbose_level)
void group_order_verbose(ring_theory::longinteger_object &go, int verbose_level)
void add_generator_at_level(int *elt, int lvl, int verbose_level)
void random_schreier_generator(int *Elt, int verbose_level)
int strip(int *elt, int *residue, int &drop_out_level, int &image, int verbose_level)
a strong generating set for a permutation group with respect to a fixed action
#define Int_vec_zero(A, B)
#define Int_matrix_print(A, B, C)
#define Int_vec_copy(A, B, C)
orbiter_kernel_system::orbiter_session * Orbiter
global Orbiter session
shallow_schreier_tree_strategy
the strategy which is employed to create shallow Schreier trees
@ shallow_schreier_tree_Seress_randomized
@ shallow_schreier_tree_Sajeeb
@ shallow_schreier_tree_Seress_deterministic
@ shallow_schreier_tree_standard
the orbiter library for the classification of combinatorial objects