18namespace layer5_applications {
19namespace applications_in_algebraic_geometry {
20namespace cubic_surfaces_in_general {
84 int f_v = (verbose_level >= 1);
87 cout <<
"surface_with_action::init" << endl;
97 cout <<
"surface_with_action::init action A:" << endl;
103 cout <<
"surface_with_action::init "
104 "before A->induced_action_on_wedge_product" << endl;
108 cout <<
"surface_with_action::init "
109 "after A->induced_action_on_wedge_product" << endl;
112 cout <<
"surface_with_action::init action A_wedge:" << endl;
118 cout <<
"surface_with_action::init action A2:" << endl;
123 cout <<
"surface_with_action::init f_semilinear=" <<
f_semilinear << endl;
130 cout <<
"surface_with_action::init "
131 "creating action on lines" << endl;
135 cout <<
"surface_with_action::init "
136 "creating action on lines done" << endl;
141 cout <<
"surface_with_action::init "
142 "creating action A_on_planes" << endl;
146 cout <<
"surface_with_action::init "
147 "creating action A_on_planes done" << endl;
156 cout <<
"surface_with_action::init "
157 "before AonHPD_3_4->init" << endl;
164 cout <<
"surface_with_action::init "
165 "before Classify_trihedral_pairs->init" << endl;
170 if (f_recoordinatize) {
180 cout <<
"surface_with_action::init "
181 "before Recoordinatize->init" << endl;
192 cout <<
"surface_with_action::init after "
193 "Recoordinatize->init" << endl;
198 cout <<
"surface_with_action::init not f_recoordinatize" << endl;
204 cout <<
"surface_with_action::init before "
205 "Surf->Gr->line_regulus_in_PG_3_q" << endl;
210 cout <<
"surface_with_action::init after "
211 "Surf->Gr->line_regulus_in_PG_3_q" << endl;
215 cout <<
"surface_with_action::init done" << endl;
220 long int *five_lines,
long int transversal_line,
long int *double_six,
223 int f_v = (verbose_level >= 1);
224 long int double_six1[12];
225 long int double_six2[12];
230 cout <<
"surface_with_action::create_double_six_safely" << endl;
231 cout <<
"five_lines=";
233 cout <<
" transversal_line=" << transversal_line << endl;
237 cout <<
"surface_with_action::create_double_six_safely "
238 "before create_double_six_from_five_lines_with_a_common_transversal (1)" << endl;
241 five_lines, transversal_line, double_six1,
244 cout <<
"surface_with_action::create_double_six_safely "
245 "after create_double_six_from_five_lines_with_a_common_transversal (1)" << endl;
249 cout <<
"surface_with_action::create_double_six_safely "
250 "before create_double_six_from_five_lines_with_a_common_transversal (2)" << endl;
253 five_lines, double_six2,
256 cout <<
"surface_with_action::create_double_six_safely "
257 "after create_double_six_from_five_lines_with_a_common_transversal (2)" << endl;
261 cout <<
"surface_with_action::create_double_six_safely "
266 cout <<
"surface_with_action::create_double_six_safely "
275 cout <<
"surface_with_action::create_double_six_safely "
276 "the double sixes differ" << endl;
277 cout <<
"double six 1: ";
280 cout <<
"double six 2: ";
287 cout <<
"surface_with_action::create_double_six_safely done" << endl;
293 long int a,
int verbose_level)
295 int f_v = (verbose_level >= 1);
298 cout <<
"surface_with_action::apply_null_polarity" << endl;
319 cout <<
"surface_with_action::apply_null_polarity done" << endl;
325 long int a,
int *Polarity36,
int verbose_level)
327 int f_v = (verbose_level >= 1);
330 cout <<
"surface_with_action::apply_polarity" << endl;
348 cout <<
"surface_with_action::apply_polarity done" << endl;
354 long int *skew_hexagon,
355 std::vector<std::vector<long int> > &Double_sixes,
358 int f_v = (verbose_level >= 1);
362 cout <<
"surface_with_action::complete_skew_hexagon" << endl;
365 long int three_skew_lines[3];
366 long int *regulus_a123;
367 long int *opp_regulus_a123;
368 long int *regulus_b123;
369 long int *opp_regulus_b123;
375 int forbidden_points[6];
376 int Forbidden_points[6 * 4];
389 long int double_six[12];
393 a1 = skew_hexagon[0];
394 a2 = skew_hexagon[1];
395 a3 = skew_hexagon[2];
396 b1 = skew_hexagon[3];
397 b2 = skew_hexagon[4];
398 b3 = skew_hexagon[5];
400 three_skew_lines[0] = skew_hexagon[0];
401 three_skew_lines[1] = skew_hexagon[1];
402 three_skew_lines[2] = skew_hexagon[2];
404 forbidden_points[0] = 0;
405 forbidden_points[1] = 1;
406 forbidden_points[2] = 2;
407 forbidden_points[3] = 3;
419 for (j = 0; j < 6; j++) {
423 cout <<
"surface_with_action::complete_skew_hexagon Forbidden_points:" << endl;
428 three_skew_lines, regulus_a123, opp_regulus_a123,
regulus_size,
437 a = opp_regulus_a123[i];
439 cout <<
"surface_with_action::complete_skew_hexagon "
440 "i=" << i <<
" / " <<
regulus_size <<
" a=" << a << endl;
443 for (j = 0; j < 6; j++) {
454 cout <<
"surface_with_action::complete_skew_hexagon "
456 <<
" a=" << a <<
" contains point " << j <<
", skipping" << endl;
462 cout <<
"surface_with_action::complete_skew_hexagon "
463 "i=" << i <<
" / " <<
regulus_size <<
" b6=" << b6 << endl;
483 cout <<
"surface_with_action::complete_skew_hexagon "
484 "after F->find_secant_points_wrt_x0x3mx1x2" << endl;
485 cout <<
"surface_with_action::complete_skew_hexagon b6_image=" << b6_image << endl;
492 cout <<
"surface_with_action::complete_skew_hexagon basis=" << endl;
496 three_skew_lines[0] = b1;
497 three_skew_lines[1] = b2;
498 three_skew_lines[2] = b3;
503 three_skew_lines, regulus_b123, opp_regulus_b123, sz,
509 cout <<
"surface_with_action::complete_skew_hexagon basis=" << endl;
519 cout <<
"surface_with_action::complete_skew_hexagon "
520 "before F->find_secant_points_wrt_x0x3mx1x2" << endl;
524 cout <<
"surface_with_action::complete_skew_hexagon "
525 "after F->find_secant_points_wrt_x0x3mx1x2" << endl;
526 cout <<
"surface_with_action::complete_skew_hexagon Pts4=" << endl;
531 cout <<
"surface_with_action::complete_skew_hexagon nb_pts != 2" << endl;
534 for (j = 0; j < nb_pts; j++) {
535 v[0] = Pts4[j * 2 + 0];
536 v[1] = Pts4[j * 2 + 1];
540 cout <<
"surface_with_action::complete_skew_hexagon after multiplying" << endl;
541 cout <<
"surface_with_action::complete_skew_hexagon w=" << endl;
548 cout <<
"the first secant point does not lie on the quadric" << endl;
553 cout <<
"the second secant point does not lie on the quadric" << endl;
557 for (j = 0; j < nb_pts; j++) {
560 cout <<
"the " << j <<
"-th secant points is: ";
565 if (z[0] == 0 && z[2] == 0) {
573 cout <<
"idx[" << j <<
"] = " << idx[j] << endl;
576 a4 = opp_regulus_b123[idx[0]];
578 cout <<
"a4 = " << a4 <<
" = " << endl;
581 a5 = opp_regulus_b123[idx[1]];
583 cout <<
"a5 = " << a5 <<
" = " << endl;
609 cout <<
"The double six for i=" << i <<
" is:" << endl;
613 std::vector<long int> Double_six;
615 Double_six.push_back(a1);
616 Double_six.push_back(a2);
617 Double_six.push_back(a3);
618 Double_six.push_back(a4);
619 Double_six.push_back(a5);
620 Double_six.push_back(a6);
621 Double_six.push_back(b1);
622 Double_six.push_back(b2);
623 Double_six.push_back(b3);
624 Double_six.push_back(b4);
625 Double_six.push_back(b5);
626 Double_six.push_back(b6);
628 Double_sixes.push_back(Double_six);
632 cout <<
"surface_with_action::complete_skew_hexagon done" << endl;
637 std::string &label_for_printing,
638 long int *skew_hexagon,
640 std::vector<std::vector<long int> > &Double_sixes,
643 int f_v = (verbose_level >= 1);
647 cout <<
"surface_with_action::complete_skew_hexagon_with_polarity " << label_for_printing << endl;
650 long int three_skew_lines[3];
651 long int *regulus_a123;
652 long int *opp_regulus_a123;
653 long int *regulus_b123;
654 long int *opp_regulus_b123;
660 int forbidden_points[6];
661 int Forbidden_points[6 * 4];
672 long int double_six[12];
676 a1 = skew_hexagon[0];
677 a2 = skew_hexagon[1];
678 a3 = skew_hexagon[2];
679 b1 = skew_hexagon[3];
680 b2 = skew_hexagon[4];
681 b3 = skew_hexagon[5];
683 cout <<
"a1 = " << a1 <<
" = " << endl;
687 cout <<
"a2 = " << a2 <<
" = " << endl;
691 cout <<
"a3 = " << a3 <<
" = " << endl;
695 cout <<
"b1 = " << b1 <<
" = " << endl;
699 cout <<
"b2 = " << b2 <<
" = " << endl;
703 cout <<
"b3 = " << b3 <<
" = " << endl;
707 three_skew_lines[0] = skew_hexagon[0];
708 three_skew_lines[1] = skew_hexagon[1];
709 three_skew_lines[2] = skew_hexagon[2];
711 forbidden_points[0] = 0;
712 forbidden_points[1] = 1;
713 forbidden_points[2] = 2;
714 forbidden_points[3] = 3;
726 for (j = 0; j < 6; j++) {
730 cout <<
"surface_with_action::complete_skew_hexagon_with_polarity Forbidden_points:" << endl;
735 three_skew_lines, regulus_a123, opp_regulus_a123,
regulus_size,
744 a = opp_regulus_a123[i];
746 cout <<
"surface_with_action::complete_skew_hexagon_with_polarity i=" << i <<
" / " <<
regulus_size <<
" a=" << a << endl;
749 for (j = 0; j < 6; j++) {
760 cout <<
"surface_with_action::complete_skew_hexagon_with_polarity "
761 "i=" << i <<
" / " <<
regulus_size <<
" a=" << a <<
" contains point " << j <<
", skipping" << endl;
767 cout <<
"surface_with_action::complete_skew_hexagon_with_polarity "
768 "i=" << i <<
" / " <<
regulus_size <<
" b6=" << b6 << endl;
771 cout <<
"b6 = " << b6 <<
" = " << endl;
792 cout <<
"surface_with_action::complete_skew_hexagon_with_polarity "
793 "after F->find_secant_points_wrt_x0x3mx1x2" << endl;
794 cout <<
"surface_with_action::complete_skew_hexagon_with_polarity b6_image=" << b6_image << endl;
801 cout <<
"surface_with_action::complete_skew_hexagon_with_polarity basis=" << endl;
805 three_skew_lines[0] = b1;
806 three_skew_lines[1] = b2;
807 three_skew_lines[2] = b3;
812 three_skew_lines, regulus_b123, opp_regulus_b123, sz,
818 cout <<
"surface_with_action::complete_skew_hexagon_with_polarity basis=" << endl;
828 cout <<
"surface_with_action::complete_skew_hexagon_with_polarity "
829 "before F->find_secant_points_wrt_x0x3mx1x2" << endl;
833 cout <<
"surface_with_action::complete_skew_hexagon_with_polarity "
834 "after F->find_secant_points_wrt_x0x3mx1x2" << endl;
835 cout <<
"surface_with_action::complete_skew_hexagon_with_polarity Pts4=" << endl;
840 cout <<
"surface_with_action::complete_skew_hexagon_with_polarity nb_pts != 2. i=" << i << endl;
843 for (j = 0; j < nb_pts; j++) {
844 v[0] = Pts4[j * 2 + 0];
845 v[1] = Pts4[j * 2 + 1];
849 cout <<
"surface_with_action::complete_skew_hexagon_with_polarity after multiplying" << endl;
850 cout <<
"surface_with_action::complete_skew_hexagon_with_polarity w=" << endl;
857 cout <<
"the first secant point does not lie on the quadric" << endl;
862 cout <<
"the second secant point does not lie on the quadric" << endl;
866 for (j = 0; j < nb_pts; j++) {
869 cout <<
"the " << j <<
"-th secant points is: ";
874 if (z[0] == 0 && z[2] == 0) {
882 cout <<
"idx[" << j <<
"] = " << idx[j] << endl;
885 a4 = opp_regulus_b123[idx[0]];
887 cout <<
"a4 = " << a4 <<
" = " << endl;
890 a5 = opp_regulus_b123[idx[1]];
892 cout <<
"a5 = " << a5 <<
" = " << endl;
898 cout <<
"b4 = " << b4 <<
" = " << endl;
903 cout <<
"b5 = " << b5 <<
" = " << endl;
908 cout <<
"a6 = " << a6 <<
" = " << endl;
926 cout <<
"The candidate for " << label_for_printing <<
" and i=" << i <<
" is: ";
937 cout <<
"passes the double six test" << endl;
944 cout <<
"A double-six for " << label_for_printing <<
" and i=" << i <<
" is: ";
946 cout <<
" nb_E = " << nb_E;
951 std::vector<long int> Double_six;
953 Double_six.push_back(a1);
954 Double_six.push_back(a2);
955 Double_six.push_back(a3);
956 Double_six.push_back(a4);
957 Double_six.push_back(a5);
958 Double_six.push_back(a6);
959 Double_six.push_back(b1);
960 Double_six.push_back(b2);
961 Double_six.push_back(b3);
962 Double_six.push_back(b4);
963 Double_six.push_back(b5);
964 Double_six.push_back(b6);
966 Double_sixes.push_back(Double_six);
970 cout <<
"surface_with_action::complete_skew_hexagon_with_polarity done" << endl;
975 long int *three_skew_lines,
long int *®ulus,
long int *&opp_regulus,
int ®ulus_size,
990 int f_v = (verbose_level >= 1);
994 cout <<
"surface_with_action::create_regulus_and_opposite_regulus" << endl;
999 cout <<
"surface_with_action::create_regulus_and_opposite_regulus "
1000 "Recoordinatize == NULL" << endl;
1025 three_skew_lines[0], three_skew_lines[1], three_skew_lines[2],
1034 opp_regulus, sz,
TRUE , verbose_level);
1037 cout <<
"sz != regulus_size" << endl;
1054 cout <<
"surface_with_action::create_regulus_and_opposite_regulus done" << endl;
1060 long int *five_lines,
long int transversal_line,
long int *double_six,
1063 int f_v = (verbose_level >= 1);
1064 int f_vv = (verbose_level >= 2);
1067 long int four_lines[5];
1069 long int rk, i, ai4image, P4, Q, a, b, h, k, line3, line4;
1070 long int b1, b2, b3, b4, b5;
1071 int size_complement;
1080 int L0[] = {0,0,1,0, 0,0,0,1};
1081 int L1[] = {1,0,0,0, 0,1,0,0};
1082 int L2[] = {1,0,1,0, 0,1,0,1};
1091 int pt_coord[4 * 4];
1097 cout <<
"surface_with_action::create_double_six_from_five_lines_with_a_common_transversal, "
1098 "verbose_level = " << verbose_level << endl;
1104 cout <<
"surface_with_action::create_double_six_from_five_lines_with_a_common_transversal "
1105 "Recoordinatize == NULL" << endl;
1111 cout <<
"surface_with_action::create_double_six_from_five_lines_with_a_common_transversal" << endl;
1112 cout <<
"The five lines are ";
1120 double_six[11] = transversal_line;
1122 for (i = 0; i < 5; i++) {
1124 cout <<
"intersecting line " << i <<
" = " << five_lines[i]
1125 <<
" with line " << transversal_line << endl;
1128 five_lines[i], transversal_line, 0 );
1131 cout <<
"The five intersection points are:";
1144 for (rk = 0; rk < nb_subsets; rk++) {
1149 for (i = 0; i < 5; i++) {
1150 four_lines[i] = five_lines[subset[i]];
1156 cout <<
"subset " << rk <<
" / " << nb_subsets <<
" : ";
1158 cout <<
" P4=" << P4 << endl;
1169 four_lines[0], four_lines[1], four_lines[2],
1182 cout <<
"ai4image = " << ai4image <<
" Q=" << Q << endl;
1188 cout <<
"error: The point Q does not "
1189 "lie on the quadric" << endl;
1196 cout <<
"before F->adjust_basis" << endl;
1197 cout <<
"L=" << endl;
1199 cout <<
"Q4=" << endl;
1206 cout <<
"after F->adjust_basis" << endl;
1207 cout <<
"L=" << endl;
1209 cout <<
"Q4=" << endl;
1216 for (a = 0; a < F->
q; a++) {
1228 cout <<
"a=" << a <<
" v=";
1232 cout <<
" b=" << b << endl;
1240 cout <<
"surface_with_action::create_double_six_from_five_lines_with_a_common_transversal "
1241 "we could not find a second intersection point"
1252 cout <<
"The line lies in the quadric, "
1253 "this five plus one is not good." << endl;
1262 if (w[0] == 0 && w[1] == 0) {
1267 else if (w[2] == 0 && w[3] == 0) {
1272 else if (w[0] == w[2] && w[1] == w[3]) {
1296 cout <<
"projective_space::create_double_six_from_five_lines_with_a_common_transversal "
1297 "intersection is not a line" << endl;
1306 double_six[10 - rk] = line4;
1314 b5 = double_six[10];
1327 for (h = 0; h < 2; h++) {
1329 for (a = 0; a < F->
q + 1; a++) {
1342 cout <<
"surface_with_action::create_double_six_from_five_lines_with_a_common_transversal "
1343 "nb_pts == 5" << endl;
1348 if (nb_pts != (h + 1) * 2) {
1349 cout <<
"surface_with_action::create_double_six_from_five_lines_with_a_common_transversal nb_pts != "
1350 "(h + 1) * 2" << endl;
1356 cout <<
"four points have been computed:" << endl;
1360 for (h = 0; h < 2; h++) {
1361 for (k = 0; k < 2; k++) {
1366 cout <<
"h=" << h <<
" k=" << k
1367 <<
" define a singular line" << endl;
1376 cout <<
"The line intersects ell_0, so we are good" << endl;
1388 cout <<
"surface_with_action::create_double_six_from_five_lines_with_a_common_transversal "
1389 "could not determine a_6" << endl;
1393 cout <<
"surface_with_action::create_double_six_from_five_lines_with_a_common_transversal "
1394 "line3 == -1" << endl;
1399 double_six[5] = line4;
1402 cout <<
"surface_with_action::create_double_six_from_five_lines_with_a_common_transversal done" << endl;
1442 int f_v = (verbose_level >= 1);
1445 cout <<
"surface_with_action::create_surface" << endl;
1450 cout <<
"surface_with_action::create_surface before SC->init" << endl;
1452 SC->
init(Surface_Descr,
this , verbose_level);
1454 cout <<
"surface_with_action::create_surface after SC->init" << endl;
1459 cout <<
"surface_with_action::create_surface "
1460 "before SC->apply_transformations" << endl;
1467 cout <<
"surface_with_action::create_surface "
1468 "after SC->apply_transformations" << endl;
1474 cout <<
"surface_with_action::create_surface done" << endl;
1480 int f_has_control_six_arcs,
1484 int f_v = (verbose_level >= 1);
1487 cout <<
"surface_with_action::create_surface_and_do_report" << endl;
1498 cout <<
"surface_with_action::create_surface_and_do_report before create_surface" << endl;
1505 cout <<
"surface_with_action::create_surface_and_do_report after create_surface" << endl;
1518 if (SC->
F->
e == 1) {
1523 cout <<
"surface_with_action::create_surface_and_do_report "
1524 "We have created the following surface:" << endl;
1525 cout <<
"$$" << endl;
1528 cout <<
"$$" << endl;
1530 cout <<
"$$" << endl;
1533 cout <<
"$$" << endl;
1538 cout <<
"surface_with_action::create_surface_and_do_report before test_group" << endl;
1542 cout <<
"surface_with_action::create_surface_and_do_report after test_group" << endl;
1546 cout <<
"surface_with_action::create_surface_and_do_report "
1547 "We do not have information about "
1548 "the automorphism group" << endl;
1552 cout <<
"surface_with_action::create_surface_and_do_report We have created "
1553 "the surface " << SC->
label_txt <<
":" << endl;
1554 cout <<
"$$" << endl;
1557 cout <<
"$$" << endl;
1560 cout <<
"surface_with_action::create_surface_and_do_report "
1561 "The stabilizer is generated by:" << endl;
1565 cout <<
"surface_with_action::create_surface_and_do_report "
1566 "The stabilizer is generated by the following nice generators:" << endl;
1585 f_has_control_six_arcs, Control_six_arcs,
1590 cout <<
"We don't have the group of the surface" << endl;
1600 cout <<
"surface_with_action::create_surface_and_do_report done" << endl;
1610 int f_v = (verbose_level >= 1);
1613 cout <<
"surface_with_action::test_group" << endl;
1627 for (i = 0; i < SC->
Sg->
gens->
len; i++) {
1628 cout <<
"surface_with_action::test_group "
1629 "Testing generator " << i <<
" / "
1645 cout <<
"surface_with_action::test_group error, "
1646 "the transformation does not preserve "
1647 "the equation of the surface" << endl;
1648 cout <<
"SC->SO->eqn:" << endl;
1651 cout <<
"coeffs_out" << endl;
1657 cout <<
"surface_with_action::test_group "
1658 "Generator " << i <<
" / " << SC->
Sg->
gens->
len
1659 <<
" is good" << endl;
1665 cout <<
"surface_with_action::test_group the group is good. Done" << endl;
1671 int f_has_control_six_arcs,
1675 int f_v = (verbose_level >= 1);
1678 cout <<
"surface_with_action::report_with_group" << endl;
1682 cout <<
"surface_with_action::report_with_group creating "
1683 "surface_object_with_action object" << endl;
1700 cout <<
"surface_with_action::report_with_group "
1701 "The surface has been created." << endl;
1707 cout <<
"surface_with_action::report_with_group "
1708 "Classifying non-conical six-arcs." << endl;
1722 if (f_has_control_six_arcs) {
1723 Six_arc_descr->
Control = Control_six_arcs;
1734 cout <<
"surface_with_action::report_with_group "
1735 "before Six_arcs->init:" << endl;
1749 cout <<
"surface_with_action::report_with_group "
1750 "before SoA->investigate_surface_and_write_report:" << endl;
1762 cout <<
"use -draw_options to specify the drawing option for the report" << endl;
1772 cout <<
"surface_with_action::report_with_group done" << endl;
1781 int f_v = (verbose_level >= 1);
1784 cout <<
"surface_with_action::create_surface_object_with_action" << endl;
1789 cout <<
"surface_with_action::create_surface_object_with_action "
1790 "The automorphism group of the surface is missing" << endl;
1797 cout <<
"surface_with_action::create_surface_object_with_action "
1798 "before SoA->init_with_group" << endl;
1809 cout <<
"surface_with_action::create_surface_object_with_action "
1810 "after SoA->init_with_group" << endl;
1814 cout <<
"surface_with_action::create_surface_object_with_action "
1815 "The surface has been created." << endl;
1819 cout <<
"surface_with_action::create_surface_object_with_action done" << endl;
1828 int f_v = (verbose_level >= 1);
1831 cout <<
"surface_with_action::export_points" << endl;
1834 string fname_points;
1837 fname_points.assign(
"surface_");
1839 fname_points.append(
"_points.txt");
1841 cout <<
"group_theoretic_activity::do_create_surface "
1842 "Written file " << fname_points <<
" of size "
1846 cout <<
"surface_with_action::export_points done" << endl;
1855 int f_v = (verbose_level >= 1);
1858 cout <<
"surface_with_action::do_report" << endl;
1866 string fname_report;
1870 fname_report.append(
".tex");
1874 fname_report.assign(
"surface_");
1876 fname_report.append(
"_report.tex");
1880 ofstream ost(fname_report);
1886 snprintf(title, 1000,
"%s over GF(%d)", SC->
label_tex.c_str(), F->
q);
1909 if (SC->
SO->
SOP == NULL) {
1910 cout <<
"surface_with_action::create_surface_and_do_report SC->SO->SOP == NULL" << endl;
1915 string summary_file_name;
1922 summary_file_name.assign(SC->
label_txt);
1924 summary_file_name.append(
"_summary.csv");
1928 sprintf(str,
"-Q%d", F->
q);
1929 col_postfix.assign(str);
1932 cout <<
"surface_with_action::create_surface_and_do_report "
1933 "before SC->SO->SOP->create_summary_file" << endl;
1941 SC->
label_txt, col_postfix, verbose_level);
1944 cout <<
"surface_with_action::create_surface_and_do_report "
1945 "after SC->SO->SOP->create_summary_file" << endl;
1951 cout <<
"surface_with_action::create_surface_and_do_report "
1952 "before SC->SO->SOP->print_everything" << endl;
1956 cout <<
"surface_with_action::create_surface_and_do_report "
1957 "after SC->SO->SOP->print_everything" << endl;
1961 cout <<
"surface_with_action::create_surface_and_do_report "
1962 "before SC->SO->SOP->report_properties_simple" << endl;
1966 cout <<
"surface_with_action::create_surface_and_do_report "
1967 "after SC->SO->SOP->report_properties_simple" << endl;
1976 cout <<
"Written file " << fname_report <<
" of size "
1982 cout <<
"surface_with_action::do_report done" << endl;
1989 std::string &sweep_fname,
1992 int f_v = (verbose_level >= 1);
1993 int alpha, beta, gamma, delta;
1996 cout <<
"surface_with_action::sweep_4_15_lines" << endl;
2003 vector<vector<long int>> Properties;
2004 vector<vector<long int>> Points;
2006 string sweep_fname_csv;
2008 sweep_fname_csv.assign(sweep_fname);
2011 sprintf(str,
"_q%d", F->
q);
2013 sweep_fname_csv.append(str);
2014 sweep_fname_csv.append(
"_sweep4_15_data.csv");
2018 ofstream ost_csv(sweep_fname_csv);
2020 ost_csv <<
"orbit,equation,pts,parameters,nb_lines,nb_sing_pts,go" << endl;
2022 for (alpha = 0; alpha < F->
q; alpha++) {
2034 cout <<
"alpha=" << alpha << endl;
2036 for (beta = 0; beta < F->
q; beta++) {
2043 if (beta == F->
negate(1)) {
2048 cout <<
"alpha=" << alpha <<
" beta=" << beta << endl;
2050 for (gamma = 0; gamma < F->
q; gamma++) {
2057 if (gamma == F->
negate(1)) {
2062 cout <<
"alpha=" << alpha <<
" beta=" << beta <<
" gamma=" << gamma << endl;
2065 for (delta = 0; delta < F->
q; delta++) {
2073 if (delta == F->
negate(1)) {
2077 if (delta == beta) {
2082 cout <<
"alpha=" << alpha <<
" beta=" << beta
2083 <<
" delta=" << delta <<
" gamma=" << gamma << endl;
2104 sprintf(str,
"alpha=%d,beta=%d,gamma=%d,delta=%d", alpha, beta, gamma, delta);
2122 cout <<
"surface_with_action::sweep_4_15_lines before SC->init" << endl;
2124 SC->
init(Surface_Descr,
this , verbose_level);
2126 cout <<
"surface_with_action::sweep_4_15_lines after SC->init" << endl;
2133 cout <<
"surface_with_action::sweep_4_15_lines "
2134 "before SC->apply_transformations" << endl;
2141 cout <<
"surface_with_action::sweep_4_15_lines "
2142 "after SC->apply_transformations" << endl;
2146 cout <<
"the number of lines is " << SC->
SO->
nb_lines << endl;
2152 cout <<
"the number of lines is " << SC->
SO->
nb_lines <<
" skipping" << endl;
2156 cout <<
"the number of singular points is " << SC->
SO->
SOP->
nb_singular_pts <<
" skipping" << endl;
2162 vector<long int> Props;
2163 vector<long int> Pts;
2165 Props.push_back(alpha);
2166 Props.push_back(beta);
2167 Props.push_back(gamma);
2168 Props.push_back(delta);
2178 Properties.push_back(Props);
2181 for (i = 0; i < SC->
SO->
nb_pts; i++) {
2182 Pts.push_back(SC->
SO->
Pts[i]);
2184 Points.push_back(Pts);
2187 ost_csv << Properties.size() - 1;
2240 ost_csv <<
"END" << endl;
2243 cout <<
"Written file " << sweep_fname_csv <<
" of size " << Fio.
file_size(sweep_fname_csv) << endl;
2249 N = Properties.size();
2252 for (i = 0; i < N; i++) {
2253 for (j = 0; j < 13; j++) {
2254 T[i * 13 + j] = Properties[i][j];
2260 sprintf(str,
"_q%d", F->
q);
2263 fname.append(
"_sweep.csv");
2266 cout <<
"Written file " << fname <<
" of size " << Fio.
file_size(fname) << endl;
2271 fname.append(
"_points.txt");
2275 ofstream ost(fname);
2277 for (i = 0; i < N; i++) {
2278 long int sz = Points[i].size();
2280 for (j = 0; j < sz; j++) {
2281 ost <<
" " << Points[i][j];
2285 ost <<
"-1" << endl;
2288 cout <<
"Written file " << fname <<
" of size " << Fio.
file_size(fname) << endl;
2296 cout <<
"surface_with_action::sweep_4_15_lines done" << endl;
2303 std::string &sweep_fname,
2306 int f_v = (verbose_level >= 1);
2310 cout <<
"surface_with_action::sweep_F_beta_9_lines" << endl;
2317 vector<vector<long int>> Properties;
2318 vector<vector<long int>> Points;
2320 string sweep_fname_csv;
2322 sweep_fname_csv.assign(sweep_fname);
2325 sprintf(str,
"_q%d", F->
q);
2327 sweep_fname_csv.append(str);
2328 sweep_fname_csv.append(
"_sweep_F_beta_9_lines_data.csv");
2332 ofstream ost_csv(sweep_fname_csv);
2334 ost_csv <<
"orbit,equation,pts,parameters,nb_lines,nb_sing_pts,go" << endl;
2336 for (b = 0; b < F->
q; b++) {
2338 int t1, t2, t3, t4, three;
2340 three = F->
add3(1, 1, 1);
2347 cout <<
"b=" << b <<
",t1=" << t1 <<
",t2=" << t2 <<
",t3=" << t3 <<
",t4=" << t4 << endl;
2349 if (t1 == 0 || t2 == 0 || t3 == 0 || t4 == 0) {
2353 cout <<
"b=" << b << endl;
2368 sprintf(str,
"a=%d,b=%d,c=%d,d=%d", a, b, c, d);
2378 cout <<
"surface_with_action::sweep_F_beta_9_lines before SC->init" << endl;
2380 SC->
init(Surface_Descr,
this , 0 );
2382 cout <<
"surface_with_action::sweep_F_beta_9_lines after SC->init" << endl;
2388 cout <<
"the number of lines is " << SC->
SO->
nb_lines << endl;
2394 cout <<
"the number of lines is " << SC->
SO->
nb_lines <<
" skipping" << endl;
2398 cout <<
"the number of singular points is " << SC->
SO->
SOP->
nb_singular_pts <<
" skipping" << endl;
2404 vector<long int> Props;
2405 vector<long int> Pts;
2420 Properties.push_back(Props);
2423 for (i = 0; i < SC->
SO->
nb_pts; i++) {
2424 Pts.push_back(SC->
SO->
Pts[i]);
2426 Points.push_back(Pts);
2429 ost_csv << Properties.size() - 1;
2477 ost_csv <<
"END" << endl;
2480 cout <<
"Written file " << sweep_fname_csv <<
" of size " << Fio.
file_size(sweep_fname_csv) << endl;
2483 int i, j, N, nb_cols = 13;
2485 N = Properties.size();
2487 cout <<
"The number of valid parameter sets found is " << N << endl;
2491 for (i = 0; i < N; i++) {
2492 for (j = 0; j < nb_cols; j++) {
2493 T[i * nb_cols + j] = Properties[i][j];
2498 sprintf(str,
"_q%d", F->
q);
2501 fname.append(
"_sweep_F_beta_9_lines.csv");
2504 cout <<
"Written file " << fname <<
" of size " << Fio.
file_size(fname) << endl;
2509 fname.append(
"_points.txt");
2513 ofstream ost(fname);
2515 for (i = 0; i < N; i++) {
2516 long int sz = Points[i].size();
2518 for (j = 0; j < sz; j++) {
2519 ost <<
" " << Points[i][j];
2523 ost <<
"-1" << endl;
2526 cout <<
"Written file " << fname <<
" of size " << Fio.
file_size(fname) << endl;
2534 cout <<
"surface_with_action::sweep_F_beta_9_lines done" << endl;
2542 std::string &sweep_fname,
2545 int f_v = (verbose_level >= 1);
2546 int a, b, c, d, f, g;
2549 cout <<
"surface_with_action::sweep_6_9_lines" << endl;
2556 vector<vector<long int>> Properties;
2557 vector<vector<long int>> Points;
2559 string sweep_fname_csv;
2561 sweep_fname_csv.assign(sweep_fname);
2564 sprintf(str,
"_q%d", F->
q);
2566 sweep_fname_csv.append(str);
2567 sweep_fname_csv.append(
"_sweep_6_9_lines_data.csv");
2571 ofstream ost_csv(sweep_fname_csv);
2573 ost_csv <<
"orbit,equation,pts,parameters,nb_lines,nb_sing_pts,go" << endl;
2575 for (a = 0; a < F->
q; a++) {
2585 cout <<
"a=" << a << endl;
2587 for (c = 0; c < F->
q; c++) {
2597 cout <<
"a=" << a <<
" c=" << c << endl;
2599 for (d = 0; d < F->
q; d++) {
2609 cout <<
"a=" << a <<
" c=" << c <<
" d=" << d << endl;
2612 for (f = 0; f < F->
q; f++) {
2618 cout <<
"a=" << a <<
" c=" << c <<
" d=" << d <<
" f=" << f << endl;
2620 for (g = 0; g < F->
q; g++) {
2633 bottom = F->
add(d, 1);
2640 cout <<
"a=" << a <<
" c=" << c <<
" d=" << d <<
" f=" << f <<
" g=" << g << endl;
2643 for (b = 0; b < F->
q; b++) {
2675 bottom = F->
mult(c, f);
2684 cout <<
"a=" << a <<
" c=" << c <<
" d=" << d <<
" f=" << f <<
" g=" << g <<
" b=" << b << endl;
2693 sprintf(str,
"a=%d,b=%d,c=%d,d=%d,f=%d,g=%d", a, b, c, d, f, g);
2703 cout <<
"surface_with_action::sweep_6_9_lines before SC->init" << endl;
2705 SC->
init(Surface_Descr,
this , verbose_level);
2707 cout <<
"surface_with_action::sweep_6_9_lines after SC->init" << endl;
2713 cout <<
"the number of lines is " << SC->
SO->
nb_lines << endl;
2719 cout <<
"the number of lines is " << SC->
SO->
nb_lines <<
" skipping" << endl;
2723 cout <<
"the number of singular points is " << SC->
SO->
SOP->
nb_singular_pts <<
" skipping" << endl;
2729 vector<long int> Props;
2730 vector<long int> Pts;
2747 Properties.push_back(Props);
2750 for (i = 0; i < SC->
SO->
nb_pts; i++) {
2751 Pts.push_back(SC->
SO->
Pts[i]);
2753 Points.push_back(Pts);
2756 ost_csv << Properties.size() - 1;
2813 ost_csv <<
"END" << endl;
2816 cout <<
"Written file " << sweep_fname_csv <<
" of size " << Fio.
file_size(sweep_fname_csv) << endl;
2819 int i, j, N, nb_cols = 15;
2821 N = Properties.size();
2823 cout <<
"The number of valid parameter sets found is " << N << endl;
2827 for (i = 0; i < N; i++) {
2828 for (j = 0; j < nb_cols; j++) {
2829 T[i * nb_cols + j] = Properties[i][j];
2834 sprintf(str,
"_q%d", F->
q);
2837 fname.append(
"_sweep_6_9_lines.csv");
2840 cout <<
"Written file " << fname <<
" of size " << Fio.
file_size(fname) << endl;
2845 fname.append(
"_points.txt");
2849 ofstream ost(fname);
2851 for (i = 0; i < N; i++) {
2852 long int sz = Points[i].size();
2854 for (j = 0; j < sz; j++) {
2855 ost <<
" " << Points[i][j];
2859 ost <<
"-1" << endl;
2862 cout <<
"Written file " << fname <<
" of size " << Fio.
file_size(fname) << endl;
2870 cout <<
"surface_with_action::sweep_6_9_lines done" << endl;
2877 std::string &sweep_fname,
2880 int f_v = (verbose_level >= 1);
2885 cout <<
"surface_with_action::sweep_4_27" << endl;
2894 vector<vector<long int>> Properties;
2895 vector<vector<long int>> Points;
2898 for (a = 0; a < F->
q; a++) {
2909 for (b = 0; b < F->
q; b++) {
2923 for (c = 0; c < F->
q; c++) {
2936 for (d = 0; d < F->
q; d++) {
2954 cout <<
"a=" << a <<
" b=" << b <<
" c=" << c <<
" d=" << d << endl;
2956 int delta, epsilon, gamma;
2961 F->
mult4(m, a, b, d),
2962 F->
mult4(m, a, c, d),
2989 sprintf(str,
"a=%d,b=%d,c=%d,d=%d", a, b, c, d);
3007 cout <<
"surface_with_action::sweep_4_27 before SC->init" << endl;
3009 SC->
init(Surface_Descr,
this , verbose_level);
3011 cout <<
"surface_with_action::sweep_4_27 after SC->init" << endl;
3028 vector<long int> Props;
3029 vector<long int> Pts;
3035 Props.push_back(delta);
3036 Props.push_back(epsilon);
3037 Props.push_back(gamma);
3047 Properties.push_back(Props);
3050 for (i = 0; i < SC->
SO->
nb_pts; i++) {
3051 Pts.push_back(SC->
SO->
Pts[i]);
3053 Points.push_back(Pts);
3069 N = Properties.size();
3072 for (i = 0; i < N; i++) {
3073 for (j = 0; j < 16; j++) {
3074 T[i * 16 + j] = Properties[i][j];
3081 sprintf(str,
"_q%d", F->
q);
3084 fname.append(
"_sweep_4_27.csv");
3087 cout <<
"Written file " << fname <<
" of size " << Fio.
file_size(fname) << endl;
3092 fname.append(
"_points.txt");
3096 ofstream ost(fname);
3098 for (i = 0; i < N; i++) {
3099 long int sz = Points[i].size();
3101 for (j = 0; j < sz; j++) {
3102 ost <<
" " << Points[i][j];
3106 ost <<
"-1" << endl;
3109 cout <<
"Written file " << fname <<
" of size " << Fio.
file_size(fname) << endl;
3117 cout <<
"surface_with_action::sweep_4_27 done" << endl;
3123 int f_v = (verbose_level >= 1);
3126 cout <<
"surface_with_action::table_of_cubic_surfaces" << endl;
3140 int nb_cubic_surfaces;
3155 nb_E =
NEW_int(nb_cubic_surfaces);
3157 Table =
NEW_lint(nb_cubic_surfaces * nb_cols);
3162 for (h = 0; h < nb_cubic_surfaces; h++) {
3165 cout <<
"surface_with_action::table_of_cubic_surfaces " << h <<
" / " << nb_cubic_surfaces << endl;
3169 Surface_create_description.
f_q =
TRUE;
3170 Surface_create_description.
q = q;
3172 Surface_create_description.
iso = h;
3176 cout <<
"surface_with_action::table_of_cubic_surfaces before create_surface" << endl;
3179 &Surface_create_description,
3183 cout <<
"surface_with_action::table_of_cubic_surfaces after create_surface" << endl;
3191 if (!SC[h]->f_has_group) {
3192 cout <<
"!SC[h]->f_has_group" << endl;
3201 cout <<
"surface_with_action::table_of_cubic_surfaces before SoA->init_with_surface_object" << endl;
3209 cout <<
"surface_with_action::table_of_cubic_surfaces after SoA->init_with_surface_object" << endl;
3214 Table[h * nb_cols + 0] = h;
3217 cout <<
"collineation stabilizer order" << endl;
3219 if (SC[h]->f_has_group) {
3223 Table[h * nb_cols + 1] = 0;
3226 cout <<
"projectivity stabilizer order" << endl;
3235 Table[h * nb_cols + 3] = SC[h]->
SO->
nb_pts;
3236 Table[h * nb_cols + 4] = SC[h]->
SO->
nb_lines;
3244 cout <<
"SoA->Orbits_on_Eckardt_points->nb_orbits" << endl;
3264 strong_generators *projectivity_group_gens;
3265 sylow_structure *Syl;
3267 action *A_on_points;
3268 action *A_on_Eckardt_points;
3269 action *A_on_Double_points;
3270 action *A_on_the_lines;
3271 action *A_single_sixes;
3272 action *A_on_tritangent_planes;
3273 action *A_on_Hesse_planes;
3274 action *A_on_trihedral_pairs;
3275 action *A_on_pts_not_on_lines;
3278 schreier *Orbits_on_points;
3279 schreier *Orbits_on_Eckardt_points;
3280 schreier *Orbits_on_Double_points;
3281 schreier *Orbits_on_lines;
3282 schreier *Orbits_on_single_sixes;
3283 schreier *Orbits_on_tritangent_planes;
3284 schreier *Orbits_on_Hesse_planes;
3285 schreier *Orbits_on_trihedral_pairs;
3286 schreier *Orbits_on_points_not_on_lines;
3290 set_of_sets *pts_on_lines;
3295 set_of_sets *lines_on_point;
3296 tally *Type_pts_on_lines;
3297 tally *Type_lines_on_point;
3299 long int *Eckardt_points;
3300 int *Eckardt_points_index;
3301 int *Eckardt_points_schlaefli_labels;
3302 int *Eckardt_point_bitvector_in_Schlaefli_labeling;
3304 int nb_Eckardt_points;
3306 int *Eckardt_points_line_type;
3307 int *Eckardt_points_plane_type;
3309 long int *Hesse_planes;
3310 int nb_Hesse_planes;
3311 int *Eckardt_point_Hesse_plane_incidence;
3316 long int *Axes_Eckardt_points;
3317 long int *Axes_line_rank;
3320 long int *Double_points;
3321 int *Double_points_index;
3322 int nb_Double_points;
3324 long int *Single_points;
3325 int *Single_points_index;
3326 int nb_Single_points;
3328 long int *Pts_not_on_lines;
3329 int nb_pts_not_on_lines;
3332 int *plane_type_by_points;
3333 int *plane_type_by_lines;
3334 tally *C_plane_type_by_points;
3336 long int *Tritangent_plane_rk;
3338 int nb_tritangent_planes;
3340 long int *Lines_in_tritangent_planes;
3342 long int *Trihedral_pairs_as_tritangent_planes;
3344 long int *All_Planes;
3345 int *Dual_point_ranks;
3347 int *Adj_line_intersection_graph;
3348 set_of_sets *Line_neighbors;
3349 int *Line_intersection_pt;
3350 int *Line_intersection_pt_idx;
3355 long int *singular_pts;
3356 int nb_singular_pts;
3357 int nb_non_singular_pts;
3359 long int *tangent_plane_rank_global;
3360 long int *tangent_plane_rank_dual;
3365 cout <<
"surface_with_action::table_of_cubic_surfaces before table_of_cubic_surfaces_export_csv" << endl;
3370 q, nb_cubic_surfaces,
3375 cout <<
"surface_with_action::table_of_cubic_surfaces after table_of_cubic_surfaces_export_csv" << endl;
3380 cout <<
"surface_with_action::table_of_cubic_surfaces before table_of_cubic_surfaces_export_sql" << endl;
3385 q, nb_cubic_surfaces,
3390 cout <<
"surface_with_action::table_of_cubic_surfaces after table_of_cubic_surfaces_export_sql" << endl;
3394 cout <<
"surface_with_action::table_of_cubic_surfaces done" << endl;
3402 int q,
int nb_cubic_surfaces,
3406 int f_v = (verbose_level >= 1);
3409 cout <<
"surface_with_action::table_of_cubic_surfaces_export_csv" << endl;
3415 sprintf(str,
"_q%d", q);
3418 fname.assign(
"table_of_cubic_surfaces");
3420 fname.append(
"_info.csv");
3428 f <<
"Row,OCN,CollStabOrder,ProjStabOrder,nbPts,nbLines,"
3429 "nbE,nbDouble,nbSingle,nbPtsNotOn,nbHesse,nbAxes,"
3430 "nbOrbE,nbOrbDouble,nbOrbPtsNotOn,nbOrbLines,nbOrbSingleSix,nbOrbTriPlanes,nbOrbHesse,nbOrbTrihedralPairs,"
3431 "Eqn20,Equation,Lines";
3436 for (i = 0; i < nb_cubic_surfaces; i++) {
3438 for (j = 0; j < nb_cols; j++) {
3439 f <<
"," << Table[i * nb_cols + j];
3453 str.assign(sstr.str());
3473 cout <<
"Written file " << fname <<
" of size " << Fio.
file_size(fname) << endl;
3476 cout <<
"surface_with_action::table_of_cubic_surfaces_export_csv done" << endl;
3482 int q,
int nb_cubic_surfaces,
3486 int f_v = (verbose_level >= 1);
3489 cout <<
"surface_with_action::table_of_cubic_surfaces_export_sql" << endl;
3495 sprintf(str,
"_q%d", q);
3498 fname.assign(
"table_of_cubic_surfaces");
3500 fname.append(
"_data.sql");
3508 for (i = 0; i < nb_cubic_surfaces; i++) {
3510 f <<
"UPDATE `cubicvt`.`surface` SET ";
3511 f <<
"`CollStabOrder` = '" << Table[i * nb_cols + 1] <<
"', ";
3512 f <<
"`ProjStabOrder` = '" << Table[i * nb_cols + 2] <<
"', ";
3513 f <<
"`nbPts` = '" << Table[i * nb_cols + 3] <<
"', ";
3514 f <<
"`nbLines` = '" << Table[i * nb_cols + 4] <<
"', ";
3515 f <<
"`nbE` = '" << Table[i * nb_cols + 5] <<
"', ";
3516 f <<
"`nbDouble` = '" << Table[i * nb_cols + 6] <<
"', ";
3517 f <<
"`nbSingle` = '" << Table[i * nb_cols + 7] <<
"', ";
3518 f <<
"`nbPtsNotOn` = '" << Table[i * nb_cols + 8] <<
"',";
3519 f <<
"`nbHesse` = '" << Table[i * nb_cols + 9] <<
"', ";
3520 f <<
"`nbAxes` = '" << Table[i * nb_cols + 10] <<
"', ";
3521 f <<
"`nbOrbE` = '" << Table[i * nb_cols + 11] <<
"', ";
3522 f <<
"`nbOrbDouble` = '" << Table[i * nb_cols + 12] <<
"', ";
3523 f <<
"`nbOrbPtsNotOn` = '" << Table[i * nb_cols + 13] <<
"', ";
3524 f <<
"`nbOrbLines` = '" << Table[i * nb_cols + 14] <<
"', ";
3525 f <<
"`nbOrbSingleSix` = '" << Table[i * nb_cols + 15] <<
"', ";
3526 f <<
"`nbOrbTriPlanes` = '" << Table[i * nb_cols + 16] <<
"', ";
3527 f <<
"`nbOrbHesse` = '" << Table[i * nb_cols + 17] <<
"', ";
3528 f <<
"`nbOrbTrihedralPairs` = '" << Table[i * nb_cols + 18] <<
"', ";
3532 f <<
"`Eqn20` = '" << str <<
"', ";
3538 str.assign(sstr.str());
3543 f <<
"`Equation` = '$" << str <<
"$', ";
3548 f <<
"`Lines` = '" << str <<
"' ";
3550 f <<
"WHERE `Q` = '" << q <<
"' AND `OCN` = '" << Table[i * nb_cols + 0] <<
"';" << endl;
3556 cout <<
"Written file " << fname <<
" of size " << Fio.
file_size(fname) << endl;
3559 cout <<
"surface_with_action::table_of_cubic_surfaces_export_sql done" << endl;
cubic surfaces in PG(3,q) with 27 lines
void latex_double_six(std::ostream &ost, long int *double_six)
long int rank_line(int *v)
int build_surface_from_double_six_and_count_Eckardt_points(long int *double_six, int verbose_level)
int test_double_six_property(long int *S12, int verbose_level)
Given a set of lines in S12[12], test the double six property.
geometry::projective_space * P
void print_equation_maple(std::stringstream &ost, int *coeffs)
int create_double_six_from_five_lines_with_a_common_transversal(long int *five_pts, long int *double_six, int verbose_level)
Given a five-plus-one five_pts[5], complete the double-six.
ring_theory::homogeneous_polynomial_domain * Poly3_4
field_theory::finite_field * F
void print_basics(std::ostream &ost)
void print_equation_tex(std::ostream &ost, int *coeffs)
geometry::klein_correspondence * Klein
void unrank_point(int *v, long int rk)
void report_properties_simple(std::ostream &ost, int verbose_level)
void create_summary_file(std::string &fname, std::string &surface_label, std::string &col_postfix, int verbose_level)
void print_everything(std::ostream &ost, int verbose_level)
surface_object_properties * SOP
a collection of combinatorial functions
void unrank_k_subset(int rk, int *set, int n, int k)
long int int_n_choose_k(int n, int k)
void set_complement(int *subset, int subset_size, int *complement, int &size_complement, int universal_set_size)
void create_string_with_quotes(std::string &str, int *v, int len)
void create_string_with_quotes(std::string &str, long int *v, int len)
a collection of functions related to sorted vectors
int lint_vec_compare(long int *p, long int *q, int len)
int add4(int i1, int i2, int i3, int i4)
void PG_element_normalize_from_front(int *v, int stride, int len)
int f_print_as_exponentials
void PG_element_normalize(int *v, int stride, int len)
void PG_element_unrank_modified(int *v, int stride, int len, int a)
int mult3(int a1, int a2, int a3)
int test_if_vectors_are_projectively_equal(int *v1, int *v2, int len)
int add3(int i1, int i2, int i3)
linear_algebra::linear_algebra * Linear_algebra
int mult4(int a1, int a2, int a3, int a4)
int add6(int i1, int i2, int i3, int i4, int i5, int i6)
void line_regulus_in_PG_3_q(long int *®ulus, int ®ulus_size, int f_opposite, int verbose_level)
void unrank_lint_here(int *Mtx, long int rk, int verbose_level)
void print_single_generator_matrix_tex(std::ostream &ost, long int a)
void Pluecker_to_line(int *v6, int *basis_line, int verbose_level)
void line_to_Pluecker(long int line_rk, int *v6, int verbose_level)
long int rank_line(int *basis)
int test_if_lines_are_skew(int line1, int line2, int verbose_level)
int point_of_intersection_of_a_line_and_a_line_in_three_space(long int line1, long int line2, int verbose_level)
long int rank_point(int *v)
void unrank_point(int *v, long int rk)
provides access to pre-computed combinatorial data in encoded form
int cubic_surface_nb_reps(int q)
void mult_matrix_matrix(int *A, int *B, int *C, int m, int n, int o, int verbose_level)
void find_secant_points_wrt_x0x3mx1x2(int *Basis_line, int *Pts4, int &nb_pts, int verbose_level)
int evaluate_quadratic_form_x0x3mx1x2(int *x)
int rank_of_rectangular_matrix(int *A, int m, int n, int verbose_level)
void adjust_basis(int *V, int *U, int n, int k, int d, int verbose_level)
void add_vector(int *A, int *B, int *C, int m)
int intersect_subspaces(int n, int k1, int *A, int k2, int *B, int &k3, int *intersection, int verbose_level)
a collection of functions related to file io
void lint_matrix_write_csv(std::string &fname, long int *M, int m, int n)
long int file_size(std::string &fname)
void write_set_to_file(std::string &fname, long int *the_set, int set_size, int verbose_level)
interface to create latex output files
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 foot(std::ostream &ost)
data_structures::lint_vec * Lint_vec
data_structures::int_vec * Int_vec
a permutation group in a fixed action.
action * induced_action_on_wedge_product(int verbose_level)
void element_invert(void *a, void *av, int verbose_level)
int is_semilinear_matrix_group()
action * induced_action_on_grassmannian(int k, int verbose_level)
long int element_image_of(long int a, void *elt, int verbose_level)
void print_tex(std::ostream &ost)
a matrix group over a finite field in projective, vector space or affine action
void substitute_surface_equation(int *Elt, int *coeff_in, int *coeff_out, algebraic_geometry::surface_domain *Surf, int verbose_level)
void print_generators_tex()
long int group_order_as_lint()
data_structures_groups::vector_ge * gens
induced action on the set of homogeneous polynomials over a finite field
void init(actions::action *A, ring_theory::homogeneous_polynomial_domain *HPD, int verbose_level)
to control the behavior of the poset classification algorithm
classification of double triplets in PG(3,q)
void init(cubic_surfaces_in_general::surface_with_action *Surf_A, int verbose_level)
void report_summary(std::ostream &ost)
void print_trihedral_pairs(std::ostream &ost, int f_with_stabilizers)
an instance of a cubic surface together with its stabilizer
groups::schreier * Orbits_on_lines
void init_with_group(surface_with_action *Surf_A, long int *Lines, int nb_lines, int *eqn, groups::strong_generators *Aut_gens, int f_find_double_six_and_rearrange_lines, int f_has_nice_gens, data_structures_groups::vector_ge *nice_gens, int verbose_level)
groups::schreier * Orbits_on_single_sixes
groups::schreier * Orbits_on_trihedral_pairs
groups::schreier * Orbits_on_Eckardt_points
void init_with_surface_object(surface_with_action *Surf_A, algebraic_geometry::surface_object *SO, groups::strong_generators *Aut_gens, int f_has_nice_gens, data_structures_groups::vector_ge *nice_gens, int verbose_level)
void investigate_surface_and_write_report(graphics::layered_graph_draw_options *Opt, actions::action *A, surface_create *SC, cubic_surfaces_and_arcs::six_arcs_not_on_a_conic *Six_arcs, int verbose_level)
groups::strong_generators * projectivity_group_gens
groups::schreier * Orbits_on_tritangent_planes
groups::schreier * Orbits_on_Hesse_planes
groups::schreier * Orbits_on_points_not_on_lines
groups::schreier * Orbits_on_Double_points
to describe a cubic surface from the command line
std::vector< int > f_inverse_transform
std::string label_for_summary
std::string equation_name_of_formula
std::string equation_parameters
std::vector< std::string > transform_coeffs
classification of six-arcs not on a conic in PG(2,q)
void init(apps_geometry::arc_generator_description *Descr, projective_geometry::projective_space_with_action *PA, int f_test_nb_Eckardt_points, int nb_E, int verbose_level)
apps_geometry::arc_generator * Gen
void sweep_4_27(surface_create_description *Surface_Descr, std::string &sweep_fname, int verbose_level)
long int apply_null_polarity(long int a, int verbose_level)
void report_basics(std::ostream &ost)
projective_geometry::projective_space_with_action * PA
void create_surface_and_do_report(surface_create_description *Surface_Descr, int f_has_control_six_arcs, poset_classification::poset_classification_control *Control_six_arcs, int verbose_level)
void create_regulus_and_opposite_regulus(long int *three_skew_lines, long int *®ulus, long int *&opp_regulus, int ®ulus_sz, int verbose_level)
void sweep_6_9_lines(surface_create_description *Surface_Descr, std::string &sweep_fname, int verbose_level)
void sweep_F_beta_9_lines(surface_create_description *Surface_Descr, std::string &sweep_fname, int verbose_level)
void complete_skew_hexagon_with_polarity(std::string &label_for_printing, long int *skew_hexagon, int *Polarity36, std::vector< std::vector< long int > > &Double_sixes, int verbose_level)
void report_double_triplets_detailed(std::ostream &ost)
void table_of_cubic_surfaces_export_csv(long int *Table, int nb_cols, int q, int nb_cubic_surfaces, surface_create **SC, int verbose_level)
long int apply_polarity(long int a, int *Polarity36, int verbose_level)
void report_double_triplets(std::ostream &ost)
void export_points(surface_create *SC, int verbose_level)
cubic_surfaces_and_arcs::classify_trihedral_pairs * Classify_trihedral_pairs
actions::action * A_on_planes
void init(algebraic_geometry::surface_domain *Surf, projective_geometry::projective_space_with_action *PA, int f_recoordinatize, int verbose_level)
int create_double_six_from_five_lines_with_a_common_transversal(long int *five_lines, long int transversal_line, long int *double_six, int verbose_level)
void table_of_cubic_surfaces(int verbose_level)
void do_report(surface_create *SC, int verbose_level)
spreads::recoordinatize * Recoordinatize
void create_surface(surface_create_description *Surface_Descr, surface_create *&SC, int verbose_level)
void create_surface_object_with_action(surface_create *SC, surface_object_with_action *&SoA, int verbose_level)
void test_group(surface_create *SC, int verbose_level)
int create_double_six_safely(long int *five_lines, long int transversal_line, long int *double_six, int verbose_level)
algebraic_geometry::surface_domain * Surf
void sweep_4_15_lines(surface_create_description *Surface_Descr, std::string &sweep_fname, int verbose_level)
induced_actions::action_on_homogeneous_polynomials * AonHPD_3_4
actions::action * A_wedge
void complete_skew_hexagon(long int *skew_hexagon, std::vector< std::vector< long int > > &Double_sixes, int verbose_level)
void table_of_cubic_surfaces_export_sql(long int *Table, int nb_cols, int q, int nb_cubic_surfaces, surface_create **SC, int verbose_level)
void report_with_group(surface_create *SC, int f_has_control_six_arcs, poset_classification::poset_classification_control *Control_six_arcs, int verbose_level)
to create a cubic surface from a description using class surface_create_description
void apply_transformations(std::vector< std::string > &transform_coeffs, std::vector< int > &f_inverse_transform, int verbose_level)
surface_create_description * Descr
data_structures_groups::vector_ge * nice_gens
surface_with_action * Surf_A
algebraic_geometry::surface_domain * Surf
field_theory::finite_field * F
algebraic_geometry::surface_object * SO
groups::strong_generators * Sg
void init(surface_create_description *Descr, surface_with_action *Surf_A, int verbose_level)
description of a classification problem of arcs in a geometry
poset_classification::poset_classification_control * Control
projective_geometry::projective_space_with_action * PA
projective space PG(n,q) with automorphism group PGGL(n+1,q)
geometry::projective_space * P
actions::action * A_on_lines
projective_space_with_action * PA2
field_theory::finite_field * F
three skew lines in PG(3,q), used to classify spreads
void do_recoordinatize(long int i1, long int i2, long int i3, int verbose_level)
geometry::grassmann * Grass
void init(int n, int k, field_theory::finite_field *F, geometry::grassmann *Grass, actions::action *A, actions::action *A2, int f_projective, int f_semilinear, int(*check_function_incremental)(int len, long int *S, void *data, int verbose_level), void *check_function_incremental_data, int verbose_level)
#define Lint_vec_copy(A, B, C)
#define Int_vec_zero(A, B)
#define Lint_vec_print(A, B, C)
#define Int_matrix_print(A, B, C)
#define Int_vec_copy(A, B, C)
#define Int_vec_print(A, B, C)
orbiter_kernel_system::orbiter_session * Orbiter
global Orbiter session
the orbiter library for the classification of combinatorial objects
groups::matrix_group * matrix_grp