17namespace layer1_foundations {
53 for (i = 1; i <=
k; i++) {
69 int f_v = (verbose_level >= 1);
74 cout <<
"gl_classes::init" << endl;
80 cout <<
"gl_classes::init k = " <<
k <<
" q = " <<
q << endl;
86 cout <<
"gl_classes before Table_of_polynomials->init" << endl;
90 cout <<
"gl_classes after Table_of_polynomials->init" << endl;
95 cout <<
"gl_classes::init making partitions" << endl;
99 for (d = 1; d <=
k; d++) {
108 cout <<
"gl_classes k = " <<
k
109 <<
" q = " <<
q <<
" Nb_part = ";
118 cout <<
"gl_classes::init k = " <<
k
119 <<
" q = " <<
q <<
" done" << endl;
124 int *Select_partition,
int verbose_level)
126 int f_v = (verbose_level >= 1);
129 cout <<
"gl_classes::select_partition_first" << endl;
136 int *Select_partition,
int verbose_level)
138 int f_v = (verbose_level >= 1);
142 cout <<
"gl_classes::select_partition_next" << endl;
147 if (Select_partition[i] <
Nb_part[m] - 1) {
148 Select_partition[i]++;
151 Select_partition[i] = 0;
158 int *Select_partition,
int verbose_level)
160 int f_v = (verbose_level >= 1);
163 cout <<
"gl_classes::first" << endl;
166 Select, verbose_level)) {
171 Select_partition, verbose_level)) {
175 Select, verbose_level)) {
182 int *Select_partition,
int verbose_level)
184 int f_v = (verbose_level >= 1);
187 cout <<
"gl_classes::next" << endl;
194 Select, verbose_level)) {
198 Select_partition, verbose_level)) {
208 int f_v = (verbose_level >= 1);
209 int *Select, *Select_Partition;
213 cout <<
"gl_classes::make_matrix_from_class_rep" << endl;
225 Select_Partition[a] = p;
228 cout <<
"gl_classes::make_matrix_from_class_rep before make_matrix_in_rational_normal_form" << endl;
231 Mtx, Select, Select_Partition,
234 cout <<
"gl_classes::make_matrix_from_class_rep after make_matrix_in_rational_normal_form" << endl;
239 cout <<
"gl_classes::make_matrix_from_class_rep done" << endl;
246 int *Select,
int *Select_Partition,
249 int f_v = (verbose_level >= 1);
251 int aa, coef, m_one, i, j, i0;
256 cout <<
"gl_classes::make_matrix_in_rational_normal_form" << endl;
260 cout <<
"Select_Partition=";
276 p = Select_Partition[a];
281 for (aa = 0; aa < m; aa++) {
285 for (i = 0; i < d; i++) {
286 coef =
F->
mult(m_one, pol[i]);
287 Mtx[(i0 + i) *
k + i0 + d - 1] = coef;
290 for (j = 0; j < d - 1; j++) {
291 Mtx[(i0 + j + 1) *
k + i0 + j] = 1;
298 cout <<
"gl_classes::make_matrix_in_rational_normal_form "
299 "i0 != k (first time)" << endl;
307 p = Select_Partition[a];
316 for (ii = m; ii >= 1; ii--) {
318 for (b = 0; b < jj; b++) {
321 for (i = 0; i < ii; i++) {
323 Mtx[(i0 + d) *
k + i0 + d - 1] = 1;
336 cout <<
"gl_classes::make_matrix_in_rational_normal_form "
337 "i0 != k (second time)" << endl;
342 cout <<
"gl_classes::make_matrix_in_rational_normal_form done" << endl;
347 int *poly_degree,
int *poly_mult,
int *partition_idx,
353 int f_v = (verbose_level >= 1);
356 int a, m, d, p, i, j, b, mue_i, aa, bb, cc;
362 cout <<
"gl_classes::centralizer_order_Kung_basic" << endl;
364 co.
create(1, __FILE__, __LINE__);
366 for (a = 0; a < nb_irreds; a++) {
372 p = partition_idx[a];
374 cout <<
"gl_classes::centralizer_order_Kung_basic "
375 "a=" << a <<
" d=" << d
376 <<
" m=" << m <<
" p=" << p << endl;
387 co1.
create(1, __FILE__, __LINE__);
388 for (i = 1; i <= m; i++) {
393 for (j = 1; j <= b; j++) {
399 e.
create(cc, __FILE__, __LINE__);
410 cout <<
"gl_classes::centralizer_order_Kung_basic done" << endl;
415 int *Select_polynomial,
423 int a, m, d, p, i, j, b, mue_i, aa, bb, cc;
428 co.
create(1, __FILE__, __LINE__);
433 m = Select_polynomial[a];
435 p = Select_partition[a];
446 co1.
create(1, __FILE__, __LINE__);
447 for (i = 1; i <= m; i++) {
452 for (j = 1; j <= b; j++) {
457 e.
create(cc, __FILE__, __LINE__);
472 int f_no_eigenvalue_one,
int verbose_level)
474 int f_v = (verbose_level >= 1);
475 int f_vv = (verbose_level >= 2);
476 int f_vvv = (verbose_level >= 3);
486 cout <<
"gl_classes::make_classes "
487 "k = " <<
k <<
" q = " <<
q << endl;
489 int *Select_polynomial;
490 int *Select_partition;
494 cout <<
"gl_classes::make_classes "
503 go.
create(1, __FILE__, __LINE__);
505 for (i = 0; i <
k; i++) {
507 f.
create(b, __FILE__, __LINE__);
512 cout <<
"gl_classes::make_classes "
513 "The order of GL(k,q) is "
517 sum.
create(0, __FILE__, __LINE__);
523 first(Select_polynomial, Select_partition, verbose_level - 2);
527 if (f_no_eigenvalue_one) {
528 if (Select_polynomial[0]) {
534 cout <<
"gl_classes::make_classes The class " << cnt <<
" is:" << endl;
541 m = Select_polynomial[i];
543 p = Select_partition[i];
546 cout <<
"gl_classes::make_classes i=" << i <<
" m=" << m <<
" p=" << p << endl;
559 Mtx, Select_polynomial, Select_partition,
563 cout <<
"gl_classes::make_classes Representative:" << endl;
571 cout <<
"gl_classes::make_classes Centralizer order = " << co << endl;
577 cout <<
"gl_classes::make_classes Class length = " << cl << endl;
583 cout <<
"gl_classes::make_classes Total = " << sum << endl;
591 if (!
next(Select_polynomial, Select_partition, verbose_level - 2)) {
602 cout <<
"gl_classes::make_classes Total = " << sum <<
" in " << nb_classes
603 <<
" conjugacy classes" << endl;
608 sum.
create(0, __FILE__, __LINE__);
612 first(Select_polynomial, Select_partition, verbose_level - 2);
615 if (f_no_eigenvalue_one) {
616 if (Select_polynomial[0]) {
622 cout <<
"gl_classes::make_classes The class " << cnt <<
" is:" << endl;
628 m = Select_polynomial[i];
630 p = Select_partition[i];
633 cout <<
"i=" << i <<
" m=" << m <<
" p=" << p << endl;
647 Select_polynomial, Select_partition, verbose_level);
651 Select_polynomial, Select_partition,
655 cout <<
"gl_classes::make_classes Representative:" << endl;
664 cout <<
"gl_classes::make_classes Centralizer order = " << co << endl;
670 cout <<
"gl_classes::make_classes Class length = " << cl << endl;
675 cout <<
"gl_classes::make_classes Total = " << sum << endl;
687 if (!
next(Select_polynomial, Select_partition, verbose_level - 2)) {
699 cout <<
"gl_classes::make_classes k = " <<
k <<
" q = " <<
q
707 int f_v = (verbose_level >= 1);
713 int *Select_partition;
717 cout <<
"gl_classes::identify_matrix "
718 "k = " <<
k <<
" q = " <<
q << endl;
721 cout <<
"gl_classes::identify_matrix "
722 "input matrix=" << endl;
744 cout <<
"gl_classes::identify_matrix "
745 "The characteristic polynomial is ";
756 cout <<
"gl_classes::identify_matrix "
757 "After substitution, the matrix is " << endl;
763 cout <<
"gl_classes::identify_matrix before factorize_polynomial" << endl;
767 char_poly, Mult, verbose_level);
770 cout <<
"gl_classes::identify_matrix after factorize_polynomial" << endl;
774 cout <<
"gl_classes::identify_matrix factorization: ";
780 cout <<
"gl_classes::identify_matrix before identify2" << endl;
784 Select_partition, Basis,
788 cout <<
"gl_classes::identify_matrix after identify2" << endl;
792 cout <<
"gl_classes::identify_matrix before R->init" << endl;
795 Mult, Select_partition, verbose_level);
797 cout <<
"gl_classes::identify_matrix after R->init" << endl;
809 cout <<
"gl_classes::identify_matrix B^-1 * A * B = " << endl;
827 cout <<
"gl_classes::identify_matrix "
828 "k = " <<
k <<
" q = " <<
q <<
" done" << endl;
833 int *Mult,
int *Select_partition,
int *Basis,
836 int f_v = (verbose_level >= 1);
837 int f_vv = (verbose_level >= 2);
842 cout <<
"gl_classes::identify2 k = " <<
k <<
" q = " <<
q << endl;
865 if (i != nb_irreds) {
866 cout <<
"gl_classes::identify2 i != nb_irreds" << endl;
873 cout <<
"gl_classes::identify2 "
874 "k = " <<
k <<
" q = " <<
q <<
" Irreds: ";
888 cout <<
"gl_classes::identify2 "
889 "before compute_generalized_kernels_for_each_block" << endl;
893 Mtx, Irreds, nb_irreds,
898 cout <<
"gl_classes::identify2 "
899 "after compute_generalized_kernels_for_each_block" << endl;
903 for (i = 0; i < nb_irreds; i++) {
904 Select_partition[Irreds[i]] = Data[i].
part_idx;
908 cout <<
"gl_classes::identify2 before "
909 "choose_basis_for_rational_normal_form" << endl;
914 nb_irreds, Basis, verbose_level);
918 cout <<
"gl_classes::identify2 after "
919 "choose_basis_for_rational_normal_form" << endl;
924 cout <<
"gl_classes::identify2 "
925 "transformation matrix = " << endl;
935 cout <<
"gl_classes::identify2 "
936 "k = " <<
k <<
" q = " <<
q <<
" done" << endl;
941 int *Mtx,
int *Irreds,
int nb_irreds,
945 int f_v = (verbose_level >= 1);
946 int f_vv = (verbose_level >= 2);
947 int h, u, d, tt, *poly_coeffs, b0;
953 cout <<
"gl_classes::compute_generalized_kernels_for_each_block" << endl;
960 for (h = 0; h < nb_irreds; h++) {
962 cout <<
"gl_classes::compute_generalized_kernels_for_each_block "
963 "polynomial " << h <<
" / " << nb_irreds << endl;
977 cout <<
"gl_classes::compute_generalized_kernels_for_each_block "
988 cout <<
"gl_classes::compute_generalized_kernels_for_each_block "
989 "matrix substituted into polynomial = " << endl;
998 Mult[u], poly_coeffs,
1005 cout <<
"gl_classes::compute_generalized_kernels_for_each_block "
1006 "after compute_generalized_kernels" << endl;
1015 cout <<
"gl_classes::compute_generalized_kernels_for_each_block done" << endl;
1022 int *M2,
int d,
int b0,
int m,
int *poly_coeffs,
1025 int f_v = (verbose_level >= 1);
1026 int f_vv = (verbose_level >= 2);
1033 cout <<
"gl_classes::compute_generalized_kernels" << endl;
1045 Data->
b1 = b0 + d * m;
1050 for (cnt = 1; cnt <=
k; cnt++) {
1053 cout <<
"gl_classes::compute_generalized_kernels "
1054 "cnt = " << cnt <<
" computing kernel of:" << endl;
1063 base_cols, rank, &Data->
K[cnt], 0 );
1066 cout <<
"gl_classes::compute_generalized_kernels "
1067 "kernel = " << endl;
1069 Data->
K[cnt].
m, Data->
K[cnt].
n);
1073 c = Data->
K[cnt].
n / d;
1075 c -= Data->
K[cnt - 1].
n / d;
1079 if (Data->
K[cnt].
n == m * d) {
1091 cout <<
"height=" << Data->
height << endl;
1092 cout <<
"gl_classes::compute_generalized_kernels dual_part = ";
1102 cout <<
"gl_classes::compute_generalized_kernels part = ";
1109 m, verbose_level - 2);
1112 cout <<
"gl_classes::compute_generalized_kernels "
1113 "part_idx = " << Data->
part_idx << endl;
1120 cout <<
"gl_classes::compute_generalized_kernels done" << endl;
1127 int f_v = (verbose_level >= 1);
1132 cout <<
"gl_classes::identify_partition" << endl;
1134 for (i = 0; i <
Nb_part[m]; i++) {
1141 cout <<
"gl_classes::identify_partition "
1142 "did not find partition" << endl;
1143 cout <<
"looking for:" << endl;
1146 cout <<
"in:" << endl;
1151 cout <<
"gl_classes::identify_partition done" << endl;
1161 int f_v = (verbose_level >= 1);
1162 int f_vv = (verbose_level >= 2);
1166 cout <<
"gl_classes::choose_basis_for_rational_normal_form" << endl;
1169 cout <<
"gl_classes::choose_basis_for_rational_normal_form "
1177 for (h = 0; h < nb_irreds; h++) {
1179 cout <<
"gl_classes::choose_basis_for_rational_normal_form "
1180 "before choose_basis_for_rational_normal_form_block "
1181 << h <<
" / " << nb_irreds <<
" b = " << b << endl;
1191 cout <<
"gl_classes::identify2 after "
1192 "choose_basis_for_rational_normal_form_block "
1193 << h <<
" / " << nb_irreds << endl;
1199 cout <<
"gl_classes::choose_basis_for_rational_normal_form "
1205 cout <<
"gl_classes::choose_basis_for_rational_normal_form "
1218 int f_v = (verbose_level >= 1);
1219 int c, e, f, af, B0, b0, g, ii, coeff, i, j;
1224 cout <<
"gl_classes::choose_basis_for_rational_"
1225 "normal_form_block" << endl;
1233 for (f = Data->
height; f >= 1; f--) {
1234 af = Data->
part[f - 1];
1236 cout <<
"f=" << f <<
" af=" << af << endl;
1238 for (e = 0; e < af; e++) {
1240 cout <<
"f=" << f <<
" af=" << af <<
" e=" << e << endl;
1247 Forbidden_subspace->
allocate(
k, b - B0);
1249 for (j = 0; j < b - B0; j++) {
1250 for (i = 0; i <
k; i++) {
1251 Forbidden_subspace->
s_ij(i, j) = Basis[i *
k + B0 + j];
1258 &Data->
K[f], &Data->
K[f - 1], Forbidden_subspace,
1259 v, verbose_level - 1);
1269 &Data->
K[f], Dummy_subspace, Forbidden_subspace,
v,
1278 cout <<
"chosing vector v=";
1282 for (c = 0; c < f; c++) {
1285 cout <<
"c=" << c <<
" / " << f <<
" b0=" << b0 << endl;
1287 for (g = 0; g < Data->
d; g++) {
1289 cout <<
"c=" << c <<
" / " << f <<
" b0=" << b0
1290 <<
"g=" << g <<
" / " << Data->
d << endl;
1292 for (i = 0; i <
k; i++) {
1293 Basis[i *
k + b] =
v[i];
1296 cout <<
"Basis=" << endl;
1302 cout <<
"forced vector w=";
1308 if (g == Data->
d - 1) {
1309 for (ii = 0; ii < Data->
d; ii++) {
1314 Basis + b0 + ii,
k, coeff,
k);
1321 cout <<
"gl_classes::choose_basis_for_rational_normal_"
1322 "form_block Basis = " << endl;
1333 cout <<
"gl_classes::choose_basis_for_rational_normal_"
1334 "form_block done" << endl;
1341 int *Basis,
int **&Gens,
int &nb_gens,
int &nb_alloc,
1344 int f_v = (verbose_level >= 1);
1345 int f_vv = (verbose_level >= 2);
1350 int *Select_partition;
1355 cout <<
"gl_classes::generators_for_centralizer "
1356 "k = " <<
k <<
" q = " <<
q << endl;
1357 cout <<
"verbose_level=" << verbose_level << endl;
1360 cout <<
"gl_classes::generators_for_centralizer " << endl;
1381 cout <<
"gl_classes::generators_for_centralizer "
1382 "The characteristic polynomial is ";
1388 Mtx, M2,
k, verbose_level);
1390 cout <<
"gl_classes::generators_for_centralizer "
1391 "After substitution, the matrix is " << endl;
1398 cout <<
"gl_classes::generators_for_centralizer before factorize_polynomial" << endl;
1404 cout <<
"gl_classes::generators_for_centralizer after factorize_polynomial" << endl;
1408 cout <<
"gl_classes::generators_for_centralizer factorization: ";
1417 cout <<
"gl_classes::generators_for_centralizer "
1418 "before centralizer_generators" << endl;
1421 Mtx, char_poly, Mult, Select_partition,
1422 Basis, Gens, nb_gens, nb_alloc,
1425 cout <<
"gl_classes::generators_for_centralizer "
1426 "after centralizer_generators" << endl;
1431 cout <<
"gl_classes::generators_for_centralizer "
1432 "we found " << nb_gens <<
" transformation matrices" << endl;
1435 cout <<
"gl_classes::generators_for_centralizer "
1436 "we found " << nb_gens <<
" transformation matrices, "
1439 for (i = 0; i < nb_gens; i++) {
1440 cout <<
"transformation matrix " << i <<
" / "
1441 << nb_gens <<
" is" << endl;
1446 for (i = 0; i < nb_gens; i++) {
1455 cout <<
"gl_classes::generators_for_centralizer "
1456 "we found " << nb_gens <<
" generators" << endl;
1458 for (i = 0; i < nb_gens; i++) {
1459 cout <<
"generator " << i <<
" / " << nb_gens <<
" is" << endl;
1466 Mult, Select_partition, verbose_level);
1478 cout <<
"gl_classes::generators_for_centralizer "
1479 "B^-1 * A * B = " << endl;
1496 cout <<
"gl_classes::generators_for_centralizer "
1497 "k = " <<
k <<
" q = " <<
q <<
" done" << endl;
1505 int *Basis,
int **&Gens,
int &nb_gens,
int &nb_alloc,
1508 int f_v = (verbose_level >= 1);
1510 int i, h, nb_irreds;
1514 cout <<
"gl_classes::centralizer_generators "
1515 "k = " <<
k <<
" q = " <<
q << endl;
1536 cout <<
"gl_classes::centralizer_generators "
1537 "k = " <<
k <<
" q = " <<
q <<
" Irreds: ";
1551 cout <<
"gl_classes::centralizer_generators "
1552 "before compute_data_on_blocks" << endl;
1556 Mtx, Irreds, nb_irreds,
1562 for (i = 0; i < nb_irreds; i++) {
1563 Select_partition[Irreds[i]] = Data[i].
part_idx;
1567 cout <<
"gl_classes::centralizer_generators "
1568 "before choose_basis_for_rational_normal_form" << endl;
1581 cout <<
"gl_classes::centralizer_generators "
1582 "after choose_basis_for_rational_normal_form" << endl;
1590 for (h = 0; h < nb_irreds; h++) {
1592 cout <<
"gl_classes::centralizer_generators "
1593 "before centralizer_generators_block " << h
1594 <<
" / " << nb_irreds << endl;
1598 Gens, nb_gens, nb_alloc,
1609 cout <<
"gl_classes::centralizer_generators "
1610 "k = " <<
k <<
" q = " <<
q <<
" done, "
1611 "we found " << nb_gens <<
" generators" << endl;
1618 int **&Gens,
int &nb_gens,
int &nb_alloc,
1621 int f_v = (verbose_level >= 1);
1622 int f_vv = (verbose_level >= 2);
1623 int level1, level2, coset, i, af;
1627 cout <<
"gl_classes::centralizer_generators_block "
1628 "h = " << h << endl;
1635 for (level1 = Data[h].height; level1 >= 1; level1--) {
1637 cout <<
"gl_classes::centralizer_generators_block "
1638 "h = " << h <<
" level1 = " << level1 << endl;
1641 af = Data[h].
part[level1 - 1];
1642 for (level2 = 0; level2 < af; level2++) {
1645 cout <<
"gl_classes::centralizer_generators_block "
1646 "h = " << h <<
" level1 = " << level1
1647 <<
" level2=" << level2 <<
" / " << af << endl;
1658 for (i = 0; i < h; i++) {
1666 cout <<
"gl_classes::centralizer_generators_block "
1667 "h = " << h <<
" level1 = " << level1
1668 <<
" level2 = " << level2
1669 <<
" coset = " << coset << endl;
1671 if (b != Data[h].b0) {
1672 cout <<
"gl_classes::centralizer_generators_block "
1673 "b != Data[h].b0" << endl;
1677 level1, level2, coset,
1678 Mtx, Data + h, b, Basis,
1679 verbose_level - 2)) {
1683 if (b != Data[h].b1) {
1684 cout <<
"gl_classes::centralizer_generators_block "
1685 "b != Data[h].b1" << endl;
1688 for (i = h + 1; i < nb_irreds; i++) {
1695 cout <<
"gl_classes::centralizer_generators_block "
1701 cout <<
"gl_classes::centralizer_generators_block "
1702 "h = " << h <<
" level1 = " << level1
1703 <<
" level2=" << level2 <<
" / " << af
1704 <<
" chosen matrix:" << endl;
1709 if (nb_gens == nb_alloc) {
1711 int nb_alloc_new = nb_alloc + 10;
1714 for (i = 0; i < nb_alloc; i++) {
1719 nb_alloc = nb_alloc_new;
1734 cout <<
"gl_classes::centralizer_generators_block done" << endl;
1741 int level1,
int level2,
int &coset,
1745 int f_v = (verbose_level >= 1);
1746 int f_vv = (verbose_level >= 2);
1747 int c, e, f, af, B0, b0, g, ii, coeff, i, j;
1753 cout <<
"gl_classes::choose_basis_for_rational_normal_form_coset "
1754 "level1 = " << level1
1755 <<
" level2 = " << level2
1756 <<
" coset = " << coset << endl;
1764 for (f = Data->
height; f >= 1; f--) {
1765 af = Data->
part[f - 1];
1767 cout <<
"f=" << f <<
" af=" << af << endl;
1769 for (e = 0; e < af; e++) {
1771 cout <<
"f=" << f <<
" af=" << af <<
" e=" << e << endl;
1778 Forbidden_subspace->
allocate(
k, b - B0);
1780 for (j = 0; j < b - B0; j++) {
1781 for (i = 0; i <
k; i++) {
1782 Forbidden_subspace->
s_ij(i, j) =
1783 Basis[i *
k + B0 + j];
1789 if (f == level1 && e == level2) {
1791 coset, &Data->
K[f], &Data->
K[f - 1],
1792 Forbidden_subspace,
v, verbose_level - 2)) {
1798 &Data->
K[f], &Data->
K[f - 1], Forbidden_subspace,
1799 v, verbose_level - 2);
1809 if (f == level1 && e == level2) {
1813 coset, &Data->
K[f], Dummy_subspace,
1814 Forbidden_subspace,
v,
1815 verbose_level - 2)) {
1821 &Data->
K[f], Dummy_subspace, Forbidden_subspace,
v,
1833 cout <<
"gl_classes::choose_basis_for_rational_normal_"
1834 "form_coset level1 = " << level1 <<
" level2 = "
1835 << level2 <<
" coset = " << coset
1836 <<
" could not choose vector, finished" << endl;
1841 cout <<
"chosing vector v=";
1845 for (c = 0; c < f; c++) {
1848 cout <<
"c=" << c <<
" b0=" << b0 << endl;
1850 for (g = 0; g < Data->
d; g++) {
1852 cout <<
"g=" << g << endl;
1854 for (i = 0; i <
k; i++) {
1855 Basis[i *
k + b] =
v[i];
1860 cout <<
"forced vector w=";
1866 if (g == Data->
d - 1) {
1867 for (ii = 0; ii < Data->
d; ii++) {
1870 Basis + b0 + ii,
k, coeff,
k);
1877 cout <<
"gl_classes::choose_basis_for_rational_normal_"
1878 "form_coset Basis = " << endl;
1890 cout <<
"gl_classes::choose_basis_for_rational_normal_"
1891 "form_coset done" << endl;
1900 int f_v = (verbose_level >= 1);
1905 cout <<
"gl_classes::find_class_rep" << endl;
1908 for (i = 0; i < nb_reps; i++) {
1909 if (Reps[i].type_coding->m != m) {
1924 cout <<
"gl_classes::find_class_rep done" << endl;
1931 int f_v = (verbose_level >= 1);
1937 cout <<
"gl_classes::report" << endl;
1945 ost <<
"\\section*{Conjugacy Classes of ${\\rm GL}(" <<
k <<
"," <<
q <<
")$}" << endl;
1949 int f_elements_exponential =
FALSE;
1950 string symbol_for_print;
1953 symbol_for_print.assign(
"\\alpha");
1957 ost <<
"The number of conjugacy classes of ${\\rm GL}(" <<
k <<
"," <<
q <<
")$ is " << nb_classes <<
":\\\\" << endl;
1958 ost <<
"$$" << endl;
1959 for (i = 0; i < nb_classes; i++) {
1965 ost <<
"\\left[" << endl;
1967 f_elements_exponential, symbol_for_print, M,
k,
k);
1968 ost <<
"\\right]" << endl;
1969 if (i < nb_classes - 1) {
1970 ost <<
", " << endl;
1972 if ((i + 1) % 5 == 0) {
1973 ost <<
"$$" << endl;
1974 ost <<
"$$" << endl;
1978 ost <<
"$$" << endl;
1979 ost <<
"\\bigskip" << endl;
1985 for (i = 0; i < nb_classes; i++) {
1986 ost <<
"Class " << i <<
" / "
1987 << nb_classes <<
"\\\\" << endl;
1992 cout <<
"gl_classes::report done" << endl;
2002 int *Select_polynomial, *Select_Partition;
2004 int f_elements_exponential =
FALSE;
2005 string symbol_for_print;
2010 symbol_for_print.assign(
"\\alpha");
2022 Select_polynomial[a] = m;
2023 Select_Partition[a] = p;
2027 go.
create(1, __FILE__, __LINE__);
2029 for (i = 0; i <
k; i++) {
2031 f.
create(b, __FILE__, __LINE__);
2041 Select_Partition, co, 0 );
2051 ost << a <<
"," << m <<
"," << p;
2052 if (i < R->type_coding->m - 1) {
2057 ost <<
"$$" << endl;
2058 ost <<
"\\left[" << endl;
2060 f_elements_exponential, symbol_for_print, Mtx,
k,
k);
2064 ost <<
"$$" << endl;
2066 ost <<
"centralizer order $" << co <<
"$\\\\";
2067 ost <<
"class size $" << cl <<
"$\\\\" << endl;
conjugacy class in GL(n,q) described using rational normal form
data_structures::int_matrix * type_coding
void init(int nb_irred, int *Select_polynomial, int *Select_partition, int verbose_level)
ring_theory::longinteger_object * class_length
ring_theory::longinteger_object * centralizer_order
void generators_for_centralizer(int *Mtx, gl_class_rep *R, int *Basis, int **&Gens, int &nb_gens, int &nb_alloc, int verbose_level)
void centralizer_generators(int *Mtx, ring_theory::unipoly_object &poly, int *Mult, int *Select_partition, int *Basis, int **&Gens, int &nb_gens, int &nb_alloc, int verbose_level)
void make_matrix_in_rational_normal_form(int *Mtx, int *Select, int *Select_Partition, int verbose_level)
void print_matrix_and_centralizer_order_latex(std::ostream &ost, gl_class_rep *R)
void centralizer_order_Kung_basic(int nb_irreds, int *poly_degree, int *poly_mult, int *partition_idx, ring_theory::longinteger_object &co, int verbose_level)
void compute_generalized_kernels(matrix_block_data *Data, int *M2, int d, int b0, int m, int *poly_coeffs, int verbose_level)
void choose_basis_for_rational_normal_form(int *Mtx, matrix_block_data *Data, int nb_irreds, int *Basis, int verbose_level)
void centralizer_generators_block(int *Mtx, matrix_block_data *Data, int nb_irreds, int h, int **&Gens, int &nb_gens, int &nb_alloc, int verbose_level)
void compute_generalized_kernels_for_each_block(int *Mtx, int *Irreds, int nb_irreds, int *Degree, int *Mult, matrix_block_data *Data, int verbose_level)
int first(int *Select, int *Select_partition, int verbose_level)
void init(int k, field_theory::finite_field *F, int verbose_level)
int choose_basis_for_rational_normal_form_coset(int level1, int level2, int &coset, int *Mtx, matrix_block_data *Data, int &b, int *Basis, int verbose_level)
void centralizer_order_Kung(int *Select_polynomial, int *Select_partition, ring_theory::longinteger_object &co, int verbose_level)
void make_classes(gl_class_rep *&R, int &nb_classes, int f_no_eigenvalue_one, int verbose_level)
int next(int *Select, int *Select_partition, int verbose_level)
field_theory::finite_field * F
void choose_basis_for_rational_normal_form_block(int *Mtx, matrix_block_data *Data, int *Basis, int &b, int verbose_level)
void report(std::ostream &ost, int verbose_level)
ring_theory::table_of_irreducible_polynomials * Table_of_polynomials
void make_matrix_from_class_rep(int *Mtx, gl_class_rep *R, int verbose_level)
int select_partition_first(int *Select, int *Select_partition, int verbose_level)
void identify2(int *Mtx, ring_theory::unipoly_object &poly, int *Mult, int *Select_partition, int *Basis, int verbose_level)
int find_class_rep(gl_class_rep *Reps, int nb_reps, gl_class_rep *R, int verbose_level)
void identify_matrix(int *Mtx, gl_class_rep *R, int *Basis, int verbose_level)
int select_partition_next(int *Select, int *Select_partition, int verbose_level)
int identify_partition(int *part, int m, int verbose_level)
rational normal form of a matrix in GL(n,q) for gl_class_rep
data_structures::int_matrix * K
a collection of combinatorial functions
void partition_print(std::ostream &ost, int *v, int n)
void partition_dual(int *part, int *dual_part, int n, int verbose_level)
void make_all_partitions_of_n(int n, int *&Table, int &nb, int verbose_level)
int Kung_mue_i(int *part, int i, int m)
void allocate(int m, int n)
int count_number_of_nonzero_entries(int *v, int len)
void matrix_print(int *p, int m, int n)
a collection of functions related to sorted vectors
int int_vec_compare(int *p, int *q, int len)
void latex_matrix(std::ostream &f, int f_elements_exponential, std::string &symbol_for_print, int *M, int m, int n)
linear_algebra::linear_algebra * Linear_algebra
void vector_add_apply_with_stride(int *v, int *w, int stride, int c, 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)
void choose_vector_in_here_but_not_in_here_or_here_column_spaces(data_structures::int_matrix *V, data_structures::int_matrix *W1, data_structures::int_matrix *W2, int *v, int verbose_level)
void mult_vector_from_the_right(int *A, int *v, int *Av, int m, int n)
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)
void matrix_get_kernel_as_int_matrix(int *M, int m, int n, int *base_cols, int nb_base_cols, data_structures::int_matrix *kernel, int verbose_level)
basic number theoretic functions
int i_power_j(int i, int j)
long int i_power_j_lint(long int i, long int j)
data_structures::int_vec * Int_vec
domain to compute with objects of type longinteger
void add(longinteger_object &a, longinteger_object &b, longinteger_object &c)
void mult(longinteger_object &a, longinteger_object &b, longinteger_object &c)
void integral_division(longinteger_object &a, longinteger_object &b, longinteger_object &q, longinteger_object &r, int verbose_level)
a class to represent arbitrary precision integers
void assign_to(longinteger_object &b)
void create(long int i, const char *file, int line)
a table of all irreducible polynomials over GF(q) of degree less than a certain value
void factorize_polynomial(unipoly_object &char_poly, int *Mult, int verbose_level)
int select_polynomial_next(int *Select, int verbose_level)
int select_polynomial_first(int *Select, int verbose_level)
void init(int k, field_theory::finite_field *F, int verbose_level)
domain of polynomials in one variable over a finite field
void delete_object(unipoly_object &p)
void create_object_of_degree_with_coefficients(unipoly_object &p, int d, int *coeff)
void substitute_matrix_in_polynomial(unipoly_object &p, int *Mtx_in, int *Mtx_out, int k, int verbose_level)
void create_object_by_rank(unipoly_object &p, long int rk, const char *file, int line, int verbose_level)
void characteristic_polynomial(int *Mtx, int k, unipoly_object &char_poly, int verbose_level)
void print_object(unipoly_object p, std::ostream &ost)
#define Int_vec_zero(A, B)
#define NEW_OBJECTS(type, n)
#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