18namespace layer3_group_actions {
29 transversal_length = NULL;
46 cout <<
"stabilizer_chain_base_data::free_base_data" << endl;
52 if (transversal_length) {
54 transversal_length = NULL;
58 cout <<
"stabilizer_chain_base_data::free_base_data "
59 "freeing " << base_len <<
" orbits" << endl;
61 for (i = 0; i < base_len; i++) {
63 cout <<
"deleting orbit " << i << endl;
68 cout <<
"deleting orbit_inv " << i << endl;
84 cout <<
"stabilizer_chain_base_data::free_base_data finished" << endl;
90 int base_len,
int verbose_level)
92 int f_v = (verbose_level >= 1);
96 cout <<
"stabilizer_chain_base_data::allocate_base_data "
97 "base_len=" << base_len <<
" degree=" << A->
degree << endl;
104 stabilizer_chain_base_data::A = A;
105 stabilizer_chain_base_data::base_len = base_len;
107 transversal_length =
NEW_int(base_len);
113 for (i = 0; i < base_len; i++) {
116 for (j = 0; j < A->
degree; j++) {
118 orbit_inv[i][j] = -1;
123 cout <<
"stabilizer_chain_base_data::allocate_base_data degree is too large" << endl;
128 cout <<
"stabilizer_chain_base_data::allocate_base_data done" << endl;
138 int *old_transversal_length;
139 long int **old_orbit;
140 long int **old_orbit_inv;
143 old_transversal_length = transversal_length;
145 old_orbit_inv = orbit_inv;
149 transversal_length =
NEW_int(base_len + 1);
155 for (i = 0; i < base_len; i++) {
156 base[i] = old_base[i];
157 transversal_length[i] = old_transversal_length[i];
158 orbit[i] = old_orbit[i];
159 orbit_inv[i] = old_orbit_inv[i];
160 path[i] = old_path[i];
162 base[base_len] = new_base_point;
163 transversal_length[base_len] = 1;
164 for (j = 0; j < A->
degree; j++) {
165 orbit[base_len][j] = -1;
166 orbit_inv[base_len][j] = -1;
171 if (old_transversal_length)
181 cout <<
"stabilizer_chain_base_data::reallocate_base degree is too large" << endl;
187 int f_v = (verbose_level >= 1);
190 cout <<
"stabilizer_chain_base_data::init_base_from_sims, "
191 "base length " << base_len << endl;
197 for (i = 0; i < base_len; i++) {
199 transversal_length[i] = k;
201 for (i = 0; i < base_len; i++) {
207 for (j = 0; j < A->
degree; j++) {
209 orbit_inv[i][j] = -1;
211 k = transversal_length[i];
213 for (j = 0; j < k; j++) {
221 for (j = 0; j < A->
degree; j++) {
222 if (orbit_inv[i][j] == -1) {
230 cout <<
"k != degree" << endl;
231 cout <<
"transversal " << i <<
" k = " << k << endl;
238 cout <<
"stabilizer_chain_base_data::init_base_from_sims degree is too large" << endl;
241 cout <<
"stabilizer_chain_base_data::init_base_from_sims done" << endl;
267 return transversal_length[i];
272 return transversal_length;
281 cout <<
"stabilizer_chain_base_data::orbit_ij degree is too large" << endl;
289 return orbit_inv[i][j];
292 cout <<
"stabilizer_chain_base_data::orbit_inv_ij degree is too large" << endl;
306 D.
multiply_up(go, transversal_length, base_len, 0 );
313 int f_v = (verbose_level >= 1);
316 cout <<
"stabilizer_chain_base_data::init_projective_matrix_group" << endl;
326 base, transversal_length,
331 cout <<
"stabilizer_chain_base_data::init_projective_matrix_group degree is too large" << endl;
335 cout <<
"stabilizer_chain_base_data::init_projective_matrix_group done" << endl;
343 int f_v = (verbose_level >= 1);
346 cout <<
"stabilizer_chain_base_data::init_affine_matrix_group" << endl;
355 base, transversal_length,
361 cout <<
"stabilizer_chain_base_data::init_affine_matrix_group degree is too large" << endl;
366 cout <<
"stabilizer_chain_base_data::init_affine_matrix_group done" << endl;
374 int f_v = (verbose_level >= 1);
377 cout <<
"stabilizer_chain_base_data::init_linear_matrix_group" << endl;
386 base, transversal_length,
392 cout <<
"stabilizer_chain_base_data::init_linear_matrix_group degree is too large" << endl;
398 cout <<
"stabilizer_chain_base_data::init_linear_matrix_group done" << endl;
#define STABILIZER_CHAIN_DATA_MAX_DEGREE
generators for various classes of groups
void general_linear_matrix_group_base_and_transversal_length(int n, field_theory::finite_field *F, int f_semilinear, int base_len, int degree, long int *base, int *transversal_length, int verbose_level)
void projective_matrix_group_base_and_orbits(int n, field_theory::finite_field *F, int f_semilinear, int base_len, int degree, long int *base, int *transversal_length, long int **orbit, long int **orbit_inv, int verbose_level)
void affine_matrix_group_base_and_transversal_length(int n, field_theory::finite_field *F, int f_semilinear, int base_len, int degree, long int *base, int *transversal_length, int verbose_level)
domain to compute with objects of type longinteger
void multiply_up(longinteger_object &a, int *x, int len, int verbose_level)
a class to represent arbitrary precision integers
a permutation group in a fixed action.
void init_affine_matrix_group(field_theory::finite_field *F, int n, int f_semilinear, int degree, int verbose_level)
int *& get_transversal_length()
stabilizer_chain_base_data()
int & transversal_length_i(int i)
void allocate_base_data(action *A, int base_len, int verbose_level)
void group_order(ring_theory::longinteger_object &go)
void init_base_from_sims(groups::sims *G, int verbose_level)
void reallocate_base(int new_base_point)
void init_linear_matrix_group(field_theory::finite_field *F, int n, int f_semilinear, int degree, int verbose_level)
long int & orbit_inv_ij(int i, int j)
long int & orbit_ij(int i, int j)
~stabilizer_chain_base_data()
void init_projective_matrix_group(field_theory::finite_field *F, int n, int f_semilinear, int degree, int verbose_level)
a permutation group represented via a stabilizer chain
int get_orbit(int i, int j)
int get_orbit_length(int i)
the orbiter library for the classification of combinatorial objects