18namespace layer1_foundations {
19namespace algebraic_geometry {
40 ost <<
"{\\renewcommand{\\arraystretch}{1.5}" << endl;
42 ost <<
"\\begin{array}{c}" << endl;
47 ost <<
"\\end{array}" << endl;
60 long int i, j, a, u,
v;
62 ost <<
"\\begin{array}{cc}" << endl;
63 for (i = 0; i < 6; i++) {
64 for (j = 0; j < 2; j++) {
65 a = double_six[j * 6 + i];
70 ost <<
"\\left[" << endl;
71 ost <<
"\\begin{array}{*{4}{c}}" << endl;
72 for (u = 0; u < 2; u++) {
73 for (
v = 0;
v < 4;
v++) {
74 ost <<
Gr->
M[u * 4 +
v];
79 ost <<
"\\\\" << endl;
81 ost <<
"\\end{array}" << endl;
82 ost <<
"\\right]_{" << a <<
"}" << endl;
88 ost <<
"\\\\" << endl;
90 ost <<
"\\end{array}" << endl;
100 long int *Wedge_rk,
long int *Line_rk,
long int *Klein_rk,
int nb_lines,
103 int f_v = (verbose_level >= 1);
113 cout <<
"surface_domain::make_spreadsheet_of_lines_in_three_kinds" << endl;
120 for (i = 0; i < nb_lines; i++) {
124 Text_wedge[i] =
NEW_char(strlen(str) + 1);
125 strcpy(Text_wedge[i], str);
127 for (i = 0; i < nb_lines; i++) {
131 Text_line[i] =
NEW_char(strlen(str) + 1);
132 strcpy(Text_line[i], str);
134 for (i = 0; i < nb_lines; i++) {
141 Text_klein[i] =
NEW_char(strlen(str) + 1);
142 strcpy(Text_klein[i], str);
150 (
const char **) Text_wedge,
"Wedge coords");
153 (
const char **) Text_line,
"Line basis");
156 (
const char **) Text_klein,
"Klein coords");
158 for (i = 0; i < nb_lines; i++) {
162 for (i = 0; i < nb_lines; i++) {
166 for (i = 0; i < nb_lines; i++) {
173 cout <<
"surface_domain::make_spreadsheet_of_lines_"
174 "in_three_kinds done" << endl;
181void surface_domain::print_web_of_cubic_curves(ostream &ost,
182 int *Web_of_cubic_curves)
187 ost <<
"Web of cubic curves:\\\\" << endl;
189 L.print_integer_matrix_with_standard_labels(ost,
190 Web_of_cubic_curves, 45, 10,
TRUE );
196 int *the_six_plane_equations,
int lambda,
int *the_equation)
198 ost <<
"\\begin{align*}" << endl;
199 ost <<
"0 & = F_0F_1F_2 + \\lambda G_0G_1G_2\\\\" << endl;
200 ost <<
"& = " << endl;
210 ost <<
"+ " << lambda;
220 ost <<
"& \\equiv " << endl;
223 ost <<
"\\end{align*}" << endl;
228 ost <<
"\\begin{align*}" << endl;
229 ost <<
"0 & = " << endl;
232 ost <<
"\\end{align*}" << endl;
244 ost <<
"The lines and their Pluecker coordinates are:\\\\" << endl;
246 for (i = 0; i < nb_lines; i++) {
250 ost <<
"\\ell_{" << i <<
"}";
252 if (nb_lines == 27) {
255 ost <<
" = " << endl;
261 ost <<
"_{" << Lines[i] <<
"}" << endl;
263 ost <<
"\\left[" << endl;
265 ost <<
"\\right]_{" << Lines[i] <<
"}" << endl;
275 ost <<
"={\\rm\\bf Pl}(" << v6[0] <<
"," << v6[1] <<
","
276 << v6[2] <<
"," << v6[3] <<
"," << v6[4]
277 <<
"," << v6[5] <<
" ";
278 ost <<
")_{" << Rk[i] <<
"}";
281 ost <<
"Rank of lines: ";
283 ost <<
"\\\\" << endl;
284 ost <<
"Rank of points on Klein quadric: ";
286 ost <<
"\\\\" << endl;
323 if (Pa2[2] || Pa2[3] || Pa2[4]) {
330 ost <<
"\\section*{Projected points:}" << endl;
331 for (h = 0; h < 27; h++) {
332 if (h == 5 || h == 11 || h == 1) {
347 ost <<
"}$\\\\" << endl;
351 for (h = 0; h < 27; h++) {
352 if (h == 5 || h == 11 || h == 1) {
361 ost <<
"\\\\" << endl;
372 cout <<
"surface_domain::print_clebsch_P f_has_large_polynomial_"
373 "domains is FALSE" << endl;
377 ost <<
"\\clearpage" << endl;
378 ost <<
"\\subsection*{The Clebsch system $P$}" << endl;
382 ost <<
"\\cdot \\left[" << endl;
383 ost <<
"\\begin{array}{c}" << endl;
384 ost <<
"x_0\\\\" << endl;
385 ost <<
"x_1\\\\" << endl;
386 ost <<
"x_2\\\\" << endl;
387 ost <<
"x_3\\\\" << endl;
388 ost <<
"\\end{array}" << endl;
389 ost <<
"\\right]" << endl;
390 ost <<
"= \\left[" << endl;
391 ost <<
"\\begin{array}{c}" << endl;
392 ost <<
"0\\\\" << endl;
393 ost <<
"0\\\\" << endl;
394 ost <<
"0\\\\" << endl;
395 ost <<
"\\end{array}" << endl;
396 ost <<
"\\right]" << endl;
400 ost <<
"\\begin{align*}" << endl;
401 for (h = 0; h < 4; h++) {
402 ost <<
"x_" << h <<
" &= C_" << h
403 <<
"(y_0,y_1,y_2)=\\\\" << endl;
422 ost <<
"\\Big)" << endl;
424 ost <<
"\\cdot" << endl;
427 ost <<
"\\\\" << endl;
430 ost <<
"\\end{align*}" << endl;
438 cout <<
"surface::print_clebsch_P_matrix_only "
439 "f_has_large_polynomial_domains is FALSE" << endl;
442 ost <<
"\\left[" << endl;
443 ost <<
"\\begin{array}{cccc}" << endl;
444 for (i = 0; i < 3; i++) {
445 for (j = 0; j < 4; j++) {
452 ost <<
"\\\\" << endl;
454 ost <<
"\\end{array}" << endl;
455 ost <<
"\\right]" << endl;
463 cout <<
"surface_domain::print_clebsch_cubics "
464 "f_has_large_polynomial_domains is FALSE" << endl;
467 ost <<
"The Clebsch coefficients are:" << endl;
468 for (h = 0; h < 4; h++) {
469 ost <<
"C[" << h <<
"]:" << endl;
477 ost <<
" \\cdot \\Big(";
479 ost <<
"\\Big)" << endl;
490 ost <<
"\\left[" << endl;
491 ost <<
"\\begin{array}{cccc}" << endl;
492 for (i = 0; i < 3; i++) {
493 for (j = 0; j < 4; j++) {
494 int *p = system + (i * 4 + j) * 3;
500 ost <<
"\\\\" << endl;
502 ost <<
"\\end{array}" << endl;
503 ost <<
"\\right]" << endl;
504 ost <<
"\\cdot \\left[" << endl;
505 ost <<
"\\begin{array}{c}" << endl;
506 ost <<
"x_0\\\\" << endl;
507 ost <<
"x_1\\\\" << endl;
508 ost <<
"x_2\\\\" << endl;
509 ost <<
"x_3\\\\" << endl;
510 ost <<
"\\end{array}" << endl;
511 ost <<
"\\right]" << endl;
512 ost <<
"= \\left[" << endl;
513 ost <<
"\\begin{array}{c}" << endl;
514 ost <<
"0\\\\" << endl;
515 ost <<
"0\\\\" << endl;
516 ost <<
"0\\\\" << endl;
517 ost <<
"\\end{array}" << endl;
518 ost <<
"\\right]" << endl;
523 long int *F_planes_rank,
long int *G_planes_rank)
529 for (i = 0; i < 3; i++) {
532 for (i = 0; i < 3; i++) {
536 for (i = 0; i < 3; i++) {
540 for (i = 0; i < 3; i++) {
555 cout <<
"surface_domain::print_basics "
556 "before print_Steiner_and_Eckardt" << endl;
558 cout <<
"surface_domain::print_basics "
559 "after print_Steiner_and_Eckardt" << endl;
561 cout <<
"surface_domain::print_basics "
562 "before print_clebsch_P" << endl;
564 cout <<
"surface_domain::print_basics "
565 "after print_clebsch_P" << endl;
572 ost <<
"The polynomial domain Poly3\\_4 is:" << endl;
575 ost <<
"The polynomial domain Poly1\\_x123 is:" << endl;
578 ost <<
"The polynomial domain Poly2\\_x123 is:" << endl;
581 ost <<
"The polynomial domain Poly3\\_x123 is:" << endl;
584 ost <<
"The polynomial domain Poly4\\_x123 is:" << endl;
594 cout <<
"surface_domain::sstr_line_label pt >= 27, pt=" << pt << endl;
598 cout <<
"surface_domain::sstr_line_label pt < 0, pt=" << pt << endl;
614 const char *author =
"Orbiter";
615 const char *extras_for_preamble =
"";
617 sprintf(fname,
"surfaces_report.tex");
618 sprintf(title,
"Cubic Surfaces with 27 Lines over Finite Fields");
629 extras_for_preamble);
634 4,7,8,9,11,13,16,17,19,23,25,27,29,31,32,37,
635 41,43,47,49,53,59,61,64,67,71,73,79,81,83, 89, 97, 101, 103, 107, 109, 113, 121, 128
637 int nb_Q =
sizeof(Q) /
sizeof(
int);
639 fp <<
"\\section*{Cubic Surfaces}" << endl;
647 fp <<
"\\clearpage" << endl;
658 fp <<
"\\section*{Even Characteristic}" << endl;
665 fp <<
"\\clearpage" << endl;
672 7,9,11,13,17,19,23,25,27,29,31,37,
673 41,43,47,49,53,59,61,67,71,73,79,81,83, 89, 97, 101, 103, 107, 109, 113, 121
675 int nb_Q_odd =
sizeof(Q_odd) /
sizeof(
int);
678 fp <<
"\\section*{Odd Characteristic}" << endl;
691 int *Q_table,
int Q_table_len,
int verbose_level)
693 int i, j,
q, cur, nb_E;
700 Nb_reps =
NEW_int(Q_table_len);
703 for (i = 0; i < Q_table_len; i++) {
706 nb_reps_total += Nb_reps[i];
708 Big_table =
NEW_lint(nb_reps_total * 4);
711 for (i = 0; i < Q_table_len; i++) {
713 for (j = 0; j < Nb_reps[i]; j++, cur++) {
715 Big_table[cur * 4 + 0] =
q;
716 Big_table[cur * 4 + 1] = nb_E;
717 Big_table[cur * 4 + 2] = j;
729 Big_table[cur * 4 + 3] = ago;
734 fname.assign(
"table_of_cubic_surfaces_QECA.csv");
736 std::string *headers;
738 headers =
new string[4];
741 headers[0].assign(
"Q");
742 headers[1].assign(
"E");
743 headers[2].assign(
"OCN");
744 headers[3].assign(
"AUT");
753 int *Q_table,
int Q_table_len,
int verbose_level)
757 4,7,8,9,11,13,16,17,19,23,25,27,29,31,32,37,
758 41,43,47,49,53,59,61,64,67,71,73,79,81,83, 89, 97};
773 for (i = 0; i < Q_table_len; i++) {
776 cout <<
q <<
" : " << nb_reps <<
"\\\\" << endl;
780 const char *fname_ago =
"ago.csv";
782 ofstream f(fname_ago);
784 f <<
"q,j,nb_E,stab_order" << endl;
785 for (i = 0; i < Q_table_len; i++) {
788 for (j = 0; j < nb_reps; j++) {
791 data, nb_gens, data_size, stab_order);
792 f <<
q <<
"," << j <<
", " << nb_E <<
", "
793 << stab_order << endl;
798 cout <<
"Written file " << fname_ago <<
" of size "
801 const char *fname_dist =
"ago_dist.csv";
803 ofstream f(fname_dist);
806 f <<
"q,ago" << endl;
807 for (i = 0; i < Q_table_len; i++) {
811 for (j = 0; j < nb_reps; j++) {
814 nb_gens, data_size, stab_order);
815 sscanf(stab_order,
"%d", &Ago[j]);
820 C.init(Ago, nb_reps,
FALSE, 0);
822 C.print_naked_tex(f,
TRUE );
829 cout <<
"Written file " << fname_dist <<
" of size "
841 Table, Q, nb_Q, E, nb_E_types, verbose_level);
843 Table2 =
NEW_lint(nb_Q * nb_E_types + 1);
844 for (i = 0; i < nb_Q; i++) {
845 Table2[i * (nb_E_types + 1) + 0] = Q[i];
846 for (j = 0; j < nb_reps; j++) {
847 Table2[i * (nb_E_types + 1) + 1 + j] = Table[i * nb_E_types + j];
854 fname.assign(
"table_of_cubic_surfaces_QE.csv");
856 std::string *headers;
858 headers =
new string[nb_E_types + 1];
861 headers[0].assign(
"Q");
862 for (j = 0; j < nb_E_types; j++) {
865 sprintf(str,
"E%d", E[j]);
866 headers[1 + j].assign(str);
880 ost <<
"\\begin{array}{|r||r||*{" << nb_E_types <<
"}{r|}}" << endl;
881 ost <<
"\\hline" << endl;
882 ost <<
"q & \\mbox{total} ";
883 for (j = 0; j < nb_E_types; j++) {
884 ost <<
" & " << E[j];
886 ost <<
"\\\\" << endl;
887 ost <<
"\\hline" << endl;
888 ost <<
"\\hline" << endl;
889 for (i = 0; i < nb_Q; i++) {
896 for (j = 0; j < nb_E_types; j++) {
897 ost <<
" & " << Table[i * nb_E_types + j];
899 ost <<
"\\\\" << endl;
900 ost <<
"\\hline" << endl;
903 ost <<
"\\end{array}" << endl;
906 ost <<
"Total: " << Nb_total << endl;
912 ost <<
"\\bigskip" << endl;
914 for (j = 0; j < nb_E_types; j++) {
915 ost <<
"\\section*{" << E[j] <<
" Eckardt Points}" << endl;
920 ost <<
"\\begin{array}{|r|r|p{8cm}|}" << endl;
921 ost <<
"\\hline" << endl;
922 ost <<
"q & \\mbox{total} & \\mbox{Ago} \\\\" << endl;
923 ost <<
"\\hline" << endl;
924 ost <<
"\\hline" << endl;
926 for (i = 0; i < nb_Q; i++) {
928 nb_reps = Table[i * nb_E_types + j];
940 for (h = 0; h < nb_total; h++) {
948 nb_gens, data_size, stab_order);
955 cout <<
"u != nb_reps" << endl;
961 ost <<
q <<
" & " << nb_reps <<
" & ";
964 ost <<
"$\\\\" << endl;
970 ost <<
"\\hline" << endl;
975 ost <<
"\\end{array}" << endl;
978 ost <<
"Total: " << Nb_total << endl;
981 ost <<
"\\bigskip" << endl;
990 for (i = 0; i < Q_table_len; i++) {
997 for (j = 0; j < nb_reps; j++, h++) {
1002 const char *stab_order;
1006 data, nb_gens, data_size, stab_order);
1007 ost <<
q <<
" & " << j <<
" & " << stab_order
1008 <<
" & " << nb_E <<
" & \\\\" << endl;
1009 if ((h + 1) % 30 == 0) {
1011 if ((h + 1) % 60 == 0) {
1013 ost <<
"\\bigskip" << endl;
1019 ost <<
"\\hline" << endl;
1037 ost <<
"\\begin{array}{|c|c||c|c|c|}" << endl;
1038 ost <<
"\\hline" << endl;
1039 ost <<
"q & \\mbox{Iso} & \\mbox{Ago} & \\# E & "
1040 "\\mbox{Comment}\\\\" << endl;
1041 ost <<
"\\hline" << endl;
1042 ost <<
"\\hline" << endl;
1047 ost <<
"\\hline" << endl;
1048 ost <<
"\\end{array}" << endl;
1054 int *field_orders,
int nb_fields,
1057 int *&E,
int &nb_E_types,
int verbose_level)
1062 int i, j,
q, nb_reps, nb_E, nb_E_max, idx;
1071 for (i = 0; i < nb_fields; i++) {
1072 q = field_orders[i];
1074 for (j = 0; j < nb_reps; j++) {
1076 nb_E_max =
MAXIMUM(nb_E_max, nb_E);
1079 cout <<
"nb_E_max=" << nb_E_max << endl;
1081 E_freq =
NEW_int(nb_E_max + 1);
1083 for (i = 0; i < nb_fields; i++) {
1084 q = field_orders[i];
1086 for (j = 0; j < nb_reps; j++) {
1102 Table_idx =
NEW_int(nb_E_max + 1);
1103 for (j = 0; j <= nb_E_max; j++) {
1106 Table_idx[j] = nb_E_types;
1115 Table =
NEW_lint(nb_Q * nb_E_types);
1117 for (i = 0; i < nb_fields; i++) {
1120 for (j = 0; j < nb_reps; j++) {
1122 idx = Table_idx[nb_E];
1123 Table[i * nb_E_types + idx]++;
1126 cout <<
"Table:" << endl;
std::string * Line_label_tex
void print_Steiner_and_Eckardt(std::ostream &ost)
void print_Schlaefli_labelling(std::ostream &ost)
schlaefli_labels * Labels
cubic surfaces in PG(3,q) with 27 lines
void latex_double_six(std::ostream &ost, long int *double_six)
ring_theory::homogeneous_polynomial_domain * Poly3
geometry::projective_space * P2
void print_clebsch_P_matrix_only(std::ostream &ost)
ring_theory::homogeneous_polynomial_domain * Poly3_x123
void print_polynomial_domains(std::ostream &ost)
void print_trihedral_pair_in_dual_coordinates_in_GAP(long int *F_planes_rank, long int *G_planes_rank)
ring_theory::homogeneous_polynomial_domain * Poly4_x123
void make_table_of_surfaces(int verbose_level)
geometry::projective_space * P
void print_system(std::ostream &ost, int *system)
void alice(std::ostream &ost, long int *Lines, int nb_lines)
void print_equation_maple(std::stringstream &ost, int *coeffs)
ring_theory::homogeneous_polynomial_domain * Poly1_4
void print_clebsch_P(std::ostream &ost)
orthogonal_geometry::orthogonal * O
void make_spreadsheet_of_lines_in_three_kinds(data_structures::spreadsheet *&Sp, long int *Wedge_rk, long int *Line_rk, long int *Klein_rk, int nb_lines, int verbose_level)
ring_theory::homogeneous_polynomial_domain * Poly3_24
ring_theory::homogeneous_polynomial_domain * Poly3_4
field_theory::finite_field * F
ring_theory::homogeneous_polynomial_domain * Poly1_x123
void print_clebsch_cubics(std::ostream &ost)
void print_basics(std::ostream &ost)
void print_equation_tex(std::ostream &ost, int *coeffs)
void make_table_of_surfaces2(std::ostream &ost, int *Q_table, int Q_table_len, int verbose_level)
void print_equation_with_line_breaks_tex(std::ostream &ost, int *coeffs)
void print_lines_tex(std::ostream &ost, long int *Lines, int nb_lines)
ring_theory::homogeneous_polynomial_domain * Poly2_27
void compute_table_E(int *field_orders, int nb_fields, long int *&Table, int *&Q, int &nb_Q, int *&E, int &nb_E_types, int verbose_level)
void print_equation_wrapped(std::ostream &ost, int *the_equation)
void make_table_of_surfaces_detailed(int *Q_table, int Q_table_len, int verbose_level)
int f_has_large_polynomial_domains
void print_equation_in_trihedral_form(std::ostream &ost, int *the_six_plane_equations, int lambda, int *the_equation)
void print_equation_tex_lint(std::ostream &ost, long int *coeffs)
void sstr_line_label(std::stringstream &sstr, long int pt)
void table_bottom(std::ostream &ost)
ring_theory::homogeneous_polynomial_domain * Poly2_x123
void table_top(std::ostream &ost)
ring_theory::homogeneous_polynomial_domain * Poly1
void print_equation(std::ostream &ost, int *coeffs)
void zero(long int *v, long int len)
void matrix_print(long int *p, int m, int n)
for reading and writing of csv files
void fill_column_with_text(int col_idx, const char **text, const char *heading)
void fill_column_with_row_index(int col_idx, const char *heading)
void fill_column_with_lint(int col_idx, long int *data, const char *heading)
void init_empty_table(int nb_rows, int nb_cols)
a statistical analysis of data consisting of single integers
void init(int *data, int data_length, int f_second, int verbose_level)
void print_naked_tex(std::ostream &ost, int f_backwards)
orthogonal_geometry::orthogonal_indexing * Orthogonal_indexing
void PG_element_unrank_modified_lint(int *v, int stride, int len, long int a)
void unrank_lint(long int rk, int verbose_level)
void latex_matrix(std::ostream &ost, int *p)
void unrank_lint_here(int *Mtx, long int rk, int verbose_level)
void Pluecker_coordinates(int line_rk, int *v6, 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
void cubic_surface_stab_gens(int q, int i, int *&data, int &nb_gens, int &data_size, std::string &stab_order_str)
int cubic_surface_nb_Eckardt_points(int q, int i)
int cubic_surface_nb_reps(int q)
a collection of functions related to file io
void lint_matrix_write_csv_override_headers(std::string &fname, std::string *headers, long int *M, int m, int n)
long int file_size(std::string &fname)
interface to create latex output files
void print_integer_matrix_tex(std::ostream &ost, int *p, int m, int n)
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
long int Qplus_rank(int *v, int stride, int k, int verbose_level)
void unrank_point(int *v, int stride, long int rk, int verbose_level)
void print_monomial_ordering(std::ostream &ost)
void print_equation(std::ostream &ost, int *coeffs)
void print_monomial(std::ostream &ost, int i)
void print_equation_with_line_breaks_tex(std::ostream &ost, int *coeffs, int nb_terms_per_line, const char *new_line_text)
void print_equation_lint_tex(std::ostream &ost, long int *coeffs)
void print_equation_tex(std::ostream &ost, int *coeffs)
void print_equation_str(std::stringstream &ost, int *coeffs)
#define Int_vec_print_GAP(A, B, C)
#define Int_vec_zero(A, B)
#define Lint_vec_print(A, B, C)
#define Int_vec_print_to_str(A, B, C)
#define Int_vec_copy(A, B, C)
#define Int_vec_print(A, B, C)
void callback_surface_domain_sstr_line_label(std::stringstream &sstr, long int pt, void *data)
orbiter_kernel_system::orbiter_session * Orbiter
global Orbiter session
the orbiter library for the classification of combinatorial objects