18namespace layer5_applications {
19namespace applications_in_algebraic_geometry {
20namespace cubic_surfaces_in_general {
77 int f_v = (verbose_level >= 1);
82 cout <<
"surface_create::init_with_data" << endl;
102 cout <<
"surface_create::init_with_data "
103 "Descr->q != F->q" << endl;
108 cout <<
"surface_create::init_with_data "
109 "before create_surface_from_description" << endl;
113 cout <<
"surface_create::init_with_data "
114 "after create_surface_from_description" << endl;
118 cout <<
"surface_create::init_with_data "
128 int f_v = (verbose_level >= 1);
133 cout <<
"surface_create::init" << endl;
138 cout <<
"surface_create::init !Descr->f_q" << endl;
143 cout <<
"surface_create::init q = " <<
q << endl;
150 cout <<
"surface_create::init q = " <<
q << endl;
166 cout <<
"surface_create::init before create_surface_from_description" << endl;
170 cout <<
"surface_create::init after create_surface_from_description" << endl;
175 cout <<
"surface_create::init done" << endl;
181 int f_v = (verbose_level >= 1);
185 cout <<
"surface_create::create_surface_from_description" << endl;
325 cout <<
"surface_create::init2 we do not "
326 "recognize the type of surface" << endl;
340 cout <<
"surface_create::init2 coeffs = ";
346 cout <<
"surface_create::init2 Lines = ";
354 cout <<
"surface_create::init2 the stabilizer is:" << endl;
358 cout <<
"surface_create::init2 "
359 "The surface has no group computed" << endl;
365 cout <<
"surface_with_action::create_surface_and_do_report before Surf_A->test_group" << endl;
369 cout <<
"surface_with_action::create_surface_and_do_report after Surf_A->test_group" << endl;
374 cout <<
"surface_create::init2 done" << endl;
379 int nb_gens, std::string &gens_text,
int verbose_level)
381 int f_v = (verbose_level >= 1);
386 cout <<
"surface_create::override_group "
387 "group_order=" << group_order_text
388 <<
" nb_gens=" << nb_gens << endl;
393 cout <<
"surface_create::override_group before Sg->stabilizer_of_cubic_surface_from_catalogue" << endl;
398 cout <<
"surface_create::override_group sz != Surf_A->A->make_element_size * nb_gens" << endl;
415 cout <<
"surface_create::override_group done" << endl;
421 int f_v = (verbose_level >= 1);
425 cout <<
"surface_create::create_Eckardt_surface "
432 cout <<
"surface_create::create_Eckardt_surface before Surf->create_Eckardt_surface" << endl;
440 cout <<
"surface_create::create_Eckardt_surface after Surf->create_Eckardt_surface" << endl;
451 cout <<
"surface_create::create_Eckardt_surface before Sg->stabilizer_of_Eckardt_surface" << endl;
462 cout <<
"surface_create::create_Eckardt_surface after Sg->stabilizer_of_Eckardt_surface" << endl;
472 sprintf(str_q,
"%d",
F->
q);
473 sprintf(str_a,
"%d", a);
474 sprintf(str_b,
"%d", b);
477 prefix.assign(
"family_Eckardt_q");
491 label_tex.assign(
"family\\_Eckardt\\_q");
499 cout <<
"surface_create::create_Eckardt_surface done" << endl;
506 int f_v = (verbose_level >= 1);
509 cout <<
"surface_create::create_surface_G13" << endl;
513 cout <<
"surface_create::create_surface_G13 before Surf->create_surface_G13 a=" <<
Descr->
family_G13_a << endl;
517 cout <<
"surface_create::create_surface_G13 before Surf->create_surface_G13" << endl;
523 cout <<
"surface_create::create_surface_G13 after Surf->create_surface_G13" << endl;
529 cout <<
"surface_create::create_surface_G13 before Sg->stabilizer_of_G13_surface" << endl;
539 cout <<
"surface_create::create_surface_G13 after Sg->stabilizer_of_G13_surface" << endl;
548 sprintf(str_q,
"%d",
F->
q);
549 sprintf(str_a,
"%d", a);
553 prefix.assign(
"family_G13_q");
569 cout <<
"surface_create::create_surface_G13 done" << endl;
575 int f_v = (verbose_level >= 1);
578 cout <<
"surface_create::create_surface_F13" << endl;
581 cout <<
"surface_create::create_surface_F13 before Surf->create_surface_F13 a=" << a << endl;
585 cout <<
"surface_create::create_surface_F13 before Surf->create_surface_F13" << endl;
591 cout <<
"surface_create::create_surface_F13 after Surf->create_surface_F13" << endl;
597 cout <<
"surface_create::create_surface_F13 before Sg->stabilizer_of_F13_surface" << endl;
607 cout <<
"surface_create::create_surface_F13 after Sg->stabilizer_of_F13_surface" << endl;
616 sprintf(str_q,
"%d",
F->
q);
617 sprintf(str_a,
"%d", a);
621 prefix.assign(
"family_F13_q");
637 cout <<
"surface_create::create_surface_F13 done" << endl;
644 int f_v = (verbose_level >= 1);
647 cout <<
"surface_create::create_surface_bes" << endl;
651 cout <<
"surface_create::create_surface_bes before Surf->create_surface_bes "
656 cout <<
"surface_create::create_surface_bes before Surf->create_surface_bes" << endl;
662 cout <<
"surface_create::create_surface_bes after Surf->create_surface_bes" << endl;
670 cout <<
"surface_create::create_surface_bes before Sg->stabilizer_of_bes_surface" << endl;
678 cout <<
"surface_create::create_surface_bes after Sg->stabilizer_of_bes_surface" << endl;
688 sprintf(str_q,
"%d",
F->
q);
689 sprintf(str,
"_a%d_c%d", a, c);
690 sprintf(str2,
"\\_a%d\\_c%d", a, c);
694 prefix.assign(
"family_bes_q");
707 cout <<
"surface_create::create_surface_bes done" << endl;
714 int f_v = (verbose_level >= 1);
717 cout <<
"surface_create::create_surface_general_abcd" << endl;
720 cout <<
"surface_create::create_surface_general_abcd before Surf->create_surface_general_abcd a="
721 << a <<
" b=" << b <<
" c="
727 cout <<
"surface_create::create_surface_general_abcd before Surf->create_surface_general_abcd" << endl;
733 cout <<
"surface_create::create_surface_general_abcd after Surf->create_surface_general_abcd" << endl;
742 cout <<
"surface_create::create_surface_general_abcd before Sg->stabilizer_of_surface" << endl;
750 cout <<
"surface_create::create_surface_general_abcd after Sg->stabilizer_of_surface" << endl;
761 sprintf(str_q,
"%d",
F->
q);
762 sprintf(str,
"_a%d_b%d_c%d_d%d", a, b, c, d);
763 sprintf(str2,
"\\_a%d\\_b%d\\_c%d\\_d%d", a, b, c, d);
767 prefix.assign(
"family_general_abcd_q");
771 label_txt.assign(
"family_general_abcd_q");
775 label_tex.assign(
"family\\_general\\_abcd\\_q");
780 cout <<
"surface_create::create_surface_general_abcd done" << endl;
785 std::vector<std::string> &select_double_six_string,
788 int f_v = (verbose_level >= 1);
791 cout <<
"surface_create::create_surface_by_coefficients" << endl;
795 cout <<
"surface_create::create_surface_by_coefficients surface is given "
796 "by the coefficients" << endl;
801 int nb_coeffs, nb_terms;
804 Int_vec_scan(coefficients_text, surface_coeffs, nb_coeffs);
805 if (
ODD(nb_coeffs)) {
806 cout <<
"surface_create::create_surface_by_coefficients number of surface "
807 "coefficients must be even" << endl;
811 nb_terms = nb_coeffs >> 1;
812 for (i = 0; i < nb_terms; i++) {
813 a = surface_coeffs[2 * i + 0];
814 b = surface_coeffs[2 * i + 1];
822 cout <<
"surface_create::create_surface_by_coefficients "
823 "coefficient out of range" << endl;
827 if (b < 0 || b >= 20) {
828 cout <<
"surface_create::create_surface_by_coefficients "
829 "variable index out of range" << endl;
843 cout <<
"surface_create::create_surface_by_coefficients "
844 "before SO->init_equation" << endl;
848 cout <<
"surface_create::create_surface_by_coefficients "
849 "after SO->init_equation" << endl;
854 projective_space_with_action *PA;
856 PA =
NEW_OBJECT(projective_space_with_action);
859 cout <<
"group_theoretic_activity::do_cubic_surface_properties before PA->init" << endl;
866 cout <<
"group_theoretic_activity::do_cubic_surface_properties after PA->init" << endl;
871 cout <<
"surface_create::create_surface_by_coefficients "
872 "before SC->compute_group" << endl;
876 cout <<
"surface_create::create_surface_by_coefficients "
877 "after SC->compute_group" << endl;
886 int nb_select_double_six;
888 nb_select_double_six = select_double_six_string.size();
890 if (nb_select_double_six) {
893 for (i = 0; i < nb_select_double_six; i++) {
894 int *select_double_six;
896 long int New_lines[27];
899 cout <<
"surface_create::create_surface_by_coefficients selecting "
900 "double six " << i <<
" / " << nb_select_double_six << endl;
902 int_vec_scan(select_double_six_string[i], select_double_six, sz);
904 cout <<
"surface_create::create_surface_by_coefficients "
905 "f_select_double_six double six must consist of 12 numbers" << endl;
910 cout <<
"surface_create::create_surface_by_coefficients select_double_six = ";
911 int_vec_print(cout, select_double_six, 12);
917 cout <<
"surface_create::create_surface_by_coefficients before "
918 "Surf->rearrange_lines_according_to_a_given_double_six" << endl;
921 SO->
Lines, select_double_six, New_lines, 0 );
923 lint_vec_copy(New_lines,
SO->
Lines, 27);
931 cout <<
"surface_create::create_surface_by_coefficients before "
932 "compute_properties" << endl;
936 cout <<
"surface_create::create_surface_by_coefficients after "
937 "compute_properties" << endl;
946 select_double_six_string,
954 sprintf(str_q,
"%d",
F->
q);
957 prefix.assign(
"by_coefficients_q");
963 label_tex.assign(
"by\\_coefficients\\_q");
967 cout <<
"surface_create::create_surface_by_coefficients done" << endl;
973 std::vector<std::string> &select_double_six_string,
976 int f_v = (verbose_level >= 1);
979 cout <<
"surface_create::create_surface_by_coefficient_vector" << endl;
983 cout <<
"surface_create::create_surface_by_coefficient_vector surface is given "
984 "by the coefficients" << endl;
992 cout <<
"surface_create::create_surface_by_coefficient_vector "
993 "before SO->init_equation" << endl;
997 cout <<
"surface_create::create_surface_by_coefficient_vector "
998 "after SO->init_equation" << endl;
1003 projective_space_with_action *PA;
1005 PA =
NEW_OBJECT(projective_space_with_action);
1008 cout <<
"group_theoretic_activity::create_surface_by_coefficient_vector before PA->init" << endl;
1015 cout <<
"group_theoretic_activity::create_surface_by_coefficient_vector after PA->init" << endl;
1020 cout <<
"surface_create::create_surface_by_coefficient_vector "
1021 "before SC->compute_group" << endl;
1025 cout <<
"surface_create::create_surface_by_coefficient_vector "
1026 "after SC->compute_group" << endl;
1035 int nb_select_double_six;
1037 nb_select_double_six = select_double_six_string.size();
1039 if (nb_select_double_six) {
1042 for (i = 0; i < nb_select_double_six; i++) {
1043 int *select_double_six;
1045 long int New_lines[27];
1048 cout <<
"surface_create::create_surface_by_coefficient_vector selecting "
1049 "double six " << i <<
" / " << nb_select_double_six << endl;
1057 cout <<
"surface_create::create_surface_by_coefficient_vector "
1058 "f_select_double_six double six must consist of 12 numbers" << endl;
1063 cout <<
"surface_create::create_surface_by_coefficient_vector select_double_six = ";
1070 cout <<
"surface_create::create_surface_by_coefficient_vector before "
1071 "Surf->rearrange_lines_according_to_a_given_double_six" << endl;
1074 SO->
Lines, select_double_six, New_lines, 0 );
1084 cout <<
"surface_create::create_surface_by_coefficient_vector before "
1085 "compute_properties" << endl;
1089 cout <<
"surface_create::create_surface_by_coefficient_vector after "
1090 "compute_properties" << endl;
1100 cout <<
"surface_create::create_surface_by_coefficient_vector done" << endl;
1106 std::vector<std::string> &select_double_six_string,
1109 int f_v = (verbose_level >= 1);
1112 cout <<
"surface_create::create_surface_by_rank" << endl;
1116 cout <<
"surface_create::create_surface_by_rank surface is given "
1117 "by the rank" << endl;
1127 cout <<
"surface_create::create_surface_by_rank surface is given "
1128 "by the rank, rank = " << rank << endl;
1140 select_double_six_string,
1147 sprintf(str_q,
"%d",
F->
q);
1150 prefix.assign(
"by_rank_q");
1160 cout <<
"surface_create::create_surface_by_rank done" << endl;
1168 std::vector<std::string> &select_double_six_string,
1171 int f_v = (verbose_level >= 1);
1174 cout <<
"surface_create::create_surface_from_catalogue" << endl;
1177 cout <<
"surface_create::create_surface_from_catalogue surface from catalogue" << endl;
1180 int nb_select_double_six;
1182 nb_select_double_six = select_double_six_string.size();
1184 long int Lines27[27];
1191 cout <<
"surface_create::create_surface_from_catalogue iso >= nb_iso, "
1192 "this cubic surface does not exist" << endl;
1200 cout <<
"surface_create::create_surface_from_catalogue before Surf->rearrange_lines_according_to_double_six" << endl;
1205 cout <<
"surface_create::create_surface_from_catalogue after Surf->rearrange_lines_according_to_double_six" << endl;
1208 if (nb_select_double_six) {
1211 for (i = 0; i < nb_select_double_six; i++) {
1212 int *select_double_six;
1214 long int New_lines[27];
1217 cout <<
"surface_create::create_surface_from_catalogue selecting double six " << i <<
" / " << nb_select_double_six << endl;
1219 Int_vec_scan(select_double_six_string[i], select_double_six, sz);
1221 cout <<
"surface_create::create_surface_from_catalogue f_select_double_six double six must consist of 12 numbers" << endl;
1226 cout <<
"surface_create::create_surface_from_catalogue select_double_six = ";
1233 cout <<
"surface_create::create_surface_from_catalogue before Surf->rearrange_lines_according_to_a_given_double_six" << endl;
1236 Lines27, select_double_six, New_lines, 0 );
1246 cout <<
"surface_create::create_surface_from_catalogue before Surf->build_cubic_surface_from_lines" << endl;
1250 cout <<
"surface_create::create_surface_from_catalogue after Surf->build_cubic_surface_from_lines" << endl;
1256 cout <<
"surface_create::create_surface_from_catalogue before SO->init_with_27_lines" << endl;
1263 cout <<
"surface_create::create_surface_from_catalogue after SO->init_with_27_lines" << endl;
1270 cout <<
"surface_create::create_surface_from_catalogue before Sg->stabilizer_of_cubic_surface_from_catalogue" << endl;
1278 cout <<
"surface_create::create_surface_from_catalogue after Sg->stabilizer_of_cubic_surface_from_catalogue" << endl;
1284 sprintf(str_q,
"%d",
F->
q);
1285 sprintf(str_a,
"%d", iso);
1289 prefix.assign(
"catalogue_q");
1304 cout <<
"surface_create::create_surface_from_catalogue done" << endl;
1309 std::string &arc_lifting_text,
1312 int f_v = (verbose_level >= 1);
1315 cout <<
"surface_create::create_surface_by_arc_lifting" << endl;
1323 if (arc_size != 6) {
1324 cout <<
"surface_create::create_surface_by_arc_lifting arc_size != 6" << endl;
1329 cout <<
"surface_create::init2 arc: ";
1343 cout <<
"surface_create::create_surface_by_arc_lifting before Surf_A->"
1344 "Classify_trihedral_pairs->classify" << endl;
1348 cout <<
"surface_create::create_surface_by_arc_lifting after Surf_A->"
1349 "Classify_trihedral_pairs->classify" << endl;
1356 long int Lines27[27];
1362 cout <<
"surface_create::create_surface_by_arc_lifting before "
1363 "AL->create_surface" << endl;
1367 cout <<
"surface_create::create_surface_by_arc_lifting after "
1368 "AL->create_surface" << endl;
1381 cout <<
"surface_create::create_surface_by_arc_lifting before SO->init_with_27_lines" << endl;
1388 cout <<
"surface_create::create_surface_by_arc_lifting after SO->init_with_27_lines" << endl;
1399 sprintf(str_q,
"%d",
F->
q);
1400 sprintf(str_a,
"%ld_%ld_%ld_%ld_%ld_%ld", arc[0], arc[1], arc[2], arc[3], arc[4], arc[5]);
1403 prefix.assign(
"arc_lifting_trihedral_q");
1408 label_txt.assign(
"arc_lifting_trihedral_q");
1413 sprintf(str_a,
"\\_%ld\\_%ld\\_%ld\\_%ld\\_%ld\\_%ld", arc[0], arc[1], arc[2], arc[3], arc[4], arc[5]);
1415 label_tex.assign(
"arc\\_lifting\\_trihedral\\_q");
1430 cout <<
"surface_create::create_surface_by_arc_lifting done" << endl;
1435 std::string &arc_lifting_text,
1436 std::string &arc_lifting_two_lines_text,
1439 int f_v = (verbose_level >= 1);
1442 cout <<
"surface_create::create_surface_by_arc_lifting_with_two_lines" << endl;
1445 cout <<
"surface_create::create_surface_by_arc_lifting_with_two_lines by "
1446 "arc lifting with two lines" << endl;
1450 int arc_size, lines_size;
1451 long int line1, line2;
1456 if (arc_size != 6) {
1457 cout <<
"surface_create::create_surface_by_arc_lifting_with_two_lines arc_size != 6" << endl;
1461 Lint_vec_scan(arc_lifting_two_lines_text, lines, lines_size);
1463 if (lines_size != 2) {
1464 cout <<
"surface_create::init lines_size != 2" << endl;
1473 cout <<
"surface_create::create_surface_by_arc_lifting_with_two_lines arc: ";
1476 cout <<
"surface_create::create_surface_by_arc_lifting_with_two_lines lines: ";
1483 long int Lines27[27];
1489 cout <<
"surface_create::create_surface_by_arc_lifting_with_two_lines before "
1490 "AL->create_surface" << endl;
1494 cout <<
"surface_create::create_surface_by_arc_lifting_with_two_lines after "
1495 "AL->create_surface" << endl;
1505 cout <<
"surface_create::create_surface_by_arc_lifting_with_two_lines before SO->init_with_27_lines" << endl;
1514 cout <<
"surface_create::create_surface_by_arc_lifting_with_two_lines after SO->init_with_27_lines" << endl;
1521 char str_lines[1000];
1524 sprintf(str_q,
"%d",
F->
q);
1525 sprintf(str_lines,
"%ld_%ld", line1, line2);
1526 sprintf(str_a,
"%ld_%ld_%ld_%ld_%ld_%ld", arc[0], arc[1], arc[2], arc[3], arc[4], arc[5]);
1529 prefix.assign(
"arc_lifting_with_two_lines_q");
1532 prefix.append(str_lines);
1536 label_txt.assign(
"arc_lifting_with_two_lines_q");
1543 sprintf(str_lines,
"\\_%ld\\_%ld", line1, line2);
1544 sprintf(str_a,
"\\_%ld\\_%ld\\_%ld\\_%ld\\_%ld\\_%ld", arc[0], arc[1], arc[2], arc[3], arc[4], arc[5]);
1546 label_tex.assign(
"arc\\_lifting\\_with\\_two\\_lines\\_q");
1566 cout <<
"surface_create::create_surface_by_arc_lifting_with_two_lines done" << endl;
1571 int k,
int l,
int m,
int n,
1574 int f_v = (verbose_level >= 1);
1577 cout <<
"surface_create::create_surface_Cayley_form" << endl;
1580 cout <<
"surface_create::create_surface_Cayley_form by "
1581 "arc lifting with two lines" << endl;
1586 cout <<
"surface_create::create_surface_by_arc_lifting_with_two_lines arc: ";
1589 cout <<
"surface_create::create_surface_by_arc_lifting_with_two_lines lines: ";
1605 cout <<
"surface_create::create_surface_by_arc_lifting_with_two_lines before SO->init_equation_points_and_lines_only" << endl;
1611 cout <<
"surface_create::create_surface_by_arc_lifting_with_two_lines after SO->init_equation_points_and_lines_only" << endl;
1618 char str_parameters[1000];
1620 sprintf(str_q,
"%d",
F->
q);
1621 sprintf(str_parameters,
"klmn_%d_%d_%d_%d", k, l, m, n);
1624 prefix.assign(
"Cayley_q");
1627 prefix.append(str_parameters);
1634 sprintf(str_parameters,
"klmn\\_%d\\_%d\\_%d\\_%d", k, l, m, n);
1647 cout <<
"surface_create::create_surface_by_arc_lifting_with_two_lines done" << endl;
1654 std::string &name_of_formula,
1655 std::string &name_of_formula_tex,
1656 std::string &managed_variables,
1657 std::string &equation_text,
1658 std::string &equation_parameters,
1659 std::string &equation_parameters_tex,
1660 std::vector<std::string> &select_double_six_string,
1663 int f_v = (verbose_level >= 1);
1666 cout <<
"surface_create::create_surface_by_equation" << endl;
1682 cout <<
"surface_create::create_surface_by_equation Formula " << name_of_formula <<
" is " << equation_text << endl;
1683 cout <<
"surface_create::create_surface_by_equation Managed variables: " << managed_variables << endl;
1686 const char *p = managed_variables.c_str();
1697 cout <<
"surface_create::create_surface_by_equation adding managed variable " << var << endl;
1710 cout <<
"surface_create::create_surface_by_equation Managed variables: " << endl;
1711 for (i = 0; i < nb_vars; i++) {
1718 cout <<
"surface_create::create_surface_by_equation Starting to parse " << name_of_formula << endl;
1720 Parser.
parse(tree, equation_text, 0);
1722 cout <<
"Parsing " << name_of_formula <<
" finished" << endl;
1727 cout <<
"surface_create::create_surface_by_equation Syntax tree:" << endl;
1732 fname.assign(name_of_formula);
1733 fname.append(
".gv");
1736 std::ofstream ost(fname);
1742 cout <<
"surface_create::create_surface_by_equation before is_homogeneous" << endl;
1746 cout <<
"surface_create::create_surface_by_equation after is_homogeneous" << endl;
1749 cout <<
"surface_create::create_surface_by_equation The given equation is not homogeneous" << endl;
1753 cout <<
"surface_create::create_surface_by_equation homogeneous of degree " << degree << endl;
1757 cout <<
"surface_create::create_surface_by_equation The given equation is homogeneous, but not of degree 3" << endl;
1766 cout <<
"surface_create::create_surface_by_equation before Poly->init" << endl;
1774 cout <<
"surface_create::create_surface_by_equation after Poly->init" << endl;
1783 if (nb_monomials != 20) {
1784 cout <<
"surface_create::create_surface_by_equation nb_monomials != 20" << endl;
1789 cout <<
"surface_create::create_surface_by_equation before tree->split_by_monomials" << endl;
1793 cout <<
"surface_create::create_surface_by_equation after tree->split_by_monomials" << endl;
1797 for (i = 0; i < nb_monomials; i++) {
1798 cout <<
"surface_create::create_surface_by_equation Monomial " << i <<
" : ";
1806 cout <<
"surface_create::create_surface_by_equation no subtree" << endl;
1812 cout <<
"surface_create::create_surface_by_equation before evaluate" << endl;
1815 p = equation_parameters.c_str();
1818 std::map<std::string, std::string> symbol_table;
1829 assignment.assign(str);
1834 found = assignment.find(
'=');
1835 if (found == std::string::npos) {
1836 cout <<
"did not find '=' in variable assignment" << endl;
1839 std::string symb = assignment.substr (0, found);
1840 std::string val = assignment.substr (found + 1, len - found - 1);
1845 cout <<
"surface_create::create_surface_by_equation adding symbol " << symb <<
" = " << val << endl;
1848 symbol_table[symb] = val;
1855 cout <<
"surface_create::create_surface_by_equation symbol table:" << endl;
1856 for (i = 0; i < symbol_table.size(); i++) {
1857 cout << i <<
" : " << symbol_table[i] <<
" = " << values[i] << endl;
1862 for (i = 0; i < nb_monomials; i++) {
1864 cout <<
"surface_create::create_surface_by_equation Monomial " << i <<
" : ";
1868 a = Subtrees[i]->
evaluate(symbol_table,
F, 0);
1871 cout <<
"surface_create::create_surface_by_equation Monomial " << i <<
" : ";
1879 cout <<
"surface_create::create_surface_by_equation no subtree" << endl;
1885 cout <<
"surface_create::create_surface_by_equation evaluated polynomial:" << endl;
1886 for (i = 0; i < nb_monomials; i++) {
1887 cout << coeffs20[i] <<
" * ";
1891 cout <<
"surface_create::create_surface_by_equation coefficient vector: ";
1911 cout <<
"surface_create::create_surface_by_equation before create_surface_by_coefficient_vector" << endl;
1915 select_double_six_string,
1920 cout <<
"surface_create::create_surface_by_equation after create_surface_by_coefficient_vector" << endl;
1928 sprintf(str_q,
"%d",
F->
q);
1931 prefix.assign(
"equation_");
1932 prefix.append(name_of_formula);
1944 string my_parameters_tex;
1946 my_parameters_tex.assign(equation_parameters_tex);
1956 cout <<
"prefix = " <<
prefix << endl;
1957 cout <<
"label_txt = " <<
label_txt << endl;
1958 cout <<
"label_tex = " <<
label_tex << endl;
1964 cout <<
"surface_create::create_surface_by_equation done" << endl;
1970 std::string &by_double_six_label,
1971 std::string &by_double_six_label_tex,
1972 std::string &by_double_six_text,
1975 int f_v = (verbose_level >= 1);
1978 cout <<
"surface_create::create_surface_by_double_six" << endl;
1979 cout <<
"surface_create::create_surface_by_double_six double_six=" << by_double_six_text << endl;
1983 long int Lines27[27];
1984 long int *double_six;
1989 cout <<
"surface_create::create_surface_by_double_six need exactly 12 input lines" << endl;
1993 cout <<
"surface_create::create_surface_by_double_six double_six=";
2000 cout <<
"The double six is wrong" << endl;
2005 cout <<
"surface_create::create_surface_by_double_six passes the double six property test" << endl;
2010 cout <<
"surface_create::create_surface_by_double_six before Surf->build_cubic_surface_from_lines" << endl;
2018 cout <<
"surface_create::create_surface_by_double_six after Surf->build_cubic_surface_from_lines" << endl;
2022 cout <<
"surface_create::create_surface_by_double_six "
2023 "coeffs20:" << endl;
2036 cout <<
"surface_create::create_surface_by_double_six before Surf->create_the_fifteen_other_lines" << endl;
2039 Lines27 + 12, verbose_level);
2041 cout <<
"surface_create::create_surface_by_double_six after Surf->create_the_fifteen_other_lines" << endl;
2050 cout <<
"surface_create::create_surface_by_double_six before SO->init_equation_points_and_lines_only" << endl;
2056 cout <<
"surface_create::create_surface_by_double_six after SO->init_equation_points_and_lines_only" << endl;
2060 cout <<
"surface_create::create_surface_by_double_six before SO->init_with_27_lines" << endl;
2069 cout <<
"surface_create::create_surface_by_double_six after SO->init_with_27_lines" << endl;
2080 sprintf(str_q,
"%d",
F->
q);
2083 prefix.assign(
"DoubleSix_q");
2086 prefix.append(by_double_six_label);
2096 label_tex.append(by_double_six_label_tex);
2101 cout <<
"surface_create::create_surface_by_double_six done" << endl;
2106 std::string &given_label,
2107 std::string &given_label_tex,
2110 int f_v = (verbose_level >= 1);
2113 cout <<
"surface_create::create_surface_by_skew_hexagon" << endl;
2116 int Pluecker_ccords[] = {1,0,0,0,0,0, 0,1,0,1,0,0, 0,1,1,0,0,0, 0,1,0,0,0,0, 1,0,0,1,0,0, 1,0,1,0,0,0};
2123 for (i = 0; i < nb_pts; i++) {
2128 cout <<
"surface_create::create_surface_by_skew_hexagon nb_pts != 6" << endl;
2133 cout <<
"lines:" << endl;
2139 std::vector<std::vector<long int> > Double_sixes;
2142 cout <<
"surface_create::create_surface_by_skew_hexagon before Surf_A->complete_skew_hexagon" << endl;
2148 cout <<
"surface_create::create_surface_by_skew_hexagon after Surf_A->complete_skew_hexagon" << endl;
2153 long int Lines27[27];
2154 long int double_six[12];
2156 for (i = 0; i < 12; i++) {
2157 double_six[i] = Double_sixes[0][i];
2162 cout <<
"surface_create::create_surface_by_skew_hexagon before Surf->build_cubic_surface_from_lines" << endl;
2168 cout <<
"surface_create::create_surface_by_skew_hexagon after Surf->build_cubic_surface_from_lines" << endl;
2172 cout <<
"surface_create::create_surface_by_skew_hexagon "
2173 "coeffs20:" << endl;
2186 cout <<
"surface_create::create_surface_by_skew_hexagon before Surf->create_the_fifteen_other_lines" << endl;
2189 Lines27 + 12, verbose_level);
2191 cout <<
"surface_create::create_surface_by_skew_hexagon after Surf->create_the_fifteen_other_lines" << endl;
2203 cout <<
"surface_create::create_surface_by_skew_hexagon before SO->init_with_27_lines" << endl;
2212 cout <<
"surface_create::create_surface_by_skew_hexagon after SO->init_with_27_lines" << endl;
2221 sprintf(str_q,
"%d",
F->
q);
2224 prefix.assign(
"SkewHexagon_q");
2227 prefix.append(given_label);
2242 cout <<
"surface_create::create_surface_by_skew_hexagon done" << endl;
2247 std::vector<std::string> &transform_coeffs,
2248 std::vector<int> &f_inverse_transform,
2251 int f_v = (verbose_level >= 1);
2252 int f_vv = (verbose_level >= 2);
2261 cout <<
"surface_create::apply_transformations" << endl;
2262 cout <<
"surface_create::apply_transformations verbose_level = " << verbose_level << endl;
2279 if (transform_coeffs.size()) {
2281 for (h = 0; h < transform_coeffs.size(); h++) {
2282 int *transformation_coeffs;
2287 cout <<
"surface_create::apply_transformations "
2288 "applying transformation " << h <<
" / "
2289 << transform_coeffs.size() <<
":" << endl;
2292 Int_vec_scan(transform_coeffs[h], transformation_coeffs, sz);
2294 if (sz != desired_sz) {
2295 cout <<
"surface_create::apply_transformations "
2296 "need exactly " << desired_sz
2297 <<
" coefficients for the transformation" << endl;
2298 cout <<
"transform_coeffs[h]=" << transform_coeffs[h] << endl;
2299 cout <<
"sz=" << sz << endl;
2303 A->
make_element(Elt1, transformation_coeffs, verbose_level);
2305 if (f_inverse_transform[h]) {
2317 cout <<
"surface_create::apply_transformations "
2318 "applying the transformation given by:" << endl;
2319 cout <<
"$$" << endl;
2322 cout <<
"$$" << endl;
2323 cout <<
"surface_create::apply_transformations "
2324 "The inverse is:" << endl;
2325 cout <<
"$$" << endl;
2328 cout <<
"$$" << endl;
2341 cout <<
"surface_create::apply_transformations "
2342 "The equation of the transformed surface is:" << endl;
2343 cout <<
"$$" << endl;
2346 cout <<
"$$" << endl;
2361 cout <<
"surface_create::apply_transformations "
2362 "before SG2->init_generators_for_the_conjugate_group_avGa" << endl;
2367 cout <<
"surface_create::apply_transformations "
2368 "after SG2->init_generators_for_the_conjugate_group_avGa" << endl;
2380 cout <<
"surface_create::apply_transformations Lines = ";
2391 cout <<
"line " << i <<
":" << endl;
2396 cout <<
"maps to " << endl;
2405 cout <<
"point" << i <<
" = " <<
SO->
Pts[i] << endl;
2409 cout <<
"maps to " <<
SO->
Pts[i] << endl;
2415 cout <<
"surface_create::apply_transformations something is wrong, "
2416 "the image point does not lie on the transformed surface" << endl;
2430 cout <<
"surface_create::apply_transformations before SO->recompute_properties" << endl;
2434 cout <<
"surface_create::apply_transformations after SO->recompute_properties" << endl;
2440 cout <<
"surface_create::apply_transformations nothing to do" << endl;
2450 cout <<
"surface_create::apply_transformations done" << endl;
2459 int f_v = (verbose_level >= 1);
2466 cout <<
"surface_create::compute_group" << endl;
2472 projective_space_object_classifier_description *
Descr;
2473 projective_space_object_classifier *Classifier;
2476 Classifier =
NEW_OBJECT(projective_space_object_classifier);
2480 Descr->Data->input_type[
Descr->Data->nb_inputs] = INPUT_TYPE_SET_OF_POINTS;
2481 Descr->Data->input_string[
Descr->Data->nb_inputs].assign(
"");
2484 sprintf(str,
"%ld", a);
2485 Descr->Data->input_string[
Descr->Data->nb_inputs].append(str);
2486 if (i < SO->nb_pts - 1) {
2487 Descr->Data->input_string[
Descr->Data->nb_inputs].append(
",");
2490 Descr->Data->input_string2[
Descr->Data->nb_inputs].assign(
"");
2491 Descr->Data->nb_inputs++;
2494 cout <<
"surface_create::compute_group before Classifier->do_the_work" << endl;
2498 Classifier->do_the_work(
2506 cout <<
"surface_create::compute_group after Classifier->do_the_work" << endl;
2512 idx = Classifier->CB->type_of[Classifier->CB->n - 1];
2515 object_in_projective_space_with_action *OiPA;
2517 OiPA = (object_in_projective_space_with_action *) Classifier->CB->Type_extra_data[idx];
2532 cout <<
"surface_create::compute_group The system has rank " << r << endl;
2533 cout <<
"surface_create::compute_group The ideal has dimension " << ns << endl;
2535 cout <<
"surface_create::compute_group The ideal is generated by:" << endl;
2537 cout <<
"surface_create::compute_group Basis "
2538 "of polynomials:" << endl;
2542 for (h = 0; h < ns; h++) {
2554 Sg = OiPA->Aut_gens;
2561 cout <<
"surface_create::compute_group ago = " << ago << endl;
2568 cout <<
"surface_create::compute_group done" << endl;
creates a cubic surface from a 6-arc in a plane
void create_surface(surface_domain *Surf, long int *Arc6, long int line1, long int line2, int verbose_level)
void read_string_of_schlaefli_labels(std::string &str, int *&v, int &sz, 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
surface_object * create_surface_general_abcd(int a, int b, int c, int d, int verbose_level)
void create_the_fifteen_other_lines(long int *double_six, long int *fifteen_other_lines, int verbose_level)
Given a double six in double_six[12], compute the 15 remaining lines cij.
surface_object * create_surface_G13(int a, int verbose_level)
void rearrange_lines_according_to_double_six(long int *Lines, int verbose_level)
Picks a double six and rearranges the lines accordingly.
ring_theory::homogeneous_polynomial_domain * Poly3_4
field_theory::finite_field * F
surface_object * create_surface_F13(int a, int verbose_level)
surface_object * create_surface_bes(int a, int c, int verbose_level)
void print_equation_tex(std::ostream &ost, int *coeffs)
surface_object * create_Eckardt_surface(int a, int b, int &alpha, int &beta, int verbose_level)
geometry::klein_correspondence * Klein
void create_equation_Cayley_klmn(int k, int l, int m, int n, int *coeff, int verbose_level)
void build_cubic_surface_from_lines(int len, long int *S, int *coeff, int verbose_level)
void rearrange_lines_according_to_a_given_double_six(long int *Lines, int *given_double_six, long int *New_lines, int verbose_level)
a particular cubic surface in PG(3,q), given by its equation
void init_equation(surface_domain *Surf, int *eqn, int verbose_level)
void recompute_properties(int verbose_level)
void compute_properties(int verbose_level)
void init_with_27_lines(surface_domain *Surf, long int *Lines27, int *eqn, int f_find_double_six_and_rearrange_lines, int verbose_level)
void init_equation_points_and_lines_only(surface_domain *Surf, int *eqn, int verbose_level)
void print_Eckardt_point_data(std::ostream &ost, int verbose_level)
void matrix_print(int *p, int m, int n)
void print(std::ostream &ost, long int *v, int len)
a collection of functions related to sorted vectors
void lint_vec_heapsort(long int *v, int len)
class to parse expressions
void parse(syntax_tree *tree, std::string &program, int verbose_level)
interior node in a syntax tree
int evaluate(std::map< std::string, std::string > &symbol_table, field_theory::finite_field *F, int verbose_level)
void export_graphviz(std::string &name, std::ostream &ost)
void print_expression(std::ostream &ost)
the syntax tree of an expression
void split_by_monomials(ring_theory::homogeneous_polynomial_domain *Poly, syntax_tree_node **&Subtrees, int verbose_level)
int is_homogeneous(int °ree, int verbose_level)
std::vector< std::string > managed_variables
int f_has_managed_variables
void finite_field_init(int q, int f_without_tables, int verbose_level)
void PG_element_unrank_modified_lint(int *v, int stride, int len, long int a)
void print_single_generator_matrix_tex(std::ostream &ost, long int a)
long int Pluecker_to_line_rk(int *v6, int verbose_level)
provides access to pre-computed combinatorial data in encoded form
long int * cubic_surface_Lines(int q, int i)
int cubic_surface_nb_reps(int q)
basic number theoretic functions
long int mod(long int a, long int p)
data_structures::lint_vec * Lint_vec
data_structures::int_vec * Int_vec
homogeneous polynomials of a given degree in a given number of variables over a finite field GF(q)
void init(field_theory::finite_field *F, int nb_vars, int degree, int f_init_incidence_structure, monomial_ordering_type Monomial_ordering_type, int verbose_level)
int evaluate_at_a_point_by_rank(int *coeff, int pt)
void print_equation(std::ostream &ost, int *coeffs)
void print_monomial(std::ostream &ost, int i)
void vanishing_ideal(long int *Pts, int nb_pts, int &r, int *Kernel, int verbose_level)
a permutation group in a fixed action.
void print_quick(std::ostream &ost, void *elt)
void element_invert(void *a, void *av, int verbose_level)
void make_element(int *Elt, int *data, int verbose_level)
void element_move(void *a, void *b, int verbose_level)
long int element_image_of(long int a, void *elt, int verbose_level)
to hold a vector of group elements
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)
a strong generating set for a permutation group with respect to a fixed action
void stabilizer_of_F13_surface(actions::action *A, field_theory::finite_field *F, int a, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
void stabilizer_of_cubic_surface_from_catalogue(actions::action *A, field_theory::finite_field *F, int iso, int verbose_level)
strong_generators * create_copy()
void print_generators_tex()
void stabilizer_of_G13_surface(actions::action *A, field_theory::finite_field *F, int a, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
void init_generators_for_the_conjugate_group_avGa(strong_generators *SG, int *Elt_a, int verbose_level)
void stabilizer_of_Eckardt_surface(actions::action *A, field_theory::finite_field *F, int f_with_normalizer, int f_semilinear, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
void init_from_data_with_target_go_ascii(actions::action *A, int *data, int nb_elements, int elt_size, const char *ascii_target_go, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
to control the behavior of the poset classification algorithm
void classify(poset_classification::poset_classification_control *Control1, poset_classification::poset_classification_control *Control2, int verbose_level)
to describe a cubic surface from the command line
std::string equation_name_of_formula_tex
std::string by_skew_hexagon_label
std::string arc_lifting_text
std::string equation_name_of_formula
std::string override_group_order
int family_general_abcd_a
int override_group_nb_gens
std::string arc_lifting_two_lines_text
int family_general_abcd_c
std::string equation_managed_variables
std::string by_double_six_label_tex
int f_family_general_abcd
std::string equation_parameters
std::string equation_parameters_tex
std::string override_group_gens
int f_arc_lifting_with_two_lines
std::vector< std::string > select_double_six_string
std::string by_double_six_text
std::string by_double_six_label
int family_general_abcd_b
std::string by_skew_hexagon_label_tex
std::string equation_text
std::string coefficients_text
int family_general_abcd_d
creates a cubic surface from a 6-arc in a plane using trihedral pairs
void create_surface_and_group(cubic_surfaces_in_general::surface_with_action *Surf_A, long int *Arc6, int verbose_level)
algebraic_geometry::web_of_cubic_curves * Web
trihedral_pair_with_action * Trihedral_pair
int * The_surface_equations
groups::strong_generators * Aut_gens
cubic surfaces in projective space with automorphism group
projective_geometry::projective_space_with_action * PA
cubic_surfaces_and_arcs::classify_trihedral_pairs * Classify_trihedral_pairs
void test_group(surface_create *SC, int verbose_level)
algebraic_geometry::surface_domain * Surf
void complete_skew_hexagon(long int *skew_hexagon, std::vector< std::vector< long int > > &Double_sixes, int verbose_level)
void apply_transformations(std::vector< std::string > &transform_coeffs, std::vector< int > &f_inverse_transform, int verbose_level)
void create_surface_by_double_six(std::string &by_double_six_label, std::string &by_double_six_label_tex, std::string &by_double_six_text, int verbose_level)
void create_surface_from_description(int verbose_level)
void create_surface_Cayley_form(int k, int l, int m, int n, int verbose_level)
void create_surface_by_coefficients(std::string &coefficients_text, std::vector< std::string > &select_double_six_string, int verbose_level)
void create_surface_general_abcd(int a, int b, int c, int d, int verbose_level)
surface_create_description * Descr
data_structures_groups::vector_ge * nice_gens
surface_with_action * Surf_A
void create_surface_by_rank(std::string &rank_text, int defining_q, std::vector< std::string > &select_double_six_string, int verbose_level)
void create_surface_G13(int a, int verbose_level)
void create_surface_by_skew_hexagon(std::string &given_label, std::string &given_label_tex, int verbose_level)
void compute_group(projective_geometry::projective_space_with_action *PA, int verbose_level)
void create_surface_F13(int a, int verbose_level)
void override_group(std::string &group_order_text, int nb_gens, std::string &gens_text, int verbose_level)
void create_surface_from_catalogue(int iso, std::vector< std::string > &select_double_six_string, int verbose_level)
algebraic_geometry::surface_domain * Surf
void create_surface_by_arc_lifting(std::string &arc_lifting_text, int verbose_level)
field_theory::finite_field * F
void create_surface_by_equation(std::string &name_of_formula, std::string &name_of_formula_tex, std::string &managed_variables, std::string &equation_text, std::string &equation_parameters, std::string &equation_parameters_tex, std::vector< std::string > &select_double_six_string, int verbose_level)
void init_with_data(surface_create_description *Descr, surface_with_action *Surf_A, int verbose_level)
void create_Eckardt_surface(int a, int b, int verbose_level)
void create_surface_bes(int a, int c, int verbose_level)
algebraic_geometry::surface_object * SO
void create_surface_by_coefficient_vector(int *coeffs20, std::vector< std::string > &select_double_six_string, int verbose_level)
void create_surface_by_arc_lifting_with_two_lines(std::string &arc_lifting_text, std::string &arc_lifting_two_lines_text, int verbose_level)
groups::strong_generators * Sg
void init(surface_create_description *Descr, surface_with_action *Surf_A, int verbose_level)
projective space PG(n,q) with automorphism group PGGL(n+1,q)
field_theory::finite_field * F
#define Lint_vec_copy(A, B, C)
#define Int_vec_scan(A, B, C)
#define Int_vec_zero(A, B)
#define Lint_vec_scan(A, B, C)
#define Lint_vec_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