8#ifndef SRC_LIB_TOP_LEVEL_SURFACES_SURFACES_GENERAL_SURFACES_GENERAL_H_
9#define SRC_LIB_TOP_LEVEL_SURFACES_SURFACES_GENERAL_SURFACES_GENERAL_H_
14namespace layer5_applications {
15namespace applications_in_algebraic_geometry {
16namespace cubic_surfaces_in_general {
48 int argc, std::string *argv,
99 void report(std::ostream &ost,
int verbose_level);
125 field_theory::finite_field *
F;
129 algebraic_geometry::surface_domain *
Surf;
133 algebraic_geometry::surface_object *
SO;
136 groups::strong_generators *
Sg;
155 int nb_gens, std::string &gens_text,
int verbose_level);
162 std::vector<std::string> &select_double_six_string,
165 std::vector<std::string> &select_double_six_string,
168 std::vector<std::string> &select_double_six_string,
171 std::vector<std::string> &select_double_six_string,
174 std::string &arc_lifting_text,
177 std::string &arc_lifting_text,
178 std::string &arc_lifting_two_lines_text,
181 int k,
int l,
int m,
int n,
184 std::string &name_of_formula,
185 std::string &name_of_formula_tex,
186 std::string &managed_variables,
187 std::string &equation_text,
188 std::string &equation_parameters,
189 std::string &equation_parameters_tex,
190 std::vector<std::string> &select_double_six_string,
193 std::string &by_double_six_label,
194 std::string &by_double_six_label_tex,
195 std::string &by_double_six_text,
198 std::string &given_label,
199 std::string &given_label_tex,
202 std::vector<std::string> &transform_coeffs,
203 std::vector<int> &f_inverse_transform,
338 std::string &sweep_fname,
343 std::string &sweep_fname,
348 std::string &sweep_fname,
353 std::string &sweep_fname,
359 poset_classification::poset_classification_control *Control,
363 field_theory::finite_field *F,
365 poset_classification::poset_classification_control *Control,
369 void do_study_surface(field_theory::finite_field *F,
int nb,
int verbose_level);
372 poset_classification::poset_classification_control *Control_six_arcs,
373 int f_test_nb_Eckardt_points,
int nb_E,
377 poset_classification::poset_classification_control *Control1,
378 poset_classification::poset_classification_control *Control2,
379 poset_classification::poset_classification_control *Control_six_arcs,
380 int f_test_nb_Eckardt_points,
int nb_E,
384 poset_classification::poset_classification_control *Control_six_arcs,
385 int f_filter_by_nb_Eckardt_points,
int nb_Eckardt_points,
389 std::string &fname_csv,
int defining_q,
394 std::string &fname_csv,
int defining_q,
406 std::string &fname_report_tex,
428 field_theory::finite_field *
F;
430 algebraic_geometry::surface_domain *
Surf;
433 algebraic_geometry::surface_object *
SO;
441 groups::sylow_structure *
Syl;
471 groups::strong_generators *
Aut_gens,
int verbose_level);
473 long int *Lines,
int nb_lines,
int *eqn,
474 groups::strong_generators *
Aut_gens,
475 int f_find_double_six_and_rearrange_lines,
477 data_structures_groups::vector_ge *
nice_gens,
480 algebraic_geometry::surface_object *
SO,
481 groups::strong_generators *
Aut_gens,
483 data_structures_groups::vector_ge *
nice_gens,
486 algebraic_geometry::surface_object *
SO,
487 groups::strong_generators *
Aut_gens,
int verbose_level);
501 groups::strong_generators *
Aut_gens,
505 groups::strong_generators *
Aut_gens,
508 int f_print_orbits, std::string &fname_mask,
509 graphics::layered_graph_draw_options *Opt,
513 std::string &label_txt,
514 std::string &label_tex,
515 int f_print_orbits, std::string &fname_mask,
516 graphics::layered_graph_draw_options *Opt,
520 graphics::layered_graph_draw_options *Opt,
527 graphics::layered_graph_draw_options *Opt,
531 std::string &fname_mask,
533 std::string &label_tex,
536 std::string &surface_prefix,
538 std::ostream &ost_quartics,
541 std::string &surface_prefix,
542 std::ostream &ost_quartics_csv,
559 field_theory::finite_field *
F;
560 algebraic_geometry::surface_domain *
Surf;
577 data_structures_groups::set_and_stabilizer *
SaS;
602 void init(field_theory::finite_field *
F,
int nb,
int verbose_level);
632 algebraic_geometry::surface_domain *
Surf;
644 induced_actions::action_on_homogeneous_polynomials *
AonHPD_3_4;
658 void init(algebraic_geometry::surface_domain *
Surf,
660 int f_recoordinatize,
663 long int a,
int verbose_level);
665 long int a,
int *Polarity36,
int verbose_level);
667 long int *skew_hexagon,
668 std::vector<std::vector<long int> > &Double_sixes,
671 std::string &label_for_printing,
672 long int *skew_hexagon,
674 std::vector<std::vector<long int> > &Double_sixes,
677 long int *three_skew_lines,
long int *&
regulus,
long int *&opp_regulus,
int ®ulus_sz,
680 long int *five_lines,
long int transversal_line,
681 long int *double_six,
int verbose_level);
683 long int *five_lines,
long int transversal_line,
684 long int *double_six,
int verbose_level);
694 int f_has_control_six_arcs,
695 poset_classification::poset_classification_control *Control_six_arcs,
702 int f_has_control_six_arcs,
703 poset_classification::poset_classification_control *Control_six_arcs,
717 std::string &sweep_fname,
721 std::string &sweep_fname,
725 std::string &sweep_fname,
729 std::string &sweep_fname,
734 int q,
int nb_cubic_surfaces,
739 int q,
int nb_cubic_surfaces,
classification of double triplets in PG(3,q)
high level functions for cubic surfaces
void do_sweep_4_15_lines(projective_geometry::projective_space_with_action *PA, surface_create_description *Surface_Descr, std::string &sweep_fname, int verbose_level)
void make_fname_surface_report_tex(std::string &fname, int q, int ocn)
void do_sweep_F_beta_9_lines(projective_geometry::projective_space_with_action *PA, surface_create_description *Surface_Descr, std::string &sweep_fname, int verbose_level)
void classify_surfaces_with_double_sixes(projective_geometry::projective_space_with_action *PA, poset_classification::poset_classification_control *Control, cubic_surfaces_and_double_sixes::surface_classify_wedge *&SCW, int verbose_level)
void do_classify_surfaces_through_arcs_and_two_lines(projective_geometry::projective_space_with_action *PA, poset_classification::poset_classification_control *Control_six_arcs, int f_test_nb_Eckardt_points, int nb_E, int verbose_level)
void report_surfaces_by_lines(std::ostream &ost, struct cubic_surface_data_set *Data, data_structures::tally &T, int verbose_level)
surface_domain_high_level()
void do_cubic_surface_properties_analyze(projective_geometry::projective_space_with_action *PA, std::string &fname_csv, int defining_q, int verbose_level)
void do_create_surface_atlas_q_e(int q_max, struct table_surfaces_field_order *T, int nb_e, int *Idx, int nb, std::string &fname_report_tex, int verbose_level)
~surface_domain_high_level()
void report_non_singular_surfaces(std::ostream &ost, struct cubic_surface_data_set *Data, int nb_orbits, int verbose_level)
void do_create_surface_atlas(int q_max, int verbose_level)
void do_six_arcs(projective_geometry::projective_space_with_action *PA, poset_classification::poset_classification_control *Control_six_arcs, int f_filter_by_nb_Eckardt_points, int nb_Eckardt_points, int verbose_level)
void do_create_dickson_atlas(int verbose_level)
void prepare_surface_classify_wedge(field_theory::finite_field *F, projective_geometry::projective_space_with_action *PA, poset_classification::poset_classification_control *Control, algebraic_geometry::surface_domain *&Surf, surface_with_action *&Surf_A, cubic_surfaces_and_double_sixes::surface_classify_wedge *&SCW, int verbose_level)
void do_cubic_surface_properties(projective_geometry::projective_space_with_action *PA, std::string &fname_csv, int defining_q, int column_offset, int verbose_level)
void do_sweep_4_27(projective_geometry::projective_space_with_action *PA, surface_create_description *Surface_Descr, std::string &sweep_fname, int verbose_level)
void do_classify_surfaces_through_arcs_and_trihedral_pairs(projective_geometry::projective_space_with_action *PA, poset_classification::poset_classification_control *Control1, poset_classification::poset_classification_control *Control2, poset_classification::poset_classification_control *Control_six_arcs, int f_test_nb_Eckardt_points, int nb_E, int verbose_level)
void do_create_surface_reports(std::string &field_orders_text, int verbose_level)
void report_singular_surfaces(std::ostream &ost, struct cubic_surface_data_set *Data, int nb_orbits, int verbose_level)
void do_study_surface(field_theory::finite_field *F, int nb, int verbose_level)
void do_sweep_6_9_lines(projective_geometry::projective_space_with_action *PA, surface_create_description *Surface_Descr, std::string &sweep_fname, int verbose_level)
void make_fname_surface_report_pdf(std::string &fname, int q, int ocn)
an instance of a cubic surface together with its stabilizer
field_theory::finite_field * F
void init_orbits_on_half_double_sixes(int verbose_level)
groups::schreier * Orbits_on_lines
void init_equation(surface_with_action *Surf_A, int *eqn, groups::strong_generators *Aut_gens, int verbose_level)
groups::sylow_structure * Syl
void print_full_del_Pezzo(std::ostream &ost, int verbose_level)
actions::action * A_on_the_lines
void init_orbits_on_trihedral_pairs(int verbose_level)
void cheat_sheet(std::ostream &ost, std::string &label_txt, std::string &label_tex, int f_print_orbits, std::string &fname_mask, graphics::layered_graph_draw_options *Opt, int verbose_level)
void init_orbits_on_Hesse_planes(int verbose_level)
void print_automorphism_group(std::ostream &ost, int f_print_orbits, std::string &fname_mask, graphics::layered_graph_draw_options *Opt, int verbose_level)
actions::action * A_on_pts_not_on_lines
void init_with_group(surface_with_action *Surf_A, long int *Lines, int nb_lines, int *eqn, groups::strong_generators *Aut_gens, int f_find_double_six_and_rearrange_lines, int f_has_nice_gens, data_structures_groups::vector_ge *nice_gens, int verbose_level)
void cheat_sheet_basic(std::ostream &ost, int verbose_level)
void init_orbits_on_Double_points(int verbose_level)
groups::schreier * Orbits_on_single_sixes
groups::schreier * Orbits_on_trihedral_pairs
groups::schreier * Orbits_on_Eckardt_points
void init_with_surface_object(surface_with_action *Surf_A, algebraic_geometry::surface_object *SO, groups::strong_generators *Aut_gens, int f_has_nice_gens, data_structures_groups::vector_ge *nice_gens, int verbose_level)
actions::action * A_on_trihedral_pairs
actions::action * A_on_Double_points
data_structures_groups::vector_ge * nice_gens
void init_orbits_on_Eckardt_points(int verbose_level)
actions::action * A_on_tritangent_planes
void init_orbits_on_tritangent_planes(int verbose_level)
void investigate_surface_and_write_report(graphics::layered_graph_draw_options *Opt, actions::action *A, surface_create *SC, cubic_surfaces_and_arcs::six_arcs_not_on_a_conic *Six_arcs, int verbose_level)
void print_elements_on_lines(std::ostream &ost, groups::strong_generators *Aut_gens, int verbose_level)
actions::action * A_on_points
surface_with_action * Surf_A
algebraic_geometry::surface_object * SO
~surface_object_with_action()
void init_orbits_on_lines(int verbose_level)
void all_quartic_curves(std::string &surface_prefix, std::ostream &ost, std::ostream &ost_quartics, int verbose_level)
void init_surface_object(surface_with_action *Surf_A, algebraic_geometry::surface_object *SO, groups::strong_generators *Aut_gens, int verbose_level)
surface_object_with_action()
groups::strong_generators * projectivity_group_gens
void print_generators_on_lines(std::ostream &ost, groups::strong_generators *Aut_gens, int verbose_level)
actions::action * A_on_Eckardt_points
void export_all_quartic_curves(std::string &surface_prefix, std::ostream &ost_quartics_csv, int verbose_level)
groups::schreier * Orbits_on_tritangent_planes
groups::schreier * Orbits_on_Hesse_planes
void investigate_surface_and_write_report2(std::ostream &ost, graphics::layered_graph_draw_options *Opt, actions::action *A, surface_create *SC, cubic_surfaces_and_arcs::six_arcs_not_on_a_conic *Six_arcs, std::string &fname_mask, std::string &label, std::string &label_tex, int verbose_level)
void init_orbits_on_points(int verbose_level)
groups::schreier * Orbits_on_points_not_on_lines
groups::strong_generators * Aut_gens
actions::action * A_single_sixes
void print_automorphism_group_gnerators(std::ostream &ost, int verbose_level)
groups::schreier * Orbits_on_points
void init_orbits_on_points_not_on_lines(int verbose_level)
algebraic_geometry::surface_domain * Surf
void compute_orbits_of_automorphism_group(int verbose_level)
void compute_projectivity_group(int verbose_level)
groups::schreier * Orbits_on_Double_points
actions::action * A_on_Hesse_planes
to describe a cubic surface from the command line
std::string equation_name_of_formula_tex
std::string by_skew_hexagon_label
std::string arc_lifting_text
std::vector< int > f_inverse_transform
std::string label_for_summary
std::string equation_name_of_formula
std::string override_group_order
int family_general_abcd_a
int override_group_nb_gens
std::string arc_lifting_two_lines_text
int family_general_abcd_c
std::string equation_managed_variables
std::string by_double_six_label_tex
int f_family_general_abcd
std::string equation_parameters
std::string equation_parameters_tex
std::string override_group_gens
int f_arc_lifting_with_two_lines
std::vector< std::string > select_double_six_string
std::string by_double_six_text
std::string by_double_six_label
int family_general_abcd_b
std::vector< std::string > transform_coeffs
surface_create_description()
std::string by_skew_hexagon_label_tex
int read_arguments(int argc, std::string *argv, int verbose_level)
~surface_create_description()
std::string equation_text
std::string coefficients_text
int family_general_abcd_d
description of an activity associated with a cubic surface
int f_export_all_quartic_curves
cubic_surface_activity_description()
int read_arguments(int argc, std::string *argv, int verbose_level)
~cubic_surface_activity_description()
int f_export_tritangent_planes
a Clebsch map associated with a cubic surface and a choice of half double six
algebraic_geometry::clebsch_map * Clebsch_map
void init(surface_object_with_action *SOA, int orbit_idx, int verbose_level)
void report(std::ostream &ost, int verbose_level)
surface_object_with_action * SOA
classification of cubic surfaces using double sixes as substructures
an activity associated with a cubic surface
~cubic_surface_activity()
cubic_surface_activity_description * Descr
void perform_activity(int verbose_level)
void init(cubic_surfaces_in_general::cubic_surface_activity_description *Cubic_surface_activity_description, surface_create *SC, int verbose_level)
to study properties of cubic surfaces
void study_find_eckardt_points(int verbose_level)
void study_orbits_on_lines(int verbose_level)
algebraic_geometry::surface_domain * Surf
void init(field_theory::finite_field *F, int nb, int verbose_level)
void study_group(int verbose_level)
long int * Intersection_pt
int shortest_line_orbit_idx
field_theory::finite_field * F
void study_intersection_points(int verbose_level)
void study_surface_with_6_eckardt_points(int verbose_level)
void study_line_orbits(int verbose_level)
data_structures_groups::set_and_stabilizer * SaS
actions::action * A_on_lines
classification of six-arcs not on a conic in PG(2,q)
cubic surfaces in projective space with automorphism group
void sweep_4_27(surface_create_description *Surface_Descr, std::string &sweep_fname, int verbose_level)
long int apply_null_polarity(long int a, int verbose_level)
void report_basics(std::ostream &ost)
projective_geometry::projective_space_with_action * PA
void create_surface_and_do_report(surface_create_description *Surface_Descr, int f_has_control_six_arcs, poset_classification::poset_classification_control *Control_six_arcs, int verbose_level)
void create_regulus_and_opposite_regulus(long int *three_skew_lines, long int *®ulus, long int *&opp_regulus, int ®ulus_sz, int verbose_level)
void sweep_6_9_lines(surface_create_description *Surface_Descr, std::string &sweep_fname, int verbose_level)
void sweep_F_beta_9_lines(surface_create_description *Surface_Descr, std::string &sweep_fname, int verbose_level)
void complete_skew_hexagon_with_polarity(std::string &label_for_printing, long int *skew_hexagon, int *Polarity36, std::vector< std::vector< long int > > &Double_sixes, int verbose_level)
void report_double_triplets_detailed(std::ostream &ost)
void table_of_cubic_surfaces_export_csv(long int *Table, int nb_cols, int q, int nb_cubic_surfaces, surface_create **SC, int verbose_level)
long int apply_polarity(long int a, int *Polarity36, int verbose_level)
void report_double_triplets(std::ostream &ost)
void export_points(surface_create *SC, int verbose_level)
cubic_surfaces_and_arcs::classify_trihedral_pairs * Classify_trihedral_pairs
actions::action * A_on_planes
void init(algebraic_geometry::surface_domain *Surf, projective_geometry::projective_space_with_action *PA, int f_recoordinatize, int verbose_level)
int create_double_six_from_five_lines_with_a_common_transversal(long int *five_lines, long int transversal_line, long int *double_six, int verbose_level)
void table_of_cubic_surfaces(int verbose_level)
void do_report(surface_create *SC, int verbose_level)
spreads::recoordinatize * Recoordinatize
void create_surface(surface_create_description *Surface_Descr, surface_create *&SC, int verbose_level)
void create_surface_object_with_action(surface_create *SC, surface_object_with_action *&SoA, int verbose_level)
void test_group(surface_create *SC, int verbose_level)
int create_double_six_safely(long int *five_lines, long int transversal_line, long int *double_six, int verbose_level)
algebraic_geometry::surface_domain * Surf
void sweep_4_15_lines(surface_create_description *Surface_Descr, std::string &sweep_fname, int verbose_level)
induced_actions::action_on_homogeneous_polynomials * AonHPD_3_4
actions::action * A_wedge
void complete_skew_hexagon(long int *skew_hexagon, std::vector< std::vector< long int > > &Double_sixes, int verbose_level)
void table_of_cubic_surfaces_export_sql(long int *Table, int nb_cols, int q, int nb_cubic_surfaces, surface_create **SC, int verbose_level)
void report_with_group(surface_create *SC, int f_has_control_six_arcs, poset_classification::poset_classification_control *Control_six_arcs, int verbose_level)
to create a cubic surface from a description using class surface_create_description
void apply_transformations(std::vector< std::string > &transform_coeffs, std::vector< int > &f_inverse_transform, int verbose_level)
void create_surface_by_double_six(std::string &by_double_six_label, std::string &by_double_six_label_tex, std::string &by_double_six_text, int verbose_level)
void create_surface_from_description(int verbose_level)
void create_surface_Cayley_form(int k, int l, int m, int n, int verbose_level)
void create_surface_by_coefficients(std::string &coefficients_text, std::vector< std::string > &select_double_six_string, int verbose_level)
void create_surface_general_abcd(int a, int b, int c, int d, int verbose_level)
surface_create_description * Descr
data_structures_groups::vector_ge * nice_gens
surface_with_action * Surf_A
void create_surface_by_rank(std::string &rank_text, int defining_q, std::vector< std::string > &select_double_six_string, int verbose_level)
void create_surface_G13(int a, int verbose_level)
void create_surface_by_skew_hexagon(std::string &given_label, std::string &given_label_tex, int verbose_level)
void compute_group(projective_geometry::projective_space_with_action *PA, int verbose_level)
void create_surface_F13(int a, int verbose_level)
void override_group(std::string &group_order_text, int nb_gens, std::string &gens_text, int verbose_level)
void create_surface_from_catalogue(int iso, std::vector< std::string > &select_double_six_string, int verbose_level)
algebraic_geometry::surface_domain * Surf
void create_surface_by_arc_lifting(std::string &arc_lifting_text, int verbose_level)
field_theory::finite_field * F
void create_surface_by_equation(std::string &name_of_formula, std::string &name_of_formula_tex, std::string &managed_variables, std::string &equation_text, std::string &equation_parameters, std::string &equation_parameters_tex, std::vector< std::string > &select_double_six_string, int verbose_level)
void init_with_data(surface_create_description *Descr, surface_with_action *Surf_A, int verbose_level)
void create_Eckardt_surface(int a, int b, int verbose_level)
void create_surface_bes(int a, int c, int verbose_level)
algebraic_geometry::surface_object * SO
void create_surface_by_coefficient_vector(int *coeffs20, std::vector< std::string > &select_double_six_string, int verbose_level)
void create_surface_by_arc_lifting_with_two_lines(std::string &arc_lifting_text, std::string &arc_lifting_two_lines_text, int verbose_level)
groups::strong_generators * Sg
void init(surface_create_description *Descr, surface_with_action *Surf_A, int verbose_level)
projective space PG(n,q) with automorphism group PGGL(n+1,q)
three skew lines in PG(3,q), used to classify spreads
the orbiter library for the classification of combinatorial objects
data on a single cubic surface used to prepare the ATLAS of cubic surfaces
numerical data for one cubic surface to be used in reports