Skip to content

Commit 23ba3d8

Browse files
author
Release Manager
committed
gh-36768: Retrieve more information of fundamental groups of plane curves The goal of this PR is to add some features to the computation of fundamental groups of complements of the plane curves introduced in ``Sagemath`` by @miguelmarco and his optional package ``sirocco``. It also corrects a bug introduced in #35376 and cleans some code. We add the following information: given a tuple of curves we retrieve the information of meridians of each curve as words in the fundamental group, and also of the strands of the braid monodromy. We also add the possibility of excluding the vertical lines from the computation of braid monodromy (as far as there is no vertical asymptote) which makes its computation faster. To achieve this goal we introduce new classes `AffinePlaneCurveArrangements` and `ProjectivePlaneCurveArrangements`. For now, they serve only to compute the fundamental groups with the meridian information (and braid monodromy and strand information for the affine curves) but more methods may be constructed in the future. The structure of these classes follows the one of `HyperplaneArrangements`, with one difference, the order is important. This is why we also introduce the class of `OrderedHyperplaneArrangements`, where the fundamental group is computed. We have also introduce a new method for hyperplane arrangements, `jhyperplane_section`, in order to compute the fundamental group also for hyperplane arrangements and not only for line arrangements. These are the main changes: - schemes/curves/affine_curve.py - Introducion of some auxiliary new methods: `has_vertical_asymptote`, `is_vertical_line` - Small update of `fundamental_group` - schemes/curves/projective_curve.py. Some trivial cases were not considered in `fundamental_group`. - schemes/curves/plane_curve_arrangement.py. New file with the new classes. - schemes/curves/zariski_vankampen.py - For consistency some lists are converted into tuples. - Some functions take a new keyword to take into account the option of eliminating the vertical lines for the computation of the braid monodromy. - In `braid_in_segment`, correction of the bug introduced in the previous PR (the parameters must be in the number field embedded in `QQbar`). - The function `geometric_basis` has been changed for designed and to cover some cases where the former one failed. - A new function `vertical_lines_in_braidmon` to isolate vertical lines if needed. - The function `braid_monodromy` has been cleaned and now it takes into account the strand information. - - geometry/hyperplane_arrangement/arrangement.py - Introducion of the class of `OrderedHyperplaneArrangements`. The hyperplanes are not sorted in this class and the introduction order is respected. It forces to update some methods. - Five new methods for this new class: `hyperplane_section`, `affine_fundamental_group`, `affine_meridians`, `projective_fundamental_group`, and `projective_meridians`. <!-- Why is this change required? What problem does it solve? --> <!-- If this PR resolves an open issue, please link to it here. For example "Fixes #12345". --> <!-- If your change requires a documentation PR, please link it appropriately. --> ### 📝 Checklist <!-- Put an `x` in all the boxes that apply. --> <!-- If your change requires a documentation PR, please link it appropriately --> <!-- If you're unsure about any of these, don't hesitate to ask. We're here to help! --> <!-- Feel free to remove irrelevant items. --> - [X] The title is concise, informative, and self-explanatory. - [X] The description explains in detail what this PR is about. - [X] I have created tests covering the changes. - [X] I have updated the documentation accordingly. URL: #36768 Reported by: Enrique Manuel Artal Bartolo Reviewer(s): Enrique Manuel Artal Bartolo, Frédéric Chapoton, Travis Scrimshaw
2 parents f633de0 + ff9cfd6 commit 23ba3d8

File tree

11 files changed

+2655
-389
lines changed

11 files changed

+2655
-389
lines changed

src/doc/en/reference/curves/index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ Curves
1313
sage/schemes/curves/constructor
1414
sage/schemes/curves/curve
1515
sage/schemes/curves/affine_curve
16+
sage/schemes/curves/plane_curve_arrangement
1617
sage/schemes/curves/projective_curve
1718
sage/schemes/curves/point
1819
sage/schemes/curves/closed_point

src/doc/en/reference/discrete_geometry/index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ Hyperplane arrangements
1212
:maxdepth: 1
1313

1414
sage/geometry/hyperplane_arrangement/arrangement
15+
sage/geometry/hyperplane_arrangement/ordered_arrangement
1516
sage/geometry/hyperplane_arrangement/library
1617
sage/geometry/hyperplane_arrangement/hyperplane
1718
sage/geometry/hyperplane_arrangement/affine_subspace

src/sage/geometry/all.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,5 @@
1616
lazy_import('sage.geometry.voronoi_diagram', 'VoronoiDiagram')
1717
lazy_import('sage.geometry.ribbon_graph', 'RibbonGraph')
1818
lazy_import('sage.geometry.hyperplane_arrangement.arrangement', 'HyperplaneArrangements')
19+
lazy_import('sage.geometry.hyperplane_arrangement.ordered_arrangement', 'OrderedHyperplaneArrangements')
1920
lazy_import('sage.geometry.hyperplane_arrangement.library', 'hyperplane_arrangements')

src/sage/geometry/hyperplane_arrangement/arrangement.py

Lines changed: 88 additions & 64 deletions
Large diffs are not rendered by default.

src/sage/geometry/hyperplane_arrangement/library.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ def bigraphical(self, G, A=None, K=QQ, names=None):
156156
for u, v in G.edge_iterator(labels=False, sort_vertices=False):
157157
i = vertex_to_int[u]
158158
j = vertex_to_int[v]
159-
hyperplanes.append( x[i] - x[j] - A[i][j])
159+
hyperplanes.append(x[i] - x[j] - A[i][j])
160160
hyperplanes.append(-x[i] + x[j] - A[j][i])
161161
return H(*hyperplanes)
162162

@@ -794,7 +794,7 @@ def Shi(self, data, K=QQ, names=None, m=1):
794794
hyperplanes = []
795795

796796
for a in PR:
797-
for const in range(-m+1,m+1):
797+
for const in range(-m + 1, m + 1):
798798
hyperplanes.append(sum(a[j]*x[j] for j in range(d))-const)
799799
A = H(*hyperplanes)
800800
x = polygen(QQ, 'x')

0 commit comments

Comments
 (0)