19namespace layer1_foundations {
20namespace combinatorics {
118 int *Part,
int *Entries,
int verbose_level)
121 int f_v = (verbose_level >= 1);
129 cout <<
"partition of length " <<
part_length << endl;
138 cout <<
"nb_entries = " <<
nb_entries << endl;
158 int *Part,
int *Entries,
int verbose_level)
161 int f_v = (verbose_level >= 1);
169 cout <<
"partition of length " <<
part_length << endl;
178 cout <<
"nb_entries = " <<
nb_entries << endl;
198 int Row_level,
int Col_level,
199 int Extra_row_level,
int Extra_col_level,
200 int Lambda_level,
int verbose_level)
202 int f_v = (verbose_level >= 1);
203 int f_vv = (verbose_level >= 2);
204 int f_vvv = (verbose_level >= 3);
207 cout <<
"tdo_scheme::init_TDO" << endl;
211 cout <<
"partition of length " <<
part_length << endl;
214 cout <<
"nb_entries = " <<
nb_entries << endl;
223 cout <<
"row_level = " <<
row_level << endl;
224 cout <<
"col_level = " <<
col_level << endl;
267 int k, at, f, c, l, i;
268 int f_v = (verbose_level >= 1);
269 int f_vv = (verbose_level >= 2);
270 int f_vvv = (verbose_level >= 3);
273 cout <<
"tdo_scheme_synthetic::init_partition_stack" << endl;
277 cout <<
"row_level=" <<
row_level << endl;
278 cout <<
"col_level=" <<
col_level << endl;
279 cout <<
"verbose_level=" << verbose_level << endl;
285 cout <<
"part_length < 2" << endl;
289 cout <<
"init_partition_stack: m=" <<
m <<
" n=" <<
n << endl;
298 cout <<
"after PB.init_partition_backtrack_basic" << endl;
304 cout <<
"initial partition stack: " << endl;
313 cout <<
"part[" << k <<
"]=" << at << endl;
314 cout <<
"P->cellNumber[at]=" << c << endl;
315 cout <<
"P->startCell[c]=" << f << endl;
316 cout <<
"P->cellSize[c]=" << l << endl;
317 cout <<
"f + l - at=" << f + l - at << endl;
322 cout <<
"after splitting at " << at << endl;
332 for (i = 0; i < l * l; i++) {
346 for (i = 0; i < l * l; i++) {
360 for (i = 0; i < l * l; i++) {
374 for (i = 0; i < l * l; i++) {
389 cout <<
"before complete_partition_info" << endl;
452 int f_v = (verbose_level >= 1);
453 int f_vv = (verbose_level >= 10);
457 cout <<
"tdo_scheme_synthetic::get_partition h=" << h <<
" l=" << l
458 <<
" m=" <<
m <<
" n=" <<
n << endl;
461 cout <<
"tdo_scheme_synthetic::get_partition l is negative" << endl;
476 for (i = 0; i < l; i++) {
487 cout <<
"row_class_index[h][" <<
row_classes[h][i] <<
"] = "
494 cout <<
"col_class_index[h][" <<
col_classes[h][i] <<
"] = "
550 int f_v = (verbose_level >= 1);
551 int f_vv = (verbose_level >= 5);
552 int f, i, j, c1, S, k;
555 cout <<
"tdo_scheme_synthetic::complete_partition_info h=" << h << endl;
562 cout <<
"i=" << i << endl;
566 cout <<
"c1=" << c1 << endl;
570 cout <<
"S=" << S << endl;
574 for (k = 0; k < S; k++) {
577 cout <<
"row_class_no[h][" << f + k <<
"]="
586 cout <<
"j=" << j << endl;
590 cout <<
"c1=" << c1 << endl;
594 cout <<
"S=" << S << endl;
598 for (k = 0; k < S; k++) {
601 cout <<
"col_class_no[h][" << f + k <<
"]="
611 int f_v = (verbose_level >= 1);
612 int i, j, d, c1, c2, s1, s2, v;
615 cout <<
"tdo_scheme_synthetic::get_row_or_col_scheme" << endl;
675 for (i = 0; i <
m; i++) {
688 for (i = 0; i <
n; i++) {
700 for (i = 0; i <
m; i++) {
712 for (i = 0; i <
n; i++) {
719 cout <<
"tdo_scheme_synthetic::get_row_or_col_scheme finished" << endl;
726 int f_v = (verbose_level >= 1);
727 int f_vv = (verbose_level >= 2);
729 int i, j, h, j1, cc, f, l, ci, cj, l1, l2, R;
732 cout <<
"get_column_split_partition" << endl;
740 cout <<
"R=" << R << endl;
743 for (i = 0; i < l1; i++) {
750 cout <<
"i=" << i <<
" ci=" << ci <<
" j1=" << j1
751 <<
" cc=" << cc << endl;
754 for (h = 0; h < l; h++) {
758 cout <<
"j=" << j <<
" cj=" << cj << endl;
763 cout << j <<
"/" << cj <<
" is not a "
764 "descendant of " << i <<
"/" << ci << endl;
770 cout <<
"non descendants of " << i <<
"/" << ci <<
" : ";
782 cout <<
"column-split partition:" << endl;
786 cout <<
"get_column_split_partition done" << endl;
793 int f_v = (verbose_level >= 1);
794 int f_vv = (verbose_level >= 2);
796 int i, j, h, j1, cc, f, l, ci, cj, l1, l2, R;
799 cout <<
"get_row_split_partition" << endl;
805 cout <<
"l1=" << l1 << endl;
806 cout <<
"l2=" << l2 << endl;
807 cout <<
"R=" << R << endl;
810 for (i = 0; i < l1; i++) {
817 cout <<
"i=" << i <<
" ci=" << ci <<
" j1=" << j1
818 <<
" cc=" << cc << endl;
821 for (h = 0; h < l; h++) {
825 cout <<
"j=" << j <<
" cj=" << cj << endl;
830 cout << j <<
"/" << cj <<
" is not a descendant "
831 "of " << i <<
"/" << ci << endl;
837 cout << cj <<
" is a descendant of " << ci << endl;
842 cout <<
"non descendants of " << i <<
"/" << ci <<
" : ";
854 cout <<
"row-split partition:" << endl;
880 int f_v = (verbose_level >= 1);
881 int i, j, c1, c2, a = 0;
884 cout <<
"row_scheme at level " <<
level[h] <<
" : " << endl;
887 cout <<
"col_scheme at level " <<
level[h] <<
" : " << endl;
890 cout <<
"extra_row_scheme at level " <<
level[h] <<
" : " << endl;
893 cout <<
"extra_col_scheme at level " <<
level[h] <<
" : " << endl;
896 cout <<
"lambda_scheme at level " <<
level[h] <<
" : " << endl;
904 <<
"_{" << setw(3) << c2 <<
"}";
907 cout <<
"============";
915 << setw(3) << c1 <<
"} | ";
931 cout << setw(9) << a;
938 cout <<
"row_classes_first / len:" << endl;
943 cout <<
"class_no:" << endl;
944 for (i = 0; i <
m; i++) {
947 cout <<
"col_classes first / len:" << endl;
952 cout <<
"col_class_no:" << endl;
953 for (i = 0; i <
n; i++) {
967 int h,
int f_label, std::string &label)
969 int i, j, a = 0,
n,
m, c1, c2;
974 ost <<
"\\begin{array}{r|*{" <<
m <<
"}{r}}" << endl;
976 ost <<
"\\multicolumn{" <<
m + 1
977 <<
"}{c}{\\mbox{" << label <<
"}}\\\\" << endl;
980 ost <<
"\\rightarrow";
983 ost <<
"\\downarrow";
988 for (j = 0; j <
m; j++) {
991 <<
"_{" << setw(3) << c2 <<
"}";
993 ost <<
"\\\\" << endl;
994 ost <<
"\\hline" << endl;
995 for (i = 0; i <
n; i++) {
998 for (j = 0; j <
m; j++) {
1011 ost <<
" & " << setw(3) << a;
1013 ost <<
"\\\\" << endl;
1015 ost <<
"\\end{array}" << endl;
1016 ost <<
"$$" << endl;
1021 int *f_first_inc_must_be_moved,
int verbose_level)
1023 int i, j, ii, fi, fii, fj, row_cell0, row_cell, col_cell, a, b, c;
1024 int f_v = (verbose_level >= 1);
1025 int f_vv = (verbose_level >= 2);
1026 int f_vvv = (verbose_level >= 3);
1029 cout <<
"tdo_scheme_synthetic::compute_whether_first_inc_must_be_moved" << endl;
1032 f_first_inc_must_be_moved[i] =
TRUE;
1046 cout <<
"considering whether incidence in block " << i <<
","
1047 << j <<
" must be moved" << endl;
1054 cout <<
"c=" << c << endl;
1058 cout <<
"looking at COL scheme:" << endl;
1060 f_first_inc_must_be_moved[i] =
FALSE;
1065 if (row_cell != row_cell0) {
1067 cout <<
"i=" << i <<
" ii=" << ii
1069 "COL fuse, hence it must not "
1071 cout <<
"fi=" << fi << endl;
1072 cout <<
"fii=" << fii << endl;
1073 cout <<
"row_cell0=" << row_cell0 << endl;
1074 cout <<
"row_cell=" << row_cell << endl;
1076 f_first_inc_must_be_moved[i] =
FALSE;
1082 cout <<
"ii=" << ii <<
" seeing non zero entry "
1083 << b <<
", hence it must be moved" << endl;
1085 f_first_inc_must_be_moved[i] =
TRUE;
1092 cout <<
"looking at EXTRA_COL scheme:" << endl;
1097 cout <<
"row_cell0=" << row_cell0 << endl;
1103 if (row_cell != row_cell0) {
1105 cout <<
"i=" << i <<
" ii=" << ii
1107 "EXTRACOL fuse, hence it must "
1108 "not be moved" << endl;
1109 cout <<
"fi=" << fi << endl;
1110 cout <<
"fii=" << fii << endl;
1111 cout <<
"row_cell0=" << row_cell0 << endl;
1112 cout <<
"row_cell=" << row_cell << endl;
1114 f_first_inc_must_be_moved[i] =
FALSE;
1120 cout <<
"ii=" << ii <<
" seeing non zero entry "
1121 << b <<
", hence it must be moved" << endl;
1123 f_first_inc_must_be_moved[i] =
TRUE;
1131 cout <<
"tdo_scheme_synthetic::compute_whether_first_inc_must_be_moved done" << endl;
1137 int i, j, a, b = 0, nb_inc;
1138 int f_v = (verbose_level > 1);
1141 cout <<
"tdo_scheme_synthetic::count_nb_inc_from_row_scheme" << endl;
1148 cout <<
"incomplete row_scheme" << endl;
1149 cout <<
"i=" << i <<
"j=" << j << endl;
1150 cout <<
"ignoring this" << endl;
1164 int i, j, a, b = 0, nb_inc;
1165 int f_v = (verbose_level > 1);
1168 cout <<
"tdo_scheme_synthetic::count_nb_inc_from_extra_row_scheme" << endl;
1175 cout <<
"incomplete extra_row_scheme" << endl;
1176 cout <<
"i=" << i <<
"j=" << j << endl;
1177 cout <<
"ignoring this" << endl;
1190 int *point_types,
int nb_point_types,
int point_type_len,
1191 int *distributions,
int nb_distributions,
1192 int f_omit1,
int omit1,
int verbose_level)
1194 int f_v = (verbose_level >= 1);
1195 int f_vv = (verbose_level >= 2);
1196 int f_vvv = (verbose_level >= 3);
1197 int f_vvvv = (verbose_level >= 4);
1198 int f_v5 = (verbose_level >= 7);
1199 int i, s, d, L1, L2, cnt, new_nb_distributions;
1202 int *non_zero_blocks, nb_non_zero_blocks;
1205 cout <<
"tdo_scheme_synthetic::geometric_test_for_row_scheme "
1206 "nb_distributions=" << nb_distributions << endl;
1210 if (L2 != point_type_len) {
1211 cout <<
"tdo_scheme_synthetic::geometric_test_for_row_scheme "
1212 "L2 != point_type_len" << endl;
1216 ruled_out_by =
NEW_int(nb_point_types + 1);
1217 non_zero_blocks =
NEW_int(nb_point_types);
1218 for (i = 0; i <= nb_point_types; i++) {
1219 ruled_out_by[i] = 0;
1222 new_nb_distributions = 0;
1223 for (cnt = 0; cnt < nb_distributions; cnt++) {
1224 nb_non_zero_blocks = 0;
1225 for (i = 0; i < nb_point_types; i++) {
1226 d = distributions[cnt * nb_point_types + i];
1230 non_zero_blocks[nb_non_zero_blocks++] = i;
1234 cout <<
"geometric_test_for_row_scheme: testing distribution "
1235 << cnt <<
" / " << nb_distributions <<
" : ";
1237 distributions + cnt * nb_point_types,
1241 cout <<
"that is" << endl;
1242 for (i = 0; i < nb_non_zero_blocks; i++) {
1243 d = distributions[cnt *
1244 nb_point_types + non_zero_blocks[i]];
1245 cout << setw(3) << i <<
" : " << setw(3) << d <<
" x ";
1247 point_types + non_zero_blocks[i] * point_type_len,
1253 f_ruled_out =
FALSE;
1254 for (s = 1; s <= nb_non_zero_blocks; s++) {
1256 point_types, nb_point_types, point_type_len,
1257 distributions + cnt * nb_point_types,
1258 non_zero_blocks, nb_non_zero_blocks,
1259 f_omit1, omit1, verbose_level - 4)) {
1263 cout <<
"geometric_test_for_row_scheme: distribution "
1264 << cnt <<
" / " << nb_distributions
1265 <<
" eliminated by test of order " << s << endl;
1268 cout <<
"the eliminated scheme is:" << endl;
1269 for (i = 0; i < nb_non_zero_blocks; i++) {
1270 d = distributions[cnt * nb_point_types +
1271 non_zero_blocks[i]];
1272 cout << setw(3) << i <<
" : "
1273 << setw(3) << d <<
" x ";
1275 point_types + non_zero_blocks[i] * point_type_len,
1279 cout <<
"we repeat the test with more printout:" << endl;
1281 point_types, nb_point_types, point_type_len,
1282 distributions + cnt * nb_point_types,
1283 non_zero_blocks, nb_non_zero_blocks,
1284 f_omit1, omit1, verbose_level - 3);
1293 for (i = 0; i < nb_point_types; i++) {
1294 distributions[new_nb_distributions * nb_point_types + i] =
1295 distributions[cnt * nb_point_types + i];
1297 new_nb_distributions++;
1301 cout <<
"geometric_test_for_row_scheme: number of distributions "
1302 "reduced from " << nb_distributions <<
" to "
1303 << new_nb_distributions <<
", i.e. Eliminated "
1304 << nb_distributions - new_nb_distributions <<
" cases" << endl;
1305 cout <<
"# of ruled out by test of order ";
1312 for (i = nb_point_types; i >= 1; i--) {
1313 if (ruled_out_by[i]) {
1318 cout <<
"highest order test that was successfully "
1319 "applied is order " << i << endl;
1324 return new_nb_distributions;
1328int tdo_scheme_synthetic::test_row_distribution(
1329 int *point_types,
int nb_point_types,
int point_type_len,
1330 int *distributions,
int nb_distributions,
int verbose_level)
1332 int f_v = (verbose_level >= 1);
1333 int f_vv = (verbose_level >= 2);
1334 int f_vvv = (verbose_level >= 3);
1335 int l2, cnt, J, len, k, i, d, c, new_nb_distributions, bound;
1336 int f_ruled_out, f_ruled_out_by_braun, f_ruled_out_by_packing;
1337 int nb_ruled_out_by_braun = 0, nb_ruled_out_by_packing = 0;
1338 int nb_ruled_out_by_both = 0;
1341 cout <<
"tdo_scheme_synthetic::test_row_distribution "
1342 "nb_distributions=" << nb_distributions << endl;
1345 if (l2 != point_type_len) {
1346 cout <<
"tdo_scheme_synthetic::test_row_distribution "
1347 "l2 != point_type_len" << endl;
1351 new_nb_distributions = 0;
1353 for (cnt = 0; cnt < nb_distributions; cnt++) {
1355 cout <<
"testing distribution " << cnt <<
" : ";
1357 distributions + cnt * nb_point_types,
1361 cout <<
"that is" << endl;
1362 for (i = 0; i < nb_point_types; i++) {
1363 d = distributions[cnt * nb_point_types + i];
1366 cout << setw(3) << d <<
" x ";
1368 point_types + i * point_type_len,
1374 f_ruled_out =
FALSE;
1375 f_ruled_out_by_braun =
FALSE;
1376 f_ruled_out_by_packing =
FALSE;
1378 for (J = 0; J < l2; J++) {
1383 cout <<
"testing distribution " << cnt <<
" in block "
1384 << J <<
" len=" << len << endl;
1387 for (k = 0; k <= len; k++)
1389 for (i = 0; i < nb_point_types; i++) {
1390 d = distributions[cnt * nb_point_types + i];
1391 c = point_types[i * point_type_len + J];
1395 cout <<
"line type: ";
1396 int_vec_print(cout, type + 1, len);
1399 if (!braun_test_on_line_type(len, type)) {
1401 cout <<
"distribution " << cnt <<
" is eliminated "
1402 "in block " << J <<
" using Braun test" << endl;
1405 f_ruled_out_by_braun =
TRUE;
1411 for (J = 0; J < l2; J++) {
1415 for (i = 0; i < nb_point_types; i++) {
1416 d = distributions[cnt * nb_point_types + i];
1419 c = point_types[i * point_type_len + J];
1423 cout <<
"c > len" << endl;
1424 cout <<
"J=" << J <<
" i=" << i <<
" d="
1425 << d <<
" c=" << c << endl;
1428 bound = TDO_upper_bound(len, c);
1431 cout <<
"distribution " << cnt
1432 <<
" is eliminated in block "
1433 << J <<
" row-block " << i
1434 <<
" using packing numbers" << endl;
1435 cout <<
"len=" << len << endl;
1436 cout <<
"d=" << d << endl;
1437 cout <<
"c=" << c << endl;
1438 cout <<
"bound=" << bound << endl;
1441 f_ruled_out_by_packing =
TRUE;
1450 if (f_ruled_out_by_braun)
1451 nb_ruled_out_by_braun++;
1452 if (f_ruled_out_by_packing)
1453 nb_ruled_out_by_packing++;
1454 if (f_ruled_out_by_braun && f_ruled_out_by_packing)
1455 nb_ruled_out_by_both++;
1458 for (i = 0; i < nb_point_types; i++) {
1459 distributions[new_nb_distributions * nb_point_types + i] =
1460 distributions[cnt * nb_point_types + i];
1462 new_nb_distributions++;
1466 cout <<
"number of distributions reduced from "
1467 << nb_distributions <<
" to "
1468 << new_nb_distributions <<
", i.e. Eliminated "
1469 << nb_distributions - new_nb_distributions <<
" cases" << endl;
1470 cout <<
"nb_ruled_out_by_braun = "
1471 << nb_ruled_out_by_braun << endl;
1472 cout <<
"nb_ruled_out_by_packing = "
1473 << nb_ruled_out_by_packing << endl;
1474 cout <<
"nb_ruled_out_by_both = "
1475 << nb_ruled_out_by_both << endl;
1477 return new_nb_distributions;
1483 int *point_types,
int nb_point_types,
int point_type_len,
1485 int *non_zero_blocks,
int nb_non_zero_blocks,
1486 int f_omit1,
int omit1,
1489 int f_v = (verbose_level >= 1);
1490 int f_vvv = (verbose_level >= 3);
1492 int J, L1, L2, len, max, cur, u, D, d, c;
1493 int nb_inc, e, f, nb_ordererd_pairs;
1497 cout <<
"geometric_test_for_row_scheme_level_s s=" << s << endl;
1500 cout <<
"level too deep" << endl;
1507 for (u = 0; u < s; u++) {
1508 d = distribution[non_zero_blocks[set[u]]];
1513 for (J = 0; J < L2; J++) {
1516 for (u = 0; u < s; u++) {
1517 c = point_types[non_zero_blocks[set[u]] * point_type_len + J];
1518 d = distribution[non_zero_blocks[set[u]]];
1526 nb_ordererd_pairs = 0;
1528 nb_ordererd_pairs = e * (f + 1) * f + (len - e) * f * (f - 1);
1530 cur += nb_ordererd_pairs;
1533 cout <<
"tdo_scheme_synthetic::geometric_test_for_row_scheme_"
1534 "level_s s=" << s <<
" failure in point type ";
1537 cout <<
"max=" << max << endl;
1538 cout <<
"J=" << J << endl;
1539 cout <<
"nb_inc=" << nb_inc << endl;
1540 cout <<
"nb_ordererd_pairs=" << nb_ordererd_pairs << endl;
1541 cout <<
"cur=" << cur << endl;
1558 int f_use_mckay,
int f_once,
1560 int *&point_types,
int &nb_point_types,
int &point_type_len,
1561 int *&distributions,
int &nb_distributions,
1563 int f_omit1,
int omit1,
1564 int f_omit2,
int omit2,
1565 int f_use_packing_numbers,
1566 int f_dual_is_linear_space,
1567 int f_do_the_geometric_test)
1569 int f_v = (verbose_level >= 1);
1570 int f_vv = (verbose_level >= 2);
1576 cout <<
"tdo_scheme_synthetic::refine_rows" << endl;
1579 cout <<
"f_omit1=" << f_omit1 <<
" omit1=" << omit1 << endl;
1580 cout <<
"f_omit2=" << f_omit2 <<
" omit2=" << omit2 << endl;
1581 cout <<
"f_use_packing_numbers=" << f_use_packing_numbers << endl;
1582 cout <<
"f_dual_is_linear_space=" << f_dual_is_linear_space << endl;
1583 cout <<
"f_use_mckay=" << f_use_mckay << endl;
1592 cout <<
"R=" << R << endl;
1596 cout <<
"column split partition: " << endl;
1601 cout <<
"P.ht != l1" << endl;
1606 point_types, nb_point_types, point_type_len,
1607 distributions, nb_distributions, cnt_second_system)) {
1610 cout <<
"tdo_scheme_synthetic::refine_rows refine_rows_easy returns FALSE" << endl;
1618 verbose_level - 1, f_use_mckay, f_once,
1619 point_types, nb_point_types, point_type_len,
1620 distributions, nb_distributions, cnt_second_system,
1621 f_omit1, omit1, f_omit2, omit2,
1622 f_use_packing_numbers, f_dual_is_linear_space)) {
1625 cout <<
"tdo_scheme_synthetic::refine_rows refine_rows_hard returns FALSE" << endl;
1634 point_types, nb_point_types, point_type_len,
1635 distributions, nb_distributions, cnt_second_system)) {
1638 cout <<
"tdo_scheme_synthetic::refine_rows refine_rows_easy returns FALSE" << endl;
1644 if (f_do_the_geometric_test) {
1646 cout <<
"tdo_scheme_synthetic::refine_rows before geometric_test_for_row_scheme" << endl;
1649 point_types, nb_point_types, point_type_len,
1650 distributions, nb_distributions,
1654 cout <<
"tdo_scheme_synthetic::refine_rows after geometric_test_for_row_scheme" << endl;
1658 cout <<
"tdo_scheme_synthetic::refine_rows done" << endl;
1664 int *&point_types,
int &nb_point_types,
int &point_type_len,
1665 int *&distributions,
int &nb_distributions,
1666 int &cnt_second_system)
1669 int i, j, J, S, l2, nb_eqns, nb_vars;
1670 int nb_eqns_joining, nb_eqns_upper_bound;
1671 int nb_sol, len, k, a2, a, b, ab;
1672 int f_used, j1, j2, len1, len2, cnt;
1673 int Nb_eqns, Nb_vars;
1674 int f_v = (verbose_level >= 1);
1675 int f_vv = (verbose_level >= 2);
1681 cout <<
"tdo_scheme_synthetic::refine_rows_easy" << endl;
1689 cout <<
"nb_rows=" << nb_rows << endl;
1697 D.
open(nb_eqns, nb_vars);
1700 for (J = 0; J < nb_vars; J++) {
1703 D.
Aij(0, nb_vars - 1) = 0;
1705 cout <<
"nb_rows=" << nb_rows << endl;
1707 D.
RHS[0] = nb_rows - 1;
1709 cout <<
"RHS[0]=" << D.
RHS[0] << endl;
1712 for (j = 0; j < l2; j++) {
1716 D.
x_min[nb_vars - 1] = 0;
1717 D.
x_max[nb_vars - 1] = nb_rows - 1;
1725 cout <<
"tdo_scheme_synthetic::refine_rows_easy The first system is" << endl;
1731 snprintf(label, 1000,
"first");
1736 point_type_len = nb_vars - 1;
1742 cout << nb_sol <<
" : ";
1743 for (i = 0; i < nb_vars; i++) {
1744 cout <<
" " << D.
x[i];
1755 cout <<
"tdo_scheme_synthetic::refine_rows_easy found " << nb_sol <<
" point types" << endl;
1760 nb_point_types = nb_sol;
1762 nb_eqns_upper_bound = 0;
1763 for (j = 0; j < l2; j++) {
1766 nb_eqns_upper_bound += len - 2;
1769 nb_eqns_joining = l2 + ((l2 * (l2 - 1)) >> 1);
1770 Nb_eqns = l2 + nb_eqns_joining + nb_eqns_upper_bound;
1775 D2.
open(Nb_eqns, Nb_vars);
1776 point_types =
NEW_int(nb_point_types * point_type_len);
1778 cout <<
"tdo_scheme_synthetic::refine_rows_easy: opening second "
1779 << cnt_second_system <<
" system with "
1780 << Nb_eqns <<
" equations and " << Nb_vars
1781 <<
" variables" << endl;
1789 cout << nb_sol <<
" : ";
1790 for (i = 0; i < nb_vars; i++) {
1791 cout <<
" " << D.
x[i];
1795 for (i = 0; i < point_type_len; i++) {
1796 D2.
Aij(i, nb_sol) = D.
x[i];
1797 point_types[nb_sol * point_type_len + i] = D.
x[i];
1805 for (j = 0; j < l2; j++) {
1807 for (i = 0; i < Nb_vars; i++) {
1808 a = point_types[i * point_type_len + j];
1810 D2.
Aij(l2 + j, i) = a2;
1814 snprintf(label, 1000,
"J_{%d}", j + 1);
1818 for (j1 = 0; j1 < l2; j1++) {
1820 for (j2 = j1 + 1; j2 < l2; j2++) {
1822 for (i = 0; i < Nb_vars; i++) {
1823 a = point_types[i * point_type_len + j1];
1824 b = point_types[i * point_type_len + j2];
1826 D2.
Aij(l2 + l2 + cnt, i) = ab;
1828 D2.
RHS[l2 + l2 + cnt] = len1 * len2;
1830 snprintf(label, 1000,
"J_{%d,%d}", j1 + 1, j2 + 1);
1836 nb_eqns_upper_bound = 0;
1837 for (j = 0; j < l2; j++) {
1839 for (k = 3; k <= len; k++) {
1840 for (i = 0; i < Nb_vars; i++) {
1841 D2.
Aij(l2 + nb_eqns_joining + nb_eqns_upper_bound, i) = 0;
1844 for (i = 0; i < Nb_vars; i++) {
1845 a = point_types[i * point_type_len + j];
1849 D2.
Aij(l2 + nb_eqns_joining + nb_eqns_upper_bound, i) = 1;
1854 D2.
RHS[l2 + nb_eqns_joining + nb_eqns_upper_bound] = bound;
1855 D2.
type[l2 + nb_eqns_joining + nb_eqns_upper_bound] =
t_LE;
1856 snprintf(label, 1000,
"P_{%d,%d} \\,\\mbox{using}\\, "
1857 "P(%d,%d)=%d", j + 1, k, len, k, bound);
1859 nb_eqns_joining + nb_eqns_upper_bound, label);
1860 nb_eqns_upper_bound++;
1864 Nb_eqns = l2 + nb_eqns_joining + nb_eqns_upper_bound;
1868 cout <<
"tdo_scheme_synthetic::refine_rows_easy second system " << cnt_second_system <<
" found "
1869 << nb_sol <<
" point types" << endl;
1871 cnt_second_system++;
1877 for (i = 0; i < l2; i++) {
1879 snprintf(label, 1000,
"F_{%d}", i + 1);
1884 cout <<
"The second system is" << endl;
1890 snprintf(label, 1000,
"second");
1897 cout << nb_sol <<
" : ";
1898 for (i = 0; i < Nb_vars; i++) {
1899 cout <<
" " << D2.
x[i];
1909 nb_distributions = nb_sol;
1910 distributions =
NEW_int(nb_distributions * nb_point_types);
1915 cout << nb_sol <<
" : ";
1916 for (i = 0; i < Nb_vars; i++) {
1917 cout <<
" " << D2.
x[i];
1921 for (i = 0; i < Nb_vars; i++) {
1922 distributions[nb_sol * nb_point_types + i] = D2.
x[i];
1931 cout <<
"tdo_scheme_synthetic::refine_rows_easy: found " << nb_distributions
1932 <<
" point type distributions." << endl;
1939 int f_use_mckay,
int f_once,
1940 int *&point_types,
int &nb_point_types,
int &point_type_len,
1941 int *&distributions,
int &nb_distributions,
1942 int &cnt_second_system,
1943 int f_omit1,
int omit1,
int f_omit,
int omit,
1944 int f_use_packing_numbers,
int f_dual_is_linear_space)
1946 int f_v = (verbose_level >= 1);
1947 int f_vv = (verbose_level >= 2);
1948 int i, r, R, l1, L1, L2;
1950 int point_types_allocated;
1955 cout <<
"tdo_scheme_synthetic::refine_rows_hard" << endl;
1959 cout <<
"omitting the last " << omit1
1960 <<
" column blocks from the previous row-scheme" << endl;
1963 cout <<
"omitting the last " << omit <<
" row blocks" << endl;
1965 cout <<
"f_use_packing_numbers=" << f_use_packing_numbers << endl;
1966 cout <<
"f_dual_is_linear_space=" << f_dual_is_linear_space << endl;
1967 cout <<
"f_use_mckay=" << f_use_mckay << endl;
1974 cout <<
"tdo_scheme::refine_rows_hard the_row_scheme is:" << endl;
1976 for (i = 0; i < R; i++) {
1977 for (j = 0; j < l1; j++) {
1990 point_types_allocated = 100;
1992 point_type_len = L2 + L1;
1993 point_types =
NEW_int(point_types_allocated * point_type_len);
2006 cout <<
"tdo_scheme_synthetic::refine_rows_hard computing refined point types:" << endl;
2007 cout <<
"point_type_len = " << point_type_len << endl;
2008 cout <<
"L1 = " << L1 << endl;
2009 cout <<
"L2 = " << L2 << endl;
2013 for (r = 0; r < R; r++) {
2016 cout <<
"tdo_scheme_synthetic::refine_rows_hard r=" << r << endl;
2017 cout <<
"T.types_first[r]=" << T.
types_first[r] << endl;
2023 point_types, nb_point_types);
2028 snprintf(label, 1000,
"first_%d", r);
2032 point_types, nb_point_types, point_types_allocated);
2035 cout <<
"tdo_scheme_synthetic::refine_rows_hard r = " << r <<
", found " << nb_sol
2036 <<
" refined point types" << endl;
2039 cout <<
"tdo_scheme_synthetic::refine_rows_hard r = " << r <<
", found " << nb_sol
2040 <<
" refined point types:" << endl;
2043 nb_sol, point_type_len, point_type_len, 3);
2051 for (h = nb_sol - 1; h >= 0; h--) {
2053 * point_type_len)[0];
2055 cout <<
"removing last solution" << endl;
2066 cout <<
"tdo_scheme_synthetic::refine_rows_hard r = " << r <<
", found " << nb_sol
2067 <<
" refined point types:" << endl;
2070 nb_sol, point_type_len, point_type_len, 3);
2075 cout <<
"tdo_scheme_synthetic::refine_rows_hard no solution for this point type, we are done" << endl;
2085 cout <<
"tdo_scheme_synthetic::refine_rows_hard only one solution in block r=" << r << endl;
2100 cout <<
"tdo_scheme_synthetic::refine_rows_hard computing refined point types done" << endl;
2104 for (r = 0; r < nb_point_types; r++) {
2107 for (i = 0; i < L1; i++) {
2110 for (j = 0; j < l; j++) {
2112 a = point_types[r * point_type_len + J];
2113 point_types[r * L2 + f + j] = a;
2117 point_type_len = L2;
2119 cout <<
"tdo_scheme_synthetic::refine_rows_hard altogether, we found " << nb_point_types
2120 <<
" refined point types" << endl;
2123 cout <<
"tdo_scheme_synthetic::refine_rows_hard altogether, we found " << nb_point_types
2124 <<
" refined point types:" << endl;
2126 nb_point_types, point_type_len, point_type_len, 3);
2133 cout <<
"tdo_scheme_synthetic::refine_rows_hard before tdo_rows_setup_second_system" << endl;
2140 f_use_packing_numbers,
2141 f_dual_is_linear_space,
2142 point_types, nb_point_types)) {
2145 cout <<
"tdo_scheme_synthetic::refine_rows_hard tdo_rows_setup_second_system returns FALSE, we are done" << endl;
2152 cout <<
"tdo_scheme_synthetic::refine_rows_hard after tdo_rows_setup_second_system" << endl;
2157 snprintf(label, 1000,
"second");
2163 distributions =
NEW_int(1 * nb_point_types);
2164 nb_distributions = 0;
2171 distributions[nb_distributions * nb_point_types + u] =
2176 cout <<
"tdo_scheme_synthetic::refine_rows_hard done" << endl;
2183 if (cnt_second_system == 1) {
2185 int x[] = {4,1,5,0,2,0,7,2,4,0,0,0,1,0,0,4,0,0};
2186 cout <<
"testing solution:" << endl;
2187 int_vec_print(cout, x, 18);
2189 if (T.
D2->
n != 18) {
2190 cout <<
"T.D2->n != 18" << endl;
2192 for (j = 0; j < 18; j++) {
2196 for (i = 0; i < T.
D2->
m; i++) {
2197 cout << i <<
" : " << T.
D2->
RHS1[i] <<
" : "
2204 cout <<
"tdo_scheme_synthetic::refine_rows_hard: solving second system "
2205 << cnt_second_system <<
" which is " << T.
D2->
m
2206 <<
" x " << T.
D2->
n << endl;
2213 cout << i <<
" : " << r <<
" : " << setw(3)
2215 <<
" : " << setw(3) << l << endl;
2220 cout <<
"tdo_scheme_synthetic::refine_rows_hard before T.solve_second_system_omit" << endl;
2224 point_types, nb_point_types,
2225 distributions, nb_distributions, omit);
2228 int f_scale =
FALSE;
2231 cout <<
"tdo_scheme_synthetic::refine_rows_hard before T.solve_second_system" << endl;
2234 f_use_mckay, f_once,
2236 point_types, nb_point_types,
2237 distributions, nb_distributions);
2243 cout <<
"tdo_scheme_synthetic::refine_rows_hard: second system "
2244 << cnt_second_system
2245 <<
" found " << nb_distributions
2246 <<
" distributions." << endl;
2248 cnt_second_system++;
2250 cout <<
"tdo_scheme_synthetic::refine_rows_hard done" << endl;
2256 int f_omit,
int omit,
2257 int &L1,
int &L2,
int verbose_level)
2259 int f_v = (verbose_level >= 1);
2260 int l1, l2, omit2, i;
2266 for (i = l1 - omit; i < l1; i++) {
2276 cout <<
"tdo_scheme_synthetic::row_refinement_L1_L2: l1 = " << l1 <<
" l2=" << l2
2277 <<
" L1=" << L1 <<
" L2=" << L2 << endl;
2283 int f_omit,
int omit,
2284 int *&point_types,
int &nb_point_types)
2286 int f_v = (verbose_level >= 1);
2287 int f_vv = (verbose_level >= 2);
2288 int S, s_default, s_or_s_default, R, l1, l2, L1, L2;
2289 int J, r2, i, j, s, f, l;
2290 int nb_vars, nb_eqns;
2294 cout <<
"tdo_rows_setup_first_system r=" << r << endl;
2303 cout <<
"omit=" << omit << endl;
2315 cout <<
"tdo_rows_setup_first_system L1=" << L1 << endl;
2316 cout <<
"tdo_rows_setup_first_system L2=" << L2 << endl;
2319 T.
D1->
open(nb_eqns, nb_vars);
2323 for (r2 = 0; r2 < R; r2++) {
2327 for (i = 0; i < L1; i++) {
2330 for (j = 0; j < l; j++) {
2336 T.
D1->
Aij(r2, f + i + l) = 0;
2340 for (J = 0; J < nb_vars; J++) {
2352 for (i = 0; i < L1; i++) {
2355 for (j = 0; j < l; j++) {
2359 T.
D1->
Aij(r2, f + i + l) = 0;
2363 for (J = 0; J < nb_vars; J++) {
2374 for (i = 0; i < L1; i++) {
2377 cout <<
"r=" << r <<
" i=" << i <<
" s=" << s << endl;
2380 cout <<
"row scheme entry " << r <<
"," << i
2381 <<
" is -1, using slack variable" << endl;
2383 <<
" as upper bound" << endl;
2385 s_or_s_default = s_default;
2392 T.
D1->
RHS[R + i] = s_or_s_default;
2393 S += s_or_s_default;
2398 cout <<
"f=" << f <<
" l=" << l << endl;
2401 for (j = 0; j < l; j++) {
2403 T.
D1->
Aij(R + i, J) = 1;
2408 T.
D1->
Aij(R + i, f + i + l) = 1;
2410 T.
D1->
x_max[f + i + l] = s_default;
2424 cout <<
"The first system for r=" << r <<
" is:" << endl;
2428 cout <<
"tdo_rows_setup_first_system r=" << r <<
" finished" << endl;
2436 int f_omit,
int omit,
2437 int f_use_packing_numbers,
2438 int f_dual_is_linear_space,
2439 int *&point_types,
int &nb_point_types)
2441 int f_v = (verbose_level >= 1);
2442 int f_vv = (verbose_level >= 2);
2443 int nb_eqns_joining, nb_eqns_counting, nb_eqns_packing, nb_eqns_used = 0;
2444 int Nb_vars, Nb_eqns;
2445 int l2, i, j, len, r, L1, L2;
2449 cout <<
"tdo_rows_setup_second_system" << endl;
2452 cout <<
"f_omit=" << f_omit <<
" omit=" << omit << endl;
2453 cout <<
"f_use_packing_numbers=" << f_use_packing_numbers << endl;
2454 cout <<
"f_dual_is_linear_space=" << f_dual_is_linear_space << endl;
2461 nb_eqns_joining = L2 + Combi.
binomial2(L2);
2463 nb_eqns_packing = 0;
2464 if (f_use_packing_numbers) {
2465 for (j = 0; j < L2; j++) {
2468 nb_eqns_packing += len - 2;
2473 Nb_eqns = nb_eqns_joining + nb_eqns_counting + nb_eqns_packing;
2482 T.
D2->
open(Nb_eqns, Nb_vars);
2492 cout <<
"tdo_rows_setup_second_system: opening second system with "
2493 << Nb_eqns <<
" equations and " << Nb_vars
2494 <<
" variables" << endl;
2495 cout <<
"nb_eqns_joining=" << nb_eqns_joining << endl;
2496 cout <<
"nb_eqns_counting=" << nb_eqns_counting << endl;
2497 cout <<
"nb_eqns_packing=" << nb_eqns_packing << endl;
2498 cout <<
"l2=" << l2 << endl;
2499 cout <<
"L2=" << L2 << endl;
2505 f_omit, omit, f_dual_is_linear_space,
2506 point_types, nb_point_types,
2510 cout <<
"tdo_rows_setup_second_system_eqns_joining returns FALSE" << endl;
2521 point_types, nb_point_types,
2522 nb_eqns_joining )) {
2525 cout <<
"tdo_rows_setup_second_system_eqns_counting returns FALSE" << endl;
2532 if (f_use_packing_numbers) {
2536 point_types, nb_point_types,
2537 nb_eqns_joining + nb_eqns_counting ,
2541 cout <<
"tdo_rows_setup_second_system_eqns_packing returns FALSE" << endl;
2549 Nb_eqns = nb_eqns_joining + nb_eqns_counting + nb_eqns_used;
2557 cout <<
"The second system is:" << endl;
2561 cout <<
"tdo_rows_setup_second_system done" << endl;
2569 int f_omit,
int omit,
int f_dual_is_linear_space,
2570 int *point_types,
int nb_point_types,
2573 int f_v = (verbose_level >= 1);
2574 int f_vv = (verbose_level >= 2);
2575 int l2, I1, I2, k, b, ab, i, j, r, I, J;
2576 int f, l, c, a, a2, rr, p, u, h, L1, L2;
2581 cout <<
"tdo_scheme::tdo_rows_setup_second_system_eqns_joining" << endl;
2587 cout <<
"l2 = " << l2 << endl;
2588 cout <<
"L2 = " << L2 << endl;
2589 cout <<
"eqn_offset = " << eqn_offset << endl;
2593 for (I = 0; I < L2; I++) {
2594 snprintf(label, 1000,
"J_{%d}", I + 1);
2597 for (I1 = 0; I1 < L2; I1++) {
2598 for (I2 = I1 + 1; I2 < L2; I2++) {
2599 k = Combi.
ij2k(I1, I2, L2);
2600 snprintf(label, 1000,
"J_{%d,%d}", I1 + 1, I2 + 1);
2605 cout <<
"filling coefficient matrix" << endl;
2611 for (j = 0; j < l; j++) {
2614 for (I = 0; I < L2; I++) {
2615 a = point_types[c * L2 + I];
2617 T.
D2->
Aij(eqn_offset + I, J) = a2;
2619 for (I1 = 0; I1 < L2; I1++) {
2620 for (I2 = I1 + 1; I2 < L2; I2++) {
2621 k = Combi.
ij2k(I1, I2, L2);
2622 a = point_types[c * L2 + I1];
2623 b = point_types[c * L2 + I2];
2625 T.
D2->
Aij(eqn_offset + L2 + k, J) = ab;
2632 cout <<
"filling RHS" << endl;
2634 for (I = 0; I < L2; I++) {
2637 T.
D2->
RHS[eqn_offset + I] = a2;
2638 if (f_dual_is_linear_space) {
2645 for (I1 = 0; I1 < L2; I1++) {
2647 for (I2 = I1 + 1; I2 < L2; I2++) {
2649 k = Combi.
ij2k(I1, I2, L2);
2650 T.
D2->
RHS[eqn_offset + L2 + k] = a * b;
2651 if (f_dual_is_linear_space) {
2660 cout <<
"subtracting contribution from one-type blocks:" << endl;
2667 for (I = 0; I < L2; I++) {
2668 a = point_types[u * L2 + I];
2670 T.
D2->
RHS[eqn_offset + I] -= a2 * p;
2671 if (T.
D2->
RHS[eqn_offset + I] < 0) {
2673 cout <<
"tdo_rows_setup_second_system_eqns_joining: "
2674 "RHS is negative, no solution for the "
2675 "distribution" << endl;
2676 cout <<
"h=" << h << endl;
2677 cout <<
"rr=T.only_one_type[h]=" << rr << endl;
2678 cout <<
"p=row_classes_len[ROW][rr]=" << p << endl;
2679 cout <<
"u=T.types_first[rr]="
2681 cout <<
"I=" << I << endl;
2682 cout <<
"a=point_types[u * L2 + I]=" << a << endl;
2683 cout <<
"a2=binomial2(a)=" << a2 << endl;
2684 cout <<
"T.D2->RHS[eqn_offset + I]="
2685 << T.
D2->
RHS[eqn_offset + I] << endl;
2690 for (I1 = 0; I1 < L2; I1++) {
2691 a = point_types[u * L2 + I1];
2692 for (I2 = I1 + 1; I2 < L2; I2++) {
2693 b = point_types[u * L2 + I2];
2694 k = Combi.
ij2k(I1, I2, L2);
2696 T.
D2->
RHS[eqn_offset + L2 + k] -= ab;
2697 if (T.
D2->
RHS[eqn_offset + L2 + k] < 0) {
2699 cout <<
"tdo_rows_setup_second_system_eqns_"
2700 "joining: RHS is negative, no solution "
2701 "for the distribution" << endl;
2702 cout <<
"h=" << h << endl;
2703 cout <<
"rr=T.only_one_type[h]=" << rr << endl;
2704 cout <<
"p=row_classes_len[ROW][rr]=" << p << endl;
2705 cout <<
"u=T.types_first[rr]="
2707 cout <<
"I1=" << I1 << endl;
2708 cout <<
"I2=" << I2 << endl;
2709 cout <<
"k=" << k << endl;
2710 cout <<
"a=point_types[u * L2 + I1]=" << a << endl;
2711 cout <<
"b=point_types[u * L2 + I2]=" << b << endl;
2712 cout <<
"ab=" << ab << endl;
2713 cout <<
"T.D2->RHS[eqn_offset + L2 + k]="
2714 << T.
D2->
RHS[eqn_offset + L2 + k] << endl;
2722 cout <<
"tdo_scheme_synthetic::tdo_rows_setup_second_system_eqns_joining done" << endl;
2730 int f_omit,
int omit,
2731 int *point_types,
int nb_point_types,
2734 int f_v = (verbose_level >= 1);
2735 int l2, b, i, j, r, I, J, f, l, c, a, S, s, L1, L2;
2740 cout <<
"tdo_scheme_synthetic::tdo_rows_setup_second_system_eqns_counting" << endl;
2749 for (j = 0; j < l; j++) {
2752 for (I = 0; I < L2; I++) {
2753 snprintf(label, 1000,
"F_{%d,%d}", I+1, r+1);
2757 snprintf(label, 1000,
"F_{%d}", r+1);
2766 for (j = 0; j < l; j++) {
2769 for (I = 0; I < L2; I++) {
2770 a = point_types[c * L2 + I];
2771 T.
D2->
Aij(eqn_offset + i * (L2 + 1) + I, J) = a;
2773 T.
D2->
Aij(eqn_offset + i * (L2 + 1) + L2, J) = 1;
2779 for (I = 0; I < L2; I++) {
2782 T.
D2->
RHS[eqn_offset + i * (L2 + 1) + I] = a * b;
2785 T.
D2->
RHS[eqn_offset + i * (L2 + 1) + L2] = s;
2793 cout <<
"tdo_scheme_synthetic::tdo_rows_setup_second_system_eqns_counting done" << endl;
2801 int f_omit,
int omit,
2802 int *point_types,
int nb_point_types,
2803 int eqn_start,
int &nb_eqns_used)
2805 int f_v = (verbose_level >= 1);
2806 int nb_eqns_packing;
2807 int i, r, f, l, j, c, J, JJ, k, h;
2808 int rr, p, u, a, len, f_used, L1, L2;
2814 cout <<
"tdo_scheme_synthetic::tdo_rows_setup_second_system_eqns_packing" << endl;
2819 nb_eqns_packing = 0;
2820 for (J = 0; J < L2; J++) {
2825 for (k = 3; k <= len; k++) {
2831 for (j = 0; j < l; j++) {
2833 a = point_types[c * L2 + J];
2839 T.
D2->
Aij(eqn_start + nb_eqns_packing, JJ) = 1;
2845 T.
D2->
RHS[eqn_start + nb_eqns_packing] = bound;
2846 T.
D2->
type[eqn_start + nb_eqns_packing] =
t_LE;
2851 a = point_types[u * L2 + J];
2855 T.
D2->
RHS[eqn_start + nb_eqns_packing] -= p;
2856 if (T.
D2->
RHS[eqn_start + nb_eqns_packing] < 0) {
2858 cout <<
"tdo_scheme::tdo_rows_setup_second_"
2859 "system_eqns_packing RHS < 0" << endl;
2864 snprintf(label, 1000,
"P_{%d,%d} \\,\\mbox{using}\\, "
2865 "P(%d,%d)=%d", J + 1, k, len, k, bound);
2868 cout <<
"packing equation " << nb_eqns_packing
2869 <<
" J=" << J <<
" k=" << k
2870 <<
" len=" << len << endl;
2876 nb_eqns_used = nb_eqns_packing;
2878 cout <<
"tdo_rows_setup_second_system_eqns_packing "
2879 "nb_eqns_used = " << nb_eqns_used << endl;
2882 cout <<
"tdo_scheme_synthetic::tdo_rows_setup_second_system_eqns_packing done" << endl;
2893 int *&line_types,
int &nb_line_types,
int &line_type_len,
2894 int *&distributions,
int &nb_distributions,
2896 int f_omit1,
int omit1,
int f_omit,
int omit,
2897 int f_D1_upper_bound_x0,
int D1_upper_bound_x0,
2898 int f_use_mckay_solver,
2899 int f_use_packing_numbers)
2901 int f_v = (verbose_level >= 1);
2902 int f_vv = (verbose_level >= 2);
2909 cout <<
"tdo_scheme_synthetic::refine_columns" << endl;
2912 cout <<
"f_omit1=" << f_omit1 <<
" omit1=" << omit1 << endl;
2913 cout <<
"f_omit=" << f_omit <<
" omit=" << omit << endl;
2914 cout <<
"f_use_packing_numbers=" << f_use_packing_numbers << endl;
2915 cout <<
"f_D1_upper_bound_x0=" << f_D1_upper_bound_x0 << endl;
2916 cout <<
"f_use_mckay_solver=" << f_use_mckay_solver << endl;
2922 cout <<
"l1=" << l1 << endl;
2923 cout <<
"l2=" << l2 << endl;
2924 cout <<
"R=" << R << endl;
2929 cout <<
"tdo_scheme_synthetic::refine_columns "
2930 "row split partition: " << endl;
2935 cout <<
"P.ht != l1" << endl;
2941 cout <<
"easy mode" << endl;
2947 cout <<
"full mode" << endl;
2953 cout <<
"tdo_scheme_synthetic::refine_columns "
2954 "refine_cols_easy nyi" << endl;
2960 line_types, nb_line_types, line_type_len,
2961 distributions, nb_distributions, cnt_second_system, Sol,
2962 f_omit1, omit1, f_omit, omit,
2963 f_D1_upper_bound_x0, D1_upper_bound_x0,
2965 f_use_packing_numbers);
2968 cout <<
"tdo_scheme_synthetic::refine_columns finished" << endl;
2975 int verbose_level,
int f_once,
2976 int *&line_types,
int &nb_line_types,
int &line_type_len,
2977 int *&distributions,
int &nb_distributions,
2979 int f_omit1,
int omit1,
int f_omit,
int omit,
2980 int f_D1_upper_bound_x0,
int D1_upper_bound_x0,
2981 int f_use_mckay_solver,
2982 int f_use_packing_numbers)
2984 int f_v = (verbose_level >= 1);
2985 int f_vv = (verbose_level >= 2);
2987 int R, l2, L1, L2, r;
2988 int line_types_allocated;
2989 int nb_sol, nb_sol1, f_survive;
2993 cout <<
"tdo_scheme_synthetic::refine_cols_hard" << endl;
3001 cout <<
"f_omit1=" << f_omit1 <<
" omit1=" << omit1 << endl;
3002 cout <<
"f_omit=" << f_omit <<
" omit=" << omit << endl;
3003 cout <<
"f_use_packing_numbers=" << f_use_packing_numbers << endl;
3004 cout <<
"f_D1_upper_bound_x0=" << f_D1_upper_bound_x0 << endl;
3005 cout <<
"f_use_mckay_solver=" << f_use_mckay_solver << endl;
3012 cout <<
"tdo_scheme_synthetic::refine_cols_hard "
3013 "the_row_scheme is:" << endl;
3014 for (i = 0; i < l2; i++) {
3015 for (j = 0; j < R; j++) {
3023 L1, L2, verbose_level);
3029 line_types_allocated = 100;
3031 line_types =
NEW_int(line_types_allocated * l2);
3038 for (r = 0; r < R; r++) {
3041 cout <<
"tdo_scheme_synthetic::refine_cols_hard r=" << r <<
" / " << R << endl;
3045 cout <<
"tdo_scheme_synthetic::refine_cols_hard "
3046 "before tdo_columns_setup_first_system" << endl;
3051 line_types, nb_line_types)) {
3053 cout <<
"tdo_scheme_synthetic::refine_cols_hard "
3054 "tdo_columns_setup_first_system returns FALSE" << endl;
3060 cout <<
"tdo_scheme_synthetic::refine_cols_hard "
3061 "after tdo_columns_setup_first_system" << endl;
3064 if (f_D1_upper_bound_x0) {
3066 T.
D1->
x_max[0] = D1_upper_bound_x0;
3067 cout <<
"setting upper bound for D1->x[0] to "
3095 sprintf(label,
"first_%d", r);
3100 cout <<
"tdo_scheme_synthetic::refine_cols_hard "
3101 "before T.solve_first_system" << endl;
3104 line_types, nb_line_types, line_types_allocated);
3106 cout <<
"tdo_scheme_synthetic::refine_cols_hard "
3107 "after T.solve_first_system" << endl;
3111 cout <<
"tdo_scheme_synthetic::refine_cols_hard "
3112 "r = " << r <<
", found " << nb_sol
3113 <<
" refined line types" << endl;
3117 line_types + T.
types_first[r] * L2, nb_sol, L2, L2, 2);
3120 for (u = 0; u < nb_sol; u++) {
3122 for (i = 0; i < L2; i++) {
3123 int len1, len2, flags;
3130 if (flags == len2) {
3131 if (line_types[(T.
types_first[r] + u) * L2 + i] == 0) {
3134 cout <<
"line type " << u <<
" eliminated, "
3135 "line_types[] = 0" << endl;
3136 cout <<
"row block " << i << endl;
3137 cout <<
"col block=" << r << endl;
3138 cout <<
"length of col block " << len2 << endl;
3139 cout <<
"flags " << flags << endl;
3147 for (i = 0; i < L2; i++) {
3148 line_types[(T.
types_first[r] + nb_sol1) * L2 + i] =
3154 if (nb_sol1 < nb_sol) {
3156 cout <<
"tdo_scheme_synthetic::refine_cols_hard "
3157 "eliminated " << nb_sol - nb_sol1
3158 <<
" types" << endl;
3163 cout <<
"tdo_scheme_synthetic::refine_cols_hard "
3164 "r = " << r <<
", found " << nb_sol
3165 <<
" refined line types" << endl;
3171 line_types + T.
types_first[r] * L2, nb_sol, L2, L2, 2);
3183 cout <<
"tdo_scheme_synthetic::refine_cols_hard "
3184 "only one solution in block "
3199 cout <<
"tdo_scheme_synthetic::refine_cols_hard "
3201 cout <<
"r : T.types_first[r] : T.types_len[r]" << endl;
3202 for (r = 0; r < R; r++) {
3209 nb_line_types, line_type_len, line_type_len, 3);
3214 int f_scale =
FALSE;
3220 f_use_packing_numbers,
3221 line_types, nb_line_types)) {
3242 sprintf(label,
"second");
3251 for (r = 0; r < R; r++) {
3255 cout <<
"T.multiple_types[idx] != r" << endl;
3267 cout <<
"tdo_scheme_synthetic::refine_cols_hard "
3268 "solving second system "
3269 << cnt_second_system <<
" which is " << T.
D2->
m
3270 <<
" x " << T.
D2->
n << endl;
3271 cout <<
"variable blocks:" << endl;
3272 cout <<
"i : r : col_classes_len[COL][r] : types_first2[i] : "
3273 "types_len[r]" << endl;
3279 cout << i <<
" : " << r <<
" : " << setw(3)
3281 << f <<
" : " << setw(3) << l << endl;
3287 cout <<
"tdo_scheme_synthetic::refine_cols_hard "
3288 "before T.solve_second_system_omit" << endl;
3292 line_types, nb_line_types, distributions, nb_distributions,
3295 cout <<
"tdo_scheme_synthetic::refine_cols_hard "
3296 "after T.solve_second_system_omit" << endl;
3301 cout <<
"tdo_scheme_synthetic::refine_cols_hard "
3302 "before T.solve_second_system_with_help" << endl;
3305 f_use_mckay_solver, f_once,
3307 line_types, nb_line_types, distributions, nb_distributions,
3308 cnt_second_system, Sol);
3310 cout <<
"tdo_scheme_synthetic::refine_cols_hard "
3311 "after T.solve_second_system_with_help" << endl;
3316 cout <<
"tdo_scheme_synthetic::refine_cols_hard "
3317 "second system " << cnt_second_system
3318 <<
" found " << nb_distributions <<
" distributions." << endl;
3321 cout <<
"tdo_scheme_synthetic::refine_cols_hard "
3322 "The distributions are:" << endl;
3329 cout <<
"ATTENTION, we are running specific code "
3330 "for a problem of Cheon" << endl;
3334 for (h = 0; h < nb_distributions; h++) {
3335 x0 = distributions[h * nb_line_types + 0];
3337 for (j = 0; j < nb_line_types; j++) {
3338 distributions[cnt * nb_line_types + j] =
3339 distributions[h * nb_line_types + j];
3344 cout <<
"x0 > 12, something is wrong" << endl;
3348 cout <<
"CHEON: we found " << cnt <<
" refinements with x0=12" << endl;
3349 nb_distributions = cnt;
3354 cnt_second_system++;
3356 cout <<
"tdo_scheme_synthetic::refine_cols_hard before freeing T" << endl;
3360 cout <<
"tdo_scheme_synthetic::refine_cols_hard after closing T." << endl;
3363 cout <<
"tdo_scheme_synthetic::refine_cols_hard done" << endl;
3370 int f_omit,
int omit,
3371 int &L1,
int &L2,
int verbose_level)
3373 int f_v = (verbose_level >= 1);
3374 int l1, l2, omit2, i;
3380 for (i = l1 - omit; i < l1; i++) {
3387 cout <<
"tdo_scheme_synthetic::column_refinement_L1_L2 "
3389 <<
" l2=" << l2 <<
" L1=" << L1 <<
" L2=" << L2 << endl;
3396 int f_omit,
int omit,
3397 int *&line_types,
int &nb_line_types)
3399 int f_v = (verbose_level >= 1);
3400 int f_vv = (verbose_level >= 2);
3401 int i, j, f, l, I, J, rr, R, S, a, a2, s, L1, L2;
3402 int h, u, d, d2, o, e, p, eqn_number, nb_vars, nb_eqns;
3406 cout <<
"tdo_scheme_synthetic::tdo_columns_setup_first_system "
3417 cout <<
"omit=" << omit << endl;
3428 nb_eqns = L1 + 1 + (R - 1);
3431 T.
D1->
open(nb_eqns, nb_vars);
3434 for (I = 0; I < nb_eqns; I++) {
3435 for (J = 0; J < nb_vars; J++) {
3436 T.
D1->
A[I * nb_vars + J] = 0;
3445 for (I = 0; I < L1; I++) {
3448 for (j = 0; j < l; j++) {
3450 T.
D1->
Aij(I, J) = 1;
3468 for (i = 0; i < L2; i++) {
3470 T.
D1->
Aij(eqn_number, i) = a;
3477 for (j = 0; j < R; j++) {
3481 for (i = 0; i < L2; i++) {
3483 T.
D1->
Aij(eqn_number, i) = a;
3489 T.
D1->
m = eqn_number;
3498 for (j = 0; j < nb_vars; j++) {
3506 a = line_types[u * nb_vars + j];
3511 cout <<
"only one type, but no solution because of "
3512 "joining in row-class " << j << endl;
3534 cout <<
"tdo_scheme_synthetic::tdo_columns_setup_first_system done" << endl;
3543 int f_omit,
int omit,
3544 int f_use_packing_numbers,
3545 int *&line_types,
int &nb_line_types)
3547 int f_v = (verbose_level >= 1);
3548 int f_vv = (verbose_level >= 2);
3549 int i, len, r, I, J, L1, L2, Nb_eqns, Nb_vars;
3553 cout <<
"tdo_scheme_synthetic::tdo_columns_setup_second_system" << endl;
3554 cout <<
"f_use_packing_numbers="
3555 << f_use_packing_numbers << endl;
3558 int nb_eqns_joining, nb_eqns_counting;
3559 int nb_eqns_upper_bound, nb_eqns_used;
3566 nb_eqns_joining = L2 + Combi.
binomial2(L2);
3568 nb_eqns_upper_bound = 0;
3569 if (f_use_packing_numbers) {
3570 for (i = 0; i < l2; i++) {
3573 nb_eqns_upper_bound += len - 2;
3578 Nb_eqns = nb_eqns_joining + nb_eqns_counting + nb_eqns_upper_bound;
3586 T.
D2->
open(Nb_eqns, Nb_vars);
3588 cout <<
"tdo_scheme_synthetic::tdo_columns_setup_second_system "
3589 "opening second system with "
3590 << Nb_eqns <<
" equations and " << Nb_vars
3591 <<
" variables" << endl;
3594 cout <<
"l2=" << l2 << endl;
3595 cout <<
"L2=" << L2 << endl;
3596 cout <<
"nb_eqns_joining=" << nb_eqns_joining << endl;
3597 cout <<
"nb_eqns_counting=" << nb_eqns_counting << endl;
3598 cout <<
"nb_eqns_upper_bound=" << nb_eqns_upper_bound << endl;
3600 cout <<
"i : r = T.multiple_types[i] : T.types_first2[i] "
3601 ": T.types_len[r]" << endl;
3609 for (I = 0; I < Nb_eqns; I++) {
3610 for (J = 0; J < Nb_vars; J++) {
3611 T.
D2->
A[I * Nb_vars + J] = 0;
3618 line_types, nb_line_types,
3628 line_types, nb_line_types,
3630 if (f_use_packing_numbers) {
3635 line_types, nb_line_types,
3636 nb_eqns_joining + nb_eqns_counting ,
3651 cout <<
"tdo_scheme_synthetic::tdo_columns_setup_second_system, "
3652 "The second system is" << endl;
3656 cout <<
"tdo_scheme_synthetic::tdo_columns_setup_second_system done" << endl;
3665 int f_omit,
int omit,
3666 int *line_types,
int nb_line_types,
3669 int f_v = (verbose_level >= 1);
3670 int l2, L1, L2, i, r, f, l, j, c;
3671 int J, I, I1, I2, a, b, ab, a2, k, h, rr, p, u;
3676 cout <<
"tdo_scheme_synthetic::tdo_columns_setup_second_system_eqns_joining" << endl;
3681 for (I = 0; I < L2; I++) {
3682 sprintf(label,
"J_{%d}", I + 1);
3685 for (I1 = 0; I1 < L2; I1++) {
3686 for (I2 = I1 + 1; I2 < L2; I2++) {
3687 k = Combi.
ij2k(I1, I2, L2);
3688 sprintf(label,
"J_{%d,%d}", I1 + 1, I2 + 1);
3696 for (j = 0; j < l; j++) {
3699 for (I = 0; I < L2; I++) {
3700 a = line_types[c * L2 + I];
3702 T.
D2->
Aij(eqn_start + I, J) = a2;
3704 for (I1 = 0; I1 < L2; I1++) {
3705 for (I2 = I1 + 1; I2 < L2; I2++) {
3706 k = Combi.
ij2k(I1, I2, L2);
3707 a = line_types[c * L2 + I1];
3708 b = line_types[c * L2 + I2];
3710 T.
D2->
Aij(eqn_start + L2 + k, J) = ab;
3718 for (I = 0; I < L2; I++) {
3721 T.
D2->
RHS[eqn_start + I] = a2;
3723 for (I1 = 0; I1 < L2; I1++) {
3725 for (I2 = I1 + 1; I2 < L2; I2++) {
3727 k = Combi.
ij2k(I1, I2, L2);
3728 T.
D2->
RHS[eqn_start + l2 + k] = a * b;
3737 for (I = 0; I < L2; I++) {
3738 a = line_types[u * L2 + I];
3740 T.
D2->
RHS[eqn_start + I] -= a2 * p;
3741 if (T.
D2->
RHS[eqn_start + I] < 0) {
3743 cout <<
"tdo_columns_setup_second_system_eqns_"
3744 "joining: RHS is negative, no solution for "
3745 "the distribution" << endl;
3750 for (I1 = 0; I1 < L2; I1++) {
3751 a = line_types[u * L2 + I1];
3752 for (I2 = I1 + 1; I2 < L2; I2++) {
3753 b = line_types[u * L2 + I2];
3754 k = Combi.
ij2k(I1, I2, L2);
3756 T.
D2->
RHS[eqn_start + L2 + k] -= ab;
3757 if (T.
D2->
RHS[eqn_start + L2 + k] < 0) {
3759 cout <<
"tdo_columns_setup_second_system_eqns_"
3760 "joining: RHS is negative, no solution for "
3761 "the distribution" << endl;
3769 cout <<
"tdo_scheme_synthetic::tdo_columns_setup_second_system_eqns_joining done" << endl;
3778 int f_omit,
int omit,
3779 int *line_types,
int nb_line_types,
3782 int f_v = (verbose_level >= 1);
3783 int L1, L2, i, r, f, l, j, c, J, I, a, b, S, s;
3787 cout <<
"tdo_scheme_synthetic::tdo_columns_setup_second_system_eqns_counting" << endl;
3797 for (j = 0; j < l; j++) {
3800 for (I = 0; I < L2; I++) {
3801 snprintf(label, 1000,
"F_{%d,%d}", r + 1, I + 1);
3805 snprintf(label, 1000,
"F_{%d}", r + 1);
3813 for (j = 0; j < l; j++) {
3816 for (I = 0; I < L2; I++) {
3817 a = line_types[c * L2 + I];
3818 T.
D2->
Aij(eqn_start + i * (L2 + 1) + I, J) = a;
3820 T.
D2->
Aij(eqn_start + i * (L2 + 1) + L2, J) = 1;
3831 for (j = 0; j < l; j++) {
3844 for (I = 0; I < L2; I++) {
3847 T.
D2->
RHS[eqn_start + i * (L2 + 1) + I] = a * b;
3850 T.
D2->
RHS[eqn_start + i * (L2 + 1) + L2] = s;
3858 cout <<
"tdo_scheme_synthetic::tdo_columns_setup_second_system_eqns_counting done" << endl;
3866 int f_omit,
int omit,
3867 int *line_types,
int nb_line_types,
3868 int eqn_start,
int &nb_eqns_used)
3870 int f_v = (verbose_level >= 1);
3871 int nb_eqns_packing;
3872 int L1, L2, i, r, f, l, j, c, J, I;
3873 int k, h, rr, p, u, a, len, f_used;
3878 cout <<
"tdo_scheme_synthetic::tdo_columns_setup_second_system_eqns_upper_bound" << endl;
3880 nb_eqns_packing = 0;
3883 for (I = 0; I < L2; I++) {
3888 for (k = 3; k <= len; k++) {
3894 for (j = 0; j < l; j++) {
3897 a = line_types[c * L2 + I];
3902 T.
D2->
Aij(eqn_start + nb_eqns_packing, J) = 1;
3909 T.
D2->
RHS[eqn_start + nb_eqns_packing] = bound;
3910 T.
D2->
type[eqn_start + nb_eqns_packing] =
t_LE;
3915 a = line_types[u * L2 + I];
3919 T.
D2->
RHS[eqn_start + nb_eqns_packing] -= p;
3920 if (T.
D2->
RHS[eqn_start + nb_eqns_packing] < 0) {
3922 cout <<
"tdo_scheme::tdo_columns_setup_"
3923 "second_system_eqns_upper_bound "
3929 snprintf(label, 1000,
"P_{%d,%d} \\,\\mbox{using}\\, P(%d,%d)=%d",
3930 I + 1, k, len, k, bound);
3936 nb_eqns_used = nb_eqns_packing;
3938 cout <<
"tdo_columns_setup_second_system_eqns_upper_bound "
3939 "nb_eqns_used = " << nb_eqns_used << endl;
3942 cout <<
"tdo_scheme_synthetic::tdo_columns_setup_second_system_eqns_upper_bound done" << endl;
3954 int lambda3,
int block_size,
3955 int *&point_types,
int &nb_point_types,
int &point_type_len,
3956 int *&distributions,
int &nb_distributions)
3958 int f_v = (verbose_level >= 1);
3959 int f_vv = (verbose_level >= 2);
3960 int f_vvv = (verbose_level >= 3);
3962 int nb_eqns, nb_vars = 0;
3963 int point_types_allocated;
3971 cout <<
"tdo_scheme_synthetic::td3_refine_rows" << endl;
3974 lambda2 = lambda3 * (nb_points - 2) / (block_size - 2);
3976 cout <<
"nb_points = " << nb_points
3977 <<
" lambda2 = " << lambda2 << endl;
3979 if ((block_size - 2) * lambda2 != lambda3 * (nb_points - 2)) {
3980 cout <<
"parameters are wrong" << endl;
3995 point_types_allocated = 100;
3997 point_types =
NEW_int(point_types_allocated * l2);
3998 point_type_len = l2;
4003 for (r = 0; r < R; r++) {
4006 cout <<
"r=" << r << endl;
4009 lambda3, block_size, lambda2,
4012 point_types, nb_point_types)) {
4018 point_types, nb_point_types, point_types_allocated);
4021 cout <<
"r = " << r <<
", found " << nb_sol
4022 <<
" refined point types" << endl;
4034 cout <<
"only one solution in block r=" << r << endl;
4051 int Nb_vars, Nb_eqns;
4054 lambda3, block_size, lambda2,
4056 nb_vars, Nb_vars, Nb_eqns,
4057 point_types, nb_point_types)) {
4065 distributions =
NEW_int(1 * nb_point_types);
4066 nb_distributions = 0;
4073 distributions[nb_distributions * nb_point_types + u] =
4080 int f_scale =
FALSE;
4085 point_types, nb_point_types, distributions, nb_distributions);
4089 cout <<
"tdo_scheme_synthetic::td3_refine_rows "
4090 "found " << nb_distributions
4091 <<
" distributions." << endl;
4094 cout <<
"tdo_scheme_synthetic::td3_refine_rows done" << endl;
4100 int lambda3,
int block_size,
int lambda2,
4103 int &nb_vars,
int &nb_eqns,
4104 int *&point_types,
int &nb_point_types)
4106 int f_v = (verbose_level >= 1);
4107 int f_vv = (verbose_level >= 2);
4108 int f_vvv = (verbose_level >= 3);
4109 int i, j, R, l1, l2, r2, r3, S, I, J, f, l, s;
4110 int eqn_offset, eqn_cnt;
4114 cout <<
"tdo_scheme_synthetic::td3_rows_setup_first_system r=" << r << endl;
4126 nb_eqns = R + R + (R - 1) + (((R - 1) * (R - 2)) >> 1) + l1;
4129 T.
D1->
open(nb_eqns, nb_vars);
4132 for (I = 0; I < nb_eqns; I++) {
4133 for (J = 0; J < nb_vars; J++) {
4134 T.
D1->
A[I * nb_vars + J] = 0;
4137 for (I = 0; I < nb_eqns; I++) {
4138 T.
D1->
RHS[I] = 9999;
4142 for (r2 = 0; r2 < R; r2++) {
4145 for (J = 0; J < nb_vars; J++) {
4146 T.
D1->
A[r2 * nb_vars + J] =
4153 for (J = 0; J < nb_vars; J++) {
4160 cout <<
"r=" << r <<
" after pair joining, the system is" << endl;
4166 for (r2 = 0; r2 < R; r2++) {
4169 for (J = 0; J < nb_vars; J++) {
4170 T.
D1->
A[(eqn_offset + r2) * nb_vars + J] =
4174 T.
D1->
RHS[eqn_offset + r2] =
4180 for (J = 0; J < nb_vars; J++) {
4181 T.
D1->
A[(eqn_offset + r2) * nb_vars + J] =
4185 T.
D1->
RHS[eqn_offset + r2] =
4191 cout <<
"tdo_scheme_synthetic::td3_rows_setup_first_system "
4192 "r=" << r <<
" after triple joining, the system is" << endl;
4198 for (r2 = 0; r2 < R; r2++) {
4203 for (J = 0; J < nb_vars; J++) {
4204 T.
D1->
A[(eqn_offset + eqn_cnt) * nb_vars + J] =
4212 cout <<
"tdo_scheme_synthetic::td3_rows_setup_first_system "
4213 "r=" << r <<
" after connections to pairs "
4214 "from one different row-partition, the system is" << endl;
4218 eqn_offset += (R - 1);
4220 for (r2 = 0; r2 < R; r2++) {
4224 for (r3 = r2 + 1; r3 < R; r3++) {
4229 for (J = 0; J < nb_vars; J++) {
4230 T.
D1->
A[(eqn_offset + eqn_cnt) * nb_vars + J] =
4233 T.
D1->
RHS[eqn_offset + eqn_cnt] =
4238 eqn_offset += eqn_cnt;
4240 cout <<
"tdo_scheme_synthetic::td3_rows_setup_first_system "
4241 "r=" << r <<
" after connections to pairs from two "
4242 "different row-partitions, the system is" << endl;
4247 for (i = 0; i < l1; i++) {
4250 cout <<
"r=" << r <<
" i=" << i <<
" s=" << s << endl;
4252 T.
D1->
RHS[eqn_offset + i] = s;
4257 cout <<
"f=" << f <<
" l=" << l << endl;
4260 for (j = 0; j < l; j++) {
4261 T.
D1->
A[(eqn_offset + i) * nb_vars + f + j] = 1;
4267 cout <<
"tdo_scheme_synthetic::td3_rows_setup_first_system "
4268 "r=" << r <<
" after adding extra equations, "
4269 "the system is" << endl;
4279 cout <<
"tdo_scheme_synthetic::td3_rows_setup_first_system "
4280 "r=" << r <<
" the system is" << endl;
4285 cout <<
"tdo_scheme_synthetic::td3_rows_setup_first_system done" << endl;
4292 int lambda3,
int block_size,
int lambda2,
4294 int nb_vars,
int &Nb_vars,
int &Nb_eqns,
4295 int *&point_types,
int &nb_point_types)
4297 int f_v = (verbose_level >= 1);
4298 int f_vv = (verbose_level >= 2);
4300 int l2, i, r, I, J, nb_eqns_counting;
4304 cout <<
"tdo_scheme_synthetic::td3_rows_setup_second_system" << endl;
4309 Nb_eqns = nb_eqns_counting;
4318 T.
D2->
open(Nb_eqns, Nb_vars);
4320 cout <<
"td3_rows_setup_second_system: "
4321 "opening second system with "
4322 << Nb_eqns <<
" equations and "
4323 << Nb_vars <<
" variables" << endl;
4326 for (I = 0; I < Nb_eqns; I++) {
4327 for (J = 0; J < Nb_vars; J++) {
4328 T.
D2->
A[I * Nb_vars + J] = 0;
4331 for (I = 0; I < Nb_eqns; I++) {
4332 T.
D2->
RHS[I] = 9999;
4337 lambda3, block_size, lambda2, S,
4340 point_types, nb_point_types, 0)) {
4350 cout <<
"The second system is" << endl;
4356 cout <<
"tdo_scheme_synthetic::td3_rows_setup_second_system "
4364 int lambda3,
int block_size,
int lambda2,
int &S,
4366 int nb_vars,
int Nb_vars,
4367 int *&point_types,
int &nb_point_types,
int eqn_offset)
4369 int f_v = (verbose_level >= 1);
4371 int f_vvv = (verbose_level >= 3);
4372 int I, i, r, f, l, j, c, J, a, b, rr, p, u, l2, h, s;
4377 cout <<
"tdo_scheme_synthetic::td3_rows_counting_flags "
4378 "eqn_offset=" << eqn_offset
4387 for (I = 0; I < l2; I++) {
4388 for (j = 0; j < l; j++) {
4391 a = point_types[c * nb_vars + I];
4392 T.
D2->
A[(eqn_offset + i * (l2 + 1) + I) * Nb_vars + J] = a;
4396 T.
D2->
RHS[eqn_offset + i * (l2 + 1) + I] = a * b;
4401 a = point_types[u * nb_vars + I];
4402 T.
D2->
RHS[eqn_offset + i * (l2 + 1) + I] -= a * p;
4403 if (T.
D2->
RHS[eqn_offset + i * (l2 + 1) + I] < 0) {
4405 cout <<
"td3_rows_counting_flags: RHS["
4406 "nb_eqns_joining + i * (l2 + 1) + I] "
4407 "is negative, no solution for the "
4408 "distribution" << endl;
4423 for (j = 0; j < l; j++) {
4427 T.
D2->
A[(eqn_offset + i * (l2 + 1) + l2) * Nb_vars + J] = 1;
4431 T.
D2->
RHS[eqn_offset + i * (l2 + 1) + l2] = s;
4435 cout <<
"tdo_scheme_synthetic::td3_rows_counting_flags, the system is" << endl;
4440 cout <<
"tdo_scheme_synthetic::td3_rows_counting_flags done" << endl;
4453 int lambda3,
int block_size,
4454 int f_scale,
int scaling,
4455 int *&line_types,
int &nb_line_types,
int &line_type_len,
4456 int *&distributions,
int &nb_distributions)
4458 int f_v = (verbose_level >= 1);
4459 int f_vv = (verbose_level >= 2);
4460 int f_vvv = (verbose_level >= 3);
4461 int R, l2, r, nb_eqns, nb_vars = 0;
4462 int line_types_allocated;
4470 cout <<
"tdo_scheme_synthetic::td3_refine_columns" << endl;
4474 lambda2 = lambda3 * (nb_points - 2) / (block_size - 2);
4476 cout <<
"nb_points = " << nb_points
4477 <<
" lambda2 = " << lambda2 << endl;
4479 if ((block_size - 2) * lambda2 != lambda3 * (nb_points - 2)) {
4480 cout <<
"tdo_scheme_synthetic::td3_refine_columns parameters are wrong" << endl;
4494 line_types_allocated = 100;
4496 line_types =
NEW_int(line_types_allocated * l2);
4502 for (r = 0; r < R; r++) {
4505 cout <<
"r=" << r << endl;
4508 lambda3, block_size, lambda2,
4511 line_types, nb_line_types)) {
4518 line_types, nb_line_types, line_types_allocated);
4521 cout <<
"r = " << r <<
", found " << nb_sol
4522 <<
" refine line types" << endl;
4534 cout <<
"only one solution in block r=" << r << endl;
4551 int Nb_vars, Nb_eqns;
4554 lambda3, block_size, lambda2, f_scale, scaling,
4556 nb_vars, Nb_vars, Nb_eqns,
4557 line_types, nb_line_types)) {
4567 line_types, nb_line_types,
4568 distributions, nb_distributions);
4572 cout <<
"tdo_scheme_synthetic::td3_refine_columns: found "
4573 << nb_distributions <<
" distributions." << endl;
4579 int lambda3,
int block_size,
int lambda2,
4582 int &nb_vars,
int &nb_eqns,
4583 int *&line_types,
int &nb_line_types)
4585 int f_v = (verbose_level >= 1);
4586 int f_vv = (verbose_level >= 2);
4587 int f_vvv = (verbose_level >= 3);
4588 int j, R, l1, l2, S, I, J, f, l, a, a2;
4589 int s, d, d2, d3, o, h, rr, p, u, a3, e;
4593 cout <<
"tdo_scheme_synthetic::td3_columns_setup_first_system r=" << r << endl;
4607 T.
D1->
open(nb_eqns, nb_vars);
4610 for (I = 0; I < nb_eqns; I++) {
4611 for (J = 0; J < nb_vars; J++) {
4612 T.
D1->
A[I * nb_vars + J] = 0;
4616 for (I = 0; I < nb_eqns; I++) {
4619 for (j = 0; j < l; j++) {
4621 T.
D1->
A[I * nb_vars + J] = 1;
4638 for (j = 0; j < nb_vars; j++) {
4653 a = line_types[u * nb_vars + j];
4658 cout <<
"only one type, but no solution because "
4659 "of joining in row-class " << j << endl;
4669 for (j = 0; j < nb_vars; j++) {
4683 a = line_types[u * nb_vars + j];
4688 cout <<
"only one type, but no solution because "
4689 "of joining in row-class " << j << endl;
4705 cout <<
"r=" << r <<
" the system is" << endl;
4709 cout <<
"tdo_scheme_synthetic::td3_columns_setup_first_system done" << endl;
4717 int lambda3,
int block_size,
int lambda2,
4718 int f_scale,
int scaling,
4720 int nb_vars,
int &Nb_vars,
int &Nb_eqns,
4721 int *&line_types,
int &nb_line_types)
4723 int f_v = (verbose_level >= 1);
4724 int f_vv = (verbose_level >= 2);
4726 int l2, i, r, I, J, a;
4728 int nb_eqns_joining, nb_eqns_joining_pairs;
4729 int nb_eqns_joining_triples, nb_eqns_counting;
4733 cout <<
"tdo_scheme_synthetic::td3_columns_setup_second_system" << endl;
4738 nb_eqns_joining_triples = l2 + l2 * (l2 - 1) + Combi.
binomial3(l2);
4743 nb_eqns_joining_pairs = l2 + Combi.
binomial2(l2);
4746 nb_eqns_joining = nb_eqns_joining_triples + nb_eqns_joining_pairs;
4748 Nb_eqns = nb_eqns_joining + nb_eqns_counting;
4756 T.
D2->
open(Nb_eqns, Nb_vars);
4758 cout <<
"tdo_scheme_synthetic::td3_columns_setup_second_system: "
4759 "opening second system with "
4760 << Nb_eqns <<
" equations and "
4761 << Nb_vars <<
" variables" << endl;
4764 for (I = 0; I < Nb_eqns; I++) {
4765 for (J = 0; J < Nb_vars; J++) {
4766 T.
D2->
A[I * Nb_vars + J] = 0;
4769 for (I = 0; I < Nb_eqns; I++) {
4770 T.
D2->
RHS[I] = 9999;
4775 cout <<
"tdo_scheme_synthetic::td3_columns_setup_second_system "
4776 "before td3_columns_triples_same_class" << endl;
4779 lambda3, block_size,
4782 line_types, nb_line_types, 0)) {
4787 cout <<
"tdo_scheme_synthetic::td3_columns_setup_second_system "
4788 "after td3_columns_triples_same_class" << endl;
4792 cout <<
"tdo_scheme_synthetic::td3_columns_setup_second_system "
4793 "before td3_columns_pairs_same_class" << endl;
4796 lambda3, block_size, lambda2,
4799 line_types, nb_line_types, nb_eqns_joining_triples)) {
4804 cout <<
"tdo_scheme_synthetic::td3_columns_setup_second_system "
4805 "after td3_columns_pairs_same_class" << endl;
4809 cout <<
"tdo_scheme_synthetic::td3_columns_setup_second_system "
4810 "before td3_columns_counting_flags" << endl;
4813 lambda3, block_size, lambda2, S,
4816 line_types, nb_line_types, nb_eqns_joining)) {
4821 cout <<
"tdo_scheme_synthetic::td3_columns_setup_second_system "
4822 "after td3_columns_counting_flags" << endl;
4826 cout <<
"tdo_scheme_synthetic::td3_columns_setup_second_system "
4827 "before td3_columns_lambda2_joining_pairs_from_different_classes" << endl;
4831 lambda3, block_size, lambda2,
4834 line_types, nb_line_types, nb_eqns_joining_triples + l2)) {
4839 cout <<
"tdo_scheme_synthetic::td3_columns_setup_second_system "
4840 "after td3_columns_lambda2_joining_pairs_from_different_classes" << endl;
4844 cout <<
"tdo_scheme_synthetic::td3_columns_setup_second_system "
4845 "before td3_columns_lambda3_joining_triples_2_1" << endl;
4848 lambda3, block_size, lambda2,
4851 line_types, nb_line_types, l2)) {
4856 cout <<
"tdo_scheme_synthetic::td3_columns_setup_second_system "
4857 "after td3_columns_lambda3_joining_triples_2_1" << endl;
4861 cout <<
"tdo_scheme_synthetic::td3_columns_setup_second_system "
4862 "before td3_columns_lambda3_joining_triples_1_1_1" << endl;
4865 lambda3, block_size, lambda2,
4868 line_types, nb_line_types, l2 + l2 * (l2 - 1))) {
4873 cout <<
"tdo_scheme_synthetic::td3_columns_setup_second_system "
4874 "before td3_columns_lambda3_joining_triples_1_1_1" << endl;
4879 cout <<
"cannot scale by " << scaling
4880 <<
" b/c S=" << S << endl;
4884 for (I = 0; I < Nb_eqns; I++) {
4888 cout <<
"cannot scale by " << scaling
4889 <<
" b/c RHS[" << I <<
"]=" << a << endl;
4897 for (I = 0; I < Nb_eqns; I++)
4898 for (J = 0; J < Nb_vars; J++)
4899 T.
D2->
A[I * Nb_vars + J] *= scaling;
4910 cout <<
"The second system is" << endl;
4916 cout <<
"tdo_scheme_synthetic::td3_columns_setup_second_system done" << endl;
4924 int lambda3,
int block_size,
4926 int nb_vars,
int Nb_vars,
4927 int *&line_types,
int &nb_line_types,
int eqn_offset)
4929 int f_v = (verbose_level >= 1);
4931 int f_vvv = (verbose_level >= 3);
4932 int I, i, r, f, l, j, c, J, a, a3, rr, p, u, l2, h;
4938 cout <<
"tdo_scheme_synthetic::td3_columns_triples_same_class: "
4939 "eqn_offset=" << eqn_offset << endl;
4942 for (I = 0; I < l2; I++) {
4947 for (j = 0; j < l; j++) {
4950 a = line_types[c * nb_vars + I];
4953 T.
D2->
A[(eqn_offset + I) * Nb_vars + J] = a3;
4958 T.
D2->
RHS[eqn_offset + I] = a3 * lambda3;
4963 a = line_types[u * nb_vars + I];
4965 T.
D2->
RHS[eqn_offset + I] -= a3 * p;
4966 if (T.
D2->
RHS[eqn_offset + I] < 0) {
4968 cout <<
"td3_refine_columns: RHS[I] is negative, "
4969 "no solution for the distribution" << endl;
4976 cout <<
"triples from the same class, the system is" << endl;
4980 cout <<
"tdo_scheme_synthetic::td3_columns_triples_same_class done" << endl;
4986 int lambda3,
int block_size,
int lambda2,
4988 int nb_vars,
int Nb_vars,
4989 int *&line_types,
int &nb_line_types,
int eqn_offset)
4991 int f_v = (verbose_level >= 1);
4993 int f_vvv = (verbose_level >= 3);
4994 int I, i, r, f, l, j, c, J, a, a2, rr, p, u, l2, h;
5000 cout <<
"tdo_scheme_synthetic::td3_columns_pairs_same_class: "
5001 "eqn_offset=" << eqn_offset << endl;
5004 for (I = 0; I < l2; I++) {
5009 for (j = 0; j < l; j++) {
5012 a = line_types[c * nb_vars + I];
5015 T.
D2->
A[(eqn_offset + I) * Nb_vars + J] = a2;
5020 T.
D2->
RHS[eqn_offset + I] = a2 * lambda2;
5025 a = line_types[u * nb_vars + I];
5027 T.
D2->
RHS[eqn_offset + I] -= a2 * p;
5028 if (T.
D2->
RHS[eqn_offset + I] < 0) {
5030 cout <<
"td3_refine_columns: RHS[eqn_offset + I] "
5031 "is negative, no solution for the "
5032 "distribution" << endl;
5039 cout <<
"pairs from the same class, the system is" << endl;
5044 cout <<
"tdo_scheme_synthetic::td3_columns_pairs_same_class done" << endl;
5050 int lambda3,
int block_size,
int lambda2,
int &S,
5052 int nb_vars,
int Nb_vars,
5053 int *&line_types,
int &nb_line_types,
int eqn_offset)
5055 int f_v = (verbose_level >= 1);
5057 int f_vvv = (verbose_level >= 3);
5058 int I, i, r, f, l, j, c, J, a, b, rr, p, u, l2, h, s;
5063 cout <<
"tdo_scheme_synthetic::td3_columns_counting_flags: "
5064 "eqn_offset=" << eqn_offset << endl;
5074 for (I = 0; I < l2; I++) {
5076 for (j = 0; j < l; j++) {
5079 a = line_types[c * nb_vars + I];
5080 T.
D2->
A[(eqn_offset + i * (l2 + 1) + I) * Nb_vars + J] = a;
5084 T.
D2->
RHS[eqn_offset + i * (l2 + 1) + I] = a * b;
5090 a = line_types[u * nb_vars + I];
5091 T.
D2->
RHS[eqn_offset + i * (l2 + 1) + I] -= a * p;
5093 if (T.
D2->
RHS[eqn_offset + i * (l2 + 1) + I] < 0) {
5095 cout <<
"td3_columns_counting_flags: "
5096 "RHS[nb_eqns_joining + i * (l2 + 1) + I] "
5097 "is negative, no solution for the "
5098 "distribution" << endl;
5114 for (j = 0; j < l; j++) {
5118 T.
D2->
A[(eqn_offset + i * (l2 + 1) + l2) * Nb_vars + J] = 1;
5122 T.
D2->
RHS[eqn_offset + i * (l2 + 1) + l2] = s;
5126 cout <<
"tdo_scheme_synthetic::td3_columns_counting_flags, the system is" << endl;
5131 cout <<
"tdo_scheme_synthetic::td3_columns_counting_flags done" << endl;
5139 int lambda3,
int block_size,
int lambda2,
5141 int nb_vars,
int Nb_vars,
5142 int *&line_types,
int &nb_line_types,
int eqn_offset)
5144 int f_v = (verbose_level >= 1);
5146 int f_vvv = (verbose_level >= 3);
5147 int I1, I2, i, r, f, l, j, c, J, a, b, ab, k, rr, p, u, l2, h;
5153 cout <<
"tdo_scheme_synthetic::td3_columns_lambda2_joining_pairs_from_different_classes "
5154 "eqn_offset=" << eqn_offset << endl;
5157 for (I1 = 0; I1 < l2; I1++) {
5159 for (I2 = I1 + 1; I2 < l2; I2++) {
5160 k = Combi.
ij2k(I1, I2, l2);
5167 for (j = 0; j < l; j++) {
5170 a = line_types[c * nb_vars + I1];
5171 b = line_types[c * nb_vars + I2];
5174 T.
D2->
A[(eqn_offset + k) * Nb_vars + J] = ab;
5179 T.
D2->
RHS[eqn_offset + k] = a * b * lambda2;
5185 a = line_types[u * nb_vars + I1];
5186 b = line_types[u * nb_vars + I2];
5187 T.
D2->
RHS[eqn_offset + k] -= a * b * p;
5189 if (T.
D2->
RHS[eqn_offset + k] < 0) {
5191 cout <<
"td3_columns_lambda2_joining_pairs_"
5192 "from_different_classes: RHS[eqn_offset + k] "
5193 "is negative, no solution for the "
5194 "distribution" << endl;
5202 cout <<
"td3_columns_lambda2_joining_pairs_from_different_classes, "
5203 "the system is" << endl;
5208 cout <<
"tdo_scheme_synthetic::td3_columns_lambda2_joining_pairs_from_different_classes done" << endl;
5215 int lambda3,
int block_size,
int lambda2,
5217 int nb_vars,
int Nb_vars,
5218 int *&line_types,
int &nb_line_types,
int eqn_offset)
5220 int f_v = (verbose_level >= 1);
5222 int f_vvv = (verbose_level >= 3);
5223 int I1, I2, i, r, f, l, j, c, J, a, a2, ab, b, k, rr, p, u, l2, h;
5224 int length_first, length_first2, length_second;
5230 cout <<
"tdo_scheme_synthetic::td3_columns_lambda3_joining_triples_2_1: "
5231 "eqn_offset=" << eqn_offset << endl;
5235 for (I1 = 0; I1 < l2; I1++) {
5237 length_first2 = Combi.
binomial2(length_first);
5239 for (I2 = 0; I2 < l2; I2++) {
5252 for (j = 0; j < l; j++) {
5255 a = line_types[c * nb_vars + I1];
5256 b = line_types[c * nb_vars + I2];
5258 T.
D2->
A[(l2 + k) * Nb_vars + J] = ab;
5261 T.
D2->
RHS[l2 + k] = length_first2 * length_second * lambda3;
5267 a = line_types[u * nb_vars + I1];
5269 b = line_types[u * nb_vars + I2];
5270 T.
D2->
RHS[l2 + k] -= a2 * b * p;
5272 if (T.
D2->
RHS[l2 + k] < 0) {
5274 cout <<
"td3_columns_lambda3_joining_triples_2_1: "
5275 "RHS[l2 + k] is negative, no solution for "
5276 "the distribution" << endl;
5284 cout <<
"td3_columns_lambda3_joining_triples_2_1, "
5285 "the system is" << endl;
5290 cout <<
"tdo_scheme_synthetic::td3_columns_lambda3_joining_triples_2_1 done" << endl;
5297 int lambda3,
int block_size,
int lambda2,
5299 int nb_vars,
int Nb_vars,
5300 int *&line_types,
int &nb_line_types,
int eqn_offset)
5302 int f_v = (verbose_level >= 1);
5304 int f_vvv = (verbose_level >= 3);
5305 int I1, I2, I3, i, r, f, l, j, c, J, a, b, k, rr, p, u, l2, h, g;
5306 int length_first, length_second, length_third;
5312 cout <<
"tdo_scheme_synthetic::td3_columns_lambda3_joining_triples_1_1_1 "
5313 "eqn_offset=" << eqn_offset << endl;
5316 for (I1 = 0; I1 < l2; I1++) {
5319 for (I2 = I1 + 1; I2 < l2; I2++) {
5322 for (I3 = I2 + 1; I3 < l2; I3++) {
5325 k = Combi.
ijk_rank(I1, I2, I3, l2);
5330 for (j = 0; j < l; j++) {
5333 a = line_types[c * nb_vars + I1];
5334 b = line_types[c * nb_vars + I2];
5335 g = line_types[c * nb_vars + I3];
5336 T.
D2->
A[(l2 + l2 * (l2 - 1) + k) *
5337 Nb_vars + J] = a * b * g;
5340 T.
D2->
RHS[l2 + l2 * (l2 - 1) + k] = length_first *
5341 length_second * length_third * lambda3;
5346 a = line_types[u * nb_vars + I1];
5347 b = line_types[u * nb_vars + I2];
5348 g = line_types[u * nb_vars + I3];
5349 T.
D2->
RHS[l2 + l2 * (l2 - 1) + k] -= a * b * g * p;
5350 if (T.
D2->
RHS[l2 + l2 * (l2 - 1) + k] < 0) {
5352 cout <<
"td3_columns_lambda3_joining_triples_"
5353 "1_1_1: RHS[l2 + l2 * (l2 - 1) + k] is "
5354 "negative, no solution for the "
5355 "distribution" << endl;
5364 cout <<
"td3_columns_lambda3_joining_triples_1_1_1, "
5365 "the system is" << endl;
5369 cout <<
"tdo_scheme_synthetic::td3_columns_lambda3_joining_triples_1_1_1 done" << endl;
a collection of combinatorial functions
int first_k_subset(int *set, int n, int k)
int minus_one_if_positive(int i)
long int binomial3(int a)
int ordered_pair_rank(int i, int j, int n)
long int largest_binomial2_below(int a2)
int ijk_rank(int i, int j, int k, int n)
int ij2k(int i, int j, int n)
long int largest_binomial3_below(int a3)
long int binomial2(int a)
int next_k_subset(int *set, int n, int k)
a class related to the class tdo_scheme
void solve_second_system_with_help(int verbose_level, int f_use_mckay_solver, int f_once, int *classes_len, int f_scale, int scaling, int *&line_types, int &nb_line_types, int *&distributions, int &nb_distributions, int cnt_second_system, solution_file_data *Sol)
void solve_second_system(int verbose_level, int f_use_mckay_solver, int f_once, int *classes_len, int f_scale, int scaling, int *&line_types, int &nb_line_types, int *&distributions, int &nb_distributions)
int solve_first_system(int verbose_level, int *&line_types, int &nb_line_types, int &line_types_allocated)
void solve_second_system_omit(int verbose_level, int *classes_len, int *&line_types, int &nb_line_types, int *&distributions, int &nb_distributions, int omit)
int * row_class_index[NUMBER_OF_SCHEMES]
int * col_class_no[NUMBER_OF_SCHEMES]
int geometric_test_for_row_scheme(data_structures::partitionstack &P, int *point_types, int nb_point_types, int point_type_len, int *distributions, int nb_distributions, int f_omit1, int omit1, int verbose_level)
int td3_columns_setup_first_system(int verbose_level, int lambda3, int block_size, int lambda2, tdo_data &T, int r, data_structures::partitionstack &P, int &nb_vars, int &nb_eqns, int *&line_types, int &nb_line_types)
int * row_classes[NUMBER_OF_SCHEMES]
int td3_refine_rows(int verbose_level, int f_once, int lambda3, int block_size, int *&point_types, int &nb_point_types, int &point_type_len, int *&distributions, int &nb_distributions)
void get_row_or_col_scheme(int h, int l, int verbose_level)
int tdo_rows_setup_second_system_eqns_joining(int verbose_level, tdo_data &T, data_structures::partitionstack &P, int f_omit, int omit, int f_dual_is_linear_space, int *point_types, int nb_point_types, int eqn_offset)
int td3_rows_counting_flags(int verbose_level, int lambda3, int block_size, int lambda2, int &S, tdo_data &T, int nb_vars, int Nb_vars, int *&point_types, int &nb_point_types, int eqn_offset)
int td3_refine_columns(int verbose_level, int f_once, int lambda3, int block_size, int f_scale, int scaling, int *&line_types, int &nb_line_types, int &line_type_len, int *&distributions, int &nb_distributions)
int count_nb_inc_from_extra_row_scheme(int verbose_level)
int td3_columns_counting_flags(int verbose_level, int lambda3, int block_size, int lambda2, int &S, tdo_data &T, int nb_vars, int Nb_vars, int *&line_types, int &nb_line_types, int eqn_offset)
int * the_extra_row_scheme
int refine_columns(int verbose_level, int f_once, data_structures::partitionstack &P, int *&line_types, int &nb_line_types, int &line_type_len, int *&distributions, int &nb_distributions, int &cnt_second_system, solution_file_data *Sol, int f_omit1, int omit1, int f_omit, int omit, int f_D1_upper_bound_x0, int D1_upper_bound_x0, int f_use_mckay_solver, int f_use_packing_numbers)
int tdo_columns_setup_second_system_eqns_upper_bound(int verbose_level, tdo_data &T, data_structures::partitionstack &P, int f_omit, int omit, int *line_types, int nb_line_types, int eqn_start, int &nb_eqns_used)
void tdo_columns_setup_second_system_eqns_counting(int verbose_level, tdo_data &T, data_structures::partitionstack &P, int f_omit, int omit, int *line_types, int nb_line_types, int eqn_start)
int refine_cols_hard(data_structures::partitionstack &P, int verbose_level, int f_once, int *&line_types, int &nb_line_types, int &line_type_len, int *&distributions, int &nb_distributions, int &cnt_second_system, solution_file_data *Sol, int f_omit1, int omit1, int f_omit, int omit, int f_D1_upper_bound_x0, int D1_upper_bound_x0, int f_use_mckay_solver, int f_use_packing_numbers)
int nb_col_classes[NUMBER_OF_SCHEMES]
void row_refinement_L1_L2(data_structures::partitionstack &P, int f_omit, int omit, int &L1, int &L2, int verbose_level)
void get_column_split_partition(int verbose_level, data_structures::partitionstack &P)
int tdo_columns_setup_second_system_eqns_joining(int verbose_level, tdo_data &T, data_structures::partitionstack &P, int f_omit, int omit, int *line_types, int nb_line_types, int eqn_start)
int * col_classes_len[NUMBER_OF_SCHEMES]
int td3_rows_setup_second_system(int verbose_level, int lambda3, int block_size, int lambda2, tdo_data &T, int nb_vars, int &Nb_vars, int &Nb_eqns, int *&point_types, int &nb_point_types)
void get_partition(int h, int l, int verbose_level)
void column_refinement_L1_L2(data_structures::partitionstack &P, int f_omit, int omit, int &L1, int &L2, int verbose_level)
void exit_partition_stack()
int * the_extra_col_scheme
void print_scheme_tex_fancy(std::ostream &ost, int h, int f_label, std::string &label)
int td3_columns_setup_second_system(int verbose_level, int lambda3, int block_size, int lambda2, int f_scale, int scaling, tdo_data &T, int nb_vars, int &Nb_vars, int &Nb_eqns, int *&line_types, int &nb_line_types)
int * the_extra_col_scheme_cur
int * row_classes_first[NUMBER_OF_SCHEMES]
void print_scheme_tex(std::ostream &ost, int h)
void get_row_split_partition(int verbose_level, data_structures::partitionstack &P)
void print_scheme(int h, int verbose_level)
int count_nb_inc_from_row_scheme(int verbose_level)
int * col_classes_first[NUMBER_OF_SCHEMES]
int geometric_test_for_row_scheme_level_s(data_structures::partitionstack &P, int s, int *point_types, int nb_point_types, int point_type_len, int *distribution, int *non_zero_blocks, int nb_non_zero_blocks, int f_omit1, int omit1, int verbose_level)
int * the_extra_row_scheme_cur
int td3_rows_setup_first_system(int verbose_level, int lambda3, int block_size, int lambda2, tdo_data &T, int r, data_structures::partitionstack &P, int &nb_vars, int &nb_eqns, int *&point_types, int &nb_point_types)
int refine_rows_hard(data_structures::partitionstack &P, int verbose_level, int f_use_mckay, int f_once, int *&point_types, int &nb_point_types, int &point_type_len, int *&distributions, int &nb_distributions, int &cnt_second_system, int f_omit1, int omit1, int f_omit, int omit, int f_use_packing_numbers, int f_dual_is_linear_space)
data_structures::partitionstack * P
void init_TDO(int *Part, int *Entries, int Row_level, int Col_level, int Extra_row_level, int Extra_col_level, int Lambda_level, int verbose_level)
int td3_columns_triples_same_class(int verbose_level, int lambda3, int block_size, tdo_data &T, int nb_vars, int Nb_vars, int *&line_types, int &nb_line_types, int eqn_offset)
int tdo_rows_setup_first_system(int verbose_level, tdo_data &T, int r, data_structures::partitionstack &P, int f_omit, int omit, int *&point_types, int &nb_point_types)
int tdo_rows_setup_second_system(int verbose_level, tdo_data &T, data_structures::partitionstack &P, int f_omit, int omit, int f_use_packing_numbers, int f_dual_is_linear_space, int *&point_types, int &nb_point_types)
int td3_columns_lambda3_joining_triples_2_1(int verbose_level, int lambda3, int block_size, int lambda2, tdo_data &T, int nb_vars, int Nb_vars, int *&line_types, int &nb_line_types, int eqn_offset)
int td3_columns_lambda3_joining_triples_1_1_1(int verbose_level, int lambda3, int block_size, int lambda2, tdo_data &T, int nb_vars, int Nb_vars, int *&line_types, int &nb_line_types, int eqn_offset)
int refine_rows_easy(int verbose_level, int *&point_types, int &nb_point_types, int &point_type_len, int *&distributions, int &nb_distributions, int &cnt_second_system)
int * col_classes[NUMBER_OF_SCHEMES]
int nb_row_classes[NUMBER_OF_SCHEMES]
void init_part_and_entries_int(int *part, int *entries, int verbose_level)
int level[NUMBER_OF_SCHEMES]
int tdo_columns_setup_first_system(int verbose_level, tdo_data &T, int r, data_structures::partitionstack &P, int f_omit, int omit, int *&line_types, int &nb_line_types)
int * row_class_no[NUMBER_OF_SCHEMES]
int * row_classes_len[NUMBER_OF_SCHEMES]
void free_partition(int h)
int tdo_rows_setup_second_system_eqns_packing(int verbose_level, tdo_data &T, data_structures::partitionstack &P, int f_omit, int omit, int *point_types, int nb_point_types, int eqn_start, int &nb_eqns_used)
int * col_class_index[NUMBER_OF_SCHEMES]
void init_partition_stack(int verbose_level)
void complete_partition_info(int h, int verbose_level)
int refine_rows(int verbose_level, int f_use_mckay, int f_once, data_structures::partitionstack &P, int *&point_types, int &nb_point_types, int &point_type_len, int *&distributions, int &nb_distributions, int &cnt_second_system, solution_file_data *Sol, int f_omit1, int omit1, int f_omit2, int omit2, int f_use_packing_numbers, int f_dual_is_linear_space, int f_do_the_geometric_test)
int tdo_columns_setup_second_system(int verbose_level, tdo_data &T, data_structures::partitionstack &P, int f_omit, int omit, int f_use_packing_numbers, int *&line_types, int &nb_line_types)
void init_part_and_entries(int *part, int *entries, int verbose_level)
int tdo_rows_setup_second_system_eqns_counting(int verbose_level, tdo_data &T, data_structures::partitionstack &P, int f_omit, int omit, int *point_types, int nb_point_types, int eqn_offset)
void compute_whether_first_inc_must_be_moved(int *f_first_inc_must_be_moved, int verbose_level)
int td3_columns_lambda2_joining_pairs_from_different_classes(int verbose_level, int lambda3, int block_size, int lambda2, tdo_data &T, int nb_vars, int Nb_vars, int *&line_types, int &nb_line_types, int eqn_offset)
int td3_columns_pairs_same_class(int verbose_level, int lambda3, int block_size, int lambda2, tdo_data &T, int nb_vars, int Nb_vars, int *&line_types, int &nb_line_types, int eqn_offset)
void set_print(std::ostream &ost, int *v, int len)
void matrix_print(int *p, int m, int n)
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 split_cell(int verbose_level)
std::ostream & print(std::ostream &ost)
int cellSizeAtLevel(int cell, int level)
void allocate(int n, int verbose_level)
various functions related to geometries
int & TDO_upper_bound(int i, int j)
data_structures::int_vec * Int_vec
diophantine systems of equations (i.e., linear systems over the integers)
void init_eqn_label(int i, char *label)
void fill_coefficient_matrix_with(int a)
diophant_equation_type * type
void multiply_A_x_to_RHS1()
void write_xml(std::ostream &ost, const char *label)
void eliminate_zero_rows_quick(int verbose_level)
int solve_first(int verbose_level)
#define NUMBER_OF_SCHEMES
#define Int_vec_print_integer_matrix_width(A, B, C, D, E, F)
#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
internal class related to tdo_data