17namespace layer4_classification {
18namespace poset_classification {
22void poset_classification::report(std::ostream &ost,
26 int f_v = (verbose_level >= 1);
29 cout <<
"poset_classification::report" << endl;
33 cout <<
"poset_classification::report Orbits" << endl;
35 ost <<
"Poset classification up to depth " << depth <<
"\\\\" << endl;
38 ost <<
"\\section*{The Orbits}" << endl;
43 cout <<
"poset_classification::report Number of Orbits By Level" << endl;
46 cout <<
"poset_classification::report before section Number of Orbits By Level" << endl;
50 ost <<
"\\subsection*{Number of Orbits By Level}" << endl;
53 cout <<
"poset_classification::report before report_number_of_orbits_at_level" << endl;
57 cout <<
"poset_classification::report after report_number_of_orbits_at_level" << endl;
63 cout <<
"poset_classification::report before section Summary of Orbit Representatives" << endl;
69 ost <<
"\\subsection*{Summary of Orbit Representatives}" << endl;
73 cout <<
"poset_classification::report before report_orbits_summary" << endl;
77 cout <<
"poset_classification::report after report_orbits_summary" << endl;
88 cout <<
"poset_classification::report before section The Poset of Orbits: Diagram" << endl;
90 ost <<
"\\section*{The Poset of Orbits: Diagram}" << endl;
96 cout <<
"please use option -draw_poset if you want to draw the poset" << endl;
101 cout <<
"poset_classification::report before section Poset of Orbits in Detail" << endl;
106 ost <<
"\\section*{Poset of Orbits in Detail}" << endl;
113 cout <<
"poset_classification::report done" << endl;
118void poset_classification::report_orbits_in_detail(std::ostream &ost,
122 int f_v = (verbose_level >= 1);
125 cout <<
"poset_classification::report_orbits_in_detail" << endl;
131 for (level = 0; level <= depth; level++) {
138 cout <<
"poset_classification::report Orbits at Level " << level <<
":" << endl;
141 ost <<
"\\subsection*{Orbits at Level " << level <<
"}" << endl;
147 ost <<
"There are " << nb_orbits <<
" orbits at level " << level <<
".\\\\" << endl;
148 ost <<
"\\bigskip" << endl;
150 for (orbit_at_level = 0;
151 orbit_at_level < nb_orbits;
160 cout <<
"poset_classification::report_orbits_in_detail done" << endl;
164void poset_classification::report_number_of_orbits_at_level(std::ostream &ost,
171 for (i = 0; i <= depth; i++) {
175 ost <<
"\\begin{array}{|r|r|r|}" << endl;
176 ost <<
"\\hline" << endl;
177 ost <<
"\\mbox{Depth} & \\mbox{Nb of orbits} & \\mbox{Ago}\\\\" << endl;
178 ost <<
"\\hline" << endl;
179 ost <<
"\\hline" << endl;
180 for (i = 0; i <= depth; i++) {
189 ost << i <<
" & " << N[i] <<
" & ";
198 ost <<
"\\\\" << endl;
199 ost <<
"\\hline" << endl;
201 ost <<
"\\end{array}" << endl;
209void poset_classification::report_orbits_summary(std::ostream &ost,
212 int f_v = (verbose_level >= 1);
213 int f_vv = (verbose_level >= 10);
216 cout <<
"poset_classification::report_orbits_summary" << endl;
219 ost <<
"N = node\\\\" << endl;
220 ost <<
"D = depth or level\\\\" << endl;
221 ost <<
"O = orbit with a level\\\\" << endl;
222 ost <<
"Rep = orbit representative\\\\" << endl;
223 ost <<
"(S,O) = (order of stabilizer, orbit length)\\\\" << endl;
224 ost <<
"L = number of live points\\\\" << endl;
225 ost <<
"F = number of flags\\\\" << endl;
227 ost <<
"Gen = number of generators for the stabilizer of the orbit rep.\\\\" << endl;
228 ost <<
"\\begin{center}" << endl;
229 ost <<
"\\begin{longtable}{|r|r|r|p{3cm}|r|r|r|r|}" << endl;
230 ost <<
"\\caption{Orbit Representatives}\\\\" << endl;
232 ost <<
"\\hline N & D & O & Rep & (S,O) "
233 "& L & F & Gen\\\\ \\hline " << endl;
234 ost <<
"\\endfirsthead" << endl;
236 ost <<
"\\multicolumn{8}{c}%" << endl;
237 ost <<
"{{\\bfseries \\tablename\\ \\thetable{} -- continued "
238 "from previous page}} \\\\" << endl;
239 ost <<
"\\hline N & D & O & Rep & (S,O) "
240 "& L & F & Gen\\\\ \\hline " << endl;
241 ost <<
"\\endhead" << endl;
243 ost <<
"\\hline \\multicolumn{8}{|r|}{{Continued on next page}} "
244 "\\\\ \\hline" << endl;
245 ost <<
"\\endfoot" << endl;
247 ost <<
"\\hline \\hline" << endl;
248 ost <<
"\\endlastfoot" << endl;
251 int level, nb_orbits, cnt, nb_live_pts, nb_extensions, nbg;
252 long int *rep = NULL;
263 cout <<
"poset_classification::report_orbits_summary printing orbit representative" << endl;
267 for (level = 0; level <= depth; level++) {
270 cout <<
"poset_classification::report_orbits_summary printing orbit representative at level " << level << endl;
281 for (i = 0; i < nb_orbits; i++) {
284 cout <<
"poset_classification::report_orbits_summary printing orbit representative at level " << level <<
" orbit " << i << endl;
292 cout <<
"poset_classification::report_orbits_summary set: '" << str <<
"'" << endl;
296 cout <<
"poset_classification::report_orbits_summary before get_orbit_length_and_stabilizer_order" << endl;
302 cout <<
"poset_classification::report_orbits_summary after get_orbit_length_and_stabilizer_order" << endl;
321 cout <<
"poset_classification::report_orbits_summary after get_node_ij" << endl;
325 cout <<
"poset_classification::report_orbits_summary before O->get_Schreier_vector" << endl;
329 if (level < depth && Schreier_vector) {
330 if (Schreier_vector == NULL) {
331 cout <<
"poset_classification::report_orbits_summary Schreier_vector == NULL" << endl;
335 cout <<
"poset_classification::report_orbits_summary level < depth; level=" << level << endl;
338 cout <<
"poset_classification::report_orbits_summary before O->get_nb_of_live_points" << endl;
342 cout <<
"poset_classification::report_orbits_summary after O->get_nb_of_live_points" << endl;
345 cout <<
"poset_classification::report_orbits_summary before O->get_nb_of_extensions" << endl;
349 cout <<
"poset_classification::report_orbits_summary after O->get_nb_of_extensions" << endl;
354 cout <<
"poset_classification::report_orbits_summary before Schreier_vector->local_gens->len" << endl;
358 cout <<
"poset_classification::report_orbits_summary after Schreier_vector->local_gens->len" << endl;
363 cout <<
"poset_classification::report_orbits_summary before O->get_nb_strong_generators" << endl;
367 cout <<
"poset_classification::report_orbits_summary after O->get_nb_strong_generators" << endl;
373 cout <<
"poset_classification::report_orbits_summary level < depth is false" << endl;
381 cout <<
"poset_classification::report_orbits_summary nb_live_pts=" << nb_live_pts
382 <<
" nb_extensions=" << nb_extensions
383 <<
" nbg=" << nbg << endl;
386 ost << cnt <<
" & " << level <<
" & " << i
387 <<
" & $\\{$ " << str <<
" $\\}$ & ("
388 << stab_order <<
", "
391 if (nb_live_pts >= 0) {
392 ost << nb_live_pts <<
" & ";
397 if (nb_extensions >= 0) {
398 ost << nb_extensions <<
" & ";
412 ost << nbg <<
"\\\\" << endl;
415 ost <<
"\\\\" << endl;
421 ost <<
"\\hline" << endl;
424 ost <<
"\\end{longtable}" << endl;
425 ost <<
"\\end{center}" << endl;
431 cout <<
"poset_classification::report_orbits_summary done" << endl;
438void poset_classification::report_poset_of_orbits(std::ostream &ost,
int verbose_level)
441 int f_v = (verbose_level >= 1);
444 cout <<
"poset_classification::report_poset_of_orbits depth=" << depth << endl;
449 string fname_out_base;
455 fname_out_base.append(
"_draw");
466 cout <<
"poset_classification::report_poset_of_orbits "
467 "We need -orbiter_path to be set" << endl;
472 cmd.append(
"/orbiter.out -v 3 -draw_layered_graph ");
473 cmd.append(fname_poset);
478 cout <<
"poset_classification::report_poset_of_orbits "
479 "We need -draw_options to be set in -poset_classification_control" << endl;
483 sprintf(str,
" -xin %d -yin %d -xout %d -yout %d -radius %d",
501 sprintf(str,
" -spanning_tree ");
505 cout <<
"executing: " << cmd << endl;
508 cmd.assign(
"mpost -tex=latex ");
509 cmd.append(fname_out_base);
511 cout <<
"executing: " << cmd << endl;
515 ost <<
"\\input " << fname_out_base <<
".tex" << endl;
519 cout <<
"poset_classification::report_poset_of_orbits done" << endl;
524void poset_classification::report_orbit(
int level,
int orbit_at_level,
535 long int *rep = NULL;
554 ost <<
"\\subsection*{Orbit " << orbit_at_level
555 <<
" / " << nb_orbits <<
" at Level " << level <<
"}" << endl;
558 ost <<
"Node number: " << O->
get_node() <<
"\\\\" << endl;
559 ost <<
"Parent node: " << O->
get_prev() <<
"\\\\" << endl;
575 if (projectivity_group_gens) {
578 projectivity_group_gens->
group_order(proj_stab_order);
604 if (projectivity_group_gens) {
607 projectivity_group_gens = NULL;
618 ost <<
"{\\small\\arraycolsep=2pt" << endl;
626 ost <<
"There are " << nb_extensions
627 <<
" extensions\\\\" << endl;
631 if (Schreier_vector) {
636 ost <<
"Generators for the Schreier trees:\\\\" << endl;
637 ost <<
"{\\small\\arraycolsep=2pt" << endl;
651 if (nb_o != nb_orbits_sv) {
652 cout <<
"nb_o != nb_orbits_sv" << endl;
659 ost <<
"Orbit type of flag orbits: \\\\" << endl;
664 for (h = 0; h < nb_o; h++) {
665 ost <<
"\\noindent Orbit " << h <<
" / " << nb_o
666 <<
": Point " << orbit_reps[h]
667 <<
" lies in an orbit of length "
671 ost <<
" $H_{" << nb_gens <<
"} = "
672 << (double) log(total_depth[h]) / log(nb_gens) <<
"$";
674 double delta = (double) total_depth[h] / (
double)
orbit_length[h];
675 delta -= ((double) log(total_depth[h]) / log(nb_gens));
676 ost <<
", $\\Delta = " << delta <<
"$";
677 ost <<
"\\\\" << endl;
682 string fname_mask_base;
689 for (j = 0; j < nb_orbits_sv; j++) {
692 char fname_layered_graph[2000];
693 char fname_tex[2000];
697 snprintf(fname_base, 1000, fname_mask_base, j);
698 snprintf(fname_layered_graph, 2000,
"%s.layered_graph",
700 snprintf(fname_tex, 2000,
"%s_draw_tree.tex", fname_base);
701 snprintf(fname_mp, 2000,
"%s_draw_tree.mp", fname_base);
702 snprintf(fname_1, 2000,
"%s_draw_tree.1", fname_base);
704 if (Control->f_has_tools_path) {
705 snprintf(cmd, 10000,
"%s/layered_graph_main.out -v 2 "
707 "-xin 1000000 -yin 1000000 "
708 "-xout 1000000 -yout 1000000 "
716 Control->tools_path, fname_layered_graph);
717 cout <<
"executing: " << cmd << endl;
720 snprintf(cmd, 10000,
"mpost %s", fname_mp);
721 cout <<
"executing: " << cmd << endl;
724 ost <<
"\\subsubsection*{Node " << O->node <<
" at Level "
725 << level <<
" Orbit " << orbit_at_level
726 <<
" / " << nb_orbits
727 <<
" Tree " << j <<
" / " << nb_orbits_sv <<
"}" << endl;
734 nbg = O->nb_strong_generators;
736 ost <<
"Number of generators " << nbg
741 ost <<
"\\includegraphics[width=160mm]{"
742 << fname_1 <<
"}\\" << endl;
757 ost <<
"\\noindent Extension number " << e <<
"\\\\" << endl;
758 ost <<
"Orbit representative " << orbit_reps[j] <<
"\\\\" << endl;
759 ost <<
"Flag orbit length " << O->E[e].orbit_len <<
"\\\\" << endl;
762 ost <<
"Flag orbit is unprocessed.\\\\" << endl;
765 ost <<
"Flag orbit is defining new orbit " << O->E[e].data <<
" at level " << level + 1 <<
"\\\\" << endl;
768 ost <<
"Flag orbit is fused to node " << O->E[e].data1 <<
" extension " << O->E[e].data2 <<
"\\\\" << endl;
769 ost <<
"Fusion element:\\\\" << endl;
777 ost <<
"\\\\" << endl;
782 ost <<
"Cannot find an extension for point " << orbit_reps[j] <<
"\\\\" << endl;
void print_to_str_naked(char *str, long int *data, int len)
a statistical analysis of data consisting of single integers
void init(int *data, int data_length, int f_second, int verbose_level)
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)
interface to create latex output files
void lint_set_print_tex(std::ostream &ost, long int *v, int len)
data_structures::lint_vec * Lint_vec
a class to represent arbitrary precision integers
void print_to_string(char *str)
void element_print_latex(void *elt, std::ostream &ost)
void compute_projectivity_subgroup(groups::strong_generators *&projectivity_gens, groups::strong_generators *Aut_gens, int verbose_level)
void element_retrieve(int hdl, void *elt, int verbose_level)
void element_print_for_make_element(void *elt, std::ostream &ost)
void latex_point_set(std::ostream &ost, long int *set, int sz, int verbose_level)
compact storage of schreier vectors
int f_has_local_generators
void orbit_stats(int &nb_orbits, int *&orbit_reps, int *&orbit_length, int *&total_depth, int verbose_level)
void print_generators_tex(ring_theory::longinteger_object &go, std::ostream &ost)
a strong generating set for a permutation group with respect to a fixed action
void print_generators_tex()
data_structures_groups::vector_ge * gens
void group_order(ring_theory::longinteger_object &go)
graphics::layered_graph_draw_options * draw_options
to control the behavior of the poset classification report function
int is_selected_by_group_order(long int so)
int select_orbits_by_level_level
int f_select_orbits_by_level
void get_all_stabilizer_orders_at_level(int level, long int *&Ago, int &nb)
void report_orbits_summary(std::ostream &ost, poset_classification_report_options *Opt, int verbose_level)
void orbit_length(int orbit_at_level, int level, ring_theory::longinteger_object &len)
poset_orbit_node * get_node_ij(int level, int node)
int nb_orbits_at_level(int level)
void draw_poset_fname_base_poset_lvl(std::string &fname, int depth)
void get_set_by_level(int level, int node, long int *set)
void get_orbit_length_and_stabilizer_order(int node, int level, ring_theory::longinteger_object &stab_order, ring_theory::longinteger_object &len)
void report_poset_of_orbits(std::ostream &ost, int verbose_level)
void get_stabilizer_generators(groups::strong_generators *&gens, int level, int orbit_at_level, int verbose_level)
void report_orbit(int level, int orbit_at_level, poset_classification_report_options *Opt, std::ostream &ost)
void create_shallow_schreier_tree_fname_mask_base(std::string &fname_mask)
void draw_poset_fname_poset(std::string &fname, int depth)
void report_number_of_orbits_at_level(std::ostream &ost, poset_classification_report_options *Opt)
void report_orbits_in_detail(std::ostream &ost, poset_classification_report_options *Opt, int verbose_level)
to represent one poset orbit; related to the class poset_classification
data_structures_groups::schreier_vector * get_Schreier_vector()
int get_nb_strong_generators()
int get_nb_of_live_points()
long int get_stabilizer_order_lint(poset_classification *PC)
int find_extension_from_point(poset_classification *gen, long int pt, int verbose_level)
int get_nb_of_extensions()
orbiter_kernel_system::orbiter_session * Orbiter
global Orbiter session
the orbiter library for the classification of combinatorial objects
#define EXTENSION_TYPE_FUSION
#define EXTENSION_TYPE_UNPROCESSED
#define EXTENSION_TYPE_EXTENSION