16namespace layer4_classification {
17namespace poset_classification {
33 int f_v = (verbose_level >= 1);
34 int f_vv = (verbose_level >= 5);
35 int f_vvv = (verbose_level >= 6);
37 int f_v5 = (verbose_level >= 8);
42 int final_node, final_ex;
52 int big_n, n, k, rk, degree, idx;
54 int *base_change_matrix;
66 cout <<
"upstep_work::upstep_subspace_action "
67 "upstep in subspace action for set ";
69 cout <<
" verbose_level=" << verbose_level;
70 cout <<
" f_indicate_not_canonicals="
76 cout <<
"upstep_work::upstep_subspace_action "
77 "action is not linear" << endl;
92 M = sub->G.matrix_grp;
114 cout <<
"big_n=" << big_n << endl;
115 cout <<
"n=" << n << endl;
116 cout <<
"k=" << k << endl;
118 ambient_space =
NEW_int(n * big_n);
119 base_change_matrix =
NEW_int(n * n);
122 changed_space =
NEW_int(n * big_n);
127 cout <<
"upstep_work::upstep_subspace_action "
128 "ambient space:" << endl;
133 cout <<
"setting up grassmannian n=" << n
134 <<
" k=" << k <<
" q=" << F->
q << endl;
138 cout <<
"upstep_work::upstep_subspace_action "
139 "grassmann initialized" << endl;
140 cout <<
"upstep_work::upstep_subspace_action "
141 "setting up action_on_grassmannian:" << endl;
145 cout <<
"upstep_work::upstep_subspace_action "
146 "after AG.init" << endl;
150 cout <<
"upstep_work::upstep_subspace_action "
151 "after AG.init_embedding, big_n=" << big_n << endl;
155 cout <<
"upstep_work::upstep_subspace_action "
156 "AG->GE->degree = " << AG->
GE->
degree << endl;
157 cout <<
"upstep_work::upstep_subspace_action "
158 "before induced_action_on_grassmannian" << endl;
169 cout <<
"upstep_work::upstep_subspace_action "
170 "after A_on_hyperplanes->induced_action_on_grassmannian"
173 degree = A_on_hyperplanes.
degree;
175 cout <<
"upstep_work::upstep_subspace_action "
176 "The action on hyperplanes has degree = "
180 cout <<
"upstep_work::upstep_subspace_action "
181 "degree != AG->GE->degree" << endl;
185 up_orbit.
init(&A_on_hyperplanes, verbose_level - 2);
188 cout <<
"upstep_work::upstep_subspace_action "
189 "generators for H:" << endl;
193 cout <<
"generators in the action on hyperplanes:" << endl;
202 cout <<
"upstep_work::upstep_subspace_action "
203 "computing initial orbits of hyperplane action:"
213 cout <<
"upstep_work::upstep_subspace_action "
214 "computing initial orbits of hyperplane action done"
218 cout <<
"upstep_work::upstep_subspace_action "
219 "the initial orbits on hyperplanes are:" << endl;
224 cout <<
"upstep_work::upstep_subspace_action "
225 "initializing union_find:" << endl;
227 UF.
init(&A_on_hyperplanes, verbose_level - 8);
230 cout <<
"upstep_work::upstep_subspace_action "
231 "initializing union_find done" << endl;
238 cout <<
"upstep_work::upstep_subspace_action "
239 "we will now loop over the " << degree
240 <<
" cosets of the hyperplane stabilizer:" << endl;
251 cout <<
" upstep_work::upstep_subspace_action coset "
252 <<
coset <<
" / " << degree << endl;
258 cout <<
"upstep_work::upstep_subspace_action coset "
259 <<
coset <<
" / " << degree <<
" is at " << idx
260 <<
" which has already been done, "
261 "so we save one trace" << endl;
269 cout <<
"upstep_work::upstep_subspace_action "
270 "coset " <<
coset <<
" is at " << idx
271 <<
" which is part of the current orbit, "
272 "so we save one trace" << endl;
284 cout <<
"upstep_work::upstep_subspace_action "
285 "unranking " <<
coset <<
":" << endl;
291 cout <<
"upstep_work::upstep_subspace_action "
292 "base_change_matrix (hyperplane part) for coset "
293 <<
coset <<
":" << endl;
305 cout <<
"rk != k" << endl;
309 cout <<
"upstep_work::upstep_subspace_action base_cols:";
311 cout <<
" embedding:";
318 base_change_matrix[(n - 1) * n + embedding[0]] = 1;
321 cout <<
"upstep_work::upstep_subspace_action "
322 "extended base_change_matrix (hyperplane part) "
323 "for coset " <<
coset <<
":" << endl;
329 cout <<
"upstep_work::upstep_subspace_action "
330 "AG->GE->M:" << endl;
338 base_change_matrix, base_cols, embedding,
341 cout <<
"upstep_work::upstep_subspace_action "
352 cout <<
"upstep_work::upstep_subspace_action "
353 "changed_space for coset " <<
coset <<
":" << endl;
364 cout <<
"upstep_work::upstep_subspace_action "
365 "changed_space for coset " <<
coset
366 <<
" as rank vector: ";
378 cout <<
"upstep_work::upstep_subspace_action exchanged set: ";
381 cout <<
"upstep_work::upstep_subspace_action "
382 "calling recognize" << endl;
399 cout <<
" upstep_work::upstep_subspace_action coset "
400 <<
coset <<
" / " << degree
401 <<
" before recognize " << endl;
405 final_node, final_ex,
415 cout <<
" upstep_work::upstep_subspace_action coset "
416 <<
coset <<
" / " << degree
417 <<
" after recognize " << endl;
437 cout <<
"upstep_work::upstep_subspace_action calling "
438 "find_automorphism returns "
447 cout <<
"upstep_work::upstep_subspace_action "
448 "found automorphism in coset " <<
coset << endl;
455 cout <<
"in the action " <<
gen->A2->label
457 gen->A2->element_print_as_permutation(aut, cout);
459 cout <<
"in the action "
460 << A_on_hyperplanes.
label
461 <<
" on the hyperplanes:" << endl;
470 cout <<
"upstep_work::upstep_subspace_action fatal: "
471 "automorphism does not map " <<
coset
472 <<
" to 0 as it should" << endl;
480 cout <<
"upstep_work::upstep_subspace_action "
481 "n e w orbit length upstep = "
488 cout <<
"upstep_work::upstep_subspace_action "
489 "not canonical" << endl;
493 cout <<
"upstep_work::upstep_subspace_action: "
494 "recognize returns not_canonical, "
495 "this should not happen" << endl;
500 cout <<
"upstep_work::upstep_subspace_action "
501 "no_result_extension_not_found" << endl;
503 cout <<
"upstep_work::upstep_subspace_action "
504 "fatal: no_result_extension_not_found" << endl;
509 cout <<
"upstep_work::upstep_subspace_action "
510 "no_result_fusion_node_installed" << endl;
515 cout <<
"upstep_work::upstep_subspace_action "
516 "no_result_fusion_node_already_installed" << endl;
524 cout <<
"upstep_work::upstep_subspace_action "
525 "upstep orbit length for set ";
527 cout <<
" is " << up_orbit.
orbit_len[0] << endl;
531 cout <<
"upstep_work::upstep_subspace_action "
532 "the final orbits on hyperplanes are:" << endl;
542 int f_tolerant =
FALSE;
546 cout <<
"upstep_work::upstep_subspace_action "
547 "node " <<
cur <<
":" << endl;
551 cout <<
"upstep_work::upstep_subspace_action "
552 "before H->S->transitive_extension_tolerant"
556 up_orbit, SG_extension,
561 cout <<
"upstep_work::upstep_subspace_action "
562 "after H->S->transitive_extension_tolerant"
566 cout <<
"upstep_work::upstep_subspace_action "
567 "overshooting the group order" << endl;
583 cout <<
"upstep_work::upstep_subspace_action "
584 "before freeing A_on_hyperplanes" << endl;
591 cout <<
"upstep_work::upstep_subspace_action "
592 "before freeing the rest" << endl;
596 cout <<
"upstep_work::upstep_subspace_action done" << endl;
void set_print(long int *v, int len)
linear_algebra::linear_algebra * Linear_algebra
to rank and unrank subspaces of a fixed dimension in F_q^n
int base_cols_and_embedding(int m, int n, int *A, int *base_cols, int *embedding, int verbose_level)
void mult_matrix_matrix(int *A, int *B, int *C, int m, int n, int o, int verbose_level)
data_structures::lint_vec * Lint_vec
int nb_times_retrieve_called
int nb_times_image_of_called
int nb_times_invert_called
a permutation group in a fixed action.
void element_print_quick(void *elt, std::ostream &ost)
symmetry_group_type type_G
void element_print_as_permutation_verbose(void *elt, std::ostream &ost, int verbose_level)
void element_one(void *elt, int verbose_level)
action * induced_action_on_grassmannian(int k, int verbose_level)
groups::matrix_group * get_matrix_group()
action_pointer_table * ptr
long int element_image_of(long int a, void *elt, int verbose_level)
void init_strong_generators(vector_ge &SG, int *tl, int verbose_level)
void print_strong_generators(std::ostream &ost, int f_print_as_permutation)
void delete_strong_generators()
void print_strong_generators_with_different_action_verbose(std::ostream &ost, actions::action *A2, int verbose_level)
void init(actions::action *A, int verbose_level)
a union find data structure (used in the poset classification algorithm)
void init(actions::action *A, int verbose_level)
void add_generator(int *Elt, int verbose_level)
void add_generators(vector_ge *gens, int verbose_level)
to hold a vector of group elements
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 print_and_list_orbits(std::ostream &ost)
void extend_orbit(int *elt, int verbose_level)
void init_generators(data_structures_groups::vector_ge &generators, int verbose_level)
void compute_point_orbit(int pt, int verbose_level)
void init(actions::action *A, int verbose_level)
int transitive_extension_tolerant(schreier &O, data_structures_groups::vector_ge &SG, int *tl, int f_tolerant, int verbose_level)
field_theory::finite_field * Fq
induced action on the grassmannian (subspaces of a fixed dimension of a vectors space)
geometry::grassmann_embedded * GE
void init_embedding(int big_n, int *ambient_space, int verbose_level)
void init(actions::action &A, geometry::grassmann *G, int verbose_level)
actions::action * get_A2()
actions::action * get_A()
void unrank_basis(int *Basis, long int *S, int len)
void rank_basis(int *Basis, long int *S, int len)
algebra::vector_space * get_VS()
long int * get_set_i(int i)
int do_group_extension_in_upstep()
data_structures_groups::vector_ge * get_transporter()
void store_set(poset_classification *gen, int i)
void print_level_extension_info()
int f_indicate_not_canonicals
data_structures_groups::group_container * G
data_structures_groups::group_container * H
void print_level_extension_coset_info()
coset_table_entry * coset_table
int upstep_subspace_action(int verbose_level)
poset_classification * gen
trace_result recognize(int &final_node, int &final_ex, int f_tolerant, int verbose_level)
#define Int_vec_zero(A, B)
#define Lint_vec_print(A, B, C)
#define Int_vec_print_integer_matrix_width(A, B, C, D, E, F)
#define NEW_OBJECTS(type, n)
#define Int_vec_copy(A, B, C)
#define Int_vec_print(A, B, C)
orbiter_kernel_system::orbiter_session * Orbiter
global Orbiter session
@ action_by_subfield_structure_t
const char * trace_result_as_text(trace_result r)
@ no_result_fusion_node_installed
@ no_result_extension_not_found
@ no_result_fusion_node_already_installed
the orbiter library for the classification of combinatorial objects
a helper class for the poset classification algorithm to build up a coset transversal for the automor...
int nb_times_invert_called
int nb_times_retrieve_called
int nb_times_image_of_called
induced_actions::action_by_subfield_structure * SubfieldStructure
groups::wreath_product * wreath_product_group
groups::matrix_group * matrix_grp