16namespace layer5_applications {
17namespace apps_geometry {
22static void wreath_product_print_set(std::ostream &ost,
int len,
long int *S,
void *data);
23static void wreath_product_rank_one_early_test_func_callback(
long int *S,
int len,
24 long int *candidates,
int nb_candidates,
25 long int *good_candidates,
int &nb_good_candidates,
26 void *data,
int verbose_level);
60 int f_v = (verbose_level >= 1);
64 cout <<
"tensor_classify::init" << endl;
81 cout <<
"tensor_classify::init before "
82 "A->init_wreath_product_group" << endl;
87 cout <<
"tensor_classify::init after "
88 "A->init_wreath_product_group" << endl;
102 cout <<
"tensor_classify::init action A0 does not "
103 "have strong generators" << endl;
113 cout <<
"tensor_classify::init The group " <<
A->
label
114 <<
" has order " <<
go
115 <<
" and permutation degree " <<
A->
degree << endl;
121 cout <<
"generator " << i <<
" is: " << endl;
126 cout <<
"computing image of 2:" << endl;
131 for (j = 0; j <
A->
degree; j++) {
134 cout << j <<
" -> " << h << endl;
146 cout <<
"tensor_classify::init Generators in ASCII format are:" << endl;
163 cout <<
"tensor_classify::init done" << endl;
173 int f_v = (verbose_level >= 1);
176 cout <<
"tensor_classify::classify_poset" << endl;
181 cout <<
"tensor_classify::classify_poset "
182 "before create_restricted_action_on_rank_one_tensors" << endl;
186 cout <<
"tensor_classify::classify_poset "
187 "after create_restricted_action_on_rank_one_tensors" << endl;
196 cout <<
"tensor_classify::classify_poset before "
197 "Poset->add_testing_without_group" << endl;
200 wreath_product_rank_one_early_test_func_callback,
212 cout <<
"tensor_classify::classify_poset before "
213 "Gen->initialize_and_allocate_root_node" << endl;
219 depth , verbose_level);
221 cout <<
"tensor_classify::classify_poset after "
222 "Gen->initialize_and_allocate_root_node" << endl;
227 int f_use_invariant_subset_if_available;
231 f_use_invariant_subset_if_available =
TRUE;
237 cout <<
"tensor_classify::classify_poset before Gen->main" << endl;
248 cout <<
"tensor_classify::classify_poset "
249 "before Gen->main, verbose_level=" << verbose_level << endl;
253 f_use_invariant_subset_if_available,
257 cout <<
"tensor_classify::classify_poset "
258 "after Gen->main" << endl;
261 cout <<
"tensor_classify::classify_poset done" << endl;
268 int f_v = (verbose_level >= 1);
272 cout <<
"tensor_classify::create_restricted_action_on_rank_one_tensors" << endl;
287 cout <<
"tensor_classify::create_restricted_action_on_rank_one_tensors "
288 "before A->restricted_action" << endl;
294 cout <<
"tensor_classify::create_restricted_action_on_rank_one_tensors "
295 "after A->restricted_action" << endl;
298 cout <<
"tensor_classify::create_restricted_action_on_rank_one_tensors done" << endl;
304 long int *candidates,
int nb_candidates,
305 long int *good_candidates,
int &nb_good_candidates,
308 int f_v = (verbose_level >= 1);
309 int f_vv = (verbose_level >= 2);
314 cout <<
"tensor_classify::early_test_func checking set ";
317 cout <<
"candidate set of size "
318 << nb_candidates <<
":" << endl;
326 nb_good_candidates = nb_candidates;
329 nb_good_candidates = 0;
332 cout <<
"tensor_classify::early_test_func before testing" << endl;
334 for (j = 0; j < nb_candidates; j++) {
338 cout <<
"tensor_classify::early_test_func "
339 "testing " << j <<
" / "
340 << nb_candidates << endl;
346 for (i = 0; i < len; i++) {
356 good_candidates[nb_good_candidates++] =
362 cout <<
"tensor_classify::early_test_func done" << endl;
372 int f_v = (verbose_level >= 1);
378 cout <<
"tensor_classify::report" << endl;
391 snprintf(title, 1000,
"Wreath product $%s$",
W->
label_tex.c_str());
392 strcpy(author,
"Orbiter");
393 snprintf(fname, 1000,
"WreathProduct_q%d_n%d.tex",
W->
q,
W->
nb_factors);
411 fp <<
"\\section{The field of order " <<
q <<
"}" << endl;
412 fp <<
"\\noindent The field ${\\mathbb F}_{"
414 <<
"}$ :\\\\" << endl;
418 cout <<
"tensor_classify::report before W->report" << endl;
424 cout <<
"tensor_classify::report after W->report" << endl;
427 fp <<
"\\section{Generators}" << endl;
431 if (i < SG->gens->len - 1) {
438 fp <<
"\\section{The Group}" << endl;
444 cout <<
"tensor_classify::report after A->report" << endl;
448 if (f_poset_classify) {
454 char fname_poset[1000];
458 poset_classify_depth ,
469 fp <<
"\\section{Poset Classification}" << endl;
475 fp <<
"\\subsection*{Orbits at level " << poset_classify_depth <<
"}" << endl;
476 int nb_orbits, orbit_idx;
479 for (orbit_idx = 0; orbit_idx < nb_orbits; orbit_idx++) {
480 fp <<
"\\subsubsection*{Orbit " << orbit_idx <<
" / " << nb_orbits <<
"}" << endl;
485 cout <<
"before get_whole_orbit orbit_idx=" << orbit_idx << endl;
488 poset_classify_depth, orbit_idx,
489 Orbit, orbit_length, verbose_level);
495 for (i = 0; i < orbit_length; i++) {
497 fp <<
"set " << i <<
" / " << orbit_length <<
" is: ";
503 for (j = 0; j < poset_classify_depth; j++) {
508 for (j = 0; j < poset_classify_depth; j++) {
509 fp << Orbit[i * poset_classify_depth + j];
510 if (j < poset_classify_depth - 1) {
515 for (j = 0; j < poset_classify_depth; j++) {
518 if (j < poset_classify_depth - 1) {
524 fp <<
"\\\\" << endl;
546 cout <<
"Written file " << fname <<
" of size "
550 cout <<
"tensor_classify::report done" << endl;
558static int wreath_rank_point_func(
int *v,
void *data)
570static void wreath_unrank_point_func(
int *v,
int rk,
void *data)
574 T = (tensor_classify *) data;
582static void wreath_product_print_set(ostream &ost,
int len,
long int *S,
void *data)
587 T = (tensor_classify *) data;
591 for (i = 0; i < len; i++) {
592 T->F->PG_element_unrank_modified(T->v,
593 1, T->vector_space_dimension, S[i]);
594 cout << S[i] <<
" : ";
603static void wreath_product_rank_one_early_test_func_callback(
long int *S,
int len,
604 long int *candidates,
int nb_candidates,
605 long int *good_candidates,
int &nb_good_candidates,
606 void *data,
int verbose_level)
608 tensor_classify *T = (tensor_classify *) data;
609 int f_v = (verbose_level >= 1);
612 cout <<
"wreath_product_rank_one_early_test_func_callback for set ";
616 T->early_test_func(S, len,
617 candidates, nb_candidates,
618 good_candidates, nb_good_candidates,
621 cout <<
"wreath_product_rank_one_early_test_func_callback done" << endl;
a collection of functions related to sorted vectors
void lint_vec_heapsort(long int *v, int len)
a statistical analysis of data consisting of single integers
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 init(finite_field_description *Descr, int verbose_level)
void cheat_sheet(std::ostream &f, int verbose_level)
options for drawing an object of type layered_graph
a collection of functions related to file io
long int file_size(std::string &fname)
interface to create latex output files
void print_lint_matrix_tex(std::ostream &ost, long 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)
interface to system functions
void element_print_latex(void *elt, std::ostream &ost)
action * restricted_action(long int *points, int nb_points, int verbose_level)
void element_print_for_make_element(void *elt, std::ostream &ost)
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
int f_has_strong_generators
void element_print_as_permutation(void *elt, std::ostream &ost)
long int element_image_of(long int a, void *elt, int verbose_level)
void init_wreath_product_group(int nb_factors, int n, field_theory::finite_field *F, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
creates a linear group from command line arguments using linear_group_description
actions::action * A_linear
void print_generators_gap(std::ostream &ost)
void print_generators(std::ostream &ost)
data_structures_groups::vector_ge * gens
void group_order(ring_theory::longinteger_object &go)
void tensor_PG_unrank(int *tensor, long int PG_rk)
void report(std::ostream &ost, int verbose_level)
uint32_t * rank_one_tensors
field_theory::finite_field * F
int dimension_of_tensor_action
long int affine_rank_to_PG_rank(uint32_t affine_rk)
int dimension_of_matrix_group
long int tensor_PG_rank(int *tensor)
to control the behavior of the poset classification algorithm
to control the behavior of the poset classification report function
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)
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 draw_poset_fname_base_poset_lvl(std::string &fname, int depth)
void get_whole_orbit(int depth, int orbit_idx, long int *&Orbit, int &orbit_length, int verbose_level)
void draw_poset(std::string &fname_base, int depth, int data, graphics::layered_graph_draw_options *LG_Draw_options, int verbose_level)
void report(std::ostream &ost, poset_classification_report_options *Opt, 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)
classification of tensors under the wreath product group
void init(field_theory::finite_field *F, groups::linear_group *LG, int verbose_level)
void create_restricted_action_on_rank_one_tensors(int verbose_level)
groups::strong_generators * SG
poset_classification::poset_with_group_action * Poset
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)
field_theory::finite_field * F
void report(int f_poset_classify, int poset_classify_depth, graphics::layered_graph_draw_options *draw_options, int verbose_level)
poset_classification::poset_classification * Gen
groups::wreath_product * W
algebra::vector_space * VS
ring_theory::longinteger_object go
int vector_space_dimension
void classify_poset(int depth, poset_classification::poset_classification_control *Control, int verbose_level)
poset_classification::poset_classification_control * Control
#define Lint_vec_copy(A, B, C)
#define Lint_vec_print(A, B, C)
#define Int_vec_print(A, B, C)
the orbiter library for the classification of combinatorial objects
groups::wreath_product * wreath_product_group