15namespace layer3_group_actions {
21 int f_with_cosetrep =
TRUE;
31 fp <<
"Orbit lengths: $";
33 fp <<
"$\\\\" << endl;
49 int *orbit_len_sorted;
51 int *sorting_perm_inv;
58 sorting_perm, sorting_perm_inv,
59 nb_types, type_first, type_len);
62 for (i = 0; i < nb_types; i++) {
65 m = orbit_len_sorted[f];
67 cout << l <<
" \\times ";
70 if (i < nb_types - 1) {
86 int *orbit_len_sorted;
88 int *sorting_perm_inv;
95 sorting_perm, sorting_perm_inv,
96 nb_types, type_first, type_len);
98 ost <<
"There are " <<
nb_orbits <<
" orbits, the orbit lengths are $";
99 for (i = 0; i < nb_types; i++) {
102 m = orbit_len_sorted[f];
105 ost <<
"^{" << l <<
"}";
107 if (i < nb_types - 1) {
111 ost <<
"$ \\\\" << endl;
122 int i, f, l, m, idx, h, fst, j, a;
123 int *orbit_len_sorted;
125 int *sorting_perm_inv;
132 sorting_perm, sorting_perm_inv,
133 nb_types, type_first, type_len);
136 for (i = 0; i < nb_types; i++) {
138 m = orbit_len_sorted[fst];
144 fst = type_first[idx];
146 ost <<
"There are " << l <<
" fixed elements, they are:\\\\";
147 for (h = 0; h < l; h++) {
148 j = sorting_perm_inv[fst + h];
151 ost << a <<
"\\\\" << endl;
165 int *val, *mult, len;
180 ost <<
"orbits of a group with " <<
gens.
len
181 <<
" generators:" << endl;
182 ost <<
"i : orbit_first[i] : orbit_len[i] : rep" << endl;
184 ost << setw(3) << i <<
" : " << setw(6)
188 ost <<
" : " << setw(6) << r << endl;
201 ost <<
"orbit group with " <<
gens.
len <<
" generators:" << endl;
202 ost <<
"i : orbit_first[i] : orbit_len[i]" << endl;
215 void (*print_point)(ostream &ost,
int pt,
void *data),
221 ost <<
"orbit group with " <<
gens.
len <<
" generators:" << endl;
222 ost <<
"i : orbit_first[i] : orbit_len[i]" << endl;
228 ost <<
"Orbit " << i <<
" / " <<
nb_orbits
230 ost <<
" is:" << endl;
233 ost <<
"Which is:" << endl;
236 ost <<
"The stabilizer of the element "
255 ost <<
"orbit group with " <<
gens.
len <<
" generators:" << endl;
256 ost <<
"i : orbit_first[i] : orbit_len[i]" << endl;
258 ost <<
" Orbit " << i <<
" / " <<
nb_orbits
272 ost <<
"orbit group with " <<
gens.
len <<
" generators:" << endl;
273 ost <<
"i : orbit_first[i] : orbit_len[i]" << endl;
275 ost <<
" Orbit " << i <<
" / " <<
nb_orbits
290 ost <<
nb_orbits <<
" orbits:\\\\" << endl;
291 ost <<
"orbits under a group with " <<
gens.
len
292 <<
" generators acting on a set of size "
293 <<
A->
degree <<
":\\\\" << endl;
295 for (orbit_no = 0; orbit_no <
nb_orbits; orbit_no++) {
305 int f_v = (verbose_level >= 1);
309 cout <<
"schreier::print_and_list_all_orbits_and_stabilizers_with_list_of_elements_tex" << endl;
319 std::string &fname_mask,
323 int f_v = (verbose_level >= 1);
327 cout <<
"schreier::make_orbit_trees" << endl;
329 int f_has_point_labels =
FALSE;
330 long int *point_labels = NULL;
334 f_has_point_labels, point_labels,
342 sprintf(fname, fname_mask.c_str(), i);
344 ost <<
"\\bigskip" << endl;
346 ost <<
"Orbit " << i <<
" consisting of the following "
348 <<
" half double sixes:" << endl;
354 ost <<
"\\begin{center}" << endl;
355 ost <<
"\\input " << fname << endl;
356 ost <<
"\\end{center}" << endl;
362 cout <<
"schreier::make_orbit_trees" << endl;
370 ost <<
nb_orbits <<
" orbits:\\\\" << endl;
371 ost <<
"orbits under a group with " <<
gens.
len
372 <<
" generators acting on a set of size "
373 <<
A->
degree <<
":\\\\" << endl;
375 for (orbit_no = 0; orbit_no <
nb_orbits; orbit_no++) {
376 ost <<
" Orbit " << orbit_no <<
" / " <<
nb_orbits <<
" of size " <<
orbit_len[orbit_no] <<
" : ";
379 orbit_no,
FALSE , 0 );
380 ost <<
"\\\\" << endl;
390 ost <<
"\\\\" << endl;
397 ost <<
" Orbit " << i <<
" / " <<
nb_orbits <<
" : ";
399 ost <<
" of length " <<
orbit_len[i] <<
"\\\\" << endl;
404 full_group_order, i, 0 );
416 int f_v = (verbose_level >= 1);
419 cout <<
"schreier::write_orbit_summary" << endl;
422 long int *Stab_order;
423 long int *Orbit_length;
430 for (orbit_no = 0; orbit_no <
nb_orbits; orbit_no++) {
432 Orbit_length[orbit_no] =
orbit_len[orbit_no];
437 full_group_order, orbit_no, 0 );
439 Stab_order[orbit_no] =
gens->group_order_as_lint();
445 const char *column_label[] = {
"Rep",
"StabOrder",
"OrbitLength"};
449 Vec[2] = Orbit_length;
452 fname, column_label);
455 cout <<
"Written file " << fname <<
" of size " << Fio.
file_size(fname) << endl;
463 cout <<
"schreier::write_orbit_summary done" << endl;
475 gens->group_order(full_group_order);
477 ost <<
" Orbit " << i <<
" / " <<
nb_orbits <<
" : ";
479 ost <<
" of length " <<
orbit_len[i] <<
"\\\\" << endl;
485 full_group_order, i, 0 );
490 long int *Subgroup_elements_by_index;
491 long int sz_subgroup;
495 if (sz_subgroup < 20) {
496 gens->list_of_elements_of_subgroup(gens_stab,
497 Subgroup_elements_by_index, sz_subgroup,
503 ost <<
"The subgroup consists of the following "
504 << sz_subgroup <<
" elements:" << endl;
507 Subgroup_elements_by_index, sz_subgroup,
532 std::ostream &ost,
int f_tex)
545 Perm, Perm_inv,
TRUE );
548 <<
" orbits under a group with "
551 ost <<
"\\\\" << endl;
556 ost <<
"Orbit lengths: ";
559 ost <<
"\\\\" << endl;
565 ost <<
"i : orbit_len[i]" << endl;
573 ost <<
" Orbit " << h <<
" / " <<
nb_orbits
588 std::ostream &ost,
int f_tex,
603 Perm, Perm_inv,
TRUE );
605 ost <<
"There are " <<
nb_orbits <<
" orbits under a group with "
608 ost <<
"\\\\" << endl;
613 ost <<
"Orbit lengths: ";
616 ost <<
"\\\\" << endl;
622 ost <<
"i : orbit_len[i]" << endl;
628 default_action, full_group_order, ost);
631 ost <<
" Orbit " << h <<
" / " <<
nb_orbits
646 std::ostream &ost,
int f_tex,
663 Perm, Perm_inv,
TRUE );
665 ost <<
"There are " <<
nb_orbits <<
" orbits under a group with "
668 ost <<
"\\\\" << endl;
673 ost <<
"Orbit lengths: ";
676 ost <<
"\\\\" << endl;
682 ost <<
"i : orbit_len[i]" << endl;
691 gens_full_group, ost);
694 ost <<
" Orbit " << h <<
" / " <<
nb_orbits
709 std::ostream &ost,
int len)
714 ost <<
"Orbits of length " << len <<
":" << endl;
715 cout <<
"i : orbit_len[i]" << endl;
720 ost <<
" Orbit " << i <<
" / "
730 std::ostream &ost,
long int *labels)
735 ost <<
"orbit group with " <<
gens.
len <<
" generators:" << endl;
736 ost <<
"i : orbit_first[i] : orbit_len[i]" << endl;
755 ost <<
gens.
len <<
" generators:" << endl;
756 for (i = 0; i <
A->
degree; i++) {
758 for (j = 0; j <
gens.
len; j++) {
767 ost <<
"i : orbit[i] : orbit_inv[i] : prev[i] : label[i]";
769 ost <<
" : coset_rep";
773 for (i = 0; i <
A->
degree; i++) {
776 ost << setw(w) << i <<
" : " <<
" : "
777 << setw(w) <<
orbit[i] <<
" : "
779 << setw(w) <<
prev[i] <<
" : "
780 << setw(w) <<
label[i];
781 if (f_with_cosetrep) {
792 cout <<
"too large to print" << endl;
805 ost <<
gens.
len <<
" generators:" << endl;
806 for (i = 0; i <
A->
degree; i++) {
808 for (j = 0; j <
gens.
len; j++) {
818 ost <<
"\\begin{array}{|c|c|c|c|c|" << endl;
819 if (f_with_cosetrep) {
823 ost <<
"\\hline" << endl;
824 ost <<
"i & orbit & orbitinv & prev & label";
825 if (f_with_cosetrep) {
828 ost <<
"\\\\" << endl;
829 ost <<
"\\hline" << endl;
830 ost <<
"\\hline" << endl;
831 for (i = 0; i <
A->
degree; i++) {
835 << setw(w) <<
orbit[i] <<
" & "
837 << setw(w) <<
prev[i] <<
" & "
838 << setw(w) <<
label[i];
839 if (f_with_cosetrep) {
846 ost <<
"\\\\" << endl;
847 ost <<
"\\hline" << endl;
849 if (((i + 1) % 10) == 0) {
850 ost <<
"\\end{array}" << endl;
853 ost <<
"\\begin{array}{|c|c|c|c|c|" << endl;
854 if (f_with_cosetrep) {
858 ost <<
"\\hline" << endl;
859 ost <<
"i & orbit & orbitinv & prev & label";
860 if (f_with_cosetrep) {
863 ost <<
"\\\\" << endl;
864 ost <<
"\\hline" << endl;
865 ost <<
"\\hline" << endl;
868 ost <<
"\\end{array}" << endl;
877 cout <<
gens.
len <<
" generators in action "
879 for (j = 0; j <
gens.
len; j++) {
880 cout <<
"generator " << j <<
":" << endl;
885 cout <<
", " << endl;
894 ost <<
gens.
len <<
" generators in action $"
896 <<
A->
degree <<
":\\\\" << endl;
897 for (j = 0; j <
gens.
len; j++) {
898 ost <<
"generator " << j <<
":" << endl;
914 cout <<
gens.
len <<
" generators in action "
915 <<
A->
label <<
" of degree "
917 for (j = 0; j <
gens.
len; j++) {
918 cout <<
"generator " << j <<
":" << endl;
924 cout <<
", " << endl;
935 int orbit_no,
long int *labels)
948 for (i = 0; i < len; i++) {
949 v[i] =
orbit[first + i];
967 for (i = 0; i < len; i++) {
968 v[i] =
orbit[first + i];
992 for (i = 0; i < len; i++) {
993 v[i] =
orbit[first + i];
1004 int orbit_no,
int f_truncate,
int max_length)
1014 for (i = 0; i < len; i++) {
1015 v[i] =
orbit[first + i];
1020 if (f_truncate && len > max_length) {
1022 ost <<
"truncated after " << max_length <<
" elements";
1032 int orbit_no,
int f_truncate,
int max_length)
1043 for (i = 0; i < len; i++) {
1044 v[i] =
orbit[first + i];
1053 if (f_truncate && len > max_length) {
1055 ost <<
"truncated after " << max_length <<
" elements";
1067 int orbit_no,
long int *labels)
1076 for (i = 0; i < len; i++) {
1077 v[i] = labels[
orbit[first + i]];
1088 void (*print_point)(ostream &ost,
int pt,
void *data),
1095 for (i = 0; i < len; i++) {
1096 ost <<
orbit[first + i] <<
" which is " << endl;
1097 (*print_point)(ost,
orbit[first + i], data);
1117 for (j = 0; j < l; j++) {
1132 int orbit_no,
long int *point_labels)
1141 for (i = 0; i < len; i++) {
1142 v[i] = point_labels[
orbit[first + i]];
1157 for (i = 0; i < len; i++) {
1163 for (i = 0; i < len; i++) {
1183 cout <<
"schreier::print_orbit degree=" <<
A->
degree << endl;
1184 cout <<
"i : orbit[i] : orbit_inv[i]" << endl;
1185 for (i = 0; i <
A->
degree; i++) {
1192 cout << i <<
" : " <<
orbit[i]
1209 for (j = 0; j < l; j++) {
1210 cout <<
" " << path[j];
1213 if (
label[i] != -1) {
1214 cout <<
" $s_{" <<
label[i] <<
"}$";
1224 int f_has_point_labels,
long int *point_labels,
1227 int f_v = (verbose_level >= 1);
1232 cout <<
"schreier::draw_forest" << endl;
1235 sprintf(str, fname_mask.c_str(), i);
1241 cout <<
"schreier::draw_forest drawing orbit "
1247 f_has_point_labels, point_labels,
1251 cout <<
"schreier::draw_forest done" << endl;
1256 std::string &fname_mask,
1259 int f_v = (verbose_level >= 1);
1260 int f_vv = (verbose_level >= 2);
1261 int f_vvv = (verbose_level >= 3);
1264 int *horizontal_position;
1265 int i, j, l, max_depth;
1268 cout <<
"schreier::export_tree_as_layered_graph" << endl;
1269 cout <<
"schreier::export_tree_as_layered_graph "
1270 "nb_gen = " <<
gens.
len << endl;
1276 horizontal_position =
NEW_int(len);
1278 for (j = 0; j < len; j++) {
1282 max_depth =
MAX(max_depth, l);
1285 nb_layers = max_depth + 1;
1297 for (j = 0; j < len; j++) {
1300 horizontal_position[j] = Nb[l];
1304 cout <<
"schreier::export_tree_as_layered_graph" << endl;
1305 cout <<
"number of nodes at depth:" << endl;
1306 for (i = 0; i <= max_depth; i++) {
1307 cout << i <<
" : " << Nb[i] << endl;
1311 for (i = 0; i <= max_depth; i++) {
1314 for (j = 0; j < len; j++) {
1317 Node[l][Nb1[l]] = j;
1326 cout <<
"schreier::export_tree_as_layered_graph "
1327 "before LG->init" << endl;
1334 LG->
init(nb_layers, Nb, dummy, verbose_level);
1336 cout <<
"schreier::export_tree_as_layered_graph "
1337 "after LG->init" << endl;
1339 LG->
place(verbose_level);
1341 cout <<
"schreier::export_tree_as_layered_graph "
1342 "after LG->place" << endl;
1344 for (i = 0; i <= max_depth; i++) {
1346 cout <<
"schreier::export_tree_as_layered_graph "
1347 "adding edges at depth "
1348 "i=" << i <<
" / " << max_depth
1349 <<
" Nb[i]=" << Nb[i] << endl;
1351 for (j = 0; j < Nb[i]; j++) {
1354 cout <<
"schreier::export_tree_as_layered_graph "
1356 "i=" << i <<
" / " << max_depth
1357 <<
" j=" << j <<
" n1=" << n1 << endl;
1359 if (
prev[fst + n1] != -1) {
1361 j2 = horizontal_position[n2];
1363 cout <<
"schreier::export_tree_as_layered_graph "
1365 "i=" << i <<
" / " << max_depth
1366 <<
" j=" << j <<
" n1=" << n1
1367 <<
" n2=" << n2 <<
" j2=" << j2 << endl;
1370 cout <<
"adding edge ("<< i - 1 <<
"," << j2 <<
") "
1371 "-> (" << i <<
"," << j <<
")" << endl;
1378 for (j = 0; j < len; j++) {
1383 sprintf(text,
"%d", a);
1386 LG->
add_text(l, horizontal_position[j], text, 0);
1392 sprintf(str, fname_mask.c_str(), orbit_no);
1403 cout <<
"schreier::export_tree_as_layered_graph done" << endl;
1410 int f_has_point_labels,
long int *point_labels,
1413 int f_v = (verbose_level >= 1);
1414 int f_vv = (verbose_level >= 2);
1418 int i, j, last, max_depth = 0;
1422 cout <<
"schreier::draw_tree" << endl;
1425 cout <<
"schreier::draw_tree Opt:" << endl;
1435 for (j = 0; j <
A->
degree; j++) {
1441 cout <<
"the weights: " << endl;
1442 for (j = i; j < last; j++) {
1443 cout << j <<
" : " << weight[j] <<
" : " << endl;
1446 cout <<
"max_depth = " << max_depth << endl;
1450 for (j = i; j < last; j++) {
1451 cout << j <<
" : " << placement_x[j] << endl;
1457 f_circletext =
FALSE;
1464 weight, placement_x, max_depth, i, last,
1468 f_has_point_labels, point_labels,
1475 cout <<
"schreier::draw_tree done" << endl;
1479static void calc_y_coordinate(
int &y,
int l,
int max_depth,
int y_max)
1483 dy = (int)((
double)y_max / (double)max_depth);
1485 y = (int)(dy * ((
double)l + 0.5));
1491 int *weight,
int *placement_x,
1495 int f_has_point_labels,
long int *point_labels,
1498 int f_v = (verbose_level >= 1);
1501 int factor_1000 = 1000;
1505 cout <<
"schreier::draw_tree2" << endl;
1508 fname_full.assign(fname);
1509 fname_full.append(
".mp");
1512 cout <<
"schreier::draw_tree2 before creating G" << endl;
1517 G.
init(fname_full, Opt, verbose_level - 1);
1520 mp_graphics G(fname_full, x_min, y_min, x_max, y_max,
1523 cout <<
"schreier::draw_tree2 after creating G" << endl;
1535 int x = Opt->
yin / 2;
1538 cout <<
"schreier::draw_tree2 before calc_y_coordinate" << endl;
1540 calc_y_coordinate(y, 0, max_depth, Opt->
yin);
1542 cout <<
"schreier::draw_tree2 after calc_y_coordinate" << endl;
1547 cout <<
"schreier::draw_tree2 before subtree_draw_lines" << endl;
1551 placement_x, max_depth, i, last,
1555 cout <<
"schreier::draw_tree2 after subtree_draw_lines" << endl;
1559 cout <<
"schreier::draw_tree2 before subtree_draw_vertices" << endl;
1563 placement_x, max_depth, i, last,
1564 f_has_point_labels, point_labels,
1568 cout <<
"schreier::draw_tree2 after subtree_draw_vertices" << endl;
1576 for (j = i; j < last; j++) {
1580 avg = (double) L / (
double)N;
1583 calc_y_coordinate(y, max_depth + 1, max_depth, Opt->
yin);
1590 H = log(N) / log(nb_gens);
1595 sprintf(str,
"N=%d, avg=%lf, gens=%d, H=%lf", N, avg, nb_gens, H);
1613 cout <<
"schreier::draw_tree2 done" << endl;
1620 int parent_x,
int parent_y,
int *weight,
1621 int *placement_x,
int max_depth,
int i,
int last,
1625 int f_v = (verbose_level >= 1);
1631 cout <<
"schreier::subtree_draw_lines" << endl;
1635 x = placement_x[pt];
1636 calc_y_coordinate(y, l, max_depth, y_max);
1643 Px[2] = (Px[0] + Px[1]) >> 1;
1644 Py[2] = (Py[0] + Py[1]) >> 1;
1652 calc_y_coordinate(y1, 0, max_depth);
1653 if (parent_x == 500000 && parent_y == y1) {
1668 sprintf(str,
"$\\alpha_{%d}$",
label[i]);
1673 for (ii = i + 1; ii < last; ii++) {
1674 if (
prev[ii] == pt) {
1676 x, y, weight, placement_x,
1677 max_depth, ii, last,
1684 cout <<
"schreier::subtree_draw_lines done" << endl;
1691 int parent_x,
int parent_y,
int *weight,
1692 int *placement_x,
int max_depth,
int i,
int last,
1693 int f_has_point_labels,
long int *point_labels,
1697 int f_v = (verbose_level >= 1);
1704 cout <<
"schreier::subtree_draw_vertices" << endl;
1707 x = placement_x[pt];
1708 calc_y_coordinate(y, l, max_depth, y_max);
1720 for (ii = i + 1; ii < last; ii++) {
1721 if (
prev[ii] == pt) {
1723 x, y, weight, placement_x,
1724 max_depth, ii, last,
1725 f_has_point_labels, point_labels,
1731 if (pt == 169303 || pt == 91479) {
1735 if (f_has_point_labels) {
1736 sprintf(str,
"%ld", point_labels[pt]);
1739 sprintf(str,
"%d", pt);
1750 cout <<
"schreier::subtree_draw_vertices done" << endl;
1755 int left,
int right,
int i,
int last)
1758 int ii, l, w, w0, w1, lft, rgt, width;
1761 placement_x[pt] = (left + right) >> 1;
1763 width = right - left;
1764 dx = width / (double) (w - 1);
1769 for (ii = i + 1; ii < last; ii++) {
1770 if (
prev[ii] == pt) {
1771 w1 = weight[
orbit[ii]];
1772 lft = left + (int)((
double)w0 * dx);
1773 rgt = left + (int)((
double)(w0 + w1) * dx);
1781 int &max_depth,
int i,
int last)
1784 int ii, l, w = 1, w1;
1789 for (ii = i + 1; ii < last; ii++) {
1790 if (
prev[ii] == pt) {
1800 int *path,
int i,
int last)
1803 int ii, l, w = 1, w1;
1805 for (ii = i + 1; ii < last; ii++) {
1806 if (
prev[ii] == pt) {
1825 for (j = 0; j < l; j++) {
1826 ost <<
" " << path[j];
1833 int f_v = (verbose_level >= 1);
1836 cout <<
"schreier::write_to_file_csv" << endl;
1849 text.assign(
"OrbitNumber");
1851 text.assign(
"OrbitLength");
1853 text.assign(
"OrbitRep");
1855 text.assign(
"OrbitElements");
1857 text.assign(
"OrbitSVPrev");
1859 text.assign(
"OrbitSVLabel");
1887 S.
save(fname_csv, 0);
1891 cout <<
"Written file " << fname_csv <<
" of size " << Fio.
file_size(fname_csv) << endl;
1895 cout <<
"schreier::write_to_file_csv done" << endl;
1902 int f_v = (verbose_level >= 1);
1903 int i, a = 0, version = 1;
1906 cout <<
"schreier::write_to_file_binary" << endl;
1908 fp.write((
char *) &a,
sizeof(int));
1909 fp.write((
char *) &version,
sizeof(int));
1910 fp.write((
char *) &
A->
degree,
sizeof(int));
1911 fp.write((
char *) &
nb_orbits,
sizeof(int));
1914 fp.write((
char *) &
orbit_len[i],
sizeof(int));
1916 for (i = 0; i <
A->
degree; i++) {
1917 fp.write((
char *) &
orbit[i],
sizeof(int));
1918 fp.write((
char *) &
prev[i],
sizeof(int));
1919 fp.write((
char *) &
label[i],
sizeof(int));
1925 cout <<
"schreier::write_to_file_binary done" << endl;
1931 int f_v = (verbose_level >= 1);
1932 int i, deg, dummy, a, version;
1936 cout <<
"schreier::read_from_file_binary" << endl;
1939 fp.read((
char *) &a,
sizeof(
int));
1941 fp.read((
char *) &version,
sizeof(
int));
1942 fp.read((
char *) °,
sizeof(
int));
1949 fp.read((
char *) &
nb_orbits,
sizeof(
int));
1951 cout <<
"schreier::read_from_file_binary "
1952 "deg != A->degree" << endl;
1958 fp.read((
char *) &
orbit_len[i],
sizeof(
int));
1965 for (i = 0; i <
A->
degree; i++) {
1966 fp.read((
char *) &
orbit[i],
sizeof(
int));
1967 fp.read((
char *) &
prev[i],
sizeof(
int));
1968 fp.read((
char *) &
label[i],
sizeof(
int));
1970 fp.read((
char *) &dummy,
sizeof(
int));
1981 cout <<
"schreier::read_from_file_binary done" << endl;
1988 int f_v = (verbose_level >= 1);
1992 cout <<
"schreier::write_file_binary" << endl;
1995 ofstream fp(fname, ios::binary);
1999 cout <<
"schreier::write_file_binary Written file "
2000 << fname <<
" of size " << Fio.
file_size(fname) << endl;
2002 cout <<
"schreier::write_file_binary done" << endl;
2008 int f_v = (verbose_level >= 1);
2012 cout <<
"schreier::read_file_binary reading file "
2013 << fname <<
" of size " << Fio.
file_size(fname) << endl;
2015 cout <<
"schreier::read_file_binary Reading file "
2016 << fname <<
" of size " << Fio.
file_size(fname) << endl;
2018 ifstream fp(fname, ios::binary);
2023 cout <<
"schreier::read_file_binary done" << endl;
2030 cout <<
"schreier::list_elements_as_permutations_vertically is not "
2031 "allowed if f_images_only is TRUE" << endl;
a collection of combinatorial functions
void perm_inverse(int *a, int *b, long int n)
void distribution_print(std::ostream &ost, int *val, int *mult, int len)
void create_string_with_quotes(std::string &str, int *v, int len)
void distribution(int *v, int len_v, int *&val, int *&mult, int &len)
a collection of functions related to sorted vectors
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)
void int_vec_classify(int length, int *the_vec, int *&the_vec_sorted, int *&sorting_perm, int *&sorting_perm_inv, int &nb_types, int *&type_first, int *&type_len)
void lint_vec_heapsort(long int *v, int len)
for reading and writing of csv files
void set_entry_lint(int row_idx, int col_idx, long int val)
void save(std::string &fname, int verbose_level)
void init_empty_table(int nb_rows, int nb_cols)
void fill_entry_with_text(int row_idx, int col_idx, const char *text)
a statistical analysis of data consisting of single integers
void init(int *data, int data_length, int f_second, int verbose_level)
void print_naked(int f_backwards)
a data structure to store layered graphs or Hasse diagrams
void add_text(int l, int n, const char *text, int verbose_level)
void write_file(std::string &fname, int verbose_level)
void add_node_data1(int l, int n, int data, int verbose_level)
void place(int verbose_level)
void init(int nb_layers, int *Nb_nodes_layer, std::string &fname_base, int verbose_level)
void add_edge(int l1, int n1, int l2, int n2, int verbose_level)
options for drawing an object of type layered_graph
a general 2D graphical output interface (metapost, tikz, postscript)
void aligned_text(int x, int y, const char *alignment, const char *p)
void polygon2(int *Px, int *Py, int i1, int i2)
void init(std::string &file_name, layered_graph_draw_options *Draw_options, int verbose_level)
void circle_text(int x, int y, int rad, const char *text)
void circle(int x, int y, int rad)
void begin_figure(int factor_1000)
basic number theoretic functions
a collection of functions related to file io
long int file_size(std::string &fname)
void lint_vec_array_write_csv(int nb_vecs, long int **Vec, int len, std::string &fname, const char **column_label)
interface to create latex output files
void head_easy(std::ostream &ost)
void lint_vec_print_as_matrix(std::ostream &ost, long int *v, int len, int width, int f_tex)
void lint_set_print_tex(std::ostream &ost, long int *v, int len)
void int_set_print_tex(std::ostream &ost, int *v, int len)
void foot(std::ostream &ost)
data_structures::int_vec * Int_vec
a class to represent arbitrary precision integers
a permutation group in a fixed action.
void element_print_latex(void *elt, std::ostream &ost)
void element_print_quick(void *elt, std::ostream &ost)
void original_point_labels(long int *points, int nb_points, long int *&original_points, int verbose_level)
void element_print_as_permutation(void *elt, std::ostream &ost)
long int element_image_of(long int a, void *elt, int verbose_level)
void list_elements_as_permutations_vertically(data_structures_groups::vector_ge *gens, std::ostream &ost)
void write_to_file_binary(std::ofstream &fp, int verbose_level)
void init(actions::action *A, int verbose_level)
void print_generators_tex(ring_theory::longinteger_object &go, std::ostream &ost)
void read_from_file_binary(std::ifstream &fp, int verbose_level)
void draw_forest(std::string &fname_mask, graphics::layered_graph_draw_options *Opt, int f_has_point_labels, long int *point_labels, int verbose_level)
void print_tree(int orbit_no)
void * print_function_data
void print_and_list_orbits(std::ostream &ost)
void print_and_list_orbits_and_stabilizer_sorted_by_length(std::ostream &ost, int f_tex, actions::action *default_action, ring_theory::longinteger_object &full_group_order)
void print_and_list_orbits_and_stabilizer(std::ostream &ost, actions::action *default_action, ring_theory::longinteger_object &go, void(*print_point)(std::ostream &ost, int pt, void *data), void *data)
void print_and_list_all_orbits_and_stabilizers_with_list_of_elements_tex(std::ostream &ost, actions::action *default_action, strong_generators *gens, int verbose_level)
void print_and_list_orbit_tex(int i, std::ostream &ost)
void write_orbit_summary(std::string &fname, actions::action *default_action, ring_theory::longinteger_object &full_group_order, int verbose_level)
int subtree_calc_weight(int *weight, int &max_depth, int i, int last)
void list_elements_as_permutations_vertically(std::ostream &ost)
void print_orbit(int orbit_no)
void write_to_file_binary(std::ofstream &fp, int verbose_level)
void print_and_list_orbits_sorted_by_length(std::ostream &ost)
void read_from_file_binary(std::ifstream &fp, int verbose_level)
void print_orbit_lengths_tex(std::ostream &ost)
data_structures_groups::vector_ge gens_inv
void print_path(std::ostream &ost, int *path, int l)
void print_orbit_tex(std::ostream &ost, int orbit_no)
void write_to_file_csv(std::string &fname_csv, int verbose_level)
void export_tree_as_layered_graph(int orbit_no, std::string &fname_mask, int verbose_level)
void write_file_binary(std::string &fname, int verbose_level)
void draw_tree(std::string &fname, graphics::layered_graph_draw_options *Opt, int orbit_no, int f_has_point_labels, long int *point_labels, 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 print_orbit_sorted(std::ostream &ost, int orbit_no)
void print_and_list_orbits_of_given_length(std::ostream &ost, int len)
void print_orbit_reps(std::ostream &ost)
void print_and_list_orbits_with_original_labels_tex(std::ostream &ost)
void print_and_list_orbit_and_stabilizer_with_list_of_elements_tex(int i, actions::action *default_action, strong_generators *gens, std::ostream &ost)
void print_orbit_length_distribution(std::ostream &ost)
void make_orbit_trees(std::ostream &ost, std::string &fname_mask, graphics::layered_graph_draw_options *Opt, int verbose_level)
void list_all_orbits_tex(std::ostream &ost)
void print_and_list_orbit_and_stabilizer_tex(int i, actions::action *default_action, ring_theory::longinteger_object &full_group_order, std::ostream &ost)
void print_fancy(std::ostream &ost, int f_tex, actions::action *default_action, strong_generators *gens_full_group)
int subtree_depth_first(std::ostream &ost, int *path, int i, int last)
void print_and_list_orbits_sorted_by_length_tex(std::ostream &ost)
void print_fixed_points_tex(std::ostream &ost)
void point_stabilizer(actions::action *default_action, ring_theory::longinteger_object &go, groups::sims *&Stab, int orbit_no, int verbose_level)
void print_orbit_lengths(std::ostream &ost)
void subtree_place(int *weight, int *placement_x, int left, int right, int i, int last)
void print_orbit_using_callback(std::ostream &ost, int orbit_no, void(*print_point)(std::ostream &ost, int pt, void *data), void *data)
data_structures_groups::vector_ge gens
void subtree_draw_vertices(graphics::mp_graphics &G, graphics::layered_graph_draw_options *Opt, int parent_x, int parent_y, int *weight, int *placement_x, int max_depth, int i, int last, int f_has_point_labels, long int *point_labels, int y_max, int verbose_level)
void print_orbit_through_labels(std::ostream &ost, int orbit_no, long int *point_labels)
void print_orbit_sorted_with_original_labels_tex(std::ostream &ost, int orbit_no, int f_truncate, int max_length)
void print(std::ostream &ost)
void print_orbit_using_labels(int orbit_no, long int *labels)
void print_and_list_orbits_with_original_labels(std::ostream &ost)
void print_and_list_orbits_using_labels(std::ostream &ost, long int *labels)
void draw_tree2(std::string &fname, graphics::layered_graph_draw_options *Opt, int *weight, int *placement_x, int max_depth, int i, int last, int f_has_point_labels, long int *point_labels, int verbose_level)
void subtree_draw_lines(graphics::mp_graphics &G, graphics::layered_graph_draw_options *Opt, int parent_x, int parent_y, int *weight, int *placement_x, int max_depth, int i, int last, int y_max, int verbose_level)
void read_file_binary(std::string &fname, int verbose_level)
void print_generators_latex(std::ostream &ost)
void print_and_list_orbits_tex(std::ostream &ost)
void print_orbit_with_original_labels(std::ostream &ost, int orbit_no)
void print_tables_latex(std::ostream &ost, int f_with_cosetrep)
void trace_back(int *path, int i, int &j)
void print_orbit_sorted_tex(std::ostream &ost, int orbit_no, int f_truncate, int max_length)
void print_generators_with_permutations()
void coset_rep(int j, int verbose_level)
void print_orbit_type(int f_backwards)
void latex(std::string &fname)
void print_tables(std::ostream &ost, int f_with_cosetrep)
a permutation group represented via a stabilizer chain
a strong generating set for a permutation group with respect to a fixed action
void print_generators_tex()
long int group_order_as_lint()
void print_generators(std::ostream &ost)
void init_from_sims(groups::sims *S, int verbose_level)
void group_order(ring_theory::longinteger_object &go)
#define Int_vec_zero(A, B)
#define Int_vec_print_fully(A, B, C)
#define Int_vec_copy(A, B, C)
#define Int_vec_print(A, B, C)
#define Lint_vec_print_fully(A, B, C)
orbiter_kernel_system::orbiter_session * Orbiter
global Orbiter session
the orbiter library for the classification of combinatorial objects