Orbiter 2022
Combinatorial Objects
packing_classify2.cpp
Go to the documentation of this file.
1// packing_classify2.cpp
2//
3// Anton Betten
4// Feb 6, 2013
5//
6// moved here from packing.cpp: Apr 25, 2016
7//
8//
9//
10
11#include "orbiter.h"
12
13using namespace std;
14
15namespace orbiter {
16namespace layer5_applications {
17namespace packings {
18
19
21 isomorph *Iso, int f_split, int split_r, int split_m,
22 int verbose_level)
23{
24 int f_v = (verbose_level >= 1);
25 int f_vv = (verbose_level >= 2);
26 int f_v3 = (verbose_level >= 3);
27 int orbit, id;
29
30 if (f_v) {
31 cout << "packing_classify::compute_klein_invariants" << endl;
32 }
33
34 for (orbit = 0; orbit < Iso->Reps->count; orbit++) {
35
36 if (f_split && (orbit % split_m) != split_r) {
37 continue;
38 }
39
40 if (f_v) {
41 cout << "packing_classify::compute_klein_invariants orbit "
42 << orbit << " / " << Iso->Reps->count << endl;
43 }
44
45 string fname;
46
47 klein_invariants_fname(fname, Iso->prefix_invariants, orbit);
48 cout << "file size of " << fname << " is " << Fio.file_size(fname) << endl;
49 if (Fio.file_size(fname) > 0) {
50 if (f_v) {
51 cout << "file " << fname << " exists, skipping" << endl;
52 }
53 continue;
54 }
55 id = Iso->orbit_perm[Iso->orbit_fst[Iso->Reps->rep[orbit]]];
56
57 Iso->load_solution(id, the_packing);
58 if (f_vv) {
59 cout << "read representative of orbit " << orbit
60 << " (id=" << id << ")" << endl;
61 Lint_vec_print(cout, the_packing, Iso->size);
62 cout << endl;
63 }
65 the_packing, size_of_packing, verbose_level - 2);
66 if (f_v3) {
67 cout << "read representative of orbit " << orbit
68 << " (id=" << id << ") list of lines:" << endl;
71 cout << endl;
72 }
73
74 if (f_v) {
75 cout << "packing_classify::compute_klein_invariants orbit "
76 << orbit << " / " << Iso->Reps->count
77 << " before compute_and_save_klein_invariants" << endl;
78 }
80 orbit,
83 verbose_level - 2);
84 if (f_v) {
85 cout << "packing_classify::compute_klein_invariants orbit "
86 << orbit << " / " << Iso->Reps->count
87 << " after compute_and_save_klein_invariants" << endl;
88 }
89
90 } // next orbit
91
92
93 if (f_v) {
94 cout << "packing_classify::compute_klein_invariants done" << endl;
95 }
96}
97
99 std::string &fname, std::string &prefix, int iso_cnt)
100{
101 fname.assign(prefix);
102 char str[1000];
103 sprintf(str, "%d_klein_invariant.bin", iso_cnt);
104 fname.append(str);
105}
106
108 int iso_cnt,
109 long int *data, int data_size, int verbose_level)
110{
111 int f_v = (verbose_level >= 1);
113 long int **Pts_on_plane;
114 int *nb_pts_on_plane;
115 int nb_planes;
116 int i, j;
117
118 if (f_v) {
119 cout << "packing_classify::compute_and_save_klein_invariants" << endl;
120 }
121
122 if (data_size != size_of_packing * spread_size) {
123 cout << "packing_classify::compute_and_save_klein_invariants "
124 "data_size != size_of_packing * spread_size" << endl;
125 exit(1);
126 }
127
128 if (f_v) {
129 cout << "packing_classify::compute_and_save_klein_invariants "
130 "before P3->klein_correspondence" << endl;
131 }
133 data, data_size, list_of_lines_klein_image, 0/*verbose_level*/);
134
135
136
137
138 if (f_v) {
139 cout << "packing_classify::compute_and_save_klein_invariants "
140 "after P3->klein_correspondence" << endl;
141 }
142 if (f_v) {
143 cout << "packing_classify::compute_and_save_klein_invariants "
144 "before plane_intersection_type_fast" << endl;
145 }
147 R, Pts_on_plane, nb_pts_on_plane, nb_planes,
148 verbose_level /*- 3*/);
149
150 if (f_v) {
151 cout << "packing_classify::compute_and_save_klein_invariants: "
152 "We found " << nb_planes << " planes." << endl;
153#if 1
154 for (i = 0; i < nb_planes; i++) {
155 cout << setw(3) << i << " : " << R[i]
156 << " : " << setw(5) << nb_pts_on_plane[i] << " : ";
157 Lint_vec_print(cout, Pts_on_plane[i], nb_pts_on_plane[i]);
158 cout << endl;
159 }
160#endif
161 }
162
163 Vector v;
164
165 v.m_l(3);
166 v.m_ii(0, nb_planes);
167 v.s_i(1).change_to_vector();
168 v.s_i(2).change_to_vector();
169
170 v.s_i(1).as_vector().m_l(nb_planes);
171 v.s_i(2).as_vector().m_l(nb_planes);
172 for (i = 0; i < nb_planes; i++) {
173 v.s_i(1).as_vector().m_ii(i, R[i].as_int());
174 //v.s_i(1).as_vector().s_i(i).change_to_longinteger();
175 //v.s_i(1).as_vector().s_i(i).as_longinteger().allocate(1, R[i].rep());
176 v.s_i(2).as_vector().s_i(i).change_to_vector();
177 v.s_i(2).as_vector().s_i(i).as_vector().m_l(nb_pts_on_plane[i]);
178 for (j = 0; j < nb_pts_on_plane[i]; j++) {
179 v.s_i(2).as_vector().s_i(i).as_vector().m_ii(j, Pts_on_plane[i][j]);
180 }
181 }
182
183 string fname;
184
185 klein_invariants_fname(fname, prefix, iso_cnt);
186 v.save_file(fname.c_str());
187
188 delete [] R;
189 for (i = 0; i < nb_planes; i++) {
190 FREE_lint(Pts_on_plane[i]);
191 }
192 FREE_plint(Pts_on_plane);
193 FREE_int(nb_pts_on_plane);
194
195 if (f_v) {
196 cout << "packing_classify::compute_and_save_klein_invariants done" << endl;
197 }
198}
199
200
201void packing_classify::report(isomorph *Iso, int verbose_level)
202{
203 int f_v = (verbose_level >= 1);
204 //int f_vv = (verbose_level >= 2);
205 char fname[1000];
207
208 if (f_v) {
209 cout << "packing_classify::report" << endl;
210 }
211
212 sprintf(fname, "packing_report_q%d.tex", (int)q);
213
214 {
215 ofstream f(fname);
216
217 cout << "Writing file " << fname << " with "
218 << Iso->Reps->count << " spreads:" << endl;
219
220 report_whole(Iso, f, verbose_level);
221
222 } // close file f
223 if (f_v) {
224 cout << "packing_classify::report written file " << fname
225 << " of size " << Fio.file_size(fname) << endl;
226 }
227
228
229
230 if (f_v) {
231 cout << "packing_classify::report done" << endl;
232 }
233}
234
236 ostream &ost, int verbose_level)
237{
238 int f_v = (verbose_level >= 1);
239
240 report_title_page(Iso, ost, verbose_level);
241
242 ost << "\\chapter{Summary}" << endl << endl;
243 ost << "There are " << Iso->Reps->count
244 << " packings of PG$(3," << q << ")$." << endl << endl;
245
246
247
248
249 invariants_packing *inv = NULL;
250
251
252
254
255
256 if (f_v) {
257 cout << "packing::report loading and "
258 "computing invariants" << endl;
259 }
260
261 inv->init(Iso, this, verbose_level);
262
263
264 if (f_v) {
265 cout << "packing::report loading and "
266 "computing invariants done" << endl;
267 }
268
269
271
272
273 C_ago.init(inv->Ago_int, Iso->Reps->count, FALSE, 0);
274 ost << "Classification by Ago: ";
275 C_ago.print_naked_tex(ost, TRUE /*f_backwards*/);
276 ost << "\\\\" << endl;
277
278 ost << "\\chapter{Invariants: Types of Packing}" << endl << endl;
279
280
281
282 inv->make_table(Iso, ost, FALSE, FALSE, verbose_level);
283
284 ost << "\\clearpage" << endl << endl;
285
286 inv->make_table(Iso, ost, TRUE, FALSE, verbose_level);
287
288 ost << "\\clearpage" << endl << endl;
289
290 inv->make_table(Iso, ost, FALSE, TRUE, verbose_level);
291
292 ost << "\\clearpage" << endl << endl;
293
294
295 report_packings_by_ago(Iso, ost, inv, C_ago, verbose_level);
296
297
298
299 report_extra_stuff(Iso, ost, verbose_level);
300
301
303 L.foot(ost);
304 if (inv) {
305 FREE_OBJECT(inv);
306 }
307}
308
310 isomorph *Iso, ostream &ost, int verbose_level)
311{
312 int f_book = TRUE;
313 int f_title = TRUE;
314 char title[1000];
315 const char *author = "Orbiter";
316 int f_toc = TRUE;
317 int f_landscape = FALSE;
318 int f_12pt = FALSE;
319 int f_enlarged_page = TRUE;
320 int f_pagenumbers = TRUE;
322
323 sprintf(title, "The Packings of PG$(%d,%d)$", (int)3, (int)q);
324 L.head(ost, f_book, f_title,
325 title, author,
326 f_toc, f_landscape, f_12pt,
327 f_enlarged_page, f_pagenumbers,
328 NULL /* extra_praeamble */);
329
330
331
332}
333
335 isomorph *Iso, ostream &ost,
337 data_structures::tally &C_ago, int verbose_level)
338{
339 int f_v = (verbose_level >= 1);
341
342 if (f_v) {
343 cout << "packing_classify::report_packings_by_ago" << endl;
344 }
345
346 ost << "\\chapter{The Packings of PG$(3," << q << ")$}"
347 << endl << endl;
348
349 ost << "\\clearpage" << endl << endl;
350
351
352 int u, v, a, cnt, fst, length, t, vv;
353 int *set;
354
355 cnt = 0;
356 for (u = C_ago.nb_types - 1; u >= 0; u--) {
357 fst = C_ago.type_first[u];
358 length = C_ago.type_len[u];
359 t = C_ago.data_sorted[fst];
360
361
362 ost << "\\section{Packings with a Group of Order "
363 "$" << t << "$}" << endl;
364
365 ost << "There are " << length << " packings with an "
366 "automorphism group of order $" << t << "$.\\\\" << endl;
367
368 ost << endl;
369 ost << "\\bigskip" << endl;
370 ost << endl;
371
372 if (length > 100) {
373 ost << "Too many packings to list.\\\\" << endl;
374 continue;
375 }
376
377 set = NEW_int(length);
378
379 for (v = 0; v < length; v++) {
380 vv = fst + v;
381 a = C_ago.sorting_perm_inv[vv];
382 set[v] = a;
383 }
384
385 Sorting.int_vec_heapsort(set, length);
386
387 for (v = 0; v < length; v++, cnt++) {
388
389 int orbit;
390
391 orbit = set[v];
392
393
394 //for (orbit = 0; orbit < Iso->Reps->count; orbit++) {
396 orbit, inv, verbose_level);
397
398 //} // next orbit
399 } // next v
400
401 FREE_int(set);
402 } // next u
403
404
405 if (f_v) {
406 cout << "packing_classify::report_packings_by_ago done" << endl;
407 }
408}
409
410
412 isomorph *Iso, ostream &ost,
413 int orbit, invariants_packing *inv, int verbose_level)
414{
415 int f_v = (verbose_level >= 1);
416 int i, id, rep, first; //, c;
418
419 if (f_v) {
420 cout << "packing_classify::report_isomorphism_type" << endl;
421 }
422
423
424 rep = Iso->Reps->rep[orbit];
425 first = Iso->orbit_fst[rep];
426 //c = Iso->starter_number[first];
427 id = Iso->orbit_perm[first];
428 Iso->load_solution(id, the_packing);
429
430
431 for (i = 0; i < Iso->size; i++) {
433 }
434
435
437 the_packing, size_of_packing, verbose_level - 2);
438
439
440 ost << "\\subsection*{Isomorphism Type " << orbit << "}" << endl;
441 ost << "\\bigskip" << endl;
442
443 for (i = 0; i < Iso->size; i++) {
445 }
446
447 ost << "spread : isotype : dualspread \\\\" << endl;
448 for (i = 0; i < Iso->size; i++) {
449 ost << the_packing[i];
450 ost << " : ";
451 ost << spread_iso_type[i];
452 ost << " : ";
453 ost << dual_packing[i];
454 ost << "\\\\" << endl;
455 }
456 //ost << "\\\\" << endl;
457 ost << "\\bigskip" << endl;
458
460
461 C_iso.init_lint(spread_iso_type, Iso->size, FALSE, 0);
462 ost << "Classification by isomorphism type of spreads: ";
463 C_iso.print_naked_tex(ost, FALSE /*f_backwards*/);
464 ost << "\\\\" << endl;
465
466
467 int dual_idx;
468#if 0
469 int f_implicit_fusion = TRUE;
470 dual_idx = Iso->identify_database_is_open(
471 dual_packing, f_implicit_fusion, verbose_level - 2);
472#endif
473
474 dual_idx = inv->Dual_idx[orbit];
475 ost << "The dual packing belongs to isomorphism type "
476 << dual_idx << "\\\\" << endl;
477 ost << "\\bigskip" << endl;
478
479#if 0
480 ost << "Stabilizer has order $";
481 inv->Ago[orbit].print_not_scientific(ost);
482 ost << "$. The group that is induced has order $";
483 inv->Ago_induced[orbit].print_not_scientific(ost);
484 ost << "$\\\\" << endl;
485#endif
486
487
488#if 0
489 ost << "Plane type of Klein-image is $($ ";
490 inv->Inv[orbit].C->print_naked_tex(ost, TRUE /*f_backwards*/);
491 ost << " $)$" << endl << endl;
492 ost << "\\bigskip" << endl << endl;
493#endif
494
495 groups::sims *Stab;
496
497 Stab = Iso->Reps->stab[orbit];
498
499 Stab->group_order(go);
500 ost << "Stabilizer has order $";
501 go.print_not_scientific(ost);
502 ost << "$\\\\" << endl;
503
504 report_stabilizer(*Iso, ost, orbit, verbose_level);
505
506 if (f_v) {
507 cout << "packing_classify::report computing induced "
508 "action on the set (in data)" << endl;
509 }
510 Iso->induced_action_on_set_basic(Stab, the_packing, verbose_level - 2);
511
512 if (f_v) {
514
515 Iso->AA->group_order(go);
516 cout << "action " << Iso->AA->label << " computed, "
517 "group order is " << go << endl;
518 }
519
520 report_stabilizer_in_action(*Iso, ost, orbit, verbose_level);
521
522 if (go.as_int() > 2) {
523 report_stabilizer_in_action_gap(*Iso, orbit, verbose_level);
524 }
525
527 //longinteger_object go;
528
530 Stab->gens, verbose_level - 2);
531 //cout << "Computed all orbits on the set, "
532 //"found " << Orb.nb_orbits << " orbits" << endl;
533 //cout << "orbit lengths: ";
534 //int_vec_print(cout, Orb.orbit_len, Orb.nb_orbits);
535 //cout << endl;
536
538
539
540 C.init(Orb.orbit_len, Orb.nb_orbits, FALSE, 0);
541
542
543 ost << "\\bigskip" << endl;
544
545 ost << "There are $" << Orb.nb_orbits
546 << "$ orbits on the set.\\\\" << endl;
547 ost << "The orbit type is $[$ ";
548 C.print_naked_tex(ost, FALSE /*f_backwards*/);
549 ost << " $]$\\\\" << endl;
550 ost << "\\bigskip" << endl;
551
553 ost, orbit, inv, verbose_level);
554
555
557 ost, orbit, inv, list_of_lines, verbose_level);
558
559
560
561 if (f_v) {
562 cout << "packing_classify::report_isomorphism_type done" << endl;
563 }
564}
565
567 isomorph *Iso, ostream &ost,
568 int orbit, invariants_packing *inv, long int *list_of_lines,
569 int verbose_level)
570{
572
573#if 1
574 {
575 int nb_points;
576 int *the_spread;
577
578 nb_points = T->Grass->nb_points_covered(0 /*verbose_level*/);
579
580 cout << "nb_points=" << nb_points << endl;
581 the_spread = NEW_int(spread_size * nb_points);
582
583 ost << "The lines of the packing are "
584 "(each row corresponds to a spread):" << endl;
585 ost << "$$" << endl;
586 ost << "\\left[" << endl;
588 ost << "\\right]" << endl;
589 ost << "$$" << endl;
590
591 if (T->Sing) {
592 int i, j, a, b;
593 ost << "$$" << endl;
594 ost << "\\left[" << endl;
595 ost << "\\begin{array}{*{" << spread_size << "}{c}}" << endl;
596 for (i = 0; i < size_of_packing; i++) {
597 for (j = 0; j < spread_size; j++) {
598 a = list_of_lines[i * spread_size + j];
599 b = T->Sing->line_orbit_inv[a];
600 ost << T->Sing->line_orbit_label_tex[b];
601 if (j < spread_size - 1) {
602 ost << " & ";
603 }
604 }
605 ost << "\\\\" << endl;
606 }
607 //int_matrix_print_tex(f,
608 //list_of_lines, size_of_packing, spread_size);
609 ost << "\\end{array}" << endl;
610 ost << "\\right]" << endl;
611 ost << "$$" << endl;
612 }
613#if 0
614 int u, v, a, j;
615 for (u = 0; u < size_of_packing; u++) {
616 f << "Spread $" << u << "$ is spread number $"
617 << packing[u] << "$.\\\\" << endl;
618 f << "Lines of the spread are:" << endl;
619 f << "$$" << endl;
620 for (v = 0; v < spread_size; v++) {
621 if (v && (v % 5) == 0) {
622 f << "$$" << endl;
623 f << "$$" << endl;
624 }
625 a = list_of_lines[u * spread_size + v];
626 T->Grass->unrank_int(a, 0/*verbose_level - 4*/);
627 f << "L_{" << a << "}=";
628 f << "\\left[" << endl;
629 f << "\\begin{array}{c}" << endl;
630 for (i = 0; i < T->k; i++) {
631 for (j = 0; j < T->n; j++) {
632 f << T->Grass->M[i * T->n + j];
633 }
634 f << "\\\\" << endl;
635 }
636 f << "\\end{array}" << endl;
637 f << "\\right]" << endl;
638 } // next v
639 f << "$$" << endl;
640 for (v = 0; v < spread_size; v++) {
641 a = list_of_lines[u * spread_size + v];
642 T->Grass->unrank_int(a, 0/*verbose_level - 4*/);
644 the_spread + v * nb_points,
645 0 /* verbose_level*/);
646 }
647 f << "The partition of the point set is:\\\\" << endl;
648 f << "$$" << endl;
649 f << "\\left[" << endl;
650 int_matrix_print_tex(f,
651 the_spread, spread_size, nb_points);
652 f << "\\right]" << endl;
653 f << "$$" << endl;
654 } // next u
655#endif
656 FREE_int(the_spread);
657 }
658#endif
659}
660
662 isomorph *Iso, ostream &ost,
663 int orbit, invariants_packing *inv,
664 int verbose_level)
665{
666 //int f_v = (verbose_level >= 1);
667 int f_vv = (verbose_level >= 2);
669
670 // klein invariants:
671 {
672 string fname_klein;
673 Vector V;
674
675 klein_invariants_fname(fname_klein,
676 Iso->prefix_invariants, orbit);
677 if (Fio.file_size(fname_klein) > 0) {
678 if (f_vv) {
679 cout << "packing::report loading "
680 "file " << fname_klein << endl;
681 }
682 V.load_file(fname_klein.c_str());
683 inv->Inv[orbit].init_klein_invariants(
684 V, verbose_level - 1);
685 // free, so that we don't use that much memory:
686 V.freeself();
687
688 inv->Inv[orbit].compute_decomposition(verbose_level - 1);
689 ost << "\\bigskip" << endl << endl;
690 if (Fio.file_size(inv->Inv[orbit].fname_row_scheme) < 1000) {
691 ost << "\\[" << endl;
692 cout << "copying file "
693 << inv->Inv[orbit].fname_row_scheme
694 << " in" << endl;
695 Fio.copy_file_to_ostream(ost,
696 inv->Inv[orbit].fname_row_scheme.c_str());
697 //f << "\\input "
698 //<< inv->Inv[orbit].fname_row_scheme << endl;
699 ost << "\\]" << endl;
700 ost << "\\[" << endl;
701 Fio.copy_file_to_ostream(ost,
702 inv->Inv[orbit].fname_col_scheme.c_str());
703 //ost << "\\input "
704 //<< inv->Inv[orbit].fname_col_scheme << endl;
705 ost << "\\]" << endl;
706 }
707 else {
708 ost << "The TDO decomposition is "
709 "too large to print\\\\" << endl;
710 }
711 }
712 }
713}
714
716 ostream &ost, int orbit, int verbose_level)
717{
718 groups::sims *Stab;
720 int i;
721
722 Stab = Iso.Reps->stab[orbit];
723 Stab->group_order(go);
724
725 ost << "The stabilizer of order $" << go
726 << "$ is generated by:\\\\" << endl;
727 ost << "$$" << endl;
728 for (i = 0; i < Stab->gens.len; i++) {
729
730 //int *fp, n, ord;
731
732 //fp = NEW_int(A->degree);
733 //n = A->find_fixed_points(Stab->gens.ith(i), fp, 0);
734 //cout << "with " << n << " fixed points" << endl;
735 //FREE_int(fp);
736
737 //ord = A->element_order(Stab->gens.ith(i));
738
739 //f << "$$ g_{" << i + 1 << "}=" << endl;
740 T->A->element_print_latex(Stab->gens.ith(i), ost);
741 //f << "$$" << endl;
742 //f << "of order $" << ord << "$ and with " << n
743 //<< " fixed points" << endl;
744 }
745 ost << "$$" << endl;
746}
747
749 isomorph &Iso, ostream &ost, int orbit,
750 int verbose_level)
751{
752 groups::sims *Stab;
754 int i;
755
756 Stab = Iso.Reps->stab[orbit];
757 Stab->group_order(go);
758
759 ost << "The stabilizer generators in their action "
760 "on the spreads of the packing are:\\\\" << endl;
761 //f << "$$" << endl;
762 for (i = 0; i < Stab->gens.len; i++) {
763
764 int offset = 1;
765 int f_do_it_anyway_even_for_big_degree = TRUE;
766 int f_print_cycles_of_length_one = FALSE;
767
768 //int *fp, n, ord;
769
770 //fp = NEW_int(A->degree);
771 //n = A->find_fixed_points(Stab->gens.ith(i), fp, 0);
772 //cout << "with " << n << " fixed points" << endl;
773 //FREE_int(fp);
774
775 //ord = A->element_order(Stab->gens.ith(i));
776
777 ost << "$";
779 Stab->gens.ith(i), ost,
780 offset, f_do_it_anyway_even_for_big_degree,
781 f_print_cycles_of_length_one, 0 /* verbose_level */);
782 ost << "$\\\\" << endl;
783 //f << "of order $" << ord << "$ and with " << n
784 //<< " fixed points" << endl;
785 }
786 //f << "$$" << endl;
787}
788
790 isomorph &Iso, int orbit,
791 int verbose_level)
792{
793 groups::sims *Stab;
795 int i;
796 char fname[1000];
797
798
799 sprintf(fname, "group_%d.g", orbit);
800 {
801 ofstream fp(fname);
802
803
804 Stab = Iso.Reps->stab[orbit];
805 Stab->group_order(go);
806
807 //f << "The stabilizer generators in their action on "
808 //"the spreads of the packing are:\\\\" << endl;
809 //f << "$$" << endl;
810 for (i = 0; i < Stab->gens.len; i++) {
811
812 int offset = 1;
813 int f_do_it_anyway_even_for_big_degree = TRUE;
814 int f_print_cycles_of_length_one = FALSE;
815
816 //int *fp, n, ord;
817
818 //fp = NEW_int(A->degree);
819 //n = A->find_fixed_points(Stab->gens.ith(i), fp, 0);
820 //cout << "with " << n << " fixed points" << endl;
821 //FREE_int(fp);
822
823 //ord = A->element_order(Stab->gens.ith(i));
824
825 fp << "g" << i + 1 << " := ";
827 Stab->gens.ith(i), fp,
828 offset, f_do_it_anyway_even_for_big_degree,
829 f_print_cycles_of_length_one, 0 /* verbose_level */);
830 fp << ";" << endl;
831 //f << "of order $" << ord << "$ and with " << n
832 //<< " fixed points" << endl;
833 }
834 fp << "G := Group([";
835 for (i = 0; i < Stab->gens.len; i++) {
836 fp << "g" << i + 1;
837 if (i < Stab->gens.len - 1) {
838 fp << ",";
839 }
840 }
841 fp << "]);" << endl;
842 }
843
844}
845
847 isomorph *Iso, ostream &ost,
848 int verbose_level)
849{
850 ost << "\\chapter{The Field GF$(" << q << ")$}" << endl << endl;
851
852 T->Mtx->GFq->cheat_sheet(ost, verbose_level - 1);
853
854
855 ost << "\\chapter{The Points and Lines of "
856 "PG$(3," << q << ")$}" << endl << endl;
857
858 //f << "\\clearpage" << endl << endl;
859
860 {
861 int nb_points;
862 int nb_lines;
863 int v[4];
864 int i, j, u;
866
867 nb_points = P3->N_points;
868 nb_lines = Combi.generalized_binomial(4, 2, q);
869
870 ost << "PG$(3," << q << ")$ has " << nb_points
871 << " points:\\\\" << endl;
872 for (i = 0; i < nb_points; i++) {
873 P3->unrank_point(v, i);
874 ost << "$P_{" << i << "}=";
875 Int_vec_print_fully(ost, v, 4);
876 ost << "$\\\\" << endl;
877 }
878 ost << endl;
879 ost << "\\bigskip" << endl;
880 ost << endl;
881 ost << "PG$(3," << q << ")$ has " << nb_lines
882 << " lines:\\\\" << endl;
883 for (u = 0; u < nb_lines; u++) {
884 T->Grass->unrank_lint(u, 0 /* verbose_level*/);
885 ost << "$L_{" << u << "}=";
886 ost << "\\left[" << endl;
887 ost << "\\begin{array}{c}" << endl;
888 for (i = 0; i < T->k; i++) {
889 for (j = 0; j < T->n; j++) {
890 ost << T->Grass->M[i * T->n + j];
891 }
892 ost << "\\\\" << endl;
893 }
894 ost << "\\end{array}" << endl;
895 ost << "\\right]" << endl;
896 ost << " = \\{" << endl;
897 for (i = 0; i < P3->k; i++) {
898 ost << P3->Implementation->Lines[u * P3->k + i];
899 if (i < P3->k - 1) {
900 ost << ", ";
901 }
902 }
903 ost << "\\}" << endl;
904 ost << "$\\\\" << endl;
905 }
906
907#if 1
908 ost << "\\chapter{The Spreads of PG$(3," << q << ")$}"
909 << endl << endl;
910
911 ost << "PG$(3," << q << ")$ has " << Spread_table_with_selection->Spread_tables->nb_spreads
912 << " labeled spreads\\\\" << endl;
913
915 ost << "Spread " << u << " is $";
918 ost << "$ isomorphism type "
920
921 }
922#endif
923
924 }
925}
926
927}}}
928
a collection of functions related to sorted vectors
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 init_lint(long int *data, int data_length, int f_second, int verbose_level)
Definition: tally.cpp:123
void print_naked_tex(std::ostream &ost, int f_backwards)
Definition: tally.cpp:413
void cheat_sheet(std::ostream &f, int verbose_level)
void unrank_lint(long int rk, int verbose_level)
Definition: grassmann.cpp:343
void points_covered(long int *the_points, int verbose_level)
Definition: grassmann.cpp:255
void klein_correspondence(projective_space *P5, long int *set_in, int set_size, long int *set_out, int verbose_level)
projective_space_implementation * Implementation
Definition: geometry.h:1940
void plane_intersection_type_slow(grassmann *G, long int *set, int set_size, ring_theory::longinteger_object *&R, long int **&Pts_on_plane, int *&nb_pts_on_plane, int &len, int verbose_level)
void compute_list_of_lines_from_packing(long int *list_of_lines, long int *packing, int sz_of_packing, int verbose_level)
void copy_file_to_ostream(std::ostream &ost, const char *fname)
Definition: file_io.cpp:1140
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)
void lint_matrix_print_tex(std::ostream &ost, long int *p, int m, int n)
a class to represent arbitrary precision integers
Definition: ring_theory.h:366
DISCRETA vector class for vectors of DISCRETA objects.
Definition: discreta.h:797
discreta_base & s_i(int i)
Definition: vector.cpp:202
void m_ii(int i, int a)
Definition: discreta.h:824
void save_file(const char *fname)
Definition: base.cpp:1571
void load_file(const char *fname)
Definition: base.cpp:1578
void element_print_latex(void *elt, std::ostream &ost)
Definition: action_cb.cpp:364
void element_print_as_permutation_with_offset(void *elt, std::ostream &ost, int offset, int f_do_it_anyway_even_for_big_degree, int f_print_cycles_of_length_one, int verbose_level)
Definition: action_cb.cpp:463
void compute_all_point_orbits(groups::schreier &S, data_structures_groups::vector_ge &gens, int verbose_level)
Definition: action.cpp:995
void group_order(ring_theory::longinteger_object &go)
Definition: action.cpp:2223
Schreier trees for orbits of groups on points.
Definition: groups.h:839
a permutation group represented via a stabilizer chain
Definition: groups.h:1273
void group_order(ring_theory::longinteger_object &go)
Definition: sims.cpp:951
data_structures_groups::vector_ge gens
Definition: groups.h:1280
classification of combinatorial objects using subobjects
Definition: isomorph.h:30
void load_solution(int id, long int *data)
void induced_action_on_set_basic(groups::sims *S, long int *set, int verbose_level)
int identify_database_is_open(long int *set, int f_implicit_fusion, int verbose_level)
collection of invariants of a set of packings in PG(3,q)
Definition: packings.h:23
ring_theory::longinteger_object * Ago_induced
Definition: packings.h:31
void make_table(isomorph *Iso, std::ostream &ost, int f_only_self_dual, int f_only_not_self_dual, int verbose_level)
void init(isomorph *Iso, packing_classify *P, int verbose_level)
void report_packings_by_ago(isomorph *Iso, std::ostream &ost, invariants_packing *inv, data_structures::tally &C_ago, int verbose_level)
void report_isomorphism_type(isomorph *Iso, std::ostream &ost, int orbit, invariants_packing *inv, int verbose_level)
void report_stabilizer_in_action(isomorph &Iso, std::ostream &ost, int orbit, int verbose_level)
void compute_klein_invariants(isomorph *Iso, int f_split, int split_r, int split_m, int verbose_level)
void report_stabilizer_in_action_gap(isomorph &Iso, int orbit, int verbose_level)
void report_extra_stuff(isomorph *Iso, std::ostream &ost, int verbose_level)
void report_title_page(isomorph *Iso, std::ostream &ost, int verbose_level)
void report_packing_as_table(isomorph *Iso, std::ostream &ost, int orbit, invariants_packing *inv, long int *list_of_lines, int verbose_level)
void report_whole(isomorph *Iso, std::ostream &ost, int verbose_level)
void klein_invariants_fname(std::string &fname, std::string &prefix, int iso_cnt)
spreads::spread_table_with_selection * Spread_table_with_selection
Definition: packings.h:85
void compute_and_save_klein_invariants(std::string &prefix, int iso_cnt, long int *data, int data_size, int verbose_level)
void report_stabilizer(isomorph &Iso, std::ostream &ost, int orbit, int verbose_level)
void report_klein_invariants(isomorph *Iso, std::ostream &ost, int orbit, invariants_packing *inv, int verbose_level)
#define Lint_matrix_print(A, B, C)
Definition: foundations.h:708
#define FREE_int(p)
Definition: foundations.h:640
#define Int_vec_print_fully(A, B, C)
Definition: foundations.h:687
#define FREE_plint(p)
Definition: foundations.h:643
#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 Lint_vec_print_fully(A, B, C)
Definition: foundations.h:688
the orbiter library for the classification of combinatorial objects