Orbiter 2022
Combinatorial Objects
knowledge_base.cpp
Go to the documentation of this file.
1// knowledge_base.cpp
2//
3// Anton Betten
4//
5// started: July 9, 2009
6
7
8// Spread data is available for:
9// 2^2 = 4
10// 3^2 = 9
11// 2^4 = 16
12// 4^2 = 16
13// 5^2 = 25
14// 3^3 = 27
15
16
17
18#include "foundations.h"
19
20using namespace std;
21
22
23
24namespace orbiter {
25namespace layer1_foundations {
26
27
28
29#include "DATA/quartic_curves_q9.cpp"
30#include "DATA/quartic_curves_q13.cpp"
31#include "DATA/quartic_curves_q17.cpp"
32#include "DATA/quartic_curves_q19.cpp"
33#include "DATA/quartic_curves_q23.cpp"
34#include "DATA/quartic_curves_q25.cpp"
35#include "DATA/quartic_curves_q27.cpp"
36#include "DATA/quartic_curves_q29.cpp"
37#include "DATA/quartic_curves_q31.cpp"
38
39#include "DATA/data_hyperovals.cpp"
40
41#include "DATA/surface_4.cpp"
42#include "DATA/surface_7.cpp"
43#include "DATA/surface_8.cpp"
44#include "DATA/surface_9.cpp"
45#include "DATA/surface_11.cpp"
46#include "DATA/surface_13.cpp"
47#include "DATA/surface_16.cpp"
48#include "DATA/surface_17.cpp"
49#include "DATA/surface_19.cpp"
50#include "DATA/surface_23.cpp"
51#include "DATA/surface_25.cpp"
52#include "DATA/surface_27.cpp"
53#include "DATA/surface_29.cpp"
54#include "DATA/surface_31.cpp"
55#include "DATA/surface_32.cpp"
56#include "DATA/surface_37.cpp"
57#include "DATA/surface_41.cpp"
58#include "DATA/surface_43.cpp"
59#include "DATA/surface_47.cpp"
60#include "DATA/surface_49.cpp"
61#include "DATA/surface_53.cpp"
62#include "DATA/surface_59.cpp"
63#include "DATA/surface_61.cpp"
64#include "DATA/surface_64.cpp"
65#include "DATA/surface_67.cpp"
66#include "DATA/surface_71.cpp"
67#include "DATA/surface_73.cpp"
68#include "DATA/surface_79.cpp"
69#include "DATA/surface_81.cpp"
70#include "DATA/surface_83.cpp"
71#include "DATA/surface_89.cpp"
72#include "DATA/surface_97.cpp"
73#include "DATA/surface_101.cpp"
74#include "DATA/surface_103.cpp"
75#include "DATA/surface_107.cpp"
76#include "DATA/surface_109.cpp"
77#include "DATA/surface_113.cpp"
78#include "DATA/surface_121.cpp"
79#include "DATA/surface_127.cpp"
80#include "DATA/surface_128.cpp"
81
82#include "DATA/data_DH.cpp"
83
84#include "DATA/data_spreads.cpp"
85
86#include "DATA/data_tensor.cpp"
87
88#include "DATA/data_BLT.cpp"
89
90#include "DATA/planes_16.cpp"
91
92
94{
95
96}
97
99{
100
101}
102
103
104// #############################################################################
105// quartic curves:
106// #############################################################################
107
108
109
111{
112 int nb;
113
114 if (q == 9) {
115 nb = quartic_curves_q9_nb_reps;
116 }
117 else if (q == 13) {
118 nb = quartic_curves_q13_nb_reps;
119 }
120 else if (q == 17) {
121 nb = quartic_curves_q17_nb_reps;
122 }
123 else if (q == 19) {
124 nb = quartic_curves_q19_nb_reps;
125 }
126 else if (q == 23) {
127 nb = quartic_curves_q23_nb_reps;
128 }
129 else if (q == 25) {
130 nb = quartic_curves_q25_nb_reps;
131 }
132 else if (q == 27) {
133 nb = quartic_curves_q27_nb_reps;
134 }
135 else if (q == 29) {
136 nb = quartic_curves_q29_nb_reps;
137 }
138 else if (q == 31) {
139 nb = quartic_curves_q31_nb_reps;
140 }
141 else {
142 cout << "knowledge_base::quartic_curves_nb_reps q=" << q
143 << " I don't have information for this case" << endl;
144 exit(1);
145 }
146 return nb;
147}
148
150// i starts from 0
151{
152 int *p, nb, sz;
153
154 if (q == 9) {
155 p = quartic_curves_q9_reps;
156 nb = quartic_curves_q9_nb_reps;
157 sz = quartic_curves_q9_size;
158 }
159 else if (q == 13) {
160 p = quartic_curves_q13_reps;
161 nb = quartic_curves_q13_nb_reps;
162 sz = quartic_curves_q13_size;
163 }
164 else if (q == 17) {
165 p = quartic_curves_q17_reps;
166 nb = quartic_curves_q17_nb_reps;
167 sz = quartic_curves_q17_size;
168 }
169 else if (q == 19) {
170 p = quartic_curves_q19_reps;
171 nb = quartic_curves_q19_nb_reps;
172 sz = quartic_curves_q19_size;
173 }
174 else if (q == 23) {
175 p = quartic_curves_q23_reps;
176 nb = quartic_curves_q23_nb_reps;
177 sz = quartic_curves_q23_size;
178 }
179 else if (q == 25) {
180 p = quartic_curves_q25_reps;
181 nb = quartic_curves_q25_nb_reps;
182 sz = quartic_curves_q25_size;
183 }
184 else if (q == 27) {
185 p = quartic_curves_q27_reps;
186 nb = quartic_curves_q27_nb_reps;
187 sz = quartic_curves_q27_size;
188 }
189 else if (q == 29) {
190 p = quartic_curves_q29_reps;
191 nb = quartic_curves_q29_nb_reps;
192 sz = quartic_curves_q29_size;
193 }
194 else if (q == 31) {
195 p = quartic_curves_q31_reps;
196 nb = quartic_curves_q31_nb_reps;
197 sz = quartic_curves_q31_size;
198 }
199 else {
200 cout << "knowledge_base::quartic_curves_representative q=" << q
201 << " I don't have information for this case" << endl;
202 exit(1);
203 }
204 if (i < 0) {
205 cout << "knowledge_base::quartic_curves_representative q=" << q << " i=" << i
206 << " but i must be at least 0 (numbering starts at 0)" << endl;
207 exit(1);
208 }
209 if (i >= nb) {
210 cout << "knowledge_base::quartic_curves_representative q=" << q << " i=" << i
211 << " but I have only " << nb << " representatives" << endl;
212 exit(1);
213 }
214 p += i * sz;
215 return p;
216}
217
219// i starts from 0
220{
221 long int *p;
222 int nb;
223
224 if (q == 9) {
225 p = quartic_curves_q9_Bitangents;
226 nb = quartic_curves_q9_nb_reps;
227 }
228 else if (q == 13) {
229 p = quartic_curves_q13_Bitangents;
230 nb = quartic_curves_q13_nb_reps;
231 }
232 else if (q == 17) {
233 p = quartic_curves_q17_Bitangents;
234 nb = quartic_curves_q17_nb_reps;
235 }
236 else if (q == 19) {
237 p = quartic_curves_q19_Bitangents;
238 nb = quartic_curves_q19_nb_reps;
239 }
240 else if (q == 23) {
241 p = quartic_curves_q23_Bitangents;
242 nb = quartic_curves_q23_nb_reps;
243 }
244 else if (q == 25) {
245 p = quartic_curves_q25_Bitangents;
246 nb = quartic_curves_q25_nb_reps;
247 }
248 else if (q == 27) {
249 p = quartic_curves_q27_Bitangents;
250 nb = quartic_curves_q27_nb_reps;
251 }
252 else if (q == 29) {
253 p = quartic_curves_q29_Bitangents;
254 nb = quartic_curves_q29_nb_reps;
255 }
256 else if (q == 31) {
257 p = quartic_curves_q31_Bitangents;
258 nb = quartic_curves_q31_nb_reps;
259 }
260 else {
261 cout << "knowledge_base::quartic_curves_bitangents q=" << q
262 << " I don't have information for this case" << endl;
263 exit(1);
264 }
265 if (i < 0) {
266 cout << "knowledge_base::quartic_curves_bitangents q=" << q << " i=" << i
267 << " but i must be at least 0 (numbering starts at 0)" << endl;
268 exit(1);
269 }
270 if (i >= nb) {
271 cout << "knowledge_base::quartic_curves_bitangents q=" << q << " i=" << i
272 << " but I have only " << nb << " representatives" << endl;
273 exit(1);
274 }
275 p += i * 28;
276 return p;
277}
278
280 int *&data, int &nb_gens, int &data_size, std::string &stab_order_str)
281{
282 int *Reps;
283 int nb, make_element_size;
284 int f, l;
285 const char *stab_order;
286
287 if (q == 9) {
288 Reps = quartic_curves_q9_stab_gens;
289 nb = quartic_curves_q9_nb_reps;
290 make_element_size = quartic_curves_q9_make_element_size;
291 f = quartic_curves_q9_stab_gens_fst[i];
292 l = quartic_curves_q9_stab_gens_len[i];
293 stab_order = quartic_curves_q9_stab_order[i];
294 }
295 else if (q == 13) {
296 Reps = quartic_curves_q13_stab_gens;
297 nb = quartic_curves_q13_nb_reps;
298 make_element_size = quartic_curves_q13_make_element_size;
299 f = quartic_curves_q13_stab_gens_fst[i];
300 l = quartic_curves_q13_stab_gens_len[i];
301 stab_order = quartic_curves_q13_stab_order[i];
302 }
303 else if (q == 17) {
304 Reps = quartic_curves_q17_stab_gens;
305 nb = quartic_curves_q17_nb_reps;
306 make_element_size = quartic_curves_q17_make_element_size;
307 f = quartic_curves_q17_stab_gens_fst[i];
308 l = quartic_curves_q17_stab_gens_len[i];
309 stab_order = quartic_curves_q17_stab_order[i];
310 }
311 else if (q == 19) {
312 Reps = quartic_curves_q19_stab_gens;
313 nb = quartic_curves_q19_nb_reps;
314 make_element_size = quartic_curves_q19_make_element_size;
315 f = quartic_curves_q19_stab_gens_fst[i];
316 l = quartic_curves_q19_stab_gens_len[i];
317 stab_order = quartic_curves_q19_stab_order[i];
318 }
319 else if (q == 23) {
320 Reps = quartic_curves_q23_stab_gens;
321 nb = quartic_curves_q23_nb_reps;
322 make_element_size = quartic_curves_q23_make_element_size;
323 f = quartic_curves_q23_stab_gens_fst[i];
324 l = quartic_curves_q23_stab_gens_len[i];
325 stab_order = quartic_curves_q23_stab_order[i];
326 }
327 else if (q == 25) {
328 Reps = quartic_curves_q25_stab_gens;
329 nb = quartic_curves_q25_nb_reps;
330 make_element_size = quartic_curves_q25_make_element_size;
331 f = quartic_curves_q25_stab_gens_fst[i];
332 l = quartic_curves_q25_stab_gens_len[i];
333 stab_order = quartic_curves_q25_stab_order[i];
334 }
335 else if (q == 27) {
336 Reps = quartic_curves_q27_stab_gens;
337 nb = quartic_curves_q27_nb_reps;
338 make_element_size = quartic_curves_q27_make_element_size;
339 f = quartic_curves_q27_stab_gens_fst[i];
340 l = quartic_curves_q27_stab_gens_len[i];
341 stab_order = quartic_curves_q27_stab_order[i];
342 }
343 else if (q == 29) {
344 Reps = quartic_curves_q29_stab_gens;
345 nb = quartic_curves_q29_nb_reps;
346 make_element_size = quartic_curves_q29_make_element_size;
347 f = quartic_curves_q29_stab_gens_fst[i];
348 l = quartic_curves_q29_stab_gens_len[i];
349 stab_order = quartic_curves_q29_stab_order[i];
350 }
351 else if (q == 31) {
352 Reps = quartic_curves_q31_stab_gens;
353 nb = quartic_curves_q31_nb_reps;
354 make_element_size = quartic_curves_q31_make_element_size;
355 f = quartic_curves_q31_stab_gens_fst[i];
356 l = quartic_curves_q31_stab_gens_len[i];
357 stab_order = quartic_curves_q31_stab_order[i];
358 }
359 else {
360 cout << "knowledge_base::quartic_curves_stab_gens q=" << q
361 << " I don't have information for this field order" << endl;
362 exit(1);
363 }
364 if (i < 0) {
365 cout << "knowledge_base::quartic_curves_stab_gens q=" << q << " i=" << i
366 << " but i must be at least 0 (numbering starts at 0)" << endl;
367 exit(1);
368 }
369 if (i >= nb) {
370 cout << "knowledge_base::quartic_curves_stab_gens q=" << q << " i=" << i
371 << " but I have only " << nb << " representatives" << endl;
372 exit(1);
373 }
374 nb_gens = l;
375 data_size = make_element_size;
376 data = Reps + f * make_element_size;
377}
378
379
380
381// #############################################################################
382// Cubic surfaces:
383// #############################################################################
384
385
386
388{
389 int nb;
390
391 if (q == 4) {
392 nb = surface_4_nb_reps;
393 }
394 else if (q == 7) {
395 nb = surface_7_nb_reps;
396 }
397 else if (q == 8) {
398 nb = surface_8_nb_reps;
399 }
400 else if (q == 9) {
401 nb = surface_9_nb_reps;
402 }
403 else if (q == 11) {
404 nb = surface_11_nb_reps;
405 }
406 else if (q == 13) {
407 nb = surface_13_nb_reps;
408 }
409 else if (q == 16) {
410 nb = surface_16_nb_reps;
411 }
412 else if (q == 17) {
413 nb = surface_17_nb_reps;
414 }
415 else if (q == 19) {
416 nb = surface_19_nb_reps;
417 }
418 else if (q == 23) {
419 nb = surface_23_nb_reps;
420 }
421 else if (q == 25) {
422 nb = surface_25_nb_reps;
423 }
424 else if (q == 27) {
425 nb = surface_27_nb_reps;
426 }
427 else if (q == 29) {
428 nb = surface_29_nb_reps;
429 }
430 else if (q == 31) {
431 nb = surface_31_nb_reps;
432 }
433 else if (q == 32) {
434 nb = surface_32_nb_reps;
435 }
436 else if (q == 37) {
437 nb = surface_37_nb_reps;
438 }
439 else if (q == 41) {
440 nb = surface_41_nb_reps;
441 }
442 else if (q == 43) {
443 nb = surface_43_nb_reps;
444 }
445 else if (q == 47) {
446 nb = surface_47_nb_reps;
447 }
448 else if (q == 49) {
449 nb = surface_49_nb_reps;
450 }
451 else if (q == 53) {
452 nb = surface_53_nb_reps;
453 }
454 else if (q == 59) {
455 nb = surface_59_nb_reps;
456 }
457 else if (q == 61) {
458 nb = surface_61_nb_reps;
459 }
460 else if (q == 64) {
461 nb = surface_64_nb_reps;
462 }
463 else if (q == 67) {
464 nb = surface_67_nb_reps;
465 }
466 else if (q == 71) {
467 nb = surface_71_nb_reps;
468 }
469 else if (q == 73) {
470 nb = surface_73_nb_reps;
471 }
472 else if (q == 79) {
473 nb = surface_79_nb_reps;
474 }
475 else if (q == 81) {
476 nb = surface_81_nb_reps;
477 }
478 else if (q == 83) {
479 nb = surface_83_nb_reps;
480 }
481 else if (q == 89) {
482 nb = surface_89_nb_reps;
483 }
484 else if (q == 97) {
485 nb = surface_97_nb_reps;
486 }
487 else if (q == 101) {
488 nb = surface_101_nb_reps;
489 }
490 else if (q == 103) {
491 nb = surface_103_nb_reps;
492 }
493 else if (q == 107) {
494 nb = surface_107_nb_reps;
495 }
496 else if (q == 109) {
497 nb = surface_109_nb_reps;
498 }
499 else if (q == 113) {
500 nb = surface_113_nb_reps;
501 }
502 else if (q == 121) {
503 nb = surface_121_nb_reps;
504 }
505 else if (q == 128) {
506 nb = surface_128_nb_reps;
507 }
508 else {
509 cout << "knowledge_base::cubic_surface_nb_reps q=" << q
510 << " I don't have information for this case" << endl;
511 exit(1);
512 }
513 return nb;
514}
515
517// i starts from 0
518{
519 int *p, nb, sz;
520 if (q == 4) {
521 p = surface_4_reps;
522 nb = surface_4_nb_reps;
523 sz = surface_4_size;
524 }
525 else if (q == 7) {
526 p = surface_7_reps;
527 nb = surface_7_nb_reps;
528 sz = surface_7_size;
529 }
530 else if (q == 8) {
531 p = surface_8_reps;
532 nb = surface_8_nb_reps;
533 sz = surface_8_size;
534 }
535 else if (q == 9) {
536 p = surface_9_reps;
537 nb = surface_9_nb_reps;
538 sz = surface_9_size;
539 }
540 else if (q == 11) {
541 p = surface_11_reps;
542 nb = surface_11_nb_reps;
543 sz = surface_11_size;
544 }
545 else if (q == 13) {
546 p = surface_13_reps;
547 nb = surface_13_nb_reps;
548 sz = surface_13_size;
549 }
550 else if (q == 16) {
551 p = surface_16_reps;
552 nb = surface_16_nb_reps;
553 sz = surface_16_size;
554 }
555 else if (q == 17) {
556 p = surface_17_reps;
557 nb = surface_17_nb_reps;
558 sz = surface_17_size;
559 }
560 else if (q == 19) {
561 p = surface_19_reps;
562 nb = surface_19_nb_reps;
563 sz = surface_19_size;
564 }
565 else if (q == 23) {
566 p = surface_23_reps;
567 nb = surface_23_nb_reps;
568 sz = surface_23_size;
569 }
570 else if (q == 25) {
571 p = surface_25_reps;
572 nb = surface_25_nb_reps;
573 sz = surface_25_size;
574 }
575 else if (q == 27) {
576 p = surface_27_reps;
577 nb = surface_27_nb_reps;
578 sz = surface_27_size;
579 }
580 else if (q == 29) {
581 p = surface_29_reps;
582 nb = surface_29_nb_reps;
583 sz = surface_29_size;
584 }
585 else if (q == 31) {
586 p = surface_31_reps;
587 nb = surface_31_nb_reps;
588 sz = surface_31_size;
589 }
590 else if (q == 32) {
591 p = surface_32_reps;
592 nb = surface_32_nb_reps;
593 sz = surface_32_size;
594 }
595 else if (q == 37) {
596 p = surface_37_reps;
597 nb = surface_37_nb_reps;
598 sz = surface_37_size;
599 }
600 else if (q == 41) {
601 p = surface_41_reps;
602 nb = surface_41_nb_reps;
603 sz = surface_41_size;
604 }
605 else if (q == 43) {
606 p = surface_43_reps;
607 nb = surface_43_nb_reps;
608 sz = surface_43_size;
609 }
610 else if (q == 47) {
611 p = surface_47_reps;
612 nb = surface_47_nb_reps;
613 sz = surface_47_size;
614 }
615 else if (q == 49) {
616 p = surface_49_reps;
617 nb = surface_49_nb_reps;
618 sz = surface_49_size;
619 }
620 else if (q == 53) {
621 p = surface_53_reps;
622 nb = surface_53_nb_reps;
623 sz = surface_53_size;
624 }
625 else if (q == 59) {
626 p = surface_59_reps;
627 nb = surface_59_nb_reps;
628 sz = surface_59_size;
629 }
630 else if (q == 61) {
631 p = surface_61_reps;
632 nb = surface_61_nb_reps;
633 sz = surface_61_size;
634 }
635 else if (q == 64) {
636 p = surface_64_reps;
637 nb = surface_64_nb_reps;
638 sz = surface_64_size;
639 }
640 else if (q == 67) {
641 p = surface_67_reps;
642 nb = surface_67_nb_reps;
643 sz = surface_67_size;
644 }
645 else if (q == 71) {
646 p = surface_71_reps;
647 nb = surface_71_nb_reps;
648 sz = surface_71_size;
649 }
650 else if (q == 73) {
651 p = surface_73_reps;
652 nb = surface_73_nb_reps;
653 sz = surface_73_size;
654 }
655 else if (q == 79) {
656 p = surface_79_reps;
657 nb = surface_79_nb_reps;
658 sz = surface_79_size;
659 }
660 else if (q == 81) {
661 p = surface_81_reps;
662 nb = surface_81_nb_reps;
663 sz = surface_81_size;
664 }
665 else if (q == 83) {
666 p = surface_83_reps;
667 nb = surface_83_nb_reps;
668 sz = surface_83_size;
669 }
670 else if (q == 89) {
671 p = surface_89_reps;
672 nb = surface_89_nb_reps;
673 sz = surface_89_size;
674 }
675 else if (q == 97) {
676 p = surface_97_reps;
677 nb = surface_97_nb_reps;
678 sz = surface_97_size;
679 }
680 else if (q == 101) {
681 p = surface_101_reps;
682 nb = surface_101_nb_reps;
683 sz = surface_101_size;
684 }
685 else if (q == 103) {
686 p = surface_103_reps;
687 nb = surface_103_nb_reps;
688 sz = surface_103_size;
689 }
690 else if (q == 107) {
691 p = surface_107_reps;
692 nb = surface_107_nb_reps;
693 sz = surface_107_size;
694 }
695 else if (q == 109) {
696 p = surface_109_reps;
697 nb = surface_109_nb_reps;
698 sz = surface_109_size;
699 }
700 else if (q == 113) {
701 p = surface_113_reps;
702 nb = surface_113_nb_reps;
703 sz = surface_113_size;
704 }
705 else if (q == 121) {
706 p = surface_121_reps;
707 nb = surface_121_nb_reps;
708 sz = surface_121_size;
709 }
710 else if (q == 127) {
711 p = surface_127_reps;
712 nb = surface_127_nb_reps;
713 sz = surface_127_size;
714 }
715 else if (q == 128) {
716 p = surface_128_reps;
717 nb = surface_128_nb_reps;
718 sz = surface_128_size;
719 }
720 else {
721 cout << "knowledge_base::cubic_surface_representative q=" << q
722 << " I don't have information for this case" << endl;
723 exit(1);
724 }
725 if (i < 0) {
726 cout << "knowledge_base::cubic_surface_representative q=" << q << " i=" << i
727 << " but i must be at least 0 (numbering starts at 0)" << endl;
728 exit(1);
729 }
730 if (i >= nb) {
731 cout << "knowledge_base::cubic_surface_representative q=" << q << " i=" << i
732 << " but I have only " << nb << " representatives" << endl;
733 exit(1);
734 }
735 p += i * sz;
736 return p;
737}
738
740 int *&data, int &nb_gens, int &data_size, std::string &stab_order_str)
741{
742 int *Reps;
743 int nb, make_element_size;
744 int f, l;
745 const char *stab_order;
746
747 if (q == 4) {
748 Reps = surface_4_stab_gens;
749 nb = surface_4_nb_reps;
750 make_element_size = surface_4_make_element_size;
751 f = surface_4_stab_gens_fst[i];
752 l = surface_4_stab_gens_len[i];
753 stab_order = surface_4_stab_order[i];
754 }
755 else if (q == 7) {
756 Reps = surface_7_stab_gens;
757 nb = surface_7_nb_reps;
758 make_element_size = surface_7_make_element_size;
759 f = surface_7_stab_gens_fst[i];
760 l = surface_7_stab_gens_len[i];
761 stab_order = surface_7_stab_order[i];
762 }
763 else if (q == 8) {
764 Reps = surface_8_stab_gens;
765 nb = surface_8_nb_reps;
766 make_element_size = surface_8_make_element_size;
767 f = surface_8_stab_gens_fst[i];
768 l = surface_8_stab_gens_len[i];
769 stab_order = surface_8_stab_order[i];
770 }
771 else if (q == 9) {
772 Reps = surface_9_stab_gens;
773 nb = surface_9_nb_reps;
774 make_element_size = surface_9_make_element_size;
775 f = surface_9_stab_gens_fst[i];
776 l = surface_9_stab_gens_len[i];
777 stab_order = surface_9_stab_order[i];
778 }
779 else if (q == 11) {
780 Reps = surface_11_stab_gens;
781 nb = surface_11_nb_reps;
782 make_element_size = surface_11_make_element_size;
783 f = surface_11_stab_gens_fst[i];
784 l = surface_11_stab_gens_len[i];
785 stab_order = surface_11_stab_order[i];
786 }
787 else if (q == 13) {
788 Reps = surface_13_stab_gens;
789 nb = surface_13_nb_reps;
790 make_element_size = surface_13_make_element_size;
791 f = surface_13_stab_gens_fst[i];
792 l = surface_13_stab_gens_len[i];
793 stab_order = surface_13_stab_order[i];
794 }
795 else if (q == 16) {
796 Reps = surface_16_stab_gens;
797 nb = surface_16_nb_reps;
798 make_element_size = surface_16_make_element_size;
799 f = surface_16_stab_gens_fst[i];
800 l = surface_16_stab_gens_len[i];
801 stab_order = surface_16_stab_order[i];
802 }
803 else if (q == 17) {
804 Reps = surface_17_stab_gens;
805 nb = surface_17_nb_reps;
806 make_element_size = surface_17_make_element_size;
807 f = surface_17_stab_gens_fst[i];
808 l = surface_17_stab_gens_len[i];
809 stab_order = surface_17_stab_order[i];
810 }
811 else if (q == 19) {
812 Reps = surface_19_stab_gens;
813 nb = surface_19_nb_reps;
814 make_element_size = surface_19_make_element_size;
815 f = surface_19_stab_gens_fst[i];
816 l = surface_19_stab_gens_len[i];
817 stab_order = surface_19_stab_order[i];
818 }
819 else if (q == 23) {
820 Reps = surface_23_stab_gens;
821 nb = surface_23_nb_reps;
822 make_element_size = surface_23_make_element_size;
823 f = surface_23_stab_gens_fst[i];
824 l = surface_23_stab_gens_len[i];
825 stab_order = surface_23_stab_order[i];
826 }
827 else if (q == 25) {
828 Reps = surface_25_stab_gens;
829 nb = surface_25_nb_reps;
830 make_element_size = surface_25_make_element_size;
831 f = surface_25_stab_gens_fst[i];
832 l = surface_25_stab_gens_len[i];
833 stab_order = surface_25_stab_order[i];
834 }
835 else if (q == 27) {
836 Reps = surface_27_stab_gens;
837 nb = surface_27_nb_reps;
838 make_element_size = surface_27_make_element_size;
839 f = surface_27_stab_gens_fst[i];
840 l = surface_27_stab_gens_len[i];
841 stab_order = surface_27_stab_order[i];
842 }
843 else if (q == 29) {
844 Reps = surface_29_stab_gens;
845 nb = surface_29_nb_reps;
846 make_element_size = surface_29_make_element_size;
847 f = surface_29_stab_gens_fst[i];
848 l = surface_29_stab_gens_len[i];
849 stab_order = surface_29_stab_order[i];
850 }
851 else if (q == 31) {
852 Reps = surface_31_stab_gens;
853 nb = surface_31_nb_reps;
854 make_element_size = surface_31_make_element_size;
855 f = surface_31_stab_gens_fst[i];
856 l = surface_31_stab_gens_len[i];
857 stab_order = surface_31_stab_order[i];
858 }
859 else if (q == 32) {
860 Reps = surface_32_stab_gens;
861 nb = surface_32_nb_reps;
862 make_element_size = surface_32_make_element_size;
863 f = surface_32_stab_gens_fst[i];
864 l = surface_32_stab_gens_len[i];
865 stab_order = surface_32_stab_order[i];
866 }
867 else if (q == 37) {
868 Reps = surface_37_stab_gens;
869 nb = surface_37_nb_reps;
870 make_element_size = surface_37_make_element_size;
871 f = surface_37_stab_gens_fst[i];
872 l = surface_37_stab_gens_len[i];
873 stab_order = surface_37_stab_order[i];
874 }
875 else if (q == 41) {
876 Reps = surface_41_stab_gens;
877 nb = surface_41_nb_reps;
878 make_element_size = surface_41_make_element_size;
879 f = surface_41_stab_gens_fst[i];
880 l = surface_41_stab_gens_len[i];
881 stab_order = surface_41_stab_order[i];
882 }
883 else if (q == 43) {
884 Reps = surface_43_stab_gens;
885 nb = surface_43_nb_reps;
886 make_element_size = surface_43_make_element_size;
887 f = surface_43_stab_gens_fst[i];
888 l = surface_43_stab_gens_len[i];
889 stab_order = surface_43_stab_order[i];
890 }
891 else if (q == 47) {
892 Reps = surface_47_stab_gens;
893 nb = surface_47_nb_reps;
894 make_element_size = surface_47_make_element_size;
895 f = surface_47_stab_gens_fst[i];
896 l = surface_47_stab_gens_len[i];
897 stab_order = surface_47_stab_order[i];
898 }
899 else if (q == 49) {
900 Reps = surface_49_stab_gens;
901 nb = surface_49_nb_reps;
902 make_element_size = surface_49_make_element_size;
903 f = surface_49_stab_gens_fst[i];
904 l = surface_49_stab_gens_len[i];
905 stab_order = surface_49_stab_order[i];
906 }
907 else if (q == 53) {
908 Reps = surface_53_stab_gens;
909 nb = surface_53_nb_reps;
910 make_element_size = surface_53_make_element_size;
911 f = surface_53_stab_gens_fst[i];
912 l = surface_53_stab_gens_len[i];
913 stab_order = surface_53_stab_order[i];
914 }
915 else if (q == 59) {
916 Reps = surface_59_stab_gens;
917 nb = surface_59_nb_reps;
918 make_element_size = surface_59_make_element_size;
919 f = surface_59_stab_gens_fst[i];
920 l = surface_59_stab_gens_len[i];
921 stab_order = surface_59_stab_order[i];
922 }
923 else if (q == 61) {
924 Reps = surface_61_stab_gens;
925 nb = surface_61_nb_reps;
926 make_element_size = surface_61_make_element_size;
927 f = surface_61_stab_gens_fst[i];
928 l = surface_61_stab_gens_len[i];
929 stab_order = surface_61_stab_order[i];
930 }
931 else if (q == 64) {
932 Reps = surface_64_stab_gens;
933 nb = surface_64_nb_reps;
934 make_element_size = surface_64_make_element_size;
935 f = surface_64_stab_gens_fst[i];
936 l = surface_64_stab_gens_len[i];
937 stab_order = surface_64_stab_order[i];
938 }
939 else if (q == 67) {
940 Reps = surface_67_stab_gens;
941 nb = surface_67_nb_reps;
942 make_element_size = surface_67_make_element_size;
943 f = surface_67_stab_gens_fst[i];
944 l = surface_67_stab_gens_len[i];
945 stab_order = surface_67_stab_order[i];
946 }
947 else if (q == 71) {
948 Reps = surface_71_stab_gens;
949 nb = surface_71_nb_reps;
950 make_element_size = surface_71_make_element_size;
951 f = surface_71_stab_gens_fst[i];
952 l = surface_71_stab_gens_len[i];
953 stab_order = surface_71_stab_order[i];
954 }
955 else if (q == 73) {
956 Reps = surface_73_stab_gens;
957 nb = surface_73_nb_reps;
958 make_element_size = surface_73_make_element_size;
959 f = surface_73_stab_gens_fst[i];
960 l = surface_73_stab_gens_len[i];
961 stab_order = surface_73_stab_order[i];
962 }
963 else if (q == 79) {
964 Reps = surface_79_stab_gens;
965 nb = surface_79_nb_reps;
966 make_element_size = surface_79_make_element_size;
967 f = surface_79_stab_gens_fst[i];
968 l = surface_79_stab_gens_len[i];
969 stab_order = surface_79_stab_order[i];
970 }
971 else if (q == 81) {
972 Reps = surface_81_stab_gens;
973 nb = surface_81_nb_reps;
974 make_element_size = surface_81_make_element_size;
975 f = surface_81_stab_gens_fst[i];
976 l = surface_81_stab_gens_len[i];
977 stab_order = surface_81_stab_order[i];
978 }
979 else if (q == 83) {
980 Reps = surface_83_stab_gens;
981 nb = surface_83_nb_reps;
982 make_element_size = surface_83_make_element_size;
983 f = surface_83_stab_gens_fst[i];
984 l = surface_83_stab_gens_len[i];
985 stab_order = surface_83_stab_order[i];
986 }
987 else if (q == 89) {
988 Reps = surface_89_stab_gens;
989 nb = surface_89_nb_reps;
990 make_element_size = surface_89_make_element_size;
991 f = surface_89_stab_gens_fst[i];
992 l = surface_89_stab_gens_len[i];
993 stab_order = surface_89_stab_order[i];
994 }
995 else if (q == 97) {
996 Reps = surface_97_stab_gens;
997 nb = surface_97_nb_reps;
998 make_element_size = surface_97_make_element_size;
999 f = surface_97_stab_gens_fst[i];
1000 l = surface_97_stab_gens_len[i];
1001 stab_order = surface_97_stab_order[i];
1002 }
1003 else if (q == 101) {
1004 Reps = surface_101_stab_gens;
1005 nb = surface_101_nb_reps;
1006 make_element_size = surface_101_make_element_size;
1007 f = surface_101_stab_gens_fst[i];
1008 l = surface_101_stab_gens_len[i];
1009 stab_order = surface_101_stab_order[i];
1010 }
1011 else if (q == 103) {
1012 Reps = surface_103_stab_gens;
1013 nb = surface_103_nb_reps;
1014 make_element_size = surface_103_make_element_size;
1015 f = surface_103_stab_gens_fst[i];
1016 l = surface_103_stab_gens_len[i];
1017 stab_order = surface_103_stab_order[i];
1018 }
1019 else if (q == 107) {
1020 Reps = surface_107_stab_gens;
1021 nb = surface_107_nb_reps;
1022 make_element_size = surface_107_make_element_size;
1023 f = surface_107_stab_gens_fst[i];
1024 l = surface_107_stab_gens_len[i];
1025 stab_order = surface_107_stab_order[i];
1026 }
1027 else if (q == 109) {
1028 Reps = surface_109_stab_gens;
1029 nb = surface_109_nb_reps;
1030 make_element_size = surface_109_make_element_size;
1031 f = surface_109_stab_gens_fst[i];
1032 l = surface_109_stab_gens_len[i];
1033 stab_order = surface_109_stab_order[i];
1034 }
1035 else if (q == 113) {
1036 Reps = surface_113_stab_gens;
1037 nb = surface_113_nb_reps;
1038 make_element_size = surface_113_make_element_size;
1039 f = surface_113_stab_gens_fst[i];
1040 l = surface_113_stab_gens_len[i];
1041 stab_order = surface_113_stab_order[i];
1042 }
1043 else if (q == 121) {
1044 Reps = surface_121_stab_gens;
1045 nb = surface_121_nb_reps;
1046 make_element_size = surface_121_make_element_size;
1047 f = surface_121_stab_gens_fst[i];
1048 l = surface_121_stab_gens_len[i];
1049 stab_order = surface_121_stab_order[i];
1050 }
1051 else if (q == 127) {
1052 Reps = surface_127_stab_gens;
1053 nb = surface_127_nb_reps;
1054 make_element_size = surface_127_make_element_size;
1055 f = surface_127_stab_gens_fst[i];
1056 l = surface_127_stab_gens_len[i];
1057 stab_order = surface_127_stab_order[i];
1058 }
1059 else if (q == 128) {
1060 Reps = surface_128_stab_gens;
1061 nb = surface_128_nb_reps;
1062 make_element_size = surface_128_make_element_size;
1063 f = surface_128_stab_gens_fst[i];
1064 l = surface_128_stab_gens_len[i];
1065 stab_order = surface_128_stab_order[i];
1066 }
1067 else {
1068 cout << "knowledge_base::cubic_surface_stab_gens q=" << q
1069 << " I don't have information for this field order" << endl;
1070 exit(1);
1071 }
1072 if (i < 0) {
1073 cout << "knowledge_base::cubic_surface_stab_gens q=" << q << " i=" << i
1074 << " but i must be at least 0 (numbering starts at 0)" << endl;
1075 exit(1);
1076 }
1077 if (i >= nb) {
1078 cout << "knowledge_base::cubic_surface_stab_gens q=" << q << " i=" << i
1079 << " but I have only " << nb << " representatives" << endl;
1080 exit(1);
1081 }
1082 nb_gens = l;
1083 data_size = make_element_size;
1084 data = Reps + f * make_element_size;
1085 stab_order_str.assign(stab_order);
1086}
1087
1089// i starts from 0
1090{
1091 int *p, nb; //, sz;
1092 if (q == 4) {
1093 p = surface_4_nb_E;
1094 nb = surface_4_nb_reps;
1095 //sz = surface_4_size;
1096 }
1097 else if (q == 7) {
1098 p = surface_7_nb_E;
1099 nb = surface_7_nb_reps;
1100 //sz = surface_7_size;
1101 }
1102 else if (q == 8) {
1103 p = surface_8_nb_E;
1104 nb = surface_8_nb_reps;
1105 //sz = surface_8_size;
1106 }
1107 else if (q == 9) {
1108 p = surface_9_nb_E;
1109 nb = surface_9_nb_reps;
1110 //sz = surface_9_size;
1111 }
1112 else if (q == 11) {
1113 p = surface_11_nb_E;
1114 nb = surface_11_nb_reps;
1115 //sz = surface_11_size;
1116 }
1117 else if (q == 13) {
1118 p = surface_13_nb_E;
1119 nb = surface_13_nb_reps;
1120 //sz = surface_13_size;
1121 }
1122 else if (q == 16) {
1123 p = surface_16_nb_E;
1124 nb = surface_16_nb_reps;
1125 //sz = surface_16_size;
1126 }
1127 else if (q == 17) {
1128 p = surface_17_nb_E;
1129 nb = surface_17_nb_reps;
1130 //sz = surface_17_size;
1131 }
1132 else if (q == 19) {
1133 p = surface_19_nb_E;
1134 nb = surface_19_nb_reps;
1135 //sz = surface_19_size;
1136 }
1137 else if (q == 23) {
1138 p = surface_23_nb_E;
1139 nb = surface_23_nb_reps;
1140 //sz = surface_23_size;
1141 }
1142 else if (q == 25) {
1143 p = surface_25_nb_E;
1144 nb = surface_25_nb_reps;
1145 //sz = surface_25_size;
1146 }
1147 else if (q == 27) {
1148 p = surface_27_nb_E;
1149 nb = surface_27_nb_reps;
1150 //sz = surface_27_size;
1151 }
1152 else if (q == 29) {
1153 p = surface_29_nb_E;
1154 nb = surface_29_nb_reps;
1155 //sz = surface_29_size;
1156 }
1157 else if (q == 31) {
1158 p = surface_31_nb_E;
1159 nb = surface_31_nb_reps;
1160 //sz = surface_31_size;
1161 }
1162 else if (q == 32) {
1163 p = surface_32_nb_E;
1164 nb = surface_32_nb_reps;
1165 //sz = surface_32_size;
1166 }
1167 else if (q == 37) {
1168 p = surface_37_nb_E;
1169 nb = surface_37_nb_reps;
1170 //sz = surface_37_size;
1171 }
1172 else if (q == 41) {
1173 p = surface_41_nb_E;
1174 nb = surface_41_nb_reps;
1175 //sz = surface_41_size;
1176 }
1177 else if (q == 43) {
1178 p = surface_43_nb_E;
1179 nb = surface_43_nb_reps;
1180 //sz = surface_43_size;
1181 }
1182 else if (q == 47) {
1183 p = surface_47_nb_E;
1184 nb = surface_47_nb_reps;
1185 //sz = surface_47_size;
1186 }
1187 else if (q == 49) {
1188 p = surface_49_nb_E;
1189 nb = surface_49_nb_reps;
1190 //sz = surface_49_size;
1191 }
1192 else if (q == 53) {
1193 p = surface_53_nb_E;
1194 nb = surface_53_nb_reps;
1195 //sz = surface_53_size;
1196 }
1197 else if (q == 59) {
1198 p = surface_59_nb_E;
1199 nb = surface_59_nb_reps;
1200 //sz = surface_59_size;
1201 }
1202 else if (q == 61) {
1203 p = surface_61_nb_E;
1204 nb = surface_61_nb_reps;
1205 //sz = surface_61_size;
1206 }
1207 else if (q == 64) {
1208 p = surface_64_nb_E;
1209 nb = surface_64_nb_reps;
1210 //sz = surface_64_size;
1211 }
1212 else if (q == 67) {
1213 p = surface_67_nb_E;
1214 nb = surface_67_nb_reps;
1215 //sz = surface_67_size;
1216 }
1217 else if (q == 71) {
1218 p = surface_71_nb_E;
1219 nb = surface_71_nb_reps;
1220 //sz = surface_71_size;
1221 }
1222 else if (q == 73) {
1223 p = surface_73_nb_E;
1224 nb = surface_73_nb_reps;
1225 //sz = surface_73_size;
1226 }
1227 else if (q == 79) {
1228 p = surface_79_nb_E;
1229 nb = surface_79_nb_reps;
1230 //sz = surface_79_size;
1231 }
1232 else if (q == 81) {
1233 p = surface_81_nb_E;
1234 nb = surface_81_nb_reps;
1235 //sz = surface_81_size;
1236 }
1237 else if (q == 83) {
1238 p = surface_83_nb_E;
1239 nb = surface_83_nb_reps;
1240 //sz = surface_83_size;
1241 }
1242 else if (q == 89) {
1243 p = surface_89_nb_E;
1244 nb = surface_89_nb_reps;
1245 //sz = surface_89_size;
1246 }
1247 else if (q == 97) {
1248 p = surface_97_nb_E;
1249 nb = surface_97_nb_reps;
1250 //sz = surface_97_size;
1251 }
1252 else if (q == 101) {
1253 p = surface_101_nb_E;
1254 nb = surface_101_nb_reps;
1255 //sz = surface_101_size;
1256 }
1257 else if (q == 103) {
1258 p = surface_103_nb_E;
1259 nb = surface_103_nb_reps;
1260 //sz = surface_103_size;
1261 }
1262 else if (q == 107) {
1263 p = surface_107_nb_E;
1264 nb = surface_107_nb_reps;
1265 //sz = surface_107_size;
1266 }
1267 else if (q == 109) {
1268 p = surface_109_nb_E;
1269 nb = surface_109_nb_reps;
1270 //sz = surface_109_size;
1271 }
1272 else if (q == 113) {
1273 p = surface_113_nb_E;
1274 nb = surface_113_nb_reps;
1275 //sz = surface_113_size;
1276 }
1277 else if (q == 121) {
1278 p = surface_121_nb_E;
1279 nb = surface_121_nb_reps;
1280 //sz = surface_121_size;
1281 }
1282 else if (q == 127) {
1283 p = surface_127_nb_E;
1284 nb = surface_127_nb_reps;
1285 //sz = surface_127_size;
1286 }
1287 else if (q == 128) {
1288 p = surface_128_nb_E;
1289 nb = surface_128_nb_reps;
1290 //sz = surface_128_size;
1291 }
1292 else {
1293 cout << "knowledge_base::cubic_surface_nb_Eckardt_points q=" << q
1294 << " I don't have information for this case" << endl;
1295 exit(1);
1296 }
1297 if (i < 0) {
1298 cout << "knowledge_base::cubic_surface_nb_Eckardt_points q=" << q << " i=" << i
1299 << " but i must be at least 0 (numbering starts at 0)" << endl;
1300 exit(1);
1301 }
1302 if (i >= nb) {
1303 cout << "knowledge_base::cubic_surface_nb_Eckardt_points q=" << q << " i=" << i
1304 << " but I have only " << nb << " representatives" << endl;
1305 exit(1);
1306 }
1307 return p[i];
1308}
1309
1310
1312// i starts from 0
1313{
1314 long int *p, nb;
1315 if (q == 4) {
1316 p = surface_4_Lines;
1317 nb = surface_4_nb_reps;
1318 }
1319 else if (q == 7) {
1320 p = surface_7_Lines;
1321 nb = surface_7_nb_reps;
1322 }
1323 else if (q == 8) {
1324 p = surface_8_Lines;
1325 nb = surface_8_nb_reps;
1326 }
1327 else if (q == 9) {
1328 p = surface_9_Lines;
1329 nb = surface_9_nb_reps;
1330 }
1331 else if (q == 11) {
1332 p = surface_11_Lines;
1333 nb = surface_11_nb_reps;
1334 }
1335 else if (q == 13) {
1336 p = surface_13_Lines;
1337 nb = surface_13_nb_reps;
1338 }
1339 else if (q == 16) {
1340 p = surface_16_Lines;
1341 nb = surface_16_nb_reps;
1342 }
1343 else if (q == 17) {
1344 p = surface_17_Lines;
1345 nb = surface_17_nb_reps;
1346 }
1347 else if (q == 19) {
1348 p = surface_19_Lines;
1349 nb = surface_19_nb_reps;
1350 }
1351 else if (q == 23) {
1352 p = surface_23_Lines;
1353 nb = surface_23_nb_reps;
1354 }
1355 else if (q == 25) {
1356 p = surface_25_Lines;
1357 nb = surface_25_nb_reps;
1358 }
1359 else if (q == 27) {
1360 p = surface_27_Lines;
1361 nb = surface_27_nb_reps;
1362 }
1363 else if (q == 29) {
1364 p = surface_29_Lines;
1365 nb = surface_29_nb_reps;
1366 }
1367 else if (q == 31) {
1368 p = surface_31_Lines;
1369 nb = surface_31_nb_reps;
1370 }
1371 else if (q == 32) {
1372 p = surface_32_Lines;
1373 nb = surface_32_nb_reps;
1374 }
1375 else if (q == 37) {
1376 p = surface_37_Lines;
1377 nb = surface_37_nb_reps;
1378 }
1379 else if (q == 41) {
1380 p = surface_41_Lines;
1381 nb = surface_41_nb_reps;
1382 }
1383 else if (q == 43) {
1384 p = surface_43_Lines;
1385 nb = surface_43_nb_reps;
1386 }
1387 else if (q == 47) {
1388 p = surface_47_Lines;
1389 nb = surface_47_nb_reps;
1390 }
1391 else if (q == 49) {
1392 p = surface_49_Lines;
1393 nb = surface_49_nb_reps;
1394 }
1395 else if (q == 53) {
1396 p = surface_53_Lines;
1397 nb = surface_53_nb_reps;
1398 }
1399 else if (q == 59) {
1400 p = surface_59_Lines;
1401 nb = surface_59_nb_reps;
1402 }
1403 else if (q == 61) {
1404 p = surface_61_Lines;
1405 nb = surface_61_nb_reps;
1406 }
1407 else if (q == 64) {
1408 p = surface_64_Lines;
1409 nb = surface_64_nb_reps;
1410 }
1411 else if (q == 67) {
1412 p = surface_67_Lines;
1413 nb = surface_67_nb_reps;
1414 }
1415 else if (q == 71) {
1416 p = surface_71_Lines;
1417 nb = surface_71_nb_reps;
1418 }
1419 else if (q == 73) {
1420 p = surface_73_Lines;
1421 nb = surface_73_nb_reps;
1422 }
1423 else if (q == 79) {
1424 p = surface_79_Lines;
1425 nb = surface_79_nb_reps;
1426 }
1427 else if (q == 81) {
1428 p = surface_81_Lines;
1429 nb = surface_81_nb_reps;
1430 }
1431 else if (q == 83) {
1432 p = surface_83_Lines;
1433 nb = surface_83_nb_reps;
1434 }
1435 else if (q == 89) {
1436 p = surface_89_Lines;
1437 nb = surface_89_nb_reps;
1438 }
1439 else if (q == 97) {
1440 p = surface_97_Lines;
1441 nb = surface_97_nb_reps;
1442 }
1443 else if (q == 101) {
1444 p = surface_101_Lines;
1445 nb = surface_101_nb_reps;
1446 }
1447 else if (q == 103) {
1448 p = surface_103_Lines;
1449 nb = surface_103_nb_reps;
1450 }
1451 else if (q == 107) {
1452 p = surface_107_Lines;
1453 nb = surface_107_nb_reps;
1454 }
1455 else if (q == 109) {
1456 p = surface_109_Lines;
1457 nb = surface_109_nb_reps;
1458 }
1459 else if (q == 113) {
1460 p = surface_113_Lines;
1461 nb = surface_113_nb_reps;
1462 }
1463 else if (q == 121) {
1464 p = surface_121_Lines;
1465 nb = surface_121_nb_reps;
1466 }
1467 else if (q == 127) {
1468 p = surface_127_Lines;
1469 nb = surface_127_nb_reps;
1470 }
1471 else if (q == 128) {
1472 p = surface_128_Lines;
1473 nb = surface_128_nb_reps;
1474 }
1475 else {
1476 cout << "knowledge_base::cubic_surface_Lines q=" << q
1477 << " I don't have information for this case" << endl;
1478 exit(1);
1479 }
1480 if (i < 0) {
1481 cout << "knowledge_base::cubic_surface_Lines q=" << q << " i=" << i
1482 << " but i must be at least 0 (numbering starts at 0)" << endl;
1483 exit(1);
1484 }
1485 if (i >= nb) {
1486 cout << "knowledge_base::cubic_surface_Lines q=" << q << " i=" << i
1487 << " but I have only " << nb << " representatives" << endl;
1488 exit(1);
1489 }
1490 return p + i * 27;
1491}
1492
1493
1494
1495// #############################################################################
1496// Hyperovals:
1497// #############################################################################
1498
1499
1501{
1502 int nb;
1503
1504 if (q == 8) {
1505 nb = arcs_8_10_nb_reps;
1506 }
1507 else if (q == 16) {
1508 nb = arcs_16_18_nb_reps;
1509 }
1510 else if (q == 32) {
1511 nb = arcs_32_34_nb_reps;
1512 }
1513 else {
1514 cout << "knowledge_base::hyperoval_nb_reps q=" << q
1515 << " I don't have information for this case" << endl;
1516 exit(1);
1517 }
1518 return nb;
1519}
1520
1522// i starts from 0
1523{
1524 int *p, nb, sz;
1525 if (q == 8) {
1526 p = arcs_8_10_reps;
1527 nb = arcs_8_10_nb_reps;
1528 sz = arcs_8_10_size;
1529 }
1530 else if (q == 16) {
1531 p = arcs_16_18_reps;
1532 nb = arcs_16_18_nb_reps;
1533 sz = arcs_16_18_size;
1534 }
1535 else if (q == 32) {
1536 p = arcs_32_34_reps;
1537 nb = arcs_32_34_nb_reps;
1538 sz = arcs_32_34_size;
1539 }
1540 else {
1541 cout << "knowledge_base::hyperovals_representative q=" << q
1542 << " I don't have information for this case" << endl;
1543 exit(1);
1544 }
1545 if (i < 0) {
1546 cout << "knowledge_base::hyperoval_representative q=" << q << " i=" << i
1547 << " but i must be at least 0 (numbering starts at 0)" << endl;
1548 exit(1);
1549 }
1550 if (i >= nb) {
1551 cout << "knowledge_base::hyperoval_representative q=" << q << " i=" << i
1552 << " but I have only " << nb << " representatives" << endl;
1553 exit(1);
1554 }
1555 p += i * sz;
1556 return p;
1557}
1558
1560 int *&data, int &nb_gens, int &data_size, std::string &stab_order_str)
1561{
1562 int *Reps;
1563 int nb, make_element_size;
1564 int f, l;
1565 const char *stab_order;
1566
1567 if (q == 8) {
1568 Reps = arcs_8_10_stab_gens;
1569 nb = arcs_8_10_nb_reps;
1570 make_element_size = arcs_8_10_make_element_size;
1571 f = arcs_8_10_stab_gens_fst[i];
1572 l = arcs_8_10_stab_gens_len[i];
1573 stab_order = arcs_8_10_stab_order[i];
1574 }
1575 else if (q == 16) {
1576 Reps = arcs_16_18_stab_gens;
1577 nb = arcs_16_18_nb_reps;
1578 make_element_size = arcs_16_18_make_element_size;
1579 f = arcs_16_18_stab_gens_fst[i];
1580 l = arcs_16_18_stab_gens_len[i];
1581 stab_order = arcs_16_18_stab_order[i];
1582 }
1583 else if (q == 32) {
1584 Reps = arcs_32_34_stab_gens;
1585 nb = arcs_32_34_nb_reps;
1586 make_element_size = arcs_32_34_make_element_size;
1587 f = arcs_32_34_stab_gens_fst[i];
1588 l = arcs_32_34_stab_gens_len[i];
1589 stab_order = arcs_32_34_stab_order[i];
1590 }
1591 else {
1592 cout << "knowledge_base::hyperoval_representative q=" << q
1593 << " I don't have information for this field order" << endl;
1594 exit(1);
1595 }
1596 if (i < 0) {
1597 cout << "knowledge_base::hyperoval_representative q=" << q << " i=" << i
1598 << " but i must be at least 0 (numbering starts at 0)" << endl;
1599 exit(1);
1600 }
1601 if (i >= nb) {
1602 cout << "knowledge_base::hyperoval_representative q=" << q << " i=" << i
1603 << " but I have only " << nb << " representatives" << endl;
1604 exit(1);
1605 }
1606 nb_gens = l;
1607 data_size = make_element_size;
1608 data = Reps + f * make_element_size;
1609 stab_order_str.assign(stab_order);
1610}
1611
1612
1613
1614
1615// #############################################################################
1616// Dual hyperovals:
1617// #############################################################################
1618
1619
1620
1621
1623{
1624 int nb;
1625
1626 if (k == 4 && n == 7) {
1627 nb = DH_4_7_nb_reps;
1628 }
1629 else if (k == 4 && n == 8) {
1630 nb = DH_4_8_nb_reps;
1631 }
1632 else {
1633 cout << "knowledge_base::DH_nb_reps k=" << k << " n=" << n
1634 << " I don't have information for this case" << endl;
1635 exit(1);
1636 }
1637 return nb;
1638}
1639
1640long int *knowledge_base::DH_representative(int k, int n, int i)
1641// i starts from 0
1642{
1643 long int *p, nb, sz;
1644 if (k == 4 && n == 7) {
1645 p = DH_4_7_reps;
1646 nb = DH_4_7_nb_reps;
1647 sz = DH_4_7_size;
1648 }
1649 else if (k == 4 && n == 8) {
1650 p = DH_4_8_reps;
1651 nb = DH_4_8_nb_reps;
1652 sz = DH_4_8_size;
1653 }
1654 else {
1655 cout << "knowledge_base::DH_representative k=" << k << " n=" << n
1656 << " I don't have information for this case" << endl;
1657 exit(1);
1658 }
1659 if (i < 0) {
1660 cout << "knowledge_base::DH_representative k=" << k << " n=" << n << " i=" << i
1661 << " but i must be at least 0 (numbering starts at 0)" << endl;
1662 exit(1);
1663 }
1664 if (i >= nb) {
1665 cout << "knowledge_base::DH_representative k=" << k << " n=" << n << " i=" << i
1666 << " but I have only " << nb << " representatives" << endl;
1667 exit(1);
1668 }
1669 p += i * sz;
1670 return p;
1671}
1672
1673void knowledge_base::DH_stab_gens(int k, int n, int i,
1674 int *&data, int &nb_gens, int &data_size, std::string &stab_order_str)
1675{
1676 int *Reps;
1677 int nb, make_element_size;
1678 int f, l;
1679 const char *stab_order;
1680
1681 if (k == 4 && n == 7) {
1682 Reps = DH_4_7_stab_gens;
1683 nb = DH_4_7_nb_reps;
1684 make_element_size = DH_4_7_make_element_size;
1685 f = DH_4_7_stab_gens_fst[i];
1686 l = DH_4_7_stab_gens_len[i];
1687 stab_order = DH_4_7_stab_order[i];
1688 }
1689 else if (k == 4 && n == 8) {
1690 Reps = DH_4_8_stab_gens;
1691 nb = DH_4_8_nb_reps;
1692 make_element_size = DH_4_8_make_element_size;
1693 f = DH_4_8_stab_gens_fst[i];
1694 l = DH_4_8_stab_gens_len[i];
1695 stab_order = DH_4_8_stab_order[i];
1696 }
1697 else {
1698 cout << "knowledge_base::DH_representative k=" << k << " n=" << n
1699 << " I don't have information for this field order" << endl;
1700 exit(1);
1701 }
1702 if (i < 0) {
1703 cout << "knowledge_base::DH_representative k=" << k << " n=" << n << " i=" << i
1704 << " but i must be at least 0 (numbering starts at 0)" << endl;
1705 exit(1);
1706 }
1707 if (i >= nb) {
1708 cout << "knowledge_base::DH_representative k=" << k << " n=" << n << " i=" << i
1709 << " but I have only " << nb << " representatives" << endl;
1710 exit(1);
1711 }
1712 nb_gens = l;
1713 data_size = make_element_size;
1714 data = Reps + f * make_element_size;
1715 stab_order_str.assign(stab_order);
1716}
1717
1718
1719
1720
1721
1722// #############################################################################
1723// Spreads:
1724// #############################################################################
1725
1726
1727
1728
1730{
1731 int nb;
1732
1733 if (q == 2 && k == 2) {
1734 nb = Spreads_2_2_nb_reps;
1735 }
1736 else if (q == 3 && k == 2) {
1737 nb = Spreads_3_2_nb_reps;
1738 }
1739 else if (q == 2 && k == 4) {
1740 nb = Spreads_2_4_nb_reps;
1741 }
1742 else if (q == 4 && k == 2) {
1743 nb = Spreads_4_2_nb_reps;
1744 }
1745 else if (q == 5 && k == 2) {
1746 nb = Spreads_5_2_nb_reps;
1747 }
1748 else if (q == 3 && k == 3) {
1749 nb = Spreads_3_3_nb_reps;
1750 }
1751 else {
1752 cout << "knowledge_base::Spread_nb_reps q=" << q << " k=" << k
1753 << " I don't have information for this case" << endl;
1754 exit(1);
1755 }
1756 return nb;
1757}
1758
1759
1760long int *knowledge_base::Spread_representative(int q, int k, int i, int &sz)
1761// i starts from 0
1762{
1763 long int *p, nb;
1764
1765 if (q == 2 && k == 2) {
1766 p = Spreads_2_2_reps;
1767 nb = Spreads_2_2_nb_reps;
1768 sz = Spreads_2_2_size;
1769 }
1770 else if (q == 3 && k == 2) {
1771 p = Spreads_3_2_reps;
1772 nb = Spreads_3_2_nb_reps;
1773 sz = Spreads_3_2_size;
1774 }
1775 else if (q == 2 && k == 4) {
1776 p = Spreads_2_4_reps;
1777 nb = Spreads_2_4_nb_reps;
1778 sz = Spreads_2_4_size;
1779 }
1780 else if (q == 4 && k == 2) {
1781 p = Spreads_4_2_reps;
1782 nb = Spreads_4_2_nb_reps;
1783 sz = Spreads_4_2_size;
1784 }
1785 else if (q == 5 && k == 2) {
1786 p = Spreads_5_2_reps;
1787 nb = Spreads_5_2_nb_reps;
1788 sz = Spreads_5_2_size;
1789 }
1790 else if (q == 3 && k == 3) {
1791 p = Spreads_3_3_reps;
1792 nb = Spreads_3_3_nb_reps;
1793 sz = Spreads_3_3_size;
1794 }
1795 else {
1796 cout << "knowledge_base::Spread_representative q=" << q << " k=" << k
1797 << " I don't have information for this field order" << endl;
1798 exit(1);
1799 }
1800 if (i < 0) {
1801 cout << "knowledge_base::Spread_representative q=" << q << " k=" << k << " i=" << i
1802 << " but i must be at least 0 (numbering starts at 0)" << endl;
1803 exit(1);
1804 }
1805 if (i >= nb) {
1806 cout << "knowledge_base::Spread_representative q=" << q << " k=" << k << " i=" << i
1807 << " but I have only " << nb << " representatives" << endl;
1808 exit(1);
1809 }
1810 p += i * sz;
1811 return p;
1812}
1813
1814void knowledge_base::Spread_stab_gens(int q, int k, int i,
1815 int *&data, int &nb_gens, int &data_size, std::string &stab_order_str)
1816{
1817 int *Reps;
1818 int nb, make_element_size;
1819 int f, l;
1820 const char *stab_order;
1821
1822 if (q == 2 && k == 2) {
1823 Reps = Spreads_2_2_stab_gens;
1824 nb = Spreads_2_2_nb_reps;
1825 make_element_size = Spreads_2_2_make_element_size;
1826 f = Spreads_2_2_stab_gens_fst[i];
1827 l = Spreads_2_2_stab_gens_len[i];
1828 stab_order = Spreads_2_2_stab_order[i];
1829 }
1830 else if (q == 3 && k == 2) {
1831 Reps = Spreads_3_2_stab_gens;
1832 nb = Spreads_3_2_nb_reps;
1833 make_element_size = Spreads_3_2_make_element_size;
1834 f = Spreads_3_2_stab_gens_fst[i];
1835 l = Spreads_3_2_stab_gens_len[i];
1836 stab_order = Spreads_3_2_stab_order[i];
1837 }
1838 else if (q == 2 && k == 4) {
1839 Reps = Spreads_2_4_stab_gens;
1840 nb = Spreads_2_4_nb_reps;
1841 make_element_size = Spreads_2_4_make_element_size;
1842 f = Spreads_2_4_stab_gens_fst[i];
1843 l = Spreads_2_4_stab_gens_len[i];
1844 stab_order = Spreads_2_4_stab_order[i];
1845 }
1846 else if (q == 4 && k == 2) {
1847 Reps = Spreads_4_2_stab_gens;
1848 nb = Spreads_4_2_nb_reps;
1849 make_element_size = Spreads_4_2_make_element_size;
1850 f = Spreads_4_2_stab_gens_fst[i];
1851 l = Spreads_4_2_stab_gens_len[i];
1852 stab_order = Spreads_4_2_stab_order[i];
1853 }
1854 else if (q == 5 && k == 2) {
1855 Reps = Spreads_5_2_stab_gens;
1856 nb = Spreads_5_2_nb_reps;
1857 make_element_size = Spreads_5_2_make_element_size;
1858 f = Spreads_5_2_stab_gens_fst[i];
1859 l = Spreads_5_2_stab_gens_len[i];
1860 stab_order = Spreads_5_2_stab_order[i];
1861 }
1862 else if (q == 3 && k == 3) {
1863 Reps = Spreads_3_3_stab_gens;
1864 nb = Spreads_3_3_nb_reps;
1865 make_element_size = Spreads_3_3_make_element_size;
1866 f = Spreads_3_3_stab_gens_fst[i];
1867 l = Spreads_3_3_stab_gens_len[i];
1868 stab_order = Spreads_3_3_stab_order[i];
1869 }
1870 else {
1871 cout << "knowledge_base::Spread_representative q=" << q << " k=" << k
1872 << " I don't have information for this field order" << endl;
1873 exit(1);
1874 }
1875 if (i < 0) {
1876 cout << "knowledge_base::Spread_representative q=" << q << " k=" << k << " i=" << i
1877 << " but i must be at least 0 (numbering starts at 0)" << endl;
1878 exit(1);
1879 }
1880 if (i >= nb) {
1881 cout << "knowledge_base::Spread_representative q=" << q << " k=" << k << " i=" << i
1882 << " but I have only " << nb << " representatives" << endl;
1883 exit(1);
1884 }
1885 nb_gens = l;
1886 data_size = make_element_size;
1887 data = Reps + f * make_element_size;
1888 stab_order_str.assign(stab_order);
1889}
1890
1891
1892// #############################################################################
1893// BLT sets:
1894// #############################################################################
1895
1896
1897
1898
1900{
1901 int nb;
1902
1903 if (q == 3) {
1904 nb = BLT_3_nb_reps;
1905 }
1906 else if (q == 5) {
1907 nb = BLT_5_nb_reps;
1908 }
1909 else if (q == 7) {
1910 nb = BLT_7_nb_reps;
1911 }
1912 else if (q == 9) {
1913 nb = BLT_9_nb_reps;
1914 }
1915 else if (q == 11) {
1916 nb = BLT_11_nb_reps;
1917 }
1918 else if (q == 13) {
1919 nb = BLT_13_nb_reps;
1920 }
1921 else if (q == 17) {
1922 nb = BLT_17_nb_reps;
1923 }
1924 else if (q == 19) {
1925 nb = BLT_19_nb_reps;
1926 }
1927 else if (q == 23) {
1928 nb = BLT_23_nb_reps;
1929 }
1930 else if (q == 25) {
1931 nb = BLT_25_nb_reps;
1932 }
1933 else if (q == 27) {
1934 nb = BLT_27_nb_reps;
1935 }
1936 else if (q == 29) {
1937 nb = BLT_29_nb_reps;
1938 }
1939 else if (q == 31) {
1940 nb = BLT_31_nb_reps;
1941 }
1942 else if (q == 37) {
1943 nb = BLT_37_nb_reps;
1944 }
1945 else if (q == 41) {
1946 nb = BLT_41_nb_reps;
1947 }
1948 else if (q == 43) {
1949 nb = BLT_43_nb_reps;
1950 }
1951 else if (q == 47) {
1952 nb = BLT_47_nb_reps;
1953 }
1954 else if (q == 49) {
1955 nb = BLT_49_nb_reps;
1956 }
1957 else if (q == 53) {
1958 nb = BLT_53_nb_reps;
1959 }
1960 else if (q == 59) {
1961 nb = BLT_59_nb_reps;
1962 }
1963 else if (q == 61) {
1964 nb = BLT_61_nb_reps;
1965 }
1966 else if (q == 67) {
1967 nb = BLT_67_nb_reps;
1968 }
1969 else if (q == 71) {
1970 nb = BLT_71_nb_reps;
1971 }
1972 else if (q == 73) {
1973 nb = BLT_73_nb_reps;
1974 }
1975 else {
1976 cout << "knowledge_base::BLT_nb_reps q=" << q
1977 << " I don't have information for this order" << endl;
1978 exit(1);
1979 }
1980 return nb;
1981}
1982
1984// i starts from 0
1985{
1986 long int *p;
1987 int nb, sz;
1988
1989 if (q == 3) {
1990 p = BLT_3_reps;
1991 nb = BLT_3_nb_reps;
1992 sz = BLT_3_size;
1993 }
1994 else if (q == 5) {
1995 p = BLT_5_reps;
1996 nb = BLT_5_nb_reps;
1997 sz = BLT_5_size;
1998 }
1999 else if (q == 7) {
2000 p = BLT_7_reps;
2001 nb = BLT_7_nb_reps;
2002 sz = BLT_7_size;
2003 }
2004 else if (q == 9) {
2005 p = BLT_9_reps;
2006 nb = BLT_9_nb_reps;
2007 sz = BLT_9_size;
2008 }
2009 else if (q == 11) {
2010 p = BLT_11_reps;
2011 nb = BLT_11_nb_reps;
2012 sz = BLT_11_size;
2013 }
2014 else if (q == 13) {
2015 p = BLT_13_reps;
2016 nb = BLT_13_nb_reps;
2017 sz = BLT_13_size;
2018 }
2019 else if (q == 17) {
2020 p = BLT_17_reps;
2021 nb = BLT_17_nb_reps;
2022 sz = BLT_17_size;
2023 }
2024 else if (q == 19) {
2025 p = BLT_19_reps;
2026 nb = BLT_19_nb_reps;
2027 sz = BLT_19_size;
2028 }
2029 else if (q == 23) {
2030 p = BLT_23_reps;
2031 nb = BLT_23_nb_reps;
2032 sz = BLT_23_size;
2033 }
2034 else if (q == 25) {
2035 p = BLT_25_reps;
2036 nb = BLT_25_nb_reps;
2037 sz = BLT_25_size;
2038 }
2039 else if (q == 27) {
2040 p = BLT_27_reps;
2041 nb = BLT_27_nb_reps;
2042 sz = BLT_27_size;
2043 }
2044 else if (q == 29) {
2045 p = BLT_29_reps;
2046 nb = BLT_29_nb_reps;
2047 sz = BLT_29_size;
2048 }
2049 else if (q == 31) {
2050 p = BLT_31_reps;
2051 nb = BLT_31_nb_reps;
2052 sz = BLT_31_size;
2053 }
2054 else if (q == 37) {
2055 p = BLT_37_reps;
2056 nb = BLT_37_nb_reps;
2057 sz = BLT_37_size;
2058 }
2059 else if (q == 41) {
2060 p = BLT_41_reps;
2061 nb = BLT_41_nb_reps;
2062 sz = BLT_41_size;
2063 }
2064 else if (q == 43) {
2065 p = BLT_43_reps;
2066 nb = BLT_43_nb_reps;
2067 sz = BLT_43_size;
2068 }
2069 else if (q == 47) {
2070 p = BLT_47_reps;
2071 nb = BLT_47_nb_reps;
2072 sz = BLT_47_size;
2073 }
2074 else if (q == 49) {
2075 p = BLT_49_reps;
2076 nb = BLT_49_nb_reps;
2077 sz = BLT_49_size;
2078 }
2079 else if (q == 53) {
2080 p = BLT_53_reps;
2081 nb = BLT_53_nb_reps;
2082 sz = BLT_53_size;
2083 }
2084 else if (q == 59) {
2085 p = BLT_59_reps;
2086 nb = BLT_59_nb_reps;
2087 sz = BLT_59_size;
2088 }
2089 else if (q == 61) {
2090 p = BLT_61_reps;
2091 nb = BLT_61_nb_reps;
2092 sz = BLT_61_size;
2093 }
2094 else if (q == 67) {
2095 p = BLT_67_reps;
2096 nb = BLT_67_nb_reps;
2097 sz = BLT_67_size;
2098 }
2099 else if (q == 71) {
2100 p = BLT_71_reps;
2101 nb = BLT_71_nb_reps;
2102 sz = BLT_71_size;
2103 }
2104 else if (q == 73) {
2105 p = BLT_73_reps;
2106 nb = BLT_73_nb_reps;
2107 sz = BLT_73_size;
2108 }
2109 else {
2110 cout << "knowledge_base::BLT_representative q=" << q
2111 << " I don't have information for this field order" << endl;
2112 exit(1);
2113 }
2114 if (no < 0) {
2115 cout << "knowledge_base::BLT_representative q=" << q << " no=" << no
2116 << " but i must be at least 0 (numbering starts at 0)" << endl;
2117 exit(1);
2118 }
2119 if (no >= nb) {
2120 cout << "knowledge_base::BLT_representative q=" << q << " no=" << no
2121 << " but I have only " << nb << " representatives" << endl;
2122 exit(1);
2123 }
2124 p += no * sz;
2125 return p;
2126}
2127
2129 int *&data, int &nb_gens, int &data_size, std::string &stab_order_str)
2130{
2131 int *Reps;
2132 int nb, make_element_size;
2133 int f, l;
2134 const char *stab_order;
2135
2136 if (q == 3) {
2137 Reps = BLT_3_stab_gens;
2138 nb = BLT_3_nb_reps;
2139 make_element_size = BLT_3_make_element_size;
2140 f = BLT_3_stab_gens_fst[no];
2141 l = BLT_3_stab_gens_len[no];
2142 stab_order = BLT_3_stab_order[no];
2143 }
2144 else if (q == 5) {
2145 Reps = BLT_5_stab_gens;
2146 nb = BLT_5_nb_reps;
2147 make_element_size = BLT_5_make_element_size;
2148 f = BLT_5_stab_gens_fst[no];
2149 l = BLT_5_stab_gens_len[no];
2150 stab_order = BLT_5_stab_order[no];
2151 }
2152 else if (q == 7) {
2153 Reps = BLT_7_stab_gens;
2154 nb = BLT_7_nb_reps;
2155 make_element_size = BLT_7_make_element_size;
2156 f = BLT_7_stab_gens_fst[no];
2157 l = BLT_7_stab_gens_len[no];
2158 stab_order = BLT_7_stab_order[no];
2159 }
2160 else if (q == 9) {
2161 Reps = BLT_9_stab_gens;
2162 nb = BLT_9_nb_reps;
2163 make_element_size = BLT_9_make_element_size;
2164 f = BLT_9_stab_gens_fst[no];
2165 l = BLT_9_stab_gens_len[no];
2166 stab_order = BLT_9_stab_order[no];
2167 }
2168 else if (q == 11) {
2169 Reps = BLT_11_stab_gens;
2170 nb = BLT_11_nb_reps;
2171 make_element_size = BLT_11_make_element_size;
2172 f = BLT_11_stab_gens_fst[no];
2173 l = BLT_11_stab_gens_len[no];
2174 stab_order = BLT_11_stab_order[no];
2175 }
2176 else if (q == 13) {
2177 Reps = BLT_13_stab_gens;
2178 nb = BLT_13_nb_reps;
2179 make_element_size = BLT_13_make_element_size;
2180 f = BLT_13_stab_gens_fst[no];
2181 l = BLT_13_stab_gens_len[no];
2182 stab_order = BLT_13_stab_order[no];
2183 }
2184 else if (q == 17) {
2185 Reps = BLT_17_stab_gens;
2186 nb = BLT_17_nb_reps;
2187 make_element_size = BLT_17_make_element_size;
2188 f = BLT_17_stab_gens_fst[no];
2189 l = BLT_17_stab_gens_len[no];
2190 stab_order = BLT_17_stab_order[no];
2191 }
2192 else if (q == 19) {
2193 Reps = BLT_19_stab_gens;
2194 nb = BLT_19_nb_reps;
2195 make_element_size = BLT_19_make_element_size;
2196 f = BLT_19_stab_gens_fst[no];
2197 l = BLT_19_stab_gens_len[no];
2198 stab_order = BLT_19_stab_order[no];
2199 }
2200 else if (q == 23) {
2201 Reps = BLT_23_stab_gens;
2202 nb = BLT_23_nb_reps;
2203 make_element_size = BLT_23_make_element_size;
2204 f = BLT_23_stab_gens_fst[no];
2205 l = BLT_23_stab_gens_len[no];
2206 stab_order = BLT_23_stab_order[no];
2207 }
2208 else if (q == 25) {
2209 Reps = BLT_25_stab_gens;
2210 nb = BLT_25_nb_reps;
2211 make_element_size = BLT_25_make_element_size;
2212 f = BLT_25_stab_gens_fst[no];
2213 l = BLT_25_stab_gens_len[no];
2214 stab_order = BLT_25_stab_order[no];
2215 }
2216 else if (q == 27) {
2217 Reps = BLT_27_stab_gens;
2218 nb = BLT_27_nb_reps;
2219 make_element_size = BLT_27_make_element_size;
2220 f = BLT_27_stab_gens_fst[no];
2221 l = BLT_27_stab_gens_len[no];
2222 stab_order = BLT_27_stab_order[no];
2223 }
2224 else if (q == 29) {
2225 Reps = BLT_29_stab_gens;
2226 nb = BLT_29_nb_reps;
2227 make_element_size = BLT_29_make_element_size;
2228 f = BLT_29_stab_gens_fst[no];
2229 l = BLT_29_stab_gens_len[no];
2230 stab_order = BLT_29_stab_order[no];
2231 }
2232 else if (q == 31) {
2233 Reps = BLT_31_stab_gens;
2234 nb = BLT_31_nb_reps;
2235 make_element_size = BLT_31_make_element_size;
2236 f = BLT_31_stab_gens_fst[no];
2237 l = BLT_31_stab_gens_len[no];
2238 stab_order = BLT_31_stab_order[no];
2239 }
2240 else if (q == 37) {
2241 Reps = BLT_37_stab_gens;
2242 nb = BLT_37_nb_reps;
2243 make_element_size = BLT_37_make_element_size;
2244 f = BLT_37_stab_gens_fst[no];
2245 l = BLT_37_stab_gens_len[no];
2246 stab_order = BLT_37_stab_order[no];
2247 }
2248 else if (q == 41) {
2249 Reps = BLT_41_stab_gens;
2250 nb = BLT_41_nb_reps;
2251 make_element_size = BLT_41_make_element_size;
2252 f = BLT_41_stab_gens_fst[no];
2253 l = BLT_41_stab_gens_len[no];
2254 stab_order = BLT_41_stab_order[no];
2255 }
2256 else if (q == 43) {
2257 Reps = BLT_43_stab_gens;
2258 nb = BLT_43_nb_reps;
2259 make_element_size = BLT_43_make_element_size;
2260 f = BLT_43_stab_gens_fst[no];
2261 l = BLT_43_stab_gens_len[no];
2262 stab_order = BLT_43_stab_order[no];
2263 }
2264 else if (q == 47) {
2265 Reps = BLT_47_stab_gens;
2266 nb = BLT_47_nb_reps;
2267 make_element_size = BLT_47_make_element_size;
2268 f = BLT_47_stab_gens_fst[no];
2269 l = BLT_47_stab_gens_len[no];
2270 stab_order = BLT_47_stab_order[no];
2271 }
2272 else if (q == 49) {
2273 Reps = BLT_49_stab_gens;
2274 nb = BLT_49_nb_reps;
2275 make_element_size = BLT_49_make_element_size;
2276 f = BLT_49_stab_gens_fst[no];
2277 l = BLT_49_stab_gens_len[no];
2278 stab_order = BLT_49_stab_order[no];
2279 }
2280 else if (q == 53) {
2281 Reps = BLT_53_stab_gens;
2282 nb = BLT_53_nb_reps;
2283 make_element_size = BLT_53_make_element_size;
2284 f = BLT_53_stab_gens_fst[no];
2285 l = BLT_53_stab_gens_len[no];
2286 stab_order = BLT_53_stab_order[no];
2287 }
2288 else if (q == 59) {
2289 Reps = BLT_59_stab_gens;
2290 nb = BLT_59_nb_reps;
2291 make_element_size = BLT_59_make_element_size;
2292 f = BLT_59_stab_gens_fst[no];
2293 l = BLT_59_stab_gens_len[no];
2294 stab_order = BLT_59_stab_order[no];
2295 }
2296 else if (q == 61) {
2297 Reps = BLT_61_stab_gens;
2298 nb = BLT_61_nb_reps;
2299 make_element_size = BLT_61_make_element_size;
2300 f = BLT_61_stab_gens_fst[no];
2301 l = BLT_61_stab_gens_len[no];
2302 stab_order = BLT_61_stab_order[no];
2303 }
2304 else if (q == 67) {
2305 Reps = BLT_67_stab_gens;
2306 nb = BLT_67_nb_reps;
2307 make_element_size = BLT_67_make_element_size;
2308 f = BLT_67_stab_gens_fst[no];
2309 l = BLT_67_stab_gens_len[no];
2310 stab_order = BLT_67_stab_order[no];
2311 }
2312 else if (q == 71) {
2313 Reps = BLT_71_stab_gens;
2314 nb = BLT_71_nb_reps;
2315 make_element_size = BLT_71_make_element_size;
2316 f = BLT_71_stab_gens_fst[no];
2317 l = BLT_71_stab_gens_len[no];
2318 stab_order = BLT_71_stab_order[no];
2319 }
2320 else if (q == 73) {
2321 Reps = BLT_73_stab_gens;
2322 nb = BLT_73_nb_reps;
2323 make_element_size = BLT_73_make_element_size;
2324 f = BLT_73_stab_gens_fst[no];
2325 l = BLT_73_stab_gens_len[no];
2326 stab_order = BLT_73_stab_order[no];
2327 }
2328 else {
2329 cout << "knowledge_base::BLT_representative q=" << q << " I don't have "
2330 "information for this field order" << endl;
2331 exit(1);
2332 }
2333 if (no < 0) {
2334 cout << "knowledge_base::BLT_representative q=" << q << " no=" << no
2335 << " but i must be at least 0 (numbering starts at 0)" << endl;
2336 exit(1);
2337 }
2338 if (no >= nb) {
2339 cout << "knowledge_base::BLT_representative q=" << q << " no=" << no
2340 << " but I have only " << nb << " representatives" << endl;
2341 exit(1);
2342 }
2343 nb_gens = l;
2344 data_size = make_element_size;
2345 data = Reps + f * make_element_size;
2346 stab_order_str.assign(stab_order);
2347}
2348
2349
2350
2351
2353{
2354 const char *override_poly = NULL;
2355 int p, h;
2357
2358 if (!NT.is_prime_power(q, p, h)) {
2359 cout << "knowledge_base::override_polynomial_subfield "
2360 "q is not a prime power" << endl;
2361 exit(1);
2362 }
2363 if (h == 1) {
2364 poly.assign("");
2365 return;
2366 }
2367 if (q == 8) {
2368 override_poly = "13"; // Warning !!!
2369 }
2370 else if (q == 9) {
2371 override_poly = "17";
2372 }
2373 else if (q == 25) {
2374 override_poly = "47";
2375 }
2376 else if (q == 27) {
2377 override_poly = "34";
2378 }
2379 else if (q == 49) {
2380 override_poly = "94";
2381 }
2382 else if (q == 81) {
2383 override_poly = "89";
2384 }
2385 else if (q == 121) {
2386 override_poly = "200";
2387 }
2388 if (override_poly == NULL) {
2389 cout << "knowledge_base::override_polynomial_subfield, "
2390 "do not have a polynomial for q=" << q << endl;
2391 exit(1);
2392
2393#if 0
2394 int verbose_level = 2;
2395 finite_field f, F;
2396 int qq = q * q;
2397
2398 cout << "knowledge_base::override_polynomial_subfield initializing large field" << endl;
2399 F.finite_field_init(qq, FALSE /* f_without_tables */, verbose_level);
2400 cout << "knowledge_base::override_polynomial_subfield initializing small field" << endl;
2401 f.finite_field_init(q, FALSE /* f_without_tables */, verbose_level);
2402 if (f.e > 1) {
2403 F.finite_field_init(qq, FALSE /* f_without_tables */, 1);
2404 f.finite_field_init(q, FALSE /* f_without_tables */, 3);
2405 cout << "knowledge_base::override_polynomial_subfield need to choose the generator "
2406 "polynomial for the field" << endl;
2407 F.compute_subfields(verbose_level);
2408 //exit(1);
2409 }
2410#endif
2411 //return NULL;
2412 }
2413 poly.assign(override_poly);
2414}
2415
2417{
2418 const char *override_poly = NULL;
2419 int p, h;
2421
2422 if (!NT.is_prime_power(q, p, h)) {
2423 cout << "knowledge_base::override_polynomial_extension_field "
2424 "q is not a prime power" << endl;
2425 exit(1);
2426 }
2427 if (h == 1) {
2428 get_primitive_polynomial(poly, q, 2, 0/*verbose_level*/); // ToDo
2429 return;
2430 }
2431#if 0
2432 if (h == 1) {
2433 return NULL;
2434 }
2435#endif
2436 if (q == 9) {
2437 override_poly = "110";
2438 }
2439 else if (q == 25) {
2440 override_poly = "767";
2441 }
2442 else if (q == 27) {
2443 override_poly = "974";
2444 }
2445 else if (q == 49) {
2446 override_poly = "2754";
2447 }
2448 else if (q == 81) {
2449 override_poly = "6590";
2450 }
2451 else if (q == 121) {
2452 override_poly = "15985";
2453 }
2454 if (override_poly == NULL) {
2455 cout << "knowledge_base::override_polynomial_extension_field, "
2456 "do not have a polynomial for q=" << q << endl;
2457 exit(1);
2458 }
2459 poly.assign(override_poly);
2460}
2461
2462#if 0
2463 if (q == 9) {
2464 char *override_poly_Q = "110"; // X^{4} + X^{3} + 2
2465 char *override_poly_q = "17"; // X^2 - X - 1 = X^2 +2X + 2 = 2 + 2*3 + 9 = 17
2466 //finite_field::init_override_polynomial
2467 // GF(81) = GF(3^4), polynomial = X^{4} + X^{3} + 2 = 110
2468 //subfields of F_{81}:
2469 //subfield 3^2 : subgroup_index = 10
2470 //0 : 0 : 1 : 1
2471 //1 : 10 : 46 : X^{3} + 2X^{2} + 1
2472 //2 : 20 : 47 : X^{3} + 2X^{2} + 2
2473 F.init_override_polynomial(Q, override_poly_Q, verbose_level - 2);
2474 cout << "field of order " << Q << " initialized" << endl;
2475 f.init_override_polynomial(q, override_poly_q, verbose_level - 2);
2476 }
2477 else if (q == 25) {
2478 char *override_poly_Q = "767"; // X^{4} + X^{3} + 3X + 2
2479 char *override_poly_q = "47"; // X^2 - X - 3 = X^2 +4X + 2=25+20+2=47
2480 //subfields of F_{625}:
2481 //subfield 5^2 : subgroup_index = 26
2482 //0 : 0 : 1 : 1
2483 //1 : 26 : 110 : 4X^{2} + 2X
2484 //2 : 52 : 113 : 4X^{2} + 2X + 3
2485 F.init_override_polynomial(Q, override_poly_Q, verbose_level - 2);
2486 cout << "field of order " << Q << " initialized" << endl;
2487 f.init_override_polynomial(q, override_poly_q, verbose_level - 2);
2488 }
2489 else if (q == 27) {
2490 char *override_poly_Q = "974"; // X^{6} + X^{5} + 2
2491 char *override_poly_q = "34"; // X^3 - X + 1 = X^3 +2X + 1 = 27+6+1=34
2492 //subfields of F_{729}:
2493 //subfield 3^2 : subgroup_index = 91
2494 //0 : 0 : 1 : 1
2495 //1 : 91 : 599 : 2X^{5} + X^{4} + X^{3} + X + 2
2496 //2 : 182 : 597 : 2X^{5} + X^{4} + X^{3} + X
2497 //subfield 3^3 : subgroup_index = 28
2498 //0 : 0 : 1 : 1
2499 //1 : 28 : 158 : X^{4} + 2X^{3} + 2X^{2} + X + 2
2500 //2 : 56 : 498 : 2X^{5} + X^{2} + X
2501 //3 : 84 : 157 : X^{4} + 2X^{3} + 2X^{2} + X + 1
2502 F.init_override_polynomial(Q, override_poly_Q, verbose_level - 2);
2503 cout << "field of order " << Q << " initialized" << endl;
2504 f.init_override_polynomial(q, override_poly_q, verbose_level - 2);
2505 }
2506 else if (q == 49) {
2507 char *override_poly_Q = "2754"; // X^{4} + X^{3} + X + 3
2508 char *override_poly_q = "94"; // X^2-X+3 = X^2+6X+3 = 49+6*7+3=94
2509 //subfields of F_{2401}:
2510 //subfield 7^2 : subgroup_index = 50
2511 //0 : 0 : 1 : 1
2512 //1 : 50 : 552 : X^{3} + 4X^{2} + X + 6
2513 //2 : 100 : 549 : X^{3} + 4X^{2} + X + 3
2514 F.init_override_polynomial(Q, override_poly_Q, verbose_level - 2);
2515 cout << "field of order " << Q << " initialized" << endl;
2516 f.init_override_polynomial(q, override_poly_q, verbose_level - 2);
2517 }
2518 else if (q == 81) {
2519 char *override_poly_Q = "6590"; // X^{8} + X^{3} + 2
2520 char *override_poly_q = "89"; // X^4-X-1=X^4+2X+2=81+2*3+2=89
2521 //subfields of F_{6561}:
2522 //subfield 3^4 : subgroup_index = 82
2523 //0 : 0 : 1 : 1
2524 //1 : 82 : 5413 : 2X^{7} + X^{6} + X^{5} + 2X^{3} + X^{2} + X + 1
2525 //2 : 164 : 1027 : X^{6} + X^{5} + 2X^{3} + 1
2526 //3 : 246 : 3976 : X^{7} + 2X^{6} + X^{5} + X^{4} + 2X + 1
2527 //4 : 328 : 5414 : 2X^{7} + X^{6} + X^{5} + 2X^{3} + X^{2} + X + 2
2528 F.init_override_polynomial(Q, override_poly_Q, verbose_level - 2);
2529 cout << "field of order " << Q << " initialized" << endl;
2530 f.init_override_polynomial(q, override_poly_q, verbose_level - 2);
2531 }
2532 else if (q == 121) {
2533 char *override_poly_Q = "15985"; // X^{4} + X^{3} + X + 2
2534 char *override_poly_q = "200"; // X^2-4X+2=X^2+7X+2=11^2+7*11+2=200
2535 //subfields of F_{14641}:
2536 //subfield 11^2 : subgroup_index = 122
2537 //0 : 0 : 1 : 1
2538 //1 : 122 : 4352 : 3X^{3} + 2X^{2} + 10X + 7
2539 //2 : 244 : 2380 : X^{3} + 8X^{2} + 7X + 4
2540 F.init_override_polynomial(Q, override_poly_Q, verbose_level - 2);
2541 cout << "field of order " << Q << " initialized" << endl;
2542 f.init_override_polynomial(q, override_poly_q, verbose_level - 2);
2543 }
2544#endif
2545
2546
2547
2548
2549// #############################################################################
2550// projective planes
2551// #############################################################################
2552
2554 int *&list_of_lines,
2555 int &order, int &nb_lines, int &line_size,
2556 const char *label, int verbose_level)
2557{
2558 int f_v = (verbose_level >= 1);
2559 int i;
2560
2561 if (f_v) {
2562 cout << "knowledge_base::get_projective_plane_list_of_lines" << endl;
2563 }
2564 if (strcmp(label, "Mathon_16") == 0) {
2565 order = 16;
2566 nb_lines = order * order + order + 1;
2567 line_size = order + 1;
2568 list_of_lines = NEW_int(nb_lines * line_size);
2569 for (i = 0; i < nb_lines * line_size; i++) {
2570 list_of_lines[i] = plane_mathon[i] - 1;
2571 }
2572 }
2573 else if (strcmp(label, "Semi4_16") == 0) {
2574 order = 16;
2575 nb_lines = order * order + order + 1;
2576 line_size = order + 1;
2577 list_of_lines = NEW_int(nb_lines * line_size);
2578 for (i = 0; i < nb_lines * line_size; i++) {
2579 list_of_lines[i] = plane_semi4[i] - 1;
2580 }
2581 }
2582 else if (strcmp(label, "Semi2_16") == 0) {
2583 order = 16;
2584 nb_lines = order * order + order + 1;
2585 line_size = order + 1;
2586 list_of_lines = NEW_int(nb_lines * line_size);
2587 for (i = 0; i < nb_lines * line_size; i++) {
2588 list_of_lines[i] = plane_semi2[i] - 1;
2589 }
2590 }
2591 else if (strcmp(label, "PG_2_16") == 0) {
2592 order = 16;
2593 nb_lines = order * order + order + 1;
2594 line_size = order + 1;
2595 list_of_lines = NEW_int(nb_lines * line_size);
2596 for (i = 0; i < nb_lines * line_size; i++) {
2597 list_of_lines[i] = plane_PG_2_16[i] - 1;
2598 }
2599 }
2600 else if (strcmp(label, "Lmrh_16") == 0) {
2601 order = 16;
2602 nb_lines = order * order + order + 1;
2603 line_size = order + 1;
2604 list_of_lines = NEW_int(nb_lines * line_size);
2605 for (i = 0; i < nb_lines * line_size; i++) {
2606 list_of_lines[i] = plane_Lmrh[i] - 1;
2607 }
2608 }
2609 else if (strcmp(label, "Jowk_16") == 0) {
2610 order = 16;
2611 nb_lines = order * order + order + 1;
2612 line_size = order + 1;
2613 list_of_lines = NEW_int(nb_lines * line_size);
2614 for (i = 0; i < nb_lines * line_size; i++) {
2615 list_of_lines[i] = plane_jowk[i] - 1;
2616 }
2617 }
2618 else if (strcmp(label, "Jo_16") == 0) {
2619 order = 16;
2620 nb_lines = order * order + order + 1;
2621 line_size = order + 1;
2622 list_of_lines = NEW_int(nb_lines * line_size);
2623 for (i = 0; i < nb_lines * line_size; i++) {
2624 list_of_lines[i] = plane_johnson[i] - 1;
2625 }
2626 }
2627 else if (strcmp(label, "Hall_16") == 0) {
2628 order = 16;
2629 nb_lines = order * order + order + 1;
2630 line_size = order + 1;
2631 list_of_lines = NEW_int(nb_lines * line_size);
2632 for (i = 0; i < nb_lines * line_size; i++) {
2633 list_of_lines[i] = plane_Hall[i] - 1;
2634 }
2635 }
2636 else if (strcmp(label, "Dsfp_16") == 0) {
2637 order = 16;
2638 nb_lines = order * order + order + 1;
2639 line_size = order + 1;
2640 list_of_lines = NEW_int(nb_lines * line_size);
2641 for (i = 0; i < nb_lines * line_size; i++) {
2642 list_of_lines[i] = plane_dsfp[i] - 1;
2643 }
2644 }
2645 else if (strcmp(label, "Demp_16") == 0) {
2646 order = 16;
2647 nb_lines = order * order + order + 1;
2648 line_size = order + 1;
2649 list_of_lines = NEW_int(nb_lines * line_size);
2650 for (i = 0; i < nb_lines * line_size; i++) {
2651 list_of_lines[i] = plane_demp[i] - 1;
2652 }
2653 }
2654 else if (strcmp(label, "Bbh1_16") == 0) {
2655 order = 16;
2656 nb_lines = order * order + order + 1;
2657 line_size = order + 1;
2658 list_of_lines = NEW_int(nb_lines * line_size);
2659 for (i = 0; i < nb_lines * line_size; i++) {
2660 list_of_lines[i] = plane_bbh1[i] - 1;
2661 }
2662 }
2663 else {
2664 cout << "knowledge_base::get_projective_plane_list_of_lines unrecognized type" << endl;
2665 exit(1);
2666 }
2667 if (f_v) {
2668 cout << "knowledge_base::get_projective_plane_list_of_lines done" << endl;
2669 }
2670}
2671
2672
2673// #############################################################################
2674// tensor orbits:
2675// #############################################################################
2676
2677
2679{
2680 int nb;
2681
2682 if (n == 4) {
2683 nb = data_tensor_nb_w4_reps;
2684 }
2685 else if (n == 5) {
2686 nb = data_tensor_nb_w5_reps;
2687 }
2688 else {
2689 cout << "knowledge_base::tensor_orbits_nb_reps n=" << n
2690 << " I don't have information for this case" << endl;
2691 exit(1);
2692 }
2693 return nb;
2694}
2695
2696long int *knowledge_base::tensor_orbits_rep(int n, int idx)
2697// idx starts from 0
2698{
2699 long int *p;
2700 int nb, sz = 3;
2701
2702 if (n == 4) {
2703 p = data_tensor_w4_reps;
2704 nb = data_tensor_nb_w4_reps;
2705 }
2706 else if (n == 5) {
2707 p = data_tensor_w5_reps;
2708 nb = data_tensor_nb_w5_reps;
2709 }
2710 else {
2711 cout << "knowledge_base::tensor_orbits_rep n=" << n
2712 << " I don't have information for this case" << endl;
2713 exit(1);
2714 }
2715 if (idx < 0) {
2716 cout << "knowledge_base::tensor_orbits_rep n=" << n << " idx=" << idx
2717 << " but idx must be at least 0 (numbering starts at 0)" << endl;
2718 exit(1);
2719 }
2720 if (idx >= nb) {
2721 cout << "knowledge_base::tensor_orbits_rep n=" << n << " idx=" << idx
2722 << " but I have only " << nb << " representatives" << endl;
2723 exit(1);
2724 }
2725 p += idx * sz;
2726 return p;
2727}
2728
2729
2730
2731}
2732}
2733
2734
void quartic_curves_stab_gens(int q, int i, int *&data, int &nb_gens, int &data_size, std::string &stab_order_str)
void BLT_stab_gens(int q, int no, int *&data, int &nb_gens, int &data_size, std::string &stab_order_str)
void Spread_stab_gens(int q, int k, int i, int *&data, int &nb_gens, int &data_size, std::string &stab_order_str)
long int * Spread_representative(int q, int k, int i, int &sz)
void DH_stab_gens(int k, int n, int i, int *&data, int &nb_gens, int &data_size, std::string &stab_order_str)
long int * DH_representative(int k, int n, int i)
long int * quartic_curves_bitangents(int q, int i)
void get_primitive_polynomial(std::string &poly, int p, int e, int verbose_level)
void override_polynomial_extension_field(std::string &poly, int q)
void cubic_surface_stab_gens(int q, int i, int *&data, int &nb_gens, int &data_size, std::string &stab_order_str)
void get_projective_plane_list_of_lines(int *&list_of_lines, int &order, int &nb_lines, int &line_size, const char *label, int verbose_level)
void hyperoval_gens(int q, int i, int *&data, int &nb_gens, int &data_size, std::string &stab_order_str)
void override_polynomial_subfield(std::string &poly, int q)
#define NEW_int(n)
Definition: foundations.h:625
#define FALSE
Definition: foundations.h:234
the orbiter library for the classification of combinatorial objects