16namespace layer5_applications {
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(
27 long int *candidates,
int nb_candidates,
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);
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);
124 int dimension_of_spread_elements,
125 int f_select_spread, std::string &select_spread_text,
126 std::string &path_to_spread_tables,
129 int f_v = (verbose_level >= 1);
132 cout <<
"packing_classify::spread_table_init "
133 "dimension_of_spread_elements=" << dimension_of_spread_elements << endl;
147 cout <<
"packing_classify::spread_table_init n=" << n
148 <<
" k=" << dimension_of_spread_elements
149 <<
" q=" <<
q << endl;
157 cout <<
"packing_classify::spread_table_init before T->init" << endl;
162 dimension_of_spread_elements,
167 cout <<
"packing_classify::spread_table_init after T->init" << endl;
172 cout <<
"packing_classify::spread_table_init before T->init2" << endl;
176 cout <<
"packing_classify::spread_table_init after T->init2" << endl;
187 cout <<
"packing_classify::spread_table_init "
188 "before Spread_table_with_selection->init" << endl;
196 cout <<
"packing_classify::spread_table_init "
197 "after Spread_table_with_selection->init" << endl;
205 cout <<
"packing_classify::spread_table_init before init" << endl;
213 cout <<
"packing_classify::spread_table_init after init" << endl;
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,
224 cout <<
"after IA->init" << endl;
228 cout <<
"packing_classify::spread_table_init before P->compute_spread_table" << endl;
232 cout <<
"packing_classify::spread_table_init after P->compute_spread_table" << endl;
236 cout <<
"packing_classify::spread_table_init done" << endl;
249 int f_v = (verbose_level >= 1);
252 cout <<
"packing_classify::init" << endl;
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;
280 cout <<
"packing_classify::init before init_P3_and_P5_and_Gr" << endl;
284 cout <<
"packing_classify::init after init_P3_and_P5_and_Gr" << endl;
289 cout <<
"packing_classify::init done" << endl;
297 int f_v = (verbose_level >= 1);
300 cout <<
"packing_classify::init2" << endl;
304 cout <<
"packing_classify::init2 "
305 "before create_action_on_spreads" << endl;
309 cout <<
"packing_classify::init2 "
310 "after create_action_on_spreads" << endl;
316 cout <<
"packing_classify::init "
317 "before prepare_generator" << endl;
321 cout <<
"packing_classify::init "
322 "after prepare_generator" << endl;
326 cout <<
"packing_classify::init done" << endl;
334 int f_v = (verbose_level >= 1);
337 cout <<
"packing_classify::init_P3_and_P5_and_Gr" << endl;
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;
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;
372 cout <<
"packing_classify::init_P3_and_P5_and_Gr done" << endl;
388 int f_v = (verbose_level >= 1);
392 cout <<
"packing_classify::prepare_generator" << endl;
400 cout <<
"packing_classify::prepare_generator before "
401 "Poset->add_testing_without_group" << endl;
404 packing_early_test_function,
413 Control->print_function = print_set;
414 Control->print_function_data =
this;
419 cout <<
"packing_classify::prepare_generator "
420 "calling gen->initialize" << endl;
430 cout <<
"packing_classify::prepare_generator done" << endl;
437 int f_v = (verbose_level >= 1);
438 int schreier_depth = search_depth;
439 int f_use_invariant_subset_if_available =
TRUE;
447 cout <<
"packing_classify::compute" << endl;
452 f_use_invariant_subset_if_available,
459 cout <<
"packing_classify::compute done with generator_main" << endl;
463 cout <<
"packing_classify::compute We found "
464 << length <<
" orbits on "
465 << search_depth <<
"-sets" << endl;
468 cout <<
"packing_classify::compute done" << endl;
475 long int *candidates,
int nb_candidates,
482 int f_v = (verbose_level >= 1);
483 int f_vv = (verbose_level >= 2);
485 long int *points_covered_by_starter;
486 int nb_points_covered_by_starter;
487 long int *free_points2;
489 long int *free_point_idx;
490 long int *live_blocks2;
496 cout <<
"packing_classify::lifting_prepare_function "
497 "nb_candidates=" << nb_candidates << endl;
504 cout <<
"packing_classify::lifting_prepare_function "
505 "before compute_covered_points" << endl;
509 nb_points_covered_by_starter,
515 cout <<
"packing_classify::lifting_prepare_function "
516 "before compute_free_points2" << endl;
520 free_points2, nb_free_points2, free_point_idx,
521 points_covered_by_starter, nb_points_covered_by_starter,
526 cout <<
"packing_classify::lifting_prepare_function "
527 "before compute_live_blocks2" << endl;
531 E, starter_case, live_blocks2, nb_live_blocks2,
532 points_covered_by_starter, nb_points_covered_by_starter,
538 cout <<
"packing_classify::lifting_prepare_function "
539 "after compute_live_blocks2" << endl;
543 nb_cols = nb_live_blocks2;
551 cout <<
"packing_classify::lifting_prepare_function_new candidates: ";
553 cout <<
" (nb_candidates=" << nb_cols <<
")" << endl;
561 nb_cols_before = nb_cols;
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;
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;
580 free_point_idx, nb_free_points2,
581 live_blocks2, nb_live_blocks2,
590 cout <<
"packing_classify::lifting_prepare_function done" << endl;
598 char *fname_latex,
int verbose_level)
600 int f_v = (verbose_level >= 1);
606 cout <<
"packing_classify::report_fixed_objects" << endl;
611 ofstream fp(fname_latex);
615 sprintf(title,
"Fixed Objects");
632 fp <<
"\\section{Fixed Objects}" << endl;
636 fp <<
"The element" << endl;
640 fp <<
"has the following fixed objects:" << endl;
643 fp <<
"\\subsection{Fixed Points}" << endl;
653 fp <<
"There are " << cnt <<
" fixed points, they are: \\\\" << endl;
659 int_vec_print(fp, v, 4);
660 fp <<
"\\\\" << endl;
665 fp <<
"\\subsection{Fixed Lines}" << endl;
673 for (i = 0; i < A2->degree; i++) {
680 fp <<
"There are " << cnt <<
" fixed lines, they are: \\\\" << endl;
682 for (i = 0; i < A2->degree; i++) {
683 j = A2->element_image_of(i, Elt, 0 );
685 fp << i <<
" : $\\left[";
686 A2->G.AG->G->print_single_generator_matrix_tex(fp, i);
687 fp <<
"\\right]$\\\\" << endl;
695 fp <<
"\\subsection{Fixed Planes}" << endl;
703 for (i = 0; i < A2->degree; i++) {
710 fp <<
"There are " << cnt <<
" fixed planes, they are: \\\\" << endl;
712 for (i = 0; i < A2->degree; i++) {
713 j = A2->element_image_of(i, Elt, 0 );
715 fp << i <<
" : $\\left[";
716 A2->G.AG->G->print_single_generator_matrix_tex(fp, i);
717 fp <<
"\\right]$\\\\" << endl;
731 cout <<
"Written file " << fname_latex <<
" of size "
736 cout <<
"packing::report_fixed_objects done" << endl;
743 long int *orbit1,
int verbose_level)
749 cout <<
"packing_classify::test_if_orbit_is_partial_packing "
750 "orbit_idx = " << orbit_idx << endl;
752 Orbits->
get_orbit(orbit_idx, orbit1, len, 0 );
758 long int *orbit1,
long int *orbit2,
767 cout <<
"packing_classify::test_if_pair_of_orbits_are_adjacent "
768 "a=" << a <<
" b=" << b << endl;
785 int f_v = (verbose_level >= 1);
789 cout <<
"packing_classify::find_spread" << endl;
802static void callback_packing_compute_klein_invariants(
803 isomorph *Iso,
void *data,
int verbose_level)
814static void callback_packing_report(
isomorph *Iso,
815 void *data,
int verbose_level)
817 packing_classify *P = (packing_classify *) data;
819 P->
report(Iso, verbose_level);
823static void packing_lifting_prepare_function_new(
825 long int *candidates,
int nb_candidates,
831 int f_v = (verbose_level >= 1);
832 packing_classify *P = (packing_classify *) EC->
user_data;
835 cout <<
"packing_lifting_prepare_function_new "
836 "nb_candidates=" << nb_candidates << endl;
839 P->lifting_prepare_function_new(
841 candidates, nb_candidates, Strong_gens,
842 Dio, col_labels, f_ruled_out,
847 cout <<
"packing_lifting_prepare_function_new "
848 "after lifting_prepare_function_new" << endl;
852 cout <<
"packing_lifting_prepare_function_new "
854 <<
" nb_cols=" << Dio->
n << endl;
858 cout <<
"packing_lifting_prepare_function_new done" << endl;
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)
870 packing_classify *P = (packing_classify *) data;
871 int f_v = (verbose_level >= 1);
876 cout <<
"packing_early_test_function for set ";
881 nb_good_candidates = 0;
882 for (i = 0; i < nb_candidates; i++) {
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;
896 if (P->Spread_table_with_selection->Spread_tables->test_if_spreads_are_disjoint(a, b)) {
897 good_candidates[nb_good_candidates++] = b;
901 if (P->Spread_table_with_selection->is_adjacent(a, b)) {
902 good_candidates[nb_good_candidates++] = b;
907 cout <<
"packing_early_test_function done" << endl;
915static int count(
int *Inc,
int n,
int m,
int *set,
int t)
921 for (j = 0; j < m; j++) {
922 for (h = 0; h < t; h++) {
924 if (Inc[i * m + j] == 0) {
935static int count_and_record(
int *Inc,
936 int n,
int m,
int *set,
int t,
int *occurances)
942 for (j = 0; j < m; j++) {
943 for (h = 0; h < t; h++) {
945 if (Inc[i * m + j] == 0) {
950 occurances[nb++] = j;
a collection of combinatorial functions
long int ij2k_lint(long int i, long int j, long int n)
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
void init(int n, int k, field_theory::finite_field *F, int verbose_level)
projective space PG(n,q) of dimension n over Fq
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)
a collection of functions related to file io
long int file_size(std::string &fname)
interface to create latex output files
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)
interface to system functions
diophantine systems of equations (i.e., linear systems over the integers)
void element_print_latex(void *elt, std::ostream &ost)
groups::strong_generators * Strong_gens
int matrix_group_dimension()
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()
long int element_image_of(long int a, void *elt, int verbose_level)
a matrix group over a finite field in projective, vector space or affine action
field_theory::finite_field * GFq
Schreier trees for orbits of groups on points.
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
data_structures_groups::vector_ge * gens
exact cover problems arising with the lifting of combinatorial objects
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
to control the behavior of the poset classification algorithm
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)
int nb_orbits_at_level(int level)
a poset with a group action on it
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)
field_theory::finite_field * F
void report_fixed_objects(int *Elt, char *fname_latex, int verbose_level)
long int * spread_iso_type
long int * list_of_lines_klein_image
void report(isomorph *Iso, int verbose_level)
poset_classification::poset_classification_control * Control
void compute(int search_depth, int verbose_level)
void init_P3_and_P5_and_Gr(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
geometry::projective_space * P3
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
void prepare_generator(poset_classification::poset_classification_control *Control, int verbose_level)
std::string path_to_spread_tables
geometry::projective_space * P5
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
poset_classification::poset_classification * gen
spreads::spread_classify * T
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 find_spread(long int *set, 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
groups::matrix_group * Mtx
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
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 compute_spread_table(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)
geometry::spread_tables * Spread_tables
actions::action * A_on_spreads
int find_spread(long int *set, int verbose_level)
void create_action_on_spreads(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)
#define Lint_vec_print(A, B, C)
the orbiter library for the classification of combinatorial objects