18namespace layer1_foundations {
19namespace linear_algebra {
22void linear_algebra::get_coefficients_in_linear_combination(
23 int k,
int n,
int *basis_of_subspace,
24 int *input_vector,
int *coefficients,
int verbose_level)
31 int f_v = (verbose_level >= 1);
35 cout <<
"linear_algebra::get_coefficients_in_linear_combination" << endl;
44 for (j = 0; j < k; j++) {
45 for (i = 0; i < n; i++) {
46 M[i * (k + 1) + j] = basis_of_subspace[j * n + i];
49 for (i = 0; i < n; i++) {
50 M[i * (k + 1) + k] = input_vector[i];
54 cout <<
"linear_algebra::get_coefficients_in_linear_combination before Gauss_int" << endl;
60 FALSE , NULL , n, k + 1,
65 cout <<
"linear_algebra::get_coefficients_in_linear_combination after Gauss_int" << endl;
69 for (i = 0; i < k; i++) {
70 coefficients[i] = M[i * (k + 1) + k];
74 cout <<
"linear_algebra::get_coefficients_in_linear_combination done" << endl;
79void linear_algebra::reduce_mod_subspace_and_get_coefficient_vector(
80 int k,
int len,
int *basis,
int *base_cols,
81 int *v,
int *coefficients,
int verbose_level)
89 int f_v = (verbose_level >= 1);
90 int f_vv = (verbose_level >= 2);
94 cout <<
"linear_algebra::reduce_mod_subspace_and_get_coefficient_vector" << endl;
97 cout <<
"linear_algebra::reduce_mod_subspace_and_get_coefficient_vector: v=";
102 cout <<
"linear_algebra::reduce_mod_subspace_and_get_coefficient_vector "
103 "subspace basis:" << endl;
106 for (i = 0; i < k; i++) {
108 if (basis[i * len + idx] != 1) {
109 cout <<
"linear_algebra::reduce_mod_subspace_and_get_coefficient_vector "
110 "pivot entry is not one" << endl;
111 cout <<
"i=" << i << endl;
112 cout <<
"idx=" << idx << endl;
117 coefficients[i] = v[idx];
121 cout <<
"linear_algebra::reduce_mod_subspace_and_get_coefficient_vector "
122 "fatal: v[idx]" << endl;
128 cout <<
"linear_algebra::reduce_mod_subspace_and_get_coefficient_vector "
132 cout <<
"coefficients=";
137 cout <<
"linear_algebra::reduce_mod_subspace_and_get_coefficient_vector done" << endl;
141void linear_algebra::reduce_mod_subspace(
int k,
142 int len,
int *basis,
int *base_cols,
143 int *v,
int verbose_level)
145 int f_v = (verbose_level >= 1);
146 int f_vv = (verbose_level >= 2);
150 cout <<
"linear_algebra::reduce_mod_subspace" << endl;
153 cout <<
"linear_algebra::reduce_mod_subspace before: v=";
158 cout <<
"linear_algebra::reduce_mod_subspace subspace basis:" << endl;
162 for (i = 0; i < k; i++) {
168 cout <<
"linear_algebra::reduce_mod_subspace fatal: v[idx]" << endl;
174 cout <<
"linear_algebra::reduce_mod_subspace after: v=";
179 cout <<
"linear_algebra::reduce_mod_subspace done" << endl;
183int linear_algebra::is_contained_in_subspace(
int k,
184 int len,
int *basis,
int *base_cols,
185 int *v,
int verbose_level)
187 int f_v = (verbose_level >= 1);
188 int f_vv = (verbose_level >= 2);
192 cout <<
"linear_algebra::is_contained_in_subspace" << endl;
195 cout <<
"linear_algebra::is_contained_in_subspace testing v=";
200 base_cols, v, verbose_level - 1);
201 for (i = 0; i < len; i++) {
204 cout <<
"linear_algebra::is_contained_in_subspace "
205 "is NOT in the subspace" << endl;
211 cout <<
"linear_algebra::is_contained_in_subspace "
212 "is contained in the subspace" << endl;
215 cout <<
"linear_algebra::is_contained_in_subspace done" << endl;
220int linear_algebra::is_subspace(
int d,
int dim_U,
221 int *Basis_U,
int dim_V,
int *Basis_V,
224 int f_v = (verbose_level >= 1);
229 cout <<
"linear_algebra::is_subspace" << endl;
231 Basis =
NEW_int((dim_V + 1) * d);
232 for (h = 0; h < dim_U; h++) {
246 cout <<
"linear_algebra::is_subspace done" << endl;
251void linear_algebra::Kronecker_product(
int *A,
int *B,
int n,
int *AB)
253 int i, j, I, J, u, v, a, b, c, n2;
256 for (I = 0; I < n; I++) {
257 for (J = 0; J < n; J++) {
259 for (i = 0; i < n; i++) {
260 for (j = 0; j < n; j++) {
272void linear_algebra::Kronecker_product_square_but_arbitrary(
274 int na,
int nb,
int *AB,
int &N,
277 int f_v = (verbose_level >= 1);
278 int i, j, I, J, u, v, a, b, c;
281 cout <<
"linear_algebra::Kronecker_product_square_but_arbitrary"
283 cout <<
"na=" << na << endl;
284 cout <<
"nb=" << nb << endl;
288 cout <<
"N=" << N << endl;
290 for (I = 0; I < nb; I++) {
291 for (J = 0; J < nb; J++) {
293 for (i = 0; i < na; i++) {
294 for (j = 0; j < na; j++) {
305 cout <<
"linear_algebra::Kronecker_product_square_but_arbitrary "
310int linear_algebra::dependency(
int d,
311 int *v,
int *A,
int m,
int *rho,
318 int f_v = (verbose_level >= 1);
319 int f_vv = (verbose_level >= 2);
320 int i, j, k, f_null, c;
323 cout <<
"linear_algebra::dependency" << endl;
324 cout <<
"m = " << m << endl;
325 cout <<
"d = " << d << endl;
328 cout <<
"linear_algebra::dependency A=" << endl;
335 for (j = 0; j < d; j++) {
336 A[m * d + j] = v[rho[j]];
339 cout <<
"linear_algebra::dependency "
340 "after putting in row " << m <<
" A=" << endl;
346 for (k = 0; k < m; k++) {
349 cout <<
"linear_algebra::dependency "
350 "k=" << k <<
" / m=" << m << endl;
351 cout <<
"finite_field::dependency A=" << endl;
355 for (j = k + 1; j < d; j++) {
358 cout <<
"linear_algebra::dependency "
359 "k=" << k <<
" / m=" << m
360 <<
", j=" << j <<
" / " << d << endl;
366 A[m * d + j] =
F->
mult(A[k * d + k], A[m * d + j]);
372 A[m * d + j] =
F->
add(A[m * d + j], c);
378 c =
F->
inverse(A[(k - 1) * d + k - 1]);
379 A[m * d + j] =
F->
mult(A[m * d + j], c);
383 cout <<
"linear_algebra::dependency "
384 "k=" << k <<
" / m=" << m
385 <<
", j=" << j <<
" / " << d <<
" done" << endl;
386 cout <<
"linear_algebra::dependency A=" << endl;
393 cout <<
"linear_algebra::dependency "
394 "k=" << k <<
" / m=" << m <<
" done" << endl;
395 cout <<
"finite_field::dependency A=" << endl;
402 cout <<
"linear_algebra::dependency "
403 "m=" << m <<
" after reapply, A=" << endl;
427 while ((A[m * d + j] == 0) && (j < d - 1)) {
430 f_null = (A[m * d + j] == 0);
432 if (!f_null && j > m) {
434 cout <<
"linear_algebra::dependency "
435 "choosing column " << j << endl;
440 for (i = 0; i <= m; i++) {
442 A[i * d + m] = A[i * d + j];
453 cout <<
"linear_algebra::dependency m=" << m
454 <<
" after pivoting, A=" << endl;
462 cout <<
"linear_algebra::dependency "
463 "done, f_null = " << f_null << endl;
468void linear_algebra::order_ideal_generator(
int d,
469 int idx,
int *mue,
int &mue_deg,
470 int *A,
int *Frobenius,
477 int f_v = (verbose_level >= 1);
480 int i, j, m, a, f_null;
483 cout <<
"linear_algebra::order_ideal_generator "
484 "d = " << d <<
" idx = " << idx << endl;
497 for (i = 0; i < deg; i++) {
503 cout <<
"linear_algebra::order_ideal_generator "
504 "d = " << d <<
" idx = " << idx <<
" m=" << m <<
" before dependency" << endl;
506 f_null =
dependency(d, v, A, m, rho, verbose_level - 1);
508 cout <<
"linear_algebra::order_ideal_generator "
509 "d = " << d <<
" idx = " << idx <<
" m=" << m <<
" after dependency" << endl;
518 cout <<
"linear_algebra::order_ideal_generator v=";
524 cout <<
"linear_algebra::order_ideal_generator v1=";
532 cout <<
"linear_algebra::order_ideal_generator "
533 "d = " << d <<
" idx = " << idx
534 <<
" m=" << m <<
" before dependency" << endl;
536 f_null =
dependency(d, v, A, m, rho, verbose_level - 1);
538 cout <<
"linear_algebra::order_ideal_generator "
539 "d = " << d <<
" idx = " << idx
540 <<
" m=" << m <<
" after dependency, f_null=" << f_null << endl;
543 if (m == deg && !f_null) {
544 cout <<
"linear_algebra::order_ideal_generator "
545 "m == deg && ! f_null" << endl;
552 for (j = m - 1; j >= 0; j--) {
553 mue[j] = A[m * deg + j];
555 cout <<
"linear_algebra::order_ideal_generator "
556 "mue[" << j <<
"] = " << mue[j] << endl;
558 for (i = m - 1; i >= j + 1; i--) {
559 a =
F->
mult(mue[i], A[i * deg + j]);
560 mue[j] =
F->
add(mue[j], a);
562 cout <<
"linear_algebra::order_ideal_generator "
563 "mue[" << j <<
"] = " << mue[j] << endl;
567 mue[j] =
F->
mult(mue[j], a);
571 cout <<
"linear_algebra::order_ideal_generator "
572 "mue[" << j <<
"] = " << mue[j] << endl;
577 cout <<
"linear_algebra::order_ideal_generator "
578 "after preparing mue:" << endl;
579 cout <<
"mue_deg = " << mue_deg << endl;
589 cout <<
"linear_algebra::order_ideal_generator done" << endl;
593void linear_algebra::span_cyclic_module(
int *A,
594 int *v,
int n,
int *Mtx,
int verbose_level)
596 int f_v = (verbose_level >= 1);
601 cout <<
"linear_algebra::span_cyclic_module" << endl;
606 for (j = 0; j < n; j++) {
609 for (i = 0; i < n; i++) {
610 A[i * n + j] = w1[i];
619 cout <<
"linear_algebra::span_cyclic_module done" << endl;
623void linear_algebra::random_invertible_matrix(
int *M,
624 int k,
int verbose_level)
626 int f_v = (verbose_level >= 1);
627 int f_vv = (verbose_level >= 2);
635 cout <<
"linear_algebra::random_invertible_matrix" << endl;
639 for (i = 0; i < k; i++) {
641 cout <<
"i=" << i << endl;
646 cout <<
"r=" << r << endl;
656 cout <<
"rk=" << rk << endl;
660 cout <<
"has full rank" << endl;
667 cout <<
"linear_algebra::random_invertible_matrix "
668 "Random invertible matrix:" << endl;
674void linear_algebra::adjust_basis(
int *V,
int *U,
675 int n,
int k,
int d,
int verbose_level)
678 int f_v = (verbose_level >= 1);
685 cout <<
"linear_algebra::adjust_basis" << endl;
692 cout <<
"linear_algebra::adjust_basis before Gauss step, U=" << endl;
698 cout <<
"linear_algebra::adjust_basis rank "
699 "of matrix is not d" << endl;
703 cout <<
"linear_algebra::adjust_basis after Gauss step, M=" << endl;
708 for (i = 0; i < k; i++) {
716 for (j = 0; j < d; j++) {
719 cout <<
"linear_algebra::adjust_basis before Gauss step:" << endl;
728 cout <<
"linear_algebra::adjust_basis after Gauss step:" << endl;
749 cout <<
"linear_algebra::adjust_basis d + ii != k" << endl;
750 cout <<
"linear_algebra::adjust_basis d = " << d << endl;
751 cout <<
"linear_algebra::adjust_basis ii = " << ii << endl;
752 cout <<
"linear_algebra::adjust_basis k = " << k << endl;
753 cout <<
"V=" << endl;
756 cout <<
"U=" << endl;
767 cout <<
"linear_algebra::adjust_basis done" << endl;
771void linear_algebra::choose_vector_in_here_but_not_in_here_column_spaces(
775 int f_v = (verbose_level >= 1);
783 cout <<
"linear_algebra::choose_vector_in_here_but_not_in_here_"
784 "column_spaces" << endl;
788 cout <<
"linear_algebra::choose_vector_in_here_but_not_in_here_"
789 "column_spaces V->m != W->m" << endl;
795 cout <<
"linear_algebra::choose_vector_in_here_but_not_in_here_"
796 "column_spaces W->n >= V->n" << endl;
802 for (i = 0; i < d; i++) {
803 for (j = 0; j < n; j++) {
804 Gen[i * n + j] = W->
s_ij(j, i);
808 base_cols, 0 ) != d) {
809 cout <<
"linear_algebra::choose_vector_in_here_but_not_in_here_"
810 "column_spaces rank of matrix is not d" << endl;
814 for (i = 0; i < k; i++) {
815 for (j = 0; j < n; j++) {
816 Gen[(d + ii) * n + j] = V->
s_ij(j, i);
828 cout <<
"linear_algebra::choose_vector_in_here_but_not_in_here_"
829 "column_spaces d + ii != k" << endl;
838 cout <<
"linear_algebra::choose_vector_in_here_but_not_in_here_"
839 "column_spaces done" << endl;
843void linear_algebra::choose_vector_in_here_but_not_in_here_or_here_column_spaces(
852 coset, V, W1, W2, v, verbose_level);
856int linear_algebra::choose_vector_in_here_but_not_in_here_or_here_column_spaces_coset(
862 int f_v = (verbose_level >= 1);
863 int f_vv = (verbose_level >= 2);
864 int n, k, d1, d2, rk;
876 cout <<
"linear_algebra::choose_vector_in_here_but_not_in_here_or_here_"
877 "column_spaces_coset coset=" << coset << endl;
878 cout <<
"verbose_level = " << verbose_level << endl;
881 cout <<
"linear_algebra::choose_vector_in_here_but_not_in_here_or_here_"
882 "column_spaces_coset" << endl;
883 cout <<
"V=" << endl;
885 cout <<
"W1=" << endl;
887 cout <<
"W2=" << endl;
892 cout <<
"linear_algebra::choose_vector_in_here_but_not_in_here_or_here_"
893 "column_spaces_coset V->m != W1->m" << endl;
897 cout <<
"linear_algebra::choose_vector_in_here_but_not_in_here_or_here_"
898 "column_spaces_coset V->m != W2->m" << endl;
905 cout <<
"linear_algebra::choose_vector_in_here_but_not_in_here_or_here_"
906 "column_spaces_coset W1->n >= V->n" << endl;
909 Gen =
NEW_int((d1 + d2 + k) * n);
914 for (i = 0; i < d1; i++) {
915 for (j = 0; j < n; j++) {
916 Gen[i * n + j] = W1->
s_ij(j, i);
919 for (i = 0; i < d2; i++) {
920 for (j = 0; j < n; j++) {
921 Gen[(d1 + i) * n + j] = W2->
s_ij(j, i);
932 cout <<
"coset = " << coset <<
" = " << NT.
i_power_j(
F->
q, k)
941 cout <<
"coset=" << coset <<
" w=";
949 for (j = 0; j < n; j++) {
951 for (i = 0; i < k; i++) {
953 Gen[rk * n + j] =
F->
add(Gen[rk * n + j],
F->
mult(a, V->
s_ij(j, i)));
958 cout <<
"before reduce=";
964 for (j = 0; j < rk; j++) {
966 Gauss_step(Gen + j * n, Gen + rk * n, n, b, 0 );
970 cout <<
"after reduce=";
992 cout <<
"linear_algebra::choose_vector_in_here_but_not_in_here_"
993 "or_here_column_spaces_coset done ret = " << ret << endl;
998void linear_algebra::vector_add_apply(
int *v,
int *w,
int c,
int n)
1002 for (i = 0; i < n; i++) {
1007void linear_algebra::vector_add_apply_with_stride(
int *v,
int *w,
1008 int stride,
int c,
int n)
1012 for (i = 0; i < n; i++) {
1013 v[i] =
F->
add(v[i],
F->
mult(c, w[i * stride]));
1017int linear_algebra::test_if_commute(
int *A,
int *B,
int k,
int verbose_level)
1019 int f_v = (verbose_level >= 1);
1025 cout <<
"linear_algebra::test_if_commute" << endl;
1042 cout <<
"linear_algebra::test_if_commute done" << endl;
1047void linear_algebra::unrank_point_in_PG(
int *v,
int len,
int rk)
1054int linear_algebra::rank_point_in_PG(
int *v,
int len)
1062int linear_algebra::nb_points_in_PG(
int n)
1072void linear_algebra::Borel_decomposition(
int n,
int *M,
1073 int *B1,
int *B2,
int *pivots,
int verbose_level)
1076 int f_v = (verbose_level >= 1);
1078 int i, j, a, av, b, c, h, k, d, e, mc;
1082 cout <<
"linear_algebra::Borel_decomposition" << endl;
1085 cout <<
"linear_algebra::Borel_decomposition input matrix:" << endl;
1086 cout <<
"M:" << endl;
1095 for (i = 0; i < n; i++) {
1096 f_is_pivot[i] =
FALSE;
1099 cout <<
"linear_algebra::Borel_decomposition going down "
1100 "from the right" << endl;
1102 for (j = n - 1; j >= 0; j--) {
1103 for (i = 0; i < n; i++) {
1104 if (f_is_pivot[i]) {
1109 cout <<
"linear_algebra::Borel_decomposition pivot "
1110 "at (" << i <<
" " << j <<
")" << endl;
1112 f_is_pivot[i] =
TRUE;
1118 for (h = i + 1; h < n; h++) {
1123 for (k = 0; k < n; k++) {
1124 d =
F->
mult(M[i * n + k], mc);
1125 e =
F->
add(M[h * n + k], d);
1133 for (k = 0; k < n; k++) {
1134 d =
F->
mult(B1[k * n + h], c);
1135 e =
F->
add(B1[k * n + i], d);
1144 cout <<
"linear_algebra::Borel_decomposition after going "
1145 "down in column " << j << endl;
1146 cout <<
"M:" << endl;
1151 for (h = 0; h < j; h++) {
1156 for (k = i; k < n; k++) {
1157 d =
F->
mult(M[k * n + j], mc);
1158 e =
F->
add(M[k * n + h], d);
1166 for (k = 0; k < n; k++) {
1167 d =
F->
mult(B2[h * n + k], c);
1168 e =
F->
add(B2[j * n + k], d);
1174 cout <<
"linear_algebra::Borel_decomposition after going "
1175 "across to the left:" << endl;
1176 cout <<
"M:" << endl;
1186 cout <<
"linear_algebra::Borel_decomposition done" << endl;
1190void linear_algebra::map_to_standard_frame(
int d,
int *A,
1191 int *Transform,
int verbose_level)
1197 int f_v = (verbose_level >= 1);
1203 cout <<
"linear_algebra::map_to_standard_frame" << endl;
1207 cout <<
"A=" << endl;
1214 for (i = 0; i < n; i++) {
1215 for (j = 0; j < d; j++) {
1216 B[j * n + i] = A[i * d + j];
1220 cout <<
"B before=" << endl;
1225 cout <<
"B after=" << endl;
1228 xd = B[d * n + d - 1];
1230 for (i = 0; i < d; i++) {
1231 B[d * n + i] =
F->
mult(x, B[d * n + i]);
1234 cout <<
"last row of B after scaling : " << endl;
1237 for (i = 0; i < d; i++) {
1238 for (j = 0; j < d; j++) {
1239 A2[i * d + j] =
F->
mult(B[d * n + i], A[i * d + j]);
1243 cout <<
"A2=" << endl;
1251 cout <<
"linear_algebra::map_to_standard_frame done" << endl;
1255void linear_algebra::map_frame_to_frame_with_permutation(
int d,
1256 int *A,
int *perm,
int *B,
int *Transform,
1259 int f_v = (verbose_level >= 1);
1267 cout <<
"linear_algebra::map_frame_to_frame_with_permutation" << endl;
1275 cout <<
"permutation: ";
1280 cout <<
"A=" << endl;
1284 cout <<
"B=" << endl;
1288 for (i = 0; i < d + 1; i++) {
1294 cout <<
"A1=" << endl;
1300 cout <<
"mapping A1 to standard frame:" << endl;
1304 cout <<
"T1=" << endl;
1308 cout <<
"mapping B to standard frame:" << endl;
1312 cout <<
"T2=" << endl;
1317 cout <<
"T3=" << endl;
1322 cout <<
"Transform=" << endl;
1331 cout <<
"linear_algebra::map_frame_to_frame_with_permutation done"
1337void linear_algebra::map_points_to_points_projectively(
int d,
int k,
1338 int *A,
int *B,
int *Transform,
int &nb_maps,
1344 int f_v = (verbose_level >= 1);
1355 int cnt, overall_cnt;
1360 cout <<
"linear_algebra::map_points_to_points_projectively" << endl;
1364 A1 =
NEW_int((d + k + 1) * d);
1365 B1 =
NEW_int((d + k + 1) * d);
1367 image_set =
NEW_int(d + k + 1);
1372 for (i = 0; i < d + k + 1; i++) {
1387 for (h = 0; h < nCk; h++) {
1389 Combi.
set_complement(subset, d + 1, subset + d + 1, k, d + k + 1);
1392 cout <<
"subset " << h <<
" / " << nCk <<
" is ";
1394 cout <<
", the complement is ";
1400 for (i = 0; i < d + k + 1; i++) {
1405 cout <<
"A1=" << endl;
1413 cout <<
"lehmercode: ";
1419 cout <<
"permutation: ";
1424 B1, Transform, verbose_level);
1426 for (i = 0; i < d + k + 1; i ++) {
1432 cout <<
"image_set before sorting: ";
1438 cout <<
"image_set after sorting: ";
1452 cout <<
"subset " << h <<
" / " << nCk <<
" we found "
1453 << cnt <<
" mappings" << endl;
1466 nb_maps = overall_cnt;
1469 cout <<
"linear_algebra::map_points_to_points_projectively done"
1474int linear_algebra::BallChowdhury_matrix_entry(
int *Coord,
1475 int *C,
int *U,
int k,
int sz_U,
1476 int *T,
int verbose_level)
1478 int f_v = (verbose_level >= 1);
1479 int f_vv = (verbose_level >= 2);
1483 cout <<
"linear_algebra::BallChowdhury_matrix_entry" << endl;
1486 for (u = 0; u < sz_U; u++) {
1489 for (i = 0; i < k - 1; i++) {
1494 cout <<
"u=" << u <<
" / " << sz_U <<
" the matrix is:" << endl;
1499 cout <<
"determinant = " << d1 << endl;
1504 cout <<
"linear_algebra::BallChowdhury_matrix_entry d=" << d << endl;
1509void linear_algebra::cubic_surface_family_24_generators(
1510 int f_with_normalizer,
1512 int *&gens,
int &nb_gens,
int &data_size,
1513 int &group_order,
int verbose_level)
1515 int f_v = (verbose_level >= 1);
1519 cout <<
"linear_algebra::cubic_surface_family_24_generators" << endl;
1533 if (f_with_normalizer) {
1535 group_order *=
F->
q - 1;
1537 gens =
NEW_int(nb_gens * data_size);
1542 gens[0 * data_size + 0 * 4 + 0] = 1;
1543 gens[0 * data_size + 1 * 4 + 2] = 1;
1544 gens[0 * data_size + 2 * 4 + 1] = 1;
1545 gens[0 * data_size + 3 * 4 + 3] = 1;
1546 gens[1 * data_size + 0 * 4 + 1] = 1;
1547 gens[1 * data_size + 1 * 4 + 0] = 1;
1548 gens[1 * data_size + 2 * 4 + 2] = 1;
1549 gens[1 * data_size + 3 * 4 + 3] = 1;
1550 gens[2 * data_size + 0 * 4 + 0] = m_one;
1551 gens[2 * data_size + 1 * 4 + 2] = 1;
1552 gens[2 * data_size + 2 * 4 + 1] = 1;
1553 gens[2 * data_size + 3 * 4 + 3] = m_one;
1554 if (f_with_normalizer) {
1555 gens[3 * data_size + 0 * 4 + 0] = 1;
1556 gens[3 * data_size + 1 * 4 + 1] = 1;
1557 gens[3 * data_size + 2 * 4 + 2] = 1;
1561 cout <<
"linear_algebra::cubic_surface_family_24_generators "
1566void linear_algebra::cubic_surface_family_G13_generators(
1568 int *&gens,
int &nb_gens,
int &data_size,
1569 int &group_order,
int verbose_level)
1571 int f_v = (verbose_level >= 1);
1615 gens =
NEW_int(nb_gens * data_size);
1618 int h, i, j, c, m, l;
1629 for (h = 0; h < nb_gens; h++) {
1630 for (i = 0; i < 16; i++) {
1634 for (j = 0; j < l; j++) {
1637 c =
F->
add(c, v[l - 1 - j]);
1640 gens[h * data_size + i] = c;
1642 gens[h * data_size + 16] = 0;
1647 cout <<
"linear_algebra::cubic_surface_family_G13_generators" << endl;
1648 for (h = 0; h < nb_gens; h++) {
1649 cout <<
"generator " << h <<
":" << endl;
1654 cout <<
"linear_algebra::cubic_surface_family_G13_generators done" << endl;
1658void linear_algebra::cubic_surface_family_F13_generators(
1660 int *&gens,
int &nb_gens,
int &data_size,
1661 int &group_order,
int verbose_level)
1663 int f_v = (verbose_level >= 1);
1737 gens =
NEW_int(nb_gens * data_size);
1740 int h, i, j, c, m, l;
1751 for (h = 0; h < nb_gens; h++) {
1752 for (i = 0; i < 16; i++) {
1756 for (j = 0; j < l; j++) {
1759 c =
F->
add(c, v[l - 1 - j]);
1762 gens[h * data_size + i] = c;
1764 gens[h * data_size + 16] = 0;
1769 cout <<
"linear_algebra::cubic_surface_family_F13_generators" << endl;
1770 for (h = 0; h < nb_gens; h++) {
1771 cout <<
"generator " << h <<
":" << endl;
1776 cout <<
"linear_algebra::cubic_surface_family_F13_generators done" << endl;
1780int linear_algebra::is_unit_vector(
int *v,
int len,
int k)
1784 for (i = 0; i < len; i++) {
1800void linear_algebra::make_Fourier_matrices(
1801 int omega,
int k,
int *N,
int **A,
int **Av,
1802 int *Omega,
int verbose_level)
1804 int f_v = (verbose_level >= 1);
1808 cout <<
"linear_algebra::make_Fourier_matrices" << endl;
1812 for (h = k; h > 0; h--) {
1813 Omega[h - 1] =
F->
mult(Omega[h], Omega[h]);
1816 for (h = k; h >= 0; h--) {
1819 for (i = 0; i < N[h]; i++) {
1820 for (j = 0; j < N[h]; j++) {
1821 A[h][i * N[h] + j] =
F->
power(om, (i * j) % N[k]);
1826 for (h = k; h >= 0; h--) {
1829 for (i = 0; i < N[h]; i++) {
1830 for (j = 0; j < N[h]; j++) {
1831 Av[h][i * N[h] + j] =
F->
power(om, (i * j) % N[k]);
1837 for (h = k; h >= 0; h--) {
1838 cout <<
"A_" << N[h] <<
":" << endl;
1842 for (h = k; h >= 0; h--) {
1843 cout <<
"Av_" << N[h] <<
":" << endl;
1848 cout <<
"linear_algebra::make_Fourier_matrices done" << endl;
a collection of combinatorial functions
int next_lehmercode(int n, int *v)
void unrank_k_subset(int rk, int *set, int n, int k)
void first_lehmercode(int n, int *v)
long int int_n_choose_k(int n, int k)
void set_complement(int *subset, int subset_size, int *complement, int &size_complement, int universal_set_size)
void lehmercode_to_permutation(int n, int *code, int *perm)
int maximum(int *v, int len)
a collection of functions related to sorted vectors
int int_vec_is_zero(int *v, int len)
void int_vec_heapsort(int *v, int len)
int int_vec_compare(int *p, int *q, int len)
void PG_element_rank_modified(int *v, int stride, int len, int &a)
void PG_element_unrank_modified(int *v, int stride, int len, int a)
various functions related to geometries
void AG_element_unrank(int q, int *v, int stride, int len, long int a)
long int nb_PG_elements(int n, int q)
void mult_vector_from_the_left(int *v, int *A, int *vA, int m, int n)
field_theory::finite_field * F
void map_to_standard_frame(int d, int *A, int *Transform, int verbose_level)
int Gauss_int(int *A, int f_special, int f_complete, int *base_cols, int f_P, int *P, int m, int n, int Pn, int verbose_level)
int matrix_determinant(int *A, int n, int verbose_level)
void identity_matrix(int *A, int n)
int choose_vector_in_here_but_not_in_here_or_here_column_spaces_coset(int &coset, data_structures::int_matrix *V, data_structures::int_matrix *W1, data_structures::int_matrix *W2, int *v, int verbose_level)
void mult_matrix_matrix(int *A, int *B, int *C, int m, int n, int o, int verbose_level)
int Gauss_easy(int *A, int m, int n)
void mult_vector_from_the_right(int *A, int *v, int *Av, int m, int n)
int dependency(int d, int *v, int *A, int m, int *rho, int verbose_level)
void Gauss_step(int *v1, int *v2, int len, int idx, int verbose_level)
void reduce_mod_subspace(int k, int len, int *basis, int *base_cols, int *v, int verbose_level)
int RREF_and_kernel(int n, int k, int *A, int verbose_level)
void map_frame_to_frame_with_permutation(int d, int *A, int *perm, int *B, int *Transform, int verbose_level)
int Gauss_simple(int *A, int m, int n, int *base_cols, int verbose_level)
void matrix_inverse(int *A, int *Ainv, int n, int verbose_level)
basic number theoretic functions
int i_power_j(int i, int j)
data_structures::int_vec * Int_vec
interface to system functions
int random_integer(int p)
#define Int_vec_zero(A, B)
#define Int_vec_print_integer_matrix_width(A, B, C, D, E, F)
#define Int_matrix_print(A, B, C)
#define Int_vec_copy(A, B, C)
#define Int_vec_print(A, B, C)
orbiter_kernel_system::orbiter_session * Orbiter
global Orbiter session
the orbiter library for the classification of combinatorial objects