16namespace layer5_applications {
19static void semifield_print_function_callback(std::ostream &ost,
int orbit_idx,
75 int f_v = (verbose_level >= 1);
78 cout <<
"semifield_classify_with_substructure::init" << endl;
91 cout <<
"order = " <<
Descr->
order <<
" = " <<
p <<
"^" <<
e << endl;
96 cout <<
"dim_over_kernel does not divide e" << endl;
105 <<
" k=" <<
k <<
" q=" <<
q << endl;
114 <<
" k=" <<
k <<
" q=" <<
q << endl;
140 cout <<
"semifield_classify_with_substructure::init before Sub->SC->init" << endl;
147 cout <<
"semifield_classify_with_substructure::init after Sub->SC->init" << endl;
154 long int *data = NULL;
158 cout <<
"semifield_classify_with_substructure::init f_test_semifield" << endl;
160 cout <<
"input semifield:" << endl;
161 for (i = 0; i < data_len; i++) {
162 cout << i <<
" : " << data[i] << endl;
165 data, data_len, verbose_level)) {
166 cout <<
"the set satisfies the partial semifield condition" << endl;
169 cout <<
"the set does not satisfy the partial semifield condition" << endl;
178 cout <<
"semifield_classify_with_substructure::init before L2->init" << endl;
182 cout <<
"semifield_classify_with_substructure::init after L2->init" << endl;
188 cout <<
"semifield_classify_with_substructure::init before L2->compute_level_two" << endl;
192 cout <<
"semifield_classify_with_substructure::init after L2->compute_level_two" << endl;
201 cout <<
"semifield_classify_with_substructure::init before L3->init_level_three" << endl;
207 cout <<
"semifield_classify_with_substructure::init after L3->init_level_three" << endl;
213 cout <<
"semifield_classify_with_substructure::init done" << endl;
219 int f_v = (verbose_level >= 1);
223 cout <<
"semifield_classify_with_substructure::read_data" << endl;
243 if (
sizeof(
long int) < 8) {
244 cout <<
"sizeof(long int) < 8" << endl;
259 <<
" solutions arising from "
269 cout <<
"classification of Len:" << endl;
275 cout <<
"computing existing cases:" << endl;
296 <<
" cases which exist" << endl;
300 cout <<
"computing non-unique cases:" << endl;
314 <<
" cases which have more than one solution" << endl;
332 cout <<
"classification of Len amongst the non-unique cases:" << endl;
342 cout <<
"classification of group orders amongst "
343 "the non-unique cases:" << endl;
351 cout <<
"semifield_classify_with_substructure::read_data "
352 "before Sub->compute_cases" << endl;
358 cout <<
"semifield_classify_with_substructure::read_data "
359 "after Sub->compute_cases" << endl;
363 cout <<
"semifield_classify_with_substructure::read_data done" << endl;
369 sprintf(fname,
"semifields_%d_classification.bin",
Sub->
SC->
order);
374 sprintf(fname,
"semifields_%d_flag_orbits.bin",
Sub->
SC->
order);
379 int f_v = (verbose_level >= 1);
383 cout <<
"semifield_classify_with_substructure::classify_semifields" << endl;
394 ofstream fp(fname, ios::binary);
398 cout <<
"Written file " << fname <<
" of size " << Fio.
file_size(fname) << endl;
405 ofstream fp(fname, ios::binary);
409 cout <<
"Written file " << fname <<
" of size " << Fio.
file_size(fname) << endl;
413 cout <<
"semifield_classify_with_substructure::classify_semifields done" << endl;
419 int f_v = (verbose_level >= 1);
423 cout <<
"semifield_classify_with_substructure::load_classification" << endl;
437 ifstream fp(fname, ios::binary);
439 cout <<
"Reading file " << fname <<
" of size " << Fio.
file_size(fname) << endl;
444 cout <<
"semifield_classify_with_substructure::load_classification "
450 cout <<
"semifield_classify_with_substructure::load_classification done" << endl;
456 int f_v = (verbose_level >= 1);
460 cout <<
"semifield_classify_with_substructure::load_flag_orbits" << endl;
469 ifstream fp(fname, ios::binary);
471 cout <<
"Reading file " << fname <<
" of size " << Fio.
file_size(fname) << endl;
476 cout <<
"semifield_classify_with_substructure::load_flag_orbits "
477 "Sub->Flag_orbits->nb_flag_orbits = "
483 cout <<
"semifield_classify_with_substructure::load_flag_orbits done" << endl;
490 int f_v = (verbose_level >= 1);
494 cout <<
"semifield_classify_with_substructure::identify_semifield" << endl;
498 long int *data = NULL;
500 cout <<
"f_identify_semifield" << endl;
502 cout <<
"input semifield:" << endl;
503 for (i = 0; i < data_len; i++) {
504 cout << i <<
" : " << data[i] << endl;
508 int t, rk, trace_po, fo, po;
513 for (t = 0; t < 6; t++) {
515 long int data_out[6];
517 cout <<
"Knuth operation " << t <<
" / " << 6 <<
":" << endl;
524 for (i = 0; i <
k; i++) {
531 rk, trace_po, fo, po,
534 cout <<
"The given semifield has been identified "
535 "as semifield orbit " << po << endl;
536 cout <<
"rk=" << rk << endl;
537 cout <<
"trace_po=" << trace_po << endl;
538 cout <<
"fo=" << fo << endl;
539 cout <<
"po=" << po << endl;
540 cout <<
"isotopy:" << endl;
545 cout <<
"The given semifield cannot be identified" << endl;
550 cout <<
"semifield_classify_with_substructure::identify_semifield done" << endl;
557 int f_v = (verbose_level >= 1);
562 cout <<
"semifield_classify_with_substructure::identify_semifields_from_file" << endl;
568 cout <<
"f_identify_semifield_from_file" << endl;
576 cout <<
"n != Sub->SC->k" << endl;
579 int t, rk, trace_po, fo, po;
588 for (t = 0; t < 6; t++) {
590 long int data_out[6];
593 Data + i *
n, data_out,
599 rk, trace_po, fo, po,
603 <<
" : The given semifield has been identified "
604 "as semifield orbit " << po << endl;
605 cout <<
"rk=" << rk << endl;
606 cout <<
"trace_po=" << trace_po << endl;
607 cout <<
"fo=" << fo << endl;
608 cout <<
"po=" << po << endl;
609 cout <<
"isotopy:" << endl;
615 cout <<
"The given semifield cannot be identified" << endl;
626 fname.append(
"_identification.csv");
631 cout <<
"semifield_classify_with_substructure::identify_"
632 "semifields_from_file done" << endl;
639 int f_v = (verbose_level >= 1);
645 cout <<
"semifield_classify_with_substructure::latex_report" << endl;
650 sprintf(str,
"Isotopy classes of semifields of order %d",
Descr->
order);
655 sprintf(author,
"Orbiter");
656 sprintf(fname,
"Semifields_%d.tex",
Descr->
order);
659 cout <<
"writing latex file " << fname << endl;
693 fp <<
"\\section*{Summary}" << endl;
694 fp <<
"Classification by stabilizer order:\\\\" << endl;
700 cout <<
"semifield_classify_with_substructure::latex_report "
701 "before L2->print_representatives" << endl;
707 cout <<
"semifield_classify_with_substructure::latex_report "
708 "after L2->print_representatives" << endl;
712 cout <<
"semifield_classify_with_substructure::latex_report "
713 "before Semifields->print_latex" << endl;
720 semifield_print_function_callback,
725 cout <<
"semifield_classify_with_substructure::latex_report "
726 "after Semifields->print_latex" << endl;
730 fp <<
"\\clearpage" << endl;
731 fp <<
"\\section*{Identification of Rua types}" << endl;
732 fp <<
"The $i$-th row, $j$-th column of the table is the number $c$ "
733 "of the isotopy class in the list above which corresponds "
734 "to the $j$-th element in the Knuth orbit of the $i$-th "
735 "class in the R\\'ua labeling.\\\\" << endl;
749 cout <<
"semifield_classify_with_substructure::latex_report "
750 "substructures of dimension two" << endl;
760 fp <<
"\\clearpage" << endl;
761 fp <<
"\\section*{Substructures of dimension two}" << endl;
762 fp <<
"\\begin{enumerate}" << endl;
772 cout <<
"before Sub->all_two_dimensional_subspaces" << endl;
775 Po2, verbose_level - 3);
777 cout <<
"after Sub->all_two_dimensional_subspaces" << endl;
781 fp <<
"\\item" << endl;
790 fp <<
"\\\\" << endl;
792 fp <<
"\\end{enumerate}" << endl;
798 sprintf(str,
"Semifields_%d_2structure.tex",
Descr->
order);
807 cout <<
"Written file " << fname <<
" of size "
811 cout <<
"writing latex file " << fname <<
" done" << endl;
814 cout <<
"semifield_classify_with_substructure::latex_report" << endl;
821 int f_v = (verbose_level >= 1);
824 cout <<
"semifield_classify_with_substructure::generate_source_code" << endl;
829 fname_base.assign(str);
832 cout <<
"before Semifields->generate_source_code " << fname_base << endl;
838 cout <<
"after Semifields->generate_source_code " << fname_base << endl;
841 cout <<
"semifield_classify_with_substructure::generate_source_code done" << endl;
849 int f_v = (verbose_level >= 1);
852 cout <<
"semifield_classify_with_substructure::decomposition" << endl;
872 cout <<
"F1:" << endl;
875 if (F1[h1].f_fusion_node) {
884 if (h1 > 5576873 - 139) {
889 cout <<
"F2:" << endl;
906 cout <<
"searching for chains from i1=" << i1 <<
" to i3=" << i3 << endl;
909 if (F1[h1].downstep_primary_orbit != i1) {
912 if (F1[h1].f_fusion_node) {
947 cout <<
"i1=" << i1 <<
" h1=" << h1 <<
" i2=" << i2 <<
" pt=" << pt << endl;
948 if (F1[h1].f_fusion_node) {
952 cout <<
"f=" << f << endl;
953 cout <<
"fusion elt:" << endl;
971 cout << i2 <<
" - " << h2 <<
" - " << i3 << endl;
980 cout <<
"semifield_classify_with_substructure::decomposition done" << endl;
989static void semifield_print_function_callback(ostream &ost,
int orbit_idx,
1013 if (j < Step->representation_sz - 1) {
1014 ost <<
", " << endl;
1017 ost <<
"\\\\" << endl;
1024 ost <<
"\\\\" << endl;
1027 ost <<
"R\\'ua type: ";
1029 for (j = 0; j < 6; j++) {
1031 ost <<
"$" << i <<
"." << j <<
"$; ";
1035 ost <<
"\\\\" << endl;
a statistical analysis of data consisting of single integers
void init(int *data, int data_length, int f_second, int verbose_level)
void init_lint(long int *data, int data_length, int f_second, int verbose_level)
void print_naked_tex(std::ostream &ost, int f_backwards)
void print_array_tex(std::ostream &ost, int f_backwards)
void print_naked(int f_backwards)
basic number theoretic functions
int i_power_j(int i, int j)
void factor_prime_power(int q, int &p, int &e)
a collection of functions related to file io
void int_matrix_write_csv(std::string &fname, 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_matrix_read_csv(std::string &fname, long int *&M, int &m, int &n, int verbose_level)
interface to create latex output files
void print_integer_matrix_tex_block_by_block(std::ostream &ost, int *p, int m, int n, int block_width)
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 foot(std::ostream &ost)
a class to represent arbitrary precision integers
void element_print_quick(void *elt, std::ostream &ost)
void group_order(ring_theory::longinteger_object &go)
groups::matrix_group * get_matrix_group()
long int group_order_as_lint()
a single step classification of combinatorial objects
void generate_source_code(std::string &fname_base, int verbose_level)
long int * Rep_ith(int i)
void print_latex(std::ostream &ost, std::string &title, int f_print_stabilizer_gens, int f_has_print_function, void(*print_function)(std::ostream &ost, int i, classification_step *Step, void *print_function_data), void *print_function_data)
void write_file(std::ofstream &fp, int verbose_level)
void read_file(std::ifstream &fp, actions::action *A, actions::action *A2, ring_theory::longinteger_object &go, int verbose_level)
int downstep_primary_orbit
stores the set of flag orbits; related to the class classification_step
void read_file(std::ifstream &fp, actions::action *A, actions::action *A2, int verbose_level)
flag_orbit_node * Flag_orbit_node
void write_file(std::ofstream &fp, int verbose_level)
groups::strong_generators * gens
to control the behavior of the poset classification algorithm
projective space PG(n,q) with automorphism group PGGL(n+1,q)
description of a semifield classification problem
std::string test_semifield_data
std::string level_two_prefix
std::string level_three_prefix
std::string identify_semifields_from_file_fname
std::string identify_semifield_data
int f_identify_semifields_from_file
classification of semifields using substructure
semifield_classify_description * Descr
int * identify_semifields_from_file_Po
semifield_classify_with_substructure()
groups::matrix_group * Mtx
void generate_source_code(int verbose_level)
void load_classification(int verbose_level)
int * Non_unique_cases_fst
void create_fname_for_classification(char *fname)
int f_trace_record_prefix
void identify_semifield(int verbose_level)
void create_fname_for_flag_orbits(char *fname)
int * Non_unique_cases_len
invariant_relations::classification_step * Semifields
projective_geometry::projective_space_with_action * PA
long int * Non_unique_cases_go
void load_flag_orbits(int verbose_level)
void identify_semifields_from_file(int verbose_level)
semifield_substructure * Sub
poset_classification::poset_classification_control * Control
~semifield_classify_with_substructure()
int identify_semifields_from_file_m
void latex_report(int verbose_level)
void decomposition(int verbose_level)
void read_data(int verbose_level)
void classify_semifields(int verbose_level)
void init(semifield_classify_description *Descr, projective_geometry::projective_space_with_action *PA, poset_classification::poset_classification_control *Control, int verbose_level)
classification of semifields using poset classification
void basis_print(int *Mtx, int sz)
void knuth_operation(int t, long int *data_in, long int *data_out, int verbose_level)
void matrix_unrank(long int rk, int *Mtx)
std::string level_three_prefix
int test_partial_semifield_numerical_data(long int *data, int data_sz, int verbose_level)
void init(projective_geometry::projective_space_with_action *PA, int k, poset_classification::poset_classification_control *Control, std::string &level_two_prefix, std::string &level_three_prefix, int verbose_level)
auxiliary class for classifying semifields
int downstep_primary_orbit
The first and second steps in classifying semifields.
void read_level_info_file(int verbose_level)
void report(std::ofstream &ost, int verbose_level)
void compute_level_two(int nb_stages, int verbose_level)
void init(semifield_classify *SC, int verbose_level)
One step of lifting for classifying semifields.
void init_level_three(semifield_level_two *L2, int f_prefix, std::string &prefix, int verbose_level)
semifield_flag_orbit_node * Flag_orbits
groups::strong_generators * Stabilizer_gens
auxiliary class for classifying semifields using a three-dimensional substructure
semifield_classify_with_substructure * SCWS
void all_two_dimensional_subspaces(int *Trace_po, int verbose_level)
void do_classify(int verbose_level)
int identify(long int *data, int &rk, int &trace_po, int &fo, int &po, int *transporter, int verbose_level)
void compute_cases(int nb_non_unique_cases, int *Non_unique_cases, long int *Non_unique_cases_go, int verbose_level)
invariant_relations::flag_orbits * Flag_orbits
#define Lint_vec_copy(A, B, C)
#define Lint_vec_scan(A, B, C)
#define Lint_vec_print(A, B, C)
#define Int_vec_copy(A, B, C)
#define Int_vec_print(A, B, C)
the orbiter library for the classification of combinatorial objects