17namespace layer5_applications {
18namespace projective_geometry {
22static int table_of_sets_compare_func(
void *data,
int i,
86 int f_init_incidence_structure,
89 int f_v = (verbose_level >= 1);
92 cout <<
"projective_space_with_action::init" << endl;
112 cout <<
"projective_space_with_action::init before Dom->init" << endl;
116 cout <<
"projective_space_with_action::init after Dom->init" << endl;
120 cout <<
"projective_space_with_action::init before QCDA->init" << endl;
124 cout <<
"projective_space_with_action::init after QCDA->init" << endl;
130 cout <<
"projective_space_with_action::init n >= 3, so we initialize a plane" << endl;
134 cout <<
"projective_space_with_action::init before PA2->init" << endl;
140 cout <<
"projective_space_with_action::init after PA2->init" << endl;
150 cout <<
"projective_space_with_action::init done" << endl;
155 int f_semilinear,
int verbose_level)
157 int f_v = (verbose_level >= 1);
160 cout <<
"projective_space_with_action::init_group" << endl;
163 cout <<
"projective_space_with_action::init_group "
164 "creating linear group" << endl;
180 cout <<
"projective_space_with_action::init_group "
181 "creating linear group done" << endl;
185 cout <<
"projective_space_with_action::init_group "
186 "before create_sims" << endl;
191 cout <<
"projective_space_with_action::init_group "
192 "after create_sims" << endl;
199 cout <<
"projective_space_with_action::init_group "
200 "creating action on lines" << endl;
204 cout <<
"projective_space_with_action::init_group "
205 "creating action on lines done" << endl;
210 cout <<
"projective_space_with_action::init_group "
211 "creating action on planes" << endl;
216 cout <<
"projective_space_with_action::init_group "
217 "creating action on lines planes" << endl;
226 cout <<
"projective_space_with_action::init_group done" << endl;
232void projective_space_with_action::canonical_form(
233 projective_space_object_classifier_description *Canonical_form_PG_Descr,
236 int f_v = (verbose_level >= 1);
237 classification_of_objects *OC;
240 cout <<
"projective_space_with_action::canonical_form" << endl;
246 data_input_stream_description *IS_Descr;
248 IS_Descr =
NEW_OBJECT(data_input_stream_description);
250 IS_Descr->add_set_of_points(a);
252 data_input_stream *IS;
259 cout <<
"projective_space_with_action::canonical_form before OC->do_the_work" << endl;
262 Canonical_form_PG_Descr,
268 cout <<
"projective_space_with_action::canonical_form after OC->do_the_work" << endl;
275 cout <<
"projective_space_with_action::canonical_form done" << endl;
282 int *canonical_labeling,
285 int f_v = (verbose_level >= 1);
288 cout <<
"projective_space_with_action::canonical_labeling"
293 cout <<
"projective_space_with_action::canonical_labeling "
294 "before OiP->canonical_labeling" << endl;
297 int nb_rows, nb_cols;
306 NO->
allocate(nb_rows + nb_cols, 0 );
313 for (i = 0; i < NO->
N; i++) {
317 cout <<
"projective_space_with_action::canonical_labeling "
318 "after OiP->canonical_labeling" << endl;
325 cout <<
"projective_space_with_action::canonical_labeling done" << endl;
330 int *Elt, std::ostream &ost,
333 int f_v = (verbose_level >= 1);
336 cout <<
"projective_space_with_action::report_fixed_points_lines_and_planes" << endl;
340 cout <<
"projective_space_with_action::report_fixed_points_lines_and_planes P->n < 3" << endl;
349 ost <<
"Fixed Objects:\\\\" << endl;
353 ost <<
"The element" << endl;
357 ost <<
"has the following fixed objects:\\\\" << endl;
360 ost <<
"Fixed points:\\\\" << endl;
363 for (i = 0; i < P3->
N_points; i++) {
370 ost <<
"There are " << cnt <<
" fixed points, they are: \\\\" << endl;
371 for (i = 0; i < P3->
N_points; i++) {
377 ost <<
"\\\\" << endl;
382 ost <<
"Fixed Lines:\\\\" << endl;
390 for (i = 0; i < A2->
degree; i++) {
397 ost <<
"There are " << cnt <<
" fixed lines, they are: \\\\" << endl;
399 for (i = 0; i < A2->
degree; i++) {
402 ost << i <<
" : $\\left[";
404 ost <<
"\\right]$\\\\" << endl;
412 ost <<
"Fixed Planes:\\\\" << endl;
420 for (i = 0; i < A2->
degree; i++) {
427 ost <<
"There are " << cnt <<
" fixed planes, they are: \\\\" << endl;
429 for (i = 0; i < A2->
degree; i++) {
432 ost << i <<
" : $\\left[";
434 ost <<
"\\right]$\\\\" << endl;
443 cout <<
"projective_space_with_action::report_fixed_points_lines_and_planes done" << endl;
448 int *Elt, std::ostream &ost,
451 int f_v = (verbose_level >= 1);
454 cout <<
"projective_space_with_action::report_orbits_on_points_lines_and_planes" << endl;
458 cout <<
"projective_space_with_action::report_orbits_on_points_lines_and_planes P->n < 3" << endl;
467 full_group_order.
create(order, __FILE__, __LINE__);
471 ost <<
"Fixed Objects:\\\\" << endl;
475 ost <<
"The group generated by the element" << endl;
479 ost <<
"has the following orbits:\\\\" << endl;
481 ost <<
"Orbits on points:\\\\" << endl;
495 ost <<
"Orbits on lines:\\\\" << endl;
514 ost <<
"Orbits on planes:\\\\" << endl;
535 cout <<
"projective_space_with_action::report_orbits_on_points_lines_and_planes done" << endl;
540 int *Elt, ostream &ost, std::string &fname_base,
543 int f_v = (verbose_level >= 1);
546 cout <<
"projective_space_with_action::report_decomposition_by_single_automorphism" << endl;
553 cout <<
"projective_space_with_action::report_decomposition_by_single_automorphism "
554 "before Geo.report_decomposition_by_single_automorphism" << endl;
559 Elt, ost, fname_base,
563 cout <<
"projective_space_with_action::report_decomposition_by_single_automorphism "
564 "after Geo.report_decomposition_by_single_automorphism" << endl;
569 cout <<
"projective_space_with_action::report_decomposition_by_single_automorphism done" << endl;
582 int f_v = (verbose_level >= 1);
588 cout <<
"projective_space_with_action::compute_group_of_set" << endl;
592 projective_space_object_classifier_description *Descr;
593 classification_of_objects *Classifier;
595 Descr =
NEW_OBJECT(projective_space_object_classifier_description);
596 Classifier =
NEW_OBJECT(classification_of_objects);
598 Descr->f_input =
TRUE;
599 Descr->Data =
NEW_OBJECT(data_input_stream_description);
600 Descr->Data->input_type[Descr->Data->nb_inputs] = INPUT_TYPE_SET_OF_POINTS;
601 Descr->Data->input_string[Descr->Data->nb_inputs].assign(
"");
602 for (i = 0; i < set_sz; i++) {
604 sprintf(str,
"%ld", a);
605 Descr->Data->input_string[Descr->Data->nb_inputs].append(str);
606 if (i < set_sz - 1) {
607 Descr->Data->input_string[Descr->Data->nb_inputs].append(
",");
610 Descr->Data->input_string2[Descr->Data->nb_inputs].assign(
"");
611 Descr->Data->nb_inputs++;
614 cout <<
"projective_space_with_action::compute_group_of_set "
615 "before Classifier->do_the_work" << endl;
618 Classifier->do_the_work(
625 cout <<
"projective_space_with_action::compute_group_of_set "
626 "after Classifier->do_the_work" << endl;
632 idx = Classifier->CB->type_of[Classifier->CB->n - 1];
648 cout <<
"projective_space_with_action::compute_group_of_set ago = " << ago << endl;
655 cout <<
"projective_space_with_action::compute_group_of_set done" << endl;
662 std::string &evaluate_text,
665 int f_v = (verbose_level >= 1);
668 cout <<
"projective_space_with_action::map" << endl;
672 cout <<
"projective_space_activity::map" << endl;
673 cout <<
"formula:" << endl;
678 cout <<
"Formula is not homogeneous" << endl;
682 cout <<
"Formula is homogeneous of degree " << Formula->
degree << endl;
686 cout <<
"Formula->nb_managed_vars != P->n + 1" << endl;
695 cout <<
"projective_space_with_action::map before Poly->init" << endl;
703 cout <<
"projective_space_with_action::map after Poly->init" << endl;
711 cout <<
"projective_space_with_action::map before Formula->get_subtrees" << endl;
713 Formula->
get_subtrees(Poly, Subtrees, nb_monomials, verbose_level);
715 cout <<
"projective_space_with_action::map after Formula->get_subtrees" << endl;
720 for (i = 0; i < nb_monomials; i++) {
721 cout <<
"Monomial " << i <<
" : ";
729 cout <<
"no subtree" << endl;
734 int *Coefficient_vector;
736 Coefficient_vector =
NEW_int(nb_monomials);
739 Subtrees, evaluate_text, Coefficient_vector,
743 cout <<
"projective_space_with_action::map coefficient vector:" << endl;
749 del_pezzo_surface_of_degree_two_domain *del_Pezzo;
751 del_Pezzo =
NEW_OBJECT(del_pezzo_surface_of_degree_two_domain);
753 del_Pezzo->init(
P, Poly4_3, verbose_level);
755 del_pezzo_surface_of_degree_two_object *del_Pezzo_surface;
757 del_Pezzo_surface =
NEW_OBJECT(del_pezzo_surface_of_degree_two_object);
759 del_Pezzo_surface->init(del_Pezzo,
760 Formula, Subtrees, Coefficient_vector,
763 del_Pezzo_surface->enumerate_points_and_lines(verbose_level);
765 del_Pezzo_surface->pal->write_points_to_txt_file(Formula->
name_of_formula, verbose_level);
777 cout <<
"projective_space_with_action::map done" << endl;
784 std::string &evaluate_text,
787 int f_v = (verbose_level >= 1);
790 cout <<
"projective_space_with_action::analyze_del_Pezzo_surface" << endl;
794 cout <<
"projective_space_activity::analyze_del_Pezzo_surface" << endl;
795 cout <<
"formula:" << endl;
800 cout <<
"Formula is not homogeneous" << endl;
803 if (Formula->
degree != 4) {
804 cout <<
"Formula is not of degree 4. Degree is " << Formula->
degree << endl;
808 cout <<
"Formula should have 3 managed variables. Has " << Formula->
nb_managed_vars << endl;
817 cout <<
"projective_space_with_action::analyze_del_Pezzo_surface before Poly->init" << endl;
825 cout <<
"projective_space_with_action::analyze_del_Pezzo_surface after Poly->init" << endl;
833 cout <<
"projective_space_with_action::analyze_del_Pezzo_surface before Formula->get_subtrees" << endl;
835 Formula->
get_subtrees(Poly4_3, Subtrees, nb_monomials, verbose_level);
837 cout <<
"projective_space_with_action::analyze_del_Pezzo_surface after Formula->get_subtrees" << endl;
842 for (i = 0; i < nb_monomials; i++) {
843 cout <<
"Monomial " << i <<
" : ";
851 cout <<
"no subtree" << endl;
856 int *Coefficient_vector;
858 Coefficient_vector =
NEW_int(nb_monomials);
861 Subtrees, evaluate_text, Coefficient_vector,
865 cout <<
"projective_space_with_action::analyze_del_Pezzo_surface coefficient vector:" << endl;
874 del_Pezzo->
init(
P, Poly4_3, verbose_level);
880 del_Pezzo_surface->
init(del_Pezzo,
881 Formula, Subtrees, Coefficient_vector,
897 cout <<
"projective_space_with_action::analyze_del_Pezzo_surface done" << endl;
903 int decomposition_by_element_power,
904 std::string &decomposition_by_element_data, std::string &fname_base,
907 int f_v = (verbose_level >= 1);
911 cout <<
"projective_space_with_action::do_cheat_sheet_for_decomposition_by_element_PG verbose_level="
912 << verbose_level << endl;
925 snprintf(title, 1000,
"Decomposition of PG($%d,%d$)",
n,
F->
q);
932 fname_tex.assign(fname_base);
933 fname_tex.append(
".tex");
936 ofstream ost(fname_tex);
952 cout <<
"projective_space_with_action::do_cheat_sheet_for_decomposition_by_element_PG f_decomposition_by_element" << endl;
961 decomposition_by_element_data, verbose_level);
965 decomposition_by_element_power, verbose_level);
968 Elt, ost, fname_base,
980 cout <<
"written file " << fname_tex <<
" of size "
986 cout <<
"projective_space_with_action::do_cheat_sheet_for_decomposition_by_element_PG done" << endl;
994 int f_v = (verbose_level >= 1);
997 cout <<
"projective_space_with_action::do_cheat_sheet_for_decomposition_by_subgroup" << endl;
1005 subgroup_Descr->
F =
P->
F;
1008 cout <<
"projective_space_with_action::do_cheat_sheet_for_decomposition_by_subgroup H_LG->init, "
1009 "creating the group" << endl;
1015 cout <<
"projective_space_with_action::do_cheat_sheet_for_decomposition_by_subgroup after H_LG->linear_group_init" << endl;
1026 fname.assign(H_LG->
label);
1027 fname.append(
"_decomp.tex");
1034 snprintf(title, 1000,
"Decomposition of PG($%d,%d$)",
n,
F->
q);
1040 ofstream ost(fname);
1056 cout <<
"projective_space_with_action::do_cheat_sheet_for_decomposition_by_element_PG f_decomposition_by_element" << endl;
1072 cout <<
"written file " << fname <<
" of size "
1078 cout <<
"projective_space_with_action::do_cheat_sheet_for_decomposition_by_subgroup done" << endl;
1088 int f_v = (verbose_level >= 1);
1091 cout <<
"projective_space_with_action::report" << endl;
1097 cout <<
"projective_space_with_action::report done" << endl;
1107 int f_v = (verbose_level >= 1);
1110 cout <<
"projective_space_with_action::create_quartic_curve" << endl;
1113 cout <<
"projective_space_with_action::create_quartic_curve we need a two-dimensional projective space" << endl;
1117 if (Quartic_curve_descr->
get_q() !=
q) {
1118 cout <<
"projective_space_activity::do_create_quartic_curve Quartic_curve_descr->get_q() != q" << endl;
1125 cout <<
"projective_space_with_action::create_quartic_curve before SC->init" << endl;
1127 QC->
init(Quartic_curve_descr,
this,
QCDA, verbose_level);
1129 cout <<
"projective_space_with_action::create_quartic_curve after SC->init" << endl;
1134 cout <<
"projective_space_with_action::create_quartic_curve "
1135 "before SC->apply_transformations" << endl;
1142 cout <<
"projective_space_with_action::create_quartic_curve "
1143 "after SC->apply_transformations" << endl;
1149 cout <<
"projective_space_with_action::create_quartic_curve done" << endl;
1155 int *genma,
int m,
int n,
1159 int f_v = (verbose_level >= 1);
1162 cout <<
"projective_space_with_action::canonical_form_of_code" << endl;
1169 cout <<
"Generator matrix: " << endl;
1175 for (j = 0; j <
n; j++) {
1176 for (i = 0; i < m; i++) {
1177 v[i] = genma[i *
n + j];
1180 cout <<
"projective_space_with_action::canonical_form_of_code "
1181 "before PA->P->rank_point" << endl;
1186 cout <<
"P == NULL" << endl;
1192 cout <<
"projective_space_with_action::canonical_form_of_code set=";
1198 string points_as_string;
1202 cout <<
"projective_space_with_action::canonical_form_of_code "
1203 "points_as_string=" << points_as_string << endl;
1210 ISD.
Input.push_back(E);
1215 IS.
init(&ISD, verbose_level);
1225 std::string save_as_fname;
1227 int f_extract_subset;
1228 std::string extract_subset_set;
1229 std::string extract_subset_fname;
1234 int conic_type_threshold;
1236 int f_non_conical_type;
1244 int f_canonical_form_PG;
1245 std::string canonical_form_PG_PG_label;
1246 classification_of_objects_description *Canonical_form_PG_Descr;
1248 int f_canonical_form;
1249 classification_of_objects_description *Canonical_form_Descr;
1252 classification_of_objects_report_options *Classification_of_objects_report_options;
1285 cout <<
"projective_space_with_action::canonical_form_of_code after PA->canonical_form" << endl;
1292 cout <<
"projective_space_with_action::canonical_form_of_code done" << endl;
1299 int f_v = (verbose_level >= 1);
1302 cout <<
"projective_space_with_action::table_of_quartic_curves" << endl;
1306 cout <<
"projective_space_with_action::table_of_quartic_curves "
1307 "we need a two-dimensional projective space" << endl;
1313 int nb_quartic_curves;
1324 nb_K =
NEW_int(nb_quartic_curves);
1326 Table =
NEW_lint(nb_quartic_curves * nb_cols);
1328 for (h = 0; h < nb_quartic_curves; h++) {
1331 cout <<
"projective_space_with_action::table_of_quartic_curves "
1332 << h <<
" / " << nb_quartic_curves << endl;
1336 Quartic_curve_descr.
f_q =
TRUE;
1337 Quartic_curve_descr.
q =
q;
1339 Quartic_curve_descr.
iso = h;
1351 cout <<
"projective_space_with_action::table_of_quartic_curves "
1352 << h <<
" / " << nb_quartic_curves <<
" before K.quartic_curves_stab_gens" << endl;
1357 cout <<
"projective_space_with_action::table_of_quartic_curves "
1358 << h <<
" / " << nb_quartic_curves <<
" stab_order=" << stab_order << endl;
1365 &Quartic_curve_descr,
1372 Table[h * nb_cols + 0] = h;
1373 Table[h * nb_cols + 1] = nb_K[h];
1377 Table[h * nb_cols + 5] = QC[h]->
QO->
nb_pts;
1380 Table[h * nb_cols + 0] = h;
1381 Table[h * nb_cols + 1] = -1;
1382 Table[h * nb_cols + 2] = -1;
1383 Table[h * nb_cols + 3] = -1;
1384 Table[h * nb_cols + 4] = -1;
1385 Table[h * nb_cols + 5] = -1;
1389 cout <<
"projective_space_with_action::table_of_quartic_curves "
1390 << h <<
" / " << nb_quartic_curves <<
" done" << endl;
1398 sprintf(str,
"_q%d",
q);
1401 fname.assign(
"quartic_curves");
1403 fname.append(
"_info.csv");
1411 f <<
"Row,OCN,K,Kon,Koff,Ago,NbPts,BisecantType,Eqn15,Eqn,Pts,Bitangents28";
1413 for (i = 0; i < nb_quartic_curves; i++) {
1417 if (Table[i * nb_cols + 1] == -1) {
1418 for (j = 0; j < nb_cols; j++) {
1426 for (j = 0; j < nb_cols; j++) {
1427 f <<
"," << Table[i * nb_cols + j];
1446 str.assign(sstr.str());
1472 cout <<
"Written file " << fname <<
" of size " << Fio.
file_size(fname) << endl;
1475 cout <<
"projective_space_with_action::table_of_quartic_curves done" << endl;
1482 int f_v = (verbose_level >= 1);
1485 cout <<
"projective_space_with_action::table_of_cubic_surfaces" << endl;
1489 cout <<
"projective_space_with_action::table_of_cubic_surfaces "
1490 "we need a three-dimensional projective space" << endl;
1501 cout <<
"projective_space_with_action::table_of_cubic_surfaces before Surf_A->table_of_cubic_surfaces" << endl;
1505 cout <<
"projective_space_with_action::table_of_cubic_surfaces after Surf_A->table_of_cubic_surfaces" << endl;
1510 cout <<
"projective_space_with_action::table_of_cubic_surfaces done" << endl;
1516 long int *Pts,
int nb_pts,
int threshold,
1519 int f_v = (verbose_level >= 1);
1522 cout <<
"projective_space_with_action::conic_type threshold = " << threshold << endl;
1526 long int **Pts_on_conic;
1528 int *nb_pts_on_conic;
1534 cout <<
"projective_space_with_action::conic_type before PA->P->conic_type" << endl;
1539 Pts_on_conic, Conic_eqn, nb_pts_on_conic, len,
1543 cout <<
"projective_space_with_action::conic_type after PA->P->conic_type" << endl;
1547 cout <<
"We found the following conics:" << endl;
1548 for (h = 0; h < len; h++) {
1549 cout << h <<
" : " << nb_pts_on_conic[h] <<
" : ";
1556 cout <<
"computing intersection types with bisecants of the first 11 points:" << endl;
1560 long int p1, p2, line_rk;
1561 long int *pts_on_line;
1563 int *Conic_line_intersection_sz;
1566 int nb_pts_per_line;
1569 nb_pts_per_line =
q + 1;
1570 pts_on_line =
NEW_lint(55 * nb_pts_per_line);
1573 for (i = 0; i < 11; i++) {
1574 for (j = i + 1; j < 11; j++) {
1581 cout <<
"cnt != 55" << endl;
1582 cout <<
"cnt = " << cnt << endl;
1585 for (u = 0; u < 55; u++) {
1594 Conic_line_intersection_sz =
NEW_int(len * 55);
1597 for (h = 0; h < len; h++) {
1598 for (u = 0; u < 55; u++) {
1599 for (v = 0; v < nb_pts_per_line; v++) {
1601 Conic_line_intersection_sz[h * 55 + u]++;
1611 cout <<
"We found the following conics and their intersections with the 55 bisecants:" << endl;
1612 for (h = 0; h < len; h++) {
1613 cout << h <<
" : " << nb_pts_on_conic[h] <<
" : ";
1623 for (u = 0; u < 55; u++) {
1624 cout <<
"line " << u <<
" : ";
1628 for (v = 0; v < nb_pts; v++) {
1639 cout <<
"projective_space_with_action::conic_type done" << endl;
1648 int f_v = (verbose_level >= 1);
1651 cout <<
"projective_space_with_action::cheat_sheet" << endl;
1661 snprintf(fname, 1000,
"PG_%d_%d.tex",
n,
F->
q);
1662 snprintf(title, 1000,
"Cheat Sheet ${\\rm PG}(%d,%d)$",
n,
F->
q);
1668 ofstream ost(fname);
1684 cout <<
"projective_space_with_action::do_cheat_sheet_PG before A->report" << endl;
1693 cout <<
"projective_space_with_action::do_cheat_sheet_PG after PA->A->report" << endl;
1697 cout <<
"projective_space_with_action::do_cheat_sheet_PG before PA->P->report" << endl;
1702 P->
report(ost, O, verbose_level);
1705 cout <<
"projective_space_with_action::do_cheat_sheet_PG after PP->report" << endl;
1715 cout <<
"written file " << fname <<
" of size "
1722 cout <<
"projective_space_with_action::cheat_sheet done" << endl;
1733 int f_v = (verbose_level >= 1);
1736 cout <<
"projective_space_with_action::do_spread_classify" << endl;
1743 cout <<
"projective_space_with_action::do_spread_classify before SC->init" << endl;
1752 cout <<
"projective_space_with_action::do_spread_classify after SC->init" << endl;
1756 cout <<
"projective_space_with_action::do_spread_classify before SC->init2" << endl;
1758 SC->
init2(Control, verbose_level);
1760 cout <<
"projective_space_with_action::do_spread_classify after SC->init2" << endl;
1765 cout <<
"projective_space_with_action::do_spread_classify before SC->compute" << endl;
1771 cout <<
"projective_space_with_action::do_spread_classify after SC->compute" << endl;
1778 cout <<
"projective_space_with_action::do_spread_classify done" << endl;
1786 int f_v = (verbose_level >= 1);
1789 cout <<
"projective_space_with_action::setup_surface_with_action" << endl;
1790 cout <<
"projective_space_with_action::setup_surface_with_action verbose_level=" << verbose_level << endl;
1798 cout <<
"projective_space_with_action::setup_surface_with_action before Surf->init" << endl;
1803 cout <<
"projective_space_with_action::setup_surface_with_action after Surf->init" << endl;
1809 cout <<
"projective_space_with_action::setup_surface_with_action before Surf_A->init" << endl;
1811 Surf_A->
init(Surf,
this,
TRUE , 0 );
1813 cout <<
"projective_space_with_action::setup_surface_with_action after Surf_A->init" << endl;
1823 int f_v = (verbose_level >= 1);
1826 cout <<
"projective_space_with_action::report_decomposition_by_group" << endl;
1834 cout <<
"projective_space_with_action::report_decomposition_by_group "
1835 "before Geo.report_decomposition_by_group" << endl;
1839 SG, ost, fname_base,
1842 cout <<
"projective_space_with_action::report_decomposition_by_group "
1843 "after Geo.report_decomposition_by_group" << endl;
1849 cout <<
"projective_space_with_action::report_decomposition_by_group done" << endl;
1858 int f_v = (verbose_level >= 1);
1861 cout <<
"projective_space_with_action::do_rank_lines_in_PG" << endl;
1870 cout <<
"projective_space_with_action::do_rank_lines_in_PG v: ";
1875 if (
n != 2 * (
P->
n + 1)) {
1876 cout <<
"projective_space_with_action::do_rank_lines_in_PG n != 2 * (P->n + 1)" << endl;
1883 for (i = 0; i < m; i++) {
1889 cout <<
"has rank " << a << endl;
1902 int f_v = (verbose_level >= 1);
1905 cout <<
"projective_space_with_action::do_unrank_lines_in_PG" << endl;
1916 cout <<
"projective_space_with_action::do_unrank_lines_in_PG v: ";
1921 len = 2 * (
P->
n + 1);
1927 for (i = 0; i < sz; i++) {
1933 cout << v[i] <<
" = " << endl;
1957void OiPA_encode(
void *extra_data,
1958 long int *&encoding,
int &encoding_sz,
void *global_data)
1962 object_with_canonical_form *OwCF;
1972void OiPA_group_order(
void *extra_data,
1973 longinteger_object &go,
void *global_data)
1976 object_in_projective_space_with_action *OiPA;
1979 OiPA = (object_in_projective_space_with_action *) extra_data;
1981 go.create(OiPA->ago, __FILE__, __LINE__);
1991void compute_ago_distribution(
1992 classify_bitvectors *CB, tally *&C_ago,
int verbose_level)
1994 int f_v = (verbose_level >= 1);
1997 cout <<
"compute_ago_distribution" << endl;
2003 for (i = 0; i < CB->nb_types; i++) {
2004 object_in_projective_space_with_action *OiPA;
2006 OiPA = (object_in_projective_space_with_action *)
2007 CB->Type_extra_data[i];
2011 C_ago->init_lint(Ago, CB->nb_types,
FALSE, 0);
2014 cout <<
"compute_ago_distribution done" << endl;
2018void compute_ago_distribution_permuted(
2019 classify_bitvectors *CB, tally *&C_ago,
int verbose_level)
2021 int f_v = (verbose_level >= 1);
2024 cout <<
"compute_ago_distribution_permuted" << endl;
2030 for (i = 0; i < CB->nb_types; i++) {
2031 object_in_projective_space_with_action *OiPA;
2033 OiPA = (object_in_projective_space_with_action *)
2034 CB->Type_extra_data[CB->perm[i]];
2038 C_ago->init_lint(Ago, CB->nb_types,
FALSE, 0);
2041 cout <<
"compute_ago_distribution_permuted done" << endl;
2045void compute_and_print_ago_distribution(ostream &ost,
2046 classify_bitvectors *CB,
int verbose_level)
2048 int f_v = (verbose_level >= 1);
2051 cout <<
"compute_and_print_ago_distribution" << endl;
2054 compute_ago_distribution(CB, C_ago, verbose_level);
2055 ost <<
"ago distribution: " << endl;
2056 ost <<
"$$" << endl;
2057 C_ago->print_naked_tex(ost,
TRUE );
2059 ost <<
"$$" << endl;
2063void compute_and_print_ago_distribution_with_classes(ostream &ost,
2064 classify_bitvectors *CB,
int verbose_level)
2066 int f_v = (verbose_level >= 1);
2071 cout <<
"compute_and_print_ago_distribution_with_classes" << endl;
2074 compute_ago_distribution_permuted(CB, C_ago, verbose_level);
2075 ost <<
"Ago distribution: " << endl;
2076 ost <<
"$$" << endl;
2077 C_ago->print_naked_tex(ost,
TRUE );
2079 ost <<
"$$" << endl;
2084 SoS = C_ago->get_set_partition_and_types(types,
2085 nb_types, verbose_level);
2089 for (i = SoS->nb_sets - 1; i >= 0; i--) {
2090 ost <<
"Group order $" << types[i]
2091 <<
"$ appears for the following $" << SoS->Set_size[i]
2092 <<
"$ classes: $" << endl;
2093 L.lint_set_print_tex(ost, SoS->Sets[i], SoS->Set_size[i]);
2094 ost <<
"$\\\\" << endl;
2108static int table_of_sets_compare_func(
void *data,
int i,
2109 void *search_object,
2112 long int *Data = (
long int *) data;
2113 long int *p = (
long int *) extra_data;
2114 long int len = p[0];
2118 ret = Sorting.
lint_vec_compare(Data + i * len, (
long int *) search_object, len);
domain for del Pezzo surfaces of degree two
void init(geometry::projective_space *P, ring_theory::homogeneous_polynomial_domain *Poly4_3, int verbose_level)
a del Pezzo surface of degree two
void enumerate_points_and_lines(int verbose_level)
geometry::points_and_lines * pal
void init(del_pezzo_surface_of_degree_two_domain *Dom, expression_parser::formula *RHS, expression_parser::syntax_tree_node **Subtrees, int *Coefficient_vector, int verbose_level)
void create_latex_report(std::string &label, std::string &label_tex, int verbose_level)
domain for quartic curves in PG(2,q) with 28 bitangents
void init(field_theory::finite_field *F, int verbose_level)
void print_equation_maple(std::stringstream &ost, int *coeffs)
quartic_curve_object_properties * QP
cubic surfaces in PG(3,q) with 27 lines
void init(field_theory::finite_field *F, int verbose_level)
description of a classification of objects using class classification_of_objects
options for the report for a classification of combinatorial objects
int f_show_incidence_matrices
void create_string_with_quotes(std::string &str, int *v, int len)
void create_string_with_quotes(std::string &str, long int *v, int len)
output data created by a run of nauty
void allocate(int N, int verbose_level)
a collection of functions related to sorted vectors
int lint_vec_search_linear(long int *v, int len, long int a, int &idx)
int lint_vec_compare(long int *p, long int *q, int len)
interior node in a syntax tree
void print_expression(std::ostream &ost)
void PG_element_normalize(int *v, int stride, int len)
void PG_element_unrank_modified(int *v, int stride, int len, int a)
void print_single_generator_matrix_tex(std::ostream &ost, long int a)
void write_points_to_txt_file(std::string &label, int verbose_level)
projective space PG(n,q) of dimension n over Fq
void conic_type(long int *set, int set_size, int threshold, long int **&Pts_on_conic, int **&Conic_eqn, int *&nb_pts_on_conic, int &nb_conics, int verbose_level)
long int rank_line(int *basis)
void create_points_on_line(long int line_rk, long int *line, int verbose_level)
void report(std::ostream &ost, graphics::layered_graph_draw_options *O, int verbose_level)
int test_if_conic_contains_point(int *six_coeffs, int pt)
field_theory::finite_field * F
long int rank_point(int *v)
void projective_space_init(int n, field_theory::finite_field *F, int f_init_incidence_structure, int verbose_level)
long int line_through_two_points(long int p1, long int p2)
void unrank_line(int *basis, long int rk)
options for drawing an object of type layered_graph
provides access to pre-computed combinatorial data in encoded form
void quartic_curves_stab_gens(int q, int i, int *&data, int &nb_gens, int &data_size, std::string &stab_order_str)
int quartic_curves_nb_reps(int q)
a collection of functions related to file io
long int file_size(std::string &fname)
interface to create latex output files
void head(std::ostream &ost, int f_book, int f_title, const char *title, const char *author, int f_toc, int f_landscape, int f_12pt, int f_enlarged_page, int f_pagenumbers, const char *extras_for_preamble)
void foot(std::ostream &ost)
data_structures::lint_vec * Lint_vec
data_structures::int_vec * Int_vec
void get_matrix_from_label(std::string &label, int *&v, int &m, int &n)
homogeneous polynomials of a given degree in a given number of variables over a finite field GF(q)
void init(field_theory::finite_field *F, int nb_vars, int degree, int f_init_incidence_structure, monomial_ordering_type Monomial_ordering_type, int verbose_level)
void print_monomial(std::ostream &ost, int i)
a class to represent arbitrary precision integers
void create(long int i, const char *file, int line)
a permutation group in a fixed action.
void element_print_latex(void *elt, std::ostream &ost)
void report(std::ostream &ost, int f_sims, groups::sims *S, int f_strong_gens, groups::strong_generators *SG, graphics::layered_graph_draw_options *LG_Draw_options, int verbose_level)
groups::strong_generators * Strong_gens
void make_element_from_string(int *Elt, std::string &data_string, int verbose_level)
int f_has_strong_generators
void element_power_int_in_place(int *Elt, int n, int verbose_level)
action * induced_action_on_grassmannian(int k, int verbose_level)
void all_point_orbits_from_single_generator(groups::schreier &Schreier, int *Elt, int verbose_level)
void init_linear_group(field_theory::finite_field *F, int m, int f_projective, int f_general, int f_affine, int f_semilinear, int f_special, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
int element_order(void *elt)
long int element_image_of(long int a, void *elt, int verbose_level)
to hold a vector of group elements
description of a linear group from the command line
field_theory::finite_field * F
creates a linear group from command line arguments using linear_group_description
void linear_group_init(linear_group_description *description, int verbose_level)
strong_generators * Strong_gens
Schreier trees for orbits of groups on points.
void print_orbit_lengths_tex(std::ostream &ost)
a strong generating set for a permutation group with respect to a fixed action
sims * create_sims(int verbose_level)
long int group_order_as_lint()
to control the behavior of the poset classification algorithm
cubic surfaces in projective space with automorphism group
void init(algebraic_geometry::surface_domain *Surf, projective_geometry::projective_space_with_action *PA, int f_recoordinatize, int verbose_level)
void table_of_cubic_surfaces(int verbose_level)
groups::strong_generators * Aut_gens
to describe a quartic curve from the command line
std::vector< int > f_inverse_transform
std::vector< std::string > transform_coeffs
to create a quartic curve from a description using class quartic_curve_create_description
void init(quartic_curve_create_description *Descr, projective_geometry::projective_space_with_action *PA, quartic_curve_domain_with_action *QCDA, int verbose_level)
void apply_transformations(std::vector< std::string > &transform_coeffs, std::vector< int > &f_inverse_transform, int verbose_level)
quartic_curve_object_with_action * QOA
field_theory::finite_field * F
algebraic_geometry::quartic_curve_object * QO
quartic_curve_domain_with_action * QCDA
a domain for quartic curves in projective space with group action
void init(algebraic_geometry::quartic_curve_domain *Dom, projective_geometry::projective_space_with_action *PA, int verbose_level)
algebraic_geometry::quartic_curve_domain * Dom
description of an activity for a combinatorial object
int f_canonical_form_PG_has_PA
combinatorics::classification_of_objects_report_options * Classification_of_objects_report_options
combinatorics::classification_of_objects_description * Canonical_form_PG_Descr
projective_geometry::projective_space_with_action * Canonical_form_PG_PA
perform an activity for a combinatorial object
void init_input_stream(combinatorial_object_activity_description *Descr, data_structures::data_input_stream *IS, int verbose_level)
void perform_activity(int verbose_level)
catch all class for geometry
void report_decomposition_by_single_automorphism(projective_geometry::projective_space_with_action *PA, int *Elt, std::ostream &ost, std::string &fname_base, int verbose_level)
void report_decomposition_by_group(projective_geometry::projective_space_with_action *PA, groups::strong_generators *SG, std::ostream &ost, std::string &fname_base, int verbose_level)
to represent an object in projective space
groups::strong_generators * Aut_gens
geometry::object_with_canonical_form * OwCF
projective space PG(n,q) with automorphism group PGGL(n+1,q)
void conic_type(long int *Pts, int nb_pts, int threshold, int verbose_level)
void do_spread_classify(int k, poset_classification::poset_classification_control *Control, int verbose_level)
void table_of_cubic_surfaces(int verbose_level)
void do_rank_lines_in_PG(std::string &label, int verbose_level)
applications_in_algebraic_geometry::quartic_curves::quartic_curve_domain_with_action * QCDA
void report(std::ostream &ost, graphics::layered_graph_draw_options *O, int verbose_level)
void do_cheat_sheet_for_decomposition_by_element_PG(int decomposition_by_element_power, std::string &decomposition_by_element_data, std::string &fname_base, int verbose_level)
void canonical_form_of_code(std::string &label, int *genma, int m, int n, combinatorics::classification_of_objects_description *Canonical_form_codes_Descr, int verbose_level)
geometry::projective_space * P
void map(expression_parser::formula *Formula, std::string &evaluate_text, int verbose_level)
int f_has_action_on_planes
void table_of_quartic_curves(int verbose_level)
actions::action * A_on_lines
projective_space_with_action()
void init(field_theory::finite_field *F, int n, int f_semilinear, int f_init_incidence_structure, int verbose_level)
projective_space_with_action * PA2
void analyze_del_Pezzo_surface(expression_parser::formula *Formula, std::string &evaluate_text, int verbose_level)
actions::action * A_on_planes
void cheat_sheet(graphics::layered_graph_draw_options *O, int verbose_level)
int f_init_incidence_structure
void canonical_labeling(geometry::object_with_canonical_form *OiP, int *canonical_labeling, int verbose_level)
algebraic_geometry::quartic_curve_domain * Dom
void report_decomposition_by_group(groups::strong_generators *SG, std::ostream &ost, std::string &fname_base, int verbose_level)
void do_cheat_sheet_for_decomposition_by_subgroup(std::string &label, groups::linear_group_description *subgroup_Descr, int verbose_level)
void report_decomposition_by_single_automorphism(int *Elt, std::ostream &ost, std::string &fname_base, int verbose_level)
void do_unrank_lines_in_PG(std::string &text, int verbose_level)
field_theory::finite_field * F
void create_quartic_curve(applications_in_algebraic_geometry::quartic_curves::quartic_curve_create_description *Quartic_curve_descr, applications_in_algebraic_geometry::quartic_curves::quartic_curve_create *&QC, int verbose_level)
void compute_group_of_set(long int *set, int set_sz, groups::strong_generators *&Sg, int verbose_level)
~projective_space_with_action()
void report_orbits_on_points_lines_and_planes(int *Elt, std::ostream &ost, int verbose_level)
void report_fixed_points_lines_and_planes(int *Elt, std::ostream &ost, int verbose_level)
void init_group(int f_semilinear, int verbose_level)
void setup_surface_with_action(applications_in_algebraic_geometry::cubic_surfaces_in_general::surface_with_action *&Surf_A, int verbose_level)
to classify spreads of PG(k-1,q) in PG(n-1,q) where k divides n
void init(projective_geometry::projective_space_with_action *PA, int k, int f_recoordinatize, int verbose_level)
void compute(int verbose_level)
void init2(poset_classification::poset_classification_control *Control, int verbose_level)
#define Int_vec_zero(A, B)
#define Int_vec_print_fully(A, B, C)
#define Lint_vec_scan(A, B, C)
#define Lint_vec_print(A, B, C)
#define Int_matrix_print(A, B, C)
#define Int_vec_print(A, B, C)
orbiter_kernel_system::orbiter_session * Orbiter
global Orbiter session
the orbiter library for the classification of combinatorial objects
induced_actions::action_on_grassmannian * AG