Orbiter 2022
Combinatorial Objects
large_set_classify.cpp
Go to the documentation of this file.
1/*
2 * large_set_classify.cpp
3 *
4 * Created on: Sep 19, 2019
5 * Author: betten
6 */
7
8
9
10#include "orbiter.h"
11
12using namespace std;
13
14namespace orbiter {
15namespace layer5_applications {
16namespace apps_combinatorics {
17
18
19static void large_set_early_test_function(long int *S, int len,
20 long int *candidates, int nb_candidates,
21 long int *good_candidates, int &nb_good_candidates,
22 void *data, int verbose_level);
23
24
26{
27 DC = NULL;
28 design_size = 0;
29 nb_points = 0;
30 nb_lines = 0;
31 search_depth = 0;
32
33 //std::string problem_label;
34
35 //std::string starter_directory_name;
36 //std::string prefix;
37 //std::string path;
38 //std::string prefix_with_directory;
39
40
43
44
45 Design_table = NULL;
46 //nb_designs = 0;
47 nb_colors = 0;
48 design_color_table = NULL;
49
50 A_on_designs = NULL;
51
52
53 Bitvec = NULL;
54 degree = 0;
55
56 Control = NULL;
57 Poset = NULL;
58 gen = NULL;
59
60 nb_needed = 0;
61
62#if 0
63 Design_table_reduced = NULL;
64 Design_table_reduced_idx = NULL;
65 nb_reduced = 0;
66 nb_remaining_colors = 0;
67 reduced_design_color_table = NULL;
68
69 A_reduced = NULL;
70 Orbits_on_reduced = NULL;
71 color_of_reduced_orbits = NULL;
72
73 OoS = NULL;
74 selected_type_idx = 0;
75#endif
76
77 //null();
78}
79
81{
82 freeself();
83}
84
86{
87}
88
90{
91 if (Design_table) {
93 }
94 if (Bitvec) {
96 }
99 }
100#if 0
101 if (Design_table_reduced) {
102 FREE_lint(Design_table_reduced);
103 }
104 if (Design_table_reduced_idx) {
105 FREE_lint(Design_table_reduced_idx);
106 }
107 if (OoS) {
108 FREE_OBJECT(OoS);
109 }
110#endif
111 null();
112}
113
115 design_tables *T,
116 int verbose_level)
117{
118 int f_v = (verbose_level >= 1);
119
120 if (f_v) {
121 cout << "large_set_classify::init" << endl;
122 }
123
127 nb_points = DC->A->degree;
128 nb_lines = DC->A2->degree;
130
131
132 if (f_v) {
133 cout << "large_set_classify::init nb_points=" << nb_points << endl;
134 cout << "large_set_classify::init nb_lines=" << nb_lines << endl;
135 cout << "large_set_classify::init design_size=" << design_size << endl;
136 cout << "large_set_classify::init size_of_large_set=" << size_of_large_set << endl;
137 }
138
139
140 problem_label.assign("LS_");
141 problem_label.append(DC->label_txt);
142
143
144 if (DC->k == 4) {
145 if (f_v) {
146 cout << "large_set_classify::init before compute_colors" << endl;
147 }
149 verbose_level);
150 if (f_v) {
151 cout << "large_set_classify::init after compute_colors" << endl;
152 }
153 }
154 else {
155 if (f_v) {
156 cout << "large_set_classify::init we are not computing colors" << endl;
157 }
158
159 }
160
161 if (f_v) {
162 cout << "large_set_classify::init_designs "
163 "creating graph" << endl;
164 }
165
166
167 if (f_v) {
168 cout << "large_set_classify::init before create_action_and_poset" << endl;
169 }
170 create_action_and_poset(verbose_level);
171 if (f_v) {
172 cout << "large_set_classify::init after create_action_and_poset" << endl;
173 }
174
175
176
177 if (f_v) {
178 cout << "large_set_classify::init done" << endl;
179 }
180}
181
183{
184 int f_v = (verbose_level >= 1);
185
186 if (f_v) {
187 cout << "large_set_classify::create_action_and_poset" << endl;
188 }
189
190
191
192
193 if (f_v) {
194 cout << "large_set_classify::create_action_and_poset "
195 "creating action A_on_designs" << endl;
196 }
200 0 /* verbose_level */);
201
202 if (f_v) {
203 cout << "large_set_classify::create_action_and_poset "
204 "A_on_designs->degree=" << A_on_designs->degree << endl;
205 }
206
209 DC->A->Strong_gens,
210 verbose_level);
211
212 if (f_v) {
213 cout << "large_set_classify::create_action_and_poset before "
214 "Poset->add_testing_without_group" << endl;
215 }
217 large_set_early_test_function,
218 this /* void *data */,
219 verbose_level);
220
221
224
225 Control->f_T = TRUE;
226 Control->f_W = TRUE;
229 //Control->path = path;
230 //Control->f_path = TRUE;
233
234#if 0
235 Control->f_print_function = TRUE;
236 Control->print_function = print_set;
237 Control->print_function_data = this;
238#endif
239 if (f_v) {
240 cout << "large_set_classify::create_action_and_poset "
241 "calling gen->initialize" << endl;
242 }
243
246 verbose_level - 1);
247
248
249
250
251
252
253 if (f_v) {
254 cout << "large_set_classify::create_action_and_poset done" << endl;
255 }
256}
257
258void large_set_classify::compute(int verbose_level)
259{
260 int f_v = (verbose_level >= 1);
261 int schreier_depth = search_depth;
262 int f_use_invariant_subset_if_available = TRUE;
263 int f_debug = FALSE;
264 int t0;
266
267 t0 = Os.os_ticks();
268
269 gen->main(t0,
270 schreier_depth,
271 f_use_invariant_subset_if_available,
272 f_debug,
273 verbose_level - 1);
274
275 int length;
276
277 if (f_v) {
278 cout << "large_set_classify::compute done with generator_main" << endl;
279 }
281 if (f_v) {
282 cout << "large_set_classify::compute We found "
283 << length << " orbits on "
284 << search_depth << "-sets" << endl;
285 }
286}
287
288
291 int level, int verbose_level)
292{
293 int f_v = (verbose_level >= 1);
294 string fname_classification_at_level;
295
296 if (f_v) {
297 cout << "large_set_classify::read_classification" << endl;
298 }
299
300 gen->make_fname_lvl_file(fname_classification_at_level,
302
303 if (f_v) {
304 cout << "reading all orbit representatives from "
305 "file " << fname_classification_at_level << endl;
306 }
307
309
311 fname_classification_at_level, verbose_level - 1);
312
313 if (f_v) {
314 cout << "large_set_classify::read_classification "
315 "We read all orbit representatives. "
316 "There are " << T->nb_orbits << " orbits" << endl;
317 }
318}
319
322 int level, int case_nr, int verbose_level)
323{
324 int f_v = (verbose_level >= 1);
325 string fname_classification_at_level;
326
327 if (f_v) {
328 cout << "large_set_classify::read_classification_single_case" << endl;
329 }
330
331 gen->make_fname_lvl_file(fname_classification_at_level,
333
334 if (f_v) {
335 cout << "reading all orbit representatives from "
336 "file " << fname_classification_at_level << endl;
337 }
338
340
343
345 fname_classification_at_level, case_nr, verbose_level - 1);
346
347 if (f_v) {
348 cout << "large_set_classify::read_classification_single_case before copy" << endl;
349 }
350 *Rep = T->Reps[case_nr];
351 if (f_v) {
352 cout << "large_set_classify::read_classification_single_case before null" << endl;
353 }
354 T->Reps[case_nr].null();
355
356 if (f_v) {
357 cout << "large_set_classify::read_classification_single_case before FREE_OBJECT(T)" << endl;
358 }
359 FREE_OBJECT(T);
360 if (f_v) {
361 cout << "large_set_classify::read_classification_single_case after FREE_OBJECT(T)" << endl;
362 }
363
364 if (f_v) {
365 cout << "large_set_classify::read_classification_single_case done" << endl;
366 }
367}
368
370 design_tables *Design_table, int *&design_color_table,
371 int verbose_level)
372{
373 int f_v = (verbose_level >= 1);
374 int i;
375
376 if (f_v) {
377 cout << "large_set_classify::compute_colors" << endl;
378 }
379 nb_colors = DC->get_nb_colors_as_two_design(0 /* verbose_level */);
381 for (i = 0; i < Design_table->nb_designs; i++) {
385 0 /* verbose_level */);
386 }
387
388 if (f_v) {
389 cout << "large_set_classify::compute_colors done" << endl;
390 }
391}
392
393#if 0
394void large_set_classify::compute_reduced_colors(
395 long int *chosen_set, int chosen_set_sz,
396 int verbose_level)
397{
398 int f_v = (verbose_level >= 1);
399 int i, j, idx, c, s;
400 int *chosen_set_color;
401
402 if (f_v) {
403 cout << "large_set_classify::compute_reduced_colors" << endl;
404 }
405 chosen_set_color = NEW_int(chosen_set_sz);
406 for (i = 0; i < chosen_set_sz; i++) {
407 chosen_set_color[i] = design_color_table[chosen_set[i]];
408 }
409
410 if (DC->k != 4) {
411 cout << "large_set_classify::compute_reduced_colors DC->k != 4" << endl;
412 exit(1);
413 }
414 nb_remaining_colors = nb_colors - chosen_set_sz; // we assume that k = 4
415 if (f_v) {
416 cout << "large_set_classify::compute_reduced_colors "
417 "nb_remaining_colors=" << nb_remaining_colors << endl;
418 }
419 reduced_design_color_table = NEW_int(nb_reduced);
420 for (i = 0; i < nb_reduced; i++) {
421 idx = Design_table_reduced_idx[i];
422 c = design_color_table[idx];
423 s = 0;
424 for (j = 0; j < chosen_set_sz; j++) {
425 if (c > chosen_set_color[j]) {
426 s++;
427 }
428 }
429 reduced_design_color_table[i] = c - s;
430 }
431 FREE_int(chosen_set_color);
432 if (f_v) {
433 cout << "large_set_classify::compute_reduced_colors done" << endl;
434 }
435}
436#endif
437
438
439
440
441#if 0
442void large_set_classify::process_starter_case(
443 long int *starter_set, int starter_set_sz,
444 strong_generators *SG, std::string &prefix,
445 std::string &group_label, int orbit_length,
446 int f_read_solution_file, std::string &solution_file_name,
447 long int *&Large_sets, int &nb_large_sets,
448 int f_compute_normalizer_orbits, strong_generators *N_gens,
449 int verbose_level)
450{
451 int f_v = (verbose_level >= 1);
452
453 if (f_v) {
454 cout << "large_set_classify::process_starter_case" << endl;
455 }
456 if (f_v) {
457 cout << "large_set_classify::process_starter_case "
458 "before make_reduced_design_table" << endl;
459 }
460 make_reduced_design_table(
461 starter_set, starter_set_sz,
462 Design_table_reduced, Design_table_reduced_idx, nb_reduced,
463 verbose_level);
464 if (f_v) {
465 cout << "large_set_classify::process_starter_case "
466 "after make_reduced_design_table" << endl;
467 }
468 if (f_v) {
469 cout << "large_set_classify::process_starter_case "
470 "The reduced design table has length " << nb_reduced << endl;
471 }
472
473 if (f_v) {
474 cout << "large_set_classify::process_starter_case "
475 "before compute_reduced_colors" << endl;
476 }
477 compute_reduced_colors(starter_set, starter_set_sz, verbose_level);
478 if (f_v) {
479 cout << "large_set_classify::process_starter_case "
480 "after compute_reduced_colors" << endl;
481 }
482
483
484 if (f_v) {
485 cout << "large_set_classify::process_starter_case "
486 "creating A_reduced:" << endl;
487 }
488 A_reduced = A_on_designs->restricted_action(
489 Design_table_reduced_idx, nb_reduced,
490 verbose_level);
491
492
493 if (f_v) {
494 cout << "large_set_classify::process_starter_case "
495 "computing orbits on reduced set of designs:" << endl;
496 }
497
498
499 OoS = NEW_OBJECT(orbits_on_something);
500
501 OoS->init(A_reduced,
502 SG,
503 FALSE /* f_load_save */,
504 prefix,
505 verbose_level);
506
507 // computes all orbits and classifies the orbits by their length
508
509
510
511 if (f_v) {
512 cout << "large_set_classify::process_starter_case "
513 "orbits on the reduced set of designs are:" << endl;
514 OoS->report_classified_orbit_lengths(cout);
515 }
516
517
518
519 colored_graph *CG;
520 std::string fname;
521 int f_has_user_data = FALSE;
522
523 fname.assign(prefix);
524 fname.append(group_label);
525
526 if (f_v) {
527 cout << "large_set_classify::process_starter_case "
528 "before OoS->test_orbits_of_a_certain_length" << endl;
529 }
530 int prev_nb;
531
532 OoS->test_orbits_of_a_certain_length(
533 orbit_length,
534 selected_type_idx,
535 prev_nb,
536 large_set_design_test_orbit,
537 this /* *test_function_data*/,
538 verbose_level);
539
540 if (f_v) {
541 cout << "large_set_classify::process_starter_case "
542 "after OoS->test_orbits_of_a_certain_length "
543 "prev_nb=" << prev_nb << " cur_nb="
544 << OoS->Orbits_classified->Set_size[selected_type_idx] << endl;
545 }
546
547
548 //Orbits_classified->Set_size[type_idx] = j;
549
550
551 if (f_read_solution_file) {
552 if (f_v) {
553 cout << "large_set_classify::process_starter_case "
554 "trying to read solution file " << solution_file_name << endl;
555 }
556 int i, j, a, b, l, h;
557
558 file_io Fio;
559 int nb_solutions;
560 int *Solutions;
561 int solution_size;
562
563 Fio.read_solutions_from_file_and_get_solution_size(solution_file_name,
564 nb_solutions, Solutions, solution_size,
565 verbose_level);
566 cout << "Read the following solutions from file:" << endl;
567 Orbiter->Int_vec.matrix_print(Solutions, nb_solutions, solution_size);
568 cout << "Number of solutions = " << nb_solutions << endl;
569 cout << "solution_size = " << solution_size << endl;
570
571 int sz = starter_set_sz + solution_size * orbit_length;
572
573 if (sz != size_of_large_set) {
574 cout << "large_set_classify::process_starter_case sz != size_of_large_set" << endl;
575 exit(1);
576 }
577
578
579 nb_large_sets = nb_solutions;
580 Large_sets = NEW_lint(nb_solutions * sz);
581 for (i = 0; i < nb_solutions; i++) {
582 Orbiter->Lint_vec.copy(starter_set, Large_sets + i * sz, starter_set_sz);
583 for (j = 0; j < solution_size; j++) {
584#if 0
585 a = Solutions[i * solution_size + j];
586 b = OoS->Orbits_classified->Sets[selected_type_idx][a];
587#else
588 b = Solutions[i * solution_size + j];
589 // the labels in the graph are set according to
590 // OoS->Orbits_classified->Sets[selected_type_idx][]
591 //b = OoS->Orbits_classified->Sets[selected_type_idx][a];
592#endif
593 OoS->Sch->get_orbit(b,
594 Large_sets + i * sz + starter_set_sz + j * orbit_length,
595 l, 0 /* verbose_level*/);
596 if (l != orbit_length) {
597 cout << "large_set_classify::process_starter_case l != orbit_length" << endl;
598 exit(1);
599 }
600 }
601 for (j = 0; j < solution_size * orbit_length; j++) {
602 a = Large_sets[i * sz + starter_set_sz + j];
603 b = Design_table_reduced_idx[a];
604 Large_sets[i * sz + starter_set_sz + j] = b;
605 }
606 }
607 {
608 file_io Fio;
609 string fname_out;
610 string_tools ST;
611
612 fname_out.assign(solution_file_name);
613 ST.replace_extension_with(fname_out, "_packings.csv");
614
615 ST.replace_extension_with(fname_out, "_packings.csv");
616
617 Fio.lint_matrix_write_csv(fname_out, Large_sets, nb_solutions, sz);
618 }
619 long int *Packings_explicit;
620 int Sz = sz * design_size;
621
622 Packings_explicit = NEW_lint(nb_solutions * Sz);
623 for (i = 0; i < nb_solutions; i++) {
624 for (j = 0; j < sz; j++) {
625 a = Large_sets[i * sz + j];
626 for (h = 0; h < design_size; h++) {
627 b = Design_table[a * design_size + h];
628 Packings_explicit[i * Sz + j * design_size + h] = b;
629 }
630 }
631 }
632 {
633 file_io Fio;
634 string fname_out;
635 string_tools ST;
636
637 fname_out.assign(solution_file_name);
638 ST.replace_extension_with(fname_out, "_packings_explicit.csv");
639
640 Fio.lint_matrix_write_csv(fname_out, Packings_explicit, nb_solutions, Sz);
641 }
642 FREE_lint(Large_sets);
643 FREE_lint(Packings_explicit);
644
645 }
646 else {
647 if (f_v) {
648 cout << "large_set_classify::process_starter_case "
649 "before OoS->create_graph_on_orbits_of_a_certain_length" << endl;
650 }
651
652
653 OoS->create_graph_on_orbits_of_a_certain_length(
654 CG,
655 fname,
656 orbit_length,
657 selected_type_idx,
658 f_has_user_data, NULL /* int *user_data */, 0 /* user_data_size */,
659 TRUE /* f_has_colors */, nb_remaining_colors, reduced_design_color_table,
660 large_set_design_test_pair_of_orbits,
661 this /* *test_function_data */,
662 verbose_level);
663
664 if (f_v) {
665 cout << "large_set_classify::process_starter_case "
666 "after OoS->create_graph_on_orbits_of_a_certain_length" << endl;
667 }
668 if (f_v) {
669 cout << "large_set_classify::process_starter_case "
670 "before CG->save" << endl;
671 }
672
673 CG->save(fname, verbose_level);
674
675 FREE_OBJECT(CG);
676 }
677
678 //A_reduced->compute_orbits_on_points(Orbits_on_reduced,
679 // SG->gens, 0 /*verbose_level*/);
680
681#if 0
682 if (f_v) {
683 cout << "large_set_classify::process_starter_case "
684 "The orbits on the reduced set of designs are:" << endl;
685 //Orbits_on_reduced->print_and_list_orbits_sorted_by_length(
686 // cout, TRUE /* f_tex */);
687 }
688
689
690 if (f_v) {
691 cout << "large_set_classify::process_starter_case "
692 "Distribution of orbit lengths:" << endl;
693 Orbits_on_reduced->print_orbit_length_distribution(cout);
694 }
695#endif
696
697 int i;
698 int *reduced_design_color;
699
700 reduced_design_color = NEW_int(nb_reduced);
701 for (i = 0; i < nb_reduced; i++) {
702 reduced_design_color[i] = DC->get_color_as_two_design_assume_sorted(
703 Design_table_reduced + i * design_size,
704 0 /* verbose_level */);
705 }
706 tally C;
707
708 C.init(reduced_design_color, nb_reduced, FALSE, 0);
709 cout << "color distribution of reduced designs:" << endl;
710 C.print_naked_tex(cout, FALSE /* f_backwards */);
711 cout << endl;
712
713 FREE_int(reduced_design_color);
714
715
716
717
718 if (f_v) {
719 cout << "large_set_classify::process_starter_case done" << endl;
720 }
721}
722
723#endif
724
725
727{
729}
730
731
732
733
734
735#if 0
736
737int large_set_design_test_orbit(long int *orbit, int orbit_length,
738 void *extra_data)
739{
740 large_set_classify *LS = (large_set_classify *) extra_data;
741 int ret = FALSE;
742
743 ret = LS->test_orbit(orbit, orbit_length);
744
745 return ret;
746}
747
748
749int large_set_design_compare_func_for_invariants(void *data, int i, int j, void *extra_data)
750{
751 //large_set_classify *LS = (large_set_classify *) extra_data;
752 int **Invariant = (int **) data;
753 int ret;
754
755 ret = int_vec_compare(Invariant[i], Invariant[j], 3);
756 return ret;
757}
758
759void large_set_swap_func_for_invariants(void *data, int i, int j, void *extra_data)
760{
761 //large_set_classify *LS = (large_set_classify *) extra_data;
762 int **Invariant = (int **) data;
763 int *p;
764
765 p = Invariant[i];
766 Invariant[i] = Invariant[j];
767 Invariant[j] = p;
768}
769
770
771
772
773int large_set_design_compare_func(void *data, int i, int j, void *extra_data)
774{
775 large_set_classify *LS = (large_set_classify *) extra_data;
776 int **Sets = (int **) data;
777 int ret;
778
779 ret = int_vec_compare(Sets[i], Sets[j], LS->design_size);
780 return ret;
781}
782
783void large_set_swap_func(void *data, int i, int j, void *extra_data)
784{
785 //large_set_classify *LS = (large_set_classify *) extra_data;
786 int **Sets = (int **) data;
787 int *p;
788
789 p = Sets[i];
790 Sets[i] = Sets[j];
791 Sets[j] = p;
792}
793
794int large_set_compute_color_of_reduced_orbits_callback(schreier *Sch,
795 int orbit_idx, void *data, int verbose_level)
796{
797 int f_v = (verbose_level >= 1);
798 large_set_classify *LS = (large_set_classify *) data;
799
800 int a, c;
801
802 if (f_v) {
803 cout << "large_set_compute_color_of_reduced_orbits_callback" << endl;
804 }
805 a = Sch->orbit[Sch->orbit_first[orbit_idx]];
807 LS->Design_table_reduced + a * LS->design_size, 0 /* verbose_level */);
808 if (f_v) {
809 cout << "large_set_compute_color_of_reduced_orbits_callback done" << endl;
810 }
811 return c;
812}
813#endif
814
815
816static void large_set_early_test_function(long int *S, int len,
817 long int *candidates, int nb_candidates,
818 long int *good_candidates, int &nb_good_candidates,
819 void *data, int verbose_level)
820{
821 large_set_classify *LS = (large_set_classify *) data;
822 int f_v = (verbose_level >= 1);
823 int i, k, a, b;
825
826 if (f_v) {
827 cout << "large_set_early_test_function for set ";
828 Lint_vec_print(cout, S, len);
829 cout << endl;
830 }
831 if (len == 0) {
832 Lint_vec_copy(candidates, good_candidates, nb_candidates);
833 nb_good_candidates = nb_candidates;
834 }
835 else {
836 a = S[len - 1];
837 nb_good_candidates = 0;
838 for (i = 0; i < nb_candidates; i++) {
839 b = candidates[i];
840
841 if (b == a) {
842 continue;
843 }
844 if (LS->Bitvec) {
845 k = Combi.ij2k(a, b, LS->Design_table->nb_designs);
846 if (LS->Bitvec->s_i(k)) {
847 good_candidates[nb_good_candidates++] = b;
848 }
849 }
850 else {
851 //cout << "large_set_early_test_function bitvector_adjacency has not been computed" << endl;
852 //exit(1);
853 if (LS->test_if_designs_are_disjoint(a, b)) {
854 good_candidates[nb_good_candidates++] = b;
855 }
856 }
857 }
858 }
859 if (f_v) {
860 cout << "large_set_early_test_function done" << endl;
861 }
862}
863
864
865
866
867
868}}}
869
void copy(long int *from, long int *to, long int len)
Definition: lint_vec.cpp:80
action * restricted_action(long int *points, int nb_points, int verbose_level)
action * create_induced_action_on_sets(int nb_sets, int set_size, long int *sets, int verbose_level)
groups::strong_generators * Strong_gens
Definition: actions.h:130
a set of orbits using a vector of orbit representatives and stabilizers
void read_from_file_one_case_only(actions::action *A, actions::action *A2, std::string &fname, int case_nr, int verbose_level)
void read_from_file(actions::action *A, actions::action *A2, std::string &fname, int verbose_level)
to control the behavior of 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)
void make_fname_lvl_file(std::string &fname, std::string &fname_base, int lvl)
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)
to create a known design using a description from class design_create_description
int get_color_as_two_design_assume_sorted(long int *design, int verbose_level)
void read_classification_single_case(data_structures_groups::set_and_stabilizer *&Rep, int level, int case_nr, int verbose_level)
void init(design_create *DC, design_tables *T, int verbose_level)
poset_classification::poset_classification_control * Control
void read_classification(data_structures_groups::orbit_transversal *&T, int level, int verbose_level)
void compute_colors(design_tables *Design_table, int *&design_color_table, int verbose_level)
#define Lint_vec_copy(A, B, C)
Definition: foundations.h:694
#define FREE_int(p)
Definition: foundations.h:640
#define NEW_OBJECT(type)
Definition: foundations.h:638
#define Lint_vec_print(A, B, C)
Definition: foundations.h:686
#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