Orbiter 2022
Combinatorial Objects
action_on_factor_space.cpp
Go to the documentation of this file.
1// action_on_factor_space.cpp
2//
3// Anton Betten
4// Jan 18, 2010
5
7#include "group_actions.h"
8
9using namespace std;
10
11
12namespace orbiter {
13namespace layer3_group_actions {
14namespace induced_actions {
15
16
18{
19 null();
20}
21
23{
24 free();
25}
26
28{
29 VS = NULL;
31 subspace_basis = NULL;
32 base_cols = NULL;
33 embedding = NULL;
34 projection_table = NULL;
35 preimage_table = NULL;
36 tmp = NULL;
37 Tmp1 = NULL;
38 Tmp2 = NULL;
41 coset_reps_Gauss = NULL;
42 tmp_w = NULL;
43 tmp_w1 = NULL;
44 tmp_v1 = NULL;
45 tmp_v2 = NULL;
46}
47
49{
50 int f_v = FALSE;
51 int f_vv = FALSE;
52
53 if (f_v) {
54 cout << "action_on_factor_space::free" << endl;
55 }
56 if (subspace_basis) {
57 if (f_vv) {
58 cout << "action_on_factor_space::free "
59 "before FREE_int(subspace_basis)" << endl;
60 }
62 }
63 if (base_cols) {
64 if (f_vv) {
65 cout << "action_on_factor_space::free "
66 "before FREE_int(base_cols)" << endl;
67 }
69 }
70 if (embedding) {
71 if (f_vv) {
72 cout << "action_on_factor_space::free "
73 "before FREE_int(embedding)" << endl;
74 }
76 }
77 if (projection_table) {
78 if (f_vv) {
79 cout << "action_on_factor_space::free "
80 "before FREE_int(projection_table)" << endl;
81 }
83 }
84 if (preimage_table) {
85 if (f_vv) {
86 cout << "action_on_factor_space::free "
87 "before FREE_int(preimage_table)" << endl;
88 }
90 }
91 if (tmp) {
92 if (f_vv) {
93 cout << "action_on_factor_space::free "
94 "before FREE_int(tmp)" << endl;
95 }
97 }
98 if (Tmp1) {
99 if (f_vv) {
100 cout << "action_on_factor_space::free "
101 "before FREE_int(Tmp1)" << endl;
102 }
103 FREE_int(Tmp1);
104 }
105 if (Tmp2) {
106 if (f_vv) {
107 cout << "action_on_factor_space::free "
108 "before FREE_int(Tmp2)" << endl;
109 }
110 FREE_int(Tmp2);
111 }
112 if (coset_reps_Gauss) {
113 if (f_vv) {
114 cout << "action_on_factor_space::free "
115 "before FREE_int(coset_reps_Gauss)" << endl;
116 }
118 }
119 if (tmp_w) {
121 }
122 if (tmp_w1) {
124 }
125 if (tmp_v1) {
127 }
128 if (tmp_v2) {
130 }
131 null();
132 if (f_v) {
133 cout << "action_on_factor_space::free done" << endl;
134 }
135}
136
140 long int *subspace_basis_ranks, int subspace_basis_size,
141 int verbose_level)
142{
143 int f_v = (verbose_level >= 1);
144
145 if (f_v) {
146 cout << "action_on_factor_space::init_light" << endl;
147 }
148
150
155
157 subspace_basis_ranks, subspace_basis_size);
158
159 init2(A_base, A, FALSE /*f_compute_tables*/,
160 verbose_level - 1);
161
162
163 if (f_v) {
164 cout << "action_on_factor_space::init_light done" << endl;
165 }
166}
167
171 long int *subspace_basis_ranks, int subspace_basis_size,
172 long int *point_list, int nb_points,
173 int verbose_level)
174// establishes subspace_bases[subspace_basis_size * len]
175// by unranking the points in subspace_basis_ranks[]
176{
177 int f_v = (verbose_level >= 1);
178 int f_vv = (verbose_level >= 2);
179 int f_vvv = (verbose_level >= 3);
180 int i;
181
182 if (f_v) {
183 cout << "action_on_factor_space::init_"
184 "by_rank_table_mode" << endl;
185 cout << "nb_points = " << nb_points << endl;
186 }
187
190
193
195
197 subspace_basis_ranks, subspace_basis_size);
198
199 init2(A_base, A,
200 FALSE /*f_compute_tables*/,
201 verbose_level - 1);
202
203 if (f_v) {
204 cout << "action_on_factor_space::init_"
205 "by_rank_table_mode "
206 "before init_coset_table" << endl;
207 }
208
210 point_list, nb_points,
211 verbose_level);
213
214 if (f_v) {
215 cout << "action_on_factor_space::init_"
216 "by_rank_table_mode "
217 "after init_coset_table" << endl;
218 }
219
220
221 if (f_vv) {
222 cout << "action_on_factor_space::init_by_"
223 "rank_table_mode we found "
224 << nb_cosets << " cosets" << endl;
225 }
226 if (f_vvv) {
228 if (nb_points < 100) {
229 print_projection_table(point_list, nb_points);
230 }
231 else {
232 cout << "too large to print" << endl;
233 }
234 }
235 //large_degree = nb_points;
237 for (i = 0; i < nb_cosets; i++) {
239 coset_reps_Gauss[i], 0 /* verbose_level */);
240 }
242
243 if (f_vvv) {
244 cout << "action_on_factor_space::init_"
245 "by_rank_table_mode the preimage table:" << endl;
246
247 if (nb_cosets < 100) {
248 for (i = 0; i < nb_cosets; i++) {
249 cout << setw(5) << i << " : "
250 << setw(7) << coset_reps_Gauss[i] << " : ";
253 cout << setw(7) << preimage_table[i] << " : ";
256 cout << endl;
257 }
258 }
259 else {
260 cout << "too large to print" << endl;
261 }
262 }
263 if (f_v) {
264 cout << "action_on_factor_space::init_"
265 "by_rank_table_mode done" << endl;
266 }
267}
268
270{
271 int i;
272
273 cout << "The Gauss-coset representatives are:" << endl;
274 if (nb_cosets < 100) {
275 for (i = 0; i < nb_cosets; i++) {
276 cout << setw(5) << i << " : " << setw(7)
277 << coset_reps_Gauss[i] << " : ";
280 cout << endl;
281 }
282 }
283 else {
284 cout << "too large to print" << endl;
285 }
286}
287
289 long int *point_list, int nb_points)
290{
291 int i;
292
293 cout << "The projection_table is:" << endl;
294
295 if (nb_points < 100) {
296 cout << "i : pt : pt_coords : projection : "
297 "proj_coords" << endl;
298 for (i = 0; i < nb_points; i++) {
299 cout << setw(5) << i << " : "
300 << setw(7) << point_list[i] << " : ";
301 unrank_in_large_space(Tmp1, point_list[i]);
303 cout << " : " << setw(7) << projection_table[i] << " : ";
304 if (projection_table[i] >= 0) {
308 }
309 cout << endl;
310 }
311 }
312 else {
313 cout << "too big to print" << endl;
314 }
315}
316
318 long int *point_list, int nb_points,
319 int verbose_level)
320{
321 int f_v = (verbose_level >= 1);
323
324 if (f_v) {
325 cout << "action_on_factor_space::init_coset_table" << endl;
326 cout << "nb_points = " << nb_points << endl;
327 }
328 long int i, j, p;
329 int idx;
330
331
332 coset_reps_Gauss = NEW_lint(nb_points);
333 projection_table = NEW_lint(nb_points);
334 nb_cosets = 0;
335
336
338 for (i = 0; i < nb_points; i++) {
339 if (f_v && ((i % 5000) == 0)) {
340 cout << "action_on_factor_space::init_"
341 "by_rank_table_mode " << i
342 << " / " << nb_points
343 << " nb_cosets = " << nb_cosets << endl;
344 }
346 point_list[i], 0);
347 if (p == -1) {
348 projection_table[i] = -1;
349 continue;
350 }
352 nb_cosets, p, idx, 0)) {
353 projection_table[i] = idx;
354 continue;
355 }
356 for (j = nb_cosets; j > idx; j--) {
358 }
359 for (j = 0; j < i; j++) {
360 if (projection_table[i] >= idx) {
361 projection_table[i]++;
362 }
363 }
364 coset_reps_Gauss[idx] = p;
365 projection_table[i] = idx;
366 nb_cosets++;
367 }
368 }
369 else {
370 for (i = 0; i < nb_points; i++) {
371 coset_reps_Gauss[i] = point_list[i];
372 projection_table[i] = i;
373 }
374 nb_cosets = nb_points;
375 }
376 if (f_v) {
377 cout << "action_on_factor_space::init_coset_table done" << endl;
378 }
379}
380
381
385 long int *subspace_basis_ranks, int subspace_basis_size,
386 int f_compute_tables,
387 int verbose_level)
388{
389 int f_v = (verbose_level >= 1);
390
391 if (f_v) {
392 cout << "action_on_factor_space::init_by_rank" << endl;
393 }
399
401 subspace_basis_ranks, subspace_basis_size);
402
403 init2(A_base, A, f_compute_tables, verbose_level);
404 if (f_v) {
405 cout << "action_on_factor_space::init_by_rank done" << endl;
406 }
407}
408
412 int *subspace_basis, int subspace_basis_size,
413 int f_compute_tables, int verbose_level)
414{
415 int f_v = (verbose_level >= 1);
416
417 if (f_v) {
418 cout << "action_on_factor_space::init_from_coordinate_vectors" << endl;
419 }
427 if (f_v) {
428 cout << "action_on_factor_space::init_from_coordinate_vectors before init2" << endl;
429 }
430 init2(A_base, A, f_compute_tables, verbose_level);
431 if (f_v) {
432 cout << "action_on_factor_space::init_from_coordinate_vectors after init2" << endl;
433 }
434 if (f_v) {
435 cout << "action_on_factor_space::init_from_coordinate_vectors done" << endl;
436 }
437}
438
439
441 actions::action &A, int f_compute_tables, int verbose_level)
442{
443 int f_v = (verbose_level >= 1);
444 int f_vv = (verbose_level >= 1);
445 //int f_v8 = (verbose_level >= 8);
446 int i, j, idx, rk;
448
449
450 if (f_v) {
451 cout << "action_on_factor_space::init2" << endl;
452 cout << "action_on_factor_space::init2 "
453 "verbose_level = " << verbose_level << endl;
454 cout << "action_on_factor_space::init2 "
455 "VS->dimension = " << VS->dimension << endl;
456 cout << "action_on_factor_space::init2 "
457 "f_compute_tables = " << f_compute_tables << endl;
458 }
459
460
462 if (f_v) {
463 cout << "action_on_factor_space::init2 "
464 "after allocating base_cols" << endl;
465 }
466
471
472 if (f_vv) {
473 cout << "action_on_factor_space::init2 "
474 "subspace basis before reduction:" << endl;
478 }
481 0/*verbose_level - 1*/);
482 if (f_vv) {
483 cout << "action_on_factor_space::init2 "
484 "subspace basis after reduction:" << endl;
488 }
489 if (rk != subspace_basis_size) {
490 cout << "action_on_factor_space::init2 "
491 "rk != subspace_basis_size" << endl;
492 cout << "rk=" << rk << endl;
493 cout << "subspace_basis_size=" << subspace_basis_size << endl;
494 exit(1);
495 }
496
502 j = 0;
503 for (i = 0; i < VS->dimension; i++) {
504 if (!Sorting.int_vec_search(base_cols,
505 subspace_basis_size, i, idx)) {
506 embedding[j++] = i;
507 }
508 }
509 if (j != factor_space_len) {
510 cout << "j != factor_space_len" << endl;
511 cout << "j=" << j << endl;
512 cout << "factor_space_len=" << factor_space_len << endl;
513 exit(1);
514 }
515 if (FALSE /*f_v8*/) {
516 cout << "embedding: ";
518 cout << endl;
519 }
522 if (f_v) {
523 cout << "action_on_factor_space::init2 large_degree=" << large_degree << endl;
524 cout << "action_on_factor_space::init2 degree=" << degree << endl;
525 }
526
527 if (f_compute_tables) {
528 if (f_v) {
529 cout << "action_on_factor_space::init2 before compute_projection_table" << endl;
530 }
531 compute_projection_table(verbose_level - 1);
532 if (f_v) {
533 cout << "action_on_factor_space::init2 after compute_projection_table" << endl;
534 }
535 }
536 else {
537 if (f_v) {
538 cout << "not calling compute_projection_table" << endl;
539 }
540 }
541
542 if (f_v) {
543 cout << "action_on_factor_space::init2 done" << endl;
544 }
545}
546
548 int verbose_level)
549{
550 int f_v = (verbose_level >= 1);
551 int i, a;
552
553 if (f_v) {
554 cout << "action_on_factor_space::compute_"
555 "projection_table" << endl;
556 }
559 for (i = 0; i < degree; i++) {
560 preimage_table[i] = -1;
561 }
562 for (i = 0; i < large_degree; i++) {
563 a = project(i, verbose_level - 1);
564 projection_table[i] = a;
565 if (a == -1)
566 continue;
567 if (preimage_table[a] == -1) {
568 preimage_table[a] = i;
569 }
570 }
571 if (FALSE /*f_vv*/) {
572 cout << "projection_table: ";
574 cout << endl;
575 cout << "preimage_table: ";
577 cout << endl;
578 }
579 if (FALSE /*f_v10*/) {
581 }
583}
584
585
587{
589
590 return Gg.nb_PG_elements(factor_space_len - 1, VS->F->q);
591}
592
594{
596
597 return Gg.nb_PG_elements(VS->dimension - 1, VS->F->q);
598}
599
601{
602 long int i, j;
603 int *v;
604
605 v = NEW_int(VS->dimension);
606
607 if (degree < 100) {
608 for (i = 0; i < degree; i++) {
609 unrank(v, i, 0);
610 cout << setw(5) << i << " : ";
611 Int_vec_print(cout, v, VS->dimension);
612 j = rank(v, 0);
613 cout << " : " << setw(5) << j;
614 cout << endl;
615 }
616 }
617 else {
618 cout << "action_on_factor_space::list_all_elements too big to print" << endl;
619 }
620
621 if (large_degree < 100) {
622 cout << "project:" << endl;
623 for (i = 0; i < large_degree; i++) {
624 j = project(i, 0);
626 cout << " : " << setw(5) << i << " : ";
627 Int_vec_print(cout, v, VS->dimension);
628 cout << setw(5) << j << " : ";
629 if (j >= 0) {
630 unrank(v, j, 0);
631 Int_vec_print(cout, v, VS->dimension);
632 }
633 cout << endl;
634 }
635 }
636 else {
637 cout << "action_on_factor_space::list_all_elements too big to print" << endl;
638 }
639 if (degree < 100) {
640 cout << "preimage:" << endl;
641 for (i = 0; i < degree; i++) {
642 unrank(v, i, 0);
643 j = preimage(i, 0);
644 cout << setw(5) << i << " : ";
645 Int_vec_print(cout, v, VS->dimension);
646 cout << setw(5) << j << " : ";
648 Int_vec_print(cout, v, VS->dimension);
649 cout << endl;
650 }
651 }
652 else {
653 cout << "action_on_factor_space::list_all_elements too big to print" << endl;
654 }
655 FREE_int(v);
656}
657
659 int verbose_level)
660{
662 subspace_basis, base_cols, v, verbose_level);
663}
664
666 int verbose_level)
667// This function computes the lexleast element
668// in the coset modulo the subspace.
669// It does so by looping over all q^subspace_basis_size
670// elements in the subspace and ranking the corresponding
671// vector in the large space using rank_in_large_space(v2).
672{
673 int f_v = (verbose_level >= 1);
674 int f_vv = (verbose_level >= 2);
675 int f_vvv = (verbose_level >= 3);
676 long int rk1, N, i, b;
677 int *w;
678 int *v1;
679 int *v2;
681
682
683 if (f_v) {
684 cout << "action_on_factor_space::lexleast_"
685 "element_in_coset "
686 "rk=" << rk << endl;
687 }
688 if (subspace_basis_size == 0) {
689 rk1 = rk;
690 if (f_v) {
691 cout << "action_on_factor_space::lexleast_"
692 "element_in_coset "
693 << rk << "->" << rk1 << endl;
694 }
695 return rk1;
696 }
697
698
700 if (f_vv) {
701 cout << rk << "=";
703 cout << endl;
704 }
705
706 w = tmp_w1;
707 v1 = tmp_v1;
708 v2 = tmp_v2;
709 //w = NEW_int(subspace_basis_size);
710 //v1 = NEW_int(len);
711 //v2 = NEW_int(len);
712
714 if (f_vv) {
715 cout << "looping over all " << N
716 << " elements in the subspace" << endl;
717 }
718 rk1 = rk;
719 for (i = 0; i < N; i++) {
723 0 /* verbose_level */);
725 b = rank_in_large_space(v2);
726 if (b < rk1) {
727 rk1 = b;
728 }
729 if (f_vvv) {
730 cout << "i=" << i << " : w=";
732 cout << " v1=";
733 Int_vec_print(cout, v1, VS->dimension);
734 cout << " v2=";
735 Int_vec_print(cout, v2, VS->dimension);
736 cout << " b=" << b << " rk1=" << rk1 << endl;
737 }
738 }
739
740
741
742 //FREE_int(w);
743 //FREE_int(v1);
744 //FREE_int(v2);
745
746 if (f_v) {
747 cout << "action_on_factor_space::lexleast_"
748 "element_in_coset "
749 << rk << "->" << rk1 << endl;
750 }
751 return rk1;
752}
753
755 long int rk, int verbose_level)
756{
757 int f_v = (verbose_level >= 1);
758 long int i, rk1;
759
760 if (f_v) {
761 cout << "action_on_factor_space::project_"
762 "onto_Gauss_reduced_vector "
763 "rk=" << rk << endl;
764 }
766 if (f_v) {
767 cout << "action_on_factor_space::project_"
768 "onto_Gauss_reduced_vector"
769 << endl;
771 cout << endl;
772 }
773
774 reduce_mod_subspace(Tmp1, verbose_level - 3);
775 if (f_v) {
776 cout << "action_on_factor_space::project_"
777 "onto_Gauss_reduced_vector "
778 "after reduce_mod_subspace" << endl;
780 cout << endl;
781 }
782
783 for (i = 0; i < VS->dimension; i++) {
784 if (Tmp1[i])
785 break;
786 }
787 if (i == VS->dimension) {
788 if (f_v) {
789 cout << "action_on_factor_space::project_"
790 "onto_Gauss_reduced_vector "
791 "since it is the zero vector, "
792 "we return -1" << endl;
793 }
794 rk1 = -1;
795 }
796 else {
797 if (f_v) {
798 cout << "action_on_factor_space::project_"
799 "onto_Gauss_reduced_vector calling "
800 "rank_in_large_space" << endl;
801 }
803 if (f_v) {
804 cout << "action_on_factor_space::project_"
805 "onto_Gauss_reduced_vector "
806 "rank_in_large_space returns "
807 << rk1 << endl;
808 }
809 }
810 if (f_v) {
811 cout << "action_on_factor_space::project_"
812 "onto_Gauss_reduced_vector "
813 << rk << "->" << rk1 << endl;
814 }
815 return rk1;
816}
817
818long int action_on_factor_space::project(long int rk, int verbose_level)
819// returns the rank in the factor space
820// of the vector rk in the large space
821// after reduction modulo the subspace
822//
823// unranks the vector rk,
824// and reduces it modulo the subspace basis.
825// The non-pivot components are considered
826// as a vector in F_q^factor_space_len
827// and ranked using the rank function for projective space.
828// This rank is returned.
829// If the vector turns out to lie in the subspace,
830// a -1 is returned.
831{
832#if 0
834 return projection_table[rk];
835 }
836#endif
837 int f_v = (verbose_level >= 1);
838 int i;
839 long int a;
840 int f_nonzero = FALSE;
841
842 if (f_v) {
843 cout << "action_on_factor_space::project rk = " << rk << endl;
844 }
846
847 reduce_mod_subspace(Tmp1, verbose_level - 1);
848
849 for (i = 0; i < factor_space_len; i++) {
850 tmp[i] = Tmp1[embedding[i]];
851 if (tmp[i]) {
852 f_nonzero = TRUE;
853 }
854 }
855 if (f_nonzero) {
856 if (f_v) {
857 cout << "action_on_factor_space::project before rank_in_small_space" << endl;
858 }
860 //VS->F->PG_element_rank_modified(
861 // tmp, 1, factor_space_len, a);
862 if (f_v) {
863 cout << "action_on_factor_space::project returns " << a << endl;
864 }
865 return a;
866 }
867 else {
868 if (f_v) {
869 cout << "action_on_factor_space::project returns -1" << endl;
870 }
871 return -1;
872 }
873}
874
876 long int rk, int verbose_level)
877{
879 return preimage_table[rk];
880 }
881 long int a, b;
882
884 //VS->F->PG_element_unrank_modified(
885 // tmp, 1, factor_space_len, rk);
886
887 embed(tmp, Tmp1);
888#if 0
889 for (i = 0; i < factor_space_len; i++) {
890 Tmp1[embedding[i]] = tmp[i];
891 }
892 for (i = 0; i < subspace_basis_size; i++) {
893 Tmp1[base_cols[i]] = 0;
894 }
895#endif
897 b = lexleast_element_in_coset(a, verbose_level);
898 return b;
899}
900
901void action_on_factor_space::embed(int *from, int *to)
902{
903 int i;
904
905 for (i = 0; i < factor_space_len; i++) {
906 to[embedding[i]] = from[i];
907 }
908 for (i = 0; i < subspace_basis_size; i++) {
909 to[base_cols[i]] = 0;
910 }
911}
912
914 int *v,
915 long int rk, int verbose_level)
916{
917 if (f_table_mode) {
919 }
920 else {
921 //int i;
922
924 //VS->F->PG_element_unrank_modified(
925 // tmp, 1, factor_space_len, rk);
926 embed(tmp, v);
927#if 0
928 for (i = 0; i < factor_space_len; i++) {
929 v[embedding[i]] = tmp[i];
930 }
931 for (i = 0; i < subspace_basis_size; i++) {
932 v[base_cols[i]] = 0;
933 }
934#endif
935 }
936}
937
938long int action_on_factor_space::rank(int *v, int verbose_level)
939{
941
942 if (f_table_mode) {
943 long int p;
944 int idx;
945 int *w;
946
947 w = tmp_w;
948 //w = NEW_int(len);
949 Int_vec_copy(v, w, VS->dimension);
950 reduce_mod_subspace(v, verbose_level - 1);
951 p = rank_in_large_space(v);
952 if (!Sorting.lint_vec_search(coset_reps_Gauss, nb_cosets, p, idx, 0)) {
953 cout << "action_on_factor_space::rank fatal: "
954 "did not find Gauss coset representative"
955 << endl;
956 Int_vec_print(cout, v, VS->dimension);
957 cout << endl;
958 cout << "after reduce_mod_subspace" << endl;
959 Int_vec_print(cout, w, VS->dimension);
960 cout << endl;
961 cout << "has rank " << p << endl;
962 exit(1);
963 }
964 //FREE_int(w);
965 return idx;
966 }
967 else {
968 int i;
969 long int rk;
970
971 reduce_mod_subspace(v, verbose_level - 1);
972
973 for (i = 0; i < factor_space_len; i++) {
974 tmp[i] = v[embedding[i]];
975 }
977 //VS->F->PG_element_rank_modified(
978 // tmp, 1, factor_space_len, rk);
979 return rk;
980 }
981}
982
984 int *v, long int rk)
985{
986 VS->unrank_point(v, rk);
987}
988
990{
991 long int rk;
992
993 rk = VS->rank_point(v);
994 return rk;
995}
996
998 int *v, long int rk)
999{
1001}
1002
1004{
1005 long int rk;
1006
1008 return rk;
1009}
1010
1012 int *Elt, long int i, int verbose_level)
1013{
1014 //verbose_level = 2;
1015 int f_v = (verbose_level >= 1);
1016 long int j;
1017
1018 if (f_v) {
1019 cout << "action_on_factor_space::compute_"
1020 "image i = " << i <<
1021 " verbose_level =" << verbose_level << endl;
1022 }
1023 unrank(Tmp1, i, 0 /*verbose_level - 1*/);
1024 if (f_v) {
1025 cout << "action_on_factor_space::compute_"
1026 "image after unrank:";
1027 Int_vec_print(cout, Tmp1, VS->dimension);
1028 cout << endl;
1029 }
1030
1031 if (f_v) {
1032 cout << "action_on_factor_space::compute_"
1033 "image before A->element_image_of_low_level"
1034 << endl;
1035 }
1037 Elt, verbose_level - 1);
1038 if (f_v) {
1039 cout << "action_on_factor_space::compute_"
1040 "image after A->element_image_of_low_level"
1041 << endl;
1042 }
1043
1044 if (f_v) {
1045 cout << "action_on_factor_space::compute_"
1046 "image after element_image_of_low_level:";
1047 Int_vec_print(cout, Tmp2, VS->dimension);
1048 cout << endl;
1049 }
1050
1051 j = rank(Tmp2, 0/*verbose_level - 1*/);
1052 if (f_v) {
1053 cout << "action_on_factor_space::compute_"
1054 "image after rank, j = " << j << endl;
1055 }
1056 if (f_v) {
1057 cout << "action_on_factor_space::compute_"
1058 "image image of " << i << " is " << j << endl;
1059 }
1060 return j;
1061}
1062
1063}}}
1064
1065
finite dimensional vector space over a finite field
Definition: algebra.h:688
void unrank_basis(int *Mtx, long int *set, int len)
a collection of functions related to sorted vectors
int int_vec_search(int *v, int len, int a, int &idx)
Definition: sorting.cpp:1094
int lint_vec_search(long int *v, int len, long int a, int &idx, int verbose_level)
Definition: sorting.cpp:1157
void PG_element_unrank_modified_lint(int *v, int stride, int len, long int a)
void PG_element_rank_modified_lint(int *v, int stride, int len, long int &a)
various functions related to geometries
Definition: geometry.h:721
void AG_element_unrank(int q, int *v, int stride, int len, long int a)
void mult_matrix_matrix(int *A, int *B, int *C, int m, int n, int o, int verbose_level)
void reduce_mod_subspace(int k, int len, int *basis, int *base_cols, int *v, int verbose_level)
int Gauss_simple(int *A, int m, int n, int *base_cols, int verbose_level)
a permutation group in a fixed action.
Definition: actions.h:99
void element_image_of_low_level(int *input, int *output, void *elt, int verbose_level)
Definition: action_cb.cpp:209
void init_coset_table(long int *point_list, int nb_points, int verbose_level)
void init_by_rank(algebra::vector_space *VS, actions::action &A_base, actions::action &A, long int *subspace_basis_ranks, int subspace_basis_size, int f_compute_tables, int verbose_level)
void init_from_coordinate_vectors(algebra::vector_space *VS, actions::action &A_base, actions::action &A, int *subspace_basis, int subspace_basis_size, int f_compute_tables, int verbose_level)
long int compute_image(actions::action *A, int *Elt, long int i, int verbose_level)
void init_by_rank_table_mode(algebra::vector_space *VS, actions::action &A_base, actions::action &A, long int *subspace_basis_ranks, int subspace_basis_size, long int *point_list, int nb_points, int verbose_level)
void init2(actions::action &A_base, actions::action &A, int f_compute_tables, int verbose_level)
void init_light(algebra::vector_space *VS, actions::action &A_base, actions::action &A, long int *subspace_basis_ranks, int subspace_basis_size, int verbose_level)
#define FREE_int(p)
Definition: foundations.h:640
#define Lint_vec_print(A, B, C)
Definition: foundations.h:686
#define NEW_int(n)
Definition: foundations.h:625
#define Int_vec_print_integer_matrix_width(A, B, C, D, E, F)
Definition: foundations.h:691
#define TRUE
Definition: foundations.h:231
#define FALSE
Definition: foundations.h:234
#define Int_vec_copy(A, B, C)
Definition: foundations.h:693
#define FREE_lint(p)
Definition: foundations.h:642
#define NEW_lint(n)
Definition: foundations.h:628
#define Int_vec_print(A, B, C)
Definition: foundations.h:685
the orbiter library for the classification of combinatorial objects