Orbiter 2022
Combinatorial Objects
poset_classification_report.cpp
Go to the documentation of this file.
1/*
2 * poset_classification_report.cpp
3 *
4 * Created on: May 5, 2019
5 * Author: betten
6 */
7
8
10#include "discreta/discreta.h"
13
14using namespace std;
15
16namespace orbiter {
17namespace layer4_classification {
18namespace poset_classification {
19
20
21
22void poset_classification::report(std::ostream &ost,
24 int verbose_level)
25{
26 int f_v = (verbose_level >= 1);
27
28 if (f_v) {
29 cout << "poset_classification::report" << endl;
30 }
31
32 if (f_v) {
33 cout << "poset_classification::report Orbits" << endl;
34 }
35 ost << "Poset classification up to depth " << depth << "\\\\" << endl;
36
37 ost << endl;
38 ost << "\\section*{The Orbits}" << endl;
39 ost << endl;
40
41
42 if (f_v) {
43 cout << "poset_classification::report Number of Orbits By Level" << endl;
44 }
45 if (f_v) {
46 cout << "poset_classification::report before section Number of Orbits By Level" << endl;
47 }
48
49
50 ost << "\\subsection*{Number of Orbits By Level}" << endl;
51
52 if (f_v) {
53 cout << "poset_classification::report before report_number_of_orbits_at_level" << endl;
54 }
56 if (f_v) {
57 cout << "poset_classification::report after report_number_of_orbits_at_level" << endl;
58 }
59
60
61
62 if (f_v) {
63 cout << "poset_classification::report before section Summary of Orbit Representatives" << endl;
64 }
65
66
67
68 ost << endl;
69 ost << "\\subsection*{Summary of Orbit Representatives}" << endl;
70 ost << endl;
71
72 if (f_v) {
73 cout << "poset_classification::report before report_orbits_summary" << endl;
74 }
75 report_orbits_summary(ost, Opt, verbose_level);
76 if (f_v) {
77 cout << "poset_classification::report after report_orbits_summary" << endl;
78 }
79
80
81 ost << endl;
82
83
84
85 if (Control->f_draw_poset) {
86
87 if (f_v) {
88 cout << "poset_classification::report before section The Poset of Orbits: Diagram" << endl;
89 }
90 ost << "\\section*{The Poset of Orbits: Diagram}" << endl;
91
92 report_poset_of_orbits(ost, verbose_level);
93
94 }
95 else {
96 cout << "please use option -draw_poset if you want to draw the poset" << endl;
97 }
98
99
100 if (f_v) {
101 cout << "poset_classification::report before section Poset of Orbits in Detail" << endl;
102 }
103
104
105 ost << endl;
106 ost << "\\section*{Poset of Orbits in Detail}" << endl;
107 ost << endl;
108
109 report_orbits_in_detail(ost, Opt, verbose_level);
110
111
112 if (f_v) {
113 cout << "poset_classification::report done" << endl;
114 }
115
116}
117
118void poset_classification::report_orbits_in_detail(std::ostream &ost,
120 int verbose_level)
121{
122 int f_v = (verbose_level >= 1);
123
124 if (f_v) {
125 cout << "poset_classification::report_orbits_in_detail" << endl;
126 }
127 int orbit_at_level;
128 int level;
129 int nb_orbits;
130
131 for (level = 0; level <= depth; level++) {
132
133 if (Opt->f_select_orbits_by_level && level != Opt->select_orbits_by_level_level) {
134 continue;
135 }
136
137 if (f_v) {
138 cout << "poset_classification::report Orbits at Level " << level << ":" << endl;
139 }
140 ost << endl;
141 ost << "\\subsection*{Orbits at Level " << level << "}" << endl;
142 ost << endl;
143
144
145 nb_orbits = nb_orbits_at_level(level);
146
147 ost << "There are " << nb_orbits << " orbits at level " << level << ".\\\\" << endl;
148 ost << "\\bigskip" << endl;
149
150 for (orbit_at_level = 0;
151 orbit_at_level < nb_orbits;
152 orbit_at_level++) {
153
154 report_orbit(level, orbit_at_level, Opt, ost);
155
156 }
157 }
158
159 if (f_v) {
160 cout << "poset_classification::report_orbits_in_detail done" << endl;
161 }
162}
163
164void poset_classification::report_number_of_orbits_at_level(std::ostream &ost,
166{
167 int *N;
168 int i;
169
170 N = NEW_int(depth + 1);
171 for (i = 0; i <= depth; i++) {
172 N[i] = nb_orbits_at_level(i);
173 }
174 ost << "$$" << endl;
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++) {
181
182 long int *Ago;
183 int nb;
184
186
187
188
189 ost << i << " & " << N[i] << " & ";
190
192
193 T.init_lint(Ago, nb, FALSE, 0);
194 T.print_file_tex_we_are_in_math_mode(ost, TRUE /* f_backwards */);
195
196
197
198 ost << "\\\\" << endl;
199 ost << "\\hline" << endl;
200 }
201 ost << "\\end{array}" << endl;
202 ost << "$$" << endl;
203
204 ost << endl;
205 FREE_int(N);
206
207}
208
209void poset_classification::report_orbits_summary(std::ostream &ost,
210 poset_classification_report_options *Opt, int verbose_level)
211{
212 int f_v = (verbose_level >= 1);
213 int f_vv = (verbose_level >= 10);
214
215 if (f_v) {
216 cout << "poset_classification::report_orbits_summary" << endl;
217 }
218
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;
226 //ost << "FO = number of flag orbits\\\\" << 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;
231 ost << endl;
232 ost << "\\hline N & D & O & Rep & (S,O) "
233 "& L & F & Gen\\\\ \\hline " << endl;
234 ost << "\\endfirsthead" << endl;
235 ost << 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;
242 ost << endl;
243 ost << "\\hline \\multicolumn{8}{|r|}{{Continued on next page}} "
244 "\\\\ \\hline" << endl;
245 ost << "\\endfoot" << endl;
246 ost << endl;
247 ost << "\\hline \\hline" << endl;
248 ost << "\\endlastfoot" << endl;
249
250 int i;
251 int level, nb_orbits, cnt, nb_live_pts, nb_extensions, /*nbo,*/ nbg;
252 long int *rep = NULL;
253 char str[1000];
258
259
260 rep = NEW_lint(depth + 1);
261
262 if (f_vv) {
263 cout << "poset_classification::report_orbits_summary printing orbit representative" << endl;
264 }
265
266 cnt = 0;
267 for (level = 0; level <= depth; level++) {
268
269 if (f_vv) {
270 cout << "poset_classification::report_orbits_summary printing orbit representative at level " << level << endl;
271 }
272
273
274 if (Opt->f_select_orbits_by_level && level != Opt->select_orbits_by_level_level) {
275 continue;
276 }
277
278
279
280 nb_orbits = nb_orbits_at_level(level);
281 for (i = 0; i < nb_orbits; i++) {
282
283 if (f_vv) {
284 cout << "poset_classification::report_orbits_summary printing orbit representative at level " << level << " orbit " << i << endl;
285 }
286
287 get_set_by_level(level, i, rep);
288
290
291 if (f_vv) {
292 cout << "poset_classification::report_orbits_summary set: '" << str << "'" << endl;
293 }
294
295 if (f_vv) {
296 cout << "poset_classification::report_orbits_summary before get_orbit_length_and_stabilizer_order" << endl;
297 }
299 stab_order, orbit_length);
300
301 if (f_vv) {
302 cout << "poset_classification::report_orbits_summary after get_orbit_length_and_stabilizer_order" << endl;
303 }
304
305 //stab_order.print_to_string(str);
306
307 //orbit_length.print_to_string(str);
308
309 O = get_node_ij(level, i);
310
311 long int so;
312
313 so = O->get_stabilizer_order_lint(this);
314
315 if (!Opt->is_selected_by_group_order(so)) {
316 continue;
317 }
318
319
320 if (f_vv) {
321 cout << "poset_classification::report_orbits_summary after get_node_ij" << endl;
322 }
323
324 if (f_vv) {
325 cout << "poset_classification::report_orbits_summary before O->get_Schreier_vector" << endl;
326 }
327 Schreier_vector = O->get_Schreier_vector();
328
329 if (level < depth && Schreier_vector) {
330 if (Schreier_vector == NULL) {
331 cout << "poset_classification::report_orbits_summary Schreier_vector == NULL" << endl;
332 exit(1);
333 }
334 if (f_vv) {
335 cout << "poset_classification::report_orbits_summary level < depth; level=" << level << endl;
336 }
337 if (f_vv) {
338 cout << "poset_classification::report_orbits_summary before O->get_nb_of_live_points" << endl;
339 }
340 nb_live_pts = O->get_nb_of_live_points();
341 if (f_vv) {
342 cout << "poset_classification::report_orbits_summary after O->get_nb_of_live_points" << endl;
343 }
344 if (f_vv) {
345 cout << "poset_classification::report_orbits_summary before O->get_nb_of_extensions" << endl;
346 }
347 nb_extensions = O->get_nb_of_extensions();
348 if (f_vv) {
349 cout << "poset_classification::report_orbits_summary after O->get_nb_of_extensions" << endl;
350 }
351 //nbo = O->get_nb_of_orbits_under_stabilizer();
352 if (Schreier_vector->f_has_local_generators) {
353 if (f_vv) {
354 cout << "poset_classification::report_orbits_summary before Schreier_vector->local_gens->len" << endl;
355 }
356 nbg = Schreier_vector->local_gens->len;
357 if (f_vv) {
358 cout << "poset_classification::report_orbits_summary after Schreier_vector->local_gens->len" << endl;
359 }
360 }
361 else {
362 if (f_vv) {
363 cout << "poset_classification::report_orbits_summary before O->get_nb_strong_generators" << endl;
364 }
365 nbg = O->get_nb_strong_generators();
366 if (f_vv) {
367 cout << "poset_classification::report_orbits_summary after O->get_nb_strong_generators" << endl;
368 }
369 }
370 }
371 else {
372 if (f_vv) {
373 cout << "poset_classification::report_orbits_summary level < depth is false" << endl;
374 }
375 nb_live_pts = -1;
376 nb_extensions = -1;
377 //nbo = -1;
378 nbg = O->get_nb_strong_generators();
379 }
380 if (f_vv) {
381 cout << "poset_classification::report_orbits_summary nb_live_pts=" << nb_live_pts
382 << " nb_extensions=" << nb_extensions
383 << " nbg=" << nbg << endl;
384 }
385
386 ost << cnt << " & " << level << " & " << i
387 << " & $\\{$ " << str << " $\\}$ & ("
388 << stab_order << ", "
389 << orbit_length << ") & ";
390
391 if (nb_live_pts >= 0) {
392 ost << nb_live_pts << " & ";
393 }
394 else {
395 ost << " & ";
396 }
397 if (nb_extensions >= 0) {
398 ost << nb_extensions << " & ";
399 }
400 else {
401 ost << " & ";
402 }
403#if 0
404 if (nbo >= 0) {
405 ost << nbo << " & ";
406 }
407 else {
408 ost << " & ";
409 }
410#endif
411 if (nbg >= 0) {
412 ost << nbg << "\\\\" << endl;
413 }
414 else {
415 ost << "\\\\" << endl;
416 }
417
418
419 cnt++;
420 }
421 ost << "\\hline" << endl;
422 }
423
424 ost << "\\end{longtable}" << endl;
425 ost << "\\end{center}" << endl;
426 ost << endl;
427
428 FREE_lint(rep);
429
430 if (f_v) {
431 cout << "poset_classification::report_orbits_summary done" << endl;
432 }
433
434
435}
436
437
438void poset_classification::report_poset_of_orbits(std::ostream &ost, int verbose_level)
439{
440
441 int f_v = (verbose_level >= 1);
442
443 if (f_v) {
444 cout << "poset_classification::report_poset_of_orbits depth=" << depth << endl;
445 }
446
447 string fname_base;
448 string fname_poset;
449 string fname_out_base;
450
451 draw_poset_fname_base_poset_lvl(fname_base, depth);
452 draw_poset_fname_poset(fname_poset, depth);
453 draw_poset_fname_base_poset_lvl(fname_out_base, depth);
454
455 fname_out_base.append("_draw");
456
457 string cmd;
458
459
460 if (orbiter_kernel_system::Orbiter->f_orbiter_path) {
461
462 cmd.assign(orbiter_kernel_system::Orbiter->orbiter_path);
463
464 }
465 else {
466 cout << "poset_classification::report_poset_of_orbits "
467 "We need -orbiter_path to be set" << endl;
468 exit(1);
469
470 }
471
472 cmd.append("/orbiter.out -v 3 -draw_layered_graph ");
473 cmd.append(fname_poset);
474
475 char str[1000];
476
477 if (!Control->f_draw_options) {
478 cout << "poset_classification::report_poset_of_orbits "
479 "We need -draw_options to be set in -poset_classification_control" << endl;
480 exit(1);
481 }
482
483 sprintf(str, " -xin %d -yin %d -xout %d -yout %d -radius %d",
484 Control->draw_options->xin,
485 Control->draw_options->yin,
486 Control->draw_options->xout,
487 Control->draw_options->yout,
488 Control->draw_options->rad);
489 cmd.append(str);
490
491 if (Control->draw_options->f_y_stretch) {
492 sprintf(str, " -y_stretch %lf ", Control->draw_options->y_stretch);
493 cmd.append(str);
494 }
495
496 if (Control->draw_options->f_line_width) {
497 sprintf(str, " -line_width %lf ", Control->draw_options->line_width);
498 cmd.append(str);
499 }
500 if (Control->draw_options->f_spanning_tree) {
501 sprintf(str, " -spanning_tree ");
502 cmd.append(str);
503 }
504
505 cout << "executing: " << cmd << endl;
506 system(cmd.c_str());
507
508 cmd.assign("mpost -tex=latex ");
509 cmd.append(fname_out_base);
510 cmd.append(".mp");
511 cout << "executing: " << cmd << endl;
512 system(cmd.c_str());
513
514
515 ost << "\\input " << fname_out_base << ".tex" << endl;
516 //ost << "\\includegraphics[width=160mm]{" << fname_mp << ".1}\\\\" << endl;
517
518 if (f_v) {
519 cout << "poset_classification::report_poset_of_orbits done" << endl;
520 }
521}
522
523
524void poset_classification::report_orbit(int level, int orbit_at_level,
526 std::ostream &ost)
527{
528 int nb_orbits;
529 int nb_gens;
530 int nb_extensions;
533 char str[1000];
534 char str2[1000];
535 long int *rep = NULL;
538 long int so;
539
540 str2[0] = 0;
541 rep = NEW_lint(depth + 1);
542
543
544 nb_orbits = nb_orbits_at_level(level);
545
546 O = get_node_ij(level, orbit_at_level);
547
548 so = O->get_stabilizer_order_lint(this);
549
550 if (!Opt->is_selected_by_group_order(so)) {
551 return;
552 }
553
554 ost << "\\subsection*{Orbit " << orbit_at_level
555 << " / " << nb_orbits << " at Level " << level << "}" << endl;
556
557
558 ost << "Node number: " << O->get_node() << "\\\\" << endl;
559 ost << "Parent node: " << O->get_prev() << "\\\\" << endl;
560
561
562
563
565
567 level, orbit_at_level, Control->verbose_level);
568
569 groups::strong_generators *projectivity_group_gens;
570
571 Poset->A->compute_projectivity_subgroup(projectivity_group_gens,
572 gens, 0 /*verbose_level*/);
573
574
575 if (projectivity_group_gens) {
576 ring_theory::longinteger_object proj_stab_order;
577
578 projectivity_group_gens->group_order(proj_stab_order);
579 proj_stab_order.print_to_string(str2);
580 }
581
582 get_orbit_length_and_stabilizer_order(orbit_at_level, level,
583 stab_order, orbit_length);
584
585
586
587 stab_order.print_to_string(str);
588
589 //orbit_length.print_to_string(str);
590
591 Schreier_vector = O->get_Schreier_vector();
592
593
594 get_set_by_level(level, orbit_at_level, rep);
595
596
597 // print the set and stabilizer order:
598
599
600 ost << "$$" << endl;
601 L.lint_set_print_tex(ost, rep, level);
602 ost << "_{";
603 ost << str;
604 if (projectivity_group_gens) {
605 ost << "," << str2;
606 FREE_OBJECT(projectivity_group_gens);
607 projectivity_group_gens = NULL;
608 }
609 ost << "}";
610 ost << "$$" << endl;
611
612
613 // print strong generators for the stabilizer:
614
615 Poset->A2->latex_point_set(ost, rep, level, 0 /* verbose_level*/);
616
617
618 ost << "{\\small\\arraycolsep=2pt" << endl;
619 gens->print_generators_tex(ost);
620 ost << "}" << endl;
621
622 nb_gens = gens->gens->len;
623
624 nb_extensions = O->get_nb_of_extensions();
625 //ost << "There are " << nbo << " orbits\\\\" << endl;
626 ost << "There are " << nb_extensions
627 << " extensions\\\\" << endl;
628 ost << "Number of generators " << O->get_nb_strong_generators()
629 << "\\\\" << endl;
630
631 if (Schreier_vector) {
632 int nb_orbits_sv = Schreier_vector->number_of_orbits;
633
634 if (Schreier_vector->f_has_local_generators) {
635
636 ost << "Generators for the Schreier trees:\\\\" << endl;
637 ost << "{\\small\\arraycolsep=2pt" << endl;
638 Schreier_vector->local_gens->print_generators_tex(stab_order, ost);
639 ost << "}" << endl;
640
641 nb_gens = Schreier_vector->local_gens->len;
642 }
643
644 int nb_o, h;
645 int *orbit_reps;
646 int *orbit_length;
647 int *total_depth;
648 Schreier_vector->orbit_stats(
649 nb_o, orbit_reps, orbit_length, total_depth,
650 0 /*verbose_level*/);
651 if (nb_o != nb_orbits_sv) {
652 cout << "nb_o != nb_orbits_sv" << endl;
653 exit(1);
654 }
655
657
658 T.init(orbit_length, nb_o, FALSE, 0);
659 ost << "Orbit type of flag orbits: \\\\" << endl;
660 ost << "$$" << endl;
661 T.print_file_tex_we_are_in_math_mode(ost, TRUE /* f_backwards*/);
662 ost << "$$" << endl;
663
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 "
668 << orbit_length[h] << " with average word length "
669 << (double) total_depth[h] / (double) orbit_length[h];
670 if (nb_gens > 1) {
671 ost << " $H_{" << nb_gens << "} = "
672 << (double) log(total_depth[h]) / log(nb_gens) << "$";
673 }
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;
678 }
679
680
681#if 0
682 string fname_mask_base;
683
685 fname_mask_base, O->get_node());
686 //create_schreier_tree_fname_mask_base(
687 //fname_mask_base, O->node);
688
689 for (j = 0; j < nb_orbits_sv; j++) {
690
691 //char fname_base[1000];
692 char fname_layered_graph[2000];
693 char fname_tex[2000];
694 char fname_mp[2000];
695 char fname_1[2000];
696
697 snprintf(fname_base, 1000, fname_mask_base, j);
698 snprintf(fname_layered_graph, 2000, "%s.layered_graph",
699 fname_base);
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);
703
704 if (Control->f_has_tools_path) {
705 snprintf(cmd, 10000, "%s/layered_graph_main.out -v 2 "
706 "-file %s "
707 "-xin 1000000 -yin 1000000 "
708 "-xout 1000000 -yout 1000000 "
709 "-y_stretch 0.3 "
710 "-rad 2000 "
711 "-nodes_empty "
712 "-corners "
713 //"-embedded "
714 "-line_width 0.30 "
715 "-spanning_tree",
716 Control->tools_path, fname_layered_graph);
717 cout << "executing: " << cmd << endl;
718 system(cmd);
719
720 snprintf(cmd, 10000, "mpost %s", fname_mp);
721 cout << "executing: " << cmd << endl;
722 system(cmd);
723
724 ost << "\\subsubsection*{Node " << O->node << " at Level "
725 << level << " Orbit " << orbit_at_level
726 << " / " << nb_orbits
727 << " Tree " << j << " / " << nb_orbits_sv << "}" << endl;
728
729 //nbo = Schreier_vector->number_of_orbits;
730 if (Schreier_vector->f_has_local_generators) {
731 nbg = Schreier_vector->local_gens->len;
732 }
733 else {
734 nbg = O->nb_strong_generators;
735 }
736 ost << "Number of generators " << nbg
737 << "\\\\" << endl;
738
739
740 //ost << "\\input " << fname_tex << endl;
741 ost << "\\includegraphics[width=160mm]{"
742 << fname_1 << "}\\" << endl;
743 }
744 else {
745 //cout << "please set tools path using "
746 // "-tools_path <tools_path>" << endl;
747 //exit(1);
748 }
749
750 int e;
751
752 e = O->find_extension_from_point(this, orbit_reps[j],
753 0 /* verbose_level */);
754
755 if (e >= 0) {
756 ost << 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;
760
761 if (O->E[e].type == EXTENSION_TYPE_UNPROCESSED) {
762 ost << "Flag orbit is unprocessed.\\\\" << endl;
763 }
764 else if (O->E[e].type == EXTENSION_TYPE_EXTENSION) {
765 ost << "Flag orbit is defining new orbit " << O->E[e].data << " at level " << level + 1 << "\\\\" << endl;
766 }
767 else if (O->E[e].type == EXTENSION_TYPE_FUSION) {
768 ost << "Flag orbit is fused to node " << O->E[e].data1 << " extension " << O->E[e].data2 << "\\\\" << endl;
769 ost << "Fusion element:\\\\" << endl;
770 ost << "$$" << endl;
771
772 Poset->A->element_retrieve(O->E[e].data, Elt1, 0);
773
774 Poset->A->element_print_latex(Elt1, ost);
775 ost << "$$" << endl;
776 Poset->A->element_print_for_make_element(Elt1, ost);
777 ost << "\\\\" << endl;
778 }
779 }
780 else {
781 ost << endl;
782 ost << "Cannot find an extension for point " << orbit_reps[j] << "\\\\" << endl;
783 }
784#if 0
785 int pt;
786 int orbit_len;
787 int type;
788 // EXTENSION_TYPE_UNPROCESSED = unprocessed
789 // EXTENSION_TYPE_EXTENSION = extension node
790 // EXTENSION_TYPE_FUSION = fusion node
791 // EXTENSION_TYPE_PROCESSING = currently processing
792 // EXTENSION_TYPE_NOT_CANONICAL = no extension formed
793 // because it is not canonical
794 int data;
795 // if EXTENSION_TYPE_EXTENSION: a handle to the next
796 // poset_orbit_node
797 // if EXTENSION_TYPE_FUSION: a handle to a fusion element
798 int data1;
799 // if EXTENSION_TYPE_FUSION: node to which we are fusing
800 int data2;
801 // if EXTENSION_TYPE_FUSION: extension within that
802 // node to which we are fusing
803#endif
804
805 }
806#endif
807
808
809 FREE_int(orbit_reps);
811 FREE_int(total_depth);
812 }
813 FREE_OBJECT(gens);
814 FREE_lint(rep);
815}
816
817
818}}}
819
void print_to_str_naked(char *str, long int *data, int len)
Definition: lint_vec.cpp:518
a statistical analysis of data consisting of single integers
void init(int *data, int data_length, int f_second, int verbose_level)
Definition: tally.cpp:72
void print_file_tex_we_are_in_math_mode(std::ostream &ost, int f_backwards)
Definition: tally.cpp:358
void init_lint(long int *data, int data_length, int f_second, int verbose_level)
Definition: tally.cpp:123
void lint_set_print_tex(std::ostream &ost, long int *v, int len)
a class to represent arbitrary precision integers
Definition: ring_theory.h:366
void element_print_latex(void *elt, std::ostream &ost)
Definition: action_cb.cpp:364
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)
Definition: action_cb.cpp:301
void element_print_for_make_element(void *elt, std::ostream &ost)
Definition: action_cb.cpp:409
void latex_point_set(std::ostream &ost, long int *set, int sz, int verbose_level)
Definition: action_io.cpp:840
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)
Definition: vector_ge.cpp:379
a strong generating set for a permutation group with respect to a fixed action
Definition: groups.h:1703
data_structures_groups::vector_ge * gens
Definition: groups.h:1708
void group_order(ring_theory::longinteger_object &go)
to control the behavior of the poset classification report function
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)
void get_orbit_length_and_stabilizer_order(int node, int level, ring_theory::longinteger_object &stab_order, ring_theory::longinteger_object &len)
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 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
int find_extension_from_point(poset_classification *gen, long int pt, int verbose_level)
#define FREE_int(p)
Definition: foundations.h:640
#define FREE_OBJECT(p)
Definition: foundations.h:651
#define NEW_int(n)
Definition: foundations.h:625
#define TRUE
Definition: foundations.h:231
#define FALSE
Definition: foundations.h:234
#define FREE_lint(p)
Definition: foundations.h:642
#define NEW_lint(n)
Definition: foundations.h:628
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