Orbiter 2022
Combinatorial Objects
packing_classify.cpp
Go to the documentation of this file.
1// packing_classify.cpp
2//
3// Anton Betten
4// Feb 6, 2013
5//
6//
7//
8//
9//
10
11#include "orbiter.h"
12
13using namespace std;
14
15namespace orbiter {
16namespace layer5_applications {
17namespace packings {
18
19
20#if 0
21static void callback_packing_compute_klein_invariants(
22 isomorph *Iso, void *data, int verbose_level);
23static void callback_packing_report(isomorph *Iso,
24 void *data, int verbose_level);
25static void packing_lifting_prepare_function_new(
26 exact_cover *EC, int starter_case,
27 long int *candidates, int nb_candidates,
28 groups::strong_generators *Strong_gens,
29 solvers::diophant *&Dio, long int *&col_labels,
30 int &f_ruled_out,
31 int verbose_level);
32#endif
33static void packing_early_test_function(long int *S, int len,
34 long int *candidates, int nb_candidates,
35 long int *good_candidates, int &nb_good_candidates,
36 void *data, int verbose_level);
37#if 0
38static int count(int *Inc, int n, int m, int *set, int t);
39static int count_and_record(int *Inc, int n, int m,
40 int *set, int t, int *occurances);
41#endif
42
44{
45 PA = NULL;
46 T = NULL;
47 F = NULL;
48 spread_size = 0;
49 nb_lines = 0;
50
51
53 q = 0;
55 // the number of spreads in a packing,
56 // which is q^2 + q + 1
57
59
60 P3 = NULL;
61 P5 = NULL;
62 the_packing = NULL;
63 spread_iso_type = NULL;
64 dual_packing = NULL;
65 list_of_lines = NULL;
67 Gr = NULL;
68
69
70 degree = NULL;
71
72 Control = NULL;
73 Poset = NULL;
74 gen = NULL;
75
76 nb_needed = 0;
77
78 //null();
79}
80
82{
83 freeself();
84}
85
87{
88}
89
91{
94 }
95 if (P3) {
97 }
98 if (P5) {
100 }
101 if (the_packing) {
103 }
104 if (spread_iso_type) {
106 }
107 if (dual_packing) {
109 }
110 if (list_of_lines) {
112 }
115 }
116 if (Gr) {
118 }
119 null();
120}
121
124 int dimension_of_spread_elements,
125 int f_select_spread, std::string &select_spread_text,
126 std::string &path_to_spread_tables,
127 int verbose_level)
128{
129 int f_v = (verbose_level >= 1);
130
131 if (f_v) {
132 cout << "packing_classify::spread_table_init "
133 "dimension_of_spread_elements=" << dimension_of_spread_elements << endl;
134 }
135 int n, q;
138
139
143 Mtx = PA->A->get_matrix_group();
144 F = Mtx->GFq;
145 q = F->q;
146 if (f_v) {
147 cout << "packing_classify::spread_table_init n=" << n
148 << " k=" << dimension_of_spread_elements
149 << " q=" << q << endl;
150 }
151
152
154
155
156 if (f_v) {
157 cout << "packing_classify::spread_table_init before T->init" << endl;
158 }
159
160
161 T->init(PA,
162 dimension_of_spread_elements,
163 TRUE /* f_recoordinatize */,
164 verbose_level - 1);
165
166 if (f_v) {
167 cout << "packing_classify::spread_table_init after T->init" << endl;
168 }
169
170#if 0
171 if (f_v) {
172 cout << "packing_classify::spread_table_init before T->init2" << endl;
173 }
174 T->init2(Control, verbose_level);
175 if (f_v) {
176 cout << "packing_classify::spread_table_init after T->init2" << endl;
177 }
178#endif
179
180
181
183
185
186 if (f_v) {
187 cout << "packing_classify::spread_table_init "
188 "before Spread_table_with_selection->init" << endl;
189 }
191 f_select_spread,
192 select_spread_text,
194 verbose_level);
195 if (f_v) {
196 cout << "packing_classify::spread_table_init "
197 "after Spread_table_with_selection->init" << endl;
198 }
199
200
201
202
203
204 if (f_v) {
205 cout << "packing_classify::spread_table_init before init" << endl;
206 }
207 init(
208 PA,
210 TRUE,
211 verbose_level);
212 if (f_v) {
213 cout << "packing_classify::spread_table_init after init" << endl;
214 }
215
216#if 0
217 cout << "before IA->init" << endl;
218 IA->init(T->A, P->A_on_spreads, P->gen,
219 P->size_of_packing, P->prefix_with_directory, ECA,
220 callback_packing_report,
221 NULL /*callback_subset_orbits*/,
222 P,
223 verbose_level);
224 cout << "after IA->init" << endl;
225#endif
226
227 if (f_v) {
228 cout << "packing_classify::spread_table_init before P->compute_spread_table" << endl;
229 }
231 if (f_v) {
232 cout << "packing_classify::spread_table_init after P->compute_spread_table" << endl;
233 }
234
235 if (f_v) {
236 cout << "packing_classify::spread_table_init done" << endl;
237 }
238
239
240}
241
242
245 spreads::spread_table_with_selection *Spread_table_with_selection,
246 int f_lexorder_test,
247 int verbose_level)
248{
249 int f_v = (verbose_level >= 1);
250
251 if (f_v) {
252 cout << "packing_classify::init" << endl;
253 }
254
255
258
259
264 size_of_packing = q * q + q + 1;
266
268
269
270 if (f_v) {
271 cout << "packing_classify::init q=" << q << endl;
272 cout << "packing_classify::init nb_lines=" << nb_lines << endl;
273 cout << "packing_classify::init spread_size=" << spread_size << endl;
274 cout << "packing_classify::init size_of_packing=" << size_of_packing << endl;
275 //cout << "packing_classify::init input_prefix=" << input_prefix << endl;
276 //cout << "packing_classify::init base_fname=" << base_fname << endl;
277 }
278
279 if (f_v) {
280 cout << "packing_classify::init before init_P3_and_P5_and_Gr" << endl;
281 }
282 init_P3_and_P5_and_Gr(verbose_level - 1);
283 if (f_v) {
284 cout << "packing_classify::init after init_P3_and_P5_and_Gr" << endl;
285 }
286
287
288 if (f_v) {
289 cout << "packing_classify::init done" << endl;
290 }
291}
292
295 int verbose_level)
296{
297 int f_v = (verbose_level >= 1);
298
299 if (f_v) {
300 cout << "packing_classify::init2" << endl;
301 }
302
303 if (f_v) {
304 cout << "packing_classify::init2 "
305 "before create_action_on_spreads" << endl;
306 }
308 if (f_v) {
309 cout << "packing_classify::init2 "
310 "after create_action_on_spreads" << endl;
311 }
312
313
314
315 if (f_v) {
316 cout << "packing_classify::init "
317 "before prepare_generator" << endl;
318 }
319 prepare_generator(Control, verbose_level - 1);
320 if (f_v) {
321 cout << "packing_classify::init "
322 "after prepare_generator" << endl;
323 }
324
325 if (f_v) {
326 cout << "packing_classify::init done" << endl;
327 }
328}
329
330
331
333{
334 int f_v = (verbose_level >= 1);
335
336 if (f_v) {
337 cout << "packing_classify::init_P3_and_P5_and_Gr" << endl;
338 }
340
342 TRUE /* f_init_incidence_structure */,
343 0 /* verbose_level - 2 */);
344
345 if (f_v) {
346 cout << "packing_classify::init_P3_and_P5_and_Gr P3->N_points=" << P3->N_points << endl;
347 cout << "packing_classify::init_P3_and_P5_and_Gr P3->N_lines=" << P3->N_lines << endl;
348 }
349
351
353 TRUE /* f_init_incidence_structure */,
354 0 /* verbose_level - 2 */);
355
356 if (f_v) {
357 cout << "packing_classify::init_P3_and_P5_and_Gr P5->N_points=" << P5->N_points << endl;
358 cout << "packing_classify::init_P3_and_P5_and_Gr P5->N_lines=" << P5->N_lines << endl;
359 }
360
366
368
369 Gr->init(6, 3, F, 0 /* verbose_level */);
370
371 if (f_v) {
372 cout << "packing_classify::init_P3_and_P5_and_Gr done" << endl;
373 }
374}
375
376
377
378
379
380
381
382
383
386 int verbose_level)
387{
388 int f_v = (verbose_level >= 1);
389
390
391 if (f_v) {
392 cout << "packing_classify::prepare_generator" << endl;
393 }
396 T->A->Strong_gens,
397 verbose_level);
398
399 if (f_v) {
400 cout << "packing_classify::prepare_generator before "
401 "Poset->add_testing_without_group" << endl;
402 }
404 packing_early_test_function,
405 this /* void *data */,
406 verbose_level);
407
408
409
410
411#if 0
412 Control->f_print_function = TRUE;
413 Control->print_function = print_set;
414 Control->print_function_data = this;
415#endif
416
417
418 if (f_v) {
419 cout << "packing_classify::prepare_generator "
420 "calling gen->initialize" << endl;
421 }
422
424
427 verbose_level - 1);
428
429 if (f_v) {
430 cout << "packing_classify::prepare_generator done" << endl;
431 }
432}
433
434
435void packing_classify::compute(int search_depth, int verbose_level)
436{
437 int f_v = (verbose_level >= 1);
438 int schreier_depth = search_depth;
439 int f_use_invariant_subset_if_available = TRUE;
440 int f_debug = FALSE;
441 int t0;
443
444 t0 = Os.os_ticks();
445
446 if (f_v) {
447 cout << "packing_classify::compute" << endl;
448 }
449
450 gen->main(t0,
451 schreier_depth,
452 f_use_invariant_subset_if_available,
453 f_debug,
454 verbose_level - 1);
455
456 int length;
457
458 if (f_v) {
459 cout << "packing_classify::compute done with generator_main" << endl;
460 }
461 length = gen->nb_orbits_at_level(search_depth);
462 if (f_v) {
463 cout << "packing_classify::compute We found "
464 << length << " orbits on "
465 << search_depth << "-sets" << endl;
466 }
467 if (f_v) {
468 cout << "packing_classify::compute done" << endl;
469 }
470
471}
472
474 exact_cover *E, int starter_case,
475 long int *candidates, int nb_candidates,
476 groups::strong_generators *Strong_gens,
477 solvers::diophant *&Dio, long int *&col_labels,
478 int &f_ruled_out,
479 int verbose_level)
480{
481 verbose_level = 1;
482 int f_v = (verbose_level >= 1);
483 int f_vv = (verbose_level >= 2);
484 //int f_v3 = (verbose_level >= 3);
485 long int *points_covered_by_starter;
486 int nb_points_covered_by_starter;
487 long int *free_points2;
488 int nb_free_points2;
489 long int *free_point_idx;
490 long int *live_blocks2;
491 int nb_live_blocks2;
492 int nb_needed, /*nb_rows,*/ nb_cols;
493
494
495 if (f_v) {
496 cout << "packing_classify::lifting_prepare_function "
497 "nb_candidates=" << nb_candidates << endl;
498 }
499
501
502
503 if (f_v) {
504 cout << "packing_classify::lifting_prepare_function "
505 "before compute_covered_points" << endl;
506 }
507
508 Spread_table_with_selection->compute_covered_points(points_covered_by_starter,
509 nb_points_covered_by_starter,
510 E->starter, E->starter_size,
511 verbose_level - 1);
512
513
514 if (f_v) {
515 cout << "packing_classify::lifting_prepare_function "
516 "before compute_free_points2" << endl;
517 }
518
520 free_points2, nb_free_points2, free_point_idx,
521 points_covered_by_starter, nb_points_covered_by_starter,
522 E->starter, E->starter_size,
523 verbose_level - 1);
524
525 if (f_v) {
526 cout << "packing_classify::lifting_prepare_function "
527 "before compute_live_blocks2" << endl;
528 }
529
531 E, starter_case, live_blocks2, nb_live_blocks2,
532 points_covered_by_starter, nb_points_covered_by_starter,
533 E->starter, E->starter_size,
534 verbose_level - 1);
535
536
537 if (f_v) {
538 cout << "packing_classify::lifting_prepare_function "
539 "after compute_live_blocks2" << endl;
540 }
541
542 //nb_rows = nb_free_points2;
543 nb_cols = nb_live_blocks2;
544 col_labels = NEW_lint(nb_cols);
545
546
547 Lint_vec_copy(live_blocks2, col_labels, nb_cols);
548
549
550 if (f_vv) {
551 cout << "packing_classify::lifting_prepare_function_new candidates: ";
552 Lint_vec_print(cout, col_labels, nb_cols);
553 cout << " (nb_candidates=" << nb_cols << ")" << endl;
554 }
555
556
557
558 if (E->f_lex) {
559 int nb_cols_before;
560
561 nb_cols_before = nb_cols;
562 E->lexorder_test(col_labels, nb_cols, Strong_gens->gens,
563 verbose_level - 2);
564 if (f_v) {
565 cout << "packing_classify::lifting_prepare_function_new after "
566 "lexorder test nb_candidates before: " << nb_cols_before
567 << " reduced to " << nb_cols << " (deleted "
568 << nb_cols_before - nb_cols << ")" << endl;
569 }
570 }
571
572 if (f_vv) {
573 cout << "packing_classify::lifting_prepare_function_new "
574 "after lexorder test" << endl;
575 cout << "packing::lifting_prepare_function_new "
576 "nb_cols=" << nb_cols << endl;
577 }
578
580 free_point_idx, nb_free_points2,
581 live_blocks2, nb_live_blocks2,
582 nb_needed,
583 verbose_level);
584
585 FREE_lint(points_covered_by_starter);
586 FREE_lint(free_points2);
587 FREE_lint(free_point_idx);
588 FREE_lint(live_blocks2);
589 if (f_v) {
590 cout << "packing_classify::lifting_prepare_function done" << endl;
591 }
592}
593
594
595
596
598 char *fname_latex, int verbose_level)
599{
600 int f_v = (verbose_level >= 1);
601 //int i, j, cnt;
602 //int v[4];
603 //file_io Fio;
604
605 if (f_v) {
606 cout << "packing_classify::report_fixed_objects" << endl;
607 }
608
609
610 {
611 ofstream fp(fname_latex);
612 char title[1000];
614
615 sprintf(title, "Fixed Objects");
616
617 L.head(fp,
618 FALSE /* f_book */, TRUE /* f_title */,
619 title, "" /* const char *author */,
620 FALSE /* f_toc */, FALSE /* f_landscape */, TRUE /* f_12pt */,
621 TRUE /* f_enlarged_page */, TRUE /* f_pagenumbers */,
622 NULL /* extra_praeamble */);
623 //latex_head_easy(fp);
624
625
627 P3,
628 Elt,
629 verbose_level);
630
631#if 0
632 fp << "\\section{Fixed Objects}" << endl;
633
634
635
636 fp << "The element" << endl;
637 fp << "$$" << endl;
638 T->A->element_print_latex(Elt, fp);
639 fp << "$$" << endl;
640 fp << "has the following fixed objects:" << endl;
641
642
643 fp << "\\subsection{Fixed Points}" << endl;
644
645 cnt = 0;
646 for (i = 0; i < P3->N_points; i++) {
647 j = T->A->element_image_of(i, Elt, 0 /* verbose_level */);
648 if (j == i) {
649 cnt++;
650 }
651 }
652
653 fp << "There are " << cnt << " fixed points, they are: \\\\" << endl;
654 for (i = 0; i < P3->N_points; i++) {
655 j = T->A->element_image_of(i, Elt, 0 /* verbose_level */);
656 F->PG_element_unrank_modified(v, 1, 4, i);
657 if (j == i) {
658 fp << i << " : ";
659 int_vec_print(fp, v, 4);
660 fp << "\\\\" << endl;
661 cnt++;
662 }
663 }
664
665 fp << "\\subsection{Fixed Lines}" << endl;
666
667 {
668 action *A2;
669
670 A2 = T->A->induced_action_on_grassmannian(2, 0 /* verbose_level*/);
671
672 cnt = 0;
673 for (i = 0; i < A2->degree; i++) {
674 j = A2->element_image_of(i, Elt, 0 /* verbose_level */);
675 if (j == i) {
676 cnt++;
677 }
678 }
679
680 fp << "There are " << cnt << " fixed lines, they are: \\\\" << endl;
681 cnt = 0;
682 for (i = 0; i < A2->degree; i++) {
683 j = A2->element_image_of(i, Elt, 0 /* verbose_level */);
684 if (j == i) {
685 fp << i << " : $\\left[";
686 A2->G.AG->G->print_single_generator_matrix_tex(fp, i);
687 fp << "\\right]$\\\\" << endl;
688 cnt++;
689 }
690 }
691
692 FREE_OBJECT(A2);
693 }
694
695 fp << "\\subsection{Fixed Planes}" << endl;
696
697 {
698 action *A2;
699
700 A2 = T->A->induced_action_on_grassmannian(3, 0 /* verbose_level*/);
701
702 cnt = 0;
703 for (i = 0; i < A2->degree; i++) {
704 j = A2->element_image_of(i, Elt, 0 /* verbose_level */);
705 if (j == i) {
706 cnt++;
707 }
708 }
709
710 fp << "There are " << cnt << " fixed planes, they are: \\\\" << endl;
711 cnt = 0;
712 for (i = 0; i < A2->degree; i++) {
713 j = A2->element_image_of(i, Elt, 0 /* verbose_level */);
714 if (j == i) {
715 fp << i << " : $\\left[";
716 A2->G.AG->G->print_single_generator_matrix_tex(fp, i);
717 fp << "\\right]$\\\\" << endl;
718 cnt++;
719 }
720 }
721
722 FREE_OBJECT(A2);
723 }
724#endif
725
726
727 L.foot(fp);
728 }
730
731 cout << "Written file " << fname_latex << " of size "
732 << Fio.file_size(fname_latex) << endl;
733
734
735 if (f_v) {
736 cout << "packing::report_fixed_objects done" << endl;
737 }
738}
739
740
742 groups::schreier *Orbits, int orbit_idx,
743 long int *orbit1, int verbose_level)
744{
745 int f_v = FALSE; // (verbose_level >= 1);
746 int len;
747
748 if (f_v) {
749 cout << "packing_classify::test_if_orbit_is_partial_packing "
750 "orbit_idx = " << orbit_idx << endl;
751 }
752 Orbits->get_orbit(orbit_idx, orbit1, len, 0 /* verbose_level*/);
754}
755
757 groups::schreier *Orbits, int a, int b,
758 long int *orbit1, long int *orbit2,
759 int verbose_level)
760// tests if every spread from orbit a
761// is line-disjoint from every spread from orbit b
762{
763 int f_v = FALSE; // (verbose_level >= 1);
764 int len1, len2;
765
766 if (f_v) {
767 cout << "packing_classify::test_if_pair_of_orbits_are_adjacent "
768 "a=" << a << " b=" << b << endl;
769 }
770 if (a == b) {
771 return FALSE;
772 }
773 Orbits->get_orbit(a, orbit1, len1, 0 /* verbose_level*/);
774 Orbits->get_orbit(b, orbit2, len2, 0 /* verbose_level*/);
775
777 orbit1, len1,
778 orbit2, len2,
779 verbose_level);
780}
781
782
783int packing_classify::find_spread(long int *set, int verbose_level)
784{
785 int f_v = (verbose_level >= 1);
786 int idx;
787
788 if (f_v) {
789 cout << "packing_classify::find_spread" << endl;
790 }
791 idx = Spread_table_with_selection->find_spread(set, verbose_level);
792 return idx;
793}
794
795
796
797// #############################################################################
798// global functions:
799// #############################################################################
800
801#if 0
802static void callback_packing_compute_klein_invariants(
803 isomorph *Iso, void *data, int verbose_level)
804{
806 int f_split = FALSE;
807 int split_r = 0;
808 int split_m = 1;
809
810 P->compute_klein_invariants(Iso, f_split, split_r, split_m,
811 verbose_level);
812}
813
814static void callback_packing_report(isomorph *Iso,
815 void *data, int verbose_level)
816{
817 packing_classify *P = (packing_classify *) data;
818
819 P->report(Iso, verbose_level);
820}
821
822
823static void packing_lifting_prepare_function_new(
824 exact_cover *EC, int starter_case,
825 long int *candidates, int nb_candidates,
826 groups::strong_generators *Strong_gens,
827 solvers::diophant *&Dio, long int *&col_labels,
828 int &f_ruled_out,
829 int verbose_level)
830{
831 int f_v = (verbose_level >= 1);
832 packing_classify *P = (packing_classify *) EC->user_data;
833
834 if (f_v) {
835 cout << "packing_lifting_prepare_function_new "
836 "nb_candidates=" << nb_candidates << endl;
837 }
838
839 P->lifting_prepare_function_new(
840 EC, starter_case,
841 candidates, nb_candidates, Strong_gens,
842 Dio, col_labels, f_ruled_out,
843 verbose_level);
844
845
846 if (f_v) {
847 cout << "packing_lifting_prepare_function_new "
848 "after lifting_prepare_function_new" << endl;
849 }
850
851 if (f_v) {
852 cout << "packing_lifting_prepare_function_new "
853 "nb_rows=" << Dio->m
854 << " nb_cols=" << Dio->n << endl;
855 }
856
857 if (f_v) {
858 cout << "packing_lifting_prepare_function_new done" << endl;
859 }
860}
861#endif
862
863
864
865static void packing_early_test_function(long int *S, int len,
866 long int *candidates, int nb_candidates,
867 long int *good_candidates, int &nb_good_candidates,
868 void *data, int verbose_level)
869{
870 packing_classify *P = (packing_classify *) data;
871 int f_v = (verbose_level >= 1);
872 long int i, a, b;
874
875 if (f_v) {
876 cout << "packing_early_test_function for set ";
877 Lint_vec_print(cout, S, len);
878 cout << endl;
879 }
880 a = S[len - 1];
881 nb_good_candidates = 0;
882 for (i = 0; i < nb_candidates; i++) {
883 b = candidates[i];
884
885 if (b == a) {
886 continue;
887 }
888#if 0
889 if (P->bitvector_adjacency) {
890 k = Combi.ij2k_lint(a, b, P->Spread_table_with_selection->Spread_tables->nb_spreads);
891 if (bitvector_s_i(P->bitvector_adjacency, k)) {
892 good_candidates[nb_good_candidates++] = b;
893 }
894 }
895 else {
896 if (P->Spread_table_with_selection->Spread_tables->test_if_spreads_are_disjoint(a, b)) {
897 good_candidates[nb_good_candidates++] = b;
898 }
899 }
900#else
901 if (P->Spread_table_with_selection->is_adjacent(a, b)) {
902 good_candidates[nb_good_candidates++] = b;
903 }
904#endif
905 }
906 if (f_v) {
907 cout << "packing_early_test_function done" << endl;
908 }
909}
910
911
912
913
914#if 0
915static int count(int *Inc, int n, int m, int *set, int t)
916{
917 int i, j;
918 int nb, h;
919
920 nb = 0;
921 for (j = 0; j < m; j++) {
922 for (h = 0; h < t; h++) {
923 i = set[h];
924 if (Inc[i * m + j] == 0) {
925 break;
926 }
927 }
928 if (h == t) {
929 nb++;
930 }
931 }
932 return nb;
933}
934
935static int count_and_record(int *Inc,
936 int n, int m, int *set, int t, int *occurances)
937{
938 int i, j;
939 int nb, h;
940
941 nb = 0;
942 for (j = 0; j < m; j++) {
943 for (h = 0; h < t; h++) {
944 i = set[h];
945 if (Inc[i * m + j] == 0) {
946 break;
947 }
948 }
949 if (h == t) {
950 occurances[nb++] = j;
951 }
952 }
953 return nb;
954}
955#endif
956
957
958}}}
959
void PG_element_unrank_modified(int *v, int stride, int len, int a)
to rank and unrank subspaces of a fixed dimension in F_q^n
Definition: geometry.h:892
void init(int n, int k, field_theory::finite_field *F, int verbose_level)
Definition: grassmann.cpp:70
projective space PG(n,q) of dimension n over Fq
Definition: geometry.h:1916
void projective_space_init(int n, field_theory::finite_field *F, int f_init_incidence_structure, int verbose_level)
int test_if_set_of_spreads_is_line_disjoint(long int *set, int len)
int test_if_pair_of_sets_are_adjacent(long int *set1, int sz1, long int *set2, int sz2, int verbose_level)
void make_exact_cover_problem(solvers::diophant *&Dio, long int *live_point_index, int nb_live_points, long int *live_blocks, int nb_live_blocks, int nb_needed, int verbose_level)
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)
diophantine systems of equations (i.e., linear systems over the integers)
Definition: solvers.h:209
void element_print_latex(void *elt, std::ostream &ost)
Definition: action_cb.cpp:364
groups::strong_generators * Strong_gens
Definition: actions.h:130
action * induced_action_on_grassmannian(int k, int verbose_level)
void report_fixed_objects_in_P3(std::ostream &ost, geometry::projective_space *P3, int *Elt, int verbose_level)
groups::matrix_group * get_matrix_group()
Definition: action.cpp:2986
long int element_image_of(long int a, void *elt, int verbose_level)
Definition: action_cb.cpp:198
a matrix group over a finite field in projective, vector space or affine action
Definition: groups.h:318
Schreier trees for orbits of groups on points.
Definition: groups.h:839
void get_orbit(int orbit_idx, long int *set, int &len, int verbose_level)
Definition: schreier.cpp:2598
a strong generating set for a permutation group with respect to a fixed action
Definition: groups.h:1703
data_structures_groups::vector_ge * gens
Definition: groups.h:1708
exact cover problems arising with the lifting of combinatorial objects
Definition: solver.h:27
void lexorder_test(long int *live_blocks2, int &nb_live_blocks2, data_structures_groups::vector_ge *stab_gens, int verbose_level)
classification of combinatorial objects using subobjects
Definition: isomorph.h:30
to control the behavior of the poset classification algorithm
void initialize_and_allocate_root_node(poset_classification_control *PC_control, poset_with_group_action *Poset, int depth, int verbose_level)
int main(int t0, int schreier_depth, int f_use_invariant_subset_if_available, int f_debug, int verbose_level)
void init_subset_lattice(actions::action *A, actions::action *A2, groups::strong_generators *Strong_gens, int verbose_level)
void add_testing_without_group(void(*func)(long int *S, int len, long int *candidates, int nb_candidates, long int *good_candidates, int &nb_good_candidates, void *data, int verbose_level), void *data, int verbose_level)
classification of packings in PG(3,q)
Definition: packings.h:66
void report_fixed_objects(int *Elt, char *fname_latex, int verbose_level)
poset_classification::poset_classification_control * Control
Definition: packings.h:100
void compute(int search_depth, int verbose_level)
void compute_klein_invariants(isomorph *Iso, int f_split, int split_r, int split_m, int verbose_level)
int test_if_pair_of_orbits_are_adjacent(groups::schreier *Orbits, int a, int b, long int *orbit1, long int *orbit2, int verbose_level)
poset_classification::poset_with_group_action * Poset
Definition: packings.h:101
void init2(poset_classification::poset_classification_control *Control, int verbose_level)
void spread_table_init(projective_geometry::projective_space_with_action *PA, int dimension_of_spread_elements, int f_select_spread, std::string &select_spread_text, std::string &path_to_spread_tables, int verbose_level)
projective_geometry::projective_space_with_action * PA
Definition: packings.h:69
void prepare_generator(poset_classification::poset_classification_control *Control, int verbose_level)
void init(projective_geometry::projective_space_with_action *PA, spreads::spread_table_with_selection *Spread_table_with_selection, int f_lexorder_test, int verbose_level)
spreads::spread_table_with_selection * Spread_table_with_selection
Definition: packings.h:85
poset_classification::poset_classification * gen
Definition: packings.h:102
void lifting_prepare_function_new(exact_cover *E, int starter_case, long int *candidates, int nb_candidates, groups::strong_generators *Strong_gens, solvers::diophant *&Dio, long int *&col_labels, int &f_ruled_out, int verbose_level)
int test_if_orbit_is_partial_packing(groups::schreier *Orbits, int orbit_idx, long int *orbit1, int verbose_level)
projective space PG(n,q) with automorphism group PGGL(n+1,q)
to classify spreads of PG(k-1,q) in PG(n-1,q) where k divides n
Definition: spreads.h:106
void init(projective_geometry::projective_space_with_action *PA, int k, int f_recoordinatize, int verbose_level)
void init2(poset_classification::poset_classification_control *Control, int verbose_level)
spreads tables with a selection of isomorphism types
Definition: spreads.h:480
void compute_live_blocks2(exact_cover *EC, int starter_case, long int *&live_blocks2, int &nb_live_blocks2, long int *points_covered_by_starter, int nb_points_covered_by_starter, long int *starter, int starter_size, int verbose_level)
void compute_covered_points(long int *&points_covered_by_starter, int &nb_points_covered_by_starter, long int *starter, int starter_size, int verbose_level)
void init(spread_classify *T, int f_select_spread, std::string &select_spread_text, std::string &path_to_spread_tables, int verbose_level)
void compute_free_points2(long int *&free_points2, int &nb_free_points2, long int *&free_point_idx, long int *points_covered_by_starter, int nb_points_covered_by_starter, long int *starter, int starter_size, int verbose_level)
#define Lint_vec_copy(A, B, C)
Definition: foundations.h:694
#define NEW_OBJECT(type)
Definition: foundations.h:638
#define Lint_vec_print(A, B, C)
Definition: foundations.h:686
#define FREE_OBJECT(p)
Definition: foundations.h:651
#define TRUE
Definition: foundations.h:231
#define FALSE
Definition: foundations.h:234
#define FREE_lint(p)
Definition: foundations.h:642
#define NEW_lint(n)
Definition: foundations.h:628
the orbiter library for the classification of combinatorial objects