Skip to content

Commit

Permalink
sagemathgh-36768: Retrieve more information of fundamental groups of …
Browse files Browse the repository at this point in the history
…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
sagemath#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 sagemath#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: sagemath#36768
Reported by: Enrique Manuel Artal Bartolo
Reviewer(s): Enrique Manuel Artal Bartolo, Frédéric Chapoton, Travis Scrimshaw
  • Loading branch information
Release Manager committed Apr 28, 2024
2 parents c4363fc + ff9cfd6 commit 4589c75
Show file tree
Hide file tree
Showing 11 changed files with 2,655 additions and 389 deletions.
1 change: 1 addition & 0 deletions src/doc/en/reference/curves/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ Curves
sage/schemes/curves/constructor
sage/schemes/curves/curve
sage/schemes/curves/affine_curve
sage/schemes/curves/plane_curve_arrangement
sage/schemes/curves/projective_curve
sage/schemes/curves/point
sage/schemes/curves/closed_point
Expand Down
1 change: 1 addition & 0 deletions src/doc/en/reference/discrete_geometry/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ Hyperplane arrangements
:maxdepth: 1

sage/geometry/hyperplane_arrangement/arrangement
sage/geometry/hyperplane_arrangement/ordered_arrangement
sage/geometry/hyperplane_arrangement/library
sage/geometry/hyperplane_arrangement/hyperplane
sage/geometry/hyperplane_arrangement/affine_subspace
Expand Down
1 change: 1 addition & 0 deletions src/sage/geometry/all.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,5 @@
lazy_import('sage.geometry.voronoi_diagram', 'VoronoiDiagram')
lazy_import('sage.geometry.ribbon_graph', 'RibbonGraph')
lazy_import('sage.geometry.hyperplane_arrangement.arrangement', 'HyperplaneArrangements')
lazy_import('sage.geometry.hyperplane_arrangement.ordered_arrangement', 'OrderedHyperplaneArrangements')
lazy_import('sage.geometry.hyperplane_arrangement.library', 'hyperplane_arrangements')
152 changes: 88 additions & 64 deletions src/sage/geometry/hyperplane_arrangement/arrangement.py

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions src/sage/geometry/hyperplane_arrangement/library.py
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ def bigraphical(self, G, A=None, K=QQ, names=None):
for u, v in G.edge_iterator(labels=False, sort_vertices=False):
i = vertex_to_int[u]
j = vertex_to_int[v]
hyperplanes.append( x[i] - x[j] - A[i][j])
hyperplanes.append(x[i] - x[j] - A[i][j])
hyperplanes.append(-x[i] + x[j] - A[j][i])
return H(*hyperplanes)

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

for a in PR:
for const in range(-m+1,m+1):
for const in range(-m + 1, m + 1):
hyperplanes.append(sum(a[j]*x[j] for j in range(d))-const)
A = H(*hyperplanes)
x = polygen(QQ, 'x')
Expand Down
Loading

0 comments on commit 4589c75

Please sign in to comment.