Orbiter 2022
Combinatorial Objects
interface_permutation_representation.cpp
Go to the documentation of this file.
1/*
2 * interface_permutation_representation.cpp
3 *
4 * Created on: Aug 23, 2019
5 * Author: betten
6 */
7
8
9
10
11
12
14#include "group_actions.h"
15
16using namespace std;
17
18
19namespace orbiter {
20namespace layer3_group_actions {
21namespace actions {
22
23
24// #############################################################################
25// interface functions: permutation_representation group
26// #############################################################################
27
28
29static long int permutation_representation_group_element_image_of(action &A, long int a,
30 void *elt, int verbose_level);
31static void permutation_representation_group_element_image_of_low_level(action &A,
32 int *input, int *output, void *elt, int verbose_level);
33static int permutation_representation_group_element_linear_entry_ij(action &A,
34 void *elt, int i, int j, int verbose_level);
35static int permutation_representation_group_element_linear_entry_frobenius(action &A,
36 void *elt, int verbose_level);
37static void permutation_representation_group_element_one(action &A,
38 void *elt, int verbose_level);
39static int permutation_representation_group_element_is_one(action &A,
40 void *elt, int verbose_level);
41static void permutation_representation_group_element_unpack(action &A,
42 void *elt, void *Elt, int verbose_level);
43static void permutation_representation_group_element_pack(action &A,
44 void *Elt, void *elt, int verbose_level);
45static void permutation_representation_group_element_retrieve(action &A,
46 int hdl, void *elt, int verbose_level);
47static int permutation_representation_group_element_store(action &A,
48 void *elt, int verbose_level);
49static void permutation_representation_group_element_mult(action &A,
50 void *a, void *b, void *ab, int verbose_level);
51static void permutation_representation_group_element_invert(action &A,
52 void *a, void *av, int verbose_level);
53static void permutation_representation_group_element_transpose(action &A,
54 void *a, void *at, int verbose_level);
55static void permutation_representation_group_element_move(action &A,
56 void *a, void *b, int verbose_level);
57static void permutation_representation_group_element_dispose(action &A,
58 int hdl, int verbose_level);
59static void permutation_representation_group_element_print(action &A,
60 void *elt, std::ostream &ost);
61static void permutation_representation_group_element_code_for_make_element(
62 action &A, void *elt, int *data);
63static void permutation_representation_group_element_print_for_make_element(
64 action &A, void *elt, std::ostream &ost);
65static void permutation_representation_group_element_print_for_make_element_no_commas(
66 action &A, void *elt, std::ostream &ost);
67static void permutation_representation_group_element_print_quick(action &A,
68 void *elt, std::ostream &ost);
69static void permutation_representation_group_element_print_latex(action &A,
70 void *elt, std::ostream &ost);
71static void permutation_representation_group_element_print_latex_with_print_point_function(
72 action &A,
73 void *elt, std::ostream &ost,
74 void (*point_label)(std::stringstream &sstr, long int pt, void *data),
75 void *point_label_data);
76static void permutation_representation_group_element_print_verbose(action &A,
77 void *elt, std::ostream &ost);
78static void permutation_representation_group_print_point(action &A,
79 long int a, std::ostream &ost);
80
81
83{
84 label.assign("function_pointers_permutation_representation_group");
85 ptr_element_image_of = permutation_representation_group_element_image_of;
87 permutation_representation_group_element_image_of_low_level;
88 ptr_element_linear_entry_ij = permutation_representation_group_element_linear_entry_ij;
90 permutation_representation_group_element_linear_entry_frobenius;
91 ptr_element_one = permutation_representation_group_element_one;
92 ptr_element_is_one = permutation_representation_group_element_is_one;
93 ptr_element_unpack = permutation_representation_group_element_unpack;
94 ptr_element_pack = permutation_representation_group_element_pack;
95 ptr_element_retrieve = permutation_representation_group_element_retrieve;
96 ptr_element_store = permutation_representation_group_element_store;
97 ptr_element_mult = permutation_representation_group_element_mult;
98 ptr_element_invert = permutation_representation_group_element_invert;
99 ptr_element_transpose = permutation_representation_group_element_transpose;
100 ptr_element_move = permutation_representation_group_element_move;
101 ptr_element_dispose = permutation_representation_group_element_dispose;
102 ptr_element_print = permutation_representation_group_element_print;
103 ptr_element_print_quick = permutation_representation_group_element_print_quick;
104 ptr_element_print_latex = permutation_representation_group_element_print_latex;
106 permutation_representation_group_element_print_latex_with_print_point_function;
107 ptr_element_print_verbose = permutation_representation_group_element_print_verbose;
109 permutation_representation_group_element_code_for_make_element;
111 permutation_representation_group_element_print_for_make_element;
113 permutation_representation_group_element_print_for_make_element_no_commas;
114 ptr_print_point = permutation_representation_group_print_point;
115}
116
117
118
119static long int permutation_representation_group_element_image_of(action &A,
120 long int a, void *elt, int verbose_level)
121{
122 int f_v = (verbose_level >= 1);
124 int *Elt = (int *) elt;
125 long int b;
126
127 if (f_v) {
128 cout << "permutation_representation_group_element_image_of "
129 "computing image of " << a << endl;
130 cout << "verbose_level = " << verbose_level << endl;
131 }
132 b = P.element_image_of(Elt, a, verbose_level - 1);
133
134 if (f_v) {
135 cout << "permutation_representation_group_element_image_of "
136 "image of " << a << " is " << b << endl;
137 }
138 return b;
139}
140
141static void permutation_representation_group_element_image_of_low_level(action &A,
142 int *input, int *output, void *elt, int verbose_level)
143{
144 //int f_v = (verbose_level >= 1);
145 //permutation_representation &P = *A.G.Permutation_representation;
146 //int *Elt = (int *) elt;
147
148 cout << "permutation_representation_group_element_image_of_low_level "
149 "nyi " << endl;
150}
151
152static int permutation_representation_group_element_linear_entry_ij(action &A,
153 void *elt, int i, int j, int verbose_level)
154{
155 //int f_v = (verbose_level >= 1);
156 //permutation_representation &P = *A.G.Permutation_representation;
157 //int *Elt = (int *) elt;
158 //int w;
159
160 cout << "permutation_representation_group_element_linear_entry_ij "
161 "does not exist" << endl;
162 exit(1);
163}
164
165static int permutation_representation_group_element_linear_entry_frobenius(action &A,
166 void *elt, int verbose_level)
167{
168 //int f_v = (verbose_level >= 1);
169 //permutation_representation &P = *A.G.Permutation_representation;
170 //int *Elt = (int *) elt;
171 //int w;
172
173 cout << "permutation_representation_group_element_linear_entry_frobenius "
174 "does not exist" << endl;
175 exit(1);
176}
177
178static void permutation_representation_group_element_one(action &A,
179 void *elt, int verbose_level)
180{
181 int f_v = (verbose_level >= 1);
182 groups::permutation_representation &P = *A.G.Permutation_representation;
183 int *Elt = (int *) elt;
184
185 if (f_v) {
186 cout << "permutation_representation_group_element_one "
187 "calling element_one" << endl;
188 }
189 P.element_one(Elt);
190}
191
192static int permutation_representation_group_element_is_one(action &A,
193 void *elt, int verbose_level)
194{
195 int f_v = (verbose_level >= 1);
196 groups::permutation_representation &P = *A.G.Permutation_representation;
197 int *Elt = (int *) elt;
198 int ret;
199
200 if (f_v) {
201 cout << "permutation_representation_group_element_one calling "
202 "element_is_one" << endl;
203 }
204 ret = P.element_is_one(Elt);
205 if (f_v) {
206 if (ret) {
207 cout << "permutation_representation_group_element_is_one "
208 "returns YES" << endl;
209 }
210 else {
211 cout << "permutation_representation_group_element_is_one "
212 "returns NO" << endl;
213 }
214 }
215 return ret;
216}
217
218static void permutation_representation_group_element_unpack(action &A,
219 void *elt, void *Elt, int verbose_level)
220{
221 int f_v = (verbose_level >= 1);
222 groups::permutation_representation &P = *A.G.Permutation_representation;
223 int *Elt1 = (int *) Elt;
224 uchar *elt1 = (uchar *)elt;
225
226 if (f_v) {
227 cout << "permutation_representation_group_element_unpack" << endl;
228 }
229 P.element_unpack(elt1, Elt1);
230}
231
232static void permutation_representation_group_element_pack(action &A,
233 void *Elt, void *elt, int verbose_level)
234{
235 int f_v = (verbose_level >= 1);
236 groups::permutation_representation &P = *A.G.Permutation_representation;
237 int *Elt1 = (int *) Elt;
238 uchar *elt1 = (uchar *)elt;
239
240 if (f_v) {
241 cout << "permutation_representation_group_element_pack" << endl;
242 }
243 P.element_pack(Elt1, elt1);
244}
245
246static void permutation_representation_group_element_retrieve(action &A,
247 int hdl, void *elt, int verbose_level)
248{
249 int f_v = (verbose_level >= 1);
250 groups::permutation_representation &P = *A.G.Permutation_representation;
251 int *Elt = (int *) elt;
252 uchar *p_elt;
253
254 if (f_v) {
255 cout << "permutation_representation_group_element_"
256 "retrieve hdl = " << hdl << endl;
257 }
258 p_elt = P.PS->s_i(hdl);
259 P.element_unpack(p_elt, Elt);
260 if (f_v) {
261 P.element_print_easy(Elt, cout);
262 }
263}
264
265static int permutation_representation_group_element_store(action &A,
266 void *elt, int verbose_level)
267{
268 int f_v = (verbose_level >= 1);
269 groups::permutation_representation &P = *A.G.Permutation_representation;
270 int *Elt = (int *) elt;
271 int hdl;
272
273 if (f_v) {
274 cout << "permutation_representation_group_element_store" << endl;
275 }
276 P.element_pack(Elt, P.elt1);
277 hdl = P.PS->store(P.elt1);
278 if (f_v) {
279 cout << "permutation_representation_group_element_store "
280 "hdl = " << hdl << endl;
281 }
282 return hdl;
283}
284
285static void permutation_representation_group_element_mult(action &A,
286 void *a, void *b, void *ab, int verbose_level)
287{
288 int f_v = (verbose_level >= 1);
289 int f_vv = (verbose_level >= 2);
290 groups::permutation_representation &P = *A.G.Permutation_representation;
291 int *AA = (int *) a;
292 int *BB = (int *) b;
293 int *AB = (int *) ab;
294
295 if (f_v) {
296 cout << "permutation_representation_group_element_mult" << endl;
297 }
298 if (f_vv) {
299 cout << "A=" << endl;
300 P.element_print_easy(AA, cout);
301 cout << "B=" << endl;
302 P.element_print_easy(BB, cout);
303 }
304 P.element_mult(AA, BB, AB, verbose_level - 2);
305 if (f_v) {
306 cout << "permutation_representation_group_element_mult done" << endl;
307 }
308 if (f_vv) {
309 cout << "AB=" << endl;
310 P.element_print_easy(AB, cout);
311 }
312}
313
314static void permutation_representation_group_element_invert(action &A,
315 void *a, void *av, int verbose_level)
316{
317 int f_v = (verbose_level >= 1);
318 int f_vv = (verbose_level >= 2);
319 groups::permutation_representation &P = *A.G.Permutation_representation;
320 int *AA = (int *) a;
321 int *AAv = (int *) av;
322
323 if (f_v) {
324 cout << "permutation_representation_group_element_invert" << endl;
325 }
326 if (f_vv) {
327 cout << "A=" << endl;
328 P.element_print_easy(AA, cout);
329 }
330 P.element_invert(AA, AAv, verbose_level - 1);
331 if (f_v) {
332 cout << "permutation_representation_group_element_invert done" << endl;
333 }
334 if (f_vv) {
335 cout << "Av=" << endl;
336 P.element_print_easy(AAv, cout);
337 }
338}
339
340static void permutation_representation_group_element_transpose(action &A,
341 void *a, void *at, int verbose_level)
342{
343 //int f_v = (verbose_level >= 1);
344 //int f_vv = (verbose_level >= 2);
345 //permutation_representation &P = *A.G.Permutation_representation;
346 //int *AA = (int *) a;
347 //int *Atv = (int *) at;
348
349 cout << "permutation_representation_group_element_transpose "
350 "not yet implemented" << endl;
351 exit(1);
352}
353
354static void permutation_representation_group_element_move(action &A,
355 void *a, void *b, int verbose_level)
356{
357 int f_v = (verbose_level >= 1);
358 groups::permutation_representation &P = *A.G.Permutation_representation;
359 int *AA = (int *) a;
360 int *BB = (int *) b;
361
362 if (f_v) {
363 cout << "permutation_representation_group_element_move" << endl;
364 }
365 P.element_move(AA, BB, 0 /* verbose_level */);
366}
367
368static void permutation_representation_group_element_dispose(action &A,
369 int hdl, int verbose_level)
370{
371 int f_v = (verbose_level >= 1);
372 groups::permutation_representation &P = *A.G.Permutation_representation;
373
374 if (f_v) {
375 cout << "permutation_representation_group_element_dispose "
376 "hdl = " << hdl << endl;
377 }
378 P.PS->dispose(hdl);
379}
380
381static void permutation_representation_group_element_print(action &A,
382 void *elt, ostream &ost)
383{
384 groups::permutation_representation &P = *A.G.Permutation_representation;
385 int *Elt = (int *) elt;
386
387
388 P.element_print_easy(Elt, ost);
389 ost << endl;
390}
391
392static void permutation_representation_group_element_code_for_make_element(action &A,
393 void *elt, int *data)
394{
395 //permutation_representation &P = *A.G.Permutation_representation;
396 //int *Elt = (int *) elt;
397
398 cout << "permutation_representation_group_element_code_for_make_element "
399 "not yet implemented" << endl;
400 exit(1);
401}
402
403static void permutation_representation_group_element_print_for_make_element(action &A,
404 void *elt, ostream &ost)
405{
406 groups::permutation_representation &P = *A.G.Permutation_representation;
407 int *Elt = (int *) elt;
408
409
410 P.element_print_for_make_element(Elt, ost);
411}
412
413static void permutation_representation_group_element_print_for_make_element_no_commas(
414 action &A, void *elt, ostream &ost)
415{
416 //permutation_representation &P = *A.G.Permutation_representation;
417 //int *Elt = (int *) elt;
418
419 cout << "permutation_representation_group_element_print_for_make_element_no_commas "
420 "not yet implemented" << endl;
421 exit(1);
422}
423
424static void permutation_representation_group_element_print_quick(
425 action &A, void *elt, ostream &ost)
426{
427 groups::permutation_representation &P = *A.G.Permutation_representation;
428 int *Elt = (int *) elt;
429
430
431 P.element_print_easy(Elt, ost);
432}
433
434static void permutation_representation_group_element_print_latex(
435 action &A, void *elt, ostream &ost)
436{
437 groups::permutation_representation &P = *A.G.Permutation_representation;
438 int *Elt = (int *) elt;
439
440
441 P.element_print_latex(Elt, ost);
442}
443
444static void permutation_representation_group_element_print_latex_with_print_point_function(
445 action &A,
446 void *elt, std::ostream &ost,
447 void (*point_label)(std::stringstream &sstr, long int pt, void *data),
448 void *point_label_data)
449{
450 cout << "permutation_representation_group_element_print_latex_with_print_point_function "
451 "not yet implemented" << endl;
452 exit(1);
453}
454
455static void permutation_representation_group_element_print_verbose(
456 action &A, void *elt, ostream &ost)
457{
458 groups::permutation_representation &P = *A.G.Permutation_representation;
459 int *Elt = (int *) elt;
460
461 P.element_print_easy(Elt, ost);
462
463}
464
465static void permutation_representation_group_print_point(action &A, long int a, ostream &ost)
466{
467 //permutation_representation &P = *A.G.Permutation_representation;
468
469 cout << "permutation_representation_group_print_point "
470 "not yet implemented" << endl;
471 exit(1);
472}
473
474}}}
475
476
void(* ptr_element_print_for_make_element)(action &A, void *elt, std::ostream &ost)
Definition: actions.h:1113
void(* ptr_element_dispose)(action &A, int hdl, int verbose_level)
Definition: actions.h:1102
int(* ptr_element_linear_entry_frobenius)(action &A, void *elt, int verbose_level)
Definition: actions.h:1091
void(* ptr_element_transpose)(action &A, void *a, void *at, int verbose_level)
Definition: actions.h:1100
void(* ptr_element_print)(action &A, void *elt, std::ostream &ost)
Definition: actions.h:1103
void(* ptr_element_print_latex_with_print_point_function)(action &A, void *elt, std::ostream &ost, void(*point_label)(std::stringstream &sstr, long int pt, void *data), void *point_label_data)
Definition: actions.h:1106
void(* ptr_element_print_quick)(action &A, void *elt, std::ostream &ost)
Definition: actions.h:1104
int(* ptr_element_linear_entry_ij)(action &A, void *elt, int i, int j, int verbose_level)
Definition: actions.h:1090
void(* ptr_element_unpack)(action &A, void *elt, void *Elt, int verbose_level)
Definition: actions.h:1094
void(* ptr_element_move)(action &A, void *a, void *b, int verbose_level)
Definition: actions.h:1101
void(* ptr_element_image_of_low_level)(action &A, int *input, int *output, void *elt, int verbose_level)
Definition: actions.h:1089
int(* ptr_element_is_one)(action &A, void *elt, int verbose_level)
Definition: actions.h:1093
long int(* ptr_element_image_of)(action &A, long int a, void *elt, int verbose_level)
Definition: actions.h:1088
void(* ptr_element_print_for_make_element_no_commas)(action &A, void *elt, std::ostream &ost)
Definition: actions.h:1114
void(* ptr_print_point)(action &A, long int i, std::ostream &ost)
Definition: actions.h:1111
void(* ptr_element_invert)(action &A, void *a, void *av, int verbose_level)
Definition: actions.h:1099
void(* ptr_element_print_latex)(action &A, void *elt, std::ostream &ost)
Definition: actions.h:1105
void(* ptr_element_one)(action &A, void *elt, int verbose_level)
Definition: actions.h:1092
void(* ptr_element_print_verbose)(action &A, void *elt, std::ostream &ost)
Definition: actions.h:1110
void(* ptr_element_code_for_make_element)(action &A, void *elt, int *data)
Definition: actions.h:1112
void(* ptr_element_retrieve)(action &A, int hdl, void *elt, int verbose_level)
Definition: actions.h:1096
void(* ptr_element_pack)(action &A, void *Elt, void *elt, int verbose_level)
Definition: actions.h:1095
int(* ptr_element_store)(action &A, void *elt, int verbose_level)
Definition: actions.h:1097
void(* ptr_element_mult)(action &A, void *a, void *b, void *ab, int verbose_level)
Definition: actions.h:1098
a permutation group in a fixed action.
Definition: actions.h:99
long int element_image_of(int *Elt, long int a, int verbose_level)
unsigned char uchar
Definition: foundations.h:204
the orbiter library for the classification of combinatorial objects
groups::permutation_representation * Permutation_representation