Orbiter 2022
Combinatorial Objects
interface_induced_action.cpp
Go to the documentation of this file.
1// interface_induced_action.cpp
2//
3// Anton Betten
4//
5// started: November 13, 2007
6// last change: November 9, 2010
7
8
9
10
12#include "group_actions.h"
13
14using namespace std;
15
16
17namespace orbiter {
18namespace layer3_group_actions {
19namespace actions {
20
21
22
23// #############################################################################
24// interface functions: induced action
25// #############################################################################
26
27static long int induced_action_element_image_of(action &A, long int a,
28 void *elt, int verbose_level);
29static void induced_action_element_image_of_low_level(action &A,
30 int *input, int *output, void *elt, int verbose_level);
31static void induced_action_element_one(action &A,
32 void *elt, int verbose_level);
33static int induced_action_element_is_one(action &A,
34 void *elt, int verbose_level);
35static void induced_action_element_unpack(action &A,
36 void *elt, void *Elt, int verbose_level);
37static void induced_action_element_pack(action &A,
38 void *Elt, void *elt, int verbose_level);
39static void induced_action_element_retrieve(action &A,
40 int hdl, void *elt, int verbose_level);
41static int induced_action_element_store(action &A,
42 void *elt, int verbose_level);
43static void induced_action_element_mult(action &A,
44 void *a, void *b, void *ab, int verbose_level);
45static void induced_action_element_invert(action &A,
46 void *a, void *av, int verbose_level);
47static void induced_action_element_transpose(action &A,
48 void *a, void *at, int verbose_level);
49static void induced_action_element_move(action &A,
50 void *a, void *b, int verbose_level);
51static void induced_action_element_dispose(action &A,
52 int hdl, int verbose_level);
53static void induced_action_element_print(action &A,
54 void *elt, std::ostream &ost);
55static void induced_action_element_print_quick(action &A,
56 void *elt, std::ostream &ost);
57static void induced_action_element_print_latex(action &A,
58 void *elt, std::ostream &ost);
59static void induced_action_element_print_latex_with_print_point_function(
60 action &A,
61 void *elt, std::ostream &ost,
62 void (*point_label)(std::stringstream &sstr, long int pt, void *data),
63 void *point_label_data);
64static void induced_action_element_print_verbose(action &A,
65 void *elt, std::ostream &ost);
66static void induced_action_element_code_for_make_element(action &A,
67 void *elt, int *data);
68static void induced_action_element_print_for_make_element(action &A,
69 void *elt, std::ostream &ost);
70static void induced_action_element_print_for_make_element_no_commas(
71 action &A, void *elt, std::ostream &ost);
72static void induced_action_print_point(action &A, long int a, std::ostream &ost);
73static void induced_action_unrank_point(action &A, long int rk, int *v);
74static long int induced_action_rank_point(action &A, int *v);
75
76
78{
79 label.assign("function_pointers_induced_action");
80 //ptr_get_transversal_rep = induced_action_get_transversal_rep;
81 ptr_element_image_of = induced_action_element_image_of;
82 ptr_element_image_of_low_level = induced_action_element_image_of_low_level;
85 ptr_element_one = induced_action_element_one;
86 ptr_element_is_one = induced_action_element_is_one;
87 ptr_element_unpack = induced_action_element_unpack;
88 ptr_element_pack = induced_action_element_pack;
89 ptr_element_retrieve = induced_action_element_retrieve;
90 ptr_element_store = induced_action_element_store;
91 ptr_element_mult = induced_action_element_mult;
92 ptr_element_invert = induced_action_element_invert;
93 ptr_element_transpose = induced_action_element_transpose;
94 ptr_element_move = induced_action_element_move;
95 ptr_element_dispose = induced_action_element_dispose;
96 ptr_element_print = induced_action_element_print;
97 ptr_element_print_quick = induced_action_element_print_quick;
98 ptr_element_print_latex = induced_action_element_print_latex;
100 induced_action_element_print_latex_with_print_point_function;
101 ptr_element_print_verbose = induced_action_element_print_verbose;
103 induced_action_element_code_for_make_element;
105 induced_action_element_print_for_make_element;
107 induced_action_element_print_for_make_element_no_commas;
108 ptr_print_point = induced_action_print_point;
109 ptr_unrank_point = induced_action_unrank_point;
110 ptr_rank_point = induced_action_rank_point;
111}
112
113
114static long int induced_action_element_image_of(action &A,
115 long int a, void *elt, int verbose_level)
116{
117 int *Elt = (int *) elt;
118 long int b = 0;
119 int f_v = (verbose_level >= 1);
120 action_global AG;
121
122 if (f_v) {
123 cout << "induced_action_element_image_of "
124 "computing image of " << a
125 << " in action " << A.label << endl;
126 }
128 if (f_v) {
129 cout << "induced_action_element_image_of "
130 "action_by_right_multiplication_t" << endl;
131 }
132 induced_actions::action_by_right_multiplication *ABRM = A.G.ABRM;
133 action *sub;
134
135 sub = A.subaction;
136 if (sub == NULL) {
137 cout << "induced_action_element_image_of "
138 "no subaction" << endl;
139 exit(1);
140 }
141 b = ABRM->compute_image(sub, Elt, a, verbose_level - 1);
142 }
143 else if (A.type_G == action_by_restriction_t) {
144 if (f_v) {
145 cout << "induced_action_element_image_of "
146 "action_by_restriction_t" << endl;
147 }
148 induced_actions::action_by_restriction *ABR = A.G.ABR;
149 action *sub;
150
151 sub = A.subaction;
152 if (sub == NULL) {
153 cout << "induced_action_element_image_of "
154 "no subaction" << endl;
155 exit(1);
156 }
157 if (f_v) {
158 cout << "induced_action_element_image_of "
159 "before ABR->compute_image a=" << a << endl;
160 cout << "verbose_level = " << verbose_level << endl;
161 }
162 b = ABR->compute_image(sub, Elt, a, verbose_level - 1);
163 }
164 else if (A.type_G == action_by_conjugation_t) {
165 if (f_v) {
166 cout << "induced_action_element_image_of "
167 "action_by_conjugation_t" << endl;
168 }
169 induced_actions::action_by_conjugation *ABC = A.G.ABC;
170 action *sub;
171
172 sub = A.subaction;
173 if (sub == NULL) {
174 cout << "induced_action_element_image_of "
175 "no subaction" << endl;
176 exit(1);
177 }
178 b = ABC->compute_image(sub, Elt, a, verbose_level - 1);
179 }
180 else if (A.type_G == action_by_representation_t) {
181 if (f_v) {
182 cout << "induced_action_element_image_of "
183 "action_by_representation_t" << endl;
184 }
185 induced_actions::action_by_representation *Rep = A.G.Rep;
186 action *sub;
187
188 sub = A.subaction;
189 if (sub == NULL) {
190 cout << "induced_action_element_image_of "
191 "no subaction" << endl;
192 exit(1);
193 }
194 b = Rep->compute_image_int(*sub, Elt, a, verbose_level - 1);
195 }
196 else if (A.type_G == action_on_determinant_t) {
197 if (f_v) {
198 cout << "induced_action_element_image_of "
199 "action_on_determinant_t" << endl;
200 }
201 induced_actions::action_on_determinant *AD = A.G.AD;
202 action *sub;
203
204 sub = A.subaction;
205 if (sub == NULL) {
206 cout << "induced_action_element_image_of "
207 "no subaction" << endl;
208 exit(1);
209 }
210 b = AD->compute_image(sub, Elt, a, verbose_level - 1);
211 }
212 else if (A.type_G == action_on_galois_group_t) {
213 if (f_v) {
214 cout << "induced_action_element_image_of "
215 "action_on_galois_group_t" << endl;
216 }
217 induced_actions::action_on_galois_group *AG = A.G.on_Galois_group;
218
219 b = AG->compute_image(Elt, a, verbose_level - 1);
220 }
221 else if (A.type_G == action_on_sign_t) {
222 if (f_v) {
223 cout << "induced_action_element_image_of "
224 "action_on_sign_t" << endl;
225 }
226 induced_actions::action_on_sign *OnSign = A.G.OnSign;
227
228 b = OnSign->compute_image(Elt, a, verbose_level - 1);
229 }
230 else if (A.type_G == action_on_grassmannian_t) {
231 if (f_v) {
232 cout << "induced_action_element_image_of "
233 "action_on_grassmannian_t" << endl;
234 }
235 induced_actions::action_on_grassmannian *AG = A.G.AG;
236
237 action *sub;
238
239 sub = A.subaction;
240 if (sub == NULL) {
241 cout << "induced_action_element_image_of "
242 "no subaction" << endl;
243 exit(1);
244 }
245 b = AG->compute_image_int(sub, Elt, a, verbose_level - 1);
246 }
247 else if (A.type_G == action_on_spread_set_t) {
248 if (f_v) {
249 cout << "induced_action_element_image_of "
250 "action_on_spread_set_t" << endl;
251 }
252 induced_actions::action_on_spread_set *AS = A.G.AS;
253
254 b = AS->compute_image_int(Elt, a, verbose_level - 1);
255 }
256 else if (A.type_G == action_on_orthogonal_t) {
257 if (f_v) {
258 cout << "induced_action_element_image_of "
259 "action_on_orthogonal_t" << endl;
260 }
261 induced_actions::action_on_orthogonal *AO = A.G.AO;
262
263#if 0
264 action *sub;
265
266 sub = A.subaction;
267 if (sub == NULL) {
268 cout << "induced_action_element_image_of "
269 "no subaction" << endl;
270 exit(1);
271 }
272#endif
273 b = AO->compute_image_int(Elt, a, verbose_level - 1);
274 }
275 else if (A.type_G == action_on_wedge_product_t) {
276 if (f_v) {
277 cout << "induced_action_element_image_of "
278 "action_on_wedge_product_t" << endl;
279 }
280 induced_actions::action_on_wedge_product *AW = A.G.AW;
281
282 action *sub;
283
284 sub = A.subaction;
285 if (sub == NULL) {
286 cout << "induced_action_element_image_of "
287 "no subaction" << endl;
288 exit(1);
289 }
290 b = AW->compute_image_int(*sub, Elt, a, verbose_level - 1);
291 }
293 if (f_v) {
294 cout << "induced_action_element_image_of "
295 "action_on_homogeneous_polynomials_t" << endl;
296 }
297 induced_actions::action_on_homogeneous_polynomials *OnHP = A.G.OnHP;
298
299 b = OnHP->compute_image_int(Elt, a, verbose_level - 1);
300 }
302 if (f_v) {
303 cout << "induced_action_element_image_of "
304 "action_by_subfield_structure_t" << endl;
305 }
306 induced_actions::action_by_subfield_structure *SubfieldStructure =
308
309 action *sub;
310
311 sub = A.subaction;
312 if (sub == NULL) {
313 cout << "induced_action_element_image_of "
314 "no subaction" << endl;
315 exit(1);
316 }
317 b = SubfieldStructure->compute_image_int(
318 *sub, Elt, a, verbose_level - 1);
319 }
320 else if (A.type_G == action_on_cosets_t) {
321 if (f_v) {
322 cout << "induced_action_element_image_of "
323 "action_on_cosets_t" << endl;
324 }
325 induced_actions::action_on_cosets *AC = A.G.OnCosets;
326
327 //cout << "interface.cpp: action_on_cosets "
328 //"computing image of " << a << endl;
329 b = AC->compute_image(Elt, a, verbose_level - 1);
330 //cout << "interface.cpp: action_on_cosets image of "
331 // << a << " is " << b << endl;
332 }
333 else if (A.type_G == action_on_factor_space_t) {
334 if (f_v) {
335 cout << "induced_action_element_image_of "
336 "action_on_factor_space_t" << endl;
337 }
338 induced_actions::action_on_factor_space *AF = A.G.AF;
339
340 action *sub;
341
342 sub = A.subaction;
343 if (sub == NULL) {
344 cout << "induced_action_element_image_of "
345 "no subaction" << endl;
346 exit(1);
347 }
348 b = AF->compute_image(sub, Elt, a, verbose_level - 1);
349 }
350 else if (A.type_G == action_on_sets_t) {
351 if (f_v) {
352 cout << "induced_action_element_image_of "
353 "action_on_sets_t" << endl;
354 }
355 induced_actions::action_on_sets *AOS = A.G.on_sets;
356 action *sub;
357
358 sub = A.subaction;
359 if (sub == NULL) {
360 cout << "induced_action_element_image_of "
361 "no subaction" << endl;
362 exit(1);
363 }
364 b = AOS->compute_image(sub, Elt, a, verbose_level - 1);
365 }
366 else if (A.type_G == action_on_set_partitions_t) {
367 if (f_v) {
368 cout << "induced_action_element_image_of "
369 "action_on_set_partitions_t" << endl;
370 }
371 induced_actions::action_on_set_partitions *OSP = A.G.OnSetPartitions;
372 b = OSP->compute_image(Elt, a, verbose_level - 1);
373 }
374 else if (A.type_G == action_on_subgroups_t) {
375 if (f_v) {
376 cout << "induced_action_element_image_of "
377 "action_on_subgroups_t" << endl;
378 }
379 induced_actions::action_on_subgroups *AOS = A.G.on_subgroups;
380
381 b = AOS->compute_image(Elt, a, verbose_level - 1);
382 }
383 else if (A.type_G == action_on_k_subsets_t) {
384 if (f_v) {
385 cout << "induced_action_element_image_of "
386 "action_on_k_subsets_t" << endl;
387 }
388 induced_actions::action_on_k_subsets *On_k_subsets = A.G.on_k_subsets;
389 action *sub;
390
391 sub = A.subaction;
392 if (sub == NULL) {
393 cout << "induced_action_element_image_of "
394 "no subaction" << endl;
395 exit(1);
396 }
397 b = On_k_subsets->compute_image(Elt, a, verbose_level - 1);
398 }
399 else if (A.type_G == action_on_orbits_t) {
400 if (f_v) {
401 cout << "induced_action_element_image_of "
402 "action_on_orbits_t" << endl;
403 }
404 induced_actions::action_on_orbits *On_orbits = A.G.OnOrbits;
405
406 b = On_orbits->compute_image(Elt, a, verbose_level - 1);
407 }
408 else if (A.type_G == action_on_flags_t) {
409 if (f_v) {
410 cout << "induced_action_element_image_of "
411 "action_on_flags_t" << endl;
412 }
413 induced_actions::action_on_flags *On_flags = A.G.OnFlags;
414
415 b = On_flags->compute_image(Elt, a, verbose_level - 1);
416 }
417 else if (A.type_G == action_on_bricks_t) {
418 if (f_v) {
419 cout << "induced_action_element_image_of "
420 "action_on_bricks_t" << endl;
421 }
422 induced_actions::action_on_bricks *On_bricks = A.G.OnBricks;
423 action *sub;
424
425 sub = A.subaction;
426 if (sub == NULL) {
427 cout << "induced_action_element_image_of "
428 "no subaction" << endl;
429 exit(1);
430 }
431 b = On_bricks->compute_image(Elt, a, verbose_level - 1);
432 }
433 else if (A.type_G == action_on_andre_t) {
434 if (f_v) {
435 cout << "induced_action_element_image_of "
436 "action_on_andre_t" << endl;
437 }
438 induced_actions::action_on_andre *On_andre = A.G.OnAndre;
439
440#if 0
441 action *sub;
442
443 sub = A.subaction;
444 if (sub == NULL) {
445 cout << "induced_action_element_image_of "
446 "no subaction" << endl;
447 exit(1);
448 }
449#endif
450
451 b = On_andre->compute_image(Elt, a, verbose_level - 1);
452 }
453 else if (A.type_G == action_on_pairs_t) {
454 if (f_v) {
455 cout << "induced_action_element_image_of "
456 "action_on_pairs_t" << endl;
457 }
458 action *sub;
460 long int i, j, u, v;
461
462 sub = A.subaction;
463 if (sub == NULL) {
464 cout << "induced_action_element_image_of "
465 "no subaction, type = action_on_pairs_t" << endl;
466 exit(1);
467 }
468 Combi.k2ij_lint(a, i, j, sub->degree);
469 u = sub->element_image_of(i, elt, verbose_level - 1);
470 v = sub->element_image_of(j, elt, verbose_level - 1);
471 b = Combi.ij2k_lint(u, v, sub->degree);
472 }
473 else if (A.type_G == action_on_ordered_pairs_t) {
474 if (f_v) {
475 cout << "induced_action_element_image_of "
476 "action_on_ordered_pairs_t" << endl;
477 }
478 action *sub;
480 long int a2, b2, swap, swap2, i, j, tmp, u, v, u2, v2;
481
482 sub = A.subaction;
483 if (sub == NULL) {
484 cout << "induced_action_element_image_of "
485 "no subaction, type = action_on_ordered_pairs_t" << endl;
486 exit(1);
487 }
488 swap = a % 2;
489 a2 = a / 2;
490 Combi.k2ij_lint(a2, i, j, sub->degree);
491 if (swap) {
492 tmp = i;
493 i = j;
494 j = tmp;
495 }
496 u = sub->element_image_of(i, elt, verbose_level - 1);
497 v = sub->element_image_of(j, elt, verbose_level - 1);
498 if (u > v) {
499 v2 = u;
500 u2 = v;
501 swap2 = 1;
502 }
503 else {
504 u2 = u;
505 v2 = v;
506 swap2 = 0;
507 }
508 b2 = Combi.ij2k_lint(u2, v2, sub->degree);
509 b = 2 * b2 + swap2;
510#if 0
511 cout << "induced_action_element_image_of "
512 "action_on_ordered_pairs_t" << endl;
513 cout << a << " -> " << b << endl;
514 cout << "(" << i << "," << j << ") -> "
515 "(" << u << "," << v << ")" << endl;
516 cout << "under" << endl;
517 sub->element_print(elt, cout);
518 cout << endl;
519#endif
520 }
521 else if (A.type_G == base_change_t) {
522 if (f_v) {
523 cout << "induced_action_element_image_of base_change_t" << endl;
524 }
525 action *sub;
526 sub = A.subaction;
527 if (sub == NULL) {
528 cout << "induced_action_element_image_of "
529 "no subaction, type = base_change_t" << endl;
530 exit(1);
531 }
532 b = sub->element_image_of(a, elt, verbose_level - 1);
533 }
534 else if (A.type_G == product_action_t) {
535 if (f_v) {
536 cout << "induced_action_element_image_of product_action_t" << endl;
537 }
538 induced_actions::product_action *PA;
539
540 PA = A.G.product_action_data;
541 b = PA->compute_image(&A, (int *)elt, a, verbose_level - 1);
542 }
544 if (f_v) {
545 cout << "induced_action_element_image_of action_on_interior_direct_product_t" << endl;
546 }
547 induced_actions::action_on_interior_direct_product *IDP;
548
550 b = IDP->compute_image((int *)elt, a, verbose_level - 1);
551 }
552 else {
553 cout << "induced_action_element_image_of type_G "
554 "unknown:: type_G = " << A.type_G << endl;
555 AG.action_print_symmetry_group_type(cout, A.type_G);
556 cout << "action:" << endl;
557 A.print_info();
558 exit(1);
559 }
560 if (f_v) {
561 cout << "induced_action_element_image_of type=";
562 AG.action_print_symmetry_group_type(cout, A.type_G);
563 cout << " image of " << a << " is " << b << endl;
564 }
565 return b;
566}
567
568static void induced_action_element_image_of_low_level(action &A,
569 int *input, int *output, void *elt, int verbose_level)
570{
571 int *Elt = (int *) elt;
572 int f_v = (verbose_level >= 1);
573
574 if (f_v) {
575 cout << "induced_action_element_image_of_low_level "
576 "computing image of ";
577 Int_vec_print(cout, input, A.low_level_point_size);
578 cout << " in action " << A.label << endl;
579 }
580 if (A.type_G == action_by_right_multiplication_t) {
581 if (f_v) {
582 cout << "action_by_right_multiplication_t" << endl;
583 }
584
585 cout << "induced_action_element_image_of_low_level "
586 "action_by_right_multiplication_t "
587 "not yet implemented" << endl;
588 exit(1);
589#if 0
590 action_by_right_multiplication *ABRM = A.G.ABRM;
591 action *sub;
592
593 sub = A.subaction;
594 if (sub == NULL) {
595 cout << "induced_action_element_image_of "
596 "no subaction" << endl;
597 exit(1);
598 }
599 ABRM->compute_image(sub, Elt, a, b, verbose_level - 1);
600#endif
601 }
602 else if (A.type_G == action_by_restriction_t) {
603 if (f_v) {
604 cout << "action_by_restriction_t" << endl;
605 }
606
607 //cout << "induced_action_element_image_of_low_level
608 // action_by_restriction_t not yet implemented" << endl;
609 action *sub;
610
611 sub = A.subaction;
612 if (sub == NULL) {
613 cout << "induced_action_element_image_of "
614 "type action_by_restriction_t, "
615 "no subaction" << endl;
616 exit(1);
617 }
618 sub->image_of_low_level(elt, input, output, verbose_level - 1);
619 }
620 else if (A.type_G == action_by_conjugation_t) {
621 if (f_v) {
622 cout << "action_by_conjugation_t" << endl;
623 }
624 cout << "induced_action_element_image_of_low_level "
625 "action_by_conjugation_t not yet implemented" << endl;
626 exit(1);
627#if 0
628 action_by_conjugation *ABC = A.G.ABC;
629 action *sub;
630
631 sub = A.subaction;
632 if (sub == NULL) {
633 cout << "induced_action_element_image_of "
634 "no subaction" << endl;
635 exit(1);
636 }
637 ABC->compute_image(sub, Elt, a, b, verbose_level - 1);
638#endif
639 }
640 else if (A.type_G == action_by_representation_t) {
641 if (f_v) {
642 cout << "action_by_representation_t" << endl;
643 }
644 induced_actions::action_by_representation *Rep = A.G.Rep;
645
646 action *sub;
647
648 sub = A.subaction;
649 if (sub == NULL) {
650 cout << "induced_action_element_image_of "
651 "no subaction" << endl;
652 exit(1);
653 }
654 Rep->compute_image_int_low_level(*sub,
655 Elt, input, output, verbose_level - 1);
656 }
657 else if (A.type_G == action_on_determinant_t) {
658 if (f_v) {
659 cout << "action_on_determinant_t" << endl;
660 }
661 cout << "induced_action_element_image_of_low_level "
662 "action_on_determinant_t not yet implemented" << endl;
663 exit(1);
664 }
665 else if (A.type_G == action_on_galois_group_t) {
666 if (f_v) {
667 cout << "action_on_galois_group_t" << endl;
668 }
669 cout << "induced_action_element_image_of_low_level "
670 "action_on_galois_group_t not yet implemented" << endl;
671 exit(1);
672 }
673 else if (A.type_G == action_on_sign_t) {
674 if (f_v) {
675 cout << "action_on_sign_t" << endl;
676 }
677 cout << "induced_action_element_image_of_low_level "
678 "action_on_sign_t not yet implemented" << endl;
679 exit(1);
680 }
681 else if (A.type_G == action_on_grassmannian_t) {
682 if (f_v) {
683 cout << "action_on_grassmannian_t" << endl;
684 }
685 cout << "induced_action_element_image_of_low_level "
686 "action_on_grassmannian_t not yet implemented" << endl;
687 exit(1);
688#if 0
689 action_on_grassmannian *AG = A.G.AG;
690
691 action *sub;
692
693 sub = A.subaction;
694 if (sub == NULL) {
695 cout << "induced_action_element_image_of "
696 "no subaction" << endl;
697 exit(1);
698 }
699 b = AG->compute_image_int(sub, Elt, a, verbose_level - 1);
700#endif
701 }
702 else if (A.type_G == action_on_spread_set_t) {
703 if (f_v) {
704 cout << "action_on_spread_set_t" << endl;
705 }
706 induced_actions::action_on_spread_set *AS = A.G.AS;
707
708 AS->compute_image_low_level(Elt, input, output, verbose_level - 1);
709 }
710 else if (A.type_G == action_on_orthogonal_t) {
711 if (f_v) {
712 cout << "action_on_orthogonal_t" << endl;
713 }
714 cout << "induced_action_element_image_of_low_level "
715 "action_on_orthogonal_t not yet implemented" << endl;
716 exit(1);
717 }
718 else if (A.type_G == action_on_wedge_product_t) {
719 if (f_v) {
720 cout << "action_on_wedge_product_t" << endl;
721 }
722 induced_actions::action_on_wedge_product *AW = A.G.AW;
723
724 action *sub;
725
726 sub = A.subaction;
727 if (sub == NULL) {
728 cout << "induced_action_element_image_of "
729 "no subaction" << endl;
730 exit(1);
731 }
732 AW->compute_image_int_low_level(*sub,
733 Elt, input, output, verbose_level - 1);
734 }
735 else if (A.type_G == action_on_homogeneous_polynomials_t) {
736 if (f_v) {
737 cout << "action_on_homogeneous_polynomials_t" << endl;
738 }
739 induced_actions::action_on_homogeneous_polynomials *OnHP = A.G.OnHP;
740
741 OnHP->compute_image_int_low_level(Elt,
742 input, output, verbose_level - 1);
743 }
744 else if (A.type_G == action_by_subfield_structure_t) {
745 if (f_v) {
746 cout << "action_by_subfield_structure_t" << endl;
747 }
748 induced_actions::action_by_subfield_structure *SubfieldStructure =
749 A.G.SubfieldStructure;
750
751
752 action *sub;
753
754 sub = A.subaction;
755 if (sub == NULL) {
756 cout << "induced_action_element_image_of "
757 "no subaction" << endl;
758 exit(1);
759 }
760 SubfieldStructure->compute_image_int_low_level(*sub,
761 Elt, input, output, verbose_level - 1);
762 }
763 else if (A.type_G == action_on_cosets_t) {
764 if (f_v) {
765 cout << "action_on_cosets_t" << endl;
766 }
767 cout << "induced_action_element_image_of_low_level "
768 "action_on_cosets_t not yet implemented" << endl;
769 exit(1);
770 }
771 else if (A.type_G == action_on_factor_space_t) {
772 if (f_v) {
773 cout << "action_on_factor_space_t" << endl;
774 }
775 cout << "induced_action_element_image_of_low_level "
776 "action_on_factor_space_t not yet implemented" << endl;
777 exit(1);
778#if 0
779 action_on_factor_space *AF = A.G.AF;
780
781 action *sub;
782
783 sub = A.subaction;
784 if (sub == NULL) {
785 cout << "induced_action_element_image_of "
786 "no subaction" << endl;
787 exit(1);
788 }
789 b = AF->compute_image(sub, Elt, a, verbose_level - 1);
790#endif
791 }
792 else if (A.type_G == action_on_sets_t) {
793 if (f_v) {
794 cout << "action_on_sets_t" << endl;
795 }
796 cout << "induced_action_element_image_of_low_level "
797 "action_on_sets_t not yet implemented" << endl;
798 exit(1);
799 }
800 else if (A.type_G == action_on_set_partitions_t) {
801 if (f_v) {
802 cout << "induced_action_element_image_of "
803 "action_on_set_partitions_t" << endl;
804 }
805 exit(1);
806 }
807 else if (A.type_G == action_on_subgroups_t) {
808 if (f_v) {
809 cout << "action_on_subgroups_t" << endl;
810 }
811 cout << "induced_action_element_image_of_low_level "
812 "action_on_subgroups_t not yet implemented" << endl;
813 exit(1);
814 }
815 else if (A.type_G == action_on_k_subsets_t) {
816 if (f_v) {
817 cout << "action_on_k_subsets_t" << endl;
818 }
819 cout << "induced_action_element_image_of_low_level "
820 "action_on_k_subsets_t not yet implemented" << endl;
821 exit(1);
822 }
823 else if (A.type_G == action_on_bricks_t) {
824 if (f_v) {
825 cout << "action_on_bricks_t" << endl;
826 }
827 cout << "induced_action_element_image_of_low_level "
828 "action_on_bricks_t not yet implemented" << endl;
829 exit(1);
830 }
831 else if (A.type_G == action_on_andre_t) {
832 if (f_v) {
833 cout << "action_on_andre_t" << endl;
834 }
835 cout << "induced_action_element_image_of_low_level "
836 "action_on_andre_t not yet implemented" << endl;
837 exit(1);
838 }
839 else if (A.type_G == action_on_pairs_t) {
840 if (f_v) {
841 cout << "action_on_pairs_t" << endl;
842 }
843 cout << "induced_action_element_image_of_low_level "
844 "action_on_pairs_t not yet implemented" << endl;
845 exit(1);
846#if 0
847 action *sub;
848 int i, j, u, v;
849
850 sub = A.subaction;
851 if (sub == NULL) {
852 cout << "induced_action_element_image_of "
853 "no subaction, type = action_on_pairs_t" << endl;
854 exit(1);
855 }
856 k2ij(a, i, j, sub->degree);
857 u = sub->element_image_of(i, elt, verbose_level - 1);
858 v = sub->element_image_of(j, elt, verbose_level - 1);
859 b = ij2k(u, v, sub->degree);
860#endif
861 }
862 else if (A.type_G == action_on_ordered_pairs_t) {
863 if (f_v) {
864 cout << "action_on_ordered_pairs_t" << endl;
865 }
866 cout << "induced_action_element_image_of_low_level "
867 "action_on_ordered_pairs_t not yet implemented" << endl;
868 exit(1);
869 }
870 else if (A.type_G == base_change_t) {
871 if (f_v) {
872 cout << "base_change_t" << endl;
873 }
874 cout << "induced_action_element_image_of_low_level "
875 "base_change_t not yet implemented" << endl;
876 exit(1);
877#if 0
878 action *sub;
879 sub = A.subaction;
880 if (sub == NULL) {
881 cout << "induced_action_element_image_of "
882 "no subaction, type = base_change_t" << endl;
883 exit(1);
884 }
885 b = sub->element_image_of(a, elt, verbose_level - 1);
886#endif
887 }
888 else if (A.type_G == product_action_t) {
889 if (f_v) {
890 cout << "product_action_t" << endl;
891 }
892 cout << "induced_action_element_image_of_low_level "
893 "product_action_t not yet implemented" << endl;
894 exit(1);
895#if 0
896 product_action *PA;
897
898 PA = A.G.product_action_data;
899 b = PA->compute_image(&A, (int *)elt, a, verbose_level - 1);
900#endif
901 }
902 else if (A.type_G == action_on_interior_direct_product_t) {
903 if (f_v) {
904 cout << "action_on_interior_direct_product_t" << endl;
905 }
906 //action_on_interior_direct_product *IDP;
907
908 cout << "action_on_interior_direct_product_t "
909 "not yet implemented" << endl;
910 exit(1);
911 }
912 else {
913 cout << "induced_action_element_image_of_low_level "
914 "type_G unknown:: type_G = " << A.type_G << endl;
915 exit(1);
916 }
917 if (f_v) {
918 cout << "induced_action_element_image_of_low_level done" << endl;
919 cout << "image of ";
920 Int_vec_print(cout, input, A.low_level_point_size);
921 cout << " in action " << A.label << " is ";
922 Int_vec_print(cout, output, A.low_level_point_size);
923 cout << endl;
924 }
925}
926
927
928static void induced_action_element_one(action &A,
929 void *elt, int verbose_level)
930{
931 int f_v = (verbose_level >= 1);
932 action *sub;
933
934 if (f_v) {
935 cout << "induced_action_element_one ";
936 }
937 if (A.type_G == product_action_t) {
938 induced_actions::product_action *PA;
939
940 PA = A.G.product_action_data;
941 PA->element_one(&A, (int *) elt, verbose_level);
942 }
943 else {
944 sub = A.subaction;
945 if (sub == NULL) {
946 cout << "induced_action_element_one "
947 "no subaction" << endl;
948 exit(1);
949 }
950 sub->element_one(elt, verbose_level);
951 }
952}
953
954static int induced_action_element_is_one(action &A,
955 void *elt, int verbose_level)
956{
957 int f_v = (verbose_level >= 1);
958 action *sub;
959
960 if (f_v) {
961 cout << "induced_action_element_is_one ";
962 }
963 if (A.type_G == product_action_t) {
964 induced_actions::product_action *PA;
965
966 PA = A.G.product_action_data;
967 return PA->element_is_one(&A, (int *) elt, verbose_level);
968 }
969 else {
970 sub = A.subaction;
971 if (sub == NULL) {
972 cout << "induced_action_element_is_one "
973 "no subaction" << endl;
974 exit(1);
975 }
976 return sub->element_is_one(elt, verbose_level);
977 }
978}
979
980static void induced_action_element_unpack(action &A,
981 void *elt, void *Elt, int verbose_level)
982{
983 int f_v = (verbose_level >= 1);
984 action *sub;
985
986 if (f_v) {
987 cout << "induced_action_element_unpack" << endl;
988 }
989 if (A.type_G == product_action_t) {
990 induced_actions::product_action *PA;
991
992 PA = A.G.product_action_data;
993 PA->element_unpack((uchar *)elt, (int *)Elt, verbose_level);
994 }
995 else {
996 sub = A.subaction;
997 if (sub == NULL) {
998 cout << "induced_action_element_unpack "
999 "no subaction" << endl;
1000 exit(1);
1001 }
1002 sub->element_unpack(elt, Elt, verbose_level);
1003 }
1004}
1005
1006static void induced_action_element_pack(action &A,
1007 void *Elt, void *elt, int verbose_level)
1008{
1009 int f_v = (verbose_level >= 1);
1010 action *sub;
1011
1012 if (f_v) {
1013 cout << "induced_action_element_pack" << endl;
1014 }
1015 if (A.type_G == product_action_t) {
1016 induced_actions::product_action *PA;
1017
1018 PA = A.G.product_action_data;
1019 PA->element_pack((int *)Elt, (uchar *)elt, verbose_level);
1020 }
1021 else {
1022 sub = A.subaction;
1023 if (sub == NULL) {
1024 cout << "induced_action_element_pack "
1025 "no subaction" << endl;
1026 exit(1);
1027 }
1028 sub->element_pack(Elt, elt, verbose_level);
1029 }
1030}
1031
1032static void induced_action_element_retrieve(action &A,
1033 int hdl, void *elt, int verbose_level)
1034{
1035 int f_v = (verbose_level >= 1);
1036 action *sub;
1037
1038 if (f_v) {
1039 cout << "induced_action_element_retrieve" << endl;
1040 }
1041 if (A.type_G == product_action_t) {
1042 induced_actions::product_action *PA;
1043
1044 PA = A.G.product_action_data;
1045 PA->element_retrieve(&A, hdl,
1046 (int *)elt, verbose_level);
1047 }
1048 else {
1049 sub = A.subaction;
1050 if (sub == NULL) {
1051 cout << "induced_action_element_retrieve "
1052 "no subaction" << endl;
1053 exit(1);
1054 }
1055 sub->element_retrieve(hdl, elt, verbose_level);
1056 }
1057}
1058
1059static int induced_action_element_store(action &A,
1060 void *elt, int verbose_level)
1061{
1062 int f_v = (verbose_level >= 1);
1063 action *sub;
1064
1065 if (f_v) {
1066 cout << "induced_action_element_store" << endl;
1067 }
1068 if (A.type_G == product_action_t) {
1069 induced_actions::product_action *PA;
1070
1071 PA = A.G.product_action_data;
1072 return PA->element_store(&A, (int *)elt, verbose_level);
1073 }
1074 else {
1075 sub = A.subaction;
1076 if (sub == NULL) {
1077 cout << "induced_action_element_store "
1078 "no subaction" << endl;
1079 exit(1);
1080 }
1081 return sub->element_store(elt, verbose_level);
1082 }
1083}
1084
1085static void induced_action_element_mult(action &A,
1086 void *a, void *b, void *ab, int verbose_level)
1087{
1088 int f_v = (verbose_level >= 1);
1089 action *sub;
1090
1091 if (f_v) {
1092 cout << "induced_action_element_mult" << endl;
1093 }
1094 if (A.type_G == product_action_t) {
1095 induced_actions::product_action *PA;
1096
1097 PA = A.G.product_action_data;
1098 PA->element_mult((int *)a, (int *)b, (int *)ab, verbose_level);
1099 }
1100 else {
1101 sub = A.subaction;
1102 if (sub == NULL) {
1103 cout << "induced_action_element_mult "
1104 "no subaction" << endl;
1105 exit(1);
1106 }
1107 sub->element_mult(a, b, ab, verbose_level);
1108 }
1109 if (f_v) {
1110 cout << "induced_action_element_mult done" << endl;
1111 }
1112}
1113
1114static void induced_action_element_invert(action &A,
1115 void *a, void *av, int verbose_level)
1116{
1117 int f_v = (verbose_level >= 1);
1118 action *sub;
1119
1120 if (f_v) {
1121 cout << "induced_action_element_invert" << endl;
1122 }
1123 if (A.type_G == product_action_t) {
1124 induced_actions::product_action *PA;
1125
1126 PA = A.G.product_action_data;
1127 PA->element_invert((int *)a, (int *)av,
1128 verbose_level);
1129 }
1130 else {
1131 sub = A.subaction;
1132 if (sub == NULL) {
1133 cout << "induced_action_element_invert "
1134 "no subaction" << endl;
1135 exit(1);
1136 }
1137 sub->element_invert(a, av, verbose_level);
1138 }
1139}
1140
1141static void induced_action_element_transpose(action &A,
1142 void *a, void *at, int verbose_level)
1143{
1144 int f_v = (verbose_level >= 1);
1145 action *sub;
1146
1147 if (f_v) {
1148 cout << "induced_action_element_transpose" << endl;
1149 }
1150 if (A.type_G == product_action_t) {
1151 induced_actions::product_action *PA;
1152
1153 PA = A.G.product_action_data;
1154 PA->element_transpose((int *)a, (int *)at,
1155 verbose_level);
1156 }
1157 else {
1158 sub = A.subaction;
1159 if (sub == NULL) {
1160 cout << "induced_action_element_transpose "
1161 "no subaction" << endl;
1162 exit(1);
1163 }
1164 sub->element_transpose(a, at, verbose_level);
1165 }
1166}
1167
1168static void induced_action_element_move(action &A,
1169 void *a, void *b, int verbose_level)
1170{
1171 int f_v = (verbose_level >= 1);
1172 action *sub;
1173
1174 if (f_v) {
1175 cout << "induced_action_element_move" << endl;
1176 }
1177 if (A.type_G == product_action_t) {
1178 induced_actions::product_action *PA;
1179
1180 PA = A.G.product_action_data;
1181 PA->element_move((int *)a, (int *)b,
1182 verbose_level);
1183 }
1184 else {
1185 sub = A.subaction;
1186 if (sub == NULL) {
1187 cout << "induced_action_element_move "
1188 "no subaction" << endl;
1189 exit(1);
1190 }
1191 sub->element_move(a, b, verbose_level);
1192 }
1193}
1194
1195static void induced_action_element_dispose(action &A,
1196 int hdl, int verbose_level)
1197{
1198 int f_v = (verbose_level >= 1);
1199 action *sub;
1200
1201 if (f_v) {
1202 cout << "induced_action_element_dispose" << endl;
1203 }
1204 if (A.type_G == product_action_t) {
1205 //product_action *PA;
1206
1207 //PA = A.G.product_action_data;
1208 // do nothing!
1209 }
1210 else {
1211 sub = A.subaction;
1212 if (sub == NULL) {
1213 cout << "induced_action_element_dispose "
1214 "no subaction" << endl;
1215 exit(1);
1216 }
1217 sub->element_dispose(hdl, verbose_level);
1218 }
1219}
1220
1221static void induced_action_element_print(action &A,
1222 void *elt, ostream &ost)
1223{
1224 if (A.type_G == product_action_t) {
1225 induced_actions::product_action *PA;
1226
1227 PA = A.G.product_action_data;
1228 PA->element_print((int *)elt, ost);
1229 }
1230 else if (A.f_has_subaction) {
1231 action *sub;
1232 sub = A.subaction;
1233 if (sub == NULL) {
1234 cout << "induced_action_element_print "
1235 "no subaction" << endl;
1236 exit(1);
1237 }
1238 sub->element_print_quick(elt, ost);
1239
1240
1241#if 0
1242 int n;
1243 int *fp;
1244
1245 fp = NEW_int(sub->degree);
1246 n = sub->find_fixed_points(elt, fp, 0);
1247 ost << "with " << n << " fixed points in action "
1248 << sub->label << endl;
1249 FREE_int(fp);
1250 sub->element_print_base_images((int *)elt, ost);
1251 ost << endl;
1252#endif
1253
1254 }
1255 else {
1256 cout << "induced_action_element_print "
1257 "not of type product_action_t and "
1258 "no subaction" << endl;
1259 exit(1);
1260 }
1261}
1262
1263static void induced_action_element_print_quick(action &A,
1264 void *elt, ostream &ost)
1265{
1266 if (A.type_G == product_action_t) {
1267 induced_actions::product_action *PA;
1268
1269 PA = A.G.product_action_data;
1270 PA->element_print((int *)elt, ost);
1271 }
1272 else if (A.f_has_subaction) {
1273 action *sub;
1274 sub = A.subaction;
1275 if (sub == NULL) {
1276 cout << "induced_action_element_print "
1277 "no subaction" << endl;
1278 exit(1);
1279 }
1280 sub->element_print_quick(elt, ost);
1281
1282 }
1283 else {
1284 cout << "induced_action_element_print_quick "
1285 "not of type product_action_t and "
1286 "no subaction" << endl;
1287 exit(1);
1288 }
1289}
1290
1291static void induced_action_element_print_latex(action &A,
1292 void *elt, ostream &ost)
1293{
1294 if (A.type_G == product_action_t) {
1295 induced_actions::product_action *PA;
1296
1297 PA = A.G.product_action_data;
1298 PA->element_print_latex((int *)elt, ost);
1299 }
1300 else {
1301 action *sub;
1302 sub = A.subaction;
1303 if (sub == NULL) {
1304 cout << "induced_action_element_print_latex "
1305 "no subaction" << endl;
1306 exit(1);
1307 }
1308 sub->element_print_latex(elt, ost);
1309 }
1310}
1311
1312static void induced_action_element_print_latex_with_print_point_function(
1313 action &A,
1314 void *elt, std::ostream &ost,
1315 void (*point_label)(std::stringstream &sstr, long int pt, void *data),
1316 void *point_label_data)
1317{
1318 int f_v = FALSE;
1319 int *Elt = (int *) elt;
1320 int i, j;
1322
1323 if (f_v) {
1324 cout << "induced_action_element_print_latex_with_print_point_function "
1325 "degree = " << A.degree << endl;
1326 }
1327 int *p = NEW_int(A.degree);
1328 for (i = 0; i < A.degree; i++) {
1329 //cout << "matrix_group_element_print_as_permutation
1330 //computing image of i=" << i << endl;
1331 //if (i == 3)
1332 //f_v = TRUE;
1333 //else
1334 //f_v = FALSE;
1335 j = A.element_image_of(i, Elt, 0 /* verbose_level */);
1336 p[i] = j;
1337 }
1338 //Combi.perm_print(ost, p, A.degree);
1339 //ost << ";";
1341 A.degree, point_label, point_label_data);
1342 FREE_int(p);
1343
1344
1345
1346
1347#if 0
1348 if (A.type_G == product_action_t) {
1349 product_action *PA;
1350
1351 PA = A.G.product_action_data;
1352 PA->element_print_latex((int *)elt, ost);
1353 }
1354 else {
1355 action *sub;
1356 sub = A.subaction;
1357 if (sub == NULL) {
1358 cout << "induced_action_element_print_latex "
1359 "no subaction" << endl;
1360 exit(1);
1361 }
1362 sub->element_print_latex_with_print_point_function(
1363 elt, ost, point_label, point_label_data);
1364 }
1365#endif
1366
1367}
1368
1369static void induced_action_element_print_verbose(action &A,
1370 void *elt, ostream &ost)
1371{
1372 if (A.type_G == product_action_t) {
1373 induced_actions::product_action *PA;
1374
1375 PA = A.G.product_action_data;
1376 PA->element_print((int *)elt, ost);
1377 }
1378 else {
1379 action *sub;
1380
1381 sub = A.subaction;
1382 if (sub == NULL) {
1383 cout << "induced_action_element_print_verbose "
1384 "no subaction" << endl;
1385 exit(1);
1386 }
1387 sub->element_print_verbose(elt, ost);
1388 }
1389}
1390
1391static void induced_action_element_code_for_make_element(action &A,
1392 void *elt, int *data)
1393{
1394 //int *Elt = (int *) elt;
1395
1396 //cout << "induced_action_element_code_for_make_element
1397 //not yet implemented" << endl;
1398 action *sub;
1399
1400 sub = A.subaction;
1401 if (sub == NULL) {
1402 cout << "induced_action_element_code_for_"
1403 "make_element no subaction" << endl;
1404 exit(1);
1405 }
1406 sub->element_code_for_make_element(elt, data);
1407 //exit(1);
1408}
1409
1410static void induced_action_element_print_for_make_element(action &A,
1411 void *elt, ostream &ost)
1412{
1413 //int *Elt = (int *) elt;
1414
1415 //cout << "induced_action_element_print_for_
1416 // make_element not yet implemented" << endl;
1417 action *sub;
1418
1419 sub = A.subaction;
1420 if (sub == NULL) {
1421 cout << "induced_action_element_print_for_"
1422 "make_element no subaction" << endl;
1423 exit(1);
1424 }
1425 sub->element_print_for_make_element(elt, ost);
1426 //exit(1);
1427}
1428
1429static void induced_action_element_print_for_make_element_no_commas(
1430 action &A, void *elt, ostream &ost)
1431{
1432 //int *Elt = (int *) elt;
1433
1434 //cout << "induced_action_element_print_for_"
1435 // "make_element_no_commas not yet implemented" << endl;
1436 action *sub;
1437
1438 sub = A.subaction;
1439 if (sub == NULL) {
1440 cout << "induced_action_element_print_for_"
1441 "make_element_no_commas no subaction" << endl;
1442 exit(1);
1443 }
1444 sub->element_print_for_make_element_no_commas(elt, ost);
1445 //exit(1);
1446}
1447
1448static void induced_action_print_point(action &A,
1449 long int a, ostream &ost)
1450{
1451 action_global AG;
1452
1453#if 0
1454 cout << "induced_action_print_point type=";
1455 AG.action_print_symmetry_group_type(cout, A.type_G);
1456 cout << endl;
1457#endif
1458
1459 if (A.type_G == action_by_right_multiplication_t) {
1460 //action_by_right_multiplication *ABRM = A.G.ABRM;
1461 action *sub;
1462
1463 sub = A.subaction;
1464 if (sub == NULL) {
1465 cout << "induced_action_print_point no subaction" << endl;
1466 exit(1);
1467 }
1468 ost << a;
1469 //ABRM->compute_image(sub, Elt, a, b, verbose_level);
1470 }
1471 else if (A.type_G == action_by_restriction_t) {
1472 //action_by_right_multiplication *ABRM = A.G.ABRM;
1473 action *sub;
1474
1475 sub = A.subaction;
1476 if (sub == NULL) {
1477 cout << "induced_action_print_point no subaction" << endl;
1478 exit(1);
1479 }
1480 ost << a;
1481 //ABRM->compute_image(sub, Elt, a, b, verbose_level);
1482 }
1483 else if (A.type_G == action_by_conjugation_t) {
1484 //action_by_conjugation *ABC = A.G.ABC;
1485 action *sub;
1486
1487 sub = A.subaction;
1488 if (sub == NULL) {
1489 cout << "induced_action_print_point no subaction" << endl;
1490 exit(1);
1491 }
1492 ost << a;
1493 //ABC->compute_image(sub, Elt, a, b, verbose_level);
1494 }
1495 else if (A.type_G == action_on_determinant_t) {
1496 //action_on_determinant *AD = A.G.AD;
1497 action *sub;
1498
1499 sub = A.subaction;
1500 if (sub == NULL) {
1501 cout << "induced_action_print_point no subaction" << endl;
1502 exit(1);
1503 }
1504 ost << a;
1505 }
1506 else if (A.type_G == action_on_galois_group_t) {
1507 //action_on_galois_group *AG = A.G.on_Galois_group;
1508
1509 ost << a;
1510 }
1511 else if (A.type_G == action_on_sign_t) {
1512 //action_on_sign *OnSign = A.G.OnSign;
1513 ost << a;
1514 }
1515 else if (A.type_G == action_on_sets_t) {
1516 induced_actions::action_on_sets *AOS = A.G.on_sets;
1517 action *sub;
1518 int i;
1519 long int b;
1520
1521 sub = A.subaction;
1522 if (sub == NULL) {
1523 cout << "induced_action_print_point no subaction" << endl;
1524 exit(1);
1525 }
1526 ost << a << "=";
1527 Lint_vec_print(ost, AOS->sets[AOS->perm[a]], AOS->set_size);
1528 ost << endl;
1529 for (i = 0; i < AOS->set_size; i++) {
1530 ost << "$$" << endl;
1531 ost << "$$" << endl;
1532 b = AOS->sets[AOS->perm[a]][i];
1533 sub->print_point(b, ost);
1534 }
1535 //AOS->compute_image(sub, Elt, a, b, verbose_level);
1536 }
1537 else if (A.type_G == action_on_subgroups_t) {
1538 //action_on_subgroups *AOS = A.G.on_subgroups;
1539 ost << a;
1540 //AOS->compute_image(sub, Elt, a, b, verbose_level);
1541 }
1542 else if (A.type_G == action_on_k_subsets_t) {
1543 //action_on_k_subsets *On_k_subsets = A.G.on_k_subsets;
1544 action *sub;
1545
1546 sub = A.subaction;
1547 if (sub == NULL) {
1548 cout << "induced_action_print_point no subaction" << endl;
1549 exit(1);
1550 }
1551 ost << a;
1552 }
1553 else if (A.type_G == action_on_orbits_t) {
1554 //action_on_orbits *On_orbits = A.G.OnOrbits;
1555#if 0
1556 action *sub;
1557
1558 sub = A.subaction;
1559 if (sub == NULL) {
1560 cout << "induced_action_print_point no subaction" << endl;
1561 exit(1);
1562 }
1563#endif
1564 ost << a;
1565 }
1566 else if (A.type_G == action_on_bricks_t) {
1567 //action_on_bricks *On_bricks = A.G.OnBricks;
1568 action *sub;
1569
1570 sub = A.subaction;
1571 if (sub == NULL) {
1572 cout << "induced_action_print_point no subaction" << endl;
1573 exit(1);
1574 }
1575 ost << a;
1576 }
1577 else if (A.type_G == action_on_andre_t) {
1578 //action_on_andre *OnAndre = A.G.OnAndre;
1579 action *sub;
1580
1581 sub = A.subaction;
1582 if (sub == NULL) {
1583 cout << "induced_action_print_point no subaction" << endl;
1584 exit(1);
1585 }
1586 ost << a;
1587 }
1588 else if (A.type_G == action_on_pairs_t) {
1589 action *sub;
1591 int i, j;
1592
1593 sub = A.subaction;
1594 if (sub == NULL) {
1595 cout << "induced_action_print_point "
1596 "no subaction, type = action_on_pairs_t" << endl;
1597 exit(1);
1598 }
1599 Combi.k2ij(a, i, j, sub->degree);
1600 cout << "a={" << i << "," << j << "}";
1601 }
1602 else if (A.type_G == action_on_ordered_pairs_t) {
1603 action *sub;
1605 int a2, swap, tmp, i, j;
1606
1607 sub = A.subaction;
1608 if (sub == NULL) {
1609 cout << "induced_action_print_point "
1610 "no subaction, type = action_on_ordered_pairs_t" << endl;
1611 exit(1);
1612 }
1613 swap = a % 2;
1614 a2 = a / 2;
1615 Combi.k2ij(a2, i, j, sub->degree);
1616 if (swap) {
1617 tmp = i;
1618 i = j;
1619 j = tmp;
1620 }
1621 cout << "a=(" << i << "," << j << ")";
1622 }
1623 else if (A.type_G == base_change_t) {
1624 action *sub;
1625 sub = A.subaction;
1626 if (sub == NULL) {
1627 cout << "induced_action_print_point "
1628 "no subaction, type = base_change_t" << endl;
1629 exit(1);
1630 }
1631 ost << a;
1632 }
1633 else if (A.type_G == product_action_t) {
1634 //product_action *PA;
1635
1636 //PA = A.G.product_action_data;
1637 ost << a;
1638 }
1639 else if (A.type_G == action_on_grassmannian_t) {
1640 if (FALSE) {
1641 cout << "action_on_grassmannian_t" << endl;
1642 }
1643 induced_actions::action_on_grassmannian *AG = A.G.AG;
1644
1645#if 0
1646 action *sub;
1647
1648 sub = A.subaction;
1649 if (sub == NULL) {
1650 cout << "induced_action_print_point "
1651 "no subaction" << endl;
1652 exit(1);
1653 }
1654 //ost << a;
1655#endif
1656 AG->print_point(a, ost);
1657 //b = AG->compute_image_int(sub, Elt, a, verbose_level - 1);
1658 }
1659 else if (A.type_G == action_on_spread_set_t) {
1660 if (FALSE) {
1661 cout << "action_on_spread_set_t" << endl;
1662 }
1663 //action_on_spread_set *AS = A.G.AS;
1664
1665 ost << a;
1666 }
1667 else if (A.type_G == action_on_orthogonal_t) {
1668 if (FALSE) {
1669 cout << "action_on_orthogonal_t" << endl;
1670 }
1671 //action_on_orthogonal *AO = A.G.AO;
1672
1673 ost << a;
1674
1675#if 0
1676 action *sub;
1677
1678 sub = A.subaction;
1679 if (sub == NULL) {
1680 cout << "induced_action_print_point no subaction" << endl;
1681 exit(1);
1682 }
1683 ost << a;
1684#endif
1685 }
1686 else if (A.type_G == action_on_interior_direct_product_t) {
1687 if (FALSE) {
1688 cout << "action_on_interior_direct_product_t" << endl;
1689 }
1690 induced_actions::action_on_interior_direct_product *IDP;
1691 int i, j;
1692
1693 IDP = A.G.OnInteriorDirectProduct;
1694 i = a / IDP->nb_cols;
1695 j = a % IDP->nb_cols;
1696 ost << "(" << i << "," << j << ")";
1697 }
1698 else {
1699 cout << "induced_action_print_point type_G unknown:: type_G = ";
1700 AG.action_print_symmetry_group_type(cout, A.type_G);
1701 cout << endl;
1702 exit(1);
1703 }
1704}
1705
1706
1707static void induced_action_unrank_point(action &A, long int rk, int *v)
1708{
1709 action_global AG;
1710 //cout << "induced_action_unrank_point" << endl;
1711
1712 if (A.type_G == action_by_right_multiplication_t) {
1713 //action_by_right_multiplication *ABRM = A.G.ABRM;
1714 action *sub;
1715
1716 sub = A.subaction;
1717 if (sub == NULL) {
1718 cout << "induced_action_unrank_point no subaction" << endl;
1719 exit(1);
1720 }
1721 //ost << a;
1722 //ABRM->compute_image(sub, Elt, a, b, verbose_level);
1723 }
1724 else if (A.type_G == action_by_restriction_t) {
1725 induced_actions::action_by_restriction *ABR = A.G.ABR;
1726 action *sub;
1727
1728 sub = A.subaction;
1729 if (sub == NULL) {
1730 cout << "induced_action_unrank_point no subaction" << endl;
1731 exit(1);
1732 }
1733 int rk0;
1734 rk0 = ABR->original_point(rk);
1735 sub->unrank_point(rk0, v);
1736 }
1737 else if (A.type_G == action_by_conjugation_t) {
1738 //action_by_conjugation *ABC = A.G.ABC;
1739 action *sub;
1740
1741 sub = A.subaction;
1742 if (sub == NULL) {
1743 cout << "induced_action_unrank_point no subaction" << endl;
1744 exit(1);
1745 }
1746 //ost << a;
1747 //ABC->compute_image(sub, Elt, a, b, verbose_level);
1748 }
1749 else if (A.type_G == action_on_determinant_t) {
1750 //action_on_determinant *AD = A.G.AD;
1751 action *sub;
1752
1753 sub = A.subaction;
1754 if (sub == NULL) {
1755 cout << "induced_action_unrank_point no subaction" << endl;
1756 exit(1);
1757 }
1758 //ost << a;
1759 }
1760 else if (A.type_G == action_on_galois_group_t) {
1761 //action_on_galois_group *AG = A.G.on_Galois_group;
1762
1763 //ost << a;
1764 }
1765 else if (A.type_G == action_on_sign_t) {
1766 //action_on_sign *OnSign = A.G.OnSign;
1767 //ost << a;
1768 }
1769 else if (A.type_G == action_on_sets_t) {
1770 //action_on_sets *AOS = A.G.on_sets;
1771 action *sub;
1772
1773 sub = A.subaction;
1774 if (sub == NULL) {
1775 cout << "induced_action_unrank_point no subaction" << endl;
1776 exit(1);
1777 }
1778 //ost << a;
1779 //AOS->compute_image(sub, Elt, a, b, verbose_level);
1780 }
1781 else if (A.type_G == action_on_subgroups_t) {
1782 //action_on_subgroups *AOS = A.G.on_subgroups;
1783 //ost << a;
1784 //AOS->compute_image(sub, Elt, a, b, verbose_level);
1785 }
1786 else if (A.type_G == action_on_k_subsets_t) {
1787 //action_on_k_subsets *On_k_subsets = A.G.on_k_subsets;
1788 action *sub;
1789
1790 sub = A.subaction;
1791 if (sub == NULL) {
1792 cout << "induced_action_unrank_point no subaction" << endl;
1793 exit(1);
1794 }
1795 //ost << a;
1796 }
1797 else if (A.type_G == action_on_orbits_t) {
1798 //action_on_orbits *On_orbits = A.G.OnOrbits;
1799#if 0
1800 action *sub;
1801
1802 sub = A.subaction;
1803 if (sub == NULL) {
1804 cout << "induced_action_unrank_point no subaction" << endl;
1805 exit(1);
1806 }
1807#endif
1808 //ost << a;
1809 }
1810 else if (A.type_G == action_on_bricks_t) {
1811 //action_on_bricks *On_bricks = A.G.OnBricks;
1812 action *sub;
1813
1814 sub = A.subaction;
1815 if (sub == NULL) {
1816 cout << "induced_action_unrank_point no subaction" << endl;
1817 exit(1);
1818 }
1819 //ost << a;
1820 }
1821 else if (A.type_G == action_on_andre_t) {
1822 //action_on_andre *OnAndre = A.G.OnAndre;
1823 action *sub;
1824
1825 sub = A.subaction;
1826 if (sub == NULL) {
1827 cout << "induced_action_unrank_point no subaction" << endl;
1828 exit(1);
1829 }
1830 //ost << a;
1831 }
1832 else if (A.type_G == action_on_pairs_t) {
1833 action *sub;
1834 //int i, j;
1835
1836 sub = A.subaction;
1837 if (sub == NULL) {
1838 cout << "induced_action_unrank_point "
1839 "no subaction, type = action_on_pairs_t" << endl;
1840 exit(1);
1841 }
1842 //k2ij(a, i, j, sub->degree);
1843 //cout << "a={" << i << "," << j << "}";
1844 }
1845 else if (A.type_G == action_on_ordered_pairs_t) {
1846 action *sub;
1847 //int a2, swap, tmp, i, j;
1848
1849 sub = A.subaction;
1850 if (sub == NULL) {
1851 cout << "induced_action_unrank_point "
1852 "no subaction, type = action_on_ordered_pairs_t" << endl;
1853 exit(1);
1854 }
1855#if 0
1856 swap = a % 2;
1857 a2 = a / 2;
1858 k2ij(a2, i, j, sub->degree);
1859 if (swap) {
1860 tmp = i;
1861 i = j;
1862 j = tmp;
1863 }
1864 cout << "a=(" << i << "," << j << ")";
1865#endif
1866 }
1867 else if (A.type_G == base_change_t) {
1868 action *sub;
1869 sub = A.subaction;
1870 if (sub == NULL) {
1871 cout << "induced_action_unrank_point "
1872 "no subaction, type = base_change_t" << endl;
1873 exit(1);
1874 }
1875 //ost << a;
1876 }
1877 else if (A.type_G == product_action_t) {
1878 //product_action *PA;
1879
1880 //PA = A.G.product_action_data;
1881 //ost << a;
1882 }
1883 else if (A.type_G == action_on_grassmannian_t) {
1884 if (FALSE) {
1885 cout << "action_on_grassmannian_t" << endl;
1886 }
1887 induced_actions::action_on_grassmannian *AG = A.G.AG;
1888
1889 AG->unrank(rk, v, 0 /*verbose_level*/);
1890 }
1891 else if (A.type_G == action_on_spread_set_t) {
1892 if (FALSE) {
1893 cout << "action_on_spread_set_t" << endl;
1894 }
1895 //action_on_spread_set *AS = A.G.AS;
1896
1897 //ost << a;
1898 }
1899 else if (A.type_G == action_on_orthogonal_t) {
1900 if (FALSE) {
1901 cout << "action_on_orthogonal_t" << endl;
1902 }
1903 induced_actions::action_on_orthogonal *AO = A.G.AO;
1904
1905 AO->unrank_point(v, rk);
1906 //ost << a;
1907
1908#if 0
1909 action *sub;
1910
1911 sub = A.subaction;
1912 if (sub == NULL) {
1913 cout << "induced_action_unrank_point no subaction" << endl;
1914 exit(1);
1915 }
1916 ost << a;
1917#endif
1918 }
1919 else if (A.type_G == action_on_wedge_product_t) {
1920 if (FALSE) {
1921 cout << "induced_action_unrank_point "
1922 "action_on_wedge_product_t" << endl;
1923 }
1924 induced_actions::action_on_wedge_product *AW = A.G.AW;
1925
1926 action *sub;
1927
1928 sub = A.subaction;
1929 if (sub == NULL) {
1930 cout << "induced_action_unrank_point "
1931 "no subaction" << endl;
1932 exit(1);
1933 }
1934 AW->unrank_point(v, rk);
1935 //b = AW->compute_image_int(*sub, Elt, a, verbose_level - 1);
1936 }
1937 else if (A.type_G == action_by_representation_t) {
1938 if (FALSE) {
1939 cout << "induced_action_unrank_point "
1940 "action_by_representation_t" << endl;
1941 }
1942 induced_actions::action_by_representation *Rep = A.G.Rep;
1943
1944 Rep->unrank_point(rk, v, 0 /* verbose_level*/);
1945 //b = AW->compute_image_int(*sub, Elt, a, verbose_level - 1);
1946 }
1947 else {
1948 cout << "induced_action_unrank_point type_G unknown:: type_G = ";
1949 AG.action_print_symmetry_group_type(cout, A.type_G);
1950 cout << endl;
1951 exit(1);
1952 }
1953
1954}
1955
1956static long int induced_action_rank_point(action &A, int *v)
1957{
1958 action_global AG;
1959 //cout << "induced_action_rank_point" << endl;
1960 long int rk = -1;
1961
1962 if (A.type_G == action_by_right_multiplication_t) {
1963 //action_by_right_multiplication *ABRM = A.G.ABRM;
1964 action *sub;
1965
1966 sub = A.subaction;
1967 if (sub == NULL) {
1968 cout << "induced_action_rank_point no subaction" << endl;
1969 exit(1);
1970 }
1971 //ost << a;
1972 //ABRM->compute_image(sub, Elt, a, b, verbose_level);
1973 }
1974 else if (A.type_G == action_by_restriction_t) {
1975 induced_actions::action_by_restriction *ABR = A.G.ABR;
1976 action *sub;
1977
1978 sub = A.subaction;
1979 if (sub == NULL) {
1980 cout << "induced_action_rank_point no subaction" << endl;
1981 exit(1);
1982 }
1983 int rk0;
1984 rk0 = sub->rank_point(v);
1985 rk = ABR->restricted_point_idx(rk0);
1986 }
1987 else if (A.type_G == action_by_conjugation_t) {
1988 //action_by_conjugation *ABC = A.G.ABC;
1989 action *sub;
1990
1991 sub = A.subaction;
1992 if (sub == NULL) {
1993 cout << "induced_action_rank_point no subaction" << endl;
1994 exit(1);
1995 }
1996 //ost << a;
1997 //ABC->compute_image(sub, Elt, a, b, verbose_level);
1998 }
1999 else if (A.type_G == action_on_determinant_t) {
2000 //action_on_determinant *AD = A.G.AD;
2001 action *sub;
2002
2003 sub = A.subaction;
2004 if (sub == NULL) {
2005 cout << "induced_action_rank_point no subaction" << endl;
2006 exit(1);
2007 }
2008 //ost << a;
2009 }
2010 else if (A.type_G == action_on_galois_group_t) {
2011 //action_on_galois_group *AG = A.G.on_Galois_group;
2012
2013 //ost << a;
2014 }
2015 else if (A.type_G == action_on_sign_t) {
2016 //action_on_sign *OnSign = A.G.OnSign;
2017 //ost << a;
2018 }
2019 else if (A.type_G == action_on_sets_t) {
2020 //action_on_sets *AOS = A.G.on_sets;
2021 action *sub;
2022
2023 sub = A.subaction;
2024 if (sub == NULL) {
2025 cout << "induced_action_rank_point no subaction" << endl;
2026 exit(1);
2027 }
2028 //ost << a;
2029 //AOS->compute_image(sub, Elt, a, b, verbose_level);
2030 }
2031 else if (A.type_G == action_on_subgroups_t) {
2032 //action_on_subgroups *AOS = A.G.on_subgroups;
2033 //ost << a;
2034 //AOS->compute_image(sub, Elt, a, b, verbose_level);
2035 }
2036 else if (A.type_G == action_on_k_subsets_t) {
2037 //action_on_k_subsets *On_k_subsets = A.G.on_k_subsets;
2038 action *sub;
2039
2040 sub = A.subaction;
2041 if (sub == NULL) {
2042 cout << "induced_action_rank_point no subaction" << endl;
2043 exit(1);
2044 }
2045 //ost << a;
2046 }
2047 else if (A.type_G == action_on_orbits_t) {
2048 //action_on_orbits *On_orbits = A.G.OnOrbits;
2049#if 0
2050 action *sub;
2051
2052 sub = A.subaction;
2053 if (sub == NULL) {
2054 cout << "induced_action_rank_point no subaction" << endl;
2055 exit(1);
2056 }
2057#endif
2058 //ost << a;
2059 }
2060 else if (A.type_G == action_on_bricks_t) {
2061 //action_on_bricks *On_bricks = A.G.OnBricks;
2062 action *sub;
2063
2064 sub = A.subaction;
2065 if (sub == NULL) {
2066 cout << "induced_action_rank_point no subaction" << endl;
2067 exit(1);
2068 }
2069 //ost << a;
2070 }
2071 else if (A.type_G == action_on_andre_t) {
2072 //action_on_andre *OnAndre = A.G.OnAndre;
2073 action *sub;
2074
2075 sub = A.subaction;
2076 if (sub == NULL) {
2077 cout << "induced_action_rank_point no subaction" << endl;
2078 exit(1);
2079 }
2080 //ost << a;
2081 }
2082 else if (A.type_G == action_on_pairs_t) {
2083 action *sub;
2084 //int i, j;
2085
2086 sub = A.subaction;
2087 if (sub == NULL) {
2088 cout << "induced_action_rank_point "
2089 "no subaction, type = action_on_pairs_t" << endl;
2090 exit(1);
2091 }
2092 //k2ij(a, i, j, sub->degree);
2093 //cout << "a={" << i << "," << j << "}";
2094 }
2095 else if (A.type_G == action_on_ordered_pairs_t) {
2096 action *sub;
2097 //int a2, swap, tmp, i, j;
2098
2099 sub = A.subaction;
2100 if (sub == NULL) {
2101 cout << "induced_action_rank_point "
2102 "no subaction, type = action_on_ordered_pairs_t" << endl;
2103 exit(1);
2104 }
2105#if 0
2106 swap = a % 2;
2107 a2 = a / 2;
2108 k2ij(a2, i, j, sub->degree);
2109 if (swap) {
2110 tmp = i;
2111 i = j;
2112 j = tmp;
2113 }
2114 cout << "a=(" << i << "," << j << ")";
2115#endif
2116 }
2117 else if (A.type_G == base_change_t) {
2118 action *sub;
2119 sub = A.subaction;
2120 if (sub == NULL) {
2121 cout << "induced_action_rank_point "
2122 "no subaction, type = base_change_t" << endl;
2123 exit(1);
2124 }
2125 //ost << a;
2126 }
2127 else if (A.type_G == product_action_t) {
2128 //product_action *PA;
2129
2130 //PA = A.G.product_action_data;
2131 //ost << a;
2132 }
2133 else if (A.type_G == action_on_grassmannian_t) {
2134 if (FALSE) {
2135 cout << "action_on_grassmannian_t" << endl;
2136 }
2137 //action_on_grassmannian *AG = A.G.AG;
2138
2139#if 0
2140 action *sub;
2141
2142 sub = A.subaction;
2143 if (sub == NULL) {
2144 cout << "induced_action_rank_point "
2145 "no subaction" << endl;
2146 exit(1);
2147 }
2148 //ost << a;
2149#endif
2150 //AG->print_point(a, ost);
2151 //b = AG->compute_image_int(sub, Elt, a, verbose_level - 1);
2152 }
2153 else if (A.type_G == action_on_spread_set_t) {
2154 if (FALSE) {
2155 cout << "action_on_spread_set_t" << endl;
2156 }
2157 //action_on_spread_set *AS = A.G.AS;
2158
2159 //ost << a;
2160 }
2161 else if (A.type_G == action_on_orthogonal_t) {
2162 if (FALSE) {
2163 cout << "action_on_orthogonal_t" << endl;
2164 }
2165 induced_actions::action_on_orthogonal *AO = A.G.AO;
2166
2167 rk = AO->rank_point(v);
2168 //ost << a;
2169
2170#if 0
2171 action *sub;
2172
2173 sub = A.subaction;
2174 if (sub == NULL) {
2175 cout << "induced_action_rank_point no subaction" << endl;
2176 exit(1);
2177 }
2178 ost << a;
2179#endif
2180 }
2181 else if (A.type_G == action_on_wedge_product_t) {
2182 if (FALSE) {
2183 cout << "induced_action_rank_point "
2184 "action_on_wedge_product_t" << endl;
2185 }
2186 induced_actions::action_on_wedge_product *AW = A.G.AW;
2187
2188 action *sub;
2189
2190 sub = A.subaction;
2191 if (sub == NULL) {
2192 cout << "induced_action_rank_point "
2193 "no subaction" << endl;
2194 exit(1);
2195 }
2196 rk = AW->rank_point(v);
2197 //b = AW->compute_image_int(*sub, Elt, a, verbose_level - 1);
2198 }
2199 else if (A.type_G == action_by_representation_t) {
2200 if (FALSE) {
2201 cout << "induced_action_rank_point "
2202 "action_by_representation_t" << endl;
2203 }
2204 induced_actions::action_by_representation *Rep = A.G.Rep;
2205
2206 rk = Rep->rank_point(v, 0 /* verbose_level*/);
2207 //b = AW->compute_image_int(*sub, Elt, a, verbose_level - 1);
2208 }
2209 else {
2210 cout << "induced_action_rank_point type_G unknown:: type_G = ";
2211 AG.action_print_symmetry_group_type(cout, A.type_G);
2212 cout << endl;
2213 exit(1);
2214 }
2215
2216 return rk;
2217}
2218
2219
2220
2221
2222}}}
2223
2224
2225
2226
void perm_print_with_print_point_function(std::ostream &ost, int *a, int n, void(*point_label)(std::stringstream &sstr, long int pt, void *data), void *point_label_data)
void k2ij_lint(long int k, long int &i, long int &j, long int n)
global functions related to group actions
Definition: actions.h:1015
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
long int compute_image(int *Elt, long int i, int verbose_level)
long int compute_image(int *Elt, long int i, int verbose_level)
long int compute_image(int *Elt, long int i, int verbose_level)
long int compute_image(int *Elt, long int i, int verbose_level)
long int compute_image_int(int *Elt, long int rk, int verbose_level)
long int compute_image(int *Elt, long int a, int verbose_level)
long int compute_image(actions::action *A, int *Elt, long int i, int verbose_level)
#define FREE_int(p)
Definition: foundations.h:640
unsigned char uchar
Definition: foundations.h:204
#define Lint_vec_print(A, B, C)
Definition: foundations.h:686
#define NEW_int(n)
Definition: foundations.h:625
#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
induced_actions::action_on_galois_group * on_Galois_group
induced_actions::action_by_restriction * ABR
induced_actions::action_on_orbits * OnOrbits
induced_actions::action_on_sign * OnSign
induced_actions::action_on_homogeneous_polynomials * OnHP
induced_actions::action_on_spread_set * AS
induced_actions::action_on_wedge_product * AW
induced_actions::action_by_conjugation * ABC
induced_actions::action_by_representation * Rep
induced_actions::action_on_interior_direct_product * OnInteriorDirectProduct
induced_actions::action_on_bricks * OnBricks
induced_actions::action_by_subfield_structure * SubfieldStructure
induced_actions::action_on_grassmannian * AG
induced_actions::action_on_flags * OnFlags
induced_actions::product_action * product_action_data
induced_actions::action_on_sets * on_sets
induced_actions::action_on_set_partitions * OnSetPartitions
induced_actions::action_on_determinant * AD
induced_actions::action_by_right_multiplication * ABRM
induced_actions::action_on_orthogonal * AO
induced_actions::action_on_subgroups * on_subgroups
induced_actions::action_on_factor_space * AF
induced_actions::action_on_cosets * OnCosets
induced_actions::action_on_andre * OnAndre
induced_actions::action_on_k_subsets * on_k_subsets