17namespace layer5_applications {
18namespace user_interface {
23 f_count_subprimitive =
FALSE;
24 count_subprimitive_Q_max = 0;
25 count_subprimitive_H_max = 0;
26 f_equivalence_class_of_fractions =
FALSE;
27 equivalence_class_of_fractions_N = 0;
30 f_character_table_symmetric_group =
FALSE;
31 character_table_symmetric_group_n = 0;
33 f_make_A5_in_PSL_2_q =
FALSE;
34 make_A5_in_PSL_2_q_q = 0;
37 f_search_for_primitive_polynomial_in_range =
FALSE;
43 f_order_of_q_mod_n =
FALSE;
44 order_of_q_mod_n_q = 0;
45 order_of_q_mod_n_n_min = 0;
46 order_of_q_mod_n_n_max = 0;
48 f_eulerfunction_interval =
FALSE;
49 eulerfunction_interval_n_min = 0;
50 eulerfunction_interval_n_max = 0;
52 f_young_symmetrizer =
FALSE;
53 young_symmetrizer_n = 0;
55 f_young_symmetrizer_sym_4 =
FALSE;
59 Draw_mod_n_description = NULL;
61 f_power_function_mod_n =
FALSE;
62 power_function_mod_n_k = 0;
63 power_function_mod_n_n = 0;
66 f_all_rational_normal_forms =
FALSE;
68 all_rational_normal_forms_d = 0;
71 f_eigenstuff_from_file =
FALSE;
82 std::string *argv,
int i,
int verbose_level)
86 if (ST.
stringcmp(argv[i],
"-count_subprimitive") == 0) {
87 cout <<
"-count_subprimitive <int : Q_max> <int : H_max>" << endl;
89 else if (ST.
stringcmp(argv[i],
"-equivalence_class_of_fractions") == 0) {
90 cout <<
"-equivalence_class_of_fractions <int : N> " << endl;
92 else if (ST.
stringcmp(argv[i],
"-character_table_symmetric_group") == 0) {
93 cout <<
"-character_table_symmetric_group <int : deg> " << endl;
95 else if (ST.
stringcmp(argv[i],
"-make_A5_in_PSL_2_q") == 0) {
96 cout <<
"-make_A5_in_PSL_2_q <int : q> " << endl;
98 else if (ST.
stringcmp(argv[i],
"-search_for_primitive_polynomial_in_range") == 0) {
99 cout <<
"-search_for_primitive_polynomial_in_range " << endl;
101 else if (ST.
stringcmp(argv[i],
"-order_of_q_mod_n") == 0) {
102 cout <<
"-order_of_q_mod_n <int : q> <int : n_min> <int : n_max> " << endl;
104 else if (ST.
stringcmp(argv[i],
"-eulerfunction_interval") == 0) {
105 cout <<
"-eulerfunction_interval <int : n_min> <int : n_max> " << endl;
107 else if (ST.
stringcmp(argv[i],
"-young_symmetrizer") == 0) {
108 cout <<
"-young_symmetrizer " << endl;
110 else if (ST.
stringcmp(argv[i],
"-young_symmetrizer_sym_4") == 0) {
111 cout <<
"-young_symmetrizer_sym_4 " << endl;
113 else if (ST.
stringcmp(argv[i],
"-draw_mod_n") == 0) {
114 cout <<
"-draw_mod_n descr -end" << endl;
116 else if (ST.
stringcmp(argv[i],
"-power_function_mod_n") == 0) {
117 cout <<
"-power_function_mod_n <int : a> <int : n>" << endl;
119 else if (ST.
stringcmp(argv[i],
"-all_rational_normal_forms") == 0) {
120 cout <<
"-all_rational_normal_forms <string : finite_field_label> <int : degree>" << endl;
122 else if (ST.
stringcmp(argv[i],
"-eigenstuff") == 0) {
123 cout <<
"-eigenstuff <string : finite_field_label> <int : n> <intvec : coeffs>" << endl;
125 else if (ST.
stringcmp(argv[i],
"-eigenstuff_from_file") == 0) {
126 cout <<
"-eigenstuff_from_file <string : finite_field_label> <int : n> <string : fname>" << endl;
132 std::string *argv,
int i,
int verbose_level)
134 int f_v = (verbose_level >= 1);
138 cout <<
"interface_algebra::recognize_keyword" << endl;
143 if (ST.
stringcmp(argv[i],
"-count_subprimitive") == 0) {
146 else if (ST.
stringcmp(argv[i],
"-equivalence_class_of_fractions") == 0) {
149 else if (ST.
stringcmp(argv[i],
"-character_table_symmetric_group") == 0) {
152 else if (ST.
stringcmp(argv[i],
"-make_A5_in_PSL_2_q") == 0) {
155 else if (ST.
stringcmp(argv[i],
"-search_for_primitive_polynomial_in_range") == 0) {
158 else if (ST.
stringcmp(argv[i],
"-order_of_q_mod_n") == 0) {
161 else if (ST.
stringcmp(argv[i],
"-eulerfunction_interval") == 0) {
164 else if (ST.
stringcmp(argv[i],
"-young_symmetrizer") == 0) {
167 else if (ST.
stringcmp(argv[i],
"-young_symmetrizer_sym_4") == 0) {
170 else if (ST.
stringcmp(argv[i],
"-draw_mod_n") == 0) {
173 else if (ST.
stringcmp(argv[i],
"-power_function_mod_n") == 0) {
176 else if (ST.
stringcmp(argv[i],
"-all_rational_normal_forms") == 0) {
179 else if (ST.
stringcmp(argv[i],
"-eigenstuff") == 0) {
182 else if (ST.
stringcmp(argv[i],
"-eigenstuff_from_file") == 0) {
186 cout <<
"interface_algebra::recognize_keyword not recognizing" << endl;
193 std::string *argv,
int &i,
int verbose_level)
195 int f_v = (verbose_level >= 1);
199 cout <<
"interface_algebra::read_arguments" << endl;
204 cout <<
"interface_algebra::read_arguments the next argument is " << argv[i] << endl;
207 if (ST.
stringcmp(argv[i],
"-count_subprimitive") == 0) {
208 f_count_subprimitive =
TRUE;
209 count_subprimitive_Q_max = ST.
strtoi(argv[++i]);
210 count_subprimitive_H_max = ST.
strtoi(argv[++i]);
211 cout <<
"-count_subprimitive "
212 << count_subprimitive_Q_max
213 <<
" " << count_subprimitive_H_max
216 else if (ST.
stringcmp(argv[i],
"-equivalence_class_of_fractions") == 0) {
217 f_equivalence_class_of_fractions =
TRUE;
218 equivalence_class_of_fractions_N = ST.
strtoi(argv[++i]);
219 cout <<
"-equivalence_class_of_fractions " << equivalence_class_of_fractions_N
222 else if (ST.
stringcmp(argv[i],
"-character_table_symmetric_group") == 0) {
223 f_character_table_symmetric_group =
TRUE;
224 character_table_symmetric_group_n = ST.
strtoi(argv[++i]);
225 cout <<
"-character_table_symmetric_group " << character_table_symmetric_group_n << endl;
227 else if (ST.
stringcmp(argv[i],
"-make_A5_in_PSL_2_q") == 0) {
228 f_make_A5_in_PSL_2_q =
TRUE;
229 make_A5_in_PSL_2_q_q = ST.
strtoi(argv[++i]);
230 cout <<
"-make_A5_in_PSL_2_q " << make_A5_in_PSL_2_q_q << endl;
232 else if (ST.
stringcmp(argv[i],
"-search_for_primitive_polynomial_in_range") == 0) {
233 f_search_for_primitive_polynomial_in_range =
TRUE;
234 p_min = ST.
strtoi(argv[++i]);
235 p_max = ST.
strtoi(argv[++i]);
236 deg_min = ST.
strtoi(argv[++i]);
237 deg_max = ST.
strtoi(argv[++i]);
238 cout <<
"-search_for_primitive_polynomial_in_range " << p_min
241 <<
" " << deg_max <<
" " << endl;
244 else if (ST.
stringcmp(argv[i],
"-order_of_q_mod_n") == 0) {
245 f_order_of_q_mod_n =
TRUE;
246 order_of_q_mod_n_q = ST.
strtoi(argv[++i]);
247 order_of_q_mod_n_n_min = ST.
strtoi(argv[++i]);
248 order_of_q_mod_n_n_max = ST.
strtoi(argv[++i]);
249 cout <<
"-order_of_q_mod_n " << order_of_q_mod_n_q
250 <<
" " << order_of_q_mod_n_n_min
251 <<
" " << order_of_q_mod_n_n_max <<
" " << endl;
254 else if (ST.
stringcmp(argv[i],
"-eulerfunction_interval") == 0) {
255 f_eulerfunction_interval =
TRUE;
256 eulerfunction_interval_n_min = ST.
strtoi(argv[++i]);
257 eulerfunction_interval_n_max = ST.
strtoi(argv[++i]);
258 cout <<
"-eulerfunction_interval "
259 <<
" " << eulerfunction_interval_n_min
260 <<
" " << eulerfunction_interval_n_max <<
" " << endl;
265 else if (ST.
stringcmp(argv[i],
"-young_symmetrizer") == 0) {
266 f_young_symmetrizer =
TRUE;
267 young_symmetrizer_n = ST.
strtoi(argv[++i]);
268 cout <<
"-young_symmetrizer " <<
" " << young_symmetrizer_n << endl;
270 else if (ST.
stringcmp(argv[i],
"-young_symmetrizer_sym_4") == 0) {
271 f_young_symmetrizer_sym_4 =
TRUE;
272 cout <<
"-young_symmetrizer_sym_4 " << endl;
274 else if (ST.
stringcmp(argv[i],
"-draw_mod_n") == 0) {
276 cout <<
"-draw_mod_n " << endl;
279 argv + i + 1, verbose_level);
281 cout <<
"interface_algebra::read_arguments finished "
282 "reading -draw_mod_n" << endl;
283 cout <<
"i = " << i << endl;
284 cout <<
"argc = " << argc << endl;
286 cout <<
"next argument is " << argv[i] << endl;
288 cout <<
"-draw_mod_n " << endl;
290 else if (ST.
stringcmp(argv[i],
"-power_function_mod_n") == 0) {
291 f_power_function_mod_n =
TRUE;
292 power_function_mod_n_k = ST.
strtoi(argv[++i]);
293 power_function_mod_n_n = ST.
strtoi(argv[++i]);
294 cout <<
"-power_mod_n " <<
" "
295 << power_function_mod_n_k <<
" "
296 << power_function_mod_n_n << endl;
298 else if (ST.
stringcmp(argv[i],
"-all_rational_normal_forms") == 0) {
299 f_all_rational_normal_forms =
TRUE;
300 all_rational_normal_forms_finite_field_label.assign(argv[++i]);
301 all_rational_normal_forms_d = ST.
strtoi(argv[++i]);
303 cout <<
"-f_all_rational_normal_forms "
304 << all_rational_normal_forms_finite_field_label
305 <<
" " << all_rational_normal_forms_d << endl;
308 else if (ST.
stringcmp(argv[i],
"-eigenstuff") == 0) {
310 eigenstuff_finite_field_label.assign(argv[++i]);
311 eigenstuff_n = ST.
strtoi(argv[++i]);
312 eigenstuff_coeffs.assign(argv[++i]);
314 cout <<
"-eigenstuff "
315 << eigenstuff_finite_field_label
316 <<
" " << eigenstuff_n
317 <<
" " << eigenstuff_coeffs << endl;
320 else if (ST.
stringcmp(argv[i],
"-eigenstuff_matrix_from_file") == 0) {
321 f_eigenstuff_from_file =
TRUE;
322 eigenstuff_finite_field_label.assign(argv[++i]);
323 eigenstuff_n = ST.
strtoi(argv[++i]);
324 eigenstuff_fname.assign(argv[++i]);
326 cout <<
"-eigenstuff_from_file "
327 << eigenstuff_finite_field_label
328 <<
" " << eigenstuff_n
329 <<
" " << eigenstuff_fname << endl;
338 if (f_count_subprimitive) {
339 cout <<
"-count_subprimitive "
340 << count_subprimitive_Q_max
341 <<
" " << count_subprimitive_H_max
344 if (f_equivalence_class_of_fractions) {
345 cout <<
"-equivalence_class_of_fractions "
346 << equivalence_class_of_fractions_N
349 if (f_character_table_symmetric_group) {
350 cout <<
"-character_table_symmetric_group " << character_table_symmetric_group_n << endl;
352 if (f_make_A5_in_PSL_2_q) {
353 cout <<
"-make_A5_in_PSL_2_q " << make_A5_in_PSL_2_q_q << endl;
355 if (f_search_for_primitive_polynomial_in_range) {
356 cout <<
"-search_for_primitive_polynomial_in_range " << p_min
359 <<
" " << deg_max <<
" " << endl;
362 if (f_order_of_q_mod_n) {
363 cout <<
"-order_of_q_mod_n " << order_of_q_mod_n_q
364 <<
" " << order_of_q_mod_n_n_min
365 <<
" " << order_of_q_mod_n_n_max <<
" " << endl;
368 if (f_eulerfunction_interval) {
369 cout <<
"-eulerfunction_interval "
370 <<
" " << eulerfunction_interval_n_min
371 <<
" " << eulerfunction_interval_n_max <<
" " << endl;
374 if (f_young_symmetrizer) {
375 cout <<
"-young_symmetrizer " <<
" " << young_symmetrizer_n << endl;
377 if (f_young_symmetrizer_sym_4) {
378 cout <<
"-young_symmetrizer_sym_4 " << endl;
381 cout <<
"-draw_mod_n " << endl;
382 Draw_mod_n_description->
print();
384 if (f_power_function_mod_n) {
385 cout <<
"-power_function_mod_n " <<
" " << power_function_mod_n_k <<
" " << power_function_mod_n_n << endl;
388 if (f_all_rational_normal_forms) {
389 cout <<
"-all_rational_normal_forms "
390 << all_rational_normal_forms_finite_field_label
391 <<
" " << all_rational_normal_forms_d << endl;
394 cout <<
"-eigenstuff "
395 << eigenstuff_finite_field_label <<
" "
396 << eigenstuff_n <<
" "
397 << eigenstuff_coeffs << endl;
399 if (f_eigenstuff_from_file) {
400 cout <<
"-eigenstuff_from_file "
401 << eigenstuff_finite_field_label <<
" " << eigenstuff_n
402 <<
" " << eigenstuff_fname << endl;
410 int f_v = (verbose_level >= 1);
413 cout <<
"interface_algebra::worker" << endl;
416 if (f_character_table_symmetric_group) {
420 else if (f_make_A5_in_PSL_2_q) {
424 A.
A5_in_PSL_(make_A5_in_PSL_2_q_q, verbose_level);
428 else if (f_count_subprimitive) {
433 count_subprimitive_H_max);
436 else if (f_equivalence_class_of_fractions) {
444 else if (f_search_for_primitive_polynomial_in_range) {
449 p_min, p_max, deg_min, deg_max,
453 else if (f_order_of_q_mod_n) {
458 order_of_q_mod_n_q, order_of_q_mod_n_n_min, order_of_q_mod_n_n_max,
463 else if (f_eulerfunction_interval) {
468 eulerfunction_interval_n_min, eulerfunction_interval_n_max,
474 else if (f_young_symmetrizer) {
480 else if (f_young_symmetrizer_sym_4) {
486 else if (f_draw_mod_n) {
492 cout <<
"please use option -draw_options .. -end" << endl;
501 else if (f_power_function_mod_n) {
506 power_function_mod_n_k, power_function_mod_n_n,
511 else if (f_all_rational_normal_forms) {
523 Algebra.
classes_GL(F, all_rational_normal_forms_d,
524 FALSE , verbose_level);
530 else if (f_eigenstuff) {
546 if (sz != eigenstuff_n * eigenstuff_n) {
547 cout <<
"sz != eigenstuff_n * eigenstuff_n" << endl;
555 else if (f_eigenstuff_from_file) {
559 eigenstuff_n = strtoi(argv[++i]);
560 eigenstuff_fname.assign(argv[++i]);
561 algebra_global Algebra;
564 power_mod_n_a, power_mod_n_n,
573 cout <<
"interface_algebra::worker done" << endl;
582 int f_v = (verbose_level >= 1);
585 cout <<
"interface_algebra::do_character_table_symmetric_group" << endl;
586 cout <<
"deg=" << deg << endl;
593 CTB->
do_it(deg, verbose_level);
598 cout <<
"interface_algebra::do_character_table_symmetric_group done" << endl;
global functions related to finite fields, irreducible polynomials and such
void do_equivalence_class_of_fractions(int N, int verbose_level)
void power_function_mod_n(int k, int n, int verbose_level)
void order_of_q_mod_n(int q, int n_min, int n_max, int verbose_level)
void count_subprimitive(int Q_max, int H_max)
options for drawing modulo n
int read_arguments(int argc, std::string *argv, int verbose_level)
options for drawing an object of type layered_graph
basic number theoretic functions
void do_eulerfunction_interval(long int n_min, long int n_max, int verbose_level)
graphics::layered_graph_draw_options * draw_options
global functions related to ring theory
void do_search_for_primitive_polynomial_in_range(int p_min, int p_max, int deg_min, int deg_max, int verbose_level)
group theoretic functions which require an action
void do_eigenstuff(field_theory::finite_field *F, int size, int *Data, int verbose_level)
void young_symmetrizer_sym_4(int verbose_level)
void young_symmetrizer(int n, int verbose_level)
void classes_GL(field_theory::finite_field *F, int d, int f_no_eigenvalue_one, int verbose_level)
void A5_in_PSL_(int q, int verbose_level)
character table of a finite group using the algorithm of Burnside
void do_it(int n, int verbose_level)
int recognize_keyword(int argc, std::string *argv, int i, int verbose_level)
void do_character_table_symmetric_group(int deg, int verbose_level)
void worker(int verbose_level)
void print_help(int argc, std::string *argv, int i, int verbose_level)
void read_arguments(int argc, std::string *argv, int &i, int verbose_level)
int find_symbol(std::string &label)
void * get_object(int idx)
#define Int_vec_scan(A, B, C)
orbiter_kernel_system::orbiter_session * Orbiter
global Orbiter session
user_interface::orbiter_top_level_session * The_Orbiter_top_level_session
the orbiter library for the classification of combinatorial objects