18namespace layer3_group_actions {
27static long int direct_product_group_element_image_of(action &A,
long int a,
28 void *elt,
int verbose_level);
29static void direct_product_group_element_image_of_low_level(action &A,
30 int *input,
int *output,
void *elt,
int verbose_level);
31static int direct_product_group_element_linear_entry_ij(action &A,
32 void *elt,
int i,
int j,
int verbose_level);
33static int direct_product_group_element_linear_entry_frobenius(action &A,
34 void *elt,
int verbose_level);
35static void direct_product_group_element_one(action &A,
36 void *elt,
int verbose_level);
37static int direct_product_group_element_is_one(action &A,
38 void *elt,
int verbose_level);
39static void direct_product_group_element_unpack(action &A,
40 void *elt,
void *Elt,
int verbose_level);
41static void direct_product_group_element_pack(action &A,
42 void *Elt,
void *elt,
int verbose_level);
43static void direct_product_group_element_retrieve(action &A,
44 int hdl,
void *elt,
int verbose_level);
45static int direct_product_group_element_store(action &A,
46 void *elt,
int verbose_level);
47static void direct_product_group_element_mult(action &A,
48 void *a,
void *b,
void *ab,
int verbose_level);
49static void direct_product_group_element_invert(action &A,
50 void *a,
void *av,
int verbose_level);
51static void direct_product_group_element_transpose(action &A,
52 void *a,
void *at,
int verbose_level);
53static void direct_product_group_element_move(action &A,
54 void *a,
void *b,
int verbose_level);
55static void direct_product_group_element_dispose(action &A,
56 int hdl,
int verbose_level);
57static void direct_product_group_element_print(action &A,
58 void *elt, std::ostream &ost);
59static void direct_product_group_element_code_for_make_element(
60 action &A,
void *elt,
int *data);
61static void direct_product_group_element_print_for_make_element(
62 action &A,
void *elt, std::ostream &ost);
63static void direct_product_group_element_print_for_make_element_no_commas(
64 action &A,
void *elt, std::ostream &ost);
65static void direct_product_group_element_print_quick(action &A,
66 void *elt, std::ostream &ost);
67static void direct_product_group_element_print_latex(action &A,
68 void *elt, std::ostream &ost);
69static void direct_product_group_element_print_latex_with_print_point_function(
71 void *elt, std::ostream &ost,
72 void (*point_label)(std::stringstream &sstr,
long int pt,
void *data),
73 void *point_label_data);
76static void direct_product_group_element_print_verbose(action &A,
77 void *elt, std::ostream &ost);
78static void direct_product_group_print_point(action &A,
79 long int a, std::ostream &ost);
86 label.assign(
"function_pointers_direct_product_group");
89 direct_product_group_element_image_of_low_level;
91 direct_product_group_element_linear_entry_ij;
93 direct_product_group_element_linear_entry_frobenius;
109 direct_product_group_element_print_latex_with_print_point_function;
112 direct_product_group_element_code_for_make_element;
114 direct_product_group_element_print_for_make_element;
116 direct_product_group_element_print_for_make_element_no_commas;
122static long int direct_product_group_element_image_of(
action &A,
123 long int a,
void *elt,
int verbose_level)
125 int f_v = (verbose_level >= 1);
127 int *Elt = (
int *) elt;
131 cout <<
"direct_product_group_element_image_of "
132 "computing image of " << a << endl;
133 cout <<
"verbose_level = " << verbose_level << endl;
138 cout <<
"direct_product_group_element_image_of "
139 "image of " << a <<
" is " << b << endl;
144static void direct_product_group_element_image_of_low_level(action &A,
145 int *input,
int *output,
void *elt,
int verbose_level)
147 cout <<
"direct_product_group_element_image_of_low_level "
152static int direct_product_group_element_linear_entry_ij(action &A,
153 void *elt,
int i,
int j,
int verbose_level)
155 cout <<
"direct_product_group_element_linear_entry_ij "
160static int direct_product_group_element_linear_entry_frobenius(action &A,
161 void *elt,
int verbose_level)
163 cout <<
"direct_product_group_element_linear_entry_frobenius "
168static void direct_product_group_element_one(action &A,
169 void *elt,
int verbose_level)
171 int f_v = (verbose_level >= 1);
172 groups::direct_product &P = *A.G.direct_product_group;
173 int *Elt = (
int *) elt;
176 cout <<
"direct_product_group_element_one "
177 "calling element_one" << endl;
182static int direct_product_group_element_is_one(action &A,
183 void *elt,
int verbose_level)
185 int f_v = (verbose_level >= 1);
186 groups::direct_product &P = *A.G.direct_product_group;
187 int *Elt = (
int *) elt;
191 cout <<
"direct_product_group_element_one calling "
192 "element_is_one" << endl;
194 ret = P.element_is_one(Elt);
197 cout <<
"direct_product_group_element_is_one "
198 "returns YES" << endl;
201 cout <<
"direct_product_group_element_is_one "
202 "returns NO" << endl;
208static void direct_product_group_element_unpack(action &A,
209 void *elt,
void *Elt,
int verbose_level)
211 int f_v = (verbose_level >= 1);
212 groups::direct_product &P = *A.G.direct_product_group;
213 int *Elt1 = (
int *) Elt;
217 cout <<
"direct_product_group_element_unpack" << endl;
219 P.element_unpack(elt1, Elt1);
222static void direct_product_group_element_pack(action &A,
223 void *Elt,
void *elt,
int verbose_level)
225 int f_v = (verbose_level >= 1);
226 groups::direct_product &P = *A.G.direct_product_group;
227 int *Elt1 = (
int *) Elt;
231 cout <<
"direct_product_group_element_pack" << endl;
233 P.element_pack(Elt1, elt1);
236static void direct_product_group_element_retrieve(action &A,
237 int hdl,
void *elt,
int verbose_level)
239 int f_v = (verbose_level >= 1);
240 groups::direct_product &P = *A.G.direct_product_group;
241 int *Elt = (
int *) elt;
245 cout <<
"direct_product_group_element_"
246 "retrieve hdl = " << hdl << endl;
248 p_elt = P.Elts->s_i(hdl);
252 P.element_unpack(p_elt, Elt);
254 P.element_print_easy(Elt, cout);
258static int direct_product_group_element_store(action &A,
259 void *elt,
int verbose_level)
261 int f_v = (verbose_level >= 1);
262 groups::direct_product &P = *A.G.direct_product_group;
263 int *Elt = (
int *) elt;
267 cout <<
"direct_product_group_element_store" << endl;
269 P.element_pack(Elt, P.elt1);
270 hdl = P.Elts->store(P.elt1);
272 cout <<
"direct_product_group_element_store "
273 "hdl = " << hdl << endl;
278static void direct_product_group_element_mult(action &A,
279 void *a,
void *b,
void *ab,
int verbose_level)
281 int f_v = (verbose_level >= 1);
282 int f_vv = (verbose_level >= 2);
283 groups::direct_product &P = *A.G.direct_product_group;
286 int *AB = (
int *) ab;
289 cout <<
"direct_product_group_element_mult" << endl;
292 cout <<
"A=" << endl;
293 P.element_print_easy(AA, cout);
294 cout <<
"B=" << endl;
295 P.element_print_easy(BB, cout);
297 P.element_mult(AA, BB, AB, verbose_level - 2);
299 cout <<
"direct_product_group_element_mult done" << endl;
302 cout <<
"AB=" << endl;
303 P.element_print_easy(AB, cout);
307static void direct_product_group_element_invert(action &A,
308 void *a,
void *av,
int verbose_level)
310 int f_v = (verbose_level >= 1);
311 int f_vv = (verbose_level >= 2);
312 groups::direct_product &P = *A.G.direct_product_group;
314 int *AAv = (
int *) av;
317 cout <<
"direct_product_group_element_invert" << endl;
320 cout <<
"A=" << endl;
321 P.element_print_easy(AA, cout);
323 P.element_invert(AA, AAv, verbose_level - 1);
325 cout <<
"direct_product_group_element_invert done" << endl;
328 cout <<
"Av=" << endl;
329 P.element_print_easy(AAv, cout);
333static void direct_product_group_element_transpose(action &A,
334 void *a,
void *at,
int verbose_level)
336 cout <<
"direct_product_group_element_transpose "
337 "not yet implemented" << endl;
341static void direct_product_group_element_move(action &A,
342 void *a,
void *b,
int verbose_level)
344 int f_v = (verbose_level >= 1);
345 groups::direct_product &P = *A.G.direct_product_group;
350 cout <<
"direct_product_group_element_move" << endl;
352 P.element_move(AA, BB, 0 );
355static void direct_product_group_element_dispose(action &A,
356 int hdl,
int verbose_level)
358 int f_v = (verbose_level >= 1);
359 groups::direct_product &P = *A.G.direct_product_group;
362 cout <<
"direct_product_group_element_dispose "
363 "hdl = " << hdl << endl;
365 P.Elts->dispose(hdl);
368static void direct_product_group_element_print(action &A,
369 void *elt, ostream &ost)
371 groups::direct_product &P = *A.G.direct_product_group;
372 int *Elt = (
int *) elt;
375 P.element_print_easy(Elt, ost);
379static void direct_product_group_element_code_for_make_element(action &A,
380 void *elt,
int *data)
382 cout <<
"direct_product_group_element_code_for_make_element "
383 "not yet implemented" << endl;
387static void direct_product_group_element_print_for_make_element(action &A,
388 void *elt, ostream &ost)
390 groups::direct_product *P = A.G.direct_product_group;
391 int *Elt = (
int *) elt;
393 P->M1->GL_print_for_make_element(Elt + P->offset_i(0), ost);
395 P->M2->GL_print_for_make_element(Elt + P->offset_i(1), ost);
401static void direct_product_group_element_print_for_make_element_no_commas(
402 action &A,
void *elt, ostream &ost)
404 groups::direct_product *P = A.G.direct_product_group;
405 int *Elt = (
int *) elt;
407 P->M1->GL_print_for_make_element(Elt + P->offset_i(0), ost);
409 P->M2->GL_print_for_make_element(Elt + P->offset_i(1), ost);
415static void direct_product_group_element_print_quick(
416 action &A,
void *elt, ostream &ost)
418 groups::direct_product &P = *A.G.direct_product_group;
419 int *Elt = (
int *) elt;
421 P.element_print_easy(Elt, ost);
425static void direct_product_group_element_print_latex(
426 action &A,
void *elt, ostream &ost)
428 cout <<
"direct_product_group_element_print_latex "
429 "not yet implemented" << endl;
434static void direct_product_group_element_print_latex_with_print_point_function(
436 void *elt, std::ostream &ost,
437 void (*point_label)(std::stringstream &sstr,
long int pt,
void *data),
438 void *point_label_data)
440 cout <<
"direct_product_group_element_print_latex_with_print_point_function "
441 "not yet implemented" << endl;
447static void direct_product_group_element_print_as_permutation(
448 action &A,
void *elt, ostream &ost)
451 combinatorics_domain Combi;
453 int *Elt = (
int *) elt;
457 cout <<
"direct_product_group_element_print_as_permutation "
458 "degree = " << A.degree << endl;
461 for (i = 0; i < A.degree; i++) {
468 j = A.element_image_of(i, Elt, 0 );
471 Combi.perm_print(ost, p, A.degree);
476static void direct_product_group_element_print_verbose(
477 action &A,
void *elt, ostream &ost)
479 groups::direct_product &P = *A.G.direct_product_group;
480 int *Elt = (
int *) elt;
482 P.element_print_easy(Elt, ost);
485static void direct_product_group_print_point(action &A,
long int a, ostream &ost)
487 cout <<
"direct_product_group_print_point "
488 "not yet implemented" << endl;
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 init_function_pointers_direct_product_group()
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(* 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.
the direct product of two matrix groups in product action
long int element_image_of(int *Elt, long int a, int verbose_level)
void element_one(int *Elt)
the orbiter library for the classification of combinatorial objects
groups::direct_product * direct_product_group