15namespace layer4_classification {
16namespace poset_classification {
20 int lvl,
int current_node,
21 int current_extension,
int len,
int f_tolerant,
25 int f_v = (verbose_level >= 1);
31 cout <<
"poset_orbit_node::apply_isomorphism" << endl;
35 set = gen->get_tmp_set_apply_fusion();
37 gen->get_A()->element_retrieve(
38 E[current_extension].get_data(),
43 cout <<
"poset_orbit_node::apply_isomorphism "
44 "applying fusion element" << endl;
45 if (gen->allowed_to_show_group_elements()) {
46 gen->get_A2()->element_print_quick(gen->get_Elt1(), cout);
48 cout <<
"in action " << gen->get_A2()->label <<
":" << endl;
49 if (gen->allowed_to_show_group_elements()) {
50 gen->get_A2()->element_print_as_permutation(gen->get_Elt1(), cout);
52 cout <<
"to the set ";
56 gen->get_A2()->map_a_set(
57 gen->get_set_i(lvl + 1),
62 cout <<
"poset_orbit_node::apply_isomorphism the set becomes: ";
67 gen->get_A2()->element_mult(
68 gen->get_transporter()->ith(lvl + 1),
69 gen->get_Elt1(), gen->get_Elt2(), 0);
72 gen->get_set_i(lvl + 1), len + 1);
75 gen->get_A2()->move(gen->get_Elt2(),
76 gen->get_transporter()->ith(lvl + 1));
78 if (gen->get_poset()->f_subspace_lattice) {
79 next_node = gen->find_node_for_subspace_by_rank(
90 cout <<
"poset_orbit_node::apply_isomorphism after sorting: ";
93 cout <<
"poset_orbit_node::apply_isomorphism "
94 "calling find_poset_orbit_node_for_set: ";
98 next_node = gen->find_poset_orbit_node_for_set(
100 gen->get_set_i(lvl + 1),
106 cout <<
"poset_orbit_node::apply_isomorphism the set ";
108 cout <<
" is node " << next_node << endl;
115 int lvl,
int current_node,
116 int my_node,
int my_extension,
int my_coset,
117 long int pt0,
int current_extension,
118 int f_debug,
int f_implicit_fusion,
124 int f_v = (verbose_level >= 1);
130 cout <<
"poset_orbit_node::install_fusion_node "
131 " verbose_level = " << verbose_level <<
134 <<
" current_node=" << current_node
135 <<
" my_node=" << my_node
136 <<
" current_extension=" << current_extension
138 <<
" E[current_extension].get_pt()=" << E[current_extension].
get_pt()
142 if (E[current_extension].
get_pt() != pt0) {
143 cout <<
"poset_orbit_node::install_fusion_node "
144 "E[current_extension].pt != pt0" << endl;
147 if (current_node != node) {
148 cout <<
"poset_orbit_node::install_fusion_node "
149 "current_node != node" << endl;
153 cout <<
"poset_orbit_node::install_fusion_node: "
154 "unprocessed extension, ";
155 cout <<
"we will now install a fusion node at node " << node
156 <<
" , extension " << current_extension << endl;
159 cout <<
"poset_orbit_node::install_fusion_node" << endl;
160 cout <<
"transporter[lvl + 1]=" << endl;
161 gen->get_A()->element_print_quick(
162 gen->get_transporter()->ith(lvl + 1), cout);
163 gen->get_A2()->element_print_as_permutation_verbose(
164 gen->get_transporter()->ith(lvl + 1), cout, 0);
166 gen->get_A()->element_invert(
167 gen->get_transporter()->ith(lvl + 1),
168 gen->get_Elt1(),
FALSE);
170 cout <<
"poset_orbit_node::install_fusion_node" << endl;
171 cout <<
"transporter[lvl + 1]^-1=Elt1=" << endl;
172 gen->get_A()->element_print_quick(gen->get_Elt1(), cout);
173 gen->get_A2()->element_print_as_permutation_verbose(
174 gen->get_Elt1(), cout, 0);
177 cout <<
"poset_orbit_node::install_fusion_node: "
178 "fusion element:" << endl;
179 if (gen->allowed_to_show_group_elements()) {
180 gen->get_A()->element_print_quick(gen->get_Elt1(), cout);
181 gen->get_A2()->element_print_as_permutation(gen->get_Elt1(), cout);
185 hdl = gen->get_A()->element_store(gen->get_Elt1(),
FALSE);
187 gen->get_Poo()->change_extension_type(lvl,
188 current_node, current_extension,
193 E[current_extension].
set_data2(my_extension);
195 cout <<
"FUSION NODE at lvl " << lvl
196 <<
" node/extension=" << current_node
197 <<
"/" << current_extension <<
" pt=" << pt0
198 <<
" hdl=" << hdl <<
" to node/extension="
200 <<
"/" << E[current_extension].
get_data2()
205 if (current_node == 9 && pt0 == 39371) {
206 gen->A->element_print_quick(gen->Elt1, cout);
207 gen->A2->element_print_as_permutation(gen->Elt1, cout);
219 gen->get_set1()[lvl] = pt0;
222 if (node == my_node || f_v) {
223 cout <<
"poset_orbit_node::install_fusion_node "
224 "fusion element stored in Node " << node
225 <<
", extension " << current_extension
226 <<
" my_node = " << my_node << endl;
227 gen->A->element_print_verbose(gen->Elt1, cout);
229 cout <<
"Node " << node <<
" fusion from ";
230 int_set_print(cout, gen->set1, lvl + 1);
232 int_set_print(cout, gen->set0, lvl + 1);
234 if (node == my_node) {
241 cout <<
"poset_orbit_node::install_fusion_node set1=";
244 cout <<
"Elt1=" << endl;
245 gen->get_A()->element_print_quick(gen->get_Elt1(), cout);
246 cout <<
"before map_a_set" << endl;
248 gen->get_A2()->map_a_set(
254 cout <<
"poset_orbit_node::install_fusion_node "
255 "after map_a_set set3=";
260 if (gen->get_poset()->f_subspace_lattice) {
261 cmp = gen->get_VS()->compare_subspaces_ranked(
262 gen->get_set3(), gen->get_set0(), lvl + 1, verbose_level);
264 cmp = gen->F->compare_subspaces_ranked_with_unrank_function(
265 gen->set3, gen->set0, lvl + 1,
266 gen->vector_space_dimension,
267 gen->unrank_point_func,
268 gen->rank_point_data,
279 cout <<
"poset_orbit_node::install_fusion_node "
280 "something is wrong" << endl;
281 cout <<
"comparing ";
286 if (gen->get_poset()->f_subspace_lattice) {
290 v =
NEW_int(gen->get_VS()->dimension);
292 cout <<
" is " << endl;
293 for (i = 0; i < lvl + 1; i++) {
294 gen->unrank_point(v, gen->get_set3()[i]);
299 cout <<
" is " << endl;
300 for (i = 0; i < lvl + 1; i++) {
301 gen->unrank_point(v, gen->get_set0()[i]);
311 cout <<
"poset_orbit_node::install_fusion_node done" << endl;
317 int lvl,
int current_node,
318 int len,
int f_implicit_fusion,
319 int &f_failure_to_find_point,
330 int f_v = (verbose_level >= 1);
334 cout <<
"poset_orbit_node::trace_next_point_wrapper" << endl;
335 cout <<
"poset_orbit_node::trace_next_point_wrapper current_node = " << current_node << endl;
336 cout <<
"poset_orbit_node::trace_next_point_wrapper len = " << len << endl;
337 cout <<
"poset_orbit_node::trace_next_point_wrapper lvl = " << lvl << endl;
338 cout <<
"poset_orbit_node::trace_next_point_wrapper gen->get_transporter()->len = " << gen->get_transporter()->len << endl;
341 int *transporter_lvl;
343 cout <<
"poset_orbit_node::trace_next_point_wrapper setting transporter_lvl" << endl;
345 transporter_lvl = gen->get_transporter()->ith(lvl);
347 int *transporter_lvlp1;
350 cout <<
"poset_orbit_node::trace_next_point_wrapper "
351 "before trace_next_point setting transporter_lvlp1" << endl;
353 transporter_lvlp1 = gen->get_transporter()->ith(lvl + 1);
356 cout <<
"poset_orbit_node::trace_next_point_wrapper "
357 "before trace_next_point" << endl;
364 gen->get_set_i(lvl + 1),
368 f_failure_to_find_point,
371 cout <<
"poset_orbit_node::trace_next_point_wrapper done" << endl;
383 int *cur_transporter,
384 int *tmp_transporter,
385 int f_implicit_fusion,
386 int &f_failure_to_find_point,
391 int f_v = (verbose_level >= 1);
394 cout <<
"poset_orbit_node::trace_next_point_in_place" << endl;
395 cout <<
"poset_orbit_node::trace_next_point_in_place "
396 "verbose_level = " << verbose_level << endl;
407 f_failure_to_find_point,
410 cout <<
"poset_orbit_node::trace_next_point_in_place, "
411 "after trace_next_point" << endl;
414 gen->get_A()->element_move(tmp_transporter,
417 cout <<
"poset_orbit_node::trace_next_point_in_place done" << endl;
424 long int *cur_set,
long int *next_set,
425 int *cur_transporter,
int *next_transporter,
428 int f_v = (verbose_level >= 1);
429 int f_vv = (verbose_level >= 2);
434 cout <<
"poset_orbit_node::trace_starter" << endl;
435 cout <<
"set:" << endl;
438 cout <<
"verbose_level=" << verbose_level << endl;
440 Elt = gen->get_Base_case()->Elt;
442 gen->get_Base_case()->invoke_recognition(cur_set, size, Elt, verbose_level - 1);
445 cout <<
"applying:" << endl;
446 if (gen->allowed_to_show_group_elements()) {
447 gen->get_A2()->element_print(Elt, cout);
452 for (i = 0; i < size; i++) {
453 next_set[i] = gen->get_A2()->element_image_of(
454 cur_set[i], Elt,
FALSE);
457 gen->get_A()->element_mult(cur_transporter,
463 cout <<
"after canonize:" << endl;
468 cout <<
"poset_orbit_node::trace_starter done" << endl;
475 int lvl,
int current_node,
int size,
476 long int *cur_set,
long int *next_set,
477 int *cur_transporter,
int *next_transporter,
478 int f_implicit_fusion,
int &f_failure_to_find_point,
485 long int the_point, pt0;
488 int f_v = (verbose_level >= 1);
489 int f_vv = (verbose_level >= 2);
494 f_failure_to_find_point =
FALSE;
495 the_point = cur_set[lvl];
498 cout <<
"poset_orbit_node::trace_next_point lvl = " << lvl
499 <<
" the_point=" << the_point << endl;
500 cout <<
"poset_orbit_node::trace_next_point node=" << node
501 <<
" prev=" << prev <<
" pt=" << pt << endl;
502 cout <<
"poset_orbit_node::trace_next_point verbose_level = "
503 << verbose_level << endl;
506 if (gen->get_poset()->f_subspace_lattice) {
508 cout <<
"poset_orbit_node::trace_next_point before "
509 "orbit_representative_and_coset_rep_inv_"
510 "subspace_action" << endl;
514 the_point, pt0, cosetrep,
519 cout <<
"poset_orbit_node::trace_next_point lvl = " << lvl
520 <<
" the_point=" << the_point
521 <<
" is traced to " << pt0 << endl;
526 cout <<
"poset_orbit_node::trace_next_point "
527 "before orbit_representative_and_coset_rep_inv" << endl;
531 the_point, pt0, cosetrep,
532 verbose_level - 1)) {
534 cout <<
"poset_orbit_node::trace_next_point "
535 "orbit_representative_"
536 "and_coset_rep_inv returns FALSE, "
537 "f_failure_to_find_point = TRUE" << endl;
539 f_failure_to_find_point =
TRUE;
543 cout <<
"poset_orbit_node::trace_next_point "
544 "after orbit_representative_and_coset_rep_inv" << endl;
548 cout <<
"poset_orbit_node::trace_next_point lvl = " << lvl
550 << the_point <<
"->" << pt0
551 <<
" under the element " << endl;
552 gen->get_A2()->element_print_quick(cosetrep, cout);
553 cout <<
"in action " << gen->get_A2()->label << endl;
554 if (gen->allowed_to_show_group_elements()) {
555 gen->get_A2()->element_print_as_permutation_verbose(
560 if (pt0 == the_point) {
562 cout <<
"Since the image point is equal "
563 "to the original point, "
564 "we apply no element and copy the set "
565 "and the transporter over:" << endl;
568 gen->get_A2()->element_move(cur_transporter, next_transporter,
FALSE);
572 cout <<
"poset_orbit_node::trace_next_point lvl = " << lvl
573 <<
" applying:" << endl;
574 gen->get_A2()->element_print_quick(cosetrep, cout);
575 cout <<
"in action " << gen->get_A2()->label << endl;
576 if (gen->allowed_to_show_group_elements()) {
577 gen->get_A2()->element_print_as_permutation_verbose(
588 for (i = lvl + 1; i < size; i++) {
590 cout <<
"poset_orbit_node::trace_next_point lvl = " << lvl
591 <<
" mapping point " << i <<
" / " << size
592 <<
"cur_set[i]=" << cur_set[i] << endl;
594 next_set[i] = gen->get_A2()->element_image_of(
595 cur_set[i], cosetrep, 0 );
597 cout <<
"poset_orbit_node::trace_next_point lvl = " << lvl
598 <<
" mapping point " << i <<
" / " << size
599 <<
"next_set[i]=" << next_set[i] << endl;
602 cout <<
"poset_orbit_node::trace_next_point "
603 "lvl = " << lvl <<
": ";
604 cout <<
"mapping " << i <<
"-th point: "
605 << cur_set[i] <<
"->" << next_set[i] << endl;
609 cout <<
"poset_orbit_node::trace_next_point next_set: ";
622 cout <<
"poset_orbit_node::trace_next_point "
623 "before element_mult" << endl;
624 cout <<
"cur_transporter:" << endl;
625 gen->A->element_print_quick(cur_transporter, cout);
626 cout <<
"cosetrep:" << endl;
627 gen->A->element_print_quick(cosetrep, cout);
630 gen->get_A()->element_mult(cur_transporter,
631 cosetrep, next_transporter, 0);
634 cout <<
"poset_orbit_node::trace_next_point "
635 "after element_mult" << endl;
641 cout <<
"poset_orbit_node::trace_next_point lvl = " << lvl
642 <<
" mapping " << the_point <<
"->" << pt0
643 <<
" done, the set becomes ";
647 if (gen->get_poset()->f_print_function && f_vv) {
648 gen->get_poset()->invoke_print_function(cout, size, next_set);
650 if (gen->allowed_to_show_group_elements() && f_vv) {
651 cout <<
"poset_orbit_node::trace_next_point the n e w "
652 "transporter is" << endl;
653 gen->get_A2()->element_print_quick(next_transporter, cout);
654 gen->get_A2()->element_print_as_permutation(
655 next_transporter, cout);
661 if (f_implicit_fusion) {
665 next_set[lvl] < next_set[lvl - 1]) {
667 cout <<
"poset_orbit_node::trace_next_point the set becomes "
668 "lexicographically less" << endl;
680 cout <<
"poset_orbit_node::trace_next_point "
682 <<
" done, ret=" << ret << endl;
689 int lvl,
long int pt_to_trace,
690 long int &pt0,
int *&cosetrep,
694 int f_v = (verbose_level >= 1);
699 cout <<
"poset_orbit_node::orbit_representative_and_coset_rep_inv "
701 <<
" pt_to_trace=" << pt_to_trace << endl;
703 if (nb_strong_generators == 0) {
704 cosetrep = gen->get_Elt1();
705 gen->get_A()->element_one(gen->get_Elt1(),
FALSE);
709 if (Schreier_vector) {
717 cout <<
"poset_orbit_node::orbit_representative_and_coset_rep_inv "
718 "before gen->Schreier_vector_handler->coset_rep_inv_lint "
719 "verbose_level=" << verbose_level
722 if (!gen->get_schreier_vector_handler()->coset_rep_inv_lint(
726 verbose_level - 1)) {
729 cout <<
"poset_orbit_node::orbit_representative_and_coset_rep_inv "
730 "schreier_vector_coset_rep_inv_lint returns FALSE, "
731 "point not found" << endl;
735 cosetrep = gen->get_schreier_vector_handler()->cosetrep;
737 cout <<
"poset_orbit_node::orbit_representative_and_coset_rep_inv "
738 "after gen->Schreier_vector_handler->coset_rep_inv"
746 cout <<
"poset_orbit_node::orbit_representative_and_coset_rep_inv "
747 "schreier vector: pt_to_trace=" << pt_to_trace
748 <<
" pt0=" << pt0 << endl;
749 cout <<
"cosetrep:" << endl;
750 gen->get_A2()->element_print_quick(cosetrep, cout);
756 cout <<
"Node " << node
757 <<
" poset_orbit_node::orbit_representative_and_"
758 "coset_rep_inv Schreier_vector not available" << endl;
761 cosetrep = gen->get_Elt1();
764 std::vector<int> gen_handle;
769 pt0 = gen->get_A2()->least_image_of_point_generators_by_handle(
776 cout <<
"poset_orbit_node::orbit_representative_and_coset_rep_inv "
777 "pt_to_trace=" << pt_to_trace
778 <<
" pt0=" << pt0 <<
" done" << endl;
void set_print(long int *v, int len)
a collection of functions related to sorted vectors
int lint_vec_compare(long int *p, long int *q, int len)
void lint_vec_heapsort(long int *v, int len)
data_structures::lint_vec * Lint_vec
void set_data1(int data1)
void set_data2(int data1)
the poset classification algorithm
int trace_next_point_wrapper(poset_classification *gen, int lvl, int current_node, int len, int f_implicit_fusion, int &f_failure_to_find_point, int verbose_level)
void orbit_representative_and_coset_rep_inv_subspace_action(poset_classification *gen, int lvl, long int pt_to_trace, long int &pt0, int *&cosetrep, int verbose_level)
int orbit_representative_and_coset_rep_inv(poset_classification *gen, int lvl, long int pt_to_trace, long int &pt0, int *&cosetrep, int verbose_level)
int trace_next_point(poset_classification *gen, int lvl, int current_node, int size, long int *cur_set, long int *next_set, int *cur_transporter, int *next_transporter, int f_implicit_fusion, int &f_failure_to_find_point, int verbose_level)
void get_strong_generators_handle(std::vector< int > &gen_hdl, int verbose_level)
void install_fusion_node(poset_classification *gen, int lvl, int current_node, int my_node, int my_extension, int my_coset, long int pt0, int current_extension, int f_debug, int f_implicit_fusion, int verbose_level)
int apply_isomorphism(poset_classification *gen, int lvl, int current_node, int current_extension, int len, int f_tolerant, int verbose_level)
int trace_next_point_in_place(poset_classification *gen, int lvl, int current_node, int size, long int *cur_set, long int *tmp_set, int *cur_transporter, int *tmp_transporter, int f_implicit_fusion, int &f_failure_to_find_point, int verbose_level)
void trace_starter(poset_classification *gen, int size, long int *cur_set, long int *next_set, int *cur_transporter, int *next_transporter, int verbose_level)
void store_set_to(poset_classification *gen, int i, long int *to)
#define Lint_vec_copy(A, B, C)
#define Lint_vec_print(A, B, C)
#define Int_vec_print(A, B, C)
orbiter_kernel_system::orbiter_session * Orbiter
global Orbiter session
the orbiter library for the classification of combinatorial objects
#define EXTENSION_TYPE_FUSION