18namespace layer1_foundations {
44 int f_v = (verbose_level >= 1);
47 cout <<
"a_domain::init_integers" << endl;
55 int f_v = (verbose_level >= 1);
58 cout <<
"a_domain::init_integer_fractions" << endl;
67 int f_v = (verbose_level >= 1);
71 cout <<
"a_domain::as_int" << endl;
87 if (ab != 1 && ab != -1) {
88 cout <<
"a_domain::as_int the number is not an integer" << endl;
97 cout <<
"a_domain::as_int unknown domain kind" << endl;
104 int f_v = (verbose_level >= 1);
107 cout <<
"a_domain::make_integer" << endl;
117 cout <<
"a_domain::make_integer unknown domain kind" << endl;
124 int f_v = (verbose_level >= 1);
127 cout <<
"a_domain::make_zero" << endl;
137 cout <<
"a_domain::make_zero unknown domain kind" << endl;
144 int f_v = (verbose_level >= 1);
148 cout <<
"a_domain::make_zero_vector" << endl;
150 for (i = 0; i < len; i++) {
157 int f_v = (verbose_level >= 1);
161 cout <<
"a_domain::is_zero_vector" << endl;
163 for (i = 0; i < len; i++) {
178 int f_v = (verbose_level >= 1);
182 cout <<
"a_domain::is_zero" << endl;
201 cout <<
"a_domain::is_zero unknown domain kind" << endl;
209 int f_v = (verbose_level >= 1);
212 cout <<
"a_domain::make_one" << endl;
222 cout <<
"a_domain::make_one unknown domain kind" << endl;
229 int f_v = (verbose_level >= 1);
234 cout <<
"a_domain::is_one" << endl;
269 cout <<
"a_domain::is_one unknown domain kind" << endl;
277 int f_v = (verbose_level >= 1);
280 cout <<
"a_domain::copy" << endl;
283 elt_to[0] = elt_from[0];
286 elt_to[0] = elt_from[0];
287 elt_to[1] = elt_from[1];
290 cout <<
"a_domain::copy unknown domain kind" << endl;
296 int len,
int verbose_level)
298 int f_v = (verbose_level >= 1);
302 cout <<
"a_domain::copy_vector" << endl;
304 for (i = 0; i < len; i++) {
311 int n,
int verbose_level)
313 int f_v = (verbose_level >= 1);
317 cout <<
"a_domain::swap_vector" << endl;
319 for (i = 0; i < n; i++) {
327 int f_v = (verbose_level >= 1);
330 cout <<
"a_domain::swap" << endl;
348 cout <<
"a_domain::copy unknown domain kind" << endl;
355 int f_v = (verbose_level >= 1);
359 cout <<
"a_domain::add" << endl;
362 elt_c[0] = elt_a[0] + elt_b[0];
365 int at, ab, bt, bb, ct, cb;
378 cout <<
"a_domain::add unknown domain kind" << endl;
385 int f_v = (verbose_level >= 1);
389 cout <<
"a_domain::add_apply" << endl;
392 elt_a[0] = elt_a[0] + elt_b[0];
395 int at, ab, bt, bb, ct, cb;
408 cout <<
"a_domain::add_apply unknown domain kind" << endl;
415 int f_v = (verbose_level >= 1);
419 cout <<
"a_domain::subtract" << endl;
422 elt_c[0] = elt_a[0] + elt_b[0];
425 long int at, ab, bt, bb, g, a1, b1, ct, cb;
435 ct = at * b1 - bt * a1;
440 cout <<
"a_domain::subtract unknown domain kind" << endl;
447 int f_v = (verbose_level >= 1);
450 cout <<
"a_domain::negate" << endl;
459 cout <<
"a_domain::negate unknown domain kind" << endl;
466 int f_v = (verbose_level >= 1);
470 cout <<
"a_domain::negate" << endl;
472 for (i = 0; i < len; i++) {
479 int f_v = (verbose_level >= 1);
483 cout <<
"a_domain::mult" << endl;
486 elt_c[0] = elt_a[0] * elt_b[0];
489 int at, ab, bt, bb, ct, cb;
503 cout <<
"a_domain::mult unknown domain kind" << endl;
510 int f_v = (verbose_level >= 1);
514 cout <<
"a_domain::mult_apply" << endl;
517 elt_a[0] = elt_a[0] * elt_b[0];
520 int at, ab, bt, bb, ct, cb;
537 cout <<
"a_domain::mult_apply unknown domain kind" << endl;
544 int f_v = (verbose_level >= 1);
551 cout <<
"a_domain::power" << endl;
558 cout <<
"a_domain::power exponent is negative" << endl;
562 copy(elt_a, tmp3, 0);
565 mult(tmp3, tmp1, tmp2, 0);
572 mult(tmp3, tmp3, tmp2, 0);
575 copy(tmp1, elt_b, 0);
580 cout <<
"a_domain::power done" << endl;
586 int f_v = (verbose_level >= 1);
589 cout <<
"a_domain::mult_by_integer" << endl;
598 cout <<
"a_domain::mult_by_integer unknown domain kind" << endl;
605 int f_v = (verbose_level >= 1);
609 cout <<
"a_domain::divide_by_integer" << endl;
616 cout <<
"a_domain::divide_by_integer n does not divide" << endl;
622 long int a, b, g, n1;
634 cout <<
"a_domain::divide_by_integer unknown domain kind" << endl;
642 int f_v = (verbose_level >= 1);
646 cout <<
"a_domain::divide" << endl;
652 cout <<
"a_domain::divide division by zero" << endl;
655 g = NT.
gcd_lint(elt_a[0], elt_b[0]);
656 elt_c[0] = elt_a[0] / g;
659 int at, ab, bt, bb, ct, cb;
667 cout <<
"a_domain::divide division by zero" << endl;
677 cout <<
"a_domain::divide unknown domain kind" << endl;
684 int f_v = (verbose_level >= 1);
687 cout <<
"a_domain::inverse" << endl;
700 cout <<
"a_domain::inverse cannot invert" << endl;
712 cout <<
"a_domain::inverse cannot invert" << endl;
719 cout <<
"a_domain::inverse unknown domain kind" << endl;
748 cout << at <<
"/" << ab;
751 cout << at <<
"/" << ab;
755 cout <<
"a_domain::divide unknown domain kind" << endl;
765 for (i = 0; i < n; i++) {
778 for (i = 0; i < m; i++) {
779 for (j = 0; j < n; j++) {
794 for (i = 0; i < m; i++) {
796 for (j = 0; j < n; j++) {
807 cout <<
"];" << endl;
814 int f_v = (verbose_level >= 1);
817 cout <<
"a_domain::make_element_from_integer" << endl;
828 cout <<
"a_domain::make_element_from_integer "
829 "unknown domain kind" << endl;
833 cout <<
"a_domain::make_element_from_integer done" << endl;
843 int f_special,
int f_complete,
int *base_cols,
844 int f_P,
int *P,
int m,
int n,
int Pn,
int verbose_level)
849 int f_v = (verbose_level >= 1);
850 int f_vv = (verbose_level >= 2);
851 int f_vvv = (verbose_level >= 3);
852 int rank, i, j, k, jj;
853 int *pivot, *pivot_inv;
854 int *a, *b, *c, *z, *f;
857 cout <<
"Gauss algorithm for matrix:" << endl;
872 for (j = 0; j < n; j++) {
874 cout <<
"j=" << j << endl;
877 for (k = i; k < m; k++) {
880 cout <<
"i=" << i <<
" pivot found in "
881 << k <<
"," << j << endl;
889 offset(P, k * Pn), Pn, 0);
898 cout <<
"no pivot found" << endl;
904 cout <<
"row " << i <<
" pivot in row " << k
905 <<
" colum " << j << endl;
925 cout <<
" pivot_inv=";
931 for (jj = j; jj < n; jj++) {
935 for (jj = 0; jj < Pn; jj++) {
942 cout <<
" pivot_inv=";
944 cout <<
" made to one: ";
956 cout <<
"doing elimination in column " << j
957 <<
" from row " << i + 1 <<
" to row "
958 << m - 1 <<
":" << endl;
960 for (k = i + 1; k < m; k++) {
962 cout <<
"looking at row k=" << k << endl;
969 mult(z, pivot_inv, f, 0);
981 cout <<
"eliminating row " << k << endl;
983 for (jj = j + 1; jj < n; jj++) {
985 cout <<
"eliminating row " << k
986 <<
" column " << jj << endl;
1002 cout <<
"A=" << endl;
1009 for (jj = 0; jj < Pn; jj++) {
1027 cout <<
"A=" << endl;
1033 cout <<
"A=" << endl;
1036 cout <<
"P=" << endl;
1046 for (i = rank - 1; i >= 0; i--) {
1048 cout <<
"."; cout.flush();
1062 for (k = i - 1; k >= 0; k--) {
1070 for (jj = j + 1; jj < n; jj++) {
1089 for (jj = 0; jj < Pn; jj++) {
1123 cout <<
"the rank is " << rank << endl;
1130 int len,
int idx,
int verbose_level)
1135 int f_v = (verbose_level >= 1);
1140 cout <<
"Gauss_step" << endl;
1151 for (i = 0; i < len; i++) {
1163 for (i = 0; i < len; i++) {
1170 cout <<
"Gauss_step done" << endl;
1178 int m,
int n,
int *base_cols,
int nb_base_cols,
1179 int &kernel_m,
int &kernel_n,
int *kernel,
int verbose_level)
1185 int f_v = (verbose_level >= 1);
1186 int r, k, i, j, ii, jj;
1192 cout <<
"a_domain::matrix_get_kernel" << endl;
1212 for (i = 0; i < r; i++) {
1214 for (j = 0; j < k; j++) {
1215 jj = kernel_cols[j];
1218 offset(kernel, ii * kernel_n + j), 0);
1221 for (i = 0; i < k; i++) {
1222 ii = kernel_cols[i];
1223 for (j = 0; j < k; j++) {
1225 copy(m_one,
offset(kernel, ii * kernel_n + j), 0);
1228 copy(zero,
offset(kernel, ii * kernel_n + j), 0);
1238 cout <<
"a_domain::matrix_get_kernel done" << endl;
1243 int *M,
int m,
int n,
int *base_cols,
int nb_base_cols,
1244 int &kernel_m,
int &kernel_n,
int *kernel,
int verbose_level)
1250 int f_v = (verbose_level >= 1);
1251 int r, k, i, j, ii, jj;
1257 cout <<
"a_domain::matrix_get_kernel_as_row_vectors" << endl;
1277 for (i = 0; i < r; i++) {
1279 for (j = 0; j < k; j++) {
1280 jj = kernel_cols[j];
1283 offset(kernel, j * kernel_n + ii), 0);
1286 for (i = 0; i < k; i++) {
1287 ii = kernel_cols[i];
1288 for (j = 0; j < k; j++) {
1290 copy(m_one,
offset(kernel, j * kernel_n + ii), 0);
1293 copy(zero,
offset(kernel, j * kernel_n + ii), 0);
1303 cout <<
"a_domain::matrix_get_kernel_as_row_vectors done" << endl;
1308 int n,
int &rk,
int verbose_level)
1310 int f_v = (verbose_level >= 1);
1311 int f_special =
FALSE;
1312 int f_complete =
TRUE;
1315 int kernel_m, kernel_n;
1318 cout <<
"a_domain::get_image_and_kernel" << endl;
1323 f_P, NULL, n, n, n, verbose_level);
1326 kernel_m, kernel_n,
offset(M, rk * n), verbose_level);
1329 cout <<
"a_domain::get_image_and_kernel M=" << endl;
1335 cout <<
"a_domain::get_image_and_kernel done" << endl;
1341 int f_v = (verbose_level >= 1);
1342 int f_special =
FALSE;
1343 int f_complete =
TRUE;
1351 cout <<
"a_domain::complete_basis" << endl;
1360 f_P, NULL, m, n, n, verbose_level);
1363 cout <<
"a_domain::complete_basis rk != m" << endl;
1372 for (i = rk; i < n; i++) {
1373 for (j = 0; j < n; j++) {
1377 for (i = 0; i < k; i++) {
1383 cout <<
"a_domain::complete_basis M=" << endl;
1391 cout <<
"a_domain::complete_basis done" << endl;
1396 int ma,
int na,
int nb,
int verbose_level)
1398 int f_v = (verbose_level >= 1);
1399 int f_vv = (verbose_level >= 2);
1404 cout <<
"a_domain::mult_matrix" << endl;
1407 cout <<
"a_domain::mult_matrix A=" << endl;
1409 cout <<
"a_domain::mult_matrix B=" << endl;
1414 for (i = 0; i < ma; i++) {
1415 for (k = 0; k < nb; k++) {
1417 for (j = 0; j < na; j++) {
1419 offset(B, j * nb + k), E, 0);
1428 cout <<
"a_domain::mult_matrix C=" << endl;
1432 cout <<
"a_domain::mult_matrix done" << endl;
1437 int n,
int verbose_level)
1439 int f_v = (verbose_level >= 1);
1443 cout <<
"a_domain::mult_matrix3" << endl;
1450 cout <<
"a_domain::mult_matrix3 done" << endl;
1455 int m,
int n,
int verbose_level)
1457 int f_v = (verbose_level >= 1);
1461 cout <<
"a_domain::add_apply_matrix" << endl;
1463 for (i = 0; i < m; i++) {
1464 for (j = 0; j < n; j++) {
1469 cout <<
"a_domain::add_apply_matrix done" << endl;
1474 int *s,
int m,
int n,
int verbose_level)
1476 int f_v = (verbose_level >= 1);
1480 cout <<
"a_domain::matrix_mult_apply_scalar" << endl;
1482 for (i = 0; i < m; i++) {
1483 for (j = 0; j < n; j++) {
1488 cout <<
"a_domain::matrix_mult_apply_scalar done" << endl;
1493 int n,
int k,
int *A,
int *B,
int *C,
int *D,
1501 int f_v = (verbose_level >= 1);
1505 cout <<
"a_domain::make_block_matrix_2x2" << endl;
1508 for (i = 0; i < k; i++) {
1509 for (j = 0; j < k; j++) {
1513 for (i = 0; i < k; i++) {
1514 for (j = 0; j < r; j++) {
1518 for (i = 0; i < r; i++) {
1519 for (j = 0; j < k; j++) {
1523 for (i = 0; i < r; i++) {
1524 for (j = 0; j < r; j++) {
1530 cout <<
"a_domain::make_block_matrix_2x2 done" << endl;
1535 int n,
int verbose_level)
1537 int f_v = (verbose_level >= 1);
1541 cout <<
"a_domain::make_identity_matrix" << endl;
1544 for (i = 0; i < n; i++) {
1548 cout <<
"a_domain::make_identity_matrix done" << endl;
1553 int n,
int verbose_level)
1567 int *T,
int *basecols,
int *Ainv,
int n,
1573 int f_v = (verbose_level >= 1);
1577 cout <<
"a_domain::matrix_invert" << endl;
1585 TRUE , Ainv, n, n, n,
1588 cout <<
"a_domain::matrix_invert not invertible" << endl;
1592 cout <<
"a_domain::matrix_invert done" << endl;
void Gauss_step(int *v1, int *v2, int len, int idx, int verbose_level)
void copy(int *elt_from, int *elt_to, int verbose_level)
int Gauss_echelon_form(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 add_apply_matrix(int *A, int *B, int m, int n, int verbose_level)
void divide_by_integer(int *elt, int n, int verbose_level)
void make_element_from_integer(int *elt, int n, int verbose_level)
void init_integers(int verbose_level)
void add(int *elt_a, int *elt_b, int *elt_c, int verbose_level)
void mult_matrix(int *A, int *B, int *C, int ma, int na, int nb, int verbose_level)
void matrix_get_kernel(int *M, int m, int n, int *base_cols, int nb_base_cols, int &kernel_m, int &kernel_n, int *kernel, int verbose_level)
void matrix_invert(int *A, int *T, int *basecols, int *Ainv, int n, int verbose_level)
void make_one(int *elt, int verbose_level)
void print_matrix_for_maple(int *A, int m, int n)
void make_zero_vector(int *elt, int len, int verbose_level)
void subtract(int *elt_a, int *elt_b, int *elt_c, int verbose_level)
void init_integer_fractions(int verbose_level)
void swap_vector(int *elt1, int *elt2, int n, int verbose_level)
void complete_basis(int *M, int m, int n, int verbose_level)
void make_integer(int *elt, int n, int verbose_level)
void add_apply(int *elt_a, int *elt_b, int verbose_level)
void matrix_mult_apply_scalar(int *A, int *s, int m, int n, int verbose_level)
int is_zero(int *elt, int verbose_level)
void mult_apply(int *elt_a, int *elt_b, int verbose_level)
void negate(int *elt, int verbose_level)
void make_identity_matrix(int *A, int n, int verbose_level)
void make_zero(int *elt, int verbose_level)
void mult(int *elt_a, int *elt_b, int *elt_c, int verbose_level)
void inverse(int *elt_a, int *elt_b, int verbose_level)
int * offset(int *A, int i)
void mult_by_integer(int *elt, int n, int verbose_level)
void get_image_and_kernel(int *M, int n, int &rk, int verbose_level)
void copy_vector(int *elt_from, int *elt_to, int len, int verbose_level)
int size_of_instance_in_int
void make_block_matrix_2x2(int *Mtx, int n, int k, int *A, int *B, int *C, int *D, int verbose_level)
int as_int(int *elt, int verbose_level)
void matrix_inverse(int *A, int *Ainv, int n, int verbose_level)
void mult_matrix3(int *A, int *B, int *C, int *D, int n, int verbose_level)
void divide(int *elt_a, int *elt_b, int *elt_c, int verbose_level)
int is_one(int *elt, int verbose_level)
int is_zero_vector(int *elt, int len, int verbose_level)
void matrix_get_kernel_as_row_vectors(int *M, int m, int n, int *base_cols, int nb_base_cols, int &kernel_m, int &kernel_n, int *kernel, int verbose_level)
void power(int *elt_a, int *elt_b, int n, int verbose_level)
void negate_vector(int *elt, int len, int verbose_level)
void swap(int *elt1, int *elt2, int verbose_level)
void print_matrix(int *A, int m, int n)
void print_vector(int *elt, int n)
void complement(int *v, int n, int k)
basic number theoretic functions
long int gcd_lint(long int m, long int n)
void int_mult_fractions(int at, int ab, int bt, int bb, int &ct, int &cb, int verbose_level)
void int_add_fractions(int at, int ab, int bt, int bb, int &ct, int &cb, int verbose_level)
data_structures::int_vec * Int_vec
@ domain_integer_fractions
orbiter_kernel_system::orbiter_session * Orbiter
global Orbiter session
the orbiter library for the classification of combinatorial objects