Orbiter 2022
Combinatorial Objects
geometric_object_create.cpp
Go to the documentation of this file.
1/*
2 * geometric_object_create.cpp
3 *
4 * Created on: Nov 9, 2019
5 * Author: anton
6 */
7
8
9
10
11
12#include "foundations.h"
13
14using namespace std;
15
16
17namespace orbiter {
18namespace layer1_foundations {
19namespace geometry {
20
21
23{
24 Descr = NULL;
25
26 //std::string fname;
27 nb_pts = 0;
28 Pts = NULL;
29
30 //std::string label_txt;
31 //std::string label_tex;
32
33 //null();
34}
35
37{
38 if (Pts) {
40 }
41}
42
44 projective_space *P, int verbose_level)
45{
46 int f_v = (verbose_level >= 1);
48
49
50 if (f_v) {
51 cout << "geometric_object_create::init" << endl;
52 }
53 Descr->P = P;
55
57
58 F = P->F;
59
60
61 if (Descr->f_hyperoval) {
71 nb_pts, Pts,
72 verbose_level);
73
74 //F->export_magma(3, Pts, nb_pts, fname);
75 //F->export_gap(3, Pts, nb_pts, fname);
76
77 }
78 else if (Descr->f_subiaco_oval) {
83 nb_pts, Pts,
84 verbose_level);
85
86
87 //F->export_magma(3, Pts, nb_pts, fname);
88 //F->export_gap(3, Pts, nb_pts, fname);
89
90
91 }
92 else if (Descr->f_subiaco_hyperoval) {
96 nb_pts, Pts,
97 verbose_level);
98
99
100 //F->export_magma(3, Pts, nb_pts, fname);
101 //F->export_gap(3, Pts, nb_pts, fname);
102
103 }
104#if 0
105 else if (Descr->f_adelaide_hyperoval) {
106
107 finite_field *FQ;
108 subfield_structure *S;
109
110 FQ = NEW_OBJECT(finite_field);
111 FQ->init_override_polynomial(Descr->Q, Descr->poly_Q, 0);
112
113 S = NEW_OBJECT(subfield_structure);
114 S->init(FQ, F, verbose_level);
115
116 S->create_adelaide_hyperoval(
117 fname, nb_pts, Pts,
118 verbose_level);
119
120
121 F->export_magma(3, Pts, nb_pts, fname);
122 F->export_gap(3, Pts, nb_pts, fname);
123
124
125 FREE_OBJECT(S);
126 FREE_OBJECT(FQ);
127 }
128#endif
129 else if (Descr->f_BLT_database) {
131 label_txt,
132 label_tex,
133 nb_pts, Pts,
134 verbose_level);
135 }
136#if 0
137 else if (f_BLT_Linear) {
138 create_BLT(f_BLT_in_PG /* f_embedded */, F,
139 TRUE /* f_Linear */,
140 FALSE /* f_Fisher */,
141 FALSE /* f_Mondello */,
142 FALSE /* f_FTWKB */,
143 f_poly, poly,
144 f_poly_Q, poly_Q,
145 fname, nb_pts, Pts,
146 verbose_level);
147 }
148 else if (f_BLT_Fisher) {
149 create_BLT(f_BLT_in_PG /* f_embedded */, q,
150 FALSE /* f_Linear */,
151 TRUE /* f_Fisher */,
152 FALSE /* f_Mondello */,
153 FALSE /* f_FTWKB */,
154 f_poly, poly,
155 f_poly_Q, poly_Q,
156 fname, nb_pts, Pts,
157 verbose_level);
158 }
159 else if (f_BLT_Mondello) {
160 create_BLT(f_BLT_in_PG /* f_embedded */, q,
161 FALSE /* f_Linear */,
162 FALSE /* f_Fisher */,
163 TRUE /* f_Mondello */,
164 FALSE /* f_FTWKB */,
165 f_poly, poly,
166 f_poly_Q, poly_Q,
167 fname, nb_pts, Pts,
168 verbose_level);
169 }
170 else if (f_BLT_FTWKB) {
171 create_BLT(f_BLT_in_PG /* f_embedded */, q,
172 FALSE /* f_Linear */,
173 FALSE /* f_Fisher */,
174 FALSE /* f_Mondello */,
175 TRUE /* f_FTWKB */,
176 f_poly, poly,
177 f_poly_Q, poly_Q,
178 fname, nb_pts, Pts,
179 verbose_level);
180 }
181#endif
182 else if (Descr->f_ovoid) {
183 P->create_ovoid(
184 label_txt,
185 label_tex,
186 nb_pts, Pts,
187 verbose_level);
188 }
189 else if (Descr->f_ovoid_ST) {
191 label_txt,
192 label_tex,
193 nb_pts, Pts,
194 verbose_level);
195 }
196
197
198#if 0
199 else if (Descr->f_Baer) {
200 if (!Descr->f_n) {
201 cout << "please specify the projective dimension "
202 "using the option -n <n>" << endl;
203 exit(1);
204 }
205
206 if (!Descr->f_Q) {
207 cout << "please specify the field order "
208 "using the option -Q <Q>" << endl;
209 exit(1);
210 }
211
212 finite_field *FQ;
213
214 FQ = NEW_OBJECT(finite_field);
215 FQ->init_override_polynomial(Descr->Q, Descr->poly_Q, 0);
216
217 FQ->create_Baer_substructure(Descr->n, F,
218 fname, nb_pts, Pts,
219 verbose_level);
220 FREE_OBJECT(FQ);
221 }
222#endif
223 else if (Descr->f_orthogonal) {
225 label_txt,
226 label_tex,
227 nb_pts, Pts,
228 verbose_level);
229 // calls choose_anisotropic_form if necessary
230 }
231 else if (Descr->f_hermitian) {
232 F->create_hermitian(P->n,
233 label_txt,
234 label_tex,
235 nb_pts, Pts,
236 verbose_level);
237 // creates a hermitian
238 }
239 else if (Descr->f_cuspidal_cubic) {
241 label_txt,
242 label_tex,
243 nb_pts, Pts,
244 verbose_level);
245 }
246 else if (Descr->f_twisted_cubic) {
248 label_txt,
249 label_tex,
250 nb_pts, Pts,
251 verbose_level);
252 }
253 else if (Descr->f_elliptic_curve) {
256 label_txt,
257 label_tex,
258 nb_pts, Pts,
259 verbose_level);
260 }
261
262#if 0
263 else if (Descr->f_ttp_code) {
264
265 if (!Descr->f_Q) {
266 cout << "please specify the field order "
267 "using the option -Q <Q>" << endl;
268 exit(1);
269 }
270
271 finite_field *FQ;
272
273 FQ = NEW_OBJECT(finite_field);
274 FQ->init_override_polynomial(Descr->Q, Descr->poly_Q, 0);
275 FQ->create_ttp_code(F,
277 fname, nb_pts, Pts,
278 verbose_level);
279 FREE_OBJECT(FQ);
280 }
281#endif
282 else if (Descr->f_unital_XXq_YZq_ZYq) {
283
284
286 label_txt,
287 label_tex,
288 nb_pts, Pts,
289 verbose_level);
290
291 }
292#if 0
294
295 if (!Descr->f_Q) {
296 cout << "please specify the field order "
297 "using the option -Q <Q>" << endl;
298 exit(1);
299 }
300
301 finite_field *FQ;
302
303 FQ = NEW_OBJECT(finite_field);
304 FQ->init_override_polynomial(Descr->Q, Descr->poly_Q, 0);
305
306 FQ->create_desarguesian_line_spread_in_PG_3_q(F,
308 fname, nb_pts, Pts,
309 verbose_level);
310 FREE_OBJECT(FQ);
311
312 }
313#endif
314
315#if 0
316 else if (Descr->f_Buekenhout_Metz) {
317
318 finite_field *FQ;
320
321 FQ = NEW_OBJECT(finite_field);
322 FQ->init_override_polynomial(Descr->Q, Descr->poly_Q, 0);
323
324 Gg.create_Buekenhout_Metz(F, FQ,
326 fname, nb_pts, Pts,
327 verbose_level);
328
329 }
330#endif
331
332 else if (Descr->f_whole_space) {
334 label_txt,
335 label_tex,
336 nb_pts, Pts,
337 verbose_level);
338 }
339 else if (Descr->f_hyperplane) {
341 Descr->pt,
342 label_txt,
343 label_tex,
344 nb_pts, Pts,
345 verbose_level);
346 }
347 else if (Descr->f_segre_variety) {
349 label_txt,
350 label_tex,
351 nb_pts, Pts,
352 verbose_level);
353 }
354 else if (Descr->f_Maruta_Hamada_arc) {
356 label_txt,
357 label_tex,
358 nb_pts, Pts,
359 verbose_level);
360 }
361 else if (Descr->f_projective_variety) {
362
363
365
369 P->n + 1, Descr->variety_degree,
372 label_txt,
373 label_tex,
374 nb_pts, Pts,
375 verbose_level);
376
377 }
379
381
385 P->n + 1, Descr->variety_degree,
388 label_txt,
389 label_tex,
390 nb_pts, Pts,
391 verbose_level);
392 }
394
396
400 P->n + 1, Descr->variety_degree,
404 label_txt,
405 label_tex,
406 nb_pts, Pts,
407 verbose_level);
408 }
409
410
411
412 else if (Descr->f_projective_curve) {
413
415
422 label_txt,
423 label_tex,
424 nb_pts, Pts,
425 verbose_level);
426 }
427
428 else if (Descr->f_set) {
429
431
432 }
433 else {
434 cout << "geometric_object_create::init nothing to create" << endl;
435 exit(1);
436 }
437
438
439 if (f_v) {
440 cout << "geometric_object_create::init created a set of size " << nb_pts << endl;
442 cout << endl;
443
444 //lint_vec_print(cout, Pts, nb_pts);
445 //cout << endl;
446 }
447
448
449
450 if (f_v) {
451 cout << "geometric_object_create::init done" << endl;
452 }
453}
454
455
456
457}}}
458
459
460
void export_gap(int d, long int *Pts, int nb_pts, std::string &fname)
void create_BLT_from_database(int f_embedded, int BLT_k, std::string &label_txt, std::string &label_tex, int &nb_pts, long int *&Pts, int verbose_level)
void export_magma(int d, long int *Pts, int nb_pts, std::string &fname)
void create_orthogonal(int epsilon, int n, std::string &label_txt, std::string &label_tex, int &nb_pts, long int *&Pts, int verbose_level)
void create_hermitian(int n, std::string &label_txt, std::string &label_tex, int &nb_pts, long int *&Pts, int verbose_level)
void create_segre_variety(int a, int b, std::string &label_txt, std::string &label_tex, int &nb_pts, long int *&Pts, int verbose_level)
void create_subiaco_hyperoval(std::string &label_txt, std::string &label_tex, int &nb_pts, long int *&Pts, int verbose_level)
void create_subiaco_oval(int f_short, std::string &label_txt, std::string &label_tex, int &nb_pts, long int *&Pts, int verbose_level)
void create_Maruta_Hamada_arc(long int *the_arc, int &size, int verbose_level)
void create_hyperoval(int f_translation, int translation_exponent, int f_Segre, int f_Payne, int f_Cherowitzo, int f_OKeefe_Penttila, std::string &label_txt, std::string &label_tex, int &nb_pts, long int *&Pts, int verbose_level)
void init(geometric_object_description *Descr, projective_space *P, int verbose_level)
to create a geometric object encoded as a set using a description from the command line
Definition: geometry.h:598
various functions related to geometries
Definition: geometry.h:721
void create_Buekenhout_Metz(field_theory::finite_field *Fq, field_theory::finite_field *FQ, int f_classical, int f_Uab, int parameter_a, int parameter_b, std::string &fname, int &nb_pts, long int *&Pts, int verbose_level)
projective space PG(n,q) of dimension n over Fq
Definition: geometry.h:1916
void create_elliptic_curve(int elliptic_curve_b, int elliptic_curve_c, std::string &label_txt, std::string &label_tex, int &nb_pts, long int *&Pts, int verbose_level)
void create_ovoid_ST(std::string &label_txt, std::string &label_tex, int &nb_pts, long int *&Pts, int verbose_level)
void create_whole_space(std::string &label_txt, std::string &label_tex, int &nb_pts, long int *&Pts, int verbose_level)
void create_hyperplane(int pt, std::string &label_txt, std::string &label_tex, int &nb_pts, long int *&Pts, int verbose_level)
void create_ovoid(std::string &label_txt, std::string &label_tex, int &nb_pts, long int *&Pts, int verbose_level)
void create_cuspidal_cubic(std::string &label_txt, std::string &label_tex, int &nb_pts, long int *&Pts, int verbose_level)
void create_twisted_cubic(std::string &label_txt, std::string &label_tex, int &nb_pts, long int *&Pts, int verbose_level)
void create_unital_XXq_YZq_ZYq(std::string &label_txt, std::string &label_tex, int &nb_pts, long int *&Pts, int verbose_level)
void create_projective_variety(field_theory::finite_field *F, std::string &variety_label, std::string &variety_label_tex, int variety_nb_vars, int variety_degree, std::string &variety_coeffs, monomial_ordering_type Monomial_ordering_type, std::string &label_txt, std::string &label_tex, int &nb_pts, long int *&Pts, int verbose_level)
void create_intersection_of_zariski_open_sets(field_theory::finite_field *F, std::string &variety_label_txt, std::string &variety_label_tex, int variety_nb_vars, int variety_degree, std::vector< std::string > &Variety_coeffs, monomial_ordering_type Monomial_ordering_type, std::string &label_txt, std::string &label_tex, int &nb_pts, long int *&Pts, int verbose_level)
void create_projective_curve(field_theory::finite_field *F, std::string &variety_label_txt, std::string &variety_label_tex, int curve_nb_vars, int curve_degree, std::string &curve_coeffs, monomial_ordering_type Monomial_ordering_type, std::string &label_txt, std::string &label_tex, int &nb_pts, long int *&Pts, int verbose_level)
void number_of_conditions_satisfied(field_theory::finite_field *F, std::string &variety_label_txt, std::string &variety_label_tex, int variety_nb_vars, int variety_degree, std::vector< std::string > &Variety_coeffs, monomial_ordering_type Monomial_ordering_type, std::string &number_of_conditions_satisfied_fname, std::string &label_txt, std::string &label_tex, int &nb_pts, long int *&Pts, int verbose_level)
#define Lint_vec_scan(A, B, C)
Definition: foundations.h:717
#define NEW_OBJECT(type)
Definition: foundations.h:638
#define FREE_OBJECT(p)
Definition: foundations.h:651
#define TRUE
Definition: foundations.h:231
#define FALSE
Definition: foundations.h:234
#define FREE_lint(p)
Definition: foundations.h:642
#define Lint_vec_print_fully(A, B, C)
Definition: foundations.h:688
the orbiter library for the classification of combinatorial objects