Orbiter 2022
Combinatorial Objects
canonical_form_substructure.cpp
Go to the documentation of this file.
1/*
2 * canonical_form_substructure.cpp
3 *
4 * Created on: May 13, 2021
5 * Author: betten
6 */
7
8
9
10
11#include "orbiter.h"
12
13using namespace std;
14
15namespace orbiter {
16namespace layer5_applications {
17namespace projective_geometry {
18
19
20
22{
23
24 //std::string fname_case_out;
25
27
28 cnt = 0;
29 row = 0;
30 counter = 0;
31 eqn = NULL;
32 sz = 0;
33 pts = NULL;
34 nb_pts = 0;
35 bitangents = NULL;
36 nb_bitangents = 0;
37
38 canonical_pts = NULL;
39
40 SubSt = NULL;
41
42 CS = NULL;
43
46
47
48
49 Orb = NULL;
50
52
53 trans1 = NULL;
54 trans2 = NULL;
56
57
58
59 Elt = NULL;
60 eqn2 = NULL;
61
62 canonical_equation = NULL;
64}
65
67{
68}
69
70
72 canonical_form_classifier *Canonical_form_classifier,
73 int counter, int cnt, int row,
74 std::string &fname_case_out,
75 int *eqn,
76 int sz,
77 long int *pts,
78 int nb_pts,
79 long int *bitangents,
80 int nb_bitangents,
82 int verbose_level)
83{
84 int f_v = (verbose_level >= 1);
85 //int f_vv = (verbose_level >= 2);
86 //int f_vvv = (verbose_level >= 5);
87
88 if (f_v) {
89 cout << "canonical_form_substructure::classify_curve_with_substructure verbose_level=" << verbose_level << endl;
90 }
91
97
102
103
109
110 //long int *canonical_pts;
111
113
117
118
119 if (f_v) {
120 cout << "fname_case_out = " << fname_case_out << endl;
121 cout << "row = " << row << " eqn=";
122 Int_vec_print(cout, eqn, sz);
123 cout << " pts=";
124 Lint_vec_print(cout, pts, nb_pts);
125 cout << endl;
126
128 cout << endl;
129
131
132
133 //cout << " bitangents=";
134 //Orbiter->Lint_vec.print(cout, bitangents, nb_bitangents);
135 }
136
137
138
139
140
142
143 if (f_v) {
144 cout << "canonical_form_substructure::classify_curve_with_substructure before SubSt->init" << endl;
145 }
146 SubSt->init(
149 pts, nb_pts,
150 verbose_level);
151 if (f_v) {
152 cout << "canonical_form_substructure::classify_curve_with_substructure after SubSt->init" << endl;
153 }
154
155
156 if (f_v) {
157 cout << "canonical_form_substructure::classify_curve_with_substructure before handle_orbit" << endl;
158 }
159
160
161
163 trans1,
166 verbose_level);
167
168
169
170
171 if (FALSE) {
172 cout << "canonical_form_substructure::classify_curve_with_substructure after handle_orbit" << endl;
173 cout << "canonical point set: ";
176
178 cout << "_{" << go << "}" << endl;
179 cout << endl;
180 cout << "transporter to canonical form:" << endl;
182 //cout << "Stabilizer of the original set:" << endl;
183 //Gens_stabilizer_original_set->print_generators_tex();
184 }
185
186
187 if (FALSE) {
188 cout << "canonical_form_substructure::classify_curve_with_substructure after handle_orbit" << endl;
189 cout << "canonical point set: ";
192
194 cout << "_{" << go << "}" << endl;
195 cout << endl;
196 cout << "transporter to canonical form:" << endl;
198 //cout << "Stabilizer of the canonical form:" << endl;
199 //Gens_stabilizer_canonical_form->print_generators_tex();
200 }
201
203
205
206
207 if (f_v) {
208 cout << "canonical_form_substructure::classify_curve_with_substructure canonical point set: ";
210 cout << "_{" << go << "}" << endl;
211 cout << endl;
212 }
213
214
215 if (f_v) {
216 cout << "canonical_form_substructure::classify_curve_with_substructure "
217 "before AonHPD->compute_image_int_low_level" << endl;
218 }
220 trans1, eqn, intermediate_equation, verbose_level - 2);
221 if (f_v) {
222 cout << "canonical_form_substructure::classify_curve_with_substructure "
223 "after AonHPD->compute_image_int_low_level" << endl;
224 }
225
227
228
229 if (f_v) {
230 cout << "canonical_form_substructure::classify_curve_with_substructure "
231 "before Orb->init" << endl;
232 }
236 Gens_stabilizer_canonical_form /* A->Strong_gens*/,
238 verbose_level);
239 if (f_v) {
240 cout << "canonical_form_substructure::classify_curve_with_substructure "
241 "after Orb->init" << endl;
242 cout << "canonical_form_substructure::classify_curve_with_substructure "
243 "found an orbit of length " << Orb->used_length << endl;
244 }
245
246
247 // we need to compute the canonical form!
248
249 if (f_v) {
250 cout << "canonical_form_substructure::classify_curve_with_substructure "
251 "before Orb->get_canonical_form" << endl;
252 }
253
254 //strong_generators *gens_stab_of_canonical_equation;
255
258 trans2,
260 go,
261 verbose_level);
262 if (f_v) {
263 cout << "canonical_form_substructure::classify_curve_with_substructure "
264 "after Orb->get_canonical_form" << endl;
265 }
266
267
270
271
273
276
277 if (f_v) {
278 cout << "canonical_form_substructure::classify_curve_with_substructure canonical equation: ";
281 cout << "_{" << go_eqn << "}" << endl;
282 cout << endl;
283 }
284
285
286 if (f_v) {
287 cout << "canonical_form_substructure::classify_curve_with_substructure done" << endl;
288 }
289}
290
291
293 int *transporter_to_canonical_form,
294 groups::strong_generators *&Gens_stabilizer_original_set,
295 groups::strong_generators *&Gens_stabilizer_canonical_form,
296 int verbose_level)
297{
298 int f_v = (verbose_level >= 1);
299 // interesting_subsets are the lvl-subsets of the given set
300 // which are of the chosen type.
301 // There is nb_interesting_subsets of them.
302 //poset_classification *PC;
303 //action *A;
304 //action *A2;
305 //int intermediate_subset_size;
306
307 //int i, j;
308
309 if (f_v) {
310 cout << "canonical_form_substructure::handle_orbit" << endl;
311 cout << "fname = " << fname_case_out << endl;
312 cout << "selected_orbit = " << SubSt->selected_orbit << endl;
313 }
314
315
316 //overall_backtrack_nodes = 0;
317 if (f_v) {
318 cout << "canonical_form_substructure::handle_orbit calling compute_stabilizer_function" << endl;
319 }
320
321
323
324 if (f_v) {
325 cout << "canonical_form_substructure::handle_orbit before CS->init" << endl;
326 }
327 CS->init(
328 SubSt,
330 verbose_level);
331 if (f_v) {
332 cout << "canonical_form_substructure::handle_orbit after CS->init" << endl;
333 }
334
335
337
340
342
343
344
345
346 if (f_v) {
347 cout << "canonical_form_substructure::classify_curve_with_substructure "
348 "before init_generators_for_the_conjugate_group_avGa" << endl;
349 }
352 0 /*verbose_level*/);
353 if (f_v) {
354 cout << "canonical_form_substructure::classify_curve_with_substructure "
355 "after init_generators_for_the_conjugate_group_avGa" << endl;
356 }
357
358
359
360
361
362 if (f_v) {
363 cout << "canonical_form_substructure::handle_orbit done with compute_stabilizer" << endl;
364 cout << "canonical_form_substructure::handle_orbit "
365 "backtrack_nodes_first_time = " << CS->backtrack_nodes_first_time << endl;
366 cout << "canonical_form_substructure::handle_orbit "
367 "backtrack_nodes_total_in_loop = " << CS->backtrack_nodes_total_in_loop << endl;
368 }
369
370
371
372 if (f_v) {
373 cout << "canonical_form_substructure::handle_orbit done" << endl;
374 }
375}
376
377}}}
378
379
void print_set_of_points(std::ostream &ost, long int *Pts, int nb_pts)
a class to represent arbitrary precision integers
Definition: ring_theory.h:366
void element_print(void *elt, std::ostream &ost)
Definition: action_cb.cpp:347
void element_mult(void *a, void *b, void *ab, int verbose_level)
Definition: action_cb.cpp:315
void element_move(void *a, void *b, int verbose_level)
Definition: action_cb.cpp:335
a strong generating set for a permutation group with respect to a fixed action
Definition: groups.h:1703
void init_from_sims(groups::sims *S, int verbose_level)
void init_generators_for_the_conjugate_group_avGa(strong_generators *SG, int *Elt_a, int verbose_level)
void group_order(ring_theory::longinteger_object &go)
void init(substructure_stats_and_selection *SubSt, long int *canonical_pts, int verbose_level)
orbit of homogeneous equations using a Schreier tree
Definition: orbits.h:30
void get_canonical_form(int *canonical_equation, int *transporter_to_canonical_form, groups::strong_generators *&gens_stab_of_canonical_equation, ring_theory::longinteger_object &full_group_order, int verbose_level)
void init(actions::action *A, field_theory::finite_field *F, induced_actions::action_on_homogeneous_polynomials *AonHPD, groups::strong_generators *SG, int *coeff_in, int verbose_level)
void init(std::string &fname_case_out, substructure_classifier *SubC, long int *Pts, int nb_pts, int verbose_level)
induced_actions::action_on_homogeneous_polynomials * AonHPD
void handle_orbit(int *transporter_to_canonical_form, groups::strong_generators *&Gens_stabilizer_original_set, groups::strong_generators *&Gens_stabilizer_canonical_form, int verbose_level)
void classify_curve_with_substructure(canonical_form_classifier *Canonical_form_classifier, int counter, int cnt, int row, std::string &fname_case_out, int *eqn, int sz, long int *pts, int nb_pts, long int *bitangents, int nb_bitangents, ring_theory::longinteger_object &go_eqn, int verbose_level)
#define Lint_vec_copy(A, B, C)
Definition: foundations.h:694
#define NEW_OBJECT(type)
Definition: foundations.h:638
#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 NEW_lint(n)
Definition: foundations.h:628
#define Int_vec_print(A, B, C)
Definition: foundations.h:685
the orbiter library for the classification of combinatorial objects