Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Triangulation with boundary (meromorphic differentials) #49

Merged
merged 121 commits into from
Nov 4, 2024

Conversation

videlec
Copy link
Contributor

@videlec videlec commented Jun 13, 2024

This PR implement triangulation with boundaries in order to handle meromorphic differentials (that naturally appears as degeneration of holomorphic differentials). It also does a lot of factorization and cleaning in the base code.

  • add a generic Constellation class as a super class of Triangulation
  • Triangulation now has an extra _bdry attribute to encode boundary
  • VeeringTriangulation can now use the _bdry attribute to encode meromorphic differentials
  • new StrebelGraph class (subclass of Constellation) with conversion back and forth from VeeringTriangulation via the methods VeeringTriangulation.strebel_graph() and StrebelGraph.veering_triangulations()
  • new StrebelGraphLinearFamily and conversion from VeeringTriangulationLinearFamily
  • new class DelaunayStrebelAutomaton: automaton with states of two types VeeringTriangulation and StrebelGraph (meromorphic case only)
  • many examples

Follow-up

@videlec videlec marked this pull request as draft June 13, 2024 09:20
@videlec videlec force-pushed the triangulations-with-boundaries branch 8 times, most recently from d9bb6dc to c42abf2 Compare September 20, 2024 18:37
@videlec videlec force-pushed the triangulations-with-boundaries branch 2 times, most recently from 4a52a52 to 0582dc5 Compare September 26, 2024 09:13
@videlec videlec force-pushed the triangulations-with-boundaries branch from 0582dc5 to 772da41 Compare September 27, 2024 07:52
@videlec
Copy link
Contributor Author

videlec commented Oct 10, 2024

@KaiFu2210 The following example does not work for me

from veerer import *
vt = VeeringTriangulation("(0,~2,1)(3,~1,~0)", boundary="(2:2,~3:2)", colouring="RBRR")
vt.strebel_graph()

Even though vt.is_strebel() returns True (no forward flippable edge). It seems to me that something is wrong in your code. Do you confirm?

@KaiFu2210
Copy link
Contributor

@KaiFu2210 The following example does not work for me

from veerer import *
vt = VeeringTriangulation("(0,~2,1)(3,~1,~0)", boundary="(2:2,~3:2)", colouring="RBRR")
vt.strebel_graph()

Even though vt.is_strebel() returns True (no forward flippable edge). It seems to me that something is wrong in your code. Do you confirm?

Yes, I confirm. The issue is that the code did not find as many half-edges as expected. Let me see what went wrong.

@KaiFu2210
Copy link
Contributor

KaiFu2210 commented Oct 10, 2024

@KaiFu2210 The following example does not work for me

from veerer import *
vt = VeeringTriangulation("(0,~2,1)(3,~1,~0)", boundary="(2:2,~3:2)", colouring="RBRR")
vt.strebel_graph()

Even though vt.is_strebel() returns True (no forward flippable edge). It seems to me that something is wrong in your code. Do you confirm?

The mistake is from the function "strebel_edges". I found the code:

if list_boundary[e] > 0: #ep[e] is in an internal edge
a = fp[ep[e]]
b = fp[ep[e]]

Here, I'd like to parameterize three edge of the internal face that the edge e adjacent to.
However, I should use

b = fp[a]

instead of b = fp[ep[e]].

I tested that if I modified this, the output is correct.

@videlec
Copy link
Contributor Author

videlec commented Nov 1, 2024

@KaiFu2210 I do not understand why the following example from residue_constraint_cone is valid

            sage: G0 = StrebelGraph("(0)(~0)")
            sage: G0.residue_constraint_cone([[1,1]], QQ, HORIZONTAL).rays()
            [[0, 1]]

Namely, the constraint forces the only edge to have length zero.

Actually, I do not understand the answer. The condition [1, 1] should mean "sum of residues" which is supposedly tautological.

@KaiFu2210
Copy link
Contributor

KaiFu2210 commented Nov 1, 2024

The residue of these two faces have opposite signs. The coefficients [1,1] means the sum of residues is zero. The coefficients [1, -1] is the case where the edge is of length zero.

The cone is constructed in the Strebel polyhedron. For this Strebel graph, the cone is the right vertical half-plane and the ambient space is the entire plane. Will it be better to construct the cone only along x-coordinates?

@videlec
Copy link
Contributor Author

videlec commented Nov 2, 2024

There is no need to build the cone at all at this stage. I changed the functions to residue_matrix (which produces the linear map from residue to linear combinations of edges) and add_residue_constraints (which produces a linear family). It now works for both Strebel graphs and veering triangulations.

@KaiFu2210
Copy link
Contributor

Thanks so much! I'm looking at the codes.

@videlec videlec merged commit 7f288d0 into flatsurf:master Nov 4, 2024
11 checks passed
@videlec videlec deleted the triangulations-with-boundaries branch November 5, 2024 08:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

2 participants