14namespace layer5_applications {
18static void semifield_classify_early_test_func(
long int *S,
int len,
19 long int *candidates,
int nb_candidates,
20 long int *good_candidates,
int &nb_good_candidates,
21 void *data,
int verbose_level);
22static long int semifield_classify_rank_point_func(
int *v,
void *data);
23static void semifield_classify_unrank_point_func(
int *v,
long int rk,
void *data);
24static long int canonial_form_rank_vector_callback(
int *v,
25 int n,
void *data,
int verbose_level);
26static void canonial_form_unrank_vector_callback(
long int rk,
27 int *v,
int n,
void *data,
int verbose_level);
28static void canonial_form_compute_image_of_vector_callback(
29 int *v,
int *w,
int *Elt,
void *data,
102 int verbose_level = 1;
103 int f_v = (verbose_level >= 1);
106 cout <<
"semifield_classify::freeself" << endl;
113 cout <<
"semifield_classify::freeself before A0_linear" << endl;
119 cout <<
"semifield_classify::freeself before T" << endl;
125 cout <<
"semifield_classify::freeself before Elt1" << endl;
131 cout <<
"semifield_classify::freeself before Symmetry_group" << endl;
137 cout <<
"semifield_classify::freeself before Poset" << endl;
143 cout <<
"semifield_classify::freeself before Gen" << endl;
149 cout <<
"semifield_classify::freeself before test_base_cols" << endl;
164 cout <<
"semifield_classify::freeself before Basis1" << endl;
173 cout <<
"semifield_classify::freeself before desired_pivots" << endl;
180 cout <<
"semifield_classify::freeself done" << endl;
188 std::string &level_two_prefix,
189 std::string &level_three_prefix,
192 int f_v = (verbose_level >= 1);
197 cout <<
"semifield_classify::init" << endl;
217 cout <<
"semifield_classify::init "
218 "order != i_power_j(q, k)" << endl;
222 if ((
int)
sizeof(
long int) * 8 - 1 <
k2) {
223 cout <<
"sizeof(long int) * 8 - 1 < k2, overflow will happen" << endl;
224 cout <<
"sizeof(long int)=" <<
sizeof(
long int) << endl;
225 cout <<
"k2=" <<
k2 << endl;
230 cout <<
"semifield_classify::init q=" <<
q << endl;
231 cout <<
"semifield_classify::init k=" <<
k << endl;
232 cout <<
"semifield_classify::init n=" <<
n << endl;
233 cout <<
"semifield_classify::init order=" <<
order << endl;
237 for (i = 1; i < argc; i++) {
238 if (strcmp(argv[i],
"-level2_prefix") == 0) {
239 f_level_two_prefix =
TRUE;
243 else if (strcmp(argv[i],
"-level3_prefix") == 0) {
244 f_level_three_prefix =
TRUE;
270 cout <<
"semifield_classify::init before T->init" << endl;
280 cout <<
"semifield_classify::init after T->init" << endl;
284 cout <<
"semifield_classify::init before T->init2" << endl;
290 cout <<
"semifield_classify::init after T->init2" << endl;
298 f_semilinear =
FALSE;
306 cout <<
"semifield_classify::init "
307 "before A0->init_projective_group" << endl;
320 cout <<
"semifield_classify::init "
321 "after init_projective_group, "
322 "checking group order of Sims of A0" << endl;
326 cout <<
"semifield_classify::init "
327 "after init_projective_group "
328 "group of order " << go <<
" has been created" << endl;
335 cout <<
"semifield_classify::init "
337 <<
" = order of PGGL(" <<
k <<
"," <<
q <<
")" << endl;
338 cout <<
"action A0 created: ";
350 cout <<
"semifield_classify::init "
351 "after init_projective_group, "
352 "checking group order of Sims of A0_linear" << endl;
356 cout <<
"semifield_classify::init "
357 "after init_projective_group "
358 "group of order " << go <<
" has been created" << endl;
363 cout <<
"semifield_classify::init order of PGL(" <<
k <<
","
364 <<
q <<
") is " << go2 << endl;
365 cout <<
"action A0_linear created: ";
384 cout <<
"semifield_classify::init "
385 "before A_on_S->init" << endl;
393 cout <<
"semifield_classify::init "
394 "after A_on_S->init" << endl;
403 cout <<
"semifield_classify::init "
404 "before induced_action_on_spread_set" << endl;
412 cout <<
"semifield_classify::init "
413 "after induced_action_on_spread_set "
414 "the degree of the induced action "
420 cout <<
"semifield_classify::init "
421 "before list_points" << endl;
425 cout <<
"semifield_classify::init "
426 "after list_points" << endl;
432 cout <<
"semifield_classify::init "
433 "before Strong_gens->generators_for_"
434 "the_stabilizer_of_two_components" << endl;
443 cout <<
"semifield_classify::init "
444 "after Strong_gens->generators_for_"
445 "the_stabilizer_of_two_components" << endl;
450 cout <<
"semifield_classify::init "
451 "before Strong_gens->create_sims" << endl;
455 cout <<
"semifield_classify::init "
456 "after Strong_gens->create_sims" << endl;
463 cout <<
"semifield_classify::init "
464 "before init_desired_pivots" << endl;
468 cout <<
"semifield_classify::init "
469 "after init_desired_pivots" << endl;
474 cout <<
"semifield_classify::init done" << endl;
484 int f_v = (verbose_level >= 1);
490 cout <<
"semifield_classify::report level = " << level << endl;
493 ost <<
"Semifields of order " <<
order <<
"\\\\" << endl;
498 ost <<
"\\bigskip" << endl;
501 ost <<
"\\section*{The Group}" << endl;
509 ost <<
"\\bigskip" << endl;
515 ost <<
"\\bigskip" << endl;
518 ost <<
"Stabilizer of two components:\\\\" << endl;
523 ost <<
"\\bigskip" << endl;
526 ost <<
"\\section*{Summary of orbits}" << endl;
530 ost <<
"\\begin{array}{|r|r|l|}" << endl;
531 ost <<
"\\hline" << endl;
532 ost <<
"\\mbox{Level} & \\mbox{Orbits} & \\mbox{Ago}\\\\" << endl;
533 ost <<
"\\hline" << endl;
534 ost <<
"\\hline" << endl;
540 ost <<
"1 & 1 & " << go <<
"\\\\" << endl;
542 ost <<
"\\hline" << endl;
564 ost <<
"\\\\" << endl;
565 ost <<
"\\hline" << endl;
566 ost << 2 <<
" & " << L2->
nb_orbits <<
" & ";
573 ost <<
"\\\\" << endl;
574 ost <<
"\\hline" << endl;
606 cout <<
"f != L3->nb_flag_orbits" << endl;
618 ost <<
"\\\\" << endl;
619 ost <<
"\\hline" << endl;
620 ost << 3 <<
" & " << L3->
nb_orbits <<
" & ";
638 ost <<
"\\\\" << endl;
639 ost <<
"\\hline" << endl;
644 ost <<
"\\end{array}" << endl;
650 cout <<
"semifield_classify::report done" << endl;
659 int f_v = (verbose_level >= 1);
663 cout <<
"semifield_classify::init_poset_classification" << endl;
673 semifield_classify_rank_point_func,
674 semifield_classify_unrank_point_func,
689 cout <<
"semifield_classify::init before "
690 "Poset->add_testing_without_group" << endl;
693 semifield_classify_early_test_func,
710 cout <<
"semifield_classify::init before Gen->init" << endl;
716 cout <<
"semifield_classify::init after Gen->init" << endl;
724 cout <<
"semifield_classify::init_poset_classification done" << endl;
731 int f_v = (verbose_level >= 1);
737 cout <<
"semifield_classify::compute_orbits "
738 "calling generator_main" << endl;
754 cout <<
"semifield_classify::compute_orbits "
755 "done with generator_main" << endl;
759 cout <<
"semifield_classify::compute_orbits "
760 "we found " << nb_orbits
761 <<
" orbits at depth " << depth << endl;
767 sprintf(str,
"semifield_list_order%d.csv",
order);
778 for (i = 0; i < nb_orbits; i++) {
780 for (j = 0; j <
k; j++) {
792 cout <<
"Written file " << fname <<
" of size "
804 cout <<
"semifield_classify::list_points" << endl;
808 cout <<
"semifield_classify::list_points go=" << goi << endl;
810 for (rk = 0; rk < goi; rk++) {
812 cout << rk <<
" / " << goi <<
":" << endl;
818 cout <<
"too many points to list" << endl;
825 int f_v = (verbose_level >= 1);
826 int f_vv = (verbose_level >= 2);
830 cout <<
"semifield_classify::rank_point" << endl;
835 cout <<
"semifield_classify::rank_point "
836 "The rank of" << endl;
841 cout <<
"is " << rk << endl;
844 cout <<
"semifield_classify::rank_point done" << endl;
851 int f_v = (verbose_level >= 1);
852 int f_vv = (verbose_level >= 2);
855 cout <<
"semifield_classify::unrank_point" << endl;
858 cout <<
"semifield_classify::unrank_point "
859 "rk >= AS->degree" << endl;
860 cout <<
"rk=" << rk << endl;
861 cout <<
"degree=" <<
AS->
degree << endl;
867 cout <<
"semifield_classify::unrank_point "
869 "rank " << rk <<
" is " << endl;
873 cout <<
"semifield_classify::unrank_point done" << endl;
878 long int *candidates,
int nb_candidates,
879 long int *good_candidates,
int &nb_good_candidates,
882 int f_v = (verbose_level >= 1);
883 int f_vv = (verbose_level >= 2);
891 cout <<
"semifield_classify::early_test_func" << endl;
892 cout <<
"testing " << nb_candidates <<
" candidates" << endl;
895 nb_good_candidates = 0;
896 for (i = 0; i < nb_candidates; i++) {
897 good_candidates[nb_good_candidates++] = candidates[i];
909 for (i = 0; i < len; i++) {
913 cout <<
"semifield_classify::early_test_func current set:" << endl;
914 for (i = 0; i < len; i++) {
915 cout <<
"matrix " << i <<
" / " << len <<
":" << endl;
920 cout <<
"semifield_classify::early_test_func testing candidates:" << endl;
922 nb_good_candidates = 0;
923 for (i = 0; i < nb_candidates; i++) {
924 if ((i % 5000) == 0) {
925 cout << i <<
" / " << nb_candidates
926 <<
" nb_good_candidates = "
927 << nb_good_candidates << endl;
930 for (j = 0; j < N; j++) {
944 cout <<
"The candidate " << i <<
" / " << nb_candidates
945 <<
" which is " << candidates[i]
946 <<
" survives" << endl;
948 good_candidates[nb_good_candidates++] = candidates[i];
952 cout <<
"The candidate " << i <<
" / " << nb_candidates
953 <<
" which is " << candidates[i]
954 <<
" is eliminated" << endl;
959 cout <<
"The " << nb_good_candidates
960 <<
" accepted candidates are:" << endl;
961 for (i = 0; i < nb_good_candidates; i++) {
963 cout << i <<
" / " << nb_good_candidates <<
" is "
964 << good_candidates[i] <<
":" << endl;
972 cout <<
"semifield_classify::early_test_func done" << endl;
973 cout <<
"Out of " << nb_candidates <<
" candidates, "
974 << nb_good_candidates <<
" survive" << endl;
979 int **Mtx_stack,
int stack_size,
int *M,
982 int f_v = (verbose_level >= 1);
987 int N, h, i, j, a, b, c, r;
992 cout <<
"semifield_classify::test_candidate" << endl;
994 if (stack_size >
k) {
995 cout <<
"semifield_classify::test_candidate "
996 "stack_size > k" << endl;
1006 for (h = 0; h < N; h++) {
1008 for (i = 0; i <
k2; i++) {
1010 for (j = 0; j < stack_size; j++) {
1027 cout <<
"semifield_classify::test_candidate done" << endl;
1033 long int *data,
int data_sz,
int verbose_level)
1035 int f_v = (verbose_level >= 1);
1036 int f_vv = (verbose_level >= 2);
1041 cout <<
"semifield_classify::test_partial_semifield_numerical_data" << endl;
1044 cout <<
"semifield_classify::test_partial_semifield_numerical_data data_sz > k" << endl;
1049 for (i = 0; i < data_sz; i++) {
1053 for (i = 0; i < data_sz; i++) {
1054 cout <<
"Basis element " << i <<
" is "
1055 << data[i] <<
":" << endl;
1062 Basis, data_sz, verbose_level - 1);
1067 cout <<
"semifield_classify::test_partial_semifield_numerical_data done" << endl;
1074 int *Basis,
int sz,
int verbose_level)
1076 int f_v = (verbose_level >= 1);
1078 int N, h, i, j, a, b, c, r;
1086 cout <<
"semifield_classify::test_partial_semifield" << endl;
1097 for (h = 1; h < N; h++) {
1099 for (i = 0; i <
k2; i++) {
1101 for (j = 0; j < sz; j++) {
1112 cout <<
"semifield_classify::test_partial_semifield "
1113 "fail for vector h=" << h <<
" / " << N <<
" : ";
1114 cout <<
"r=" << r << endl;
1119 cout <<
"linear combination:" << endl;
1120 for (i = 0; i <
k2; i++) {
1122 for (j = 0; j < sz; j++) {
1138 cout <<
"semifield_classify::test_partial_semifield done" << endl;
1154 cout <<
"semifield_classify::test_rank_unrank "
1165 for (j =
k - 1; j >= 0; j--) {
1166 for (i =
k - 1; i >= 0; i--) {
1185 for (j = 0; j <
k; j++) {
1186 for (i = 0; i <
k; i++) {
1188 rk +=
Mtx[i *
k + j];
1200 for (j = 1; j <
k; j++) {
1201 for (i = 0; i <
k; i++) {
1203 rk +=
Mtx[i *
k + j];
1214 cout <<
"Basis of size " << sz <<
":" << endl;
1216 for (i = 0; i < sz; i++) {
1217 cout <<
"Elt " << i <<
":" << endl;
1230 cout <<
"Basis of size " << sz <<
":" << endl;
1231 for (i = 0; i < sz; i++) {
1232 cout <<
"Elt " << i <<
":" << endl;
1255 long int *Rk,
int nb)
1261 for (i = 0; i < nb; i++) {
1262 cout <<
"Matrix " << i <<
" / " << nb <<
" has rank "
1263 << Rk[i] <<
":" << endl;
1271 int *basis_in,
int *basis_out,
1272 int first,
int last_plus_one,
int verbose_level)
1274 int f_v = (verbose_level >= 1);
1278 cout <<
"semifield_classify::apply_element" << endl;
1280 for (i = first; i < last_plus_one; i++) {
1287 cout <<
"semifield_classify::apply_element done" << endl;
1292 int *basis_in,
int *basis_out,
1293 int first,
int last_plus_one,
int verbose_level)
1295 int f_v = (verbose_level >= 1);
1298 cout <<
"semifield_classify::apply_element_and_copy_back" << endl;
1301 basis_in, basis_out,
1302 first, last_plus_one, verbose_level);
1304 basis_in + first *
k2,
1305 (last_plus_one - first) *
k2);
1307 cout <<
"semifield_classify::apply_element_and_copy_back done" << endl;
1317 for (i = 0; i <
k; i++) {
1318 v[i] = Basis[2 *
k2 + i *
k + 0];
1327 long int *Input_set,
int input_set_sz,
1328 int window_bottom,
int window_size,
1329 long int **&Set,
int *&Set_sz,
int &Nb_sets,
1332 int f_v = (verbose_level >= 1);
1333 int f_vv = (verbose_level >= 2);
1344 cout <<
"semifield_classify::candidates_classify_by_first_column "
1345 "input_set_sz = " << input_set_sz << endl;
1348 window =
NEW_int(window_size);
1354 for (h = 0; h < input_set_sz; h++) {
1355 if ((h % (256 * 1024)) == 0) {
1356 cout <<
"semifield_classify::candidates_classify_by_first_column " << h <<
" / "
1357 << input_set_sz << endl;
1361 for (u = 0; u < window_size; u++) {
1362 t =
Mtx[(window_bottom - u) *
k + 0];
1369 cout <<
"semifield_classify::candidates_classify_by_first_column" << endl;
1370 cout <<
"a : #" << endl;
1371 for (u = 0; u < Nb_sets; u++) {
1372 cout << u <<
" : " << Set_sz[u] << endl;
1377 cout <<
"semifield_classify::candidates_classify_by_first_column "
1378 "computing efficient "
1379 "representations input_set_sz = " << input_set_sz << endl;
1382 for (u = 0; u < Nb_sets; u++) {
1385 for (h = 0; h < input_set_sz; h++) {
1386 if ((h % (256 * 1024)) == 0) {
1387 cout <<
"semifield_classify::candidates_classify_by_first_column "
1388 << h <<
" / " << input_set_sz << endl;
1392 for (u = 0; u < window_size; u++) {
1393 t =
Mtx[(window_bottom - u) *
k + 0];
1400 for (i = 0; i <
k; i++) {
1406 Set[w][Tmp_sz[w]++] = a;
1408 for (u = 0; u < Nb_sets; u++) {
1409 if (Tmp_sz[u] != Set_sz[u]) {
1410 cout <<
"semifield_classify::candidates_classify_by_first_column "
1411 "Tmp_sz[u] != Set_sz[u]" << endl;
1421 cout <<
"semifield_classify::candidates_classify_by_first_column "
1427 std::string &fname,
int orbit)
1431 sprintf(str,
"L2_orbit%d_cand_int8.bin", orbit);
1438 std::string &fname,
int orbit)
1442 sprintf(str,
"L2_orbit%d_cand.txt", orbit);
1449 std::string &fname,
int orbit)
1453 sprintf(str,
"L3_orbit%d_cand_int8", orbit);
1460 std::string &fname,
int orbit,
int h)
1464 sprintf(str,
"L2_orbit%d_type%d_cand_int8.bin", orbit, h);
1471 long int *input_data,
1477 int f_v = (verbose_level >= 1);
1480 cout <<
"semifield_classify::compute_orbit_of_subspaces" << endl;
1490 canonial_form_rank_vector_callback,
1491 canonial_form_unrank_vector_callback,
1492 canonial_form_compute_image_of_vector_callback,
1494 stabilizer_gens->
gens,
1499 cout <<
"semifield_classify::compute_orbit_of_subspaces done" << endl;
1507 int f_v = (verbose_level >= 1);
1508 int f_vv = (verbose_level >= 2);
1512 cout <<
"semifield_classify::init_desired_pivots" << endl;
1516 for (i = 0; i <
k; i++) {
1525 cout <<
"semifield_classify::init_desired_pivots "
1531 cout <<
"semifield_classify::init_desired_pivots done" << endl;
1536 long int *data_in,
long int *data_out,
1539 int f_v = (verbose_level >= 1);
1541 static int perm[] = {
1552 cout <<
"semifield_classify::knuth_operation" << endl;
1554 for (i = 0; i <
k; i++) {
1557 for (I[0] = 0; I[0] <
k; I[0]++) {
1558 for (I[1] = 0; I[1] <
k; I[1]++) {
1559 for (I[2] = 0; I[2] <
k; I[2]++) {
1560 J[0] = I[perm[t * 3 + 0]];
1561 J[1] = I[perm[t * 3 + 1]];
1562 J[2] = I[perm[t * 3 + 2]];
1563 a =
Basis1[J[0] *
k2 + J[1] *
k + J[2]];
1564 Basis2[I[0] *
k2 + I[1] *
k + I[2]] = a;
1568 for (i = 0; i <
k; i++) {
1572 cout <<
"semifield_classify::knuth_operation done" << endl;
1581static void semifield_classify_early_test_func(
long int *S,
int len,
1582 long int *candidates,
int nb_candidates,
1583 long int *good_candidates,
int &nb_good_candidates,
1584 void *data,
int verbose_level)
1587 int f_v = (verbose_level >= 1);
1592 cout <<
"semifield_classify_early_test_func" << endl;
1593 cout <<
"testing " << nb_candidates <<
" candidates" << endl;
1597 candidates, nb_candidates,
1598 good_candidates, nb_good_candidates,
1602 cout <<
"semifield_classify_early_test_func" << endl;
1603 cout <<
"Out of " << nb_candidates <<
" candidates, "
1604 << nb_good_candidates <<
" survive" << endl;
1610static long int semifield_classify_rank_point_func(
int *v,
void *data)
1612 int verbose_level = 0;
1613 int f_v = (verbose_level >= 1);
1614 semifield_classify *Semi;
1618 cout <<
"semifield_classify_rank_point_func" << endl;
1620 Semi = (semifield_classify *) data;
1623 cout <<
"semifield_classify_rank_point_func done" << endl;
1628static void semifield_classify_unrank_point_func(
int *v,
long int rk,
void *data)
1630 int verbose_level = 0;
1631 int f_v = (verbose_level >= 1);
1632 semifield_classify *Semi;
1635 cout <<
"semifield_classify_unrank_point_func" << endl;
1637 Semi = (semifield_classify *) data;
1639 Semi->unrank_point(v, rk, verbose_level);
1642 cout <<
"semifield_classify_unrank_point_func done" << endl;
1647static long int canonial_form_rank_vector_callback(
int *v,
1648 int n,
void *data,
int verbose_level)
1650 semifield_classify *SC = (semifield_classify *) data;
1653 r = SC->matrix_rank(v);
1657static void canonial_form_unrank_vector_callback(
long int rk,
1658 int *v,
int n,
void *data,
int verbose_level)
1660 semifield_classify *SC = (semifield_classify *) data;
1662 SC->matrix_unrank(rk, v);
1665static void canonial_form_compute_image_of_vector_callback(
1666 int *v,
int *w,
int *Elt,
void *data,
1669 semifield_classify *SC = (semifield_classify *) data;
1672 SC->A_on_S->compute_image_low_level(Elt, v, w,
finite dimensional vector space over a finite field
void init(field_theory::finite_field *F, int dimension, int verbose_level)
void init_rank_functions(long int(*rank_point_func)(int *v, void *data), void(*unrank_point_func)(int *v, long int rk, void *data), void *data, int verbose_level)
a statistical analysis of data consisting of single integers
void print_file_tex(std::ostream &ost, int f_backwards)
void print_file_tex_we_are_in_math_mode(std::ostream &ost, int f_backwards)
void init_lint(long int *data, int data_length, int f_second, int verbose_level)
void report(std::ostream &ost, int verbose_level)
linear_algebra::linear_algebra * Linear_algebra
various functions related to geometries
void AG_element_unrank(int q, int *v, int stride, int len, long int a)
long int AG_element_rank(int q, int *v, int stride, int len)
options for drawing an object of type layered_graph
void mult_matrix_matrix(int *A, int *B, int *C, int m, int n, int o, int verbose_level)
int Gauss_easy(int *A, int m, int n)
int is_unit_vector(int *v, int len, int k)
int Gauss_easy_memory_given(int *A, int m, int n, int *base_cols)
basic number theoretic functions
int i_power_j(int i, int j)
a collection of functions related to file io
void lint_matrix_write_csv(std::string &fname, long int *M, int m, int n)
long int file_size(std::string &fname)
interface to system functions
a class to represent arbitrary precision integers
a permutation group in a fixed action.
void report(std::ostream &ost, int f_sims, groups::sims *S, int f_strong_gens, groups::strong_generators *SG, graphics::layered_graph_draw_options *LG_Draw_options, int verbose_level)
groups::strong_generators * Strong_gens
void init_projective_group(int n, field_theory::finite_field *F, int f_semilinear, int f_basis, int f_init_sims, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
int matrix_group_dimension()
void make_element(int *Elt, int *data, int verbose_level)
void group_order(ring_theory::longinteger_object &go)
groups::matrix_group * get_matrix_group()
void induced_action_on_spread_set(action *A_old, induced_actions::action_on_spread_set *AS, int f_induce_action, groups::sims *old_G, int verbose_level)
to hold a vector of group elements
field_theory::finite_field * GFq
void group_order(ring_theory::longinteger_object &go)
void element_unrank_lint(long int rk, int *Elt, int verbose_level)
long int element_rank_lint(int *Elt)
a strong generating set for a permutation group with respect to a fixed action
sims * create_sims(int verbose_level)
void print_generators_tex()
long int group_order_as_lint()
void generators_for_the_stabilizer_of_two_components(actions::action *A_PGL_n_q, matrix_group *Mtx, int verbose_level)
data_structures_groups::vector_ge * gens
void group_order(ring_theory::longinteger_object &go)
induced action on a spread set via the associated spread
void compute_image_low_level(int *Elt, int *input, int *output, int verbose_level)
field_theory::finite_field * F
void report(std::ostream &ost, int verbose_level)
void init(actions::action *A_PGL_n_q, actions::action *A_PGL_k_q, groups::sims *G_PGL_k_q, int k, field_theory::finite_field *F, int verbose_level)
orbit of subspaces using a Schreier tree
void init_lint(actions::action *A, actions::action *A2, field_theory::finite_field *F, long int *subspace_by_rank, int k, int n, int f_has_desired_pivots, int *desired_pivots, int f_has_rank_functions, void *rank_unrank_data, long int(*rank_vector_lint_callback)(int *v, int n, void *data, int verbose_level), void(*unrank_vector_lint_callback)(long int rk, int *v, int n, void *data, int verbose_level), void(*compute_image_of_vector_callback)(int *v, int *w, int *Elt, void *data, int verbose_level), void *compute_image_of_vector_callback_data, data_structures_groups::vector_ge *gens, int verbose_level)
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)
actions::action * get_A2()
actions::action * get_A()
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)
void get_set_by_level(int level, int node, long int *set)
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 init_subspace_lattice(actions::action *A, actions::action *A2, groups::strong_generators *Strong_gens, algebra::vector_space *VS, 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)
projective space PG(n,q) with automorphism group PGGL(n+1,q)
field_theory::finite_field * F
classification of semifields using poset classification
induced_actions::action_on_spread_set * A_on_S
void unrank_point(int *v, long int rk, int verbose_level)
poset_classification::poset_with_group_action * Poset
std::string level_two_prefix
void compute_orbits(int depth, int verbose_level)
void print_set_of_matrices_numeric(long int *Rk, int nb)
void matrix_print_numeric(long int rk)
long int rank_point(int *v, int verbose_level)
groups::matrix_group * Mtx
void basis_print(int *Mtx, int sz)
int test_partial_semifield(int *Basis, int n, int verbose_level)
void compute_orbit_of_subspaces(long int *input_data, groups::strong_generators *stabilizer_gens, orbit_of_subspaces *&Orb, int verbose_level)
poset_classification::poset_classification * Gen
void knuth_operation(int t, long int *data_in, long int *data_out, int verbose_level)
void make_fname_candidates_at_level_two_orbit_txt(std::string &fname, int orbit)
int test_if_third_basis_vector_is_ok(int *Basis)
void basis_print_numeric(long int *Rk, int sz)
void make_fname_candidates_at_level_three_orbit(std::string &fname, int orbit)
void matrix_unrank(long int rk, int *Mtx)
int test_candidate(int **Mtx_stack, int stack_size, int *M, int verbose_level)
actions::action * A0_linear
int vector_space_dimension
std::string level_three_prefix
void apply_element(int *Elt, int *basis_in, int *basis_out, int first, int last_plus_one, int verbose_level)
spreads::spread_classify * T
void make_fname_candidates_at_level_two_orbit(std::string &fname, int orbit)
void candidates_classify_by_first_column(long int *Input_set, int input_set_sz, int window_bottom, int window_size, long int **&Set, int *&Set_sz, int &Nb_sets, int verbose_level)
void make_fname_candidates_at_level_two_orbit_by_type(std::string &fname, int orbit, int h)
void apply_element_and_copy_back(int *Elt, int *basis_in, int *basis_out, int first, int last_plus_one, int verbose_level)
void init_poset_classification(poset_classification::poset_classification_control *Control, int verbose_level)
void matrix_print(int *Mtx)
projective_geometry::projective_space_with_action * PA
void report(std::ostream &ost, int level, semifield_level_two *L2, semifield_lifting *L3, graphics::layered_graph_draw_options *draw_options, int verbose_level)
poset_classification::poset_classification_control * Control
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)
groups::strong_generators * Strong_gens
long int matrix_rank(int *Mtx)
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)
groups::sims * Symmetry_group
long int matrix_rank_without_first_column(int *Mtx)
void init_desired_pivots(int verbose_level)
The first and second steps in classifying semifields.
groups::strong_generators * Stabilizer_gens
groups::strong_generators * Flag_orbit_stabilizer
One step of lifting for classifying semifields.
semifield_downstep_node * Downstep_nodes
groups::strong_generators * Stabilizer_gens
to classify spreads of PG(k-1,q) in PG(n-1,q) where k divides n
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)
#define Lint_vec_copy(A, B, C)
#define Int_vec_zero(A, B)
#define Lint_vec_print(A, B, C)
#define Int_matrix_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
groups::matrix_group * matrix_grp