15namespace layer1_foundations {
87 cout <<
"nb of lines through two points:" << endl;
94 int p1,
int p2,
int verbose_level)
96 int h1, h2, l1, l2, nb;
114 int f_v = (verbose_level >= 1);
118 cout <<
"incidence_structure::init_projective_space" << endl;
131 for (i = 0; i <
nb_rows; i++) {
134 for (i = 0; i <
nb_cols; i++) {
143 cout <<
"incidence_structure::init_projective_space nb_rows=" <<
nb_rows << endl;
144 cout <<
"incidence_structure::init_projective_space nb_cols=" <<
nb_cols << endl;
150 int f_v = (verbose_level >= 1);
155 cout <<
"incidence_structure::init_hjelmslev" << endl;
166 cout <<
"incidence_structure::init_hjelmslev nb_rows=" <<
nb_rows << endl;
167 cout <<
"incidence_structure::init_hjelmslev nb_cols=" <<
nb_cols << endl;
182 for (i = 0; i <
nb_rows; i++) {
183 for (j = 0; j <
nb_cols; j++) {
184 cout <<
"i=" << i <<
" j=" << j << endl;
191 cout <<
"after Gauss:" << endl;
193 cout <<
"the rank is " << mtx_rk << endl;
195 for (h = 0; h < n; h++) {
196 if (Mtx[
k * n + h]) {
202 cout <<
"the last row is nonzero, the point is "
203 "not on the line" << endl;
209 cout <<
"the last row is zero, the point is on "
216 if (mtx_rk ==
H->
k) {
226 cout <<
"incidence matrix" << endl;
239 cout <<
"incidence_structure::init_hjelmslev done" << endl;
246 int f_v = (verbose_level >= 1);
251 cout <<
"incidence_structure::init_orthogonal" << endl;
263 for (i = 0; i <
nb_rows; i++) {
266 for (i = 0; i <
nb_cols; i++) {
270 cout <<
"incidence_structure::init_orthogonal done" << endl;
275 int nb_inc,
int *X,
int verbose_level)
281 for (i = 0; i < m * n; i++) {
284 for (h = 0; h < nb_inc; h++) {
293 int *R,
int *X,
int max_r,
int verbose_level)
295 int f_v = (verbose_level >= 1);
300 cout <<
"incidence_structure::init_by_R_and_X "
301 "m=" << m <<
" n=" << n << endl;
304 for (i = 0; i < m * n; i++) {
307 for (i = 0; i < m; i++) {
308 for (h = 0; h < R[i]; h++) {
309 j = X[i *
max_r + h];
319 int f_v = (verbose_level >= 1);
324 cout <<
"incidence_structure::init_by_set_of_sets" << endl;
330 for (i = 0; i < m; i++) {
331 for (h = 0; h < SoS->
Set_size[i]; h++) {
338 cout <<
"incidence_structure::init_by_set_of_sets done" << endl;
343 int m,
int n,
int *M,
int verbose_level)
346 int f_v = (verbose_level >= 1);
350 cout <<
"incidence_structure::init_by_matrix "
351 "m=" << m <<
" n=" << n << endl;
359 for (i = 0; i < m * n; i++) {
364 cout <<
"incidence_structure::init_by_matrix done" << endl;
373 int f_v = (verbose_level >= 1);
377 cout <<
"incidence_structure::init_by_matrix_as_bitvector "
378 "m=" << m <<
" n=" << n << endl;
386 for (i = 0; i < m; i++) {
387 for (j = 0; j < n; j++) {
388 M[i] = Bitmatrix->
s_ij(i, j);
394 cout <<
"incidence_structure::init_by_matrix_as_bitvector "
402 int f_v = (verbose_level >= 1);
407 cout <<
"incidence_structure::init_by_matrix2" << endl;
409 for (i = 0; i < m; i++) {
411 for (j = 0; j < n; j++) {
417 for (j = 0; j < n; j++) {
419 for (i = 0; i < m; i++) {
427 for (i = 1; i < m; i++) {
437 cout <<
"incidence_structure::init_by_matrix2 "
438 "min_r=" <<
min_r <<
" max_r=" <<
max_r << endl;
443 for (j = 1; j < n; j++) {
453 cout <<
"incidence_structure::init_by_matrix2 "
454 "min_k=" <<
min_k <<
" max_k=" <<
max_k << endl;
473 for (i = 0; i < m *
max_r; i++) {
476 for (i = 0; i < n *
max_k; i++) {
479 for (i = 0; i < m; i++) {
481 for (j = 0; j < n; j++) {
487 for (j = 0; j < n; j++) {
489 for (i = 0; i < m; i++) {
497 cout <<
"lines_on_point:" << endl;
498 print_integer_matrix_width(cout,
500 cout <<
"points_on_line:" << endl;
501 print_integer_matrix_width(cout,
506 cout <<
"incidence_structure::init_by_matrix2 done" << endl;
555 cout <<
"incidence_structure::get_ij fatal: rk=" << rk << endl;
558 cout <<
"incidence_structure::get_ij: unknown realization_type";
564 int f_v = (verbose_level >= 1);
568 cout <<
"incidence_structure::get_lines_on_point" << endl;
571 cout <<
"incidence_structure::get_lines_on_point "
572 "i=" << i <<
" is illegal" << endl;
595 for (h = 0; h <
P->
r; h++) {
602 cout <<
"incidence_structure::get_lines_on_point "
603 "fatal: unknown realization_type";
607 cout <<
"incidence_structure::get_lines_on_point pt = " << i <<
" : ";
610 cout <<
"incidence_structure::get_lines_on_point done" << endl;
617 int f_v = (verbose_level >= 1);
621 cout <<
"incidence_structure::get_points_on_line" << endl;
651 for (h = 0; h <
P->
k; h++) {
658 cout <<
"incidence_structure::get_points_on_line "
659 "fatal: unknown realization_type";
663 cout <<
"incidence_structure::get_points_on_line "
664 "line = " << j <<
" : ";
667 cout <<
"incidence_structure::get_points_on_line done" << endl;
680 for (i = 0; i <
nb_rows; i++) {
681 for (j = 0; j <
nb_cols; j++) {
699 for (i = 0; i <
nb_rows; i++) {
700 for (j = 0; j <
nb_cols; j++) {
719 cout <<
"incidence_structure::save_row_by_row_file "
720 "rowsums are not constant" << endl;
726 for (i = 0; i <
nb_rows; i++) {
727 for (j = 0; j <
r; j++) {
741 cout <<
"incidence_structure::print nb_cols == 0" << endl;
744 for (i = 0; i <
nb_rows; i++) {
745 for (j = 0; j <
nb_cols; j++) {
759 int depth,
int &step,
int &f_refine,
int &f_refine_prev,
762 int f_v = (verbose_level >= 1);
765 cout <<
"incidence_structure::compute_TDO_safe_first" << endl;
768 f_refine_prev =
TRUE;
773 int depth,
int &step,
int &f_refine,
int &f_refine_prev,
777 int f_v = (verbose_level >= 1);
778 int f_vv = (verbose_level >= 2);
779 int f_vvv = (verbose_level >= 3);
782 cout <<
"incidence_structure::compute_TDO_safe_next" << endl;
786 PStack, verbose_level - 3);
790 PStack, verbose_level - 3);
794 cout <<
"incidence_structure::compute_TDO_safe_next "
795 "step=" << step <<
" after refine" << endl;
799 int f_list_incidences =
FALSE;
801 f_list_incidences,
FALSE, verbose_level);
805 int f_list_incidences =
FALSE;
807 f_list_incidences,
FALSE, verbose_level);
812 if (!f_refine_prev && !f_refine) {
815 f_refine_prev = f_refine;
820 int depth,
int verbose_level)
822 int f_v = (verbose_level >= 1);
825 int f_refine, f_refine_prev;
829 cout <<
"incidence_structure::compute_TDO_safe" << endl;
832 f_refine_prev =
TRUE;
833 for (i = 0; i < depth; i++) {
835 cout <<
"incidence_structure::compute_TDO_safe i = " << i << endl;
841 cout <<
"incidence_structure::compute_TDO_safe before refine_column_partition_safe" << endl;
845 cout <<
"incidence_structure::compute_TDO_safe after refine_column_partition_safe" << endl;
850 cout <<
"incidence_structure::compute_TDO_safe before refine_row_partition_safe" << endl;
854 cout <<
"incidence_structure::compute_TDO_safe after refine_row_partition_safe" << endl;
859 cout <<
"incidence_structure::compute_TDO_safe "
860 "i=" << i <<
" after refine" << endl;
862 int f_list_incidences =
FALSE;
864 f_list_incidences,
FALSE, verbose_level);
868 int f_list_incidences =
FALSE;
870 f_list_incidences,
FALSE, verbose_level);
875 if (!f_refine_prev && !f_refine) {
877 cout <<
"incidence_structure::compute_TDO_safe "
878 "no refinement, we are done" << endl;
882 f_refine_prev = f_refine;
887 cout <<
"incidence_structure::compute_TDO_safe done" << endl;
894 int depth,
int verbose_level)
896 int h1, h2, ht1, remaining_depth = depth;
897 int f_v = (verbose_level >= 1);
906 cout <<
"incidence_structure::compute_TDO "
907 "depth=" << depth <<
" ht=" << PStack.
ht << endl;
908 if (ht0 >= PStack.
ht) {
909 cout <<
"ht0 >= PStack.ht, fatal" << endl;
913 while (remaining_depth) {
916 cout <<
"incidence_structure::compute_TDO "
917 "remaining_depth=" << remaining_depth << endl;
919 if (remaining_depth) {
930 cout <<
"incidence_structure::compute_TDO after "
931 "compute_TDO_step ht0=" << ht0 <<
" ht1=" << ht1 << endl;
944 int f_v = (verbose_level >= 1);
945 int f_vv = (verbose_level >= 2);
946 int f_vvv = (verbose_level >= 3);
953 cout <<
"incidence_structure::compute_TDO_step "
954 "ht=" << PStack.
ht <<
" ht0=" << ht0 << endl;
955 cout <<
"before PStack.is_row_class" << endl;
959 cout <<
"after PStack.is_row_class" << endl;
961 if (f_is_row_class) {
963 cout <<
"incidence_structure::compute_TDO_step before "
964 "refine_column_partition ht0=" << ht0
965 <<
" ht1=" << ht1 << endl;
971 cout <<
"incidence_structure::compute_TDO_step after "
972 "refine_column_partition ht=" << PStack.
ht << endl;
975 int f_list_incidences =
FALSE;
977 f_list_incidences,
FALSE, verbose_level);
985 cout <<
"incidence_structure::compute_TDO_step before "
986 "refine_column_partition ht0=" << ht0
987 <<
" ht1=" << ht1 << endl;
994 cout <<
"incidence_structure::compute_TDO_step after "
995 "refine_row_partition ht=" << PStack.
ht << endl;
998 int f_list_incidences =
FALSE;
1000 PStack, f_list_incidences,
FALSE, verbose_level);
1011 int *row_classes,
int *row_class_idx,
int &nb_row_classes,
1012 int *col_classes,
int *col_class_idx,
int &nb_col_classes)
1017 row_classes, nb_row_classes,
1018 col_classes, nb_col_classes, 0 );
1019 for (i = 0; i < PStack.
ht; i++) {
1020 row_class_idx[i] = col_class_idx[i] = -1;
1022 for (i = 0; i < nb_row_classes; i++) {
1024 row_class_idx[c] = i;
1026 for (i = 0; i < nb_col_classes; i++) {
1028 col_class_idx[c] = i;
1036 int f_v = (verbose_level >= 1);
1037 int f_vv = (verbose_level >= 5);
1038 int i, j, c, h, I, ht, first, next, N;
1050 cout <<
"incidence_structure::refine_column_partition_safe" << endl;
1053 cout <<
"incidence_structure::refine_column_partition_safe PStack.ht" << PStack.
ht << endl;
1061 cout <<
"incidence_structure::refine_column_partition_safe "
1062 "before get_partition" << endl;
1065 row_classes, row_class_idx, nb_row_classes,
1066 col_classes, col_class_idx, nb_col_classes);
1068 cout <<
"incidence_structure::refine_column_partition_safe "
1069 "after get_partition" << endl;
1074 cout <<
"incidence_structure::refine_column_partition_safe nb_row_classes= " << nb_row_classes << endl;
1076 data =
NEW_int(N * nb_row_classes);
1086 I = row_class_idx[c];
1088 cout <<
"incidence_structure::refine_column_partition_safe "
1092 data[(
nb_points() + j) * nb_row_classes + I]++;
1096 cout <<
"incidence_structure::refine_column_partition_safe "
1100 nb_lines(), nb_row_classes, nb_row_classes, 3);
1105 for (c = 0; c < ht; c++) {
1118 data, nb_row_classes, 0 ,
FALSE);
1129 cout <<
"incidence_structure::refine_column_partition_safe done" << endl;
1131 if (PStack.
ht == ht) {
1143 int f_v = (verbose_level >= 1);
1144 int f_vv = (verbose_level >= 5);
1145 int i, j, c, h, J, ht, first, next;
1157 cout <<
"incidence_structure::refine_row_partition_safe" << endl;
1165 cout <<
"incidence_structure::refine_row_partition_safe before get_partition" << endl;
1168 row_classes, row_class_idx, nb_row_classes,
1169 col_classes, col_class_idx, nb_col_classes);
1171 cout <<
"incidence_structure::refine_row_partition_safe after get_partition" << endl;
1174 cout <<
"incidence_structure::refine_row_partition_safe nb_col_classes=" << nb_col_classes << endl;
1188 J = col_class_idx[c];
1190 cout <<
"incidence_structure::refine_row_partition_safe J == -1" << endl;
1193 data[i * nb_col_classes + J]++;
1197 cout <<
"incidence_structure::refine_row_partition_safe data:" << endl;
1199 nb_col_classes, nb_col_classes, 3);
1204 for (c = 0; c < ht; c++) {
1217 data, nb_col_classes, 0 ,
FALSE);
1228 cout <<
"incidence_structure::refine_row_partition_safe done" << endl;
1230 if (PStack.
ht == ht) {
1240 int ht0,
int verbose_level)
1242 int f_v = (verbose_level >= 1);
1243 int f_vv = (verbose_level >= 2);
1244 int f_vvv = (verbose_level >= 3);
1245 int row_cell, f, l, i, j, x, y, u, c, cell;
1246 int N, first, next, ht1, depth, idx, nb;
1252 depth = ht1 - ht0 + 1;
1254 cout <<
"incidence_structure::refine_column_partition "
1255 "ht0=" << ht0 <<
" ht=" << PStack.
ht
1256 <<
" depth=" << depth << endl;
1257 cout <<
"N=" << N << endl;
1258 cout <<
"depth=" << depth << endl;
1259 cout <<
"max_r=" <<
max_r << endl;
1268 data[j * depth + 0] = c;
1271 for (row_cell = ht0; row_cell < ht1; row_cell++) {
1272 idx = row_cell - ht0;
1276 cout <<
"incidence_structure::refine_column_partition "
1278 <<
" row_cell=" << row_cell
1279 <<
" f=" << f <<
" l=" << l << endl;
1282 cout <<
"row_cell is not a row cell" << endl;
1283 cout <<
"row_cell=" << row_cell << endl;
1284 cout <<
"ht0=" << ht0 << endl;
1285 cout <<
"ht1=" << ht1 << endl;
1292 for (i = 0; i < l; i++) {
1296 cout <<
"before get_lines_on_point" << endl;
1300 cout <<
"after get_lines_on_point nb=" << nb << endl;
1307 for (u = 0; u < nb; u++) {
1310 data[j * depth + 1 + idx]++;
1316 cout <<
"data:" << endl;
1319 cout << y <<
" : " << j <<
" : ";
1320 int_vec_print(cout, data + j * depth, depth);
1328 for (cell = 0; cell < ht0; cell++) {
1337 next = first + PStack.
cellSize[cell];
1341 data, depth, 0 ,
FALSE);
1344 cout <<
"incidence_structure::refine_column_partition "
1345 "after sorting, with " << PStack.
ht - ht0
1346 <<
" n e w classes" << endl;
1364 int ht0,
int verbose_level)
1366 int f_v = (verbose_level >= 1);
1367 int f_vv = (verbose_level >= 2);
1368 int f_vvv = (verbose_level >= 3);
1369 int col_cell, f, l, i, j, x, y, u, c, cell;
1370 int N, first, next, ht1, depth, idx, nb;
1372 int *neighbors, nb_neighbors, h;
1376 depth = ht1 - ht0 + 1;
1378 cout <<
"incidence_structure::refine_row_partition "
1379 "ht0=" << ht0 <<
" ht=" << PStack.
ht
1380 <<
" depth=" << depth << endl;
1385 nb_neighbors =
max_k;
1386 neighbors =
NEW_int(nb_neighbors);
1390 data[i * depth + 0] = c;
1393 for (col_cell = ht0; col_cell < ht1; col_cell++) {
1394 idx = col_cell - ht0;
1398 cout <<
"incidence_structure::refine_row_partition "
1400 <<
" col_cell=" << col_cell
1402 <<
" l=" << l << endl;
1406 cout <<
"col_cell is not a col cell" << endl;
1407 cout <<
"ht0=" << ht0 << endl;
1408 cout <<
"ht1=" << ht1 << endl;
1416 for (j = 0; j < l; j++) {
1426 for (u = 0; u < nb; u++) {
1429 data[i * depth + 1 + idx]++;
1435 cout <<
"data:" << endl;
1438 int_vec_print(cout, data + i * depth, depth);
1446 for (cell = 0; cell < ht0; cell++) {
1455 next = first + PStack.
cellSize[cell];
1459 data, depth, 0 ,
FALSE);
1462 cout <<
"incidence_structure::refine_row_partition "
1463 "after sorting, with " << PStack.
ht - ht0
1464 <<
" n e w classes" << endl;
1483 ostream &ost,
int f_enter_math_mode,
1484 int *row_classes,
int *row_class_inv,
int nb_row_classes,
1485 int *col_classes,
int *col_class_inv,
int nb_col_classes,
1486 int f_local_coordinates,
int verbose_level)
1488 int f_v = (verbose_level >= 1);
1490 int c1, c2, f1, f2, l1;
1492 int u, v, x, a, b, c, J;
1498 cout <<
"incidence_structure::print_row_tactical_decomposition_scheme_incidences_tex" << endl;
1501 row_scheme =
NEW_int(nb_row_classes * nb_col_classes);
1504 row_classes, row_class_inv, nb_row_classes,
1505 col_classes, col_class_inv, nb_col_classes,
1506 row_scheme, verbose_level - 2);
1509 for (i = 0; i < nb_row_classes; i++) {
1510 c1 = row_classes[i];
1514 for (j = 0; j < nb_col_classes; j++) {
1516 rij = row_scheme[i * nb_col_classes + j];
1524 row_classes, row_class_inv, nb_row_classes,
1525 col_classes, col_class_inv, nb_col_classes,
1527 rij, incidences, verbose_level - 2);
1529 c2 = col_classes[j];
1533 ost <<
"\\subsubsection*{Row class " << i
1534 <<
" (cell " << c1 <<
") vs. col class "
1535 << j <<
" (cell " << c2 <<
")";
1536 if (f_local_coordinates) {
1537 ost <<
" (in local coordinates)";
1539 ost <<
", $r_{" << i <<
", " << j <<
"}=" << rij <<
"$}" << endl;
1542 for (u = 0; u < l1; u++) {
1544 ost << setw(4) << u <<
" : $P_{" << setw(4) << x
1545 <<
"}$ is incident with ";
1546 for (v = 0; v < rij; v++) {
1547 a = incidences[u * rij + v];
1548 if (f_local_coordinates) {
1551 J = col_class_inv[c];
1553 cout <<
"incidence_structure::print_row_"
1554 "tactical_decomposition_scheme_"
1555 "incidences_tex J != j" << endl;
1556 cout <<
"j=" << j << endl;
1557 cout <<
"J=" << J << endl;
1566 for (v = 0; v < rij; v++) {
1567 ost <<
"\\ell_{" << setw(4) << S[v] <<
"}";
1574 ost <<
"\\\\" << endl;
1587 ostream &ost,
int f_enter_math_mode,
1588 int *row_classes,
int *row_class_inv,
int nb_row_classes,
1589 int *col_classes,
int *col_class_inv,
int nb_col_classes,
1590 int f_local_coordinates,
int verbose_level)
1592 int f_v = (verbose_level >= 1);
1594 int c1, c2, f1, f2, l2;
1596 int u, v, y, a, b, c, I;
1602 cout <<
"incidence_structure::print_col_tactical_decomposition_scheme_incidences_tex" << endl;
1605 col_scheme =
NEW_int(nb_row_classes * nb_col_classes);
1608 row_classes, row_class_inv, nb_row_classes,
1609 col_classes, col_class_inv, nb_col_classes,
1610 col_scheme, verbose_level - 2);
1613 for (i = 0; i < nb_row_classes; i++) {
1614 c1 = row_classes[i];
1618 for (j = 0; j < nb_col_classes; j++) {
1620 kij = col_scheme[i * nb_col_classes + j];
1628 row_classes, row_class_inv, nb_row_classes,
1629 col_classes, col_class_inv, nb_col_classes,
1631 kij, incidences, verbose_level - 2);
1633 c2 = col_classes[j];
1637 ost <<
"\\subsubsection*{Row class " << i
1638 <<
" (cell " << c1 <<
") vs. col class "
1639 << j <<
" (cell " << c2 <<
")";
1640 if (f_local_coordinates) {
1641 ost <<
" (in local coordinates)";
1643 ost <<
", $k_{" << i <<
", " << j <<
"}="
1644 << kij <<
"$}" << endl;
1647 for (u = 0; u < l2; u++) {
1649 ost << setw(4) << u <<
" : $\\ell_{" << setw(4)
1650 << y <<
"}$ is incident with ";
1651 for (v = 0; v < kij; v++) {
1652 a = incidences[u * kij + v];
1653 if (f_local_coordinates) {
1656 I = row_class_inv[c];
1658 cout <<
"incidence_structure::print_col_"
1659 "tactical_decomposition_scheme_"
1660 "incidences_tex I != i" << endl;
1661 cout <<
"i=" << i << endl;
1662 cout <<
"I=" << I << endl;
1671 for (v = 0; v < kij; v++) {
1672 ost <<
"P_{" << setw(4) << S[v] <<
"}";
1679 ost <<
"\\\\" << endl;
1692 int *row_classes,
int *row_class_inv,
int nb_row_classes,
1693 int *col_classes,
int *col_class_inv,
int nb_col_classes,
1694 int row_class_idx,
int col_class_idx,
1695 int rij,
int *&incidences,
int verbose_level)
1697 int f_v = (verbose_level >= 1);
1698 int c1, c2, f1, l1, x, nb, u, y, c, i, j;
1703 cout <<
"incidence_structure::get_incidences_by_row_scheme" << endl;
1705 c1 = row_classes[row_class_idx];
1708 c2 = col_classes[col_class_idx];
1711 incidences =
NEW_int(l1 * rij);
1714 for (i = 0; i < l1; i++) {
1717 for (i = 0; i < l1; i++) {
1721 for (u = 0; u < nb; u++) {
1726 incidences[i * rij + sz[i]++] = y;
1731 for (i = 0; i < l1; i++) {
1733 cout <<
"sz[i] != rij" << endl;
1744 int *row_classes,
int *row_class_inv,
int nb_row_classes,
1745 int *col_classes,
int *col_class_inv,
int nb_col_classes,
1746 int row_class_idx,
int col_class_idx,
1747 int kij,
int *&incidences,
int verbose_level)
1749 int f_v = (verbose_level >= 1);
1750 int c1, c2, f2, l2, x, nb, u, y, c, i, j;
1755 cout <<
"incidence_structure::get_incidences_by_col_scheme" << endl;
1757 c1 = row_classes[row_class_idx];
1760 c2 = col_classes[col_class_idx];
1763 incidences =
NEW_int(l2 * kij);
1766 for (j = 0; j < l2; j++) {
1769 for (j = 0; j < l2; j++) {
1772 for (u = 0; u < nb; u++) {
1777 incidences[j * kij + sz[j]++] = x;
1782 for (j = 0; j < l2; j++) {
1784 cout <<
"sz[j] != kij" << endl;
1796 int *row_classes,
int *row_class_inv,
int nb_row_classes,
1797 int *col_classes,
int *col_class_inv,
int nb_col_classes,
1798 int *row_scheme,
int verbose_level)
1800 int f_v = (verbose_level >= 1);
1801 int I, J, i, j, c1, f1, l1, x, y, u, c, nb;
1807 cout <<
"incidence_structure::get_row_decomposition_scheme" << endl;
1810 data0 =
NEW_int(nb_col_classes);
1811 data1 =
NEW_int(nb_col_classes);
1812 Int_vec_zero(row_scheme, nb_row_classes * nb_col_classes);
1813 for (I = 0; I < nb_row_classes; I++) {
1814 c1 = row_classes[I];
1818 for (i = 0; i < l1; i++) {
1822 for (u = 0; u < nb; u++) {
1826 J = col_class_inv[c];
1833 for (J = 0; J < nb_col_classes; J++) {
1834 if (data0[J] != data1[J]) {
1835 cout <<
"incidence_structure::get_row_"
1836 "decomposition_scheme not row-tactical "
1837 "I=" << I <<
" i=" << i
1838 <<
" J=" << J << endl;
1845 row_scheme + I * nb_col_classes,
1852 cout <<
"incidence_structure::get_row_decomposition_scheme done" << endl;
1858 int *row_classes,
int *row_class_inv,
int nb_row_classes,
1859 int *col_classes,
int *col_class_inv,
int nb_col_classes,
1860 int *row_scheme,
int verbose_level)
1862 int f_v = (verbose_level >= 1);
1863 int I, J, i, j, c1, f1, l1, x, y, u, c, nb;
1869 cout <<
"incidence_structure::get_row_decomposition_scheme_if_possible" << endl;
1872 data0 =
NEW_int(nb_col_classes);
1873 data1 =
NEW_int(nb_col_classes);
1874 for (i = 0; i < nb_row_classes * nb_col_classes; i++) {
1877 for (I = 0; I < nb_row_classes; I++) {
1878 c1 = row_classes[I];
1881 for (j = 0; j < nb_col_classes; j++) {
1884 for (i = 0; i < l1; i++) {
1886 for (J = 0; J < nb_col_classes; J++) {
1892 for (u = 0; u < nb; u++) {
1896 J = col_class_inv[c];
1900 for (J = 0; J < nb_col_classes; J++) {
1901 data0[J] = data1[J];
1905 for (J = 0; J < nb_col_classes; J++) {
1906 if (data0[J] != data1[J]) {
1914 for (J = 0; J < nb_col_classes; J++) {
1915 row_scheme[I * nb_col_classes + J] = data0[J];
1925 int *row_classes,
int *row_class_inv,
int nb_row_classes,
1926 int *col_classes,
int *col_class_inv,
int nb_col_classes,
1927 int *col_scheme,
int verbose_level)
1929 int f_v = (verbose_level >= 1);
1930 int I, J, i, j, c1, f1, l1, x, y, u, c, nb;
1936 cout <<
"incidence_structure::get_col_decomposition_scheme" << endl;
1939 data0 =
NEW_int(nb_row_classes);
1940 data1 =
NEW_int(nb_row_classes);
1941 for (i = 0; i < nb_row_classes * nb_col_classes; i++) {
1944 for (J = 0; J < nb_col_classes; J++) {
1945 c1 = col_classes[J];
1948 for (i = 0; i < nb_row_classes; i++) {
1951 for (j = 0; j < l1; j++) {
1953 for (I = 0; I < nb_row_classes; I++) {
1961 for (u = 0; u < nb; u++) {
1964 I = row_class_inv[c];
1968 for (I = 0; I < nb_row_classes; I++) {
1969 data0[I] = data1[I];
1973 for (I = 0; I < nb_row_classes; I++) {
1974 if (data0[I] != data1[I]) {
1975 cout <<
"not col-tactical J=" << J
1976 <<
" j=" << j <<
" I=" << I << endl;
1981 for (I = 0; I < nb_row_classes; I++) {
1982 col_scheme[I * nb_col_classes + J] = data0[I];
1992 int *row_classes,
int *row_class_inv,
int nb_row_classes,
1993 int *col_classes,
int *col_class_inv,
int nb_col_classes,
1994 int *row_scheme,
int *col_scheme,
int verbose_level)
1996 int I, J, c1, l1, c2, l2, a, b, c;
1998 for (I = 0; I < nb_row_classes; I++) {
1999 c1 = row_classes[I];
2001 for (J = 0; J < nb_col_classes; J++) {
2002 c2 = col_classes[J];
2004 a = row_scheme[I * nb_col_classes + J];
2007 cout <<
"incidence_structure::row_scheme_to_col_scheme: "
2008 "cannot be tactical" << endl;
2012 col_scheme[I * nb_col_classes + J] = c;
2019 int f_list_incidences,
int f_local_coordinates,
int verbose_level)
2021 int *row_classes, *row_class_inv, nb_row_classes;
2022 int *col_classes, *col_class_inv, nb_col_classes;
2024 int f_v = (verbose_level >= 1);
2027 cout <<
"incidence_structure::get_and_print_row_decomposition_scheme "
2028 "computing col scheme" << endl;
2031 row_classes, row_class_inv, nb_row_classes,
2032 col_classes, col_class_inv, nb_col_classes,
2035 row_scheme =
NEW_int(nb_row_classes * nb_col_classes);
2038 row_classes, row_class_inv, nb_row_classes,
2039 col_classes, col_class_inv, nb_col_classes,
2045 cout <<
"row_scheme:" << endl;
2047 row_classes, nb_row_classes,
2048 col_classes, nb_col_classes,
2049 row_scheme, -1, -1);
2052 if (f_list_incidences) {
2053 cout <<
"incidences by row-scheme:" << endl;
2057 row_classes, row_class_inv, nb_row_classes,
2058 col_classes, col_class_inv, nb_col_classes,
2059 f_local_coordinates, 0 );
2071 int f_list_incidences,
int f_local_coordinates,
int verbose_level)
2073 int *row_classes, *row_class_inv, nb_row_classes;
2074 int *col_classes, *col_class_inv, nb_col_classes;
2076 int f_v = (verbose_level >= 1);
2079 cout <<
"incidence_structure::get_and_print_col_decomposition_scheme "
2080 "computing col scheme" << endl;
2083 row_classes, row_class_inv, nb_row_classes,
2084 col_classes, col_class_inv, nb_col_classes,
2087 col_scheme =
NEW_int(nb_row_classes * nb_col_classes);
2090 row_classes, row_class_inv, nb_row_classes,
2091 col_classes, col_class_inv, nb_col_classes,
2097 cout <<
"col_scheme:" << endl;
2099 row_classes, nb_row_classes,
2100 col_classes, nb_col_classes,
2101 col_scheme, -1, -1);
2104 if (f_list_incidences) {
2105 cout <<
"incidences by col-scheme:" << endl;
2109 row_classes, row_class_inv, nb_row_classes,
2110 col_classes, col_class_inv, nb_col_classes,
2111 f_local_coordinates, 0 );
2124 int *row_classes, *row_class_inv, nb_row_classes;
2125 int *col_classes, *col_class_inv, nb_col_classes;
2126 int *row_scheme, *col_scheme;
2127 int verbose_level = 0;
2128 int f_v = (verbose_level >= 1);
2131 cout <<
"incidence_structure::get_and_print_decomposition_schemes "
2132 "computing both schemes" << endl;
2135 row_classes, row_class_inv, nb_row_classes,
2136 col_classes, col_class_inv, nb_col_classes,
2139 row_scheme =
NEW_int(nb_row_classes * nb_col_classes);
2140 col_scheme =
NEW_int(nb_row_classes * nb_col_classes);
2143 row_classes, row_class_inv, nb_row_classes,
2144 col_classes, col_class_inv, nb_col_classes,
2145 row_scheme, verbose_level);
2148 row_classes, row_class_inv, nb_row_classes,
2149 col_classes, col_class_inv, nb_col_classes,
2150 row_scheme, col_scheme, verbose_level);
2154 cout <<
"row_scheme:" << endl;
2156 row_classes, nb_row_classes,
2157 col_classes, nb_col_classes,
2158 row_scheme, -1, -1);
2160 cout <<
"col_scheme:" << endl;
2162 row_classes, nb_row_classes,
2163 col_classes, nb_col_classes,
2164 col_scheme, -1, -1);
2177 int *row_classes, *row_class_inv, nb_row_classes;
2178 int *col_classes, *col_class_inv, nb_col_classes;
2179 int *row_scheme, *col_scheme;
2180 int verbose_level = 0;
2181 int f_v = (verbose_level >= 1);
2184 cout <<
"incidence_structure::get_and_print_decomposition_schemes_tex "
2185 "computing both schemes" << endl;
2188 row_classes, row_class_inv, nb_row_classes,
2189 col_classes, col_class_inv, nb_col_classes,
2192 row_scheme =
NEW_int(nb_row_classes * nb_col_classes);
2193 col_scheme =
NEW_int(nb_row_classes * nb_col_classes);
2196 row_classes, row_class_inv, nb_row_classes,
2197 col_classes, col_class_inv, nb_col_classes,
2198 row_scheme, verbose_level);
2201 row_classes, row_class_inv, nb_row_classes,
2202 col_classes, col_class_inv, nb_col_classes,
2203 row_scheme, col_scheme, verbose_level);
2207 cout <<
"row_scheme:" << endl;
2209 row_classes, nb_row_classes,
2210 col_classes, nb_col_classes,
2213 cout <<
"col_scheme:" << endl;
2215 row_classes, nb_row_classes,
2216 col_classes, nb_col_classes,
2218 cout <<
"tactical scheme:" << endl;
2220 row_classes, nb_row_classes,
2221 col_classes, nb_col_classes,
2222 row_scheme, col_scheme,
FALSE );
2235 int *row_classes, *row_class_inv, nb_row_classes;
2236 int *col_classes, *col_class_inv, nb_col_classes;
2237 int *row_scheme, *col_scheme;
2238 int verbose_level = 0;
2239 int f_v = (verbose_level >= 1);
2242 cout <<
"incidence_structure::get_and_print_tactical_decomposition_scheme_tex "
2243 "computing both schemes" << endl;
2246 row_classes, row_class_inv, nb_row_classes,
2247 col_classes, col_class_inv, nb_col_classes,
2250 row_scheme =
NEW_int(nb_row_classes * nb_col_classes);
2251 col_scheme =
NEW_int(nb_row_classes * nb_col_classes);
2254 row_classes, row_class_inv, nb_row_classes,
2255 col_classes, col_class_inv, nb_col_classes,
2256 row_scheme, verbose_level);
2259 row_classes, row_class_inv, nb_row_classes,
2260 col_classes, col_class_inv, nb_col_classes,
2261 row_scheme, col_scheme, verbose_level);
2265 row_classes, nb_row_classes,
2266 col_classes, nb_col_classes,
2267 row_scheme, col_scheme,
FALSE );
2278 int *&row_classes,
int *&row_class_inv,
int &nb_row_classes,
2279 int *&col_classes,
int *&col_class_inv,
int &nb_col_classes,
2282 int verbose_level = 0;
2285 row_classes, row_class_inv, nb_row_classes,
2286 col_classes, col_class_inv, nb_col_classes,
2289 scheme =
NEW_int(nb_row_classes * nb_col_classes);
2292 row_classes, row_class_inv, nb_row_classes,
2293 col_classes, col_class_inv, nb_col_classes,
2294 scheme, verbose_level);
2298 row_classes, row_class_inv, nb_row_classes,
2299 col_classes, col_class_inv, nb_col_classes,
2300 scheme, verbose_level);
2305 int *row_classes,
int *row_class_inv,
2306 int *col_classes,
int *col_class_inv,
2317 std::ostream &ost,
int f_enter_math,
int f_print_subscripts,
2320 int *row_classes, *row_class_inv, nb_row_classes;
2321 int *col_classes, *col_class_inv, nb_col_classes;
2323 int verbose_level = 0;
2327 cout <<
"incidence_structure::get_and_print_row_tactical_"
2328 "decomposition_scheme_tex computing row scheme" << endl;
2331 row_classes, row_class_inv, nb_row_classes,
2332 col_classes, col_class_inv, nb_col_classes,
2335 row_scheme =
NEW_int(nb_row_classes * nb_col_classes);
2339 cout <<
"incidence_structure::get_and_print_row_tactical_"
2340 "decomposition_scheme_tex before get_row_"
2341 "decomposition_scheme" << endl;
2344 row_classes, row_class_inv, nb_row_classes,
2345 col_classes, col_class_inv, nb_col_classes,
2346 row_scheme, verbose_level);
2350 cout <<
"incidence_structure::get_and_print_row_tactical_"
2351 "decomposition_scheme_tex before PStack.print_row_"
2352 "tactical_decomposition_scheme_tex" << endl;
2355 row_classes, nb_row_classes,
2356 col_classes, nb_col_classes,
2357 row_scheme, f_print_subscripts);
2368 std::ostream &ost,
int f_enter_math,
int f_print_subscripts,
2371 int *row_classes, *row_class_inv, nb_row_classes;
2372 int *col_classes, *col_class_inv, nb_col_classes;
2374 int verbose_level = 0;
2378 cout <<
"incidence_structure::get_and_print_column_"
2379 "tactical_decomposition_scheme_tex computing "
2380 "column scheme" << endl;
2383 row_classes, row_class_inv, nb_row_classes,
2384 col_classes, col_class_inv, nb_col_classes,
2388 col_scheme =
NEW_int(nb_row_classes * nb_col_classes);
2391 row_classes, row_class_inv, nb_row_classes,
2392 col_classes, col_class_inv, nb_col_classes,
2393 col_scheme, verbose_level);
2398 row_classes, nb_row_classes,
2399 col_classes, nb_col_classes,
2400 col_scheme, f_print_subscripts);
2413 int *row_classes, *row_class_inv, nb_row_classes;
2414 int *col_classes, *col_class_inv, nb_col_classes;
2416 int verbose_level = 0;
2420 cout <<
"incidence_structure::print_non_tactical_decomposition_scheme_tex" << endl;
2423 row_classes, row_class_inv, nb_row_classes,
2424 col_classes, col_class_inv, nb_col_classes,
2427 row_scheme =
NEW_int(nb_row_classes * nb_col_classes);
2430 row_classes, row_class_inv, nb_row_classes,
2431 col_classes, col_class_inv, nb_col_classes,
2432 row_scheme, verbose_level);
2436 row_classes, nb_row_classes,
2437 col_classes, nb_col_classes,
2438 row_scheme,
FALSE );
2449 int row_cell,
int i,
int *col_classes,
int nb_col_classes,
2450 int width,
int f_labeled)
2453 int J, j, h, l, cell;
2454 int first_column_element =
P.startCell[1];
2456 f1 =
P.startCell[row_cell];
2457 e1 =
P.pointList[f1 + i];
2459 ost << setw((
int) width) << e1;
2461 for (J = 0; J <= nb_col_classes; J++) {
2463 if (J == nb_col_classes)
2465 cell = col_classes[J];
2466 f2 =
P.startCell[cell];
2467 l =
P.cellSize[cell];
2468 for (j = 0; j < l; j++) {
2469 e2 =
P.pointList[f2 + j] - first_column_element;
2472 ost << setw((
int) width) << e1 *
nb_lines() + e2;
2481 for (h = 0; h < width - 1; h++) {
2498 int *col_classes,
int nb_col_classes,
int width)
2501 int J, j, h, l, cell;
2502 int first_column_element =
P.startCell[1];
2504 for (h = 0; h < width; h++) {
2507 for (J = 0; J <= nb_col_classes; J++) {
2509 if (J == nb_col_classes) {
2512 cell = col_classes[J];
2513 f2 =
P.startCell[cell];
2514 l =
P.cellSize[cell];
2515 for (j = 0; j < l; j++) {
2516 e2 =
P.pointList[f2 + j] - first_column_element;
2517 ost << setw((
int) width) << e2 + first_column_element;
2525 int *col_classes,
int nb_col_classes,
int width,
int f_labeled)
2527 int J, j, h, l, cell;
2530 for (h = 0; h < width; h++) {
2537 for (J = 0; J <= nb_col_classes; J++) {
2539 if (J == nb_col_classes) {
2542 cell = col_classes[J];
2543 l =
P.cellSize[cell];
2544 for (j = 0; j < l; j++) {
2546 for (h = 0; h < width; h++) {
2579 P.get_row_and_col_classes(row_classes, nb_row_classes,
2580 col_classes, nb_col_classes, 0 );
2586 col_classes, nb_col_classes, width);
2588 for (I = 0; I <= nb_row_classes; I++) {
2590 nb_col_classes, width, f_labeled);
2591 cell = row_classes[I];
2592 if (I < nb_row_classes) {
2593 l =
P.cellSize[cell];
2594 for (i = 0; i < l; i++) {
2596 col_classes, nb_col_classes, width, f_labeled);
2607 int *Adj,
int verbose_level)
2610 int f_v = (verbose_level >= 1);
2614 cout <<
"incidence_structure::point_collinearity_graph" << endl;
2635 cout <<
"incidence_structure::point_collinearity_graph "
2636 "the graph is:" << endl;
2643 int *Adj,
int verbose_level)
2646 int f_v = (verbose_level >= 1);
2647 int i, j, h, l, m, u;
2650 cout <<
"incidence_structure::line_intersection_graph" << endl;
2671 cout <<
"incidence_structure::line_intersection_graph "
2672 "the graph is:" << endl;
2681 cout <<
"incidence_structure::latex_it" << endl;
2682 cout <<
"currently disabled" << endl;
2721 int i, j, ii, jj, c, a, h;
2728 P.get_row_and_col_classes(row_classes, nb_row_classes,
2729 col_classes, nb_col_classes, 0 );
2733 nb_V = nb_row_classes;
2734 nb_B = nb_col_classes;
2737 for (i = 0; i < nb_row_classes; i++) {
2742 for (i = 0; i < nb_col_classes; i++) {
2753 P.get_row_and_col_permutation(
2754 row_classes, nb_row_classes,
2755 col_classes, nb_col_classes,
2756 row_perm, row_perm_inv,
2757 col_perm, col_perm_inv);
2760 cout <<
"row_perm:" << endl;
2761 int_vec_print(cout, row_perm,
nb_points());
2763 cout <<
"col_perm:" << endl;
2764 int_vec_print(cout, col_perm,
nb_lines());
2772 ii = row_perm_inv[i];
2777 X[i *
max_r + h] = j;
2800 int f_row_tactical,
int f_col_tactical,
2801 int f_detailed,
int f_local_coordinates,
int verbose_level)
2803 int *row_classes, *row_class_inv, nb_row_classes;
2804 int *col_classes, *col_class_inv, nb_col_classes;
2805 int f_v = (verbose_level >= 1);
2808 cout <<
"incidence_structure::decomposition_print_tex get decomposition" << endl;
2811 row_classes, row_class_inv, nb_row_classes,
2812 col_classes, col_class_inv, nb_col_classes,
2815 ost <<
"\\subsection*{Decomposition}" << endl;
2817 col_classes, nb_col_classes);
2819 if (f_row_tactical) {
2821 row_scheme =
NEW_int(nb_row_classes * nb_col_classes);
2823 row_classes, row_class_inv, nb_row_classes,
2824 col_classes, col_class_inv, nb_col_classes,
2827 cout <<
"incidence_structure::decomposition_"
2828 "print_tex row_scheme:" << endl;
2829 cout <<
"row_scheme:" << endl;
2831 row_classes, nb_row_classes,
2832 col_classes, nb_col_classes,
2833 row_scheme, -1, -1);
2837 ost <<
"\\subsection*{Incidences by row-scheme}" << endl;
2841 row_classes, row_class_inv, nb_row_classes,
2842 col_classes, col_class_inv, nb_col_classes,
2843 f_local_coordinates, 0 );
2847 if (f_col_tactical) {
2849 col_scheme =
NEW_int(nb_row_classes * nb_col_classes);
2851 row_classes, row_class_inv, nb_row_classes,
2852 col_classes, col_class_inv, nb_col_classes,
2855 cout <<
"incidence_structure::decomposition_"
2856 "print_tex col_scheme:" << endl;
2857 cout <<
"col_scheme:" << endl;
2859 row_classes, nb_row_classes,
2860 col_classes, nb_col_classes,
2861 col_scheme, -1, -1);
2865 ost <<
"\\subsection*{Incidences by col-scheme}" << endl;
2869 row_classes, row_class_inv, nb_row_classes,
2870 col_classes, col_class_inv, nb_col_classes,
2871 f_local_coordinates, 0 );
2890 int f_tdo_steps,
int f_tdo_depth,
int tdo_depth,
2891 int f_write_tdo_files,
int f_pic,
2892 int f_include_tdo_scheme,
int f_include_tdo_extra,
2893 int f_write_tdo_class_files,
2896 int f_v = (verbose_level >= 1);
2900 cout <<
"incidence_structure::do_tdo_high_level" << endl;
2904 TDO_depth = tdo_depth;
2915 f_include_tdo_scheme,
2916 f_include_tdo_extra,
2923 f_include_tdo_scheme,
2926 if (f_write_tdo_class_files) {
2927 int *row_classes, *row_class_inv, nb_row_classes;
2928 int *col_classes, *col_class_inv, nb_col_classes;
2932 row_classes, row_class_inv, nb_row_classes,
2933 col_classes, col_class_inv, nb_col_classes,
2936 for (i = 0; i < nb_row_classes; i++) {
2938 fname.assign(
label);
2940 sprintf(str,
"_TDO_point_class_%d.txt", i);
2943 row_classes[i], fname, verbose_level - 1);
2945 for (i = 0; i < nb_col_classes; i++) {
2947 fname.assign(
label);
2949 sprintf(str,
"_TDO_line_class_%d.txt", i);
2952 col_classes[i], fname, verbose_level - 1);
2967 int f_write_tdo_files,
2969 int f_include_tdo_scheme,
2972 int f_v = (verbose_level >= 1);
2973 int f_vv = (verbose_level >= 2);
2975 int f_list_incidences =
FALSE;
2979 cout <<
"incidence_structure_compute_tdo" << endl;
2986 cout <<
"incidence_structure_compute_tdo "
2987 "initial partition:" << endl;
2994 int f_labeled =
TRUE;
3003 cout <<
"TDO:" << endl;
3004 if (TDO_depth < N) {
3005 if (
EVEN(TDO_depth)) {
3007 S, f_list_incidences,
FALSE, verbose_level);
3011 S, f_list_incidences,
FALSE, verbose_level);
3020 if (f_write_tdo_files) {
3021 fname.assign(
label);
3022 fname.append(
"_tdo_scheme.tex");
3032 cout <<
"written file " << fname <<
" of size "
3036 fname.assign(
label);
3037 fname.append(
"_tdo.tex");
3041 if (f_include_tdo_scheme) {
3042 fp <<
"$\\begin{array}{c}" << endl;
3045 fp <<
"\\\\" << endl;
3049 fp <<
"\\end{array}$" << endl;
3056 cout <<
"written file " << fname <<
" of size "
3066 int f_write_tdo_files,
3068 int f_include_tdo_scheme,
3069 int f_include_extra,
3072 int f_v = (verbose_level >= 1);
3073 int f_vv = (verbose_level >= 2);
3076 string fname_scheme;
3078 int step, f_refine, f_refine_prev, f_done;
3079 int f_local_coordinates =
FALSE;
3080 int f_list_incidences =
FALSE;
3084 cout <<
"incidence_structure::compute_tdo_stepwise" << endl;
3089 TDO_depth, step, f_refine, f_refine_prev, verbose_level);
3096 cout <<
"incidence_structure::compute_tdo_stepwise "
3097 "TDO step=" << step <<
" ht=" << S.
ht << endl;
3102 else if (
EVEN(step - 1)) {
3105 S, f_list_incidences,
FALSE, verbose_level);
3113 S, f_list_incidences,
FALSE, verbose_level);
3120 if (f_write_tdo_files) {
3124 sprintf(str,
"_tdo_step_%d.tex", step);
3125 fname.assign(
label);
3128 sprintf(str,
"_tdo_step_%d_pic.tex", step);
3129 fname_pic.assign(
label);
3130 fname_pic.append(str);
3132 sprintf(str,
"_tdo_step_%d_scheme.tex", step);
3133 fname_scheme.assign(
label);
3134 fname_scheme.append(str);
3136 sprintf(str,
"_tdo_step_%d_extra.tex", step);
3137 fname_extra.assign(
label);
3138 fname_extra.append(str);
3142 ofstream fp_pic(fname_pic);
3143 ofstream fp_scheme(fname_scheme);
3144 ofstream fp_extra(fname_extra);
3146 if (f_include_tdo_scheme) {
3147 fp <<
"\\subsection*{Step $" << step
3148 <<
"$, Height $" << S.
ht <<
"$}" << endl;
3151 fp <<
"$\\begin{array}{c}" << endl;
3154 fp <<
"\\input " << fname_pic << endl;
3156 fp <<
"\\\\" << endl;
3159 fp <<
"\\input " << fname_scheme << endl;
3162 fp_scheme,
FALSE , S);
3164 else if (
EVEN(step - 1)) {
3174 fp <<
"\\end{array}$" << endl;
3176 if (f_include_extra) {
3180 f_local_coordinates, verbose_level);
3181 fp <<
"\\input " << fname_extra << endl;
3183 else if (
EVEN(step - 1)) {
3186 f_local_coordinates, verbose_level);
3187 fp <<
"\\input " << fname_extra << endl;
3193 f_local_coordinates, verbose_level);
3194 fp <<
"\\input " << fname_extra << endl;
3203 cout <<
"written file " << fname <<
" of size "
3205 cout <<
"written file " << fname_pic <<
" of size "
3207 cout <<
"written file " << fname_scheme <<
" of size "
3209 cout <<
"written file " << fname_extra <<
" of size "
3218 TDO_depth, step, f_refine, f_refine_prev, verbose_level);
3225 int f_labeled =
FALSE;
3231 cout <<
"TDO:" << endl;
3233 if (
EVEN(TDO_depth)) {
3235 f_list_incidences,
FALSE, verbose_level);
3239 f_list_incidences,
FALSE, verbose_level);
3248 if (f_write_tdo_files) {
3249 fname.assign(
label);
3250 fname.append(
"_tdo.tex");
3252 fname_pic.assign(
label);
3253 fname_pic.append(
"_tdo_pic.tex");
3255 fname_scheme.assign(
label);
3256 fname_scheme.append(
"_tdo_scheme.tex");
3260 ofstream fp_pic(fname_pic);
3261 ofstream fp_scheme(fname_scheme);
3263 if (f_include_tdo_scheme) {
3264 fp <<
"\\subsection*{The TDO at Height $"
3265 << S.
ht <<
"$}" << endl;
3266 fp <<
"$\\begin{array}{c}" << endl;
3268 fp <<
"\\input " << fname_pic << endl;
3270 fp <<
"\\\\" << endl;
3272 fp <<
"\\input " << fname_scheme << endl;
3274 fp_scheme,
FALSE , S);
3275 fp <<
"\\end{array}$" << endl;
3282 cout <<
"written file " << fname <<
" of size "
3284 cout <<
"written file " << fname_pic <<
" of size "
3286 cout <<
"written file " << fname_scheme <<
" of size "
3297 int f_v = (verbose_level >= 1);
3302 cout <<
"incidence_structure::init_partitionstack_trivial" << endl;
3316 int f_row_part,
int nb_row_parts,
int *row_parts,
3317 int f_col_part,
int nb_col_parts,
int *col_parts,
3318 int nb_distinguished_point_sets,
3319 int **distinguished_point_sets,
int *distinguished_point_set_size,
3320 int nb_distinguished_line_sets,
3321 int **distinguished_line_sets,
int *distinguished_line_set_size,
3324 int f_v = (verbose_level >= 1);
3325 int f_vv = (verbose_level >= 2);
3326 int f_v3 = (verbose_level >= 3);
3332 cout <<
"incidence_structure::init_partitionstack" << endl;
3346 for (i = 1; i < nb_row_parts; i++) {
3354 for (i = 1; i < nb_col_parts; i++) {
3363 for (j = 0; j < nb_distinguished_point_sets; j++) {
3365 cout <<
"splitting off " << j <<
"-th distinguished point "
3367 << distinguished_point_set_size[j] << endl;
3370 cout <<
"which is the following set of size "
3371 << distinguished_point_set_size[j] <<
":" << endl;
3373 distinguished_point_set_size[j]);
3377 distinguished_point_set_size[j],
TRUE, verbose_level);
3379 cout <<
"incidence_structure::init_partitionstack "
3380 "partition:" << endl;
3387 for (j = 0; j < nb_distinguished_line_sets; j++) {
3389 cout <<
"splitting off " << j <<
"-th distinguished "
3391 << distinguished_line_set_size[j] << endl;
3394 cout <<
"which is the following set of size "
3395 << distinguished_line_set_size[j] <<
":" << endl;
3397 distinguished_line_set_size[j]);
3404 set_sz = distinguished_line_set_size[j];
3406 for (h = 0; h < set_sz; h++) {
3407 set[h] = distinguished_line_sets[j][h] +
nb_points();
3412 cout <<
"incidence_structure::init_partitionstack "
3413 "After adding Inc->nb_points():" << endl;
3422 cout <<
"incidence_structure::init_partitionstack "
3423 "partition:" << endl;
3429 cout <<
"incidence_structure::init_partitionstack "
3430 "we have arrived at the following partition:" << endl;
3434 cout <<
"incidence_structure::init_partitionstack done" << endl;
3439 int nb_distinguished_point_sets,
3440 int nb_distinguished_line_sets,
3441 int Aut_counter,
int *Aut,
int *Base,
int Base_length,
3444 int f_v = (verbose_level >= 1);
3450 cout <<
"incidence_structure::shrink_aut_generators" << endl;
3458 nb_rows += nb_distinguished_line_sets;
3459 nb_cols += nb_distinguished_point_sets;
3463 for (h = 0; h < Aut_counter; h++) {
3464 for (i = 0; i < m; i++) {
3465 Aut[h * (m + n) + i] = Aut[h * total + i];
3467 for (j = 0; j < n; j++) {
3468 Aut[h * (m + n) + m + j] =
3469 Aut[h * total +
nb_rows + j] -
3470 nb_distinguished_line_sets;
3472 for (i = Base_length - 1; i >= 0; i--) {
3475 cout <<
"Base[i] > m && Base[i] < nb_rows" << endl;
3478 Base[i] -= nb_distinguished_line_sets;
3484 cout <<
"incidence_structure::shrink_aut_generators "
3490 int Aut_counter,
int *Aut,
3491 int Base_length,
int *Base,
int *Transversal_length)
3501 cout <<
"incidence_structure::print_aut_generators "
3502 "base_length = " << Base_length << endl;
3503 cout <<
"The base is : " << endl;
3504 for (i = Base_length - 1; i >= 0; i--) {
3505 cout << Base[i] <<
" ";
3508 cout <<
"The transversal lengths are: " << endl;
3509 for (i = 0; i < Base_length; i++) {
3510 cout << Transversal_length[i] <<
" ";
3513 cout <<
"We have found " << Aut_counter <<
" gens:" << endl;
3514 for (h = 0; h < Aut_counter; h++) {
3515 for (i = 0; i < m; i++) {
3516 AUT[i] = Aut[h * (m + n) + i];
3518 for (j = 0; j < n; j++) {
3519 AUT[m + j] = Aut[h * (m + n) + m + j] - m;
3521 cout << h <<
" : " ;
3522 cout <<
"generator " << h <<
":" << endl;
3523 for (i = 0; i < m + n; i++)
3524 cout << AUT[i] <<
" ";
3540 int *&Adj,
int &v,
int *&partition,
3541 int f_row_part,
int nb_row_parts,
int *row_parts,
3542 int f_col_part,
int nb_col_parts,
int *col_parts,
3543 int nb_distinguished_point_sets,
3544 int **distinguished_point_sets,
int *distinguished_point_set_size,
3545 int nb_distinguished_line_sets,
3546 int **distinguished_line_sets,
int *distinguished_line_set_size,
3550 int f_v = (verbose_level >= 1);
3551 int f_vv = (verbose_level >= 2);
3555 int i, j, J, j0, l, u,
k, h, h1, h2, i1, i2, idx, y, z;
3557 int my_nb_col_parts;
3562 cout <<
"incidence_structure::compute_extended_collinearity_graph" << endl;
3566 v += nb_col_parts - 1;
3569 v += nb_distinguished_point_sets;
3571 for (i = 0; i < nb_distinguished_line_sets; i++) {
3572 v += distinguished_line_set_size[i];
3575 cout <<
"incidence_structure::compute_extended_"
3576 "collinearity_graph v=" << v << endl;
3579 for (i = 0; i < nb_distinguished_point_sets; i++) {
3581 distinguished_point_set_size[i]);
3583 for (i = 0; i < nb_distinguished_line_sets; i++) {
3585 distinguished_line_set_size[i]);
3588 for (i = 0; i < v; i++) {
3592 for (i = 0; i < v * v; i++) {
3598 my_nb_col_parts = nb_col_parts;
3599 my_col_parts =
NEW_int(my_nb_col_parts);
3600 for (i = 0; i < nb_col_parts; i++) {
3601 my_col_parts[i] = col_parts[i];
3605 my_nb_col_parts = 1;
3606 my_col_parts =
NEW_int(my_nb_col_parts);
3607 my_col_parts[0] = n;
3610 for (J = 0; J < my_nb_col_parts; J++) {
3611 l = my_col_parts[J];
3612 for (u = 0; u < l; u++) {
3618 for (h = 0; h <
k; h++) {
3620 Adj[i * v + v1 + J - 1] = 1;
3621 Adj[(v1 + J - 1) * v + i] = 1;
3625 for (h1 = 0; h1 <
k; h1++) {
3627 for (h2 = h1 + 1; h2 <
k; h2++) {
3629 Adj[i1 * v + i2] = 1;
3630 Adj[i2 * v + i1] = 1;
3636 for (h = 0; h < nb_distinguished_line_sets; h++) {
3637 if (int_vec_search(distinguished_line_sets[h],
3638 distinguished_line_set_size[h], j, idx)) {
3639 Adj[j * v + v3 + h] = 1;
3640 Adj[(v3 + h) * v + j] = 1;
3650 for (h = 0; h < nb_distinguished_line_sets; h++) {
3651 for (u = 0; u < distinguished_line_set_size[h]; u++) {
3652 j = distinguished_line_sets[h][u];
3654 for (y = 0; y <
k; y++) {
3656 Adj[i * v + z + u] = 1;
3657 Adj[(z + u) * v + i] = 1;
3660 z += distinguished_line_set_size[h];
3665 for (i = 0; i < m; i++) {
3666 for (h = 0; h < nb_distinguished_point_sets; h++) {
3668 distinguished_point_set_size[h], i, idx)) {
3669 Adj[i * v + v2 + h] = 1;
3670 Adj[(v2 + h) * v + i] = 1;
3678 for (h = 0; h < nb_row_parts; h++) {
3679 partition[z + row_parts[h] - 1] = 0;
3684 partition[m - 1] = 0;
3687 for (h = 0; h < my_nb_col_parts; h++) {
3688 partition[z + h] = 0;
3691 for (h = 0; h < nb_distinguished_point_sets; h++) {
3692 partition[z + h] = 0;
3695 for (h = 0; h < nb_distinguished_line_sets; h++) {
3696 l = distinguished_line_set_size[h];
3697 partition[z + l - 1] = 0;
3701 cout <<
"incidence_structure::compute_extended_collinearity_graph "
3708 cout <<
"incidence_structure::compute_extended_collinearity_graph done" << endl;
3715 int *&M,
int &nb_rows,
int &nb_cols,
int &total,
int *&partition,
3716 int f_row_part,
int nb_row_parts,
int *row_parts,
3717 int f_col_part,
int nb_col_parts,
int *col_parts,
3718 int nb_distinguished_point_sets,
3719 int **distinguished_point_sets,
int *distinguished_point_set_size,
3720 int nb_distinguished_line_sets,
3721 int **distinguished_line_sets,
int *distinguished_line_set_size,
3724 int f_v = (verbose_level >= 1);
3725 int f_vv = (verbose_level >= 2);
3726 int f_v4 = (verbose_level >= 4);
3732 cout <<
"incidence_structure::compute_extended_matrix" << endl;
3738 nb_rows += nb_distinguished_line_sets;
3739 nb_cols += nb_distinguished_point_sets;
3744 cout <<
"nb_distinguished_line_sets="
3745 << nb_distinguished_line_sets << endl;
3746 cout <<
"nb_distinguished_point_sets="
3747 << nb_distinguished_point_sets << endl;
3748 cout <<
"m=" << m << endl;
3749 cout <<
"n=" << n << endl;
3750 cout <<
"nb_rows=" <<
nb_rows << endl;
3751 cout <<
"nb_cols=" <<
nb_cols << endl;
3752 cout <<
"total=" << total << endl;
3760 for (i = 0; i < m; i++) {
3768 for (j = 0; j < nb_distinguished_point_sets; j++) {
3770 cout <<
"The " << j <<
"-th distinguished point set is:" << endl;
3772 distinguished_point_set_size[j]);
3775 for (i = 0; i < distinguished_point_set_size[j]; i++) {
3776 a = distinguished_point_sets[j][i];
3782 for (j = 0; j < nb_distinguished_line_sets; j++) {
3784 cout <<
"The " << j <<
"-th distinguished line set is:" << endl;
3786 distinguished_line_set_size[j]);
3789 for (i = 0; i < distinguished_line_set_size[j]; i++) {
3790 a = distinguished_line_sets[j][i];
3797 cout <<
"incidence_structure::compute_extended_matrix "
3798 "The extended incidence matrix is:" << endl;
3803 for (i = 0; i < total; i++) {
3810 for (i = 0; i < nb_row_parts; i++) {
3812 partition[a - 1] = 0;
3816 partition[m - 1] = 0;
3821 for (i = 0; i < nb_col_parts; i++) {
3823 partition[a - 1] = 0;
3827 partition[
nb_rows + n - 1] = 0;
3830 for (i = 0; i < PB.P.ht; i++) {
3831 j = PB.P.startCell[i] + PB.P.cellSize[i] - 1;
3832 if (PB.P.startCell[i] >= m) {
3833 j += nb_distinguished_line_sets;
3839 for (i = 0; i < nb_distinguished_line_sets; i++) {
3840 partition[m + i] = 0;
3843 for (j = 0; j < nb_distinguished_point_sets; j++) {
3844 partition[
nb_rows + n + j] = 0;
3847 cout <<
"incidence_structure::compute_extended_matrix "
3848 "The partition is:" << endl;
3855 cout <<
"incidence_structure::compute_extended_matrix done" << endl;
3868 for (i = 0; i <
nb_rows; i++) {
3869 for (j = 0; j <
nb_cols; j++) {
3882 long int *canonical_labeling,
int verbose_level)
3884 int f_v = (verbose_level >= 1);
3885 int f_vv = (verbose_level >= 2);
3890 cout <<
"incidence_structure::apply_canonical_labeling" << endl;
3894 cout <<
"incidence_structure::apply_canonical_labeling labeling:" << endl;
3901 for (i = 0; i <
nb_rows; i++) {
3902 ii = canonical_labeling[i];
3903 for (j = 0; j <
nb_cols; j++) {
3920 cout <<
"incidence_structure::apply_canonical_labeling done" << endl;
3933void incidence_structure::save_as_Levi_graph(std::string &fname_bin,
3934 int f_point_labels,
long int *point_labels,
3942 CG->create_Levi_graph_from_incidence_matrix(
3944 f_point_labels, point_labels,
3946 CG->save(fname_bin, verbose_level);
3954 int N_points,
int design_b,
int design_k,
int partition_class_size,
3955 int *&partition,
int verbose_level)
3957 int f_v = (verbose_level >= 1);
3961 cout <<
"incidence_structure::init_large_set" << endl;
3974 nb_classes = design_b / partition_class_size;
3975 nb_rows = N_points + nb_classes;
3979 cout <<
"incidence_structure::init_large_set nb_rows=" <<
nb_rows <<
" nb_cols=" <<
nb_cols <<
" N=" << N << endl;
3986 for (u = 0; u < nb_classes; u++) {
3987 for (j = 0; j < partition_class_size; j++) {
3988 a = blocks[u * partition_class_size + j];
3990 for (t = 0; t < design_k; t++) {
3992 Incma[i *
nb_cols + u * partition_class_size + j] = 1;
3994 Incma[(N_points + u) *
nb_cols + u * partition_class_size + j] = 1;
4006 for (i = 0; i < N; i++) {
4009 partition[N_points - 1] = 0;
4011 partition[
nb_rows + design_b - 1] = 0;
4027 cout <<
"incidence_structure::init_large_set done" << endl;
a collection of combinatorial functions
void unrank_k_subset(int rk, int *set, int n, int k)
void perm_print_product_action(std::ostream &ost, int *a, int m_plus_n, int m, int offset, int f_cycle_length)
catch all class for algorithms
int hashing(int hash0, int a)
matrices over GF(2) stored as bitvectors
compact storage of 0/1-data as bitvectors
void m_i(long int i, int a)
void allocate(long int length)
data structure for set partitions following Jeffrey Leon
void subset_continguous(int from, int len)
void get_row_and_col_classes(int *row_classes, int &nb_row_classes, int *col_classes, int &nb_col_classes, int verbose_level)
void print_column_refinement_info(int ht0, int *data, int depth)
void print_decomposition_tex(std::ostream &ost, int *row_classes, int nb_row_classes, int *col_classes, int nb_col_classes)
void split_cell(int verbose_level)
void allocate_and_get_decomposition(int *&row_classes, int *&row_class_inv, int &nb_row_classes, int *&col_classes, int *&col_class_inv, int &nb_col_classes, int verbose_level)
void split_multiple_cells(int *set, int set_size, int f_front, int verbose_level)
void print_tactical_decomposition_scheme_tex_internal(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 *col_scheme, int f_print_subscripts)
void print_classes_points_and_lines(std::ostream &ost)
std::ostream & print(std::ostream &ost)
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_tactical_decomposition_scheme_tex(std::ostream &ost, int *row_classes, int nb_row_classes, int *col_classes, int nb_col_classes, int *row_scheme, int *col_scheme, int f_print_subscripts)
void radix_sort(int left, int right, int *C, int length, int radix, int verbose_level)
void print_row_refinement_info(int ht0, int *data, int depth)
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)
int hash_column_refinement_info(int ht0, int *data, int depth, int hash0)
int hash_row_refinement_info(int ht0, int *data, int depth, int hash0)
void write_cell_to_file_points_or_lines(int i, std::string &fname, int verbose_level)
void print_decomposition_scheme_tex(std::ostream &ost, int *row_classes, int nb_row_classes, int *col_classes, int nb_col_classes, int *scheme)
void print_decomposition_scheme(std::ostream &ost, int *row_classes, int nb_row_classes, int *col_classes, int nb_col_classes, int *scheme, int marker1, int marker2)
void allocate(int n, int verbose_level)
a collection of functions related to sorted vectors
int int_vec_search(int *v, int len, int a, int &idx)
void int_vec_heapsort(int *v, int len)
a statistical analysis of data consisting of single integers
void init(int *data, int data_length, int f_second, int verbose_level)
void print_array_tex(std::ostream &ost, int f_backwards)
linear_algebra::linear_algebra * Linear_algebra
long int number_of_submodules()
void unrank_lint(int *M, long int rk, int verbose_level)
ring_theory::finite_ring * R
interface for various incidence geometries
void get_col_decomposition_scheme(data_structures::partitionstack &PStack, int *row_classes, int *row_class_inv, int nb_row_classes, int *col_classes, int *col_class_inv, int nb_col_classes, int *col_scheme, int verbose_level)
void free_scheme(int *row_classes, int *row_class_inv, int *col_classes, int *col_class_inv, int *scheme)
void save_inc_file(char *fname)
void get_and_print_row_tactical_decomposition_scheme_tex(std::ostream &ost, int f_enter_math, int f_print_subscripts, data_structures::partitionstack &PStack)
void print_line(std::ostream &ost, data_structures::partitionstack &P, int row_cell, int i, int *col_classes, int nb_col_classes, int width, int f_labeled)
void init_by_incidences(int m, int n, int nb_inc, int *X, int verbose_level)
void compute_extended_collinearity_graph(int *&Adj, int &v, int *&partition, int f_row_part, int nb_row_parts, int *row_parts, int f_col_part, int nb_col_parts, int *col_parts, int nb_distinguished_point_sets, int **distinguished_point_sets, int *distinguished_point_set_size, int nb_distinguished_line_sets, int **distinguished_line_sets, int *distinguished_line_set_size, int verbose_level)
void compute_TDO_safe_first(data_structures::partitionstack &PStack, int depth, int &step, int &f_refine, int &f_refine_prev, int verbose_level)
int refine_row_partition_safe(data_structures::partitionstack &PStack, int verbose_level)
void get_scheme(int *&row_classes, int *&row_class_inv, int &nb_row_classes, int *&col_classes, int *&col_class_inv, int &nb_col_classes, int *&scheme, int f_row_scheme, data_structures::partitionstack &PStack)
void get_row_decomposition_scheme(data_structures::partitionstack &PStack, int *row_classes, int *row_class_inv, int nb_row_classes, int *col_classes, int *col_class_inv, int nb_col_classes, int *row_scheme, int verbose_level)
incidence_structure * apply_canonical_labeling(long int *canonical_labeling, int verbose_level)
void get_and_print_decomposition_schemes_tex(data_structures::partitionstack &PStack)
void init_partitionstack(data_structures::partitionstack *S, int f_row_part, int nb_row_parts, int *row_parts, int f_col_part, int nb_col_parts, int *col_parts, int nb_distinguished_point_sets, int **distinguished_point_sets, int *distinguished_point_set_size, int nb_distinguished_line_sets, int **distinguished_line_sets, int *distinguished_line_set_size, int verbose_level)
void get_partition(data_structures::partitionstack &PStack, int *row_classes, int *row_class_idx, int &nb_row_classes, int *col_classes, int *col_class_idx, int &nb_col_classes)
void point_collinearity_graph(int *Adj, int verbose_level)
int lines_through_two_points(int *lines, int p1, int p2, int verbose_level)
void check_point_pairs(int verbose_level)
void get_and_print_decomposition_schemes(data_structures::partitionstack &PStack)
void rearrange(int *&Vi, int &nb_V, int *&Bj, int &nb_B, int *&R, int *&X, data_structures::partitionstack &P)
orthogonal_geometry::orthogonal * O
void save_row_by_row_file(char *fname)
int compute_TDO_safe_next(data_structures::partitionstack &PStack, int depth, int &step, int &f_refine, int &f_refine_prev, int verbose_level)
void compute_tdo(data_structures::partitionstack &S, int f_write_tdo_files, int f_pic, int f_include_tdo_scheme, int verbose_level)
void compute_extended_matrix(int *&M, int &nb_rows, int &nb_cols, int &total, int *&partition, int f_row_part, int nb_row_parts, int *row_parts, int f_col_part, int nb_col_parts, int *col_parts, int nb_distinguished_point_sets, int **distinguished_point_sets, int *distinguished_point_set_size, int nb_distinguished_line_sets, int **distinguished_line_sets, int *distinguished_line_set_size, int verbose_level)
void init_by_R_and_X(int m, int n, int *R, int *X, int max_r, int verbose_level)
void print_column_labels(std::ostream &ost, data_structures::partitionstack &P, int *col_classes, int nb_col_classes, int width)
void init_by_set_of_sets(data_structures::set_of_sets *SoS, int verbose_level)
void print_aut_generators(int Aut_counter, int *Aut, int Base_length, int *Base, int *Transversal_length)
int compute_TDO(data_structures::partitionstack &PStack, int ht0, int depth, int verbose_level)
void init_by_matrix2(int verbose_level)
void init_large_set(long int *blocks, int N_points, int design_b, int design_k, int partition_class_size, int *&partition, int verbose_level)
void get_and_print_col_decomposition_scheme(data_structures::partitionstack &PStack, int f_list_incidences, int f_local_coordinates, int verbose_level)
void init_by_matrix_as_bitmatrix(int m, int n, data_structures::bitmatrix *Bitmatrix, int verbose_level)
void decomposition_print_tex(std::ostream &ost, data_structures::partitionstack &PStack, int f_row_tactical, int f_col_tactical, int f_detailed, int f_local_coordinates, int verbose_level)
void init_orthogonal(orthogonal_geometry::orthogonal *O, int verbose_level)
void get_and_print_tactical_decomposition_scheme_tex(std::ostream &ost, int f_enter_math, data_structures::partitionstack &PStack)
int refine_column_partition_safe(data_structures::partitionstack &PStack, int verbose_level)
int get_lines_on_point(int *data, int i, int verbose_level)
data_structures::bitvector * encode_as_bitvector()
void shrink_aut_generators(int nb_distinguished_point_sets, int nb_distinguished_line_sets, int Aut_counter, int *Aut, int *Base, int Base_length, int verbose_level)
void compute_tdo_stepwise(data_structures::partitionstack &S, int TDO_depth, int f_write_tdo_files, int f_pic, int f_include_tdo_scheme, int f_include_extra, int verbose_level)
void init_projective_space(projective_space *P, int verbose_level)
void save_as_csv(std::string &fname_csv, int verbose_level)
int refine_column_partition(data_structures::partitionstack &PStack, int ht0, int verbose_level)
void get_incidences_by_row_scheme(data_structures::partitionstack &PStack, int *row_classes, int *row_class_inv, int nb_row_classes, int *col_classes, int *col_class_inv, int nb_col_classes, int row_class_idx, int col_class_idx, int rij, int *&incidences, int verbose_level)
int compute_TDO_step(data_structures::partitionstack &PStack, int ht0, int verbose_level)
void line_intersection_graph(int *Adj, int verbose_level)
void get_and_print_column_tactical_decomposition_scheme_tex(std::ostream &ost, int f_enter_math, int f_print_subscripts, data_structures::partitionstack &PStack)
void print_non_tactical_decomposition_scheme_tex(std::ostream &ost, int f_enter_math, data_structures::partitionstack &PStack)
void row_scheme_to_col_scheme(data_structures::partitionstack &PStack, int *row_classes, int *row_class_inv, int nb_row_classes, int *col_classes, int *col_class_inv, int nb_col_classes, int *row_scheme, int *col_scheme, int verbose_level)
void print_partitioned(std::ostream &ost, data_structures::partitionstack &P, int f_labeled)
void do_tdo_high_level(data_structures::partitionstack &S, int f_tdo_steps, int f_tdo_depth, int tdo_depth, int f_write_tdo_files, int f_pic, int f_include_tdo_scheme, int f_include_tdo_extra, int f_write_tdo_class_files, int verbose_level)
int get_points_on_line(int *data, int j, int verbose_level)
void print_row_tactical_decomposition_scheme_incidences_tex(data_structures::partitionstack &PStack, std::ostream &ost, int f_enter_math_mode, int *row_classes, int *row_class_inv, int nb_row_classes, int *col_classes, int *col_class_inv, int nb_col_classes, int f_local_coordinates, int verbose_level)
void init_by_matrix(int m, int n, int *M, int verbose_level)
void print(std::ostream &ost)
void print_hline(std::ostream &ost, data_structures::partitionstack &P, int *col_classes, int nb_col_classes, int width, int f_labeled)
void get_and_print_row_decomposition_scheme(data_structures::partitionstack &PStack, int f_list_incidences, int f_local_coordinates, int verbose_level)
void init_hjelmslev(hjelmslev *H, int verbose_level)
void init_partitionstack_trivial(data_structures::partitionstack *S, int verbose_level)
void get_incidences_by_col_scheme(data_structures::partitionstack &PStack, int *row_classes, int *row_class_inv, int nb_row_classes, int *col_classes, int *col_class_inv, int nb_col_classes, int row_class_idx, int col_class_idx, int kij, int *&incidences, int verbose_level)
void get_row_decomposition_scheme_if_possible(data_structures::partitionstack &PStack, int *row_classes, int *row_class_inv, int nb_row_classes, int *col_classes, int *col_class_inv, int nb_col_classes, int *row_scheme, int verbose_level)
void compute_TDO_safe(data_structures::partitionstack &PStack, int depth, int verbose_level)
void latex_it(std::ostream &ost, data_structures::partitionstack &P)
void print_col_tactical_decomposition_scheme_incidences_tex(data_structures::partitionstack &PStack, std::ostream &ost, int f_enter_math_mode, int *row_classes, int *row_class_inv, int nb_row_classes, int *col_classes, int *col_class_inv, int nb_col_classes, int f_local_coordinates, int verbose_level)
int refine_row_partition(data_structures::partitionstack &PStack, int ht0, int verbose_level)
projective space PG(n,q) of dimension n over Fq
void create_points_on_line(long int line_rk, long int *line, int verbose_level)
void create_lines_on_point(long int point_rk, long int *line_pencil, int verbose_level)
int Gauss_simple(int *A, int m, int n, int *base_cols, int verbose_level)
basic number theoretic functions
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)
an orthogonal geometry O^epsilon(n,q)
void points_on_line_by_line_rank(long int line_rk, long int *line, int verbose_level)
field_theory::finite_field * F
void unrank_point(int *v, int stride, long int rk, int verbose_level)
void lines_on_point_by_line_rank_must_fit_into_int(long int pt, int *line_pencil_line_ranks, int verbose_level)
void unrank_line(long int &p1, long int &p2, long int index, int verbose_level)
int Gauss_int(int *A, int f_special, int f_complete, int *base_cols, int f_P, int *P, int m, int n, int Pn, int verbose_level)
void PHG_element_unrank(int *v, int stride, int len, int rk)
int nb_PHG_elements(int n)
#define Int_vec_zero(A, B)
#define Lint_vec_print(A, B, C)
#define Int_vec_print_integer_matrix_width(A, B, C, D, E, F)
#define Int_matrix_print(A, B, C)
#define Int_vec_copy(A, B, C)
#define Int_vec_print(A, B, C)
#define INCIDENCE_STRUCTURE_REALIZATION_BY_PROJECTIVE_SPACE
#define INCIDENCE_STRUCTURE_REALIZATION_BY_MATRIX
#define INCIDENCE_STRUCTURE_REALIZATION_BY_HJELMSLEV
#define INCIDENCE_STRUCTURE_REALIZATION_BY_ORTHOGONAL
the orbiter library for the classification of combinatorial objects