16namespace layer5_applications {
17namespace apps_geometry {
20static void ovoid_classify_early_test_func_callback(
long int *S,
int len,
21 long int *candidates,
int nb_candidates,
22 long int *good_candidates,
int &nb_good_candidates,
23 void *data,
int verbose_level);
24static void callback_ovoid_print_set(std::ostream &ost,
int len,
long int *S,
void *data);
61 cout <<
"ovoid_classify::~ovoid_classify" << endl;
95 cout <<
"ovoid_classify::~ovoid_classify finished" << endl;
104 int f_v = (verbose_level >= 1);
105 int f_vv = (verbose_level >= 2);
133 f_semilinear =
FALSE;
148 int f_reflection =
TRUE;
149 int f_similarity =
TRUE;
150 int f_semisimilarity =
TRUE;
152 AG.set_orthogonal_group_type(f_siegel, f_reflection,
153 f_similarity, f_semisimilarity);
156 cout <<
"ovoid_classify::init "
158 cout <<
"ovoid_classify::init "
159 "f_siegel=" << f_siegel << endl;
160 cout <<
"ovoid_classify::init "
161 "f_reflection=" << f_reflection << endl;
162 cout <<
"ovoid_classify::init "
163 "f_similarity=" << f_similarity << endl;
164 cout <<
"ovoid_classify::init "
165 "f_semisimilarity=" << f_semisimilarity << endl;
172 f_semilinear, f_basis, verbose_level);
184 cout <<
"The finite field is:" << endl;
190 cout <<
"nb_lines=" <<
O->
nb_lines << endl;
191 cout <<
"alpha=" <<
O->
alpha << endl;
210 else if (epsilon == -1) {
213 else if (epsilon == 0) {
217 cout <<
"epsilon must be 0, 1, or -1" << endl;
227 cout <<
"depth = " << depth << endl;
237 ovoid_classify_early_test_func_callback,
257 cout <<
"fname_base = " <<
gen->fname_base << endl;
265 cout <<
"allocating Klein correspondence" << endl;
270 cout <<
"before K->init" << endl;
274 int pivots[2] = {2,3};
280 for (i = 0; i <
N; i++) {
293 if (B[2] != 1 || B[3] != 0 || B[6] != 0 || B[7] != 1) {
294 cout <<
"The shape of B is wrong" << endl;
304 cout <<
"nb_colors = " <<
nb_colors << endl;
305 cout <<
"color table:" << endl;
306 for (i = 0; i <
N; i++) {
307 cout << i <<
" / " <<
N <<
" : ";
322 cout <<
" : " << endl;
330 cout <<
"init finished" << endl;
337 long int *candidates,
int nb_candidates,
338 long int *good_candidates,
int &nb_good_candidates,
341 int f_v = (verbose_level >= 1);
342 int f_vv = (verbose_level >= 2);
348 cout <<
"ovoid_classify::early_test_func checking set ";
351 cout <<
"candidate set of size "
352 << nb_candidates <<
":" << endl;
356 for (i = 0; i < nb_candidates; i++) {
359 cout <<
"candidate " << i <<
"="
360 << candidates[i] <<
": ";
366 for (i = 0; i < len; i++) {
369 for (i = 0; i < nb_candidates; i++) {
376 nb_good_candidates = nb_candidates;
379 nb_good_candidates = 0;
382 cout <<
"ovoid_classify::early_test_func "
383 "before testing" << endl;
385 for (j = 0; j < nb_candidates; j++) {
389 cout <<
"ovoid_generator::early_test_func "
390 "testing " << j <<
" / "
391 << nb_candidates << endl;
402 good_candidates[nb_good_candidates++] = candidates[j];
412 for (i = 0; i < len; i++) {
413 for (i = 0; i < len; i++) {
423 int f_split,
int split_r,
int split_m,
425 const char *fname_mask,
429 int f_v = (verbose_level >= 1);
430 int f_v3 = (verbose_level >= 3);
437 cout <<
"ovoid_classify::make_graphs" << endl;
442 for (orbit_idx = 0; orbit_idx < ODF->
nb_cases; orbit_idx++) {
445 if ((orbit_idx % split_m) == split_r) {
449 cout << orbit_idx <<
" / " << ODF->
nb_cases <<
" : ";
452 cout <<
" : " << ODF->
Ago_ascii[orbit_idx]
453 <<
" : " << ODF->
Aut_ascii[orbit_idx] << endl;
455 sprintf(str, fname_mask, orbit_idx);
456 fname_graph.assign(str);
458 long int *candidates;
462 generator_read_candidates_of_orbit(
463 candidates_fname, orbit_idx ,
464 candidates, nb_candidates, 0 );
467 cout <<
"ovoid_classify::make_graphs before read_candidates_"
468 "for_one_orbit_from_file prefix=" << prefix << endl;
473 ODF->
sets[orbit_idx],
474 ovoid_classify_early_test_func_callback,
482 cout <<
"With " << nb_candidates <<
" live points: ";
488 if (strcmp(ODF->
Ago_ascii[orbit_idx],
"1") != 0) {
503 max_starter = ODF->
sets[orbit_idx]
507 cout <<
"max_starter=" << max_starter << endl;
512 if (f_lexorder_test) {
516 cout <<
"ovoid_classify::make_graphs "
517 "Case " << orbit_idx <<
" / "
519 <<
" Before lexorder_test" << endl;
523 SG->
gens, max_starter, 0 );
525 cout <<
"ovoid_classify::make_graphs "
526 "After lexorder_test nb_candidates="
527 << nb_candidates2 <<
" eliminated "
528 << nb_candidates - nb_candidates2
529 <<
" candidates" << endl;
531 nb_candidates = nb_candidates2;
545 candidates, nb_candidates,
549 CG->
save(fname_graph, 0);
561 cout <<
"ovoid_classify::make_graphs done" << endl;
572 int f_v = (verbose_level >= 1);
577 cout <<
"ovoid_classify::make_one_graph" << endl;
583 long int *candidates;
587 cout <<
"ovoid_classify::make_one_graph before read_candidates_"
588 "for_one_orbit_from_file prefix=" << prefix << endl;
590 level, orbit_idx, level - 1 ,
591 ODF->
sets[orbit_idx],
592 ovoid_classify_early_test_func_callback,
600 cout <<
"With " << nb_candidates <<
" live points." << endl;
603 int_vec_print(cout, candidates, nb_candidates);
609 if (strcmp(ODF->
Ago_ascii[orbit_idx],
"1") != 0) {
624 max_starter = ODF->
sets[orbit_idx][ODF->
set_sizes[orbit_idx] - 1];
627 cout <<
"max_starter=" << max_starter << endl;
632 if (f_lexorder_test) {
636 cout <<
"ovoid_classify::make_graphs Case " << orbit_idx
638 <<
" Before lexorder_test" << endl;
641 SG->
gens, max_starter, 0 );
643 cout <<
"ovoid_classify::make_graphs After "
644 "lexorder_test nb_candidates=" << nb_candidates2
645 <<
" eliminated " << nb_candidates - nb_candidates2
646 <<
" candidates" << endl;
648 nb_candidates = nb_candidates2;
661 candidates, nb_candidates,
677 cout <<
"ovoid_classify::make_one_graph done" << endl;
683 long int *candidates,
int nb_candidates,
687 int f_v = (verbose_level >= 1);
690 int nb_points = nb_candidates;
693 int *point_color = NULL;
699 cout <<
"ovoid_classify::create_graph for orbit_idx = "
700 << orbit_idx <<
" nb_points = " << nb_points << endl;
703 starter_size = ODF->
set_sizes[orbit_idx];
708 for (i = 0; i < nb_points; i++) {
712 L = ((
long int) nb_points * ((
long int) nb_points - 1)) >> 1;
718 for (i = 0; i < nb_points; i++) {
719 for (j = i + 1; j < nb_points; j++, k++) {
727 point_color =
NEW_int(nb_points);
728 for (i = 0; i < nb_points; i++) {
734 candidates, nb_points, point_color,
735 nb_colors_used, verbose_level);
738 for (i = 0; i < nb_points; i++) {
739 for (j = i + 1; j < nb_points; j++, k++) {
740 if (Bitvec->
s_i(k)) {
741 if (point_color[i] == point_color[j]) {
742 cout <<
"the coloring is not proper" << endl;
743 cout <<
"point " << i <<
" has color "
744 << point_color[i] << endl;
745 cout <<
"point " << j <<
" has color "
746 << point_color[j] << endl;
759 sprintf(str,
"graph_ovoid_%d_%d_%d",
760 LG->
F->
q, starter_size, orbit_idx);
762 string label, label_tex;
764 label_tex.assign(str);
768 CG->
init(nb_points, nb_colors_used, 1,
777 starter_size, verbose_level - 2);
786 cout <<
"ovoid_classify::create_graph done" << endl;
791 long int *starter,
int starter_size,
792 long int *candidates,
int nb_points,
793 int *point_color,
int &nb_colors_used,
796 int f_v (verbose_level >= 1);
801 cout <<
"ovoid_classify::compute_coloring" << endl;
803 if (starter_size < 1) {
804 cout <<
"starter_size < 1" << endl;
807 if (starter[0] != 0) {
808 cout <<
"starter[0] != 0" << endl;
819 for (i = 1; i < starter_size; i++) {
823 cout <<
"c == -1 for starter[i]" << endl;
831 nb_colors_used =
nb_colors - (starter_size - 1);
837 for (i = 0; i < nb_points; i++) {
841 cout <<
"c == -1" << endl;
845 if (pos < starter_size - 1) {
846 cout <<
"pos < starter_size - 1" << endl;
849 point_color[i] = pos - (starter_size - 1);
854 cout <<
"ovoid_classify::compute_coloring done" << endl;
859static void ovoid_classify_early_test_func_callback(
long int *S,
int len,
860 long int *candidates,
int nb_candidates,
861 long int *good_candidates,
int &nb_good_candidates,
862 void *data,
int verbose_level)
865 int f_v = (verbose_level >= 1);
868 cout <<
"ovoid_classify_early_test_func_callback for set ";
873 candidates, nb_candidates,
874 good_candidates, nb_good_candidates,
877 cout <<
"ovoid_classify_early_test_func_callback done" << endl;
881static void callback_ovoid_print_set(ostream &ost,
int len,
long int *S,
void *data)
883 ovoid_classify *Gen = (ovoid_classify *) data;
886 Gen->
print(ost, S, len);
compact storage of 0/1-data as bitvectors
void m_i(long int i, int a)
void allocate(long int length)
void complement(int *v, int n, int k)
a collection of functions related to sorted vectors
void int_vec_heapsort(int *v, int len)
linear_algebra::linear_algebra * Linear_algebra
various functions related to geometries
long int nb_AG_elements(int n, int q)
long int AG_element_rank(int q, int *v, int stride, int len)
void unrank_lint_here(int *Mtx, long int rk, int verbose_level)
the Klein correspondence between lines in PG(3,q) and points on the Klein quadric
void init(field_theory::finite_field *F, orthogonal_geometry::orthogonal *O, int verbose_level)
long int point_on_quadric_to_line(long int point_rk, int verbose_level)
a graph with a vertex coloring
void init_user_data(long int *data, int data_size, int verbose_level)
void save(std::string &fname, int verbose_level)
void init(int nb_points, int nb_colors, int nb_colors_per_vertex, int *colors, data_structures::bitvector *Bitvec, int f_ownership_of_bitvec, std::string &label, std::string &label_tex, int verbose_level)
int Gauss_int_with_given_pivots(int *A, int f_special, int f_complete, int *pivots, int nb_pivots, int m, int n, int verbose_level)
basic number theoretic functions
int i_power_j(int i, int j)
int is_prime_power(int q)
a collection of functions related to file io
void read_candidates_for_one_orbit_from_file(std::string &prefix, int level, int orbit_at_level, int level_of_candidates_file, long int *S, void(*early_test_func_callback)(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 *early_test_func_callback_data, long int *&candidates, int &nb_candidates, int verbose_level)
read output files from the poset classification
data_structures::int_vec * Int_vec
field_theory::finite_field * F
void unrank_point(int *v, int stride, long int rk, int verbose_level)
int evaluate_bilinear_form(int *u, int *v, int stride)
a class to represent arbitrary precision integers
groups::strong_generators * Strong_gens
void init_orthogonal_group(int epsilon, int n, field_theory::finite_field *F, int f_on_points, int f_on_lines, int f_on_points_and_lines, int f_semilinear, int f_basis, int verbose_level)
void lexorder_test(long int *set, int set_sz, int &set_sz_after_test, data_structures_groups::vector_ge *gens, int max_starter, int verbose_level)
creates a linear group from command line arguments using linear_group_description
field_theory::finite_field * F
a strong generating set for a permutation group with respect to a fixed action
void init(actions::action *A)
void decode_ascii_coding(char *ascii_coding, int verbose_level)
data_structures_groups::vector_ge * gens
void group_order(ring_theory::longinteger_object &go)
induced action on the orthogonal geometry
orthogonal_geometry::orthogonal * O
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)
a poset with a group action on it
void * print_function_data
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)
void(* print_function)(std::ostream &ost, int len, long int *S, void *data)
description of a problem of classification of ovoids in orthogonal spaces
classification of ovoids in orthogonal spaces
poset_classification::poset_classification * gen
void compute_coloring(long int *starter, int starter_size, long int *candidates, int nb_points, int *point_color, int &nb_colors_used, int verbose_level)
void print(std::ostream &ost, long int *S, int len)
poset_classification::poset_with_group_action * Poset
geometry::klein_correspondence * K
void create_graph(orbiter_kernel_system::orbiter_data_file *ODF, int orbit_idx, long int *candidates, int nb_candidates, graph_theory::colored_graph *&CG, int verbose_level)
groups::linear_group * LG
void early_test_func(long int *S, int len, long int *candidates, int nb_candidates, long int *good_candidates, int &nb_good_candidates, int verbose_level)
void init(ovoid_classify_description *Descr, groups::linear_group *LG, int &verbose_level)
void make_graphs(orbiter_kernel_system::orbiter_data_file *ODF, std::string &prefix, int f_split, int split_r, int split_m, int f_lexorder_test, const char *fname_mask, int verbose_level)
orthogonal_geometry::orthogonal * O
void make_one_graph(orbiter_kernel_system::orbiter_data_file *ODF, std::string &prefix, int orbit_idx, int f_lexorder_test, graph_theory::colored_graph *&CG, int verbose_level)
ovoid_classify_description * Descr
#define Lint_vec_copy(A, B, C)
#define Lint_vec_print(A, B, C)
#define Int_matrix_print(A, B, C)
#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_orthogonal * AO