Orbiter 2022
Combinatorial Objects
interface_matrix_group.cpp
Go to the documentation of this file.
1// interface_matrix_group.cpp
2//
3// Anton Betten
4//
5// started: November 13, 2007
6// last change: November 9, 2010
7// moved here from interface.cpp: January 25, 2014
8
9
10
11
13#include "group_actions.h"
14
15using namespace std;
16
17
18
19namespace orbiter {
20namespace layer3_group_actions {
21namespace actions {
22
23
24// #############################################################################
25// interface functions: matrix group
26// #############################################################################
27
28
29static long int matrix_group_element_image_of(action &A, long int a,
30 void *elt, int verbose_level);
31static void matrix_group_element_image_of_low_level(action &A,
32 int *input, int *output, void *elt, int verbose_level);
33static int matrix_group_element_linear_entry_ij(action &A,
34 void *elt, int i, int j, int verbose_level);
35static int matrix_group_element_linear_entry_frobenius(action &A,
36 void *elt, int verbose_level);
37static void matrix_group_element_one(action &A,
38 void *elt, int verbose_level);
39static int matrix_group_element_is_one(action &A,
40 void *elt, int verbose_level);
41static void matrix_group_element_unpack(action &A,
42 void *elt, void *Elt, int verbose_level);
43static void matrix_group_element_pack(action &A,
44 void *Elt, void *elt, int verbose_level);
45static void matrix_group_element_retrieve(action &A,
46 int hdl, void *elt, int verbose_level);
47static int matrix_group_element_store(action &A,
48 void *elt, int verbose_level);
49static void matrix_group_element_mult(action &A,
50 void *a, void *b, void *ab, int verbose_level);
51static void matrix_group_element_invert(action &A,
52 void *a, void *av, int verbose_level);
53static void matrix_group_element_transpose(action &A,
54 void *a, void *at, int verbose_level);
55static void matrix_group_element_move(action &A,
56 void *a, void *b, int verbose_level);
57static void matrix_group_element_dispose(action &A,
58 int hdl, int verbose_level);
59static void matrix_group_element_print(action &A,
60 void *elt, std::ostream &ost);
61static void matrix_group_element_code_for_make_element(
62 action &A, void *elt, int *data);
63static void matrix_group_element_print_for_make_element(
64 action &A, void *elt, std::ostream &ost);
65static void matrix_group_element_print_for_make_element_no_commas(
66 action &A, void *elt, std::ostream &ost);
67static void matrix_group_element_print_quick(action &A,
68 void *elt, std::ostream &ost);
69static void matrix_group_element_print_latex(action &A,
70 void *elt, std::ostream &ost);
71static void matrix_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 matrix_group_element_print_as_permutation(
77 action &A, void *elt, std::ostream &ost);
78static void matrix_group_element_print_verbose(action &A,
79 void *elt, std::ostream &ost);
80static void matrix_group_print_point(action &A,
81 long int a, std::ostream &ost);
82static void matrix_group_unrank_point(action &A, long int rk, int *v);
83static long int matrix_group_rank_point(action &A, int *v);
84
85
87{
88 label.assign("function_pointers_matrix_group");
89 ptr_element_image_of = matrix_group_element_image_of;
90 ptr_element_image_of_low_level = matrix_group_element_image_of_low_level;
91 ptr_element_linear_entry_ij = matrix_group_element_linear_entry_ij;
92 ptr_element_linear_entry_frobenius = matrix_group_element_linear_entry_frobenius;
93 ptr_element_one = matrix_group_element_one;
94 ptr_element_is_one = matrix_group_element_is_one;
95 ptr_element_unpack = matrix_group_element_unpack;
96 ptr_element_pack = matrix_group_element_pack;
97 ptr_element_retrieve = matrix_group_element_retrieve;
98 ptr_element_store = matrix_group_element_store;
99 ptr_element_mult = matrix_group_element_mult;
100 ptr_element_invert = matrix_group_element_invert;
101 ptr_element_transpose = matrix_group_element_transpose;
102 ptr_element_move = matrix_group_element_move;
103 ptr_element_dispose = matrix_group_element_dispose;
104 ptr_element_print = matrix_group_element_print;
105 ptr_element_print_quick = matrix_group_element_print_quick;
106 ptr_element_print_latex = matrix_group_element_print_latex;
108 matrix_group_element_print_latex_with_print_point_function;
109 ptr_element_print_verbose = matrix_group_element_print_verbose;
111 matrix_group_element_code_for_make_element;
113 matrix_group_element_print_for_make_element;
115 matrix_group_element_print_for_make_element_no_commas;
116 ptr_print_point = matrix_group_print_point;
117 ptr_unrank_point = matrix_group_unrank_point;
118 ptr_rank_point = matrix_group_rank_point;
119}
120
121
122
123static long int matrix_group_element_image_of(action &A,
124 long int a, void *elt, int verbose_level)
125{
126 int f_v = (verbose_level >= 1);
128 int *Elt = (int *) elt;
129 long int b;
130
131 if (f_v) {
132 cout << "matrix_group_element_image_of "
133 "computing image of " << a << endl;
134 }
135 b = G.image_of_element(Elt, a, verbose_level - 1);
136
137 if (f_v) {
138 cout << "matrix_group_element_image_of "
139 "image of " << a << " is " << b << endl;
140 }
141 return b;
142}
143
144static void matrix_group_element_image_of_low_level(action &A,
145 int *input, int *output, void *elt, int verbose_level)
146{
147 int f_v = (verbose_level >= 1);
148 groups::matrix_group &G = *A.G.matrix_grp;
149 int *Elt = (int *) elt;
150
151 if (f_v) {
152 cout << "matrix_group_element_image_of_low_level "
153 "computing image of ";
154 Int_vec_print(cout, input, A.low_level_point_size);
155 cout << " in action " << A.label << endl;
156 }
157 G.action_from_the_right_all_types(input,
158 Elt, output, verbose_level - 1);
159
160
161 if (f_v) {
162 cout << "matrix_group_element_image_of_low_level ";
163 Int_vec_print(cout, input, A.low_level_point_size);
164 cout << " -> ";
165 Int_vec_print(cout, output, A.low_level_point_size);
166 cout << endl;
167 }
168}
169
170static int matrix_group_element_linear_entry_ij(action &A,
171 void *elt, int i, int j, int verbose_level)
172{
173 int f_v = (verbose_level >= 1);
174 groups::matrix_group &G = *A.G.matrix_grp;
175 int *Elt = (int *) elt;
176 int w;
177
178 if (f_v) {
179 cout << "matrix_group_element_linear_entry_ij "
180 "i=" << i << " j=" << j << endl;
181 }
182 w = G.GL_element_entry_ij(Elt, i, j);
183 return w;
184}
185
186static int matrix_group_element_linear_entry_frobenius(action &A,
187 void *elt, int verbose_level)
188{
189 int f_v = (verbose_level >= 1);
190 groups::matrix_group &G = *A.G.matrix_grp;
191 int *Elt = (int *) elt;
192 int w;
193
194 if (f_v) {
195 cout << "matrix_group_element_linear_entry_frobenius" << endl;
196 }
197 w = G.GL_element_entry_frobenius(Elt);
198 return w;
199}
200
201static void matrix_group_element_one(action &A, void *elt, int verbose_level)
202{
203 int f_v = (verbose_level >= 1);
204 groups::matrix_group &G = *A.G.matrix_grp;
205 int *Elt = (int *) elt;
206
207 if (f_v) {
208 cout << "matrix_group_element_one calling GL_one" << endl;
209 }
210 G.GL_one(Elt);
211}
212
213static int matrix_group_element_is_one(action &A, void *elt, int verbose_level)
214{
215 int f_v = (verbose_level >= 1);
216 groups::matrix_group &G = *A.G.matrix_grp;
217 int *Elt = (int *) elt;
218 int f_is_one, i, j;
219
220 if (f_v) {
221 cout << "matrix_group_element_is_one" << endl;
222 }
223 if (G.f_kernel_is_diagonal_matrices) {
224 f_is_one = G.GL_is_one(Elt);
225 }
226 else if (!G.f_projective) {
227 f_is_one = G.GL_is_one(Elt);
228 }
229 else {
230 cout << "matrix_group_element_is_one: warning: "
231 "using slow identity element test" << endl;
232 f_is_one = TRUE;
233 for (i = 0; i < A.degree; i++) {
234 j = A.element_image_of(i, elt, FALSE);
235 if (j != i) {
236 f_is_one = FALSE;
237 break;
238 }
239 }
240 }
241 if (f_v) {
242 if (f_is_one) {
243 cout << "matrix_group_element_is_one "
244 "returns YES" << endl;
245 }
246 else {
247 cout << "matrix_group_element_is_one "
248 "returns NO" << endl;
249 }
250 }
251 return f_is_one;
252}
253
254static void matrix_group_element_unpack(action &A,
255 void *elt, void *Elt, int verbose_level)
256{
257 int f_v = (verbose_level >= 1);
258 groups::matrix_group &G = *A.G.matrix_grp;
259 int *Elt1 = (int *) Elt;
260 uchar *elt1 = (uchar *)elt;
261
262 if (f_v) {
263 cout << "matrix_group_element_unpack" << endl;
264 }
265 G.GL_unpack(elt1, Elt1, verbose_level - 1);
266}
267
268static void matrix_group_element_pack(action &A,
269 void *Elt, void *elt, int verbose_level)
270{
271 int f_v = (verbose_level >= 1);
272 groups::matrix_group &G = *A.G.matrix_grp;
273 int *Elt1 = (int *) Elt;
274 uchar *elt1 = (uchar *)elt;
275
276 if (f_v) {
277 cout << "matrix_group_element_pack" << endl;
278 }
279 G.GL_pack(Elt1, elt1);
280}
281
282static void matrix_group_element_retrieve(action &A,
283 int hdl, void *elt, int verbose_level)
284{
285 int f_v = (verbose_level >= 1);
286 groups::matrix_group &G = *A.G.matrix_grp;
287 int *Elt = (int *) elt;
288 uchar *p_elt;
289
290 if (f_v) {
291 cout << "matrix_group_element_retrieve "
292 "hdl = " << hdl << endl;
293 }
294 p_elt = G.Elts->s_i(hdl);
295 //if (f_v) {
296 // element_print_packed(G, p_elt, cout);
297 // }
298 G.GL_unpack(p_elt, Elt, verbose_level);
299 if (f_v) {
300 G.GL_print_easy(Elt, cout);
301 }
302}
303
304static int matrix_group_element_store(action &A,
305 void *elt, int verbose_level)
306{
307 int f_v = (verbose_level >= 1);
308 groups::matrix_group &G = *A.G.matrix_grp;
309 int *Elt = (int *) elt;
310 int hdl;
311
312 if (f_v) {
313 cout << "matrix_group_element_store" << endl;
314 }
315 G.GL_pack(Elt, G.elt1);
316 hdl = G.Elts->store(G.elt1);
317 if (f_v) {
318 cout << "matrix_group_element_store "
319 "hdl = " << hdl << endl;
320 }
321 return hdl;
322}
323
324static void matrix_group_element_mult(action &A,
325 void *a, void *b, void *ab, int verbose_level)
326{
327 int f_v = (verbose_level >= 1);
328 int f_vv = (verbose_level >= 2);
329 groups::matrix_group &G = *A.G.matrix_grp;
330 int *AA = (int *) a;
331 int *BB = (int *) b;
332 int *AB = (int *) ab;
333
334 if (f_v) {
335 cout << "matrix_group_element_mult" << endl;
336 }
337 if (f_vv) {
338 cout << "A=" << endl;
339 G.GL_print_easy(AA, cout);
340 cout << "B=" << endl;
341 G.GL_print_easy(BB, cout);
342 }
343 G.GL_mult(AA, BB, AB, verbose_level - 2);
344 if (f_v) {
345 cout << "matrix_group_element_mult done" << endl;
346 }
347 if (f_vv) {
348 cout << "AB=" << endl;
349 G.GL_print_easy(AB, cout);
350 }
351}
352
353static void matrix_group_element_invert(action &A,
354 void *a, void *av, int verbose_level)
355{
356 int f_v = (verbose_level >= 1);
357 int f_vv = (verbose_level >= 2);
358 groups::matrix_group &G = *A.G.matrix_grp;
359 int *AA = (int *) a;
360 int *AAv = (int *) av;
361
362 if (f_v) {
363 cout << "matrix_group_element_invert" << endl;
364 }
365 if (f_vv) {
366 cout << "A=" << endl;
367 G.GL_print_easy(AA, cout);
368 }
369 G.GL_invert(AA, AAv);
370 if (f_v) {
371 cout << "matrix_group_element_invert done" << endl;
372 }
373 if (f_vv) {
374 cout << "Av=" << endl;
375 G.GL_print_easy(AAv, cout);
376 }
377}
378
379static void matrix_group_element_transpose(action &A,
380 void *a, void *at, int verbose_level)
381{
382 int f_v = (verbose_level >= 1);
383 int f_vv = (verbose_level >= 2);
384 groups::matrix_group &G = *A.G.matrix_grp;
385 int *AA = (int *) a;
386 int *Atv = (int *) at;
387
388 if (f_v) {
389 cout << "matrix_group_element_transpose" << endl;
390 }
391 if (f_vv) {
392 cout << "A=" << endl;
393 G.GL_print_easy(AA, cout);
394 }
395 G.GL_transpose(AA, Atv, verbose_level);
396 if (f_v) {
397 cout << "matrix_group_element_transpose done" << endl;
398 }
399 if (f_vv) {
400 cout << "At=" << endl;
401 G.GL_print_easy(Atv, cout);
402 }
403}
404
405static void matrix_group_element_move(action &A,
406 void *a, void *b, int verbose_level)
407{
408 int f_v = (verbose_level >= 1);
409 groups::matrix_group &G = *A.G.matrix_grp;
410 int *AA = (int *) a;
411 int *BB = (int *) b;
412
413 if (f_v) {
414 cout << "matrix_group_element_move" << endl;
415 }
416 G.GL_copy(AA, BB);
417}
418
419static void matrix_group_element_dispose(action &A,
420 int hdl, int verbose_level)
421{
422 int f_v = (verbose_level >= 1);
423 groups::matrix_group &G = *A.G.matrix_grp;
424
425 if (f_v) {
426 cout << "matrix_group_element_dispose "
427 "hdl = " << hdl << endl;
428 }
429 G.Elts->dispose(hdl);
430}
431
432static void matrix_group_element_print(action &A,
433 void *elt, ostream &ost)
434{
435 groups::matrix_group &G = *A.G.matrix_grp;
436 int *Elt = (int *) elt;
437
438
439 G.GL_print_easy(Elt, ost);
440 ost << endl;
441 if (G.GFq->q > 2) {
442 ost << "=" << endl;
443 G.GL_print_easy_normalized(Elt, ost);
444 ost << endl;
445 }
446
447#if 0
448 int *fp, n;
449
450 fp = NEW_int(A.degree);
451 n = A.find_fixed_points(elt, fp, 0);
452 cout << "with " << n << " fixed points ";
453 A.element_print_base_images(Elt, ost);
454 cout << endl;
455 FREE_int(fp);
456#endif
457
458#if 0
459 if (A.degree < 0 /*1000*/) {
460 //cout << "matrix_group_element_print:
461 //printing element as permutation" << endl;
462 matrix_group_element_print_as_permutation(A, elt, ost);
463 ost << endl;
464 }
465#endif
466}
467
468static void matrix_group_element_code_for_make_element(action &A,
469 void *elt, int *data)
470{
471 groups::matrix_group &G = *A.G.matrix_grp;
472 int *Elt = (int *) elt;
473
474 //cout << "matrix_group_element_code_for_make_element
475 //calling GL_print_for_make_element" << endl;
476 G.GL_code_for_make_element(Elt, data);
477 //cout << "matrix_group_element_code_for_make_element
478 //after GL_print_for_make_element" << endl;
479}
480
481static void matrix_group_element_print_for_make_element(action &A,
482 void *elt, ostream &ost)
483{
484 groups::matrix_group &G = *A.G.matrix_grp;
485 int *Elt = (int *) elt;
486
487 //cout << "matrix_group_element_print_for_make_element
488 //calling GL_print_for_make_element" << endl;
489 G.GL_print_for_make_element(Elt, ost);
490 //cout << "matrix_group_element_print_for_make_element
491 //after GL_print_for_make_element" << endl;
492}
493
494static void matrix_group_element_print_for_make_element_no_commas(
495 action &A, void *elt, ostream &ost)
496{
497 groups::matrix_group &G = *A.G.matrix_grp;
498 int *Elt = (int *) elt;
499
500 //cout << "matrix_group_element_print_for_make_element_
501 //no_commas calling GL_print_for_make_element_no_commas" << endl;
502 G.GL_print_for_make_element_no_commas(Elt, ost);
503 //cout << "matrix_group_element_print_for_make_element_
504 //no_commas after GL_print_for_make_element_no_commas" << endl;
505}
506
507static void matrix_group_element_print_quick(action &A,
508 void *elt, ostream &ost)
509{
510 groups::matrix_group &G = *A.G.matrix_grp;
511 int *Elt = (int *) elt;
512 //int *fp; //, n;
513
514
515 G.GL_print_easy(Elt, ost);
516
517
518#if 0
519 ost << endl;
520 ost << "=" << endl;
521 G.GL_print_easy_normalized(Elt, ost);
522 ost << endl;
523#endif
524
525#if 0
526 A.element_print_base_images_verbose(Elt, ost, 0);
527 ost << endl;
528#endif
529 //fp = NEW_int(A.degree);
530 //n = A.find_fixed_points(elt, fp, 0);
531 //cout << "with " << n << " fixed points" << endl;
532 //FREE_int(fp);
533 if (FALSE /*A.degree < 0*/ /*1000*/) {
534 //cout << "matrix_group_element_print:
535 //printing element as permutation" << endl;
536 matrix_group_element_print_as_permutation(A, elt, ost);
537 ost << endl;
538 }
539}
540
541static void matrix_group_element_print_latex(action &A,
542 void *elt, ostream &ost)
543{
544 groups::matrix_group &G = *A.G.matrix_grp;
545 int *Elt = (int *) elt;
546
547 G.GL_print_latex(Elt, ost);
548 ost << "=" << endl;
549 //G.GL_print_easy_normalized(Elt, ost);
550 G.GL_print_easy_latex_with_option_numerical(Elt, TRUE, ost);
551}
552
553static void matrix_group_element_print_latex_with_print_point_function(
554 action &A,
555 void *elt, std::ostream &ost,
556 void (*point_label)(std::stringstream &sstr, long int pt, void *data),
557 void *point_label_data)
558{
559 groups::matrix_group &G = *A.G.matrix_grp;
560 int *Elt = (int *) elt;
561
562 G.GL_print_latex(Elt, ost);
563 //G.GL_print_easy_latex(Elt, ost);
564}
565
566static void matrix_group_element_print_as_permutation(action &A,
567 void *elt, ostream &ost)
568{
569 //matrix_group &G = *A.G.matrix_grp;
570 int f_v = FALSE;
571 int *Elt = (int *) elt;
572 int i, j;
574
575 if (f_v) {
576 cout << "matrix_group_element_print_as_permutation "
577 "degree = " << A.degree << endl;
578 }
579 int *p = NEW_int(A.degree);
580 for (i = 0; i < A.degree; i++) {
581 //cout << "matrix_group_element_print_as_permutation
582 //computing image of i=" << i << endl;
583 //if (i == 3)
584 //f_v = TRUE;
585 //else
586 //f_v = FALSE;
587 j = A.element_image_of(i, Elt, 0 /* verbose_level */);
588 p[i] = j;
589 }
590 Combi.perm_print(ost, p, A.degree);
591 FREE_int(p);
592}
593
594static void matrix_group_element_print_verbose(action &A,
595 void *elt, ostream &ost)
596{
597 groups::matrix_group &G = *A.G.matrix_grp;
598 int *Elt = (int *) elt;
600
601 G.GL_print_easy(Elt, ost);
602 ost << "\n";
603 int i, j;
604
605 if (A.degree < 100) {
606 int *p = NEW_int(A.degree);
607 for (i = 0; i < A.degree; i++) {
608 j = A.element_image_of(i, Elt, FALSE);
609 p[i] = j;
610 }
611 Combi.perm_print(ost, p, A.degree);
612 FREE_int(p);
613 }
614 else {
615#if 0
616 cout << "i : image" << endl;
617 for (i = 0; i < MINIMUM(40, G.degree); i++) {
618 j = A.element_image_of(i, Elt, FALSE);
619 cout << i << " : " << j << endl;
620 }
621#endif
622 }
623
624}
625
626static void matrix_group_print_point(action &A, long int a, ostream &ost)
627{
628 groups::matrix_group *G = A.G.matrix_grp;
630
631 cout << "matrix_group_print_point" << endl;
632 if (G->f_projective) {
633 G->GFq->PG_element_unrank_modified_lint(G->v1, 1, G->n, a);
634 }
635 else if (G->f_affine) {
636 Gg.AG_element_unrank(G->GFq->q, G->v1, 1, G->n, a);
637 }
638 else if (G->f_general_linear) {
639 Gg.AG_element_unrank(G->GFq->q, G->v1, 1, G->n, a);
640 }
641 else {
642 cout << "matrix_group_print_point unknown group type" << endl;
643 exit(1);
644 }
645 Int_vec_print(ost, G->v1, G->n);
646}
647
648static void matrix_group_unrank_point(action &A, long int rk, int *v)
649{
650 groups::matrix_group *G = A.G.matrix_grp;
652
653 if (G->f_projective) {
654 G->GFq->PG_element_unrank_modified(v, 1 /* stride */, G->n, rk);
655 }
656 else if (G->f_affine) {
657 Gg.AG_element_unrank(G->GFq->q, v, 1, G->n, rk);
658 }
659 else if (G->f_general_linear) {
660 Gg.AG_element_unrank(G->GFq->q, v, 1, G->n, rk);
661 }
662 else {
663 cout << "matrix_group_unrank_point unknown group type" << endl;
664 exit(1);
665 }
666}
667
668static long int matrix_group_rank_point(action &A, int *v)
669{
670 groups::matrix_group *G = A.G.matrix_grp;
671 long int rk;
673
674 if (G->f_projective) {
675 G->GFq->PG_element_rank_modified_lint(v, 1 /* stride */, G->n, rk);
676 }
677 else if (G->f_affine) {
678 rk = Gg.AG_element_rank(G->GFq->q, v, 1, G->n);
679 }
680 else if (G->f_general_linear) {
681 rk = Gg.AG_element_rank(G->GFq->q, v, 1, G->n);
682 }
683 else {
684 cout << "matrix_group_unrank_point unknown group type" << endl;
685 exit(1);
686 }
687 return rk;
688}
689
690
691}}}
various functions related to geometries
Definition: geometry.h:721
void AG_element_unrank(int q, int *v, int stride, int len, long int a)
long int AG_element_rank(int q, int *v, int stride, int len)
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_unrank_point)(action &A, long int rk, int *v)
Definition: actions.h:1116
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
a matrix group over a finite field in projective, vector space or affine action
Definition: groups.h:318
long int image_of_element(int *Elt, long int a, int verbose_level)
#define MINIMUM(x, y)
Definition: foundations.h:216
#define FREE_int(p)
Definition: foundations.h:640
unsigned char uchar
Definition: foundations.h:204
#define NEW_int(n)
Definition: foundations.h:625
#define TRUE
Definition: foundations.h:231
#define FALSE
Definition: foundations.h:234
#define Int_vec_print(A, B, C)
Definition: foundations.h:685
the orbiter library for the classification of combinatorial objects