18namespace layer5_applications {
22static int packing_was_set_of_reduced_spreads_adjacency_test_function(
long int *orbit1,
int len1,
23 long int *orbit2,
int len2,
void *data);
24static int packing_was_evaluate_orbit_invariant_function(
25 int a,
int i,
int j,
void *evaluate_data,
int verbose_level);
26static void packing_was_print_function(std::ostream &ost,
long int a,
void *data);
122 int f_v = (verbose_level >= 1);
125 cout <<
"packing_was::init" << endl;
133 cout <<
"packing_was::init "
134 "please use option -H <group description> -end" << endl;
143 cout <<
"packing_was::init before init_H" << endl;
145 init_H(verbose_level - 3);
147 cout <<
"packing_was::init after init_H" << endl;
157 cout <<
"packing_was::init before init_N" << endl;
159 init_N(verbose_level - 3);
161 cout <<
"packing_was::init after init_N" << endl;
169 cout <<
"packing_was::init before compute_H_orbits_and_reduce" << endl;
173 cout <<
"packing_was::init after compute_H_orbits_and_reduce" << endl;
178 cout <<
"packing_was::compute_N_orbits_and_reduce before compute_N_orbits_on_lines" << endl;
182 cout <<
"packing_was::compute_N_orbits_and_reduce after compute_N_orbits_on_lines" << endl;
189 cout <<
"packing_was::init done" << endl;
195 int f_v = (verbose_level >= 1);
198 cout <<
"packing_was::compute_H_orbits_and_reduce" << endl;
202 cout <<
"H_gens in action on points:" << endl;
207 cout <<
"N_gens in action on points:" << endl;
213 cout <<
"H_gens in action on lines:" << endl;
218 cout <<
"N_gens in action on lines:" << endl;
225 cout <<
"packing_was::compute_H_orbits_and_reduce before compute_H_orbits_on_points" << endl;
229 cout <<
"packing_was::compute_H_orbits_and_reduce after compute_H_orbits_on_points" << endl;
234 cout <<
"packing_was::compute_H_orbits_and_reduce before compute_N_orbits_on_points" << endl;
238 cout <<
"packing_was::compute_H_orbits_and_reduce after compute_N_orbits_on_points" << endl;
248 packing_was_print_function,
254 cout <<
"packing_was::compute_H_orbits_and_reduce before compute_H_orbits_on_lines" << endl;
258 cout <<
"packing_was::compute_H_orbits_and_reduce after compute_H_orbits_on_lines" << endl;
268 cout <<
"packing_was::compute_H_orbits_and_reduce before compute_spread_types_wrt_H" << endl;
272 cout <<
"packing_was::compute_H_orbits_and_reduce after compute_spread_types_wrt_H" << endl;
277 cout <<
"packing_was::compute_H_orbits_and_reduce before "
278 "P->Spread_table_with_selection->create_action_on_spreads" << endl;
282 cout <<
"packing_was::compute_H_orbits_and_reduce after "
283 "P->Spread_table_with_selection->create_action_on_spreads" << endl;
287 cout <<
"packing_was::compute_H_orbits_and_reduce "
288 "before compute_H_orbits_on_spreads" << endl;
292 cout <<
"packing_was::compute_H_orbits_and_reduce "
293 "after compute_H_orbits_on_spreads" << endl;
297 cout <<
"packing_was::compute_H_orbits_and_reduce "
298 "before test_orbits_on_spreads" << endl;
302 cout <<
"packing_was::compute_H_orbits_and_reduce "
303 "after test_orbits_on_spreads" << endl;
307 cout <<
"packing_was::compute_H_orbits_and_reduce "
308 "before reduce_spreads" << endl;
312 cout <<
"packing_was::compute_H_orbits_and_reduce "
313 "after reduce_spreads" << endl;
317 cout <<
"packing_was::compute_H_orbits_and_reduce "
318 "before compute_reduced_spread_types_wrt_H" << endl;
322 cout <<
"packing_was::compute_H_orbits_and_reduce "
323 "after compute_reduced_spread_types_wrt_H" << endl;
328 cout <<
"packing_was::compute_H_orbits_and_reduce "
329 "before compute_H_orbits_on_reduced_spreads" << endl;
333 cout <<
"packing_was::compute_H_orbits_and_reduce "
334 "after compute_H_orbits_on_reduced_spreads" << endl;
339 cout <<
"packing_was::compute_H_orbits_and_reduce "
340 "before compute_orbit_invariant_on_classified_orbits" << endl;
344 cout <<
"packing_was::compute_H_orbits_and_reduce "
345 "after compute_orbit_invariant_on_classified_orbits" << endl;
349 cout <<
"packing_was::compute_H_orbits_and_reduce "
350 "before classify_orbit_invariant" << endl;
354 cout <<
"packing_was::compute_H_orbits_and_reduce "
355 "after classify_orbit_invariant" << endl;
360 cout <<
"packing_was::compute_H_orbits_and_reduce "
361 "before init_regular_packing" << endl;
365 cout <<
"packing_was::compute_H_orbits_and_reduce "
366 "after init_regular_packing" << endl;
371 cout <<
"packing_was::compute_H_orbits_and_reduce done" << endl;
377 int f_v = (verbose_level >= 1);
380 cout <<
"packing_was::init_regular_packing" << endl;
389 cout <<
"packing_was::init_regular_packing done" << endl;
395 int f_v = (verbose_level >= 1);
399 cout <<
"packing_was::init_N" << endl;
409 cout <<
"packing_was::init_N before N_LG->init, "
410 "creating the group" << endl;
414 cout <<
"packing_was::init_N "
415 "q != N_Descr->input_q" << endl;
422 cout <<
"packing_was::init_N after N_LG->linear_group_init" << endl;
427 cout <<
"packing_was::init_N created group " <<
H_LG->
label << endl;
431 cout <<
"packing_was::init_N the group is not a matrix group " << endl;
436 cout <<
"the groups N and H must either both be semilinear or not" << endl;
440 cout <<
"packing_was::init_N f_semilinear=" <<
f_semilinear << endl;
444 cout <<
"packing_was::init_N N_gens=" << endl;
449 cout <<
"packing_was::init_N N_goi=" <<
N_goi << endl;
455 cout <<
"packing_was::init_N before test_if_normalizing" << endl;
459 cout <<
"packing_was::init_N after test_if_normalizing" << endl;
463 cout <<
"packing_was::init_N H_sims is unavailable" << endl;
469 cout <<
"packing_was::init_N done" << endl;
475 int f_v = (verbose_level >= 1);
478 cout <<
"packing_was::init_H" << endl;
485 cout <<
"packing_was::init_H before H_LG->init, "
486 "creating the group" << endl;
492 cout <<
"packing_was::init_H after H_LG->linear_group_init" << endl;
499 cout <<
"packing_was::init_H created group " <<
H_LG->
label << endl;
503 cout <<
"packing_was::init_H the group is not a matrix group " << endl;
510 cout <<
"packing_was::init_H f_semilinear=" <<
f_semilinear << endl;
518 cout <<
"packing_was::init_H dim=" <<
dim << endl;
523 cout <<
"packing_was::init_H H_gens=" << endl;
528 cout <<
"packing_was::init_H H_goi=" <<
H_goi << endl;
532 cout <<
"packing_was::init_H before H_gens->create_sims" << endl;
537 cout <<
"packing_was::init_H after H_gens->create_sims" << endl;
571 cout <<
"packing_was::init_H done" << endl;
579 int f_v = (verbose_level >= 1);
582 cout <<
"packing_was::compute_H_orbits_on_points" << endl;
589 cout <<
"packing_was::compute_H_orbits_on_points "
598 cout <<
"packing_was::compute_H_orbits_on_points before Point_orbits_under_H->create_latex_report" << endl;
602 cout <<
"packing_was::compute_H_orbits_on_points after Point_orbits_under_H->create_latex_report" << endl;
606 cout <<
"packing_was::compute_H_orbits_on_points done" << endl;
614 int f_v = (verbose_level >= 1);
617 cout <<
"packing_was::compute_N_orbits_on_points" << endl;
624 cout <<
"packing_was::compute_N_orbits_on_points "
633 cout <<
"packing_was::compute_N_orbits_on_points before Point_orbits_under_N->create_latex_report" << endl;
637 cout <<
"packing_was::compute_N_orbits_on_points after Point_orbits_under_N->create_latex_report" << endl;
641 cout <<
"packing_was::compute_N_orbits_on_points done" << endl;
651 int f_v = (verbose_level >= 1);
654 cout <<
"packing_was::compute_H_orbits_on_lines" << endl;
661 cout <<
"packing_was::compute_H_orbits_on_lines "
670 cout <<
"packing_was::compute_H_orbits_on_lines before Line_orbits_under_H->create_latex_report" << endl;
674 cout <<
"packing_was::compute_H_orbits_on_lines after Line_orbits_under_H->create_latex_report" << endl;
678 cout <<
"packing_was::compute_H_orbits_on_lines done" << endl;
686 int f_v = (verbose_level >= 1);
689 cout <<
"packing_was::compute_N_orbits_on_lines" << endl;
696 cout <<
"packing_was::compute_N_orbits_on_lines "
705 cout <<
"packing_was::compute_N_orbits_on_lines before Line_orbits_under_N->create_latex_report" << endl;
709 cout <<
"packing_was::compute_N_orbits_on_lines after Line_orbits_under_N->create_latex_report" << endl;
713 cout <<
"packing_was::compute_N_orbits_on_lines done" << endl;
720 int f_v = (verbose_level >= 1);
724 cout <<
"packing_was::compute_spread_types_wrt_H" << endl;
735 cout <<
"The spread types are:" << endl;
745 cout <<
"packing_was::compute_spread_types_wrt_H done" << endl;
753 int f_v = (verbose_level >= 1);
757 cout <<
"packing_was::compute_H_orbits_on_spreads" << endl;
766 cout <<
"packing_was::compute_H_orbits_on_spreads before Spread_orbits_under_H->init" << endl;
773 cout <<
"packing_was::compute_H_orbits_on_spreads after Spread_orbits_under_H->init" << endl;
779 cout <<
"packing_was::compute_H_orbits_on_lines before Spread_orbits_under_H->create_latex_report" << endl;
783 cout <<
"packing_was::compute_H_orbits_on_lines after Spread_orbits_under_H->create_latex_report" << endl;
789 cout <<
"packing_was::compute_H_orbits_on_spreads "
790 "creating action A_on_spread_orbits" << endl;
801 cout <<
"prime_at_a_time::compute_H_orbits_on_spreads "
802 "created action on orbits of degree "
807 cout <<
"packing_was::compute_H_orbits_on_spreads "
808 "created action A_on_spread_orbits done" << endl;
814 int f_v = (verbose_level >= 1);
818 cout <<
"packing_was::test_orbits_on_spreads "
821 <<
" orbits are partial packings:" << endl;
830 cout <<
"packing_was::test_orbits_on_spreads file "
842 for (i = 0; i < m; i++) {
852 cout <<
"packing_was::test_orbits_on_spreads file "
854 <<
" does not exist, computing good orbits" << endl;
881 cout <<
"packing_was::test_orbits_on_spreads "
884 "partial packings" << endl;
888 const char *Col_labels[2] = {
"Orbit_idx",
"Orbit_len"};
902 cout <<
"packing_was::test_orbits_on_spreads "
905 "are partial packings" << endl;
910 cout <<
"packing_was::test_orbits_on_spreads done" << endl;
916 int f_v = (verbose_level >= 1);
920 cout <<
"packing_was::reduce_spreads " << endl;
923 int i, j, h, f, l, c;
933 cout <<
"packing_was::reduce_spreads "
944 for (h = 0; h < l; h++) {
949 cout <<
"packing_was::reduce_spreads c != nb_good_spreads" << endl;
958 cout <<
"packing_was::reduce_spreads before "
959 "Spread_tables_reduced->init_reduced" << endl;
967 cout <<
"packing_was::reduce_spreads after "
968 "Spread_tables_reduced->init_reduced" << endl;
971 string fname_reduced_spread_original_idx;
977 sprintf(str,
"reduced_spread_%d_original_idx", NT.
i_power_j(
P->
F->
q, 2));
979 fname_reduced_spread_original_idx.append(str);
980 fname_reduced_spread_original_idx.append(
".csv");
983 cout <<
"packing_was::reduce_spreads fname_original_idx = " << fname_reduced_spread_original_idx << endl;
988 cout <<
"packing_was::reduce_spreads before "
989 "Spread_tables_reduced->save" << endl;
993 cout <<
"packing_was::reduce_spreads after "
994 "Spread_tables_reduced->save" << endl;
998 cout <<
"packing_was::reduce_spreads done" << endl;
1006 int f_v = (verbose_level >= 1);
1010 cout <<
"packing_was::compute_reduced_spread_types_wrt_H" << endl;
1022 cout <<
"The reduced spread types are:" << endl;
1029 cout <<
"packing_was::compute_reduced_spread_types_wrt_H done" << endl;
1036 int f_v = (verbose_level >= 1);
1040 cout <<
"packing_was::compute_H_orbits_on_reduced_spreads" << endl;
1044 cout <<
"packing_was::compute_H_orbits_on_reduced_spreads "
1045 "creating action A_on_reduced_spreads" << endl;
1053 cout <<
"packing_was::compute_H_orbits_on_reduced_spreads "
1054 "creating action A_on_reduced_spreads done" << endl;
1061 cout <<
"H_gens in action on reduced spreads:" << endl;
1067 cout <<
"N_gens in action on reduced spreads:" << endl;
1080 cout <<
"packing_was::compute_H_orbits_on_reduced_spreads "
1081 "before reduced_spread_orbits_under_H->init" << endl;
1088 cout <<
"packing_was::compute_H_orbits_on_reduced_spreads "
1089 "after reduced_spread_orbits_under_H->init" << endl;
1093 cout <<
"reduced_spread_orbits_under_H->Sch->nb_orbits = "
1101 cout <<
"packing_was::compute_H_orbits_on_lines before reduced_spread_orbits_under_H->create_latex_report" << endl;
1105 cout <<
"packing_was::compute_H_orbits_on_lines after reduced_spread_orbits_under_H->create_latex_report" << endl;
1115 cout <<
"packing_was::compute_H_orbits_on_reduced_spreads "
1116 "creating action A_on_reduced_spread_orbits" << endl;
1126 cout <<
"prime_at_a_time::compute_H_orbits_on_reduced_spreads "
1127 "created action on orbits of degree "
1132 cout <<
"packing_was::compute_H_orbits_on_reduced_spreads "
1133 "created action A_on_reduced_spread_orbits done" << endl;
1139 int f_v = (verbose_level >= 1);
1144 cout <<
"packing_was::restricted_action" << endl;
1148 if (orbit_idx == -1) {
1149 cout <<
"packing_was::restricted_action "
1150 "we don't have any orbits of length " << orbit_length << endl;
1154 cout <<
"orbit_idx = " << orbit_idx << endl;
1155 cout <<
"Number of orbits of length " << orbit_length <<
" is "
1166 cout <<
"packing_was::restricted_action done" << endl;
1172 long int *set1,
int len1,
long int *set2,
int len2,
1181 cout <<
"packing_was::test_if_pair_of_sets_of_reduced_spreads_are_adjacent" << endl;
1192 int f_has_user_data,
long int *user_data,
int user_data_size,
1195 int f_v = (verbose_level >= 1);
1198 cout <<
"packing_was::create_graph_and_save_to_file orbit_length = " << orbit_length << endl;
1205 cout <<
"packing_was::create_graph_and_save_to_file before "
1206 "create_graph_on_orbits_of_a_certain_length" << endl;
1213 f_has_user_data, user_data, user_data_size,
1215 packing_was_set_of_reduced_spreads_adjacency_test_function,
1220 cout <<
"packing_was::create_graph_and_save_to_file after "
1221 "create_graph_on_orbits_of_a_certain_length" << endl;
1224 CG->
save(fname, verbose_level);
1229 cout <<
"packing_was::create_graph_and_save_to_file done" << endl;
1234 std::string &orbit_lengths_text,
1235 int f_has_user_data,
long int *user_data,
int user_data_size,
1238 int f_v = (verbose_level >= 1);
1241 cout <<
"packing_was::create_graph_on_mixed_orbits_and_save_to_file orbit_lengths_text = " << orbit_lengths_text << endl;
1244 int nb_orbit_lengths;
1246 Int_vec_scan(orbit_lengths_text, Orbit_lengths, nb_orbit_lengths);
1248 cout <<
"packing_was::create_graph_on_mixed_orbits_and_save_to_file orbit_lengths: ";
1257 Type_idx =
NEW_int(nb_orbit_lengths);
1260 fname.append(
"_spread_orbits_graph.bin");
1262 cout <<
"packing_was::create_graph_on_mixed_orbits_and_save_to_file before "
1263 "create_weighted_graph_on_orbits" << endl;
1271 f_has_user_data, user_data, user_data_size,
1272 packing_was_set_of_reduced_spreads_adjacency_test_function,
1278 cout <<
"packing_was::create_graph_on_mixed_orbits_and_save_to_file after "
1279 "create_weighted_graph_on_orbits" << endl;
1284 cout <<
"packing_was::create_graph_on_mixed_orbits_and_save_to_file Type_idx: ";
1289 CG->
save(fname, verbose_level);
1293 for (i = 0; i < nb_orbit_lengths; i++) {
1296 cout <<
"packing_was::create_graph_on_mixed_orbits_and_save_to_file "
1305 sprintf(str,
"_on_spread_orbits_%d", i);
1311 fname1.append(
".makefile");
1317 cout <<
"packing_was::create_graph_on_mixed_orbits_and_save_to_file "
1318 "before A_on_mixed_orbits->export_to_orbiter" << endl;
1322 cout <<
"packing_was::create_graph_on_mixed_orbits_and_save_to_file "
1323 "after A_on_mixed_orbits->export_to_orbiter" << endl;
1329 action *A_on_mixed_orbits;
1334 cout <<
"packing_was::create_graph_on_mixed_orbits_and_save_to_file "
1335 "before creating A_on_mixed_orbits" << endl;
1340 cout <<
"packing_was::create_graph_on_mixed_orbits_and_save_to_file "
1341 "after creating A_on_mixed_orbits" << endl;
1356 cout <<
"packing_was::create_graph_on_mixed_orbits_and_save_to_file done" << endl;
1372 int f_v = (verbose_level >= 1);
1375 cout <<
"packing_was::compute_orbit_invariant_on_classified_orbits" << endl;
1379 cout <<
"packing_was::compute_orbit_invariant_on_classified_orbits "
1380 "before reduced_spread_orbits_under_H->compute_orbit_invariant_after_classification" << endl;
1384 packing_was_evaluate_orbit_invariant_function,
1388 cout <<
"packing_was::compute_orbit_invariant_on_classified_orbits "
1389 "after reduced_spread_orbits_under_H->compute_orbit_invariant_after_classification" << endl;
1393 cout <<
"packing_was::compute_orbit_invariant_on_classified_orbits done" << endl;
1398 int i,
int j,
int verbose_level)
1400 int f_v = (verbose_level >= 1);
1403 cout <<
"packing_was::evaluate_orbit_invariant_function "
1404 "i=" << i <<
" j=" << j <<
" a=" << a << endl;
1407 int f, l, h, spread_idx, type_value;
1416 for (h = 0; h < l; h++) {
1423 if (type_value != val) {
1424 cout <<
"packing_was::evaluate_orbit_invariant_function "
1425 "the invariant is not invariant on the orbit" << endl;
1432 cout <<
"packing_was::evaluate_orbit_invariant_function "
1433 "i=" << i <<
" j=" << j <<
" a=" << a <<
" val=" << val << endl;
1436 cout <<
"packing_was::evaluate_orbit_invariant_function done" << endl;
1443 int f_v = (verbose_level >= 1);
1446 cout <<
"packing_was::classify_orbit_invariant" << endl;
1451 cout <<
"packing_was::classify_orbit_invariant before "
1452 "Classify_spread_invariant_by_orbit_length[i].init" << endl;
1457 for (i = 0; i <
nb_sets; i++) {
1462 cout <<
"packing_was::classify_orbit_invariant after "
1463 "Classify_spread_invariant_by_orbit_length[i].init" << endl;
1467 cout <<
"packing_was::classify_orbit_invariant done" << endl;
1473 int i, j, h, f, l, len, fst, u;
1474 long int a, b, e, e_idx;
1475 int basis_external_line[12];
1476 int basis_external_line2[12];
1478 ost <<
"Spread types by orbits of given length:\\\\" << endl;
1480 ost <<
"Orbits of length " <<
1482 <<
" have the following spread type:\\\\" << endl;
1489 ost <<
"Spread type " << a <<
" = \\\\";
1490 ost <<
"$$" << endl;
1495 ost <<
"$$" << endl;
1496 ost <<
"appears " << l <<
" times.\\\\" << endl;
1523 ost <<
"Orbits of length one:\\\\" << endl;
1524 for (j = 0; j < l; j++) {
1528 for (h = 0; h < len; h++) {
1534 ost <<
"Short orbit " << j <<
" / " << l <<
" is orbit "
1535 << a <<
" is spread " << b <<
" is external line "
1536 << e <<
" is:\\\\" << endl;
1537 ost <<
"$$" << endl;
1541 B, basis_external_line2,
1543 ost <<
"\\hat{=}" << endl;
1548 for (u = 0; u < 4; u++) {
1550 basis_external_line2 + u * 3, 1, 3);
1552 ost <<
"\\hat{=}" << endl;
1553 ost <<
"\\left[" << endl;
1555 ost <<
"\\right]" << endl;
1557 ost <<
"\\hat{=}" << endl;
1559 ost <<
"$$" << endl;
1571 ost <<
"\\section{Fixed Objects of $H$}" << endl;
1579 ost <<
"\\clearpage" << endl;
1580 ost <<
"\\section{Line Orbits of $H$}" << endl;
1586 ost <<
"\\clearpage" << endl;
1587 ost <<
"\\section{Spread Orbits of $H$}" << endl;
1592 ost <<
"\\clearpage" << endl;
1593 ost <<
"\\section{Spread Types}" << endl;
1597 ost <<
"\\clearpage" << endl;
1598 ost <<
"\\section{Reduced Spread Orbits of $H$}" << endl;
1604 ost <<
"\\clearpage" << endl;
1605 ost <<
"\\section{Reduced Spread Types}" << endl;
1609 ost <<
"\\clearpage" << endl;
1610 ost <<
"\\section{Reduced Spread Orbits under $H$}" << endl;
1615 int f_original_spread_numbers =
TRUE;
1620 f_original_spread_numbers =
FALSE;
1625 ost <<
"\\clearpage" << endl;
1626 ost <<
"\\section{Reduced Spread Orbits: Spread invariant}" << endl;
1631 ost <<
"\\clearpage" << endl;
1632 ost <<
"\\section{The Group $N$}" << endl;
1633 ost <<
"The Group $N$ has order " <<
N_goi <<
"\\\\" << endl;
1651 sprintf(title,
"Packings in PG(3,%d) ",
P->
q);
1652 sprintf(author,
"Orbiter");
1653 sprintf(fname,
"Packings_q%d.tex",
P->
q);
1671 fp <<
"\\section{The field of order " <<
P->
q <<
"}" << endl;
1672 fp <<
"\\noindent The field ${\\mathbb F}_{"
1674 <<
"}$ :\\\\" << endl;
1678 fp <<
"\\section{The space PG$(3, " << q <<
")$}" << endl;
1680 fp <<
"The points in the plane PG$(2, " << q <<
")$:\\\\" << endl;
1682 fp <<
"\\bigskip" << endl;
1685 Gen->P->cheat_sheet_points(fp, 0 );
1688 fp <<
"\\section{Poset Classification}" << endl;
1691 fp <<
"\\section{The Group $H$}" << endl;
1698 cout <<
"Written file " << fname <<
" of size "
1718 ost <<
"\\bigskip" << endl;
1719 ost <<
"\\noindent" << endl;
1726 ost <<
"Line orbit " << a <<
" is:\\\\" << endl;
1729 std::vector<int> Orb;
1735 for (h = 0; h < Orb.size(); h++) {
1737 if (h < Orb.size() - 1) {
1741 ost <<
"\\\\" << endl;
1742 ost <<
"The orbit consists of the following lines:\\\\" << endl;
1743 for (h = 0; h < Orb.size(); h++) {
1747 ost <<
"_{" << b <<
"}";
1749 if (i < Orb.size() - 1) {
1753 ost <<
"\\\\" << endl;
1760 int &nb_orbits,
int &orbit_length,
1761 long int *&orbit_idx,
1762 long int *&spreads_in_reduced_orbits_by_type,
1763 int f_original_spread_numbers,
1766 int f_v = (verbose_level >= 1);
1769 long int nb_spreads;
1772 cout <<
"packing_was::get_spreads_in_reduced_orbits_by_type" << endl;
1781 for (j = 0; j < nb_orbits; j++) {
1785 std::vector<int> Orb;
1790 if (orbit_length == -1) {
1791 orbit_length = Orb.size();
1793 else if (orbit_length != Orb.size()) {
1794 cout <<
"we have orbits of different lengths" << endl;
1799 nb_spreads = nb_orbits * orbit_length;
1801 cout <<
"Type " << type_idx <<
" has " << nb_spreads <<
" spreads:\\\\" << endl;
1803 spreads_in_reduced_orbits_by_type =
NEW_lint(nb_spreads);
1808 for (j = 0; j < nb_orbits; j++) {
1811 std::vector<int> Orb;
1817 for (h = 0; h < Orb.size(); h++) {
1821 if (f_original_spread_numbers) {
1827 spreads_in_reduced_orbits_by_type[j * orbit_length + h] = c;
1839 int f_v = (verbose_level >= 1);
1844 cout <<
"packing_was::export_reduced_spread_orbits_csv" << endl;
1860 long int *orbit_idx;
1861 long int *spreads_in_reduced_orbits_by_type;
1864 nb_orbits, orbit_length,
1866 spreads_in_reduced_orbits_by_type,
1867 f_original_spread_numbers,
1871 sprintf(str,
"_of_length_%d", orbit_length);
1873 fname.assign(fname_base);
1874 fname.append(
"_reduced_spead_orbits");
1876 fname.append(
".csv");
1881 cout <<
"Written file " << fname <<
" of size " << Fio.
file_size(fname) << endl;
1901 long int *orbit_idx;
1902 long int *spreads_in_reduced_orbits_by_type;
1905 nb_orbits, orbit_length,
1907 spreads_in_reduced_orbits_by_type,
1908 f_original_spread_numbers,
1911 ost <<
"Type " << type_idx <<
" has " << nb_orbits
1912 <<
" orbits of length " << orbit_length <<
":\\\\" << endl;
1917 if (nb_orbits > 100) {
1919 ost <<
"Too many to list, listing only the first " << nb_orbits1 <<
":\\\\" << endl;
1922 nb_orbits1 = nb_orbits;
1925 for (j = 0; j < nb_orbits1; j++) {
1926 ost << j <<
" : " << orbit_idx[j] <<
" : ";
1927 Orbiter->
Lint_vec.
print(ost, spreads_in_reduced_orbits_by_type + j * orbit_length, orbit_length);
1928 ost <<
"\\\\" << endl;
1929 if (j && (j % 40) == 0) {
1931 ost <<
"\\clearpage" << endl;
1935 ost <<
"\\clearpage" << endl;
1943 long int *spreads_in_reduced_orbits;
1944 int nb_spreads, spread_cnt;
1946 spreads_in_reduced_orbits =
NEW_lint(nb_spreads * orbit_length);
1947 lint_vec_zero(spreads_in_reduced_orbits, nb_spreads * orbit_length);
1958 ost <<
"Spread orbit " << a <<
" is:\\\\" << endl;
1961 std::vector<int> Orb;
1967 for (h = 0; h < Orb.size(); h++) {
1968 spreads_in_reduced_orbits[spread_cnt * orbit_length + h] = Orb[h];
1971 for (h = 0; h < Orb.size(); h++) {
1973 if (h < Orb.size() - 1) {
1977 ost <<
"\\\\" << endl;
1981 ost <<
"Table of spreads in reduced orbits:\\\\" << endl;
1982 ost <<
"$$" << endl;
1984 ost <<
"$$" << endl;
1988 T1.init_lint(spreads_in_reduced_orbits, nb_spreads * orbit_length,
FALSE, 0);
1990 ost <<
"$$" << endl;
1991 T1.print_naked_tex(ost,
TRUE );
1992 ost <<
"$$" << endl;
1995 ost <<
"$$" << endl;
1996 T1.print_array_tex(ost,
TRUE );
1997 ost <<
"$$" << endl;
2000 int *lines_in_spreads;
2004 for (i = 0; i < nb_spreads * orbit_length; i++) {
2005 a = spreads_in_reduced_orbits[i];
2014 T2.init(lines_in_spreads,
2018 ost <<
"Frequencies of lines appearing in spreads appearing in these orbits:\\\\" << endl;
2019 ost <<
"$$" << endl;
2020 T2.print_naked_tex(ost,
TRUE );
2021 ost <<
"$$" << endl;
2023 long int *spreads_in_reduced_orbits_with_original_labels;
2025 spreads_in_reduced_orbits_with_original_labels =
NEW_lint(nb_spreads * orbit_length);
2026 for (i = 0; i < nb_spreads * orbit_length; i++) {
2027 a = spreads_in_reduced_orbits[i];
2029 spreads_in_reduced_orbits_with_original_labels[i] = b;
2032 string fname_reduced_orbits;
2034 if (
Descr->f_output_path) {
2035 fname_reduced_orbits.assign(
Descr->output_path);
2038 fname_reduced_orbits.assign(
"");
2040 fname_reduced_orbits.append(
H_LG->
label);
2041 if (
Descr->f_problem_label) {
2042 fname_reduced_orbits.append(
Descr->problem_label);
2044 fname_reduced_orbits.append(
"_reduced_orbits.csv");
2048 Fio.lint_matrix_write_csv(fname_reduced_orbits,
2049 spreads_in_reduced_orbits_with_original_labels,
2050 nb_spreads, orbit_length);
2052 cout <<
"Written file " << fname_reduced_orbits <<
" of size " << Fio.file_size(fname_reduced_orbits) << endl;
2059 FREE_lint(spreads_in_reduced_orbits_with_original_labels);
2062 ost <<
"\\bigskip" << endl;
2063 ost <<
"\\noindent" << endl;
2070 ost <<
"Spread orbit " << a <<
" is:\\\\" << endl;
2073 std::vector<int> Orb;
2079 for (h = 0; h < Orb.size(); h++) {
2081 if (h < Orb.size() - 1) {
2085 ost <<
"\\\\" << endl;
2086 ost <<
"The orbit consists of the following spreads:\\\\" << endl;
2087 for (h = 0; h < Orb.size(); h++) {
2089 ost <<
"Spread " << b <<
" is:\\\\" << endl;
2091 ost <<
"\\\\" << endl;
2103 ost <<
"The number of good spreads is " <<
nb_good_spreads <<
"\\\\" << endl;
2104 ost <<
"The good spreads are:\\\\" << endl;
2111 if ((i % 100) == 0) {
2112 ost <<
"\\\\" << endl;
2115 ost <<
"\\ \\\\" << endl;
2124static int packing_was_set_of_reduced_spreads_adjacency_test_function(
2125 long int *set1,
int len1,
2126 long int *set2,
int len2,
void *data)
2131 set1, len1, set2, len2, 0 );
2137static int packing_was_evaluate_orbit_invariant_function(
int a,
int i,
int j,
2138 void *evaluate_data,
int verbose_level)
2141 packing_was *P = (packing_was *) evaluate_data;
2144 cout <<
"packing_was_evaluate_orbit_invariant_function "
2145 "i=" << i <<
" j=" << j <<
" a=" << a << endl;
2152 cout <<
"packing_was_evaluate_orbit_invariant_function "
2153 "i=" << i <<
" j=" << j <<
" a=" << a <<
" val=" << val << endl;
2156 cout <<
"packing_was_evaluate_orbit_invariant_function done" << endl;
2162static void packing_was_print_function(std::ostream &ost,
long int a,
void *data)
2164 packing_was *P = (packing_was *) data;
2167 int verbose_level = 0;
2168 int orbit_idx1, orbit_pos1;
2169 int orbit_idx2, orbit_pos2;
2179 P->Line_orbits_under_H->get_orbit_number_and_position(a, orbit_idx1, orbit_pos1, verbose_level);
2180 P->Line_orbits_under_H->get_orbit_number_and_position(b, orbit_idx2, orbit_pos2, verbose_level);
2181 ost <<
"=(" << orbit_idx1 <<
"," << orbit_pos1 <<
")" << endl;
2184 ost <<
"=(" << orbit_idx2 <<
"," << orbit_pos2 <<
")" << endl;
void zero(long int *v, long int len)
void print(std::ostream &ost, long int *v, int len)
a statistical analysis of data consisting of single integers
void init_lint(long int *data, int data_length, int f_second, int verbose_level)
void print_matrix_latex(std::ostream &ost, int *A, int m, int n)
void cheat_sheet(std::ostream &f, int verbose_level)
void finite_field_init(int q, int f_without_tables, int verbose_level)
linear_algebra::linear_algebra * Linear_algebra
various functions related to geometries
long int AG_element_rank(int q, int *v, int stride, int len)
void unrank_lint_here_and_compute_perp(int *Mtx, long int rk, int verbose_level)
long int rank_lint_here(int *Mtx, int verbose_level)
void print_single_generator_matrix_tex(std::ostream &ost, long int a)
void unrank_line(int *basis, long int rk)
tables with line-spreads in PG(3,q)
void save(int verbose_level)
void report_one_spread(std::ostream &ost, int a)
void init_reduced(int nb_select, int *select, spread_tables *old_spread_table, std::string &path_to_spread_tables, int verbose_level)
int test_if_pair_of_sets_are_adjacent(long int *set1, int sz1, long int *set2, int sz2, int verbose_level)
a graph with a vertex coloring
void save(std::string &fname, int verbose_level)
void mult_matrix_matrix(int *A, int *B, int *C, int m, int n, int o, int verbose_level)
basic number theoretic functions
int i_power_j(int i, int j)
a collection of functions related to file io
void int_matrix_write_csv(std::string &fname, int *M, int m, int n)
void lint_matrix_write_csv(std::string &fname, long int *M, int m, int n)
void int_matrix_read_csv(std::string &fname, int *&M, int &m, int &n, int verbose_level)
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 print_integer_matrix_tex(std::ostream &ost, 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 lint_matrix_print_tex(std::ostream &ost, long int *p, int m, int n)
void foot(std::ostream &ost)
data_structures::lint_vec * Lint_vec
a permutation group in a fixed action.
action * restricted_action(long int *points, int nb_points, int verbose_level)
action * create_induced_action_on_sets(int nb_sets, int set_size, long int *sets, int verbose_level)
void induced_action_on_orbits(action *old_action, groups::schreier *Sch, int f_play_it_safe, int verbose_level)
void export_to_orbiter(std::string &fname, std::string &label, groups::strong_generators *SG, int verbose_level)
int is_semilinear_matrix_group()
action * create_induced_action_by_restriction(groups::sims *S, int size, long int *set, int f_induce, int verbose_level)
groups::matrix_group * get_matrix_group()
A collection of invariants called orbit type associated with a system of sets. The orbit types are ba...
void init(groups::orbits_on_something *Oos, int nb_sets, int set_size, long int *Sets, long int goi, int verbose_level)
long int * Type_representatives
void create_latex_report(std::string &prefix, int verbose_level)
void report(std::ostream &ost, int verbose_level)
groups::orbits_on_something * Oos
field_theory::finite_field * F
creates a linear group from command line arguments using linear_group_description
void linear_group_init(linear_group_description *description, int verbose_level)
strong_generators * Strong_gens
compute orbits of a group in a given action; allows file io
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 create_latex_report(int verbose_level)
void report_type(std::ostream &ost, long int *orbit_type, long int goi)
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 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_if_present(int orbit_length)
int * Orbits_classified_length
void report_orbit_lengths(std::ostream &ost)
void report_classified_orbit_lengths(std::ostream &ost)
data_structures::set_of_sets * Orbits_classified
void get_orbit_in_order(std::vector< int > &Orb, int orbit_idx, int verbose_level)
sims * create_sims(int verbose_level)
void report_fixed_objects_in_P3(std::ostream &ost, geometry::projective_space *P3, int verbose_level)
void print_generators_tex()
long int group_order_as_lint()
void print_with_given_action(std::ostream &ost, actions::action *A2)
int test_if_normalizing(sims *S, int verbose_level)
induced action on the grassmannian (subspaces of a fixed dimension of a vectors space)
void add_print_function(void(*print_function)(std::ostream &ost, long int a, void *data), void *print_function_data, int verbose_level)
classification of packings in PG(3,q)
field_theory::finite_field * F
geometry::projective_space * P3
std::string path_to_spread_tables
spreads::spread_table_with_selection * Spread_table_with_selection
spreads::spread_classify * T
int test_if_orbit_is_partial_packing(groups::schreier *Orbits, int orbit_idx, long int *orbit1, int verbose_level)
command line description of tasks for packings with assumed symmetry
groups::linear_group_description * N_Descr
groups::linear_group_description * H_Descr
construction of packings in PG(3,q) with assumed symmetry
actions::action * A_on_spread_orbits
void classify_orbit_invariant(int verbose_level)
groups::strong_generators * N_gens
std::string fname_good_orbits
geometry::spread_tables * Spread_tables_reduced
void report_reduced_spread_orbits(std::ostream &ost, int f_original_spread_numbers, int verbose_level)
void report(int verbose_level)
void report_line_orbits_under_H(std::ostream &ost, int verbose_level)
void report_good_spreads(std::ostream &ost)
groups::linear_group * H_LG
void reduce_spreads(int verbose_level)
void compute_N_orbits_on_lines(int verbose_level)
std::string prefix_point_orbits_under_H
groups::orbits_on_something * Point_orbits_under_H
actions::action * A_on_reduced_spread_orbits
data_structures::set_of_sets * Orbit_invariant
groups::linear_group * N_LG
void compute_H_orbits_on_spreads(int verbose_level)
void compute_H_orbits_on_lines(int verbose_level)
void init_N(int verbose_level)
groups::orbits_on_something * reduced_spread_orbits_under_H
void compute_spread_types_wrt_H(int verbose_level)
groups::orbits_on_something * Spread_orbits_under_H
void init_H(int verbose_level)
groups::strong_generators * H_gens
regular_packing * Regular_packing
groups::orbits_on_something * Point_orbits_under_N
void compute_H_orbits_on_points(int verbose_level)
void compute_N_orbits_on_points(int verbose_level)
int evaluate_orbit_invariant_function(int a, int i, int j, int verbose_level)
std::string prefix_line_orbits_under_H
void create_graph_and_save_to_file(std::string &fname, int orbit_length, int f_has_user_data, long int *user_data, int user_data_size, int verbose_level)
std::string prefix_spread_types_reduced
actions::action * A_on_reduced_spreads
std::string prefix_point_orbits_under_N
data_structures_groups::orbit_type_repository * Spread_type_reduced
void compute_orbit_invariant_on_classified_orbits(int verbose_level)
std::string prefix_line_orbits_under_N
void test_orbits_on_spreads(int verbose_level)
void compute_H_orbits_and_reduce(int verbose_level)
void get_spreads_in_reduced_orbits_by_type(int type_idx, int &nb_orbits, int &orbit_length, long int *&orbit_idx, long int *&spreads_in_reduced_orbits_by_type, int f_original_spread_numbers, int verbose_level)
void create_graph_on_mixed_orbits_and_save_to_file(std::string &orbit_lengths_text, int f_has_user_data, long int *user_data, int user_data_size, int verbose_level)
std::string prefix_reduced_spread_orbits
std::string prefix_spread_types
std::string prefix_spread_orbits
int test_if_pair_of_sets_of_reduced_spreads_are_adjacent(long int *orbit1, int len1, long int *orbit2, int len2, int verbose_level)
void init(packing_was_description *Descr, packing_classify *P, int verbose_level)
void report_orbit_invariant(std::ostream &ost)
long int * Good_orbit_len
void report2(std::ostream &ost, int verbose_level)
data_structures_groups::orbit_type_repository * Spread_type
int find_orbits_of_length_in_reduced_spread_table(int orbit_length)
data_structures::tally * Classify_spread_invariant_by_orbit_length
void compute_H_orbits_on_reduced_spreads(int verbose_level)
groups::orbits_on_something * Line_orbits_under_N
void init_regular_packing(int verbose_level)
groups::orbits_on_something * Line_orbits_under_H
void export_reduced_spread_orbits_csv(std::string &fname_base, int f_original_spread_numbers, int verbose_level)
void compute_reduced_spread_types_wrt_H(int verbose_level)
packing_was_description * Descr
long int * Good_orbit_idx
actions::action * restricted_action(int orbit_length, int verbose_level)
a regular packing as a partition of the Klein quadric into elliptic quadrics
std::vector< long int > External_lines
void init(packing_was *PW, int verbose_level)
long int * spread_to_external_line_idx
geometry::grassmann * Grass
geometry::klein_correspondence * Klein
geometry::spread_tables * Spread_tables
actions::action * A_on_spreads
void create_action_on_spreads(int verbose_level)
#define Int_vec_scan(A, B, C)
#define NEW_OBJECTS(type, n)
#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
induced_actions::action_on_grassmannian * AG