15namespace layer4_classification {
16namespace poset_classification {
20 int &final_node,
int &final_ex,
int f_tolerant,
42 int f_v = (verbose_level >= 1);
43 int f_vv = (verbose_level >= 2);
50 cout <<
"upstep_work::recognize "
51 "verbose_level = " << verbose_level << endl;
68 cout <<
"upstep_work::recognize "
70 "gen->nb_times_trace="
71 <<
gen->nb_times_trace << endl;
72 cout <<
"len=" << len << endl;
73 cout <<
"gen->sz=" <<
gen->sz << endl;
80 if ((
gen->nb_times_trace & ((1 << 17) - 1)) == 0) {
81 cout <<
"upstep_work::recognize() " << endl;
82 cout <<
"nb_times_trace=" <<
gen->nb_times_trace << endl;
83 cout <<
"nb_times_trace_was_saved="
84 <<
gen->nb_times_trace_was_saved << endl;
94 cout <<
"upstep_work::recognize "
95 "before recognize_recursion"
100 final_node, final_ex,
105 cout <<
"upstep_work::recognize "
106 "after recognize_recursion"
110 cout <<
"upstep_work::recognize "
111 "after recognize_recursion" << endl;
119 int lvl,
int current_node,
120 int &final_node,
int &final_ex,
121 int f_tolerant,
int verbose_level)
129 int pt0, current_extension;
130 int f_v = (verbose_level >= 1);
133 int f_vvv = (verbose_level >= 3);
134 int f_v4 = (verbose_level >= 3);
135 int f_v5 = (verbose_level >= 3);
137 int f_failure_to_find_point;
144 cout <<
"upstep_work::recognize_recursion"
146 <<
" current_node = " << current_node
147 <<
" verbose_level = " << verbose_level
149 cout <<
"node=" << O->
get_node() <<
" prev="
154 if (current_node <
path[lvl]) {
156 cout <<
"upstep_work::recognize_recursion: "
157 "not canonical" << endl;
158 cout <<
"current_node=" << current_node << endl;
159 cout <<
"path[lvl]=" <<
path[lvl] << endl;
172 cout <<
"upstep_work::recognize_recursion: "
173 "node and set inconsistent, "
174 "the node corresponds to" << endl;
185 cout <<
"upstep_work::recognize_recursion "
186 "special handling because of starter" << endl;
191 int *cur_transporter =
193 int *next_transporter =
206 cout <<
"upstep_work::recognize_recursion after trace_starter, "
207 "calling find_automorphism_by_tracing_recursion for node "
221 cout <<
"upstep_work::recognize_recursion "
222 "after trace_starter, "
223 "after recognize_recursion for node "
231 cout <<
"upstep_work::recognize_recursion lvl=" << lvl
232 <<
" current_node=" << current_node
233 <<
" calling O->trace_next_point_wrapper" << endl;
241 f_failure_to_find_point,
242 verbose_level - 5)) {
250 cout <<
"upstep_work::recognize_"
251 "recursion trace_next_point_wrapper returns FALSE, "
252 "starting over" << endl;
265 cout <<
"upstep_work::recognize_after start_over" << endl;
271 cout <<
"upstep_work::recognize_recursion "
272 "after trace_next_point_wrapper" << endl;
275 if (f_failure_to_find_point) {
277 cout <<
"upstep_work::recognize_recursion "
278 "failure to find point" << endl;
286 if (current_extension == -1) {
288 cout <<
"upstep_work::recognize_recursion "
289 "failure in find_extension_from_point" << endl;
290 cout <<
"the original set is" << endl;
297 cout <<
"the current set is" << endl;
304 cout <<
"the node corresponds to" << endl;
309 cout <<
"lvl = " << lvl << endl;
310 cout <<
"current_node = " << current_node << endl;
312 cout <<
"pt0=" << pt0 << endl;
313 cout <<
"gen->set[0][lvl]=" <<
gen->
get_set_i(0)[lvl] << endl;
315 if (current_node ==
path[lvl]
316 && pt0 < gen->get_set_i(0)[lvl]) {
317 cout <<
"since pt0=" << pt0 <<
" is less than '"
319 <<
", we return not_canonical" << endl;
323 if (
gen->f_print_function) {
324 (*
gen->print_function)(cout, lvl,
325 gen->set3,
gen->print_function_data);
346 cout <<
"upstep_work::recognize_recursion "
347 "point " << pt0 <<
" is extension no "
348 << current_extension << endl;
351 cout <<
"upstep_work::recognize_recursion "
352 "transporter element:" << endl;
363 cout <<
"upstep_work::recognize_recursion "
364 "calling handle_last_level" << endl;
365 cout <<
"The element \\alpha is equal to " << endl;
372 cout <<
"upstep_work::recognize_recursion "
373 "before handle_last_level" << endl;
385 cout <<
"upstep_work::recognize_recursion "
386 "after handle_last_level" << endl;
398 cout <<
"upstep_work::find_automorphism_by_"
399 "tracing_recursion at ";
400 cout <<
"(" << current_node
401 <<
"/" << current_extension <<
")";
402 cout <<
" fusion node " << O->
get_node() << endl;
415 cout <<
"upstep_work::find_automorphism_by_"
416 "tracing_recursion lvl "
418 cout <<
"(" << current_node
419 <<
"/" << current_extension <<
")";
420 cout <<
" fusion from " << O->
get_node()
421 <<
" to " << next_node << endl;
423 if (next_node == -1) {
424 cout <<
"We return no_result_extension_not_found" << endl;
429 cout <<
"upstep_work::find_automorphism_by_"
430 "tracing_recursion at ";
431 cout <<
"(" << current_node <<
"/"
432 << current_extension <<
")";
433 cout <<
" after apply_isomorphism, "
434 "next_node=" << next_node << endl;
436 if (next_node <
path[lvl + 1]) {
439 cout <<
"upstep_work::find_automorphism_by_"
440 "tracing_recursion lvl " << lvl
441 <<
" not canonical" << endl;
442 cout <<
"next_node=" << next_node << endl;
443 cout <<
"path[lvl + 1]=" <<
path[lvl + 1] << endl;
450 cout <<
"upstep_work::recognize_recursion "
451 "calling recognize_recursion" << endl;
465 cout <<
"upstep_work::recognize_recursion "
466 "after recognize_recursion" << endl;
475 cout <<
"extension node" << endl;
480 cout <<
"upstep_work::find_automorphism_by_"
481 "tracing_recursion at ";
482 cout <<
"(" << current_node <<
"/" << current_extension <<
")";
483 cout <<
" extension from " << O->
get_node() <<
" to "
484 << next_node << endl;
487 cout <<
"upstep_work::recognize_recursion "
488 "calling recognize_recursion" << endl;
500 cout <<
"upstep_work::recognize_recursion "
501 "after recognize_recursion" << endl;
506 cout <<
"unprocessed node at level len, "
507 "this should not happen" << endl;
511 cout <<
"processing node at level len, "
512 "this should not happen" << endl;
515 cout <<
"unknown type of extension" << endl;
520 int lvl,
int current_node,
521 int current_extension,
int pt0,
522 int &final_node,
int &final_ex,
526 int f_v = (verbose_level >= 1);
527 int f_vv = (verbose_level >= 2);
535 cout <<
"upstep_work::handle_last_level lvl=" << lvl
537 <<
" current_node=" << current_node
538 <<
" current_extension=" << current_extension
542 if (current_node <
path[
size - 1]) {
545 cout <<
"upstep_work::handle_last_level "
546 "current_node=" << current_node
548 <<
", i.e. not canonical" << endl;
553 my_current_node =
cur;
556 cout <<
"upstep_work::handle_last_level "
557 "my_current_node=" << my_current_node << endl;
563 cout <<
"upstep_work::handle_last_level "
564 "calling install_fusion_node at ";
565 cout <<
"(" << current_node <<
"/"
566 << current_extension <<
")" << endl;
584 cout <<
"upstep_work::handle_last_level "
585 "after install_fusion_node at ";
586 cout <<
"(" << current_node <<
"/"
587 << current_extension <<
")" << endl;
592 cout <<
"install fusion node (" << current_node
593 <<
"/" << current_extension <<
") -> ("
598 cout <<
"upstep_work::handle_last_level "
599 "install_fusion_node at ";
600 cout <<
"(" << current_node <<
"/"
601 << current_extension <<
")";
602 cout <<
" done, returning no_result_fusion_"
603 "node_installed" << endl;
605 final_node = current_node;
606 final_ex = current_extension;
613 cout <<
"upstep_work::handle_last_level at ";
614 cout <<
"(" << current_node <<
"/" << current_extension
615 <<
") fusion node already installed, "
616 "returning no_result" << endl;
618 final_node = current_node;
619 final_ex = current_extension;
627 cout <<
"upstep_work::handle_last_level: at ";
628 cout <<
"(" << current_node <<
"/"
629 << current_extension <<
")";
630 cout <<
" extension node is current node, "
631 "i.e. found an automorphism" << endl;
638 final_node = current_node;
639 final_ex = current_extension;
646 cout <<
"upstep_work::handle_last_level: at";
647 cout <<
"(" << current_node <<
"/"
648 << current_extension <<
")";
649 cout <<
" extension node at level len, "
650 "this should not happen" << endl;
651 cout <<
"the original set is" << endl;
654 cout <<
"the current set is" << endl;
657 cout <<
"the node corresponds to" << endl;
668 cout <<
"upstep_work::handle_last_level "
669 "reached EXTENSION_TYPE_NOT_CANONICAL, "
670 "returning not_canonical" << endl;
673 cout <<
"upstep_work::handle_last_level: "
674 "fatal: unknown type of extension" << endl;
679 int lvl,
int current_node,
680 int &final_node,
int &final_ex,
681 int f_tolerant,
int verbose_level)
686 int f_v = (verbose_level >= 1);
687 int f_vv = (verbose_level >= 2);
692 cout <<
"upstep_work::start_over" << endl;
695 if (lvl ==
size - 1) {
698 cout <<
"upstep_work::start_over lvl == size - 1, "
699 "so we return not_canonical" << endl;
701 final_node = current_node;
723 cout <<
"upstep_work::start_over "
724 "before recognize_recursion" << endl;
735 cout <<
"upstep_work::start_over "
736 "after recognize_recursion" << endl;
740 cout <<
"upstep_work::start_over done" << endl;
void set_print(long int *v, int len)
a collection of functions related to sorted vectors
void lint_vec_heapsort(long int *v, int len)
data_structures::lint_vec * Lint_vec
void element_print_quick(void *elt, std::ostream &ost)
void element_move(void *a, void *b, int verbose_level)
actions::action * get_A2()
actions::action * get_A()
poset_with_group_action * get_poset()
poset_orbit_node * get_node(int node_idx)
long int * get_set_i(int i)
classification_base_case * get_Base_case()
int allowed_to_show_group_elements()
data_structures_groups::vector_ge * get_transporter()
to represent one poset orbit; related to the class poset_classification
extension * get_E(int idx)
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)
int check_node_and_set_consistency(poset_classification *gen, int i, long int *set)
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)
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)
int find_extension_from_point(poset_classification *gen, long int pt, int verbose_level)
void store_set_to(poset_classification *gen, int i, long int *to)
void invoke_print_function(std::ostream &ost, int sz, long int *set)
void print_level_extension_coset_info()
trace_result recognize_recursion(int lvl, int current_node, int &final_node, int &final_ex, int f_tolerant, int verbose_level)
trace_result start_over(int lvl, int current_node, int &final_node, int &final_ex, int f_tolerant, int verbose_level)
trace_result handle_last_level(int lvl, int current_node, int current_extension, int pt0, int &final_node, int &final_ex, int verbose_level)
poset_classification * gen
trace_result recognize(int &final_node, int &final_ex, int f_tolerant, int verbose_level)
#define Lint_vec_copy(A, B, C)
#define Lint_vec_print(A, B, C)
orbiter_kernel_system::orbiter_session * Orbiter
global Orbiter session
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
#define EXTENSION_TYPE_PROCESSING
#define EXTENSION_TYPE_FUSION
#define EXTENSION_TYPE_UNPROCESSED
#define EXTENSION_TYPE_NOT_CANONICAL
#define EXTENSION_TYPE_EXTENSION