17namespace layer1_foundations {
18namespace orthogonal_geometry {
315 int f_v = (verbose_level >= 1);
330 sprintf(str,
"Op_%d_%d",
n,
q);
333 sprintf(str,
"Om_%d_%d",
n,
q);
336 sprintf(str,
"O_%d_%d",
n,
q);
342 sprintf(str,
"O^+(%d,%d)",
n,
q);
345 sprintf(str,
"O^-(%d,%d)",
n,
q);
348 sprintf(str,
"O(%d,%d)",
n,
q);
355 cout <<
"orthogonal::init: epsilon=" <<
epsilon
356 <<
" n=" <<
n <<
" (= vector space dimension)"
357 <<
" m=" <<
m <<
" (= Witt index)"
361 <<
" verbose_level=" << verbose_level
375 cout <<
"orthogonal::init before init_form_and_Gram_matrix" << endl;
379 cout <<
"orthogonal::init after init_form_and_Gram_matrix" << endl;
384 cout <<
"orthogonal::init before init_counting_functions" << endl;
388 cout <<
"orthogonal::init after init_counting_functions" << endl;
392 cout <<
"orthogonal::init before init_decomposition" << endl;
396 cout <<
"orthogonal::init after init_decomposition" << endl;
412 cout <<
"orthogonal::init initializing subspace" << endl;
416 cout <<
"orthogonal::init initializing subspace finished" << endl;
417 cout <<
"orthogonal::init subspace->epsilon=" <<
subspace->
epsilon << endl;
418 cout <<
"orthogonal::init subspace->n=" <<
subspace->
n << endl;
419 cout <<
"orthogonal::init subspace->m=" <<
subspace->
m << endl;
424 cout <<
"orthogonal::init no subspace" << endl;
430 cout <<
"orthogonal::init O^" <<
epsilon <<
"(" <<
n <<
"," <<
q <<
")" << endl;
432 <<
" n=" <<
n <<
" m=" <<
m <<
" q=" <<
q << endl;
433 cout <<
"pt_P = " <<
pt_P << endl;
434 cout <<
"pt_Q=" <<
pt_Q << endl;
435 cout <<
"nb_points = " <<
nb_points << endl;
436 cout <<
"nb_lines = " <<
nb_lines << endl;
437 cout <<
"alpha = " <<
alpha << endl;
438 cout <<
"beta = " <<
beta << endl;
439 cout <<
"gamma = " <<
gamma << endl;
444 cout <<
"orthogonal::init before allocating line_pencil of size " <<
alpha << endl;
448 cout <<
"orthogonal::init before allocating Perp1 of size "
449 <<
alpha * (
q + 1) << endl;
453 cout <<
"orthogonal::init after allocating Perp1" << endl;
460 cout <<
"orthogonal::init Gram matrix:" << endl;
465 for (i = 0; i <
T1_m; i++) {
472 cout <<
" : " << j << endl;
477 cout <<
"points of O^" <<
epsilon
478 <<
"(" <<
n <<
"," <<
q <<
") by type:" << endl;
482 cout <<
"points and lines of O^" <<
epsilon
483 <<
"(" <<
n <<
"," <<
q <<
") by type:" << endl;
489 cout <<
"orthogonal::init subspace->epsilon=" <<
subspace->
epsilon << endl;
490 cout <<
"orthogonal::init subspace->n=" <<
subspace->
n << endl;
491 cout <<
"orthogonal::init subspace->m=" <<
subspace->
m << endl;
493 cout <<
"orthogonal::init finished" << endl;
538 int f_v = (verbose_level >= 1);
542 cout <<
"orthogonal::init_form_and_Gram_matrix" << endl;
551 cout <<
"orthogonal::init_form_and_Gram_matrix before Poly->init" << endl;
558 cout <<
"orthogonal::init_form_and_Gram_matrix after Poly->init" << endl;
606 for (i = 0; i <
m; i++) {
620 cout <<
"orthogonal::init_form_and_Gram_matrix the quadratic form is: ";
627 cout <<
"orthogonal::init_form_and_Gram_matrix computing Gram matrix" << endl;
634 cout <<
"orthogonal::init_form_and_Gram_matrix "
635 "computing Gram matrix done" << endl;
638 cout <<
"orthogonal::init_form_and_Gram_matrix done" << endl;
644 int f_v = (verbose_level >= 1);
648 cout <<
"orthogonal::init_counting_functions" << endl;
653 cout <<
"T1_m(" <<
epsilon <<
","
654 <<
m <<
"," <<
q <<
") = " <<
T1_m << endl;
658 cout <<
"T1_mm1(" <<
epsilon <<
","
659 <<
m - 1 <<
"," <<
q <<
") = " <<
T1_mm1 << endl;
664 cout <<
"T1_mm2(" <<
epsilon <<
","
665 <<
m - 2 <<
"," <<
q <<
") = " <<
T1_mm2 << endl;
705 cout <<
"T1(" <<
m <<
"," <<
q <<
") = " <<
T1_m << endl;
707 cout <<
"T1(" <<
m - 1 <<
"," <<
q <<
") = " <<
T1_mm1 << endl;
710 cout <<
"T1(" <<
m - 2 <<
"," <<
q <<
") = " <<
T1_mm2 << endl;
712 cout <<
"T2(" <<
m <<
"," <<
q <<
") = " <<
T2_m << endl;
714 cout <<
"T2(" <<
m - 1 <<
"," <<
q <<
") = " <<
T2_mm1 << endl;
717 cout <<
"T2(" <<
m - 2 <<
"," <<
q <<
") = " <<
T2_mm2 << endl;
719 cout <<
"nb_pts_N1(" <<
m <<
"," <<
q <<
") = " <<
N1_m << endl;
721 cout <<
"nb_pts_N1(" <<
m - 1 <<
"," <<
q <<
") = "
725 cout <<
"nb_pts_N1(" <<
m - 2 <<
"," <<
q <<
") = "
728 cout <<
"S_m=" <<
S_m << endl;
729 cout <<
"S_mm1=" <<
S_mm1 << endl;
730 cout <<
"S_mm2=" <<
S_mm2 << endl;
731 cout <<
"Sbar_m=" <<
Sbar_m << endl;
732 cout <<
"Sbar_mm1=" <<
Sbar_mm1 << endl;
733 cout <<
"Sbar_mm2=" <<
Sbar_mm2 << endl;
734 cout <<
"N1_m=" <<
N1_m << endl;
735 cout <<
"N1_mm1=" <<
N1_mm1 << endl;
736 cout <<
"N1_mm2=" <<
N1_mm2 << endl;
739 cout <<
"orthogonal::init_counting_functions done" << endl;
745 int f_v = (verbose_level >= 1);
750 cout <<
"orthogonal::init_decomposition" << endl;
759 cout <<
"T1_m != nb_pts_Qepsilon" << endl;
760 cout <<
"T1_m=" <<
T1_m << endl;
761 cout <<
"u=" << u << endl;
766 cout <<
"orthogonal::init_decomposition before init_hyperbolic" << endl;
770 cout <<
"orthogonal::init_decomposition after init_hyperbolic" << endl;
775 cout <<
"orthogonal::init_decomposition before init_parabolic" << endl;
779 cout <<
"orthogonal::init_decomposition after init_parabolic" << endl;
786 cout <<
"nb_points=" <<
nb_points << endl;
793 cout <<
"orthogonal::init_decomposition epsilon = " <<
epsilon <<
" is illegal" << endl;
798 cout <<
"orthogonal::init_decomposition Point partition:" << endl;
800 cout <<
P[i] << endl;
802 cout <<
"orthogonal::init_decomposition Line partition:" << endl;
804 cout <<
L[i] << endl;
816 cout <<
"orthogonal::init_decomposition nb_points = " <<
nb_points << endl;
817 cout <<
"orthogonal::init_decomposition nb_lines = " <<
nb_lines << endl;
820 cout <<
"orthogonal::init_decomposition done" << endl;
826 int f_v = (verbose_level >= 1);
833 cout <<
"init_parabolic m=" <<
m <<
" q=" <<
q << endl;
885 cout <<
"init_parabolic done" << endl;
891 int f_v = (verbose_level >= 1);
895 cout <<
"init_parabolic_even" << endl;
1000 cout <<
"init_parabolic_even done" << endl;
1006 long int a, b, c, i, j;
1007 int f_v = (verbose_level >= 1);
1011 cout <<
"init_parabolic_odd" << endl;
1012 cout <<
"count_N1(" <<
m - 1 <<
"," <<
q <<
")=";
1014 cout <<
"count_S(" <<
m - 1 <<
"," <<
q <<
")=";
1019 c = (((
q - 1) / 2) - 1) * (
q - 1) * Gg.
count_N1(
m - 1,
q);
1023 cout <<
"a=" << a << endl;
1024 cout <<
"b=" << b << endl;
1025 cout <<
"c=" << c << endl;
1026 cout <<
"p1=" <<
p1 << endl;
1027 cout <<
"p2=" <<
p2 << endl;
1043 cout <<
"alpha=" <<
alpha << endl;
1044 cout <<
"beta=" <<
beta << endl;
1045 cout <<
"gamma=" <<
gamma << endl;
1051 cout <<
"p3=" <<
p3 << endl;
1052 cout <<
"p5=" <<
p5 << endl;
1053 cout <<
"p6=" <<
p6 << endl;
1060 cout <<
"omega=" <<
omega << endl;
1064 cout <<
"zeta=" <<
zeta << endl;
1085 cout <<
"l1=" <<
l1 << endl;
1086 cout <<
"l2=" <<
l2 << endl;
1087 cout <<
"l3=" <<
l3 << endl;
1088 cout <<
"l4=" <<
l4 << endl;
1089 cout <<
"l5=" <<
l5 << endl;
1090 cout <<
"l6=" <<
l6 << endl;
1091 cout <<
"l7=" <<
l7 << endl;
1092 cout <<
"l8=" <<
l8 << endl;
1193 cout <<
"computing minus_squares:" << endl;
1195 for (i = 0; i <
q; i++) {
1201 for (i = 0; i <
q - 1; i++) {
1205 cout <<
"i=" << i <<
" j=" << j
1206 <<
" is minus a square" << endl;
1225 cout <<
"minus_squares:" << endl;
1226 for (i = 0; i < a; i++) {
1229 cout <<
"minus_squares_without:" << endl;
1230 for (i = 0; i < b; i++) {
1233 cout <<
"minus_nonsquares:" << endl;
1234 for (i = 0; i < c; i++) {
1240 cout <<
"init_parabolic_odd done" << endl;
1247 int f_v = (verbose_level >= 1);
1252 cout <<
"orthogonal::init_hyperbolic" << endl;
1294 a12 = NT.number_theory_domain::ab_over_c(
l2,
q - 1,
p1);
1302 l1 = NT.number_theory_domain::ab_over_c(
a11,
p1,
q);
1304 cout <<
"orthogonal::init_hyperbolic a11 = " <<
a11 << endl;
1305 cout <<
"orthogonal::init_hyperbolic p1 = " <<
p1 << endl;
1306 cout <<
"orthogonal::init_hyperbolic l1 = " <<
l1 << endl;
1312 cout <<
"orthogonal::init_hyperbolic l1 * q != a11 * p1, overflow" << endl;
1325 for (i = 0; i < 6 * 7; i++) {
1379 cout <<
"orthogonal::init_hyperbolic done" << endl;
1405 b =
F->
mult(v[0], v[0]);
1410 int a, x1, x2, b, c, d;
1413 x1 = v[2 *
m * stride];
1414 x2 = v[(2 *
m + 1) * stride];
1415 b =
F->
mult(x1, x1);
1417 c =
F->
mult(x1, x2);
1419 d =
F->
mult(x2, x2);
1427 cout <<
"evaluate_quadratic_form epsilon = " <<
epsilon << endl;
1445 cout <<
"evaluate_bilinear_form epsilon = " <<
epsilon << endl;
1458 long int line_rk,
long int *line,
int verbose_level)
1467 long int *line,
int verbose_level)
1469 int f_v = (verbose_level >= 1);
1472 int coeff[2], t, i, a, b;
1475 cout <<
"orthogonal::points_on_line" << endl;
1483 cout <<
"orthogonal::points_on_line" << endl;
1491 for (t = 0; t <=
q; t++) {
1493 for (i = 0; i <
n; i++) {
1499 cout <<
"orthogonal::points_on_line t=" << t <<
" ";
1507 cout <<
"orthogonal::points_on_line normalized:";
1513 cout <<
"orthogonal::points_on_line=" << line[t] << endl;
1517 cout <<
"orthogonal::points_on_line done" << endl;
1522 long int pi,
long int pj,
int *pt_coords,
int verbose_level)
1524 int f_v = (verbose_level >= 1);
1525 int f_vv = (verbose_level >= 2);
1527 int coeff[2], t, i, a, b;
1530 cout <<
"orthogonal::points_on_line_by_coordinates" << endl;
1538 cout <<
"orthogonal::points_on_line_by_coordinates" << endl;
1546 for (t = 0; t <=
q; t++) {
1548 for (i = 0; i <
n; i++) {
1554 cout <<
"orthogonal::points_on_line_by_coordinates v3=";
1559 for (i = 0; i <
n; i++) {
1560 pt_coords[t *
n + i] =
v3[i];
1564 cout <<
"orthogonal::points_on_line_by_coordinates done" << endl;
1569 long int *line_pencil_point_ranks,
int verbose_level)
1571 int f_v = (verbose_level >= 1);
1573 long int t, i, rk, rk1, root1, root2;
1576 cout <<
"orthogonal::lines_on_point pt=" << pt << endl;
1579 for (i = 0; i <
alpha; i++) {
1582 1, rk, verbose_level - 3);
1604 for (i = 0; i <
alpha; i++) {
1609 cout <<
"orthogonal::lines_on_point line pencil (point ranks) "
1610 "on point " << pt <<
" : ";
1615 cout <<
"orthogonal::lines_on_point done" << endl;
1620 int *line_pencil_line_ranks,
int verbose_level)
1622 int f_v = (verbose_level >= 1);
1623 long int *line_pencil_line_ranks_lint;
1627 cout <<
"orthogonal::lines_on_point_by_line_rank_must_fit_into_int" << endl;
1631 line_pencil_line_ranks_lint, verbose_level - 3);
1632 for (i = 0; i <
alpha; i++) {
1633 line_pencil_line_ranks[i] = line_pencil_line_ranks_lint[i];
1634 if (line_pencil_line_ranks[i] != line_pencil_line_ranks_lint[i]) {
1635 cout <<
"orthogonal::lines_on_point_by_line_rank_must_fit_into_int "
1636 "line rank does not fit into int" << endl;
1642 cout <<
"orthogonal::lines_on_point_by_line_rank_must_fit_into_int done" << endl;
1647 long int *line_pencil_line_ranks,
int verbose_level)
1649 int f_v = (verbose_level >= 1);
1650 int f_vv = (verbose_level >= 2);
1652 long int rk, rk1, root1, root2, pt2;
1656 cout <<
"orthogonal::lines_on_point_by_line_rank verbose_level = " << verbose_level <<
" pt=" << pt <<
" pt_P=" <<
pt_P << endl;
1660 cout <<
"orthogonal::lines_on_point_by_line_rank subspace_point_type=" <<
subspace_point_type << endl;
1662 for (i = 0; i <
alpha; i++) {
1664 cout <<
"orthogonal::lines_on_point_by_line_rank "
1665 "i=" << i <<
" / " <<
alpha << endl;
1669 cout <<
"orthogonal::lines_on_point_by_line_rank "
1670 "i=" << i <<
" / " <<
alpha <<
" rk=" << rk << endl;
1674 cout <<
"orthogonal::lines_on_point_by_line_rank "
1675 "i=" << i <<
" / " <<
alpha <<
" has coordinates: ";
1682 cout <<
"orthogonal::lines_on_point_by_line_rank "
1683 "pt != pt_P, so applying transformation" << endl;
1692 root2 =
find_root(pt, verbose_level - 2);
1699 cout <<
"orthogonal::lines_on_point_by_line_rank applying:" << endl;
1708 cout <<
"orthogonal::lines_on_point_by_line_rank pt == pt_P, "
1709 "no need to apply transformation" << endl;
1714 cout <<
"orthogonal::lines_on_point_by_line_rank "
1715 "computing line_pencil_line_ranks[]" << endl;
1717 for (i = 0; i <
alpha; i++) {
1720 cout <<
"orthogonal::lines_on_point_by_line_rank "
1721 "i=" << i <<
" / " <<
alpha <<
" pt=" << pt <<
" pt2=" << pt2 << endl;
1722 cout <<
"orthogonal::lines_on_point_by_line_rank "
1723 "before rank_line" << endl;
1725 line_pencil_line_ranks[i] =
rank_line(pt, pt2, verbose_level);
1727 cout <<
"orthogonal::lines_on_point_by_line_rank "
1728 "after rank_line" << endl;
1729 cout <<
"orthogonal::lines_on_point_by_line_rank "
1730 "i=" << i <<
" / " <<
alpha <<
" line_pencil_line_ranks[i]=" << line_pencil_line_ranks[i] << endl;
1735 cout <<
"line pencil on point " << pt <<
" by line rank : ";
1740 cout <<
"orthogonal::lines_on_point_by_line_rank done" << endl;
1747 int f_v = (verbose_level >= 1);
1752 cout <<
"orthogonal::make_initial_partition" << endl;
1765 cout <<
"orthogonal::make_initial_partition "
1766 "splitting off point class " << i
1767 <<
" of size " << l << endl;
1769 for (j = 0; j < l; j++) {
1779 for (j = 1; j < i; j++)
1785 cout <<
"orthogonal::make_initial_partition "
1786 "splitting off line class " << i
1787 <<
" of size " << l << endl;
1789 for (j = 0; j < l; j++) {
1797 cout <<
"the initial partition of points and lines is:" << endl;
1802 cout <<
"orthogonal::make_initial_partition done" << endl;
1807 long int *point_ranks,
int *&line_vector,
int verbose_level)
1811 long int *line_pencil_line_ranks;
1818 for (i = 0; i < size; i++) {
1820 point_ranks[i], line_pencil_line_ranks, verbose_level - 2);
1822 for (h = 0; h <
alpha; h++) {
1823 j = line_pencil_line_ranks[h];
1833 int verbose_level = 0;
1842 for (t = 1; t <
q; t++) {
1843 for (i = 0; i <
n; i++) {
1863 int verbose_level = 0;
1864 int i, t, rk, rk0, t0;
1873 for (t = 1; t <
q; t++) {
1874 for (i = 0; i <
n; i++) {
1889 for (i = 0; i <
n; i++) {
1901 for (i = 0; i < len; i++) {
1910 for (i = 0; i < len; i++) {
1911 if (u[stride * i]) {
1922 for (i = 0; i <
m; i++) {
1923 u[stride * 2 * i] =
F->
mult(multiplier, u[stride * 2 * i]);
1931 for (i = 0; i < len; i++) {
1932 u[stride * i] =
F->
mult(multiplier, u[stride * i]);
1940 for (i = len - 1; i >= 0; i--) {
1941 if (u[stride * i]) {
1942 return u[stride * i];
1945 cout <<
"orthogonal::last_non_zero_entry error: the vector "
1946 "is the zero vector" << endl;
1965 for (i =
n - 2; i <
n; i++) {
1968 if (vec2[
n - 2] == 0 && vec2[
n - 1] == 0) {
1989 for (i = 0; i < len; i++) {
1998 for (i = 0; i < len; i++) {
2004 long int *Perp_without_pt,
int &sz,
int verbose_level)
2006 int f_v = (verbose_level >= 1);
2012 cout <<
"orthogonal::perp verbose_level=" << verbose_level <<
" pt=" << pt << endl;
2016 cout <<
"orthogonal::perp before lines_on_point_by_line_rank" << endl;
2020 cout <<
"orthogonal::perp after lines_on_point_by_line_rank" << endl;
2023 cout <<
"orthogonal::perp line_pencil=";
2024 for (i = 0; i <
alpha; i++) {
2033 cout <<
"orthogonal::perp before points_on_line_by_line_rank" << endl;
2035 for (i = 0; i <
alpha; i++) {
2037 Perp1 + i * (
q + 1), 0 );
2041 cout <<
"orthogonal::perp points collinear "
2042 "with pt " << pt <<
":" << endl;
2043 for (i = 0; i <
alpha; i++) {
2044 for (j = 0; j <
q + 1; j++) {
2045 cout << i <<
" : " <<
line_pencil[i] <<
" : " << j
2046 <<
" : " <<
Perp1[i * (
q + 1) + j] << endl;
2054 cout <<
"orthogonal::perp after sorting:" << endl;
2060 for (i = 0; i <
alpha * (
q + 1); i++) {
2061 if (
Perp1[i] != pt) {
2068 cout <<
"orthogonal::perp after removing "
2069 "pt and sorting:" << endl;
2072 cout <<
"sz=" << sz << endl;
2077 cout <<
"orthogonal::perp done" << endl;
2082 long int *Perp,
int &sz,
int verbose_level)
2084 int f_v = (verbose_level >= 1);
2092 cout <<
"orthogonal::perp_of_two_points "
2093 "pt1=" << pt1 <<
" pt2=" << pt2 << endl;
2099 perp(pt2, Perp2, sz2, 0 );
2107 cout <<
"orthogonal::perp_of_two_points done" << endl;
2112 long int *&Perp,
int &sz,
int verbose_level)
2114 int f_v = (verbose_level >= 1);
2115 int f_vv = (verbose_level >= 2);
2119 cout <<
"orthogonal::perp_of_k_points verbose_level = " << verbose_level <<
" nb_pts=" << nb_pts << endl;
2125 for (i = 0; i < nb_pts; i++) {
2127 cout << i <<
" : " << pts[i] <<
" : ";
2133 cout <<
"orthogonal::perp_of_k_points nb_pts < 2" << endl;
2137 long int **Perp_without_pt;
2138 long int *Intersection1 = NULL;
2140 long int *Intersection2 = NULL;
2142 int sz0, perp_sz = 0;
2147 cout <<
"orthogonal::perp_of_k_points computing the perps of the points" << endl;
2153 for (i = 0; i < nb_pts; i++) {
2155 cout <<
"orthogonal::perp_of_k_points "
2156 "computing perp of point " << i
2157 <<
" / " << nb_pts <<
":" << endl;
2159 Perp_without_pt[i] =
NEW_lint(sz0);
2162 perp(pts[i], Perp_without_pt[i], perp_sz, 0);
2166 cout <<
"orthogonal::perp_of_k_points perp of pt "
2167 << i <<
" / " << nb_pts <<
" has size "
2168 << perp_sz <<
" and is equal to ";
2172 if (perp_sz != sz0) {
2173 cout <<
"orthogonal::perp_of_k_points perp_sz != sz0" << endl;
2180 cout <<
"orthogonal::perp_of_k_points computing the perps of the points done" << endl;
2185 cout <<
"orthogonal::perp_of_k_points computing the intersections of the perps" << endl;
2189 Perp_without_pt[1], perp_sz, Intersection1, sz1);
2191 cout <<
"orthogonal::perp_of_k_points intersection of "
2192 "P[0] and P[1] has size " << sz1 <<
" : ";
2196 for (i = 2; i < nb_pts; i++) {
2198 cout <<
"intersecting with perp[" << i <<
"]" << endl;
2201 Perp_without_pt[i], sz0, Intersection2, sz2);
2204 cout <<
"orthogonal::perp_of_k_points intersection "
2205 "with P[" << i <<
"] has size " << sz2 <<
" : ";
2212 Intersection1 = Intersection2;
2213 Intersection2 = NULL;
2218 cout <<
"orthogonal::perp_of_k_points computing the intersections of the perps done" << endl;
2228 for (i = 0; i < nb_pts; i++) {
2236 cout <<
"orthogonal::perp_of_k_points done" << endl;
data structure for set partitions following Jeffrey Leon
void subset_continguous(int from, int len)
void split_cell(int verbose_level)
std::ostream & print(std::ostream &ost)
void allocate(int n, int verbose_level)
a collection of functions related to sorted vectors
void lint_vec_quicksort_increasingly(long int *v, int len)
void vec_intersect(long int *v1, int len1, long int *v2, int len2, long int *&v3, int &len3)
void lint_vec_heapsort(long int *v, int len)
orthogonal_geometry::orthogonal_indexing * Orthogonal_indexing
void PG_element_normalize(int *v, int stride, int len)
void PG_element_unrank_modified(int *v, int stride, int len, int a)
linear_algebra::linear_algebra * Linear_algebra
various functions related to geometries
long int count_S(int n, int q)
int Witt_index(int epsilon, int k)
long int count_T2(int n, int q)
long int count_Sbar(int n, int q)
long int nb_pts_Qepsilon(int epsilon, int k, int q)
long int count_N1(int n, int q)
long int count_T1(int epsilon, int n, int q)
void mult_matrix_matrix(int *A, int *B, int *C, int m, int n, int o, int verbose_level)
int evaluate_bilinear_form(int n, int *v1, int *v2, int *Gram)
void choose_anisotropic_form(int &c1, int &c2, int &c3, int verbose_level)
void copy_matrix(int *A, int *B, int ma, int na)
void Gram_matrix(int epsilon, int k, int form_c1, int form_c2, int form_c3, int *&Gram, int verbose_level)
basic number theoretic functions
long int i_power_j_lint(long int i, long int j)
void Q_epsilon_unrank(int *v, int stride, int epsilon, int k, int c1, int c2, int c3, long int a, int verbose_level)
long int Q_epsilon_rank(int *v, int stride, int epsilon, int k, int c1, int c2, int c3, int verbose_level)
an orthogonal geometry O^epsilon(n,q)
int test_if_minimal_on_line(int *v1, int *v2, int *v3)
void init_parabolic_odd(int verbose_level)
int evaluate_hyperbolic_quadratic_form(int *v, int stride, int m)
long int rank_point(int *v, int stride, int verbose_level)
void points_on_line_by_line_rank(long int line_rk, long int *line, int verbose_level)
void find_minimal_point_on_line(int *v1, int *v2, int *v3)
field_theory::finite_field * F
void lines_on_point_by_line_rank(long int pt, long int *line_pencil_line_ranks, int verbose_level)
void Siegel_Transformation(int *T, long int rk_from, long int rk_to, long int root, int verbose_level)
int evaluate_hyperbolic_bilinear_form(int *u, int *v, int stride, int m)
void init_decomposition(int verbose_level)
int is_zero_vector(int *u, int stride, int len)
void unrank_point(int *v, int stride, long int rk, int verbose_level)
int evaluate_bilinear_form_by_rank(int i, int j)
void Gauss_step(int *v1, int *v2, int len, int idx)
void fill(long int *M, int i, int j, long int a)
void perp_of_k_points(long int *pts, int nb_pts, long int *&Perp, int &sz, int verbose_level)
void change_form_value(int *u, int stride, int m, int multiplier)
void init_parabolic_even(int verbose_level)
void lines_on_point_by_line_rank_must_fit_into_int(long int pt, int *line_pencil_line_ranks, int verbose_level)
long int rank_line(long int p1, long int p2, int verbose_level)
int * index_minus_square_without
void scalar_multiply_vector(int *u, int stride, int len, int multiplier)
int evaluate_parabolic_bilinear_form(int *u, int *v, int stride, int m)
void zero_vector(int *u, int stride, int len)
int * index_minus_nonsquare
int last_non_zero_entry(int *u, int stride, int len)
void init_hyperbolic(int verbose_level)
ring_theory::homogeneous_polynomial_domain * Poly
void unrank_line(long int &p1, long int &p2, long int index, int verbose_level)
void init_counting_functions(int verbose_level)
int evaluate_bilinear_form(int *u, int *v, int stride)
long int type_and_index_to_point_rk(long int type, long int index, int verbose_level)
int is_minus_square(int i)
int evaluate_quadratic_form(int *v, int stride)
void perp_of_two_points(long int pt1, long int pt2, long int *Perp, int &sz, int verbose_level)
void parabolic_point_normalize(int *v, int stride, int n)
void point_to_line_map(int size, long int *point_ranks, int *&line_vector, int verbose_level)
void list_points_by_type(int verbose_level)
int * lines_on_point_coords2
void points_on_line(long int pi, long int pj, long int *line, int verbose_level)
void lines_on_point(long int pt, long int *line_pencil_point_ranks, int verbose_level)
void init(int epsilon, int n, field_theory::finite_field *F, int verbose_level)
void print_minus_square_tables()
long int find_root(long int rk2, int verbose_level)
void perp(long int pt, long int *Perp_without_pt, int &sz, int verbose_level)
void init_parabolic(int verbose_level)
void init_form_and_Gram_matrix(int verbose_level)
int * lines_on_point_coords1
void make_initial_partition(data_structures::partitionstack &S, int verbose_level)
void normalize_point(int *v, int stride)
void list_all_points_vs_points(int verbose_level)
int is_ending_dependent(int *vec1, int *vec2)
void points_on_line_by_coordinates(long int pi, long int pj, int *pt_coords, int verbose_level)
int * minus_squares_without
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)
int index_of_monomial(int *v)
void print_equation_tex(std::ostream &ost, int *coeffs)
#define Lint_vec_copy(A, B, C)
#define Lint_matrix_print(A, B, C)
#define Int_vec_zero(A, B)
#define Lint_vec_print(A, B, C)
#define Int_vec_print_integer_matrix_width(A, B, C, D, E, F)
#define Int_matrix_print(A, B, C)
#define Int_vec_copy(A, B, C)
#define Int_vec_print(A, B, C)
#define Lint_vec_print_fully(A, B, C)
the orbiter library for the classification of combinatorial objects