Orbiter 2022
Combinatorial Objects
projective_space_global.cpp
Go to the documentation of this file.
1/*
2 * projective_space_global.cpp
3 *
4 * Created on: Oct 9, 2021
5 * Author: betten
6 */
7
8#include "orbiter.h"
9
10using namespace std;
11
12namespace orbiter {
13namespace layer5_applications {
14namespace projective_geometry {
15
16
17
20 std::string &label,
21 std::string &evaluate_text,
22 int verbose_level)
23{
24 int f_v = (verbose_level >= 1);
25
26 if (f_v) {
27 cout << "projective_space_global::map" << endl;
28 }
29
30
31
32 int idx;
34
35 if (idx < 0) {
36 cout << "could not find symbol " << label << endl;
37 exit(1);
38 }
40
41 if (user_interface::The_Orbiter_top_level_session->Orbiter_session->Orbiter_symbol_table->Table[idx].type != orbiter_kernel_system::t_object) {
42 cout << "symbol table entry must be of type t_object" << endl;
43 exit(1);
44 }
45 if (user_interface::The_Orbiter_top_level_session->Orbiter_session->Orbiter_symbol_table->Table[idx].object_type == t_collection) {
46 cout << "symbol table entry is a collection" << endl;
47
48 vector<string> *List;
49
50 List = (vector<string> *) user_interface::The_Orbiter_top_level_session->Orbiter_session->Orbiter_symbol_table->Table[idx].ptr;
51 int i;
52
53 for (i = 0; i < List->size(); i++) {
54 int idx1;
55
57 if (idx1 < 0) {
58 cout << "could not find symbol " << (*List)[i] << endl;
59 exit(1);
60 }
62 Formula = (expression_parser::formula *) user_interface::The_Orbiter_top_level_session->Orbiter_session->Orbiter_symbol_table->Table[idx1].ptr;
63
64 PA->map(Formula,
65 evaluate_text,
66 verbose_level);
67 }
68 }
69 else if (user_interface::The_Orbiter_top_level_session->Orbiter_session->Orbiter_symbol_table->Table[idx].object_type == t_formula) {
70 cout << "symbol table entry is a formula" << endl;
71
73 Formula = (expression_parser::formula *) user_interface::The_Orbiter_top_level_session->Orbiter_session->Orbiter_symbol_table->Table[idx].ptr;
74
75 PA->map(Formula,
76 evaluate_text,
77 verbose_level);
78 }
79 else {
80 cout << "symbol table entry must be either a formula or a collection" << endl;
81 exit(1);
82 }
83
84
85 if (f_v) {
86 cout << "projective_space_global::map done" << endl;
87 }
88}
89
90
93 std::string &label,
94 std::string &evaluate_text,
95 int verbose_level)
96{
97 int f_v = (verbose_level >= 1);
98
99 if (f_v) {
100 cout << "projective_space_global::analyze_del_Pezzo_surface" << endl;
101 }
102
103
104
105 int idx;
107
108 if (idx < 0) {
109 cout << "could not find symbol " << label << endl;
110 exit(1);
111 }
113
114 if (user_interface::The_Orbiter_top_level_session->Orbiter_session->Orbiter_symbol_table->Table[idx].type != orbiter_kernel_system::t_object) {
115 cout << "symbol table entry must be of type t_object" << endl;
116 exit(1);
117 }
118 if (user_interface::The_Orbiter_top_level_session->Orbiter_session->Orbiter_symbol_table->Table[idx].object_type == t_collection) {
119 cout << "symbol table entry is a collection" << endl;
120
121 vector<string> *List;
122
123 List = (vector<string> *) user_interface::The_Orbiter_top_level_session->Orbiter_session->Orbiter_symbol_table->Table[idx].ptr;
124 int i;
125
126 for (i = 0; i < List->size(); i++) {
127 int idx1;
128
130 if (idx1 < 0) {
131 cout << "could not find symbol " << (*List)[i] << endl;
132 exit(1);
133 }
135 F = (expression_parser::formula *) user_interface::The_Orbiter_top_level_session->Orbiter_session->Orbiter_symbol_table->Table[idx1].ptr;
136
138 PA,
139 F,
140 evaluate_text,
141 verbose_level);
142 }
143 }
144 else if (user_interface::The_Orbiter_top_level_session->Orbiter_session->Orbiter_symbol_table->Table[idx].object_type == t_formula) {
145 cout << "symbol table entry is a formula" << endl;
146
148 F = (expression_parser::formula *) user_interface::The_Orbiter_top_level_session->Orbiter_session->Orbiter_symbol_table->Table[idx].ptr;
149
151 PA,
152 F,
153 evaluate_text,
154 verbose_level);
155 }
156 else {
157 cout << "symbol table entry must be either a formula or a collection" << endl;
158 exit(1);
159 }
160
161
162 if (f_v) {
163 cout << "projective_space_global::analyze_del_Pezzo_surface done" << endl;
164 }
165}
166
170 std::string &evaluate_text,
171 int verbose_level)
172{
173 int f_v = (verbose_level >= 1);
174
175 if (f_v) {
176 cout << "projective_space_global::analyze_del_Pezzo_surface_formula_given" << endl;
177 }
178
179 if (f_v) {
180 cout << "projective_space_global::analyze_del_Pezzo_surface_formula_given before PA->analyze_del_Pezzo_surface" << endl;
181 }
182
183 PA->analyze_del_Pezzo_surface(F, evaluate_text, verbose_level);
184
185 if (f_v) {
186 cout << "projective_space_global::analyze_del_Pezzo_surface_formula_given after PA->analyze_del_Pezzo_surface" << endl;
187 }
188
189 if (f_v) {
190 cout << "projective_space_global::analyze_del_Pezzo_surface_formula_given done" << endl;
191 }
192}
193
194
195
196
197
203 int verbose_level)
204{
205 int f_v = (verbose_level >= 1);
206
207 if (f_v) {
208 cout << "projective_space_global::do_create_surface" << endl;
209 cout << "projective_space_global::do_create_surface verbose_level=" << verbose_level << endl;
210 }
211
212 int q;
214
215 if (f_v) {
216 cout << "projective_space_global::do_create_surface before Surface_Descr->get_q" << endl;
217 }
218 q = Surface_Descr->get_q();
219 if (f_v) {
220 cout << "projective_space_global::do_create_surface q = " << q << endl;
221 }
222
223 if (PA->q != q) {
224 cout << "projective_space_global::do_create_surface PA->q != q" << endl;
225 exit(1);
226 }
227 if (PA->n != 3) {
228 cout << "projective_space_global::do_create_surface we need a three-dimensional projective space" << endl;
229 exit(1);
230 }
231
232
233 if (f_v) {
234 cout << "projective_space_global::do_create_surface before Surf->init" << endl;
235 }
237 Surf->init(PA->F, 0 /*verbose_level - 1*/);
238 if (f_v) {
239 cout << "projective_space_global::do_create_surface after Surf->init" << endl;
240 }
241
243
244 if (f_v) {
245 cout << "projective_space_global::do_create_surface before Surf_A->init" << endl;
246 }
247 Surf_A->init(Surf, PA, TRUE /* f_recoordinatize */, 0 /*verbose_level*/);
248 if (f_v) {
249 cout << "projective_space_global::do_create_surface after Surf_A->init" << endl;
250 }
251
252
253 if (f_v) {
254 cout << "projective_space_global::do_create_surface before Surf_A->create_surface_and_do_report" << endl;
255 }
256
257 Surf_A->create_surface(
258 Surface_Descr,
259 SC,
260 verbose_level);
261
262 if (f_v) {
263 cout << "projective_space_global::do_create_surface after Surf_A->create_surface_and_do_report" << endl;
264 }
265
266 if (f_v) {
267 cout << "projective_space_global::do_create_surface done" << endl;
268 }
269}
270
271
272
273
276 int threshold,
277 std::string &set_text,
278 int verbose_level)
279{
280 int f_v = (verbose_level >= 1);
281
282
283 if (f_v) {
284 cout << "projective_space_global::conic_type" << endl;
285 }
286
287 long int *Pts;
288 int nb_pts;
289
290 Lint_vec_scan(set_text, Pts, nb_pts);
291
292
293 if (f_v) {
294 cout << "projective_space_global::conic_type before PA->conic_type" << endl;
295 }
296
297 PA->conic_type(Pts, nb_pts, threshold, verbose_level);
298
299 if (f_v) {
300 cout << "projective_space_global::conic_type after PA->conic_type" << endl;
301 }
302
303 if (f_v) {
304 cout << "projective_space_global::conic_type done" << endl;
305 }
306}
307
310 std::string &text,
311 int verbose_level)
312{
313 int f_v = (verbose_level >= 1);
314
315
316 if (f_v) {
317 cout << "projective_space_global::do_lift_skew_hexagon" << endl;
318 }
319
320 int *Pluecker_coords;
321 int sz;
322
323 Int_vec_scan(text, Pluecker_coords, sz);
324
325 long int *Pts;
326 int nb_pts;
327
328 nb_pts = sz / 6;
329
330 if (nb_pts * 6 != sz) {
331 cout << "projective_space_global::do_lift_skew_hexagon the number of coordinates must be a multiple of 6" << endl;
332 exit(1);
333 }
334
335 if (f_v) {
336 cout << "Pluecker coordinates of lines:" << endl;
337 Int_matrix_print(Pluecker_coords, nb_pts, 6);
338 }
339
342
343 if (PA->n != 3) {
344 cout << "projective_space_global::do_lift_skew_hexagon we need a three-dimensional projective space" << endl;
345 exit(1);
346 }
347
348
349 if (f_v) {
350 cout << "projective_space_global::do_lift_skew_hexagon before Surf->init" << endl;
351 }
353 Surf->init(PA->F, 0 /*verbose_level - 1*/);
354 if (f_v) {
355 cout << "projective_space_global::do_lift_skew_hexagon after Surf->init" << endl;
356 }
357
359
360 if (f_v) {
361 cout << "projective_space_global::do_lift_skew_hexagon before Surf_A->init" << endl;
362 }
363 Surf_A->init(Surf, PA, TRUE /* f_recoordinatize */, 0 /*verbose_level*/);
364 if (f_v) {
365 cout << "projective_space_global::do_lift_skew_hexagon after Surf_A->init" << endl;
366 }
367
368
369
370
371 int i;
372
373 Pts = NEW_lint(nb_pts);
374
375 for (i = 0; i < nb_pts; i++) {
376 Pts[i] = Surf_A->Surf->Klein->Pluecker_to_line_rk(Pluecker_coords + i * 6, 0 /*verbose_level*/);
377 }
378
379 if (nb_pts != 6) {
380 cout << "projective_space_global::do_lift_skew_hexagon nb_pts != 6" << endl;
381 exit(1);
382 }
383
384 if (f_v) {
385 cout << "lines:" << endl;
386 Lint_vec_print(cout, Pts, 6);
387 cout << endl;
388 }
389
390
391 std::vector<std::vector<long int> > Double_sixes;
392
393 if (f_v) {
394 cout << "projective_space_global::do_lift_skew_hexagon before Surf_A->complete_skew_hexagon" << endl;
395 }
396
397 Surf_A->complete_skew_hexagon(Pts, Double_sixes, verbose_level);
398
399 if (f_v) {
400 cout << "projective_space_global::do_lift_skew_hexagon after Surf_A->complete_skew_hexagon" << endl;
401 }
402
403 cout << "We found " << Double_sixes.size() << " double sixes. They are:" << endl;
404 for (i = 0; i < Double_sixes.size(); i++) {
405 cout << Double_sixes[i][0] << ",";
406 cout << Double_sixes[i][1] << ",";
407 cout << Double_sixes[i][2] << ",";
408 cout << Double_sixes[i][3] << ",";
409 cout << Double_sixes[i][4] << ",";
410 cout << Double_sixes[i][5] << ",";
411 cout << Double_sixes[i][6] << ",";
412 cout << Double_sixes[i][7] << ",";
413 cout << Double_sixes[i][8] << ",";
414 cout << Double_sixes[i][9] << ",";
415 cout << Double_sixes[i][10] << ",";
416 cout << Double_sixes[i][11] << "," << endl;
417
418 }
419
420 if (f_v) {
421 cout << "projective_space_global::do_lift_skew_hexagon done" << endl;
422 }
423}
424
425
428 std::string &polarity_36,
429 int verbose_level)
430{
431 int f_v = (verbose_level >= 1);
432
433
434 if (f_v) {
435 cout << "projective_space_global::do_lift_skew_hexagon_with_polarity" << endl;
436 }
437
438 int *Polarity36;
439 int sz1;
440
441 Int_vec_scan(polarity_36, Polarity36, sz1);
442
443 if (sz1 != 36) {
444 cout << "projective_space_global::do_lift_skew_hexagon_with_polarity I need exactly 36 coefficients for the polarity" << endl;
445 exit(1);
446 }
447
448
451
452 if (PA->n != 3) {
453 cout << "projective_space_global::do_lift_skew_hexagon_with_polarity we need a three-dimensional projective space" << endl;
454 exit(1);
455 }
456
457
458 if (f_v) {
459 cout << "projective_space_global::do_lift_skew_hexagon_with_polarity before Surf->init" << endl;
460 }
462 Surf->init(PA->F, 0 /*verbose_level - 1*/);
463 if (f_v) {
464 cout << "projective_space_global::do_lift_skew_hexagon_with_polarity after Surf->init" << endl;
465 }
466
468
469 if (f_v) {
470 cout << "projective_space_global::do_lift_skew_hexagon_with_polarity before Surf_A->init" << endl;
471 }
472 Surf_A->init(Surf, PA, TRUE /* f_recoordinatize */, 0 /*verbose_level*/);
473 if (f_v) {
474 cout << "projective_space_global::do_lift_skew_hexagon_with_polarity after Surf_A->init" << endl;
475 }
476
477
478
479
480 std::vector<std::vector<long int> > Double_sixes;
481
482 int Pluecker_coords[36];
483 int alpha, beta;
484 int i, j;
485
486 Int_vec_zero(Pluecker_coords, 36);
487 // a1 = 1,0,0,0,0,0
488 Pluecker_coords[0] = 1;
489
490 for (alpha = 1; alpha < PA->F->q; alpha++) {
491
492
493
494 for (beta = 1; beta < PA->F->q; beta++) {
495
496 // a2 = 0,beta,0,alpha,alpha,0
497
498 Pluecker_coords[6 + 1] = beta;
499 Pluecker_coords[6 + 3] = alpha;
500 Pluecker_coords[6 + 4] = alpha;
501
502 // a3 = 0,beta,0,alpha,alpha,0
503
504 Pluecker_coords[12 + 1] = alpha;
505 Pluecker_coords[12 + 2] = beta;
506
507
508 for (j = 0; j < 3; j++) {
509 Surf->F->Linear_algebra->mult_matrix_matrix(Pluecker_coords + j * 6, Polarity36,
510 Pluecker_coords + 18 + j * 6, 1, 6, 6, 0 /* verbose_level */);
511 }
512
513 int nb_pts;
514
515 nb_pts = 6;
516
517 if (f_v) {
518 cout << "Pluecker coordinates of lines:" << endl;
519 Int_matrix_print(Pluecker_coords, nb_pts, 6);
520 }
521
522
523 long int *Pts;
524
525
526 Pts = NEW_lint(nb_pts);
527
528 for (i = 0; i < nb_pts; i++) {
529 Pts[i] = Surf_A->Surf->Klein->Pluecker_to_line_rk(Pluecker_coords + i * 6, 0 /*verbose_level*/);
530 }
531
532 if (nb_pts != 6) {
533 cout << "projective_space_global::do_lift_skew_hexagon_with_polarity nb_pts != 6" << endl;
534 exit(1);
535 }
536
537 if (f_v) {
538 cout << "lines:" << endl;
539 Lint_vec_print(cout, Pts, 6);
540 cout << endl;
541 }
542
543
544 string label;
545 char str[1000];
546
547 sprintf(str, "alpha=%d beta=%d", alpha, beta);
548
549 label.assign(str);
550
551 if (f_v) {
552 cout << "projective_space_global::do_lift_skew_hexagon_with_polarity before Surf_A->complete_skew_hexagon_with_polarity" << endl;
553 }
554
555 Surf_A->complete_skew_hexagon_with_polarity(label, Pts, Polarity36, Double_sixes, verbose_level);
556
557 if (f_v) {
558 cout << "projective_space_global::do_lift_skew_hexagon_with_polarity after Surf_A->complete_skew_hexagon_with_polarity" << endl;
559 }
560
561 FREE_lint(Pts);
562
563
564 }
565
566 }
567
568
569
570 cout << "We found " << Double_sixes.size() << " double sixes. They are:" << endl;
571 for (i = 0; i < Double_sixes.size(); i++) {
572 cout << Double_sixes[i][0] << ",";
573 cout << Double_sixes[i][1] << ",";
574 cout << Double_sixes[i][2] << ",";
575 cout << Double_sixes[i][3] << ",";
576 cout << Double_sixes[i][4] << ",";
577 cout << Double_sixes[i][5] << ",";
578 cout << Double_sixes[i][6] << ",";
579 cout << Double_sixes[i][7] << ",";
580 cout << Double_sixes[i][8] << ",";
581 cout << Double_sixes[i][9] << ",";
582 cout << Double_sixes[i][10] << ",";
583 cout << Double_sixes[i][11] << "," << endl;
584
585 }
586
587 if (f_v) {
588 cout << "projective_space_global::do_lift_do_lift_skew_hexagon_with_polarityskew_hexagon done" << endl;
589 }
590}
591
592
595 apps_geometry::arc_generator_description *Arc_generator_description,
596 int verbose_level)
597{
598 int f_v = (verbose_level >= 1);
599
600 if (f_v) {
601 cout << "projective_space_global::do_classify_arcs" << endl;
602 }
603
604#if 0
605 Arc_generator_description->F = LG->F;
606 Arc_generator_description->LG = LG;
607 Arc_generator_description->Control = Descr->Control;
608
609 if (Arc_generator_description->n != LG->A2->matrix_group_dimension()) {
610 cout << "projective_space_global::do_classify_arcs the dimensions don't match" << endl;
611 exit(1);
612 }
613#endif
614
615
617
618 if (Arc_generator_description->f_override_group) {
619 if (f_v) {
620 cout << "projective_space_global::do_classify_arcs "
621 "f_override_group label = " << Arc_generator_description->override_group_label << endl;
622 }
623 int idx;
625 //linear_group *LG;
626
627 idx = orbiter_kernel_system::Orbiter->find_symbol(Arc_generator_description->override_group_label);
628 if (orbiter_kernel_system::Orbiter->get_object_type(idx) != t_any_group) {
629 cout << "projective_space_global::do_classify_arcs The object given must be a group" << endl;
630 exit(1);
631 }
633
634#if 0
635 if (!LG->f_has_strong_generators) {
636 cout << "projective_space_global::do_classify_arcs the group must have strong generators" << endl;
637 exit(1);
638 }
639#endif
640
641 gens = AG->Subgroup_gens;
642
643
644 }
645 else {
646 gens = PA->A->Strong_gens;
647 }
648
649 {
651
653
654
655
656 if (f_v) {
657 cout << "projective_space_global::do_classify_arcs before Gen->init" << endl;
658 }
659 Gen->init(
660 Arc_generator_description,
661 PA,
662 gens,
663 verbose_level);
664
665 if (f_v) {
666 cout << "projective_space_global::do_classify_arcs after Gen->init" << endl;
667 }
668
669
670
671 if (f_v) {
672 cout << "projective_space_global::do_classify_arcs before Gen->main" << endl;
673 }
674 Gen->main(verbose_level);
675 if (f_v) {
676 cout << "projective_space_global::do_classify_arcs after Gen->main" << endl;
677 }
678
679
680 FREE_OBJECT(Gen);
681 }
682
683
684 if (f_v) {
685 cout << "projective_space_global::do_classify_arcs done" << endl;
686 }
687}
688
689
692 apps_geometry::arc_generator_description *Arc_generator_description,
693 int verbose_level)
694{
695 int f_v = (verbose_level >= 1);
696
697 if (f_v) {
698 cout << "projective_space_global::do_classify_cubic_curves" << endl;
699 }
700
701
702
704
706
707 if (f_v) {
708 cout << "projective_space_global::do_classify_cubic_curves before CC->init" << endl;
709 }
710 CC->init(PA->F, verbose_level);
711 if (f_v) {
712 cout << "projective_space_global::do_classify_cubic_curves after CC->init" << endl;
713 }
714
715
717
719
720 if (f_v) {
721 cout << "projective_space_global::do_classify_cubic_curves before CCA->init" << endl;
722 }
723 CCA->init(CC, PA->A, verbose_level);
724 if (f_v) {
725 cout << "projective_space_global::do_classify_cubic_curves after CCA->init" << endl;
726 }
727
728
730
732
733
734 if (f_v) {
735 cout << "projective_space_global::do_classify_cubic_curves before CCC->init" << endl;
736 }
737 CCC->init(
738 PA,
739 CCA,
740 Arc_generator_description,
741 verbose_level);
742 if (f_v) {
743 cout << "projective_space_global::do_classify_cubic_curves after CCC->init" << endl;
744 }
745
746 if (f_v) {
747 cout << "projective_space_global::do_classify_cubic_curves before CCC->compute_starter" << endl;
748 }
749 CCC->compute_starter(verbose_level);
750 if (f_v) {
751 cout << "projective_space_global::do_classify_cubic_curves after CCC->compute_starter" << endl;
752 }
753
754#if 0
755 if (f_v) {
756 cout << "projective_space_global::do_classify_cubic_curves before CCC->test_orbits" << endl;
757 }
758 CCC->test_orbits(verbose_level);
759 if (f_v) {
760 cout << "projective_space_global::do_classify_cubic_curves after CCC->test_orbits" << endl;
761 }
762#endif
763
764 if (f_v) {
765 cout << "projective_space_global::do_classify_cubic_curves before CCC->do_classify" << endl;
766 }
767 CCC->do_classify(verbose_level);
768 if (f_v) {
769 cout << "projective_space_global::do_classify_cubic_curves after CCC->do_classify" << endl;
770 }
771
772
773 if (f_v) {
774 cout << "projective_space_global::do_classify_cubic_curves creating cheat sheet" << endl;
775 }
776 char fname[1000];
777 char title[1000];
778 char author[1000];
779 snprintf(title, 1000, "Cubic Curves in PG$(2,%d)$", PA->F->q);
780 strcpy(author, "");
781 snprintf(fname, 1000, "Cubic_curves_q%d.tex", PA->F->q);
782
783 {
784 ofstream fp(fname);
786
787 //latex_head_easy(fp);
788 L.head(fp,
789 FALSE /* f_book */,
790 TRUE /* f_title */,
791 title, author,
792 FALSE /*f_toc */,
793 FALSE /* f_landscape */,
794 FALSE /* f_12pt */,
795 TRUE /*f_enlarged_page */,
796 TRUE /* f_pagenumbers*/,
797 NULL /* extra_praeamble */);
798
799 fp << "\\subsection*{" << title << "}" << endl;
800
801 if (f_v) {
802 cout << "projective_space_global::do_classify_cubic_curves before CCC->report" << endl;
803 }
804 CCC->report(fp, verbose_level);
805 if (f_v) {
806 cout << "projective_space_global::do_classify_cubic_curves after CCC->report" << endl;
807 }
808
809 L.foot(fp);
810 }
811
813
814 cout << "Written file " << fname << " of size "
815 << Fio.file_size(fname) << endl;
816
817 if (f_v) {
818 cout << "projective_space_global::do_classify_cubic_curves writing cheat sheet on "
819 "cubic curves done" << endl;
820 }
821
822
823 if (f_v) {
824 cout << "projective_space_global::do_classify_cubic_curves done" << endl;
825 }
826}
827
830 std::string &fname_mask, int nb,
831 std::string &fname_classification,
832 canonical_form_classifier *&Classifier,
833 int verbose_level)
834{
835 int f_v = (verbose_level >= 1);
836
837
838 if (f_v) {
839 cout << "projective_space_global::classify_quartic_curves_nauty" << endl;
840 }
841
842
844
846
847 Descr->fname_mask.assign(fname_mask);
848 Descr->f_fname_base_out = TRUE;
849 Descr->fname_base_out.assign(fname_classification);
850 Descr->PA = PA;
851 Descr->f_degree = TRUE;
852 Descr->degree = 4;
853 Descr->nb_files = nb;
854 Descr->f_algorithm_nauty = TRUE;
856
857
859
860 Classifier->classify(Descr, verbose_level);
861
862 cout << "The number of types of quartic curves is " << Classifier->CB->nb_types << endl;
863
864 Descr->Canon_substructure = Classifier;
865
866
867
868 int idx;
869
870 cout << "idx : ago" << endl;
871 for (idx = 0; idx < Classifier->CB->nb_types; idx++) {
872
875
876 C1 = (canonical_form_nauty *) Classifier->CB->Type_extra_data[idx];
877
879
880 cout << idx << " : " << go << endl;
881
882
883 }
884
885
886
887 if (f_v) {
888 cout << "projective_space_global::classify_quartic_curves_nauty done" << endl;
889 }
890}
891
894 std::string &fname_mask, int nb, int substructure_size, int degree,
895 std::string &fname_classification,
896 canonical_form_classifier *&Classifier,
897 int verbose_level)
898{
899 int f_v = (verbose_level >= 1);
900
901
902 if (f_v) {
903 cout << "projective_space_global::classify_quartic_curves_with_substructure" << endl;
904 }
905
907
909
910
911 Descr->fname_mask.assign(fname_mask);
912 Descr->f_fname_base_out = TRUE;
913 Descr->fname_base_out.assign(fname_classification);
914 Descr->PA = PA;
915 Descr->f_degree = TRUE;
916 Descr->degree = degree;
917 Descr->nb_files = nb;
918 Descr->f_algorithm_nauty = FALSE;
920 Descr->substructure_size = substructure_size;
921
922
924
925 if (f_v) {
926 cout << "projective_space_global::classify_quartic_curves_with_substructure before Classifier.classify" << endl;
927 }
928 Classifier->classify(Descr, verbose_level);
929 if (f_v) {
930 cout << "projective_space_global::classify_quartic_curves_with_substructure after Classifier.classify" << endl;
931 }
932
933 Descr->Canon_substructure = Classifier;
934
935
936 if (f_v) {
937 cout << "projective_space_global::classify_quartic_curves_with_substructure before Classifier.report" << endl;
938 }
939 Classifier->report(fname_classification, verbose_level);
940 if (f_v) {
941 cout << "projective_space_global::classify_quartic_curves_with_substructure after Classifier.report" << endl;
942 }
943
944
945#if 0
946 cout << "The number of types of quartic curves is " << Classifier.CB->nb_types << endl;
947 int idx;
948
949 cout << "idx : ago" << endl;
950 for (idx = 0; idx < Classifier.CB->nb_types; idx++) {
951
952 canonical_form *C1;
953 longinteger_object go;
954
955 C1 = (canonical_form *) Classifier.CB->Type_extra_data[idx];
956
957 C1->Stab_gens_quartic->group_order(go);
958
959 cout << idx << " : " << go << endl;
960
961
962 }
963#endif
964
965
966 if (f_v) {
967 cout << "projective_space_global::classify_quartic_curves_with_substructure done" << endl;
968 }
969}
970
971
974 std::string &fname_mask,
975 int nb,
976 int size,
977 int degree,
978 std::string &fname_classification,
979 int verbose_level)
980{
981 int f_v = (verbose_level >= 1);
982
983 if (f_v) {
984 cout << "projective_space_global::classify_quartic_curves" << endl;
985 }
986
987 canonical_form_classifier *Classifier;
988
989
991 fname_mask,
992 nb,
993 size,
994 degree,
995 fname_classification,
996 Classifier,
997 verbose_level);
998
999#if 0
1000 cout << "transversal:" << endl;
1001 Orbiter->Int_vec.print(cout, Classifier->transversal, Classifier->nb_types);
1002 cout << endl;
1003
1004 int i, j;
1005
1006 cout << "orbit frequencies:" << endl;
1007 for (i = 0; i < Classifier->nb_types; i++) {
1008 cout << i << " : ";
1009
1010 j = Classifier->transversal[i];
1011
1012 cout << j << " : ";
1013
1014 if (Classifier->CFS_table[j]) {
1015 Orbiter->Int_vec.print(cout,
1016 Classifier->CFS_table[j]->SubSt->orbit_frequencies,
1017 Classifier->CFS_table[j]->SubSt->nb_orbits);
1018 }
1019 else {
1020 cout << "DNE";
1021 }
1022
1023 cout << endl;
1024
1025 }
1026
1027 int *orbit_frequencies;
1028 int nb_orbits = 0;
1029
1030 for (i = 0; i < Classifier->nb_types; i++) {
1031 cout << i << " : ";
1032
1033 j = Classifier->transversal[i];
1034
1035 cout << j << " : ";
1036
1037 if (Classifier->CFS_table[j]) {
1038 nb_orbits = Classifier->CFS_table[j]->SubSt->nb_orbits;
1039 break;
1040 }
1041 }
1042 if (i == Classifier->nb_types) {
1043 cout << "cannot determine nb_orbits" << endl;
1044 exit(1);
1045 }
1046 orbit_frequencies = NEW_int(Classifier->nb_types * nb_orbits);
1047
1048 Orbiter->Int_vec.zero(orbit_frequencies, Classifier->nb_types * nb_orbits);
1049
1050 for (i = 0; i < Classifier->nb_types; i++) {
1051
1052 j = Classifier->transversal[i];
1053
1054 if (Classifier->CFS_table[j]) {
1056 Classifier->CFS_table[j]->SubSt->orbit_frequencies,
1057 orbit_frequencies + i * nb_orbits,
1058 nb_orbits);
1059 }
1060
1061 }
1062
1063 tally_vector_data *T;
1064 int *transversal;
1065 int *frequency;
1066 int nb_types;
1067
1068 T = NEW_OBJECT(tally_vector_data);
1069
1070 T->init(orbit_frequencies, Classifier->nb_types, nb_orbits, verbose_level);
1071
1072
1073
1074 T->get_transversal(transversal, frequency, nb_types, verbose_level);
1075
1076
1077 cout << "Classification of types:" << endl;
1078 cout << "nb_types=" << nb_types << endl;
1079
1080
1081 cout << "transversal:" << endl;
1082 Orbiter->Int_vec.print(cout, transversal, nb_types);
1083 cout << endl;
1084
1085 cout << "frequency:" << endl;
1086 Orbiter->Int_vec.print(cout, frequency, nb_types);
1087 cout << endl;
1088
1089 T->print_classes_bigger_than_one(verbose_level);
1090
1091
1092 file_io Fio;
1093 std::string fname;
1094 string_tools String;
1095 char str[1000];
1096
1097 fname.assign(fname_mask);
1098 String.chop_off_extension(fname);
1099 sprintf(str, "_subset%d_types.csv", size);
1100 fname.append(str);
1101
1102
1103 cout << "preparing table" << endl;
1104 int *table;
1105 int h;
1106
1107 table = NEW_int(Classifier->nb_types * (nb_orbits + 2));
1108 for (i = 0; i < Classifier->nb_types; i++) {
1109
1110 cout << "preparing table i=" << i << endl;
1111
1112 h = Classifier->transversal[i];
1113
1114 cout << "preparing table i=" << i << " h=" << h << endl;
1115
1116 table[i * (nb_orbits + 2) + 0] = i;
1117
1118 for (j = 0; j < nb_orbits; j++) {
1119 table[i * (nb_orbits + 2) + 1 + j] = orbit_frequencies[i * nb_orbits + j];
1120 }
1121
1122 table[i * (nb_orbits + 2) + 1 + nb_orbits] = Classifier->CFS_table[h]->SubSt->selected_orbit;
1123
1124 }
1125
1126 Fio.int_matrix_write_csv(fname, table, Classifier->nb_types, nb_orbits + 2);
1127 cout << "Written file " << fname << " of size " << Fio.file_size(fname) << endl;
1128
1129
1130 if (Classifier->nb_types == 1) {
1131 cout << "preparing detailed information:" << endl;
1132
1133 i = 0;
1134 int h;
1135
1137
1138 h = Classifier->transversal[i];
1139
1140 SubSt = Classifier->CFS_table[h]->SubSt;
1141
1142 cout << "nb_interesting_subsets = "
1143 << SubSt->nb_interesting_subsets << endl;
1144 cout << "interesting subsets: ";
1146 cout << endl;
1147
1148 cout << "selected_orbit=" << SubSt->selected_orbit << endl;
1149
1150 cout << "generators for the canonical subset:" << endl;
1151 SubSt->gens->print_generators_tex();
1152
1153
1155
1156 CS = Classifier->CFS_table[h]->CS;
1157
1158 stabilizer_orbits_and_types *Stab_orbits;
1159
1160 Stab_orbits = CS->Stab_orbits;
1161
1162 cout << "reduced_set_size=" << Stab_orbits->reduced_set_size << endl;
1163
1164 cout << "nb_orbits=" << Stab_orbits->Schreier->nb_orbits << endl;
1165
1166 cout << "Orbit length:" << endl;
1168 Stab_orbits->Schreier->orbit_len,
1169 1,
1170 Stab_orbits->Schreier->nb_orbits,
1171 Stab_orbits->Schreier->nb_orbits,
1172 2);
1173
1174 cout << "Orbit_patterns:" << endl;
1175#if 0
1177 Stab_orbits->Orbit_patterns,
1179 Stab_orbits->Schreier->nb_orbits,
1180 Stab_orbits->Schreier->nb_orbits,
1181 2);
1182#endif
1183
1184 cout << "minimal orbit pattern:" << endl;
1185 Stab_orbits->print_minimal_orbit_pattern();
1186
1187
1188 tally_vector_data *T_O;
1189 int *T_O_transversal;
1190 int *T_O_frequency;
1191 int T_O_nb_types;
1192
1193 T_O = NEW_OBJECT(tally_vector_data);
1194
1195 T_O->init(Stab_orbits->Orbit_patterns, CS->SubSt->nb_interesting_subsets,
1196 Stab_orbits->Schreier->nb_orbits, verbose_level);
1197
1198
1199
1200 T_O->get_transversal(T_O_transversal, T_O_frequency, T_O_nb_types, verbose_level);
1201
1202 cout << "T_O_nb_types = " << T_O_nb_types << endl;
1203
1204 cout << "T_O_transversal:" << endl;
1205 Orbiter->Int_vec.print(cout, T_O_transversal, T_O_nb_types);
1206 cout << endl;
1207
1208 cout << "T_O_frequency:" << endl;
1209 Orbiter->Int_vec.print(cout, T_O_frequency, T_O_nb_types);
1210 cout << endl;
1211
1212 T_O->print_classes_bigger_than_one(verbose_level);
1213
1214 cout << "Types classified:" << endl;
1215 int u, v;
1216
1217 for (u = 0; u < T_O_nb_types; u++) {
1218 v = T_O_transversal[u];
1219
1220 if (v == Stab_orbits->minimal_orbit_pattern_idx) {
1221 cout << "*";
1222 }
1223 else {
1224 cout << " ";
1225 }
1226 cout << setw(3) << u << " : " << setw(3) << v << " : " << setw(3) << T_O_frequency[u] << " : ";
1227
1229 Stab_orbits->Orbit_patterns + v * Stab_orbits->Schreier->nb_orbits,
1230 1,
1231 Stab_orbits->Schreier->nb_orbits,
1232 Stab_orbits->Schreier->nb_orbits,
1233 2);
1234
1235 }
1236
1237
1238 cout << "Types classified in lex order:" << endl;
1239
1240 int *data;
1241
1242 data = NEW_int(T_O_nb_types * Stab_orbits->Schreier->nb_orbits);
1243 for (u = 0; u < T_O_nb_types; u++) {
1244
1245 cout << setw(3) << u << " : " << setw(3) << T_O->Frequency_in_lex_order[u] << " : ";
1246
1248 T_O->Reps_in_lex_order[u],
1249 1,
1250 Stab_orbits->Schreier->nb_orbits,
1251 Stab_orbits->Schreier->nb_orbits,
1252 2);
1253 Orbiter->Int_vec.copy(T_O->Reps_in_lex_order[u], data + u * Stab_orbits->Schreier->nb_orbits, Stab_orbits->Schreier->nb_orbits);
1254 }
1255
1256 fname.assign(fname_mask);
1257 String.chop_off_extension(fname);
1258 sprintf(str, "_subset%d_types_classified.csv", size);
1259 fname.append(str);
1260
1261 Fio.int_matrix_write_csv(fname, data, T_O_nb_types, Stab_orbits->Schreier->nb_orbits);
1262 cout << "Written file " << fname << " of size " << Fio.file_size(fname) << endl;
1263
1264
1265
1266 cout << "All canonical_forms:" << endl;
1268 CS->Canonical_forms,
1269 Stab_orbits->nb_interesting_subsets_reduced,
1270 Stab_orbits->reduced_set_size,
1271 Stab_orbits->reduced_set_size,
1272 2);
1273
1274 cout << "All canonical_forms, with transporter" << endl;
1276
1277
1278 fname.assign(fname_mask);
1279 String.chop_off_extension(fname);
1280 sprintf(str, "_subset%d_cf_input.csv", size);
1281 fname.append(str);
1282
1283#if 0
1284 Fio.lint_matrix_write_csv(fname, CS->Canonical_form_input,
1285 Stab_orbits->nb_interesting_subsets_reduced,
1286 Stab_orbits->reduced_set_size);
1287 cout << "Written file " << fname << " of size " << Fio.file_size(fname) << endl;
1288#endif
1289
1290 Fio.write_characteristic_matrix(fname,
1292 Stab_orbits->nb_interesting_subsets_reduced,
1293 Stab_orbits->reduced_set_size,
1294 Stab_orbits->nb_interesting_points,
1295 verbose_level);
1296
1297
1298
1299 fname.assign(fname_mask);
1300 String.chop_off_extension(fname);
1301 sprintf(str, "_subset%d_cf_output.csv", size);
1302 fname.append(str);
1303
1304#if 0
1305 Fio.lint_matrix_write_csv(fname, CS->Canonical_forms, Stab_orbits->nb_interesting_subsets_reduced, Stab_orbits->reduced_set_size);
1306 cout << "Written file " << fname << " of size " << Fio.file_size(fname) << endl;
1307#endif
1308
1309 Fio.write_characteristic_matrix(fname,
1310 CS->Canonical_forms,
1311 Stab_orbits->nb_interesting_subsets_reduced,
1312 Stab_orbits->reduced_set_size,
1313 Stab_orbits->nb_interesting_points,
1314 verbose_level);
1315
1316 fname.assign(fname_mask);
1317 String.chop_off_extension(fname);
1318 sprintf(str, "_subset%d_cf_transporter.tex", size);
1319 fname.append(str);
1320
1321
1322 std::string title;
1323
1324 title.assign("Transporter");
1325 PA->A->write_set_of_elements_latex_file(fname, title,
1327 Stab_orbits->nb_interesting_subsets_reduced);
1328
1329
1330 cout << "Written file " << fname << " of size " << Fio.file_size(fname) << endl;
1331
1332 }
1333#endif
1334
1335
1336
1337#if 0
1338
1339
1341
1342#if 0
1343 long int *interesting_subsets; // [selected_frequency]
1344 int nb_interesting_subsets;
1345 // interesting_subsets are the lvl-subsets of the given set
1346 // which are of the chosen type.
1347 // There is nb_interesting_subsets of them.
1348
1349 strong_generators *gens;
1350#endif
1351
1352
1353
1355#if 0
1356 action *A_on_the_set;
1357 // only used to print the induced action on the set
1358 // of the set stabilizer
1359
1360 sims *Stab; // the stabilizer of the original set
1361
1362
1363 longinteger_object stab_order, new_stab_order;
1364 int nb_times_orbit_count_does_not_match_up;
1365 int backtrack_nodes_first_time;
1366 int backtrack_nodes_total_in_loop;
1367
1368 stabilizer_orbits_and_types *Stab_orbits;
1369#if 0
1370 strong_generators *selected_set_stab_gens;
1371 sims *selected_set_stab;
1372
1373
1374 int reduced_set_size; // = set_size - level
1375
1376
1377
1378
1379 long int *reduced_set1; // [set_size]
1380 long int *reduced_set2; // [set_size]
1381 long int *reduced_set1_new_labels; // [set_size]
1382 long int *reduced_set2_new_labels; // [set_size]
1383 long int *canonical_set1; // [set_size]
1384 long int *canonical_set2; // [set_size]
1385
1386 int *elt1, *Elt1, *Elt1_inv, *new_automorphism, *Elt4;
1387 int *elt2, *Elt2;
1388 int *transporter0; // = elt1 * elt2
1389
1390 longinteger_object go_G;
1391
1392 schreier *Schreier;
1393 int nb_orbits;
1394 int *orbit_count1; // [nb_orbits]
1395 int *orbit_count2; // [nb_orbits]
1396
1397
1398 int nb_interesting_subsets_reduced;
1399 long int *interesting_subsets_reduced;
1400
1401 int *Orbit_patterns; // [nb_interesting_subsets * nb_orbits]
1402
1403
1404 int *orbit_to_interesting_orbit; // [nb_orbits]
1405
1406 int nb_interesting_orbits;
1407 int *interesting_orbits;
1408
1409 int nb_interesting_points;
1410 long int *interesting_points;
1411
1412 int *interesting_orbit_first;
1413 int *interesting_orbit_len;
1414
1415 int local_idx1, local_idx2;
1416#endif
1417
1418
1419
1420
1421
1422
1423 action *A_induced;
1424 longinteger_object induced_go, K_go;
1425
1426 int *transporter_witness;
1427 int *transporter1;
1428 int *transporter2;
1429 int *T1, *T1v;
1430 int *T2;
1431
1432 sims *Kernel_original;
1433 sims *K; // kernel for building up Stab
1434
1435
1436
1437 sims *Aut;
1438 sims *Aut_original;
1439 longinteger_object ago;
1440 longinteger_object ago1;
1441 longinteger_object target_go;
1442
1443
1444 //union_find_on_k_subsets *U;
1445
1446
1447 long int *Canonical_forms; // [nb_interesting_subsets_reduced * reduced_set_size]
1448 int nb_interesting_subsets_rr;
1449 long int *interesting_subsets_rr;
1450#endif
1451
1452 strong_generators *Gens_stabilizer_original_set;
1453 strong_generators *Gens_stabilizer_canonical_form;
1454
1455
1456 orbit_of_equations *Orb;
1457
1458 strong_generators *gens_stab_of_canonical_equation;
1459
1460 int *trans1;
1461 int *trans2;
1462 int *intermediate_equation;
1463
1464
1465
1466 int *Elt;
1467 int *eqn2;
1468
1469 int *canonical_equation;
1470 int *transporter_to_canonical_form;
1471#endif
1472
1473 if (f_v) {
1474 cout << "projective_space_global::classify_quartic_curves done" << endl;
1475 }
1476
1477}
1478
1481 int intermediate_subset_size,
1482 std::string &fname_mask, int nb, std::string &column_label,
1483 std::string &fname_out,
1484 int verbose_level)
1485{
1486 int f_v = (verbose_level >= 1);
1487
1488
1489 if (f_v) {
1490 cout << "projective_space_global::set_stabilizer" << endl;
1491 }
1492
1493#if 0
1494 top_level_geometry_global T;
1495
1496 T.set_stabilizer_projective_space(
1497 PA,
1498 intermediate_subset_size,
1499 fname_mask, nb, column_label,
1500 verbose_level);
1501#endif
1503
1505
1507 PA->A, PA->A, PA->A->Strong_gens,
1508 intermediate_subset_size,
1509 fname_mask, nb, column_label,
1510 fname_out,
1511 verbose_level);
1512 FREE_OBJECT(SubC);
1513
1514 if (f_v) {
1515 cout << "projective_space_global::set_stabilizer done" << endl;
1516 }
1517
1518}
1519
1520
1521
1522
1523}}}
1524
1525
1526
1527
1528
void init(field_theory::finite_field *F, int verbose_level)
Definition: cubic_curve.cpp:68
void init(field_theory::finite_field *F, int verbose_level)
void print_integer_matrix_width(std::ostream &ost, int *p, int m, int n, int dim_n, int w)
Definition: int_vec.cpp:852
void copy(int *from, int *to, long int len)
Definition: int_vec.cpp:167
void print(std::ostream &ost, std::vector< int > &v)
Definition: int_vec.cpp:413
void matrix_print_width(std::ostream &ost, long int *p, int m, int n, int dim_n, int w)
Definition: lint_vec.cpp:159
void print(std::ostream &ost, long int *v, int len)
Definition: lint_vec.cpp:246
void mult_matrix_matrix(int *A, int *B, int *C, int m, int n, int o, int verbose_level)
void head(std::ostream &ost, int f_book, int f_title, const char *title, const char *author, int f_toc, int f_landscape, int f_12pt, int f_enlarged_page, int f_pagenumbers, const char *extras_for_preamble)
orbiter_kernel_system::orbiter_symbol_table * Orbiter_symbol_table
a class to represent arbitrary precision integers
Definition: ring_theory.h:366
groups::strong_generators * Strong_gens
Definition: actions.h:130
void write_set_of_elements_latex_file(std::string &fname, std::string &title, int *Elt, int nb_elts)
Definition: action_io.cpp:962
a strong generating set for a permutation group with respect to a fixed action
Definition: groups.h:1703
void group_order(ring_theory::longinteger_object &go)
substructure_stats_and_selection * SubSt
orbit of homogeneous equations using a Schreier tree
Definition: orbits.h:30
orbits of the stabilizer of the substructure and orbit types
void set_stabilizer_in_any_space(actions::action *A, actions::action *A2, groups::strong_generators *Strong_gens, int intermediate_subset_size, std::string &fname_mask, int nb, std::string &column_label, std::string &fname_out, int verbose_level)
void complete_skew_hexagon_with_polarity(std::string &label_for_printing, long int *skew_hexagon, int *Polarity36, std::vector< std::vector< long int > > &Double_sixes, int verbose_level)
void init(algebraic_geometry::surface_domain *Surf, projective_geometry::projective_space_with_action *PA, int f_recoordinatize, int verbose_level)
void create_surface(surface_create_description *Surface_Descr, surface_create *&SC, int verbose_level)
void complete_skew_hexagon(long int *skew_hexagon, std::vector< std::vector< long int > > &Double_sixes, int verbose_level)
to create a cubic surface from a description using class surface_create_description
a wrapper for linear_group and permutation_group_create
description of a classification problem of arcs in a geometry
Definition: tl_geometry.h:27
poset_classification::poset_classification_control * Control
Definition: tl_geometry.h:32
classification of arcs in desarguesian projective planes
Definition: tl_geometry.h:75
void init(arc_generator_description *Descr, projective_geometry::projective_space_with_action *PA, groups::strong_generators *SG, int verbose_level)
void init(projective_geometry::projective_space_with_action *PA, cubic_curve_with_action *CCA, arc_generator_description *Descr, int verbose_level)
domain for cubic curves in projective space with automorphism group
Definition: tl_geometry.h:378
void init(algebraic_geometry::cubic_curve *CC, actions::action *A, int verbose_level)
void classify(canonical_form_classifier_description *Descr, int verbose_level)
to compute the canonical form of an object using nauty
void do_classify_cubic_curves(projective_space_with_action *PA, apps_geometry::arc_generator_description *Arc_generator_description, int verbose_level)
void analyze_del_Pezzo_surface(projective_space_with_action *PA, std::string &label, std::string &evaluate_text, int verbose_level)
void conic_type(projective_space_with_action *PA, int threshold, std::string &set_text, int verbose_level)
void do_lift_skew_hexagon_with_polarity(projective_space_with_action *PA, std::string &polarity_36, int verbose_level)
void map(projective_space_with_action *PA, std::string &label, std::string &evaluate_text, int verbose_level)
void set_stabilizer(projective_space_with_action *PA, int intermediate_subset_size, std::string &fname_mask, int nb, std::string &column_label, std::string &fname_out, int verbose_level)
void do_classify_arcs(projective_space_with_action *PA, apps_geometry::arc_generator_description *Arc_generator_description, int verbose_level)
void do_create_surface(projective_space_with_action *PA, applications_in_algebraic_geometry::cubic_surfaces_in_general::surface_create_description *Surface_Descr, applications_in_algebraic_geometry::cubic_surfaces_in_general::surface_with_action *&Surf_A, applications_in_algebraic_geometry::cubic_surfaces_in_general::surface_create *&SC, int verbose_level)
void classify_quartic_curves_with_substructure(projective_space_with_action *PA, std::string &fname_mask, int nb, int substructure_size, int degree, std::string &fname_classification, canonical_form_classifier *&Classifier, int verbose_level)
void do_lift_skew_hexagon(projective_space_with_action *PA, std::string &text, int verbose_level)
void analyze_del_Pezzo_surface_formula_given(projective_space_with_action *PA, expression_parser::formula *F, std::string &evaluate_text, int verbose_level)
void classify_quartic_curves(projective_space_with_action *PA, std::string &fname_mask, int nb, int size, int degree, std::string &fname_classification, int verbose_level)
void classify_quartic_curves_nauty(projective_space_with_action *PA, std::string &fname_mask, int nb, std::string &fname_classification, canonical_form_classifier *&Classifier, int verbose_level)
projective space PG(n,q) with automorphism group PGGL(n+1,q)
void conic_type(long int *Pts, int nb_pts, int threshold, int verbose_level)
void map(expression_parser::formula *Formula, std::string &evaluate_text, int verbose_level)
void analyze_del_Pezzo_surface(expression_parser::formula *Formula, std::string &evaluate_text, int verbose_level)
#define Int_vec_scan(A, B, C)
Definition: foundations.h:716
#define Int_vec_zero(A, B)
Definition: foundations.h:713
#define Lint_vec_scan(A, B, C)
Definition: foundations.h:717
#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 Int_matrix_print(A, B, C)
Definition: foundations.h:707
#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
user_interface::orbiter_top_level_session * The_Orbiter_top_level_session
the orbiter library for the classification of combinatorial objects