Orbiter 2022
Combinatorial Objects
permutation_representation.cpp
Go to the documentation of this file.
1/*
2 * permutation_representation.cpp
3 *
4 * Created on: Aug 22, 2019
5 * Author: betten
6 */
7
8
9
10
12#include "group_actions.h"
13
14using namespace std;
15
16
17
18namespace orbiter {
19namespace layer3_group_actions {
20namespace groups {
21
22
23
25{
26 A_original = NULL;
28 nb_gens = 0;
29 gens = NULL;
30 Perms = NULL;
31 degree = 0;
32 //longinteger_object target_go;
33 P = NULL;
34 perm_offset = 0;
35 elt_size_int = 0;
37 char_per_elt = 0;
38 elt1 = NULL;
39 label[0] = 0;
40 label_tex[0] = 0;
41 PS = NULL;
42 Elts = NULL;
43 //null();
44}
45
47{
48 if (P) {
50 }
51 if (elt1) {
52 FREE_char((char *) elt1);
53 }
54 if (PS) {
56 }
57 if (Elts) {
59 }
60 //free();
61}
62
64 actions::action *A_original,
65 int f_stay_in_the_old_action,
67 int *Perms, int degree,
68 int verbose_level)
69// Perms is degree x nb_gens
70{
71 int f_v = (verbose_level >= 1);
72 char str[1000];
73
74 if (f_v) {
75 cout << "permutation_representation::init A_original=" << A_original->label << endl;
76 cout << "permutation_representation::init f_stay_in_the_old_action=" << f_stay_in_the_old_action << endl;
77 }
81 nb_gens = gens->len;
85 P->init(degree, 10 /* page_length_log */, verbose_level - 2);
89
90 label.assign(A_original->label);
91 sprintf(str, "_perm_rep_deg%d", degree);
92 label.append(str);
93
95 sprintf(str, " degree %d", degree);
96 label_tex.append(str);
97
100
102 PS->init(char_per_elt /* entry_size */,
103 10 /* page_length_log */, verbose_level);
104
105 int i, j;
106
108 for (i = 0; i < nb_gens; i++) {
110 for (j = 0; j < degree; j++) {
111 Elts[i * elt_size_int + perm_offset + j] = Perms[j * nb_gens + i];
112 }
113 }
114
115 if (f_v) {
116 cout << "permutation_representation::init done" << endl;
117 }
118}
119
121 long int a, int verbose_level)
122{
123 int f_v = (verbose_level >= 1);
124 long int b;
125
126 if (f_v) {
127 cout << "permutation_representation::element_image_of" << endl;
128 }
130 if (f_v) {
131 cout << "permutation_representation::element_image_of "
132 "using the old action" << endl;
133 }
134 b = A_original->element_image_of(a, Elt, verbose_level);
135 }
136 else {
137 if (f_v) {
138 cout << "permutation_representation::element_image_of "
139 "using the permutation representation (new action)" << endl;
140 }
141 b = Elt[perm_offset + a];
142 if (f_v) {
143 cout << "permutation_representation::element_image_of " << a
144 << " maps to " << b << endl;
145 }
146 }
147 return b;
148}
149
151{
152 int verbose_level = 0;
153
154 A_original->element_one(Elt, verbose_level);
155 P->one(Elt + perm_offset);
156}
157
159{
160 if (!P->is_one(Elt)) {
161 return FALSE;
162 }
163 return TRUE;
164}
165
166void permutation_representation::element_mult(int *A, int *B, int *AB,
167 int verbose_level)
168{
169 int f_v = (verbose_level >= 1);
171
172 if (f_v) {
173 cout << "permutation_representation::element_mult" << endl;
174 }
175 A_original->element_mult(A, B, AB, verbose_level);
176 Combi.perm_mult(A + perm_offset, B + perm_offset, AB + perm_offset, degree);
177 if (f_v) {
178 cout << "permutation_representation::element_mult done" << endl;
179 }
180}
181
182void permutation_representation::element_move(int *A, int *B, int verbose_level)
183{
184 int f_v = (verbose_level >= 1);
185
186 if (f_v) {
187 cout << "permutation_representation::element_move" << endl;
188 }
190 if (f_v) {
191 cout << "permutation_representation::element_move done" << endl;
192 }
193}
194
195void permutation_representation::element_invert(int *A, int *Av, int verbose_level)
196{
197 int f_v = (verbose_level >= 1);
199
200 if (f_v) {
201 cout << "permutation_representation::element_invert" << endl;
202 }
203 A_original->element_invert(A, Av, verbose_level);
204 Combi.perm_inverse(A + perm_offset, Av + perm_offset, degree);
205 if (f_v) {
206 cout << "permutation_representation::element_invert done" << endl;
207 }
208}
209
211{
212 cout << "permutation_representation::element_pack not yet implemented" << endl;
213}
214
216{
217 cout << "permutation_representation::element_unpack not yet implemented" << endl;
218}
219
221{
223}
224
226{
228}
229
231{
233}
234
235
236
237
238}}}
239
bulk storage of group elements in compressed form
void init(int entry_size, int page_length_log, int verbose_level)
a permutation group in a fixed action.
Definition: actions.h:99
void element_print_latex(void *elt, std::ostream &ost)
Definition: action_cb.cpp:364
void element_print_quick(void *elt, std::ostream &ost)
Definition: action_cb.cpp:353
void element_mult(void *a, void *b, void *ab, int verbose_level)
Definition: action_cb.cpp:315
void element_print_for_make_element(void *elt, std::ostream &ost)
Definition: action_cb.cpp:409
void element_invert(void *a, void *av, int verbose_level)
Definition: action_cb.cpp:322
void element_one(void *elt, int verbose_level)
Definition: action_cb.cpp:224
long int element_image_of(long int a, void *elt, int verbose_level)
Definition: action_cb.cpp:198
a domain for permutation groups whose elements are given in the permutation representation
Definition: groups.h:715
void init(actions::action *A_original, int f_stay_in_the_old_action, data_structures_groups::vector_ge *gens, int *Perms, int degree, int verbose_level)
long int element_image_of(int *Elt, long int a, int verbose_level)
#define FREE_int(p)
Definition: foundations.h:640
unsigned char uchar
Definition: foundations.h:204
#define NEW_char(n)
Definition: foundations.h:632
#define NEW_OBJECT(type)
Definition: foundations.h:638
#define FREE_OBJECT(p)
Definition: foundations.h:651
#define NEW_int(n)
Definition: foundations.h:625
#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_char(p)
Definition: foundations.h:646
the orbiter library for the classification of combinatorial objects