15namespace layer1_foundations {
16namespace orthogonal_geometry {
41 cout <<
"points of type P" << t <<
":" << endl;
42 for (i = 0; i <
P[t - 1]; i++) {
44 cout << i <<
" : " << rk <<
" : ";
48 cout <<
" : " << u <<
" : " << j << endl;
50 cout <<
"type wrong" << endl;
54 cout <<
"index wrong" << endl;
65 ost <<
"points of type P" << t <<
":\\\\" << endl;
66 for (i = 0; i <
P[t - 1]; i++) {
68 ost << i <<
" : " << rk <<
" : ";
71 ost <<
"\\\\" << endl;
75 cout <<
"type wrong" << endl;
79 cout <<
"index wrong" << endl;
90 ost <<
"The number of points is " <<
nb_points <<
"\\\\" << endl;
92 ost <<
"points:\\\\" << endl;
95 ost <<
"$P_{" << rk <<
"} = ";
97 ost <<
"$\\\\" << endl;
101 ost <<
"Too many points to print.\\\\" << endl;
114 ost <<
"The number of lines is " <<
nb_lines <<
"\\\\" << endl;
127 for (i = 0; i < len; i++) {
128 ost <<
"$L_{" << i <<
"} = ";
138 ost <<
"\\left[" << endl;
140 ost <<
"\\right]" << endl;
144 cout <<
"not orthogonal" << endl;
150 j = O.rank_line(
p1,
p2, 0 );
152 cout <<
"error: i != j" << endl;
163 ost <<
"$\\\\" << endl;
165 for (r1 = 0; r1 <=
q; r1++) {
166 for (r2 = 0; r2 <=
q; r2++) {
173 cout <<
p3 <<
"," <<
p4 <<
" : ";
174 j = O.rank_line(
p3,
p4, verbose_level - 1);
175 cout <<
" : " << j << endl;
177 cout <<
"error: i != j" << endl;
206 int i, j, rk1, rk2, u, cnt;
208 cout <<
"lines between points of type P" << t1
209 <<
" and points of type P" << t2 << endl;
210 for (i = 0; i <
P[t1 - 1]; i++) {
212 cout << i <<
" : " << rk1 <<
" : ";
216 cout <<
"is incident with:" << endl;
220 for (j = 0; j <
P[t2 - 1]; j++) {
229 if (u == 0 && rk2 != rk1) {
232 cout << cnt <<
" : " << j <<
" : " << rk2 <<
" : ";
252 cout << setw(7) <<
L[j];
256 cout << setw(7) <<
P[i];
265 cout << setw(7) <<
L[j];
269 cout << setw(7) <<
P[i];
281 int f_v = (verbose_level >= 1);
284 cout <<
"orthogonal::report_quadratic_form" << endl;
287 ost <<
"The quadratic form is: " << endl;
294 cout <<
"orthogonal::report_quadratic_form done" << endl;
302 int f_v = (verbose_level >= 1);
305 cout <<
"orthogonal::report" << endl;
312 cout <<
"orthogonal::report before report_schemes_easy" << endl;
318 cout <<
"orthogonal::report after report_schemes_easy" << endl;
323 cout <<
"orthogonal::report before report_schemes" << endl;
329 cout <<
"orthogonal::report after report_schemes" << endl;
334 cout <<
"orthogonal::report before report_points" << endl;
340 cout <<
"orthogonal::report after report_points" << endl;
347 cout <<
"orthogonal::report before report_lines" << endl;
354 cout <<
"orthogonal::report after report_lines" << endl;
359 cout <<
"orthogonal::report done" << endl;
365 int f_v = (verbose_level >= 1);
378 cout <<
"orthogonal::report_schemes" << endl;
387 cout <<
"orthogonal::report_schemes nb_points=" <<
nb_points << endl;
388 cout <<
"orthogonal::report_schemes nb_lines=" <<
nb_lines << endl;
392 cout <<
"orthogonal::report_schemes before Stack->allocate_with_two_classes" << endl;
398 cout <<
"orthogonal::report_schemes after Stack->allocate_with_two_classes" << endl;
403 row_classes[i] =
P[i];
407 col_classes[i] =
L[i];
411 int *original_row_class;
412 int *original_col_class;
419 original_row_class[nb_rows] = i;
426 original_col_class[nb_cols] = i;
430 row_scheme =
NEW_int(nb_rows * nb_cols);
431 for (i = 0; i < nb_rows; i++) {
432 for (j = 0; j < nb_cols; j++) {
433 row_scheme[i * nb_cols + j] =
A[original_row_class[i] *
nb_line_classes + original_col_class[j]];
436 col_scheme =
NEW_int(nb_rows * nb_cols);
437 for (i = 0; i < nb_rows; i++) {
438 for (j = 0; j < nb_cols; j++) {
439 col_scheme[i * nb_cols + j] =
B[original_row_class[i] *
nb_line_classes + original_col_class[j]];
444 for (i = 0; i < nb_rows - 1; i++) {
445 l =
P[original_row_class[i]];
447 cout <<
"l == 0" << endl;
450 for (j = 0; j < l; j++) {
454 cout <<
"orthogonal::report_schemes before Stack->split_cell_front_or_back for points" << endl;
464 for (i = 0; i < nb_cols - 1; i++) {
465 l =
L[original_col_class[i]];
467 cout <<
"l == 0" << endl;
470 for (j = 0; j < l; j++) {
474 cout <<
"orthogonal::report_schemes before Stack->split_cell_front_or_back for lines" << endl;
489 cout <<
"orthogonal::report_schemes before Stack->get_row_and_col_classes" << endl;
492 row_classes, nb_row_classes,
493 col_classes, nb_col_classes, 0 );
496 cout <<
"orthogonal::report_schemes before Stack->print_row_tactical_decomposition_scheme_tex" << endl;
499 row_classes, nb_row_classes,
500 col_classes, nb_col_classes,
504 cout <<
"orthogonal::report_schemes before Stack->print_column_tactical_decomposition_scheme_tex" << endl;
507 row_classes, nb_row_classes,
508 col_classes, nb_col_classes,
523 cout <<
"orthogonal::report_schemes done" << endl;
548 int f_v = (verbose_level >= 1);
552 cout <<
"orthogonal::create_latex_report" << endl;
561 snprintf(str, 1000,
"O_%d_%d_%d.tex",
epsilon,
n,
F->
q);
563 snprintf(title, 1000,
"Orthogonal Space ${\\rm O}(%d,%d,%d)$",
epsilon,
n,
F->
q);
585 cout <<
"orthogonal::create_latex_report before report" << endl;
587 report(ost, verbose_level);
589 cout <<
"orthogonal::create_latex_report after report" << endl;
598 cout <<
"written file " << fname <<
" of size "
603 cout <<
"orthogonal::create_latex_report done" << endl;
609 int f_v = (verbose_level >= 1);
612 cout <<
"orthogonal::export_incidence_matrix_to_csv" << endl;
621 long int i, line_rk, h;
626 T =
NEW_int(N_points * N_lines);
629 for (line_rk = 0; line_rk < N_lines; line_rk++) {
633 line, verbose_level);
635 for (h = 0; h <
q + 1; h++) {
637 T[i * N_lines + line_rk] = 1;
647 cout <<
"Written file " << fname <<
" of size " << Fio.
file_size(fname) << endl;
654 cout <<
"orthogonal::export_incidence_matrix_to_csv done" << endl;
661 fname.append(
"_incidence_matrix.csv");
data structure for set partitions following Jeffrey Leon
void get_row_and_col_classes(int *row_classes, int &nb_row_classes, int *col_classes, int &nb_col_classes, int verbose_level)
void split_cell_front_or_back(int *set, int set_size, int f_front, int verbose_level)
void print_row_tactical_decomposition_scheme_tex(std::ostream &ost, int f_enter_math_mode, int *row_classes, int nb_row_classes, int *col_classes, int nb_col_classes, int *row_scheme, int f_print_subscripts)
void print_column_tactical_decomposition_scheme_tex(std::ostream &ost, int f_enter_math_mode, int *row_classes, int nb_row_classes, int *col_classes, int nb_col_classes, int *col_scheme, int f_print_subscripts)
void allocate_with_two_classes(int n, int v, int b, int verbose_level)
a collection of functions related to sorted vectors
void lint_vec_heapsort(long int *v, int len)
a collection of functions related to file io
void int_matrix_write_csv(std::string &fname, int *M, int m, int n)
long int file_size(std::string &fname)
interface to create latex output files
void print_row_tactical_decomposition_scheme_tex(std::ostream &ost, int f_enter_math_mode, long int *row_class_size, int nb_row_classes, long int *col_class_size, int nb_col_classes, long int *row_scheme)
void print_column_tactical_decomposition_scheme_tex(std::ostream &ost, int f_enter_math_mode, long int *row_class_size, int nb_row_classes, long int *col_class_size, int nb_col_classes, long int *col_scheme)
void lint_set_print_masked_tex(std::ostream &ost, long int *v, int len, const char *mask_begin, const char *mask_end)
void print_integer_matrix_tex(std::ostream &ost, int *p, int m, int n)
int test_if_minimal_on_line(int *v1, int *v2, int *v3)
void list_points_of_given_type(int t, int verbose_level)
void points_on_line_by_line_rank(long int line_rk, long int *line, int verbose_level)
void report_schemes(std::ostream &ost, int verbose_level)
void list_points_vs_points(int t1, int t2, int verbose_level)
field_theory::finite_field * F
void unrank_point(int *v, int stride, long int rk, int verbose_level)
void create_latex_report(int verbose_level)
void report(std::ostream &ost, int verbose_level)
void report_points_of_given_type(std::ostream &ost, int t, int verbose_level)
void make_fname_incidence_matrix_csv(std::string &fname)
void report_points(std::ostream &ost, int verbose_level)
ring_theory::homogeneous_polynomial_domain * Poly
void unrank_line(long int &p1, long int &p2, long int index, int verbose_level)
int evaluate_bilinear_form(int *u, int *v, int stride)
void point_rk_to_type_and_index(long int rk, long int &type, long int &index, int verbose_level)
long int type_and_index_to_point_rk(long int type, long int index, int verbose_level)
void list_points_by_type(int verbose_level)
void export_incidence_matrix_to_csv(int verbose_level)
void points_on_line(long int pi, long int pj, long int *line, int verbose_level)
void report_quadratic_form(std::ostream &ost, int verbose_level)
void report_schemes_easy(std::ostream &ost)
void list_all_points_vs_points(int verbose_level)
void report_points_by_type(std::ostream &ost, int verbose_level)
void report_lines(std::ostream &ost, int verbose_level)
void print_equation_tex(std::ostream &ost, int *coeffs)
#define Int_vec_zero(A, B)
#define Int_vec_copy(A, B, C)
#define Int_vec_print(A, B, C)
the orbiter library for the classification of combinatorial objects