18namespace layer5_applications {
104 int nb_non_unique_cases,
105 int *Non_unique_cases,
long int *Non_unique_cases_go,
108 int f_v = (verbose_level >= 1);
112 cout <<
"computing non-unique cases with non-trivial group:" << endl;
117 for (i = 0; i < nb_non_unique_cases; i++) {
118 a = Non_unique_cases[i];
119 if (Non_unique_cases_go[i] > 1) {
126 <<
" cases with more than one solution and with a "
127 "non-trivial group" << endl;
128 cout <<
"They are:" << endl;
154 cout <<
"classification of Len amongst the need orbits cases:" << endl;
160 cout <<
"For a total of " << sum <<
" semifields" << endl;
168 int f_v = (verbose_level >= 1);
169 int f_vv = (verbose_level >= 2);
170 int f_vvv = (verbose_level >= 3);
174 cout <<
"semifield_substructure::compute_orbits" << endl;
177 cout <<
"computing all orbits:" << endl;
201 cout <<
"case " << o <<
" / "
204 <<
" semifields" << endl;
222 for (
f = 0;
f < len;
f++) {
227 long int *input_data;
233 cout <<
"case " << o <<
" / "
235 <<
" is original case " << a <<
" at "
236 << fst <<
" with " << len
237 <<
" semifields. Computing orbit of "
238 "semifield " <<
f <<
" / " << len << endl;
245 cout <<
"The stabilizer is:" << endl;
254 cout <<
"case " << o <<
" / "
256 <<
" is original case " << a <<
" at "
257 << fst <<
" with " << len
258 <<
" semifields. Orbit of semifield " <<
f <<
" / "
259 << len <<
" has length "
266 for (g = 0; g < len; g++) {
271 cout <<
"testing subspace " << g <<
" / " << len <<
":" << endl;
283 cout <<
"c != Orb->used_length" << endl;
284 cout <<
"Orb->used_length=" << Orb->
used_length << endl;
285 cout <<
"c=" << c << endl;
295 cout <<
"case " << o <<
" / "
297 <<
" with " << len <<
" semifields done, there are "
298 << cnt <<
" orbits in this case." << endl;
314 cout <<
"Number of orbits:" << endl;
316 cout << o <<
" : " <<
Nb_orb[o] << endl;
318 cout <<
"Total number of orbits = " <<
nb_orb_total << endl;
321 cout <<
"semifield_substructure::compute_orbits done" << endl;
329 int f_v = (verbose_level >= 1);
330 int f_vv = (verbose_level >= 2);
332 int o, idx, h, fst, g;
336 cout <<
"semifield_substructure::compute_flag_orbits" << endl;
339 cout <<
"Counting number of flag orbits:" << endl;
345 cout <<
"orbit " << o <<
" number of semifields = "
346 <<
Len[o] <<
" group order = "
351 else if (
Len[o] == 1) {
361 cout <<
"cannot find orbit " << o
362 <<
" in the list " << endl;
366 cout <<
"Found orbit " << o
367 <<
" at position " << idx << endl;
379 cout <<
"Computing Flag_orbits:" << endl;
409 else if (
Len[o] == 1) {
425 for (g = 0; g <
Len[o]; g++) {
445 cout <<
"cannot find orbit " << o <<
" in the list " << endl;
449 cout <<
"Found orbit " << o
450 <<
" at position " << idx << endl;
452 for (g = 0; g <
Nb_orb[idx]; g++) {
479 cout <<
"h != nb_flag_orbits" << endl;
483 cout <<
"Finished initializing flag orbits. "
487 cout <<
"semifield_substructure::compute_flag_orbits done" << endl;
494 int f_v = (verbose_level >= 1);
498 cout <<
"semifield_substructure::do_classify" << endl;
501 cout <<
"Computing classification:" << endl;
541 if (f_processed[
f]) {
545 progress = ((double) nb_processed * 100. ) /
550 cout <<
" : Defining new orbit "
552 <<
" from flag orbit " <<
f <<
" / "
566 cout <<
"po=" << po <<
" so=" << so << endl;
585 for (i = 0; i <
SC->
k; i++) {
589 cout <<
"Basis1=" << endl;
594 for (i = 0; i <
SC->
k; i++) {
598 cout <<
"flag orbit " <<
f <<
" / "
600 <<
" 1st col of third matrix is = ";
602 cout <<
" which is not the (k-1)-th unit vector, "
603 "so we skip" << endl;
609 cout <<
"flag orbit " <<
f <<
" / "
611 <<
", first vector is not the unit vector, "
612 "so we skip" << endl;
614 f_processed[
f] =
TRUE;
620 <<
", looping over the " <<
N <<
" subspaces" << endl;
629 <<
", looping over the " <<
N <<
" subspaces, "
630 "before loop_over_all_subspaces" << endl;
640 <<
", looping over the " <<
N <<
" subspaces, "
641 "after loop_over_all_subspaces" << endl;
660 Cl.
create(cl, __FILE__, __LINE__);
665 <<
", Ago = starter * number of cosets = " << ago
666 <<
" = " << go <<
" * " << Cl
667 <<
" created from flag orbit " <<
f <<
" / "
669 << progress <<
"%" << endl;
677 <<
", semifield isotopy class "
679 "computing stabilizer" << endl;
687 <<
", semifield isotopy class "
689 " computing stabilizer done, order = " << ago1 << endl;
696 Stab,
data1, NULL , verbose_level);
700 f_processed[
f] =
TRUE;
715 cout <<
"Computing classification done, we found "
717 <<
" semifields" << endl;
722 cout <<
"semifield_substructure::do_classify done" << endl;
727 int *f_processed,
int &nb_processed,
int verbose_level)
729 int f_v = (verbose_level >= 1);
730 int f_vv = (verbose_level >= 2);
731 int f_vvv = (verbose_level >= 3);
744 f_v = f_vv = f_vvv =
TRUE;
745 cout <<
"CASE 1, STARTS HERE" << endl;
750 cout <<
"loop_over_all_subspaces" << endl;
758 for (rk = 0; rk <
N; rk++) {
768 cout <<
"flag orbit " <<
f <<
" / "
770 << rk <<
" / " <<
N <<
":" << endl;
773 for (i = 0; i < k; i++) {
794 cout <<
"base change matrix B=" << endl;
797 cout <<
"Basis2 = B * Basis1 (before trace)=" << endl;
804 cout <<
"before trace_to_level_three" << endl;
816 cout <<
"flag orbit " <<
f <<
" / "
819 <<
" : trace_to_level_three return FALSE" << endl;
827 cout <<
"After trace, trace_po = "
829 cout <<
"Basis2 (after trace)=" << endl;
835 for (i = 0; i < k; i++) {
838 for (i = 0; i < k; i++) {
841 for (i = 0; i < k; i++) {
844 if (f_skip ==
FALSE) {
855 cout <<
"skipping this case " << trace_po
856 <<
" because pivot is not "
857 "in the last row." << endl;
871 cout <<
"Basis2 after RREF(2)=" << endl;
876 for (i = 0; i < k; i++) {
888 cout <<
"before find_semifield_in_table" << endl;
896 cout <<
"flag orbit " <<
f <<
" / "
898 << rk <<
" / " <<
N <<
":" << endl;
900 cout <<
"find_semifield_in_table returns FALSE" << endl;
902 cout <<
"trace_po=" << trace_po << endl;
907 cout <<
"Basis2 after RREF(2)=" << endl;
919 cout <<
"solution_idx=" << solution_idx << endl;
932 cout <<
"flag orbit " <<
f <<
" / "
934 << rk <<
" / " <<
N <<
" trace_po="
935 << trace_po <<
" go=" << go
936 <<
" solution_idx=" << solution_idx << endl;
942 cout <<
"This starter case has a trivial "
943 "group order" << endl;
946 f2 =
Fo_first[trace_po] + solution_idx;
948 T->
so = solution_idx;
954 cout <<
"We found an automorphism" << endl;
959 if (!f_processed[f2]) {
961 cout <<
"We are identifying with "
962 "flag orbit " << f2 <<
", which is "
963 "po=" << trace_po <<
" so="
964 << solution_idx << endl;
978 f_processed[f2] =
TRUE;
981 cout <<
"Flag orbit f2 = " << f2
982 <<
" has been fused with flag orbit "
988 cout <<
"Flag orbit f2 = " << f2
989 <<
" has already been processed, "
990 "nothing to do here" << endl;
996 if (
Len[trace_po] == 1) {
998 cout <<
"This starter case has only "
999 "one solution" << endl;
1011 cout <<
"We found an automorphism" << endl;
1016 if (!f_processed[f2]) {
1018 cout <<
"We are identifying with po="
1019 << trace_po <<
" so=" << 0
1020 <<
", which is flag orbit "
1034 f_processed[f2] =
TRUE;
1037 cout <<
"Flag orbit f2 = " << f2
1038 <<
" has been fused with "
1039 "flag orbit " <<
f << endl;
1044 cout <<
"Flag orbit f2 = " << f2
1045 <<
" has already been processed, "
1046 "nothing to do here" << endl;
1059 int non_unique_case_idx, orbit_idx, position;
1065 trace_po, non_unique_case_idx)) {
1066 cout <<
"cannot find in Non_unique_cases_with_"
1067 "non_trivial_group array" << endl;
1070 orbit_idx =
Orbit_idx[non_unique_case_idx][solution_idx];
1071 position =
Position[non_unique_case_idx][solution_idx];
1072 Orb =
All_Orbits[non_unique_case_idx][orbit_idx];
1073 f2 =
Fo_first[trace_po] + orbit_idx;
1085 cout <<
"orbit_idx = " << orbit_idx
1086 <<
" position = " << position
1087 <<
" f2 = " << f2 << endl;
1097 cout <<
"We found an automorphism" << endl;
1102 if (!f_processed[f2]) {
1104 cout <<
"We are identifying with po="
1105 << trace_po <<
" so=" << solution_idx
1106 <<
", which is flag orbit "
1120 f_processed[f2] =
TRUE;
1123 cout <<
"Flag orbit f2 = " << f2
1124 <<
" has been fused with flag "
1125 "orbit " <<
f << endl;
1130 cout <<
"Flag orbit f2 = " << f2
1131 <<
" has already been processed, "
1132 "nothing to do here" << endl;
1142 cout <<
"loop_over_all_subspaces done" << endl;
1148 int *Trace_po,
int verbose_level)
1152 int f_v = (verbose_level >= 1);
1153 int f_vv = (verbose_level >= 2);
1154 int f_vvv = (verbose_level >= 3);
1164 cout <<
"semifield_substructure::all_two_dimensional_subspaces" << endl;
1172 for (rk = 0; rk <
N2; rk++) {
1176 cout <<
"semifield_substructure::all_two_dimensional_subspaces "
1178 << rk <<
" / " <<
N2 <<
":" << endl;
1181 for (i = 0; i < k; i++) {
1202 cout <<
"base change matrix B=" << endl;
1205 cout <<
"Basis2 = B * Basis1 (before trace)=" << endl;
1212 cout <<
"before trace_to_level_two" << endl;
1223 Trace_po[rk] = trace_po;
1226 cout <<
"After trace, trace_po = "
1227 << trace_po << endl;
1234 cout <<
"semifield_substructure::all_two_dimensional_subspaces "
1241 int &rk,
int &trace_po,
int &fo,
int &po,
1245 int f_v = (verbose_level >= 1);
1246 int f_vv = (verbose_level >= 2);
1247 int f_vvv = (verbose_level >= 3);
1260 cout <<
"semifield_substructure::identify" << endl;
1268 for (rk = 0; rk <
N; rk++) {
1270 for (i = 0; i < k; i++) {
1291 cout <<
"semifield_substructure::identify "
1292 "base change matrix B=" << endl;
1295 cout <<
"semifield_substructure::identify "
1296 "Basis2 = B * Basis1 (before trace)=" << endl;
1303 cout <<
"semifield_substructure::identify "
1304 "before trace_to_level_three" << endl;
1316 cout <<
"semifield_substructure::identify "
1317 "trace_to_level_three return FALSE" << endl;
1324 cout <<
"semifield_substructure::identify "
1325 "After trace, trace_po = "
1326 << trace_po << endl;
1327 cout <<
"semifield_substructure::identify "
1328 "Basis2 (after trace)=" << endl;
1334 for (i = 0; i < k; i++) {
1335 v1[i] =
Basis2[0 * k2 + i * k + 0];
1337 for (i = 0; i < k; i++) {
1338 v2[i] =
Basis2[1 * k2 + i * k + 0];
1340 for (i = 0; i < k; i++) {
1341 v3[i] =
Basis2[2 * k2 + i * k + 0];
1343 if (f_skip ==
FALSE) {
1353 cout <<
"semifield_substructure::identify "
1354 "skipping this case " << trace_po
1355 <<
" because pivot is not "
1356 "in the last row." << endl;
1370 cout <<
"semifield_substructure::identify "
1371 "Basis2 after RREF(2)=" << endl;
1376 for (i = 0; i < k; i++) {
1380 cout <<
"semifield_substructure::identify data2=";
1386 cout <<
"semifield_substructure::identify "
1387 "before find_semifield_in_table" << endl;
1395 cout <<
"semifield_substructure::identify "
1396 "find_semifield_in_table returns FALSE" << endl;
1398 cout <<
"semifield_substructure::identify "
1399 "trace_po=" << trace_po << endl;
1400 cout <<
"semifield_substructure::identify data2=";
1404 cout <<
"semifield_substructure::identify "
1405 "Basis2 after RREF(2)=" << endl;
1419 cout <<
"This starter case has a trivial "
1420 "group order" << endl;
1423 f2 =
Fo_first[trace_po] + solution_idx;
1439 else if (
Len[trace_po] == 1) {
1463 int non_unique_case_idx, orbit_idx, position;
1469 trace_po, non_unique_case_idx)) {
1470 cout <<
"semifield_substructure::identify "
1471 "cannot find in Non_unique_cases_with_"
1472 "non_trivial_group array" << endl;
1475 orbit_idx =
Orbit_idx[non_unique_case_idx][solution_idx];
1476 position =
Position[non_unique_case_idx][solution_idx];
1477 Orb =
All_Orbits[non_unique_case_idx][orbit_idx];
1478 f2 =
Fo_first[trace_po] + orbit_idx;
1481 cout <<
"orbit_idx = " << orbit_idx
1482 <<
" position = " << position
1483 <<
" f2 = " << f2 << endl;
1512 cout <<
"semifield_substructure::identify done "
1513 "solution_idx=" << solution_idx
1514 <<
"trace_po=" << trace_po
1527 cout <<
"semifield_substructure::identify done" << endl;
1534 long int *given_data,
1538 int f_v = (verbose_level >= 1);
1544 cout <<
"find_semifield_in_table" << endl;
1550 cout <<
"searching for: ";
1554 fst =
FstLen[2 * po + 0];
1555 len =
FstLen[2 * po + 1];
1557 cout <<
"find_semifield_in_table po = " << po
1558 <<
" len = " << len << endl;
1564 cout <<
"find_semifield_in_table len == 0" << endl;
1570 cout <<
"find_semifield_in_table the first three entries "
1571 "of given_data do not match with what "
1572 "is in Data" << endl;
1578 given_data,
SC->
k)) {
1579 cout <<
"find_semifield_in_table len is 1 and the first six "
1580 "entries of given_data do not match with what "
1581 "is in Data" << endl;
1587 for (g = 0; g < len; g++) {
1589 given_data,
SC->
k) == 0) {
1595 cout <<
"find_semifield_in_table cannot find the "
1596 "semifield in the table" << endl;
1597 for (g = 0; g < len; g++) {
1598 cout << g <<
" : " << fst + g <<
" : ";
1613 cout <<
"find_semifield_in_table done, idx = " << idx << endl;
void mone(int *v, long int len)
a collection of functions related to sorted vectors
int int_vec_search(int *v, int len, int a, int &idx)
int lint_vec_compare(long int *p, long int *q, int len)
a statistical analysis of data consisting of single integers
void init(int *data, int data_length, int f_second, int verbose_level)
void print_naked(int f_backwards)
linear_algebra::linear_algebra * Linear_algebra
to rank and unrank subspaces of a fixed dimension in F_q^n
long int nb_of_subspaces(int verbose_level)
void init(int n, int k, field_theory::finite_field *F, int verbose_level)
void unrank_lint_here_and_extend_basis(int *Mtx, long int rk, int verbose_level)
void mult_matrix_matrix(int *A, int *B, int *C, int m, int n, int o, int verbose_level)
int is_unit_vector(int *v, int len, int k)
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)
data_structures::int_vec * Int_vec
interface to system functions
void time_check(std::ostream &ost, int t0)
domain to compute with objects of type longinteger
void mult(longinteger_object &a, longinteger_object &b, longinteger_object &c)
a class to represent arbitrary precision integers
void create(long int i, const char *file, int line)
void element_mult(void *a, void *b, void *ab, int verbose_level)
void element_invert(void *a, void *av, int verbose_level)
void element_move(void *a, void *b, int verbose_level)
void group_order(ring_theory::longinteger_object &go)
to hold a vector of group elements
void append(int *elt, int verbose_level)
void init(actions::action *A, int verbose_level)
field_theory::finite_field * GFq
a strong generating set for a permutation group with respect to a fixed action
strong_generators * create_copy()
long int group_order_as_lint()
void print_generators(std::ostream &ost)
void init_group_extension(strong_generators *subgroup, int *data, int index, int verbose_level)
void group_order(ring_theory::longinteger_object &go)
void init(actions::action *A, actions::action *A2, int max_orbits, int representation_sz, ring_theory::longinteger_object &go, int verbose_level)
void init(flag_orbits *Flag_orbits, int flag_orbit_index, int downstep_primary_orbit, int downstep_secondary_orbit, int downstep_orbit_len, int f_long_orbit, long int *pt_representation, groups::strong_generators *Strong_gens, int verbose_level)
int downstep_primary_orbit
groups::strong_generators * gens
int downstep_secondary_orbit
stores the set of flag orbits; related to the class classification_step
void init(actions::action *A, actions::action *A2, int nb_primary_orbits_lower, int pt_representation_sz, int nb_flag_orbits, int upper_bound_for_number_of_traces, void(*func_to_free_received_trace)(void *trace_result, void *data, int verbose_level), void(*func_latex_report_trace)(std::ostream &ost, void *trace_result, void *data, int verbose_level), void *free_received_trace_data, int verbose_level)
flag_orbit_node * Flag_orbit_node
int nb_primary_orbits_upper
void init(classification_step *C, int orbit_index, groups::strong_generators *gens, long int *Rep, void *extra_data, int verbose_level)
orbit of subspaces using a Schreier tree
groups::strong_generators * stabilizer_orbit_rep(ring_theory::longinteger_object &full_group_order, int verbose_level)
int position_of_original_subspace
int find_subspace_lint(long int *subspace_ranks, int &idx, int verbose_level)
void get_transporter(int idx, int *transporter, int verbose_level)
long int ** Subspaces_lint
std::string trace_record_prefix
int f_trace_record_prefix
invariant_relations::classification_step * Semifields
groups::matrix_group * Mtx
void basis_print(int *Mtx, int sz)
void compute_orbit_of_subspaces(long int *input_data, groups::strong_generators *stabilizer_gens, orbit_of_subspaces *&Orb, int verbose_level)
void matrix_unrank(long int rk, int *Mtx)
long int matrix_rank(int *Mtx)
void trace_to_level_two(int *input_basis, int basis_sz, int *transporter, int &trace_po, int verbose_level)
int trace_to_level_three(int *input_basis, int basis_sz, int *transporter, int &trace_po, int verbose_level)
groups::strong_generators * Stabilizer_gens
~semifield_substructure()
int find_semifield_in_table(int po, long int *given_data, int &idx, int verbose_level)
semifield_classify_with_substructure * SCWS
void compute_orbits(int verbose_level)
void all_two_dimensional_subspaces(int *Trace_po, int verbose_level)
void do_classify(int verbose_level)
void compute_flag_orbits(int verbose_level)
geometry::grassmann * Gr2
int identify(long int *data, int &rk, int &trace_po, int &fo, int &po, int *transporter, int verbose_level)
data_structures_groups::vector_ge * coset_reps
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
int * Non_unique_cases_with_non_trivial_group
orbit_of_subspaces *** All_Orbits
void loop_over_all_subspaces(int *f_processed, int &nb_processed, int verbose_level)
int nb_non_unique_cases_with_non_trivial_group
geometry::grassmann * Gr3
to record the result of isomorphism testing
#define Lint_vec_copy(A, B, C)
#define Int_matrix_print_bitwise(A, B, C)
#define Int_vec_zero(A, B)
#define Lint_vec_print(A, B, C)
#define Int_matrix_print(A, B, C)
#define NEW_OBJECTS(type, n)
#define Int_vec_print(A, B, C)
orbiter_kernel_system::orbiter_session * Orbiter
global Orbiter session
void save_trace_record(trace_record *T, int f_trace_record_prefix, std::string &trace_record_prefix, int iso, int f, int po, int so, int N)
the orbiter library for the classification of combinatorial objects