20namespace layer3_group_actions {
29static long int perm_group_element_image_of(action &A,
long int a,
30 void *elt,
int verbose_level);
31static void perm_group_element_one(action &A,
32 void *elt,
int verbose_level);
33static int perm_group_element_is_one(action &A,
34 void *elt,
int verbose_level);
35static void perm_group_element_unpack(action &A,
36 void *elt,
void *Elt,
int verbose_level);
37static void perm_group_element_pack(action &A,
38 void *Elt,
void *elt,
int verbose_level);
39static void perm_group_element_retrieve(action &A,
40 int hdl,
void *elt,
int verbose_level);
41static int perm_group_element_store(action &A,
42 void *elt,
int verbose_level);
43static void perm_group_element_mult(action &A,
44 void *a,
void *b,
void *ab,
int verbose_level);
45static void perm_group_element_invert(action &A,
46 void *a,
void *av,
int verbose_level);
47static void perm_group_element_move(action &A,
48 void *a,
void *b,
int verbose_level);
49static void perm_group_element_dispose(action &A,
50 int hdl,
int verbose_level);
51static void perm_group_element_print(action &A,
52 void *elt, std::ostream &ost);
53static void perm_group_element_print_latex(action &A,
54 void *elt, std::ostream &ost);
55static void perm_group_element_print_latex_with_print_point_function(
57 void *elt, std::ostream &ost,
58 void (*point_label)(std::stringstream &sstr,
long int pt,
void *data),
59 void *point_label_data);
60static void perm_group_element_print_verbose(action &A,
61 void *elt, std::ostream &ost);
62static void perm_group_element_code_for_make_element(action &A,
63 void *elt,
int *data);
64static void perm_group_element_print_for_make_element(action &A,
65 void *elt, std::ostream &ost);
66static void perm_group_element_print_for_make_element_no_commas(
67 action &A,
void *elt, std::ostream &ost);
68static void perm_group_print_point(action &A,
long int a, std::ostream &ost);
73 label.assign(
"function_pointers_permutation_group");
93 perm_group_element_print_latex_with_print_point_function;
96 perm_group_element_code_for_make_element;
98 perm_group_element_print_for_make_element;
100 perm_group_element_print_for_make_element_no_commas;
104static long int perm_group_element_image_of(
action &A,
105 long int a,
void *elt,
int verbose_level)
107 int f_v = (verbose_level >= 1);
109 int *Elt = (
int *) elt;
113 cout <<
"perm_group_element_image_of "
127 yy = Elt[G.
m + y] - G.
m;
135 cout <<
" is " << b << endl;
140static void perm_group_element_one(action &A,
141 void *elt,
int verbose_level)
143 int f_v = (verbose_level >= 1);
144 groups::permutation_representation_domain &G = *A.G.perm_grp;
145 int *Elt = (
int *) elt;
148 cout <<
"perm_group_element_one ";
153static int perm_group_element_is_one(action &A,
void *elt,
int verbose_level)
155 int f_v = (verbose_level >= 1);
156 groups::permutation_representation_domain &G = *A.G.perm_grp;
157 int *Elt = (
int *) elt;
161 cout <<
"perm_group_element_is_one ";
163 f_is_one = G.is_one(Elt);
166 cout <<
" YES" << endl;
168 cout <<
" NO" << endl;
173static void perm_group_element_unpack(action &A,
174 void *elt,
void *Elt,
int verbose_level)
176 int f_v = (verbose_level >= 1);
177 groups::permutation_representation_domain &G = *A.G.perm_grp;
178 int *Elt1 = (
int *) Elt;
182 cout <<
"perm_group_element_unpack" << endl;
184 G.unpack(elt1, Elt1);
187static void perm_group_element_pack(action &A,
188 void *Elt,
void *elt,
int verbose_level)
190 int f_v = (verbose_level >= 1);
191 groups::permutation_representation_domain &G = *A.G.perm_grp;
192 int *Elt1 = (
int *) Elt;
196 cout <<
"perm_group_element_pack" << endl;
201static void perm_group_element_retrieve(action &A,
202 int hdl,
void *elt,
int verbose_level)
204 int f_v = (verbose_level >= 1);
205 groups::permutation_representation_domain &G = *A.G.perm_grp;
206 int *Elt = (
int *) elt;
210 cout <<
"perm_group_element_retrieve hdl = " << hdl << endl;
218 int i, j, ii, l, q, r;
222 for (ii = A.base_len - 1; ii >= 0; ii--) {
223 l = A.transversal_length[ii];
233 A.element_one(G.Eltrk1, 0);
234 for (i = 0; i < A.base_len; i++) {
239 A.element_mult(A.transversal_reps[i] +
240 j * A.elt_size_in_int, G.Eltrk1, G.Eltrk2, 0);
241 A.element_move(G.Eltrk2, G.Eltrk1, 0);
243 A.element_move(G.Eltrk1, Elt, 0);
248 p_elt = G.Elts->s_i(hdl);
249 G.unpack(p_elt, Elt);
256static int perm_group_element_store(action &A,
void *elt,
int verbose_level)
258 int f_v = (verbose_level >= 1);
259 groups::permutation_representation_domain &G = *A.G.perm_grp;
260 int *Elt = (
int *) elt;
264 cout <<
"perm_group_element_store()" << endl;
272 A.element_move(elt, G.Eltrk1, 0);
274 for (i = 0; i < A.base_len; i++) {
276 l = A.transversal_length[i];
284 jj = A.element_image_of(bi, G.Eltrk1, 0);
285 j = A.orbit_inv[i][jj];
289 cout <<
"perm_group_element_store() j >= l" << endl;
299 G.invert(A.transversal_reps[i] +
300 j * A.elt_size_in_int, G.Eltrk2);
309 A.element_mult(G.Eltrk1, G.Eltrk2, G.Eltrk3, 0);
315 A.element_move(G.Eltrk3, G.Eltrk1, 0);
326 hdl = G.Elts->store(G.elt1);
329 cout <<
"hdl = " << hdl << endl;
334static void perm_group_element_mult(action &A,
335 void *a,
void *b,
void *ab,
int verbose_level)
337 int f_v = (verbose_level >= 1);
338 groups::permutation_representation_domain &G = *A.G.perm_grp;
341 int *AB = (
int *) ab;
345 cout <<
"perm_group_element_mult degree=" << G.degree << endl;
346 cout <<
"A=" << endl;
349 cout <<
"B=" << endl;
355 cout <<
"degree=" << G.degree << endl;
356 cout <<
"AB=" << endl;
362static void perm_group_element_invert(action &A,
363 void *a,
void *av,
int verbose_level)
365 int f_v = (verbose_level >= 1);
366 groups::permutation_representation_domain &G = *A.G.perm_grp;
368 int *AAv = (
int *) av;
371 cout <<
"perm_group_element_invert" << endl;
372 cout <<
"A=" << endl;
377 cout <<
"Av=" << endl;
382static void perm_group_element_move(action &A,
383 void *a,
void *b,
int verbose_level)
385 int f_v = (verbose_level >= 1);
386 groups::permutation_representation_domain &G = *A.G.perm_grp;
391 cout <<
"perm_group_element_move" << endl;
396static void perm_group_element_dispose(action &A,
397 int hdl,
int verbose_level)
399 int f_v = (verbose_level >= 1);
400 groups::permutation_representation_domain &G = *A.G.perm_grp;
403 cout <<
"perm_group_element_dispose hdl = " << hdl << endl;
409 G.Elts->dispose(hdl);
413static void perm_group_element_print(action &A,
414 void *elt, ostream &ost)
416 groups::permutation_representation_domain &G = *A.G.perm_grp;
417 int *Elt = (
int *) elt;
426static void perm_group_element_print_latex(action &A,
427 void *elt, ostream &ost)
429 groups::permutation_representation_domain &G = *A.G.perm_grp;
430 int *Elt = (
int *) elt;
436static void perm_group_element_print_latex_with_print_point_function(
438 void *elt, std::ostream &ost,
439 void (*point_label)(std::stringstream &sstr,
long int pt,
void *data),
440 void *point_label_data)
442 groups::permutation_representation_domain &G = *A.G.perm_grp;
443 int *Elt = (
int *) elt;
445 G.print_with_print_point_function(Elt, ost, point_label, point_label_data);
450static void perm_group_element_print_verbose(action &A,
451 void *elt, ostream &ost)
453 groups::permutation_representation_domain &G = *A.G.perm_grp;
454 int *Elt = (
int *) elt;
459static void perm_group_element_code_for_make_element(action &A,
460 void *elt,
int *data)
462 groups::permutation_representation_domain &G = *A.G.perm_grp;
463 int *Elt = (
int *) elt;
465 G.code_for_make_element(Elt, data);
468static void perm_group_element_print_for_make_element(action &A,
469 void *elt, ostream &ost)
471 groups::permutation_representation_domain &G = *A.G.perm_grp;
472 int *Elt = (
int *) elt;
474 G.print_for_make_element(Elt, ost);
477static void perm_group_element_print_for_make_element_no_commas(action &A,
478 void *elt, ostream &ost)
480 groups::permutation_representation_domain &G = *A.G.perm_grp;
481 int *Elt = (
int *) elt;
483 G.print_for_make_element_no_commas(Elt, ost);
487static void perm_group_print_point(action &A,
long int a, ostream &ost)
489 groups::permutation_representation_domain &G = *A.G.perm_grp;
491 if (G.f_product_action) {
493 cout <<
"r_{" << a <<
"}";
501 cout <<
"(" << x <<
"," << y <<
")";
a collection of combinatorial functions
void perm_print_list(std::ostream &ost, int *a, int n)
void(* ptr_element_print_for_make_element)(action &A, void *elt, std::ostream &ost)
void(* ptr_element_dispose)(action &A, int hdl, int verbose_level)
int(* ptr_element_linear_entry_frobenius)(action &A, void *elt, int verbose_level)
void(* ptr_element_transpose)(action &A, void *a, void *at, int verbose_level)
void(* ptr_element_print)(action &A, void *elt, std::ostream &ost)
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)
void(* ptr_element_print_quick)(action &A, void *elt, std::ostream &ost)
int(* ptr_element_linear_entry_ij)(action &A, void *elt, int i, int j, int verbose_level)
void init_function_pointers_permutation_group()
void(* ptr_element_unpack)(action &A, void *elt, void *Elt, int verbose_level)
void(* ptr_element_move)(action &A, void *a, void *b, int verbose_level)
void(* ptr_element_image_of_low_level)(action &A, int *input, int *output, void *elt, int verbose_level)
int(* ptr_element_is_one)(action &A, void *elt, int verbose_level)
long int(* ptr_element_image_of)(action &A, long int a, void *elt, int verbose_level)
void(* ptr_element_print_for_make_element_no_commas)(action &A, void *elt, std::ostream &ost)
void(* ptr_print_point)(action &A, long int i, std::ostream &ost)
void(* ptr_element_invert)(action &A, void *a, void *av, int verbose_level)
void(* ptr_element_print_latex)(action &A, void *elt, std::ostream &ost)
void(* ptr_element_one)(action &A, void *elt, int verbose_level)
void(* ptr_element_print_verbose)(action &A, void *elt, std::ostream &ost)
void(* ptr_element_code_for_make_element)(action &A, void *elt, int *data)
void(* ptr_element_retrieve)(action &A, int hdl, void *elt, int verbose_level)
void(* ptr_element_pack)(action &A, void *Elt, void *elt, int verbose_level)
int(* ptr_element_store)(action &A, void *elt, int verbose_level)
void(* ptr_element_mult)(action &A, void *a, void *b, void *ab, int verbose_level)
a permutation group in a fixed action.
a domain for permutation groups whose elements are given in the permutation representation
the orbiter library for the classification of combinatorial objects
groups::permutation_representation_domain * perm_grp