21namespace layer3_group_actions {
59 int verbose_level = 0;
60 int f_v = (verbose_level >= 1);
63 cout <<
"orbits_on_something::freeself" << endl;
76 cout <<
"orbits_on_something::freeself "
88 int f_v = (verbose_level >= 1);
92 cout <<
"orbits_on_something::init" << endl;
100 fname.append(
"_orbits.bin");
112 cout <<
"orbits_on_something::init "
113 "reading orbits from file "
126 cout <<
"orbits_on_something::init "
127 "before reading orbits from file "
133 cout <<
"orbits_on_something::init "
134 "after reading orbits from file "
141 cout <<
"orbits_on_something::init "
142 "computing orbits of the given group" << endl;
149 cout <<
"orbits_on_something::init "
150 "computing orbits done" << endl;
152 <<
" orbits of the group" << endl;
162 cout <<
"orbits_on_something::init "
163 "before Sch->write_to_file_binary" << endl;
167 cout <<
"orbits_on_something::init "
168 "after Sch->write_to_file_binary" << endl;
171 cout <<
"Written file " <<
fname <<
" of size "
175 cout <<
"orbits_on_something::init "
176 "before Sch->write_to_file_csv" << endl;
180 cout <<
"orbits_on_something::init "
181 "after Sch->write_to_file_csv" << endl;
183 cout <<
"Written file " <<
fname_csv <<
" of size "
189 cout <<
"orbits_on_something::init "
190 "orbit length distribution:" << endl;
198 cout <<
"orbits_on_something::init done" << endl;
204 int f_v = (verbose_level >= 1);
207 cout <<
"orbits_on_something::stabilizer_of" << endl;
217 cout <<
"orbits_on_something::init "
218 "computing stabilizer of first orbit rep" << endl;
223 orbit_idx, verbose_level);
225 cout <<
"orbits_on_something::init "
226 "after Sch->stabilizer_orbit_rep" << endl;
230 std::string gens_str;
236 cout <<
"The stabilizer has order " << stab_go << endl;
237 cout <<
"Number of generators " << Stab->
gens->
len << endl;
238 cout <<
"Generators for the stabilizer in coded form: " << endl;
239 cout << gens_str << endl;
246 sprintf(str,
"_stab_orb_%d", orbit_idx);
248 fname_stab.assign(
prefix);
249 fname_stab.append(str);
250 fname_stab.append(
".makefile");
252 label_stab.assign(
prefix);
253 label_stab.append(str);
257 cout <<
"orbits_on_something::init "
258 "exporting stabilizer of first orbit rep to " << fname_stab << endl;
262 fname_stab, label_stab, label_stab,
268 cout <<
"orbits_on_something::stabilizer_of done" << endl;
274 long int *set,
int set_sz,
int go,
int l,
275 std::vector<int> &Idx,
281 for (i = 0; i < set_sz; i++) {
291 long int *set,
int set_sz,
int go,
292 long int *orbit_type,
299 int f_v = (verbose_level >= 1);
300 int i, j, b, c, l, orbit_type_sz;
306 cout <<
"orbits_on_something::orbit_type_of_set" << endl;
309 orbit_type_sz = (go + 1) * go;
316 for (i = 0; i < set_sz; i++) {
322 cout <<
"orbits_on_something::orbit_type_of_set l > go" << endl;
329 for (i = 1; i <= set_sz; i++) {
330 if (i == set_sz || v[i] != v[i - 1]) {
334 cout <<
"orbits_on_something::orbit_type_of_set l > go" << endl;
339 cout <<
"orbits_on_something::orbit_type_of_set c > go" << endl;
342 orbit_type[c * go + l - 1]++;
348 cout <<
"orbits_on_something::orbit_type_of_set done" << endl;
355 ost <<
"\\left[" << endl;
356 print_integer_matrix_tex(ost,
359 ost <<
"\\right]" << endl;
365 ost <<
"\\left[" << endl;
369 ost <<
"\\right]" << endl;
374 long int *compact_type;
375 long int *row_labels;
376 long int *col_labels;
380 compact_type, row_labels, col_labels, m, n);
383 compact_type, m, n, row_labels, col_labels,
393 long int *&compact_type,
long int *&row_labels,
long int *&col_labels,
int &m,
int &n)
399 int i, j, m1, n1, a, u, v;
409 for (i = 1; i <= goi; i++) {
410 for (j = 1; j <= goi; j++) {
411 if (orbit_type[i * goi + j - 1]) {
412 f_row_used[i - 1] =
TRUE;
413 f_col_used[j - 1] =
TRUE;
418 for (i = 1; i <= goi; i++) {
419 if (f_row_used[i - 1]) {
424 for (j = 1; j <= goi; j++) {
425 if (f_col_used[j - 1]) {
434 for (i = 1; i <= goi; i++) {
435 if (f_row_used[i - 1]) {
442 for (j = 1; j <= goi; j++) {
443 if (f_col_used[j - 1]) {
449 for (i = 1; i <= goi; i++) {
450 for (j = 1; j <= goi; j++) {
451 a = orbit_type[i * goi + j - 1];
455 compact_type[u * n + v] = a;
474 for (i = 0; i < Filtered_orbits->
nb_sets; i++) {
475 cout <<
"set " << i <<
" has size " << Filtered_orbits->
Set_size[i] <<
" : ";
477 cout <<
"and consists of orbits of length " << len <<
":" << endl;
482 for (j = 0; j < Filtered_orbits->
Set_size[i]; j++) {
483 a = Filtered_orbits->
Sets[i][j];
484 ost <<
"orbit " << j <<
" / " << Filtered_orbits->
Set_size[i] <<
" is " << a <<
" : ";
487 cout <<
"orbits_on_something::print_orbits_based_on_filtered_orbits l != len" << endl;
501 int f_v = (verbose_level >= 1);
504 cout <<
"orbits_on_something::classify_orbits_by_length" << endl;
510 cout <<
"orbits_on_something::classify_orbits_by_length "
511 "The distribution of orbit lengths is: ";
517 cout <<
"orbits_on_something::classify_orbits_by_length "
518 "before C->get_set_partition_and_types" << endl;
529 cout <<
"orbits_on_something::classify_orbits_by_length "
530 "after C->get_set_partition_and_types" << endl;
535 cout <<
"Orbits_classified:" << endl;
537 cout <<
"i : type[i] : number of orbits" << endl;
544 cout <<
"orbits_on_something::classify_orbits_by_length done" << endl;
553 ost <<
"Type : orbit length : number of orbits of this length\\\\" << endl;
571 if (j < Orbits_classified->Set_size[i] - 1) {
576 ost <<
"\\\\" << endl;
589 cout <<
"orbits_on_something::get_orbit_type_index orbit length " << orbit_length <<
" not found" << endl;
606 int (*test_function)(
long int *orbit,
int orbit_length,
void *data),
607 void *test_function_data,
610 int f_v = (verbose_level >= 1);
613 cout <<
"orbits_on_something::test_all_orbits_by_length" << endl;
616 int type_idx, orbit_length, type_idx2, prev_nb;
622 cout <<
"orbits_on_something::test_all_orbits_by_length type_idx = " << type_idx <<
" orbit_length = " << orbit_length << endl;
628 test_function, test_function_data,
633 cout <<
"orbits_on_something::test_all_orbits_by_length" << endl;
641 int (*test_function)(
long int *orbit,
int orbit_length,
void *data),
642 void *test_function_data,
645 int f_v = (verbose_level >= 1);
648 cout <<
"orbits_on_something::test_orbits_of_a_certain_length "
649 "orbit_length=" << orbit_length << endl;
659 cout <<
"orbits_on_something::test_orbits_of_a_certain_length "
660 "nb_points=" << nb_points << endl;
665 for (i = 0; i < nb_points; i++) {
668 if (l != orbit_length) {
669 cout <<
"orbits_on_something::test_orbits_of_a_certain_length l != orbit_length" << endl;
675 cout <<
"orbits_on_something::test_orbits_of_a_certain_length a == 73910" << endl;
680 r = (*test_function)(orbit, orbit_length, test_function_data);
684 cout <<
"r=" << r << endl;
698 cout <<
"orbits_on_something::test_orbits_of_a_certain_length done" << endl;
725 cout <<
"Too many to print" << endl;
735 int (*test_function)(
long int *orbit1,
int orbit_length1,
long int *orbit2,
int orbit_length2,
void *data),
736 void *test_function_data,
739 int f_v = (verbose_level >= 1);
742 cout <<
"orbits_on_something::test_pair_of_orbits_of_a_equal_length "
743 "orbit_length=" << orbit_length << endl;
752 if (l != orbit_length) {
753 cout <<
"orbits_on_something::test_pair_of_orbits_of_a_equal_length l != orbit_length" << endl;
758 if (l != orbit_length) {
759 cout <<
"orbits_on_something::test_pair_of_orbits_of_a_equal_length l != orbit_length" << endl;
762 if ((*test_function)(Orbit1, orbit_length, Orbit2, orbit_length, test_function_data)) {
775 int i, a, len, orbit_length;
781 ost <<
"The orbits of type " << type_idx <<
" have size " << orbit_length <<
"\\\\" << endl;
782 ost <<
"The number of orbits of type " << type_idx <<
" is " << nb_points <<
"\\\\" << endl;
786 for (i = 0; i < nb_points; i++) {
789 ost << i <<
" : " << a <<
" : ";
791 ost <<
"\\\\" << endl;
801 long int *filter_by_set,
802 int filter_by_set_size,
805 int f_has_user_data,
long int *user_data,
int user_data_size,
806 int f_has_colors,
int number_colors,
int *color_table,
807 int (*test_function)(
long int *orbit1,
int orbit_length1,
long int *orbit2,
int orbit_length2,
void *data),
808 void *test_function_data,
811 int f_v = (verbose_level >= 1);
814 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length_after_filtering "
815 "orbit_length=" << orbit_length <<
" filter_by_set_size=" << filter_by_set_size << endl;
819 int nb_points_original;
835 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length_after_filtering "
836 "nb_points_original=" << nb_points_original << endl;
843 long int *filtered_set_of_orbits;
844 int filtered_set_of_orbits_size;
846 filtered_set_of_orbits_size = 0;
847 filtered_set_of_orbits =
NEW_lint(nb_points_original);
848 for (i = 0; i < nb_points_original; i++) {
851 if (l1 != orbit_length) {
852 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length_after_filtering l1 != orbit_length" << endl;
855 if (!(*test_function)(filter_by_set, filter_by_set_size, orbit1, orbit_length, test_function_data)) {
858 filtered_set_of_orbits[filtered_set_of_orbits_size++] = a;
862 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length_after_filtering "
863 "nb_points_original=" << nb_points_original <<
" filtered_set_of_orbits_size=" << filtered_set_of_orbits_size << endl;
866 int nb_reduced_colors = 0;
867 int *reduced_color = NULL;
876 cout <<
"i : filter_by_set[i] : color_table[filter_by_set[i]]" << endl;
877 for (i = 0; i < filter_by_set_size; i++) {
878 cout << i <<
" : " << filter_by_set[i] <<
" : " << color_table[filter_by_set[i]] << endl;
884 reduced_color =
NEW_int(number_colors);
885 for (i = 0; i < number_colors; i++) {
886 reduced_color[i] = -1;
888 for (i = 0; i < filter_by_set_size; i++) {
889 c = color_table[filter_by_set[i]];
890 reduced_color[c] = -2;
892 for (c = 0; c < number_colors; c++) {
893 if (reduced_color[c] == -2) {
896 reduced_color[c] = nb_reduced_colors++;
899 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length_after_filtering "
900 "nb_reduced_colors=" << nb_reduced_colors << endl;
905 cout <<
"c : reduced_color[c]" << endl;
906 for (c = 0; c < number_colors; c++) {
907 cout << c <<
" : " << reduced_color[c] << endl;
912 point_color =
NEW_int(filtered_set_of_orbits_size * orbit_length);
913 for (i = 0; i < filtered_set_of_orbits_size; i++) {
914 a = filtered_set_of_orbits[i];
917 if (l1 != orbit_length) {
918 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length_after_filtering l1 != orbit_length" << endl;
924 cout <<
"i = 29044, a=" << a <<
" orbit1:" << endl;
929 for (j = 0; j < orbit_length; j++) {
930 c = color_table[orbit1[j]];
931 c2 = reduced_color[c];
933 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length_after_filtering c2 < 0" << endl;
938 cout <<
"j=" << j <<
" c=" << c <<
" c2=" << c2 << endl;
941 point_color[i * orbit_length + j] = c2;
949 L = ((
long int) filtered_set_of_orbits_size * (
long int) (filtered_set_of_orbits_size - 1)) >> 1;
954 cout <<
"nb_points = " << filtered_set_of_orbits_size << endl;
955 cout <<
"L = " << L << endl;
956 cout <<
"L100 = " << L100 << endl;
963 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length_after_filtering point sets:" << endl;
964 for (i = 0; i < filtered_set_of_orbits_size; i++) {
965 a = filtered_set_of_orbits[i];
969 if (i < filtered_set_of_orbits_size - 1) {
977 for (i = 0; i < filtered_set_of_orbits_size; i++) {
978 a = filtered_set_of_orbits[i];
981 if (l1 != orbit_length) {
982 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length_after_filtering l1 != orbit_length" << endl;
985 for (j = i + 1; j < filtered_set_of_orbits_size; j++) {
986 b = filtered_set_of_orbits[j];
989 if (l2 != orbit_length) {
990 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length_after_filtering l2 != orbit_length" << endl;
996 if ((k % L100) == 0) {
1000 << (double) k / (
double) L100 <<
"%, " <<
"i=" << i <<
" j=" << j <<
" k=" << k <<
", dt=";
1007 if ((*test_function)(orbit1, orbit_length, orbit2, orbit_length, test_function_data)) {
1018 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length_after_filtering the graph has been created" << endl;
1022 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length_after_filtering creating colored_graph" << endl;
1029 filtered_set_of_orbits_size ,
1030 nb_reduced_colors , orbit_length,
1033 filtered_set_of_orbits ,
1039 if (f_has_user_data) {
1041 long int *my_user_data;
1043 my_user_data =
NEW_lint(user_data_size);
1046 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length_after_filtering user_data before: ";
1049 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length_after_filtering" << endl;
1055 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length_after_filtering user_data after: ";
1071 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length_after_filtering colored_graph created" << endl;
1084 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length_after_filtering done" << endl;
1095 int f_has_user_data,
long int *user_data,
int user_data_size,
1096 int f_has_colors,
int number_colors,
int *color_table,
1097 int (*test_function)(
long int *orbit1,
int orbit_length1,
long int *orbit2,
int orbit_length2,
void *data),
1098 void *test_function_data,
1101 int f_v = (verbose_level >= 1);
1104 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length "
1105 "orbit_length=" << orbit_length << endl;
1123 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length "
1124 "nb_points=" << nb_points << endl;
1134 point_color =
NEW_int(nb_points * orbit_length);
1135 for (i = 0; i < nb_points; i++) {
1138 if (l1 != orbit_length) {
1139 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length l1 != orbit_length" << endl;
1142 for (j = 0; j < orbit_length; j++) {
1143 c = color_table[orbit1[j]];
1144 point_color[i * orbit_length + j] = c;
1152 L = ((
long int) nb_points * (
long int) (nb_points - 1)) >> 1;
1157 cout <<
"nb_points = " << nb_points << endl;
1158 cout <<
"L = " << L << endl;
1159 cout <<
"L100 = " << L100 << endl;
1166 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length point sets:" << endl;
1167 for (i = 0; i < nb_points; i++) {
1171 if (i < nb_points - 1) {
1179 for (i = 0; i < nb_points; i++) {
1182 if (l1 != orbit_length) {
1183 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length l1 != orbit_length" << endl;
1186 for (j = i + 1; j < nb_points; j++) {
1189 if (l2 != orbit_length) {
1190 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length l2 != orbit_length" << endl;
1197 if ((k % L100) == 0) {
1200 cout <<
"progress: "
1201 << (double) k / (
double) L100 <<
"%, " <<
"i=" << i <<
" j=" << j <<
" k=" << k <<
", dt=";
1208 if ((*test_function)(orbit1, orbit_length, orbit2, orbit_length, test_function_data)) {
1221 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length the graph has been created" << endl;
1225 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length creating colored_graph" << endl;
1240 if (f_has_user_data) {
1242 long int *my_user_data;
1244 my_user_data =
NEW_lint(user_data_size);
1247 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length user_data before: ";
1250 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length" << endl;
1254 int_vec_apply(user_data,
1263 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length user_data after: ";
1280 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length colored_graph created" << endl;
1295 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length done" << endl;
1303 long int *extracted_set,
1307 int f_v = (verbose_level >= 1);
1314 cout <<
"orbits_on_something::extract_orbits "
1315 "orbit_length = " << orbit_length <<
" nb_orbits = " << nb_orbits << endl;
1319 for (i = 0; i < nb_orbits; i++) {
1323 if (l != orbit_length) {
1324 cout <<
"orbits_on_something::extract_orbits l != orbit_length" << endl;
1327 Lint_vec_copy(orbit, extracted_set + i * orbit_length, orbit_length);
1333 cout <<
"orbits_on_something::extract_orbits done" << endl;
1340 long int *orbits_idx,
1341 long int *extracted_set,
1344 int f_v = (verbose_level >= 1);
1352 cout <<
"orbits_on_something::extract_orbits_using_classification "
1353 "orbit_length = " << orbit_length <<
" nb_orbits = " << nb_orbits << endl;
1357 for (i = 0; i < nb_orbits; i++) {
1361 if (l != orbit_length) {
1362 cout <<
"orbits_on_something::extract_orbits_using_classification l != orbit_length" << endl;
1365 Lint_vec_copy(orbit, extracted_set + i * orbit_length, orbit_length);
1371 cout <<
"orbits_on_something::extract_orbits_using_classification done" << endl;
1381 int f_has_user_data,
long int *user_data,
int user_data_size,
1382 int (*test_function)(
long int *orbit1,
int orbit_length1,
long int *orbit2,
int orbit_length2,
void *data),
1383 void *test_function_data,
1387 int f_v = (verbose_level >= 1);
1390 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length_override_orbits_classified "
1391 "orbit_length=" << orbit_length << endl;
1407 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length_override_orbits_classified "
1408 "type_idx=" << type_idx << endl;
1410 nb_points = my_orbits_classified->
Set_size[type_idx];
1412 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length_override_orbits_classified "
1413 "nb_points=" << nb_points << endl;
1419 L = ((
long int) nb_points * (
long int) (nb_points - 1)) >> 1;
1424 cout <<
"L = " << L << endl;
1425 cout <<
"L100 = " << L100 << endl;
1433 for (i = 0; i < nb_points; i++) {
1434 a = my_orbits_classified->
Sets[type_idx][i];
1436 if (l1 != orbit_length) {
1437 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length_override_orbits_classified l1 != orbit_length" << endl;
1440 for (j = i + 1; j < nb_points; j++) {
1441 b = my_orbits_classified->
Sets[type_idx][j];
1443 if (l2 != orbit_length) {
1444 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length_override_orbits_classified l2 != orbit_length" << endl;
1451 if ((k % L100) == 0) {
1454 cout <<
"progress: "
1455 << (double) k / (
double) L100 <<
" % dt=";
1462 if ((*test_function)(orbit1, orbit_length, orbit2, orbit_length, test_function_data)) {
1475 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length_override_orbits_classified the graph has been created" << endl;
1479 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length_override_orbits_classified creating colored_graph" << endl;
1490 my_orbits_classified->
Sets[type_idx],
1495 if (f_has_user_data) {
1496 long int *my_user_data;
1498 my_user_data =
NEW_lint(user_data_size);
1501 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length_override_orbits_classified user_data before: ";
1504 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length_override_orbits_classified" << endl;
1510 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length_override_orbits_classified user_data after: ";
1516 user_data_size, 0 );
1524 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length_override_orbits_classified colored_graph created" << endl;
1533 cout <<
"orbits_on_something::create_graph_on_orbits_of_a_certain_length_override_orbits_classified done" << endl;
1542 int nb_orbit_lengths,
1544 int f_has_user_data,
long int *user_data,
int user_data_size,
1545 int (*test_function)(
long int *orbit1,
int orbit_length1,
long int *orbit2,
int orbit_length2,
void *data),
1546 void *test_function_data,
1550 int f_v = (verbose_level >= 1);
1553 cout <<
"orbits_on_something::create_weighted_graph_on_orbits "
1558 int nb_points_total;
1559 long int *Pt_labels;
1563 int max_orbit_length;
1574 int I, J, j0, fst, t;
1578 Pts_fst =
NEW_int(nb_orbit_lengths);
1579 Pts_len =
NEW_int(nb_orbit_lengths);
1580 Type_idx =
NEW_int(nb_orbit_lengths);
1582 nb_points_total = 0;
1583 max_orbit_length = 0;
1584 for (i = 0; i < nb_orbit_lengths; i++) {
1586 Pts_fst[i] = nb_points_total;
1587 Pts_len[i] = my_orbits_classified->
Set_size[Type_idx[i]];
1588 nb_points_total += Pts_len[i];
1589 max_orbit_length =
MAX(max_orbit_length, Orbit_lengths[i]);
1595 cout <<
"orbits_on_something::create_weighted_graph_on_orbits "
1596 "max_orbit_length=" << max_orbit_length << endl;
1597 cout <<
"orbits_on_something::create_weighted_graph_on_orbits "
1598 "nb_points_total=" << nb_points_total << endl;
1600 cout <<
"i : Type_idx[i] : Pts_fst[i] : Pts_len[i]" << endl;
1601 for (i = 0; i < nb_orbit_lengths; i++) {
1602 cout << i <<
" : " << Type_idx[i] <<
" : " << Pts_fst[i] <<
" : " << Pts_len[i] << endl;
1607 cout <<
"orbits_on_something::create_weighted_graph_on_orbits creating Pt_labels[] and Pt_color[]" << endl;
1609 Pt_labels =
NEW_lint(nb_points_total);
1610 Pt_color =
NEW_int(nb_points_total);
1611 for (I = 0; I < nb_orbit_lengths; I++) {
1615 cout <<
"orbits_on_something::create_weighted_graph_on_orbits I=" << I <<
" fst=" << fst <<
" len=" << Pts_len[I] <<
" t=" << t << endl;
1617 for (i = 0; i < Pts_len[I]; i++) {
1618 Pt_labels[fst + i] = my_orbits_classified->
Sets[t][fst + i];
1619 Pt_color[fst + i] = I;
1625 cout <<
"orbits_on_something::create_weighted_graph_on_orbits allocating orbit1, orbit2" << endl;
1628 orbit1 =
NEW_lint(max_orbit_length);
1629 orbit2 =
NEW_lint(max_orbit_length);
1631 L = ((
long int) nb_points_total * (
long int) (nb_points_total - 1)) >> 1;
1636 cout <<
"L = " << L << endl;
1637 cout <<
"L100 = " << L100 << endl;
1644 cout <<
"orbits_on_something::create_weighted_graph_on_orbits creating adjacency bitvector" << endl;
1648 for (I = 0; I < nb_orbit_lengths; I++) {
1649 ol1 = Orbit_lengths[I];
1650 for (i = 0; i < Pts_len[I]; i++) {
1651 a = my_orbits_classified->
Sets[Type_idx[I]][i];
1654 cout <<
"orbits_on_something::create_weighted_graph_on_orbits l1 != ol1" << endl;
1657 for (J = I; J < nb_orbit_lengths; J++) {
1658 ol2 = Orbit_lengths[J];
1665 for (j = j0; j < Pts_len[J]; j++) {
1666 b = my_orbits_classified->
Sets[Type_idx[J]][j];
1669 cout <<
"orbits_on_something::create_weighted_graph_on_orbits l2!= ol2" << endl;
1676 if ((k % L100) == 0) {
1679 cout <<
"progress: "
1680 << (double) k / (
double) L100 <<
" % dt=";
1687 if ((*test_function)(orbit1, ol1, orbit2, ol2, test_function_data)) {
1702 cout <<
"orbits_on_something::create_weighted_graph_on_orbits l != L" << endl;
1707 cout <<
"orbits_on_something::create_weighted_graph_on_orbits the graph has been created" << endl;
1711 cout <<
"orbits_on_something::create_weighted_graph_on_orbits creating colored_graph" << endl;
1717 int nb_colors = nb_orbit_lengths;
1730 if (f_has_user_data) {
1731 long int *my_user_data;
1733 my_user_data =
NEW_lint(user_data_size);
1736 cout <<
"orbits_on_something::create_weighted_graph_on_orbits user_data before: ";
1739 cout <<
"orbits_on_something::create_weighted_graph_on_orbits" << endl;
1745 cout <<
"orbits_on_something::create_weighted_graph_on_orbits user_data after: ";
1751 user_data_size, 0 );
1759 cout <<
"orbits_on_something::create_weighted_graph_on_orbits colored_graph created" << endl;
1771 cout <<
"orbits_on_something::create_weighted_graph_on_orbits done" << endl;
1779 int (*evaluate_orbit_invariant_function)(
int a,
int i,
int j,
void *evaluate_data,
int verbose_level),
1780 void *evaluate_data,
int verbose_level)
1782 int f_v = (verbose_level >= 1);
1785 cout <<
"orbits_on_something::compute_orbit_invariant_after_classification" << endl;
1789 cout <<
"orbits_on_something::compute_orbit_invariant_after_classification before evaluate_function_and_store" << endl;
1792 evaluate_orbit_invariant_function,
1796 cout <<
"orbits_on_something::compute_orbit_invariant_after_classification after evaluate_function_and_store" << endl;
1801 cout <<
"orbits_on_something::compute_orbit_invariant_after_classification done" << endl;
1809 int f_v = (verbose_level >= 1);
1812 cout <<
"orbits_on_something::get_orbit_number_and_position" << endl;
1818 cout <<
"orbits_on_something::get_orbit_number_and_position done" << endl;
1826 int f_v = (verbose_level >= 1);
1830 cout <<
"orbits_on_something::create_latex_report" << endl;
1832 fname_tex.assign(
prefix);
1833 fname_tex.append(
"_orbits_report.tex");
1839 snprintf(title, 1000,
"Orbits");
1845 ofstream ost(fname_tex);
1861 cout <<
"orbits_on_something::create_latex_report before report" << endl;
1863 report(ost, verbose_level);
1865 cout <<
"orbits_on_something::create_latex_report after report" << endl;
1874 cout <<
"written file " << fname_tex <<
" of size "
1879 cout <<
"orbits_on_something::create_latex_report done" << endl;
1885 int f_v = (verbose_level >= 1);
1888 cout <<
"orbits_on_something::report" << endl;
1896 cout <<
"orbits_on_something::report step 1" << endl;
1900 int i, orbit_length, nb_orbits, j, idx, l1;
1902 ost <<
"\\section*{Group Orbits}" << endl;
1905 ost <<
"Orbits of the group $" <<
A->
label_tex <<
"$:\\\\" << endl;
1908 ost <<
"Considering the orbit length, there are "
1910 ost <<
"$$" << endl;
1913 ost <<
"$$" << endl;
1914 ost <<
"i : orbit length : number of orbits\\\\" << endl;
1919 ost <<
"Orbits classified:\\\\" << endl;
1923 cout <<
"orbits_on_something::report step 2" << endl;
1925 ost <<
"\\section*{Orbit Representatives}" << endl;
1932 ost <<
"Orbits of length " << orbit_length <<
":\\\\" << endl;
1939 j_max =
MINIMUM(nb_orbits, 100);
1940 if (j_max < nb_orbits) {
1941 cout <<
"orbits_on_something::report step 2, cutting off at " << j_max <<
" because the number of orbits is too large: " << nb_orbits << endl;
1944 for (j = 0; j < j_max; j++) {
1946 ost <<
"Orbit " << idx <<
":" << endl;
1953 ost <<
"$$" << endl;
1956 ost <<
"$$" << endl;
1957 ost <<
"\\\\" << endl;
1964 ost <<
"\\bigskip" << endl;
1971 cout <<
"orbits_on_something::report step 3" << endl;
1973 ost <<
"\\section*{Orbits}" << endl;
1978 ost <<
"Orbits of length " << orbit_length <<
":\\\\" << endl;
1983 for (j = 0; j < nb_orbits; j++) {
1985 ost <<
"Orbit " << idx <<
":" << endl;
1990 ost <<
"\\\\" << endl;
1997 ost <<
"\\bigskip" << endl;
2002 cout <<
"orbits_on_something::report step 4" << endl;
2004 ost <<
"\\section*{Stabilizers}" << endl;
2008 ost <<
"Orbits of length " << orbit_length <<
":\\\\" << endl;
2013 for (j = 0; j < nb_orbits; j++) {
2015 ost <<
"Orbit " << idx <<
":" << endl;
2020 ost <<
"\\\\" << endl;
2031 ost <<
"Stabilizer of orbit representative " << Orb[0] <<
":\\\\" << endl;
2046 cout <<
"orbits_on_something::report done" << endl;
2052 int f_v = (verbose_level >= 1);
2055 cout <<
"orbits_on_something::report_quick" << endl;
2071 ost <<
"orbit length : number of orbits of that length:\\\\" << endl;
2087 ost <<
"$$" << endl;
2090 ost <<
"$$" << endl;
a collection of combinatorial functions
compact storage of 0/1-data as bitvectors
void m_i(long int i, int a)
void allocate(long int length)
void print(std::ostream &ost, long int *v, int len)
void evaluate_function_and_store(data_structures::set_of_sets *&Function_values, int(*evaluate_function)(int a, int i, int j, void *evaluate_data, int verbose_level), void *evaluate_data, int verbose_level)
void print_table_tex(std::ostream &ost)
a collection of functions related to sorted vectors
void int_vec_heapsort(int *v, int len)
a statistical analysis of data consisting of single integers
void init(int *data, int data_length, int f_second, int verbose_level)
data_structures::set_of_sets * get_set_partition_and_types(int *&types, int &nb_types, int verbose_level)
int get_value_of_class(int class_idx)
void print_naked(int f_backwards)
a graph with a vertex coloring
void init_with_point_labels(int nb_points, int nb_colors, int nb_colors_per_vertex, int *colors, data_structures::bitvector *Bitvec, int f_ownership_of_bitvec, long int *point_labels, std::string &label, std::string &label_tex, int verbose_level)
void init_user_data(long int *data, int data_size, int verbose_level)
a collection of functions related to file io
long int file_size(std::string &fname)
interface to create latex output files
void print_lint_matrix_with_labels(std::ostream &ost, long int *p, int m, int n, long int *row_labels, long int *col_labels, int f_tex)
void print_lint_matrix_tex(std::ostream &ost, long int *p, int m, int n)
void head(std::ostream &ost, int f_book, int f_title, const char *title, const char *author, int f_toc, int f_landscape, int f_12pt, int f_enlarged_page, int f_pagenumbers, const char *extras_for_preamble)
void foot(std::ostream &ost)
data_structures::lint_vec * Lint_vec
interface to system functions
void time_check_delta(std::ostream &ost, int dt)
a class to represent arbitrary precision integers
a permutation group in a fixed action.
void latex_point_set(std::ostream &ost, long int *set, int sz, int verbose_level)
void print_point(int a, std::ostream &ost)
void get_orbit_number_and_position(long int a, int &orbit_idx, int &orbit_pos, int verbose_level)
void extract_orbits_using_classification(int orbit_length, int nb_orbits, long int *orbits_idx, long int *extracted_set, int verbose_level)
void extract_orbits(int orbit_length, int nb_orbits, int *orbits, long int *extracted_set, int verbose_level)
void compute_orbit_invariant_after_classification(data_structures::set_of_sets *&Orbit_invariant, int(*evaluate_orbit_invariant_function)(int a, int i, int j, void *evaluate_data, int verbose_level), void *evaluate_data, int verbose_level)
void create_graph_on_orbits_of_a_certain_length(graph_theory::colored_graph *&CG, std::string &fname, int orbit_length, int &type_idx, int f_has_user_data, long int *user_data, int user_data_size, int f_has_colors, int number_colors, int *color_table, int(*test_function)(long int *orbit1, int orbit_length1, long int *orbit2, int orbit_length2, void *data), void *test_function_data, int verbose_level)
void compute_compact_type(long int *orbit_type, long int goi, long int *&compact_type, long int *&row_labels, long int *&col_labels, int &m, int &n)
void create_latex_report(int verbose_level)
void report_type(std::ostream &ost, long int *orbit_type, long int goi)
void idx_of_points_in_orbits_of_length_l(long int *set, int set_sz, int go, int l, std::vector< int > &Idx, int verbose_level)
void create_graph_on_orbits_of_a_certain_length_override_orbits_classified(graph_theory::colored_graph *&CG, std::string &fname, int orbit_length, int &type_idx, int f_has_user_data, long int *user_data, int user_data_size, int(*test_function)(long int *orbit1, int orbit_length1, long int *orbit2, int orbit_length2, void *data), void *test_function_data, data_structures::set_of_sets *my_orbits_classified, int verbose_level)
void create_weighted_graph_on_orbits(graph_theory::colored_graph *&CG, std::string &fname, int *Orbit_lengths, int nb_orbit_lengths, int *&Type_idx, int f_has_user_data, long int *user_data, int user_data_size, int(*test_function)(long int *orbit1, int orbit_length1, long int *orbit2, int orbit_length2, void *data), void *test_function_data, data_structures::set_of_sets *my_orbits_classified, int verbose_level)
void print_orbits_based_on_filtered_orbits(std::ostream &ost, data_structures::set_of_sets *Filtered_orbits)
int Orbits_classified_nb_types
void report_quick(std::ostream &ost, int verbose_level)
void report_classified_orbits_by_lengths(std::ostream &ost)
void report_orbits_of_type(std::ostream &ost, int type_idx)
void init(actions::action *A, strong_generators *SG, int f_load_save, std::string &prefix, int verbose_level)
void classify_orbits_by_length(int verbose_level)
int get_orbit_type_index(int orbit_length)
data_structures::tally * Classify_orbits_by_length
void print_orbits_of_a_certain_length(int orbit_length)
int get_orbit_type_index_if_present(int orbit_length)
void test_all_orbits_by_length(int(*test_function)(long int *orbit, int orbit_length, void *data), void *test_function_data, int verbose_level)
void create_graph_on_orbits_of_a_certain_length_after_filtering(graph_theory::colored_graph *&CG, std::string &fname, long int *filter_by_set, int filter_by_set_size, int orbit_length, int &type_idx, int f_has_user_data, long int *user_data, int user_data_size, int f_has_colors, int number_colors, int *color_table, int(*test_function)(long int *orbit1, int orbit_length1, long int *orbit2, int orbit_length2, void *data), void *test_function_data, int verbose_level)
int test_pair_of_orbits_of_a_equal_length(int orbit_length, int type_idx, int idx1, int idx2, long int *Orbit1, long int *Orbit2, int(*test_function)(long int *orbit1, int orbit_length1, long int *orbit2, int orbit_length2, void *data), void *test_function_data, int verbose_level)
void orbit_type_of_set(long int *set, int set_sz, int go, long int *orbit_type, int verbose_level)
int * Orbits_classified_length
void stabilizer_of(int orbit_idx, int verbose_level)
void test_orbits_of_a_certain_length(int orbit_length, int &type_idx, int &prev_nb, int(*test_function)(long int *orbit, int orbit_length, void *data), void *test_function_data, int verbose_level)
void report_orbit_lengths(std::ostream &ost)
void report(std::ostream &ost, int verbose_level)
void report_classified_orbit_lengths(std::ostream &ost)
data_structures::set_of_sets * Orbits_classified
Schreier trees for orbits of groups on points.
void get_orbit_number_and_position(int pt, int &orbit_idx, int &orbit_pos, int verbose_level)
void write_to_file_binary(std::ofstream &fp, int verbose_level)
void read_from_file_binary(std::ifstream &fp, int verbose_level)
void print_orbit_lengths_tex(std::ostream &ost)
void write_to_file_csv(std::string &fname_csv, 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 print_orbit_length_distribution(std::ostream &ost)
void init(actions::action *A, int verbose_level)
void get_orbit(int orbit_idx, long int *set, int &len, int verbose_level)
a strong generating set for a permutation group with respect to a fixed action
void print_generators_tex()
schreier * orbits_on_points_schreier(actions::action *A_given, int verbose_level)
void print_with_given_action(std::ostream &ost, actions::action *A2)
void export_to_orbiter_as_bsgs(actions::action *A2, std::string &fname, std::string &label, std::string &label_tex, int verbose_level)
data_structures_groups::vector_ge * gens
void get_gens_data_as_string_with_quotes(std::string &str, int verbose_level)
void group_order(ring_theory::longinteger_object &go)
#define Lint_vec_copy(A, B, C)
#define Int_vec_zero(A, B)
#define Lint_vec_print(A, B, C)
#define Lint_vec_zero(A, B)
#define Int_vec_print(A, B, C)
orbiter_kernel_system::orbiter_session * Orbiter
global Orbiter session
the orbiter library for the classification of combinatorial objects