-
Notifications
You must be signed in to change notification settings - Fork 4
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
Multiscale compactification of veering triangulations #56
base: master
Are you sure you want to change the base?
Conversation
- In the Delaunay-Strebel graph we do not use anymore horizontal Strebel and vertical Strebel nor bacwkard moves. Instead we rely on a new move "rotate" that consists of a 180 degree rotations - rely on sage DiGraph rather than dictionaries _forward_neighbors/_backward_neighbors
|
||
#build the degeneration | ||
return MultiscaleVeeringTriangulation(vts,l_horiz,l_pm) | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@KaiFu2210 Why did you remove the two functions I introduced?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
that is codimension_one_horizontal_degenerations
and codimension_one_vertical_degenerations
?
…odimension_one_vertical_degenerations_prime
9927a0e
to
07cbb90
Compare
@videlec I'm very sorry for mistakenly overwriting the updates you made. Thank you for pointing it out. I’ll pull the latest version of the branch, carefully review the changes, and ensure my updates align with the current state. I’ll make the necessary adjustments and push the corrected version soon. Sorry again for the trouble. |
… check for horizontal residue condition
I modify the method degeneration, and I hope it is better now. For the example in the method .codimension_one_vertical_degenerations, it seems that we need to add the horizontal residue conditions. The following is obtained by adding residue conditions to the veering triangulation in the example: VeeringTriangulationLinearFamily("(~0,2,3)(~1,4,5)(~2,6,7)(~3,~5,8)(~4,9,10)(~6,11,12)(~7,13,14)(~8,~12,15)(~9,16,~15)(~11,17,18)(~14,~18,19)(~16,~17,20)(0:1)(1:1)(~10:1)(~13:1)(~19:1)(~20:1)", "BBRRRBBBRBBRRBRBRRBBB", [(1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), (0, 0, 1, 1, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, -1, -1, -1, 0, 0, 1, 1), (0, 0, 0, 0, 1, 1, 0, 0, -1, 0, -1, 0, 0, -1, 1, 1, 1, 0, 0, -1, -1), (0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, -1, -1), (0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, -1, 0, -1, 0, 0, 1, 1), (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, -1, -1, -1), (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1)]) |
…tal_prime_degenerations.
…angulation.codimension_one_vertical_prime_degenerations and .codimension_one_horizontal_prime_degenerations.
…prime decompositions
@videlec It seems that there might be an issue with the computation of sage: vt = VeeringTriangulationLinearFamily("(0:1,1:1,2:1)(~0:1,~1:1,~2:1)", "RRR", [(1, 0, 0), (0, 1, 0), (0, 0, 1)])
sage: ds_graph = vt.delaunay_strebel_graph()
sage: path = LabelledDiGraphPath(ds_graph, 0, [0, -69, 69, 85, 21, -26, 26, 23, 33, -12])
sage: mono = SeparatrixMonodromy(ds_graph)
sage: vt.face_angle(1)
0
sage: h1 = mono.infinite_cylinder_transport(path, 1)
sage: vtt = ds_graph.vertex_label(path.end())
sage: vtt.face_angle(h1) However, it raises the following error Traceback (most recent call last)
...
ValueError: h=~0 not on a boundary face Let me know if I misundestood anything. |
This is definitely a bug! Thanks for reporting it. I will try to fix it. |
This is already visible with the path of length one ("unstrebelization")
|
Should be fixed in 8cdbc82 |
Thanks! It works. |
@kai I do not understand why you encode horizontal nodes with |
@KaiFu2210 The code for for level, nodes in enumerate(self._horizontal_nodes):
for (c1, h1), (c2, h2) in nodes:
c = c1 # c1 must be equal to c2!
vt = self._veering_triangulations[level][c]
v1 = vector(vt.base_ring(), vt.num_edges())
for h in perm_orbit(vt._fp, h1):
v1[h // 2] += 1
v2 = vector(vt.base_ring(), vt.num_edges())
for h in perm_orbit(vt._fp, h2):
v2[h // 2] += 1
gens = vt.generators_matrix()
if gens * v1 != gens * v2:
raise ValueError(f"distinct residues at horizontal node ({c1}, {p1})-({c2}, {p2})") And I suspect that there is a mistake in the current code as you wrote |
@videlec Thank you! You're absolutely right. I just realized that a horizontal node must be "inside" a common prime component, and I was about to ask you about this. I'll modify the encoding of horizontal nodes accordingly. Thank you for pointing out the mistake and providing a correction for the check! You're correct that the current code for computing the residue is not accurate. |
@KaiFu2210 Some more remarks about
|
@KaiFu2210 And maybe for vertical nodes (with their prong matching) it would be simpler to use something similar to horizontal nodes. Namely they could be stored in a list organized by level/components. More precisely one could use This version has the advantage of making simpler any exploration of the multiscale differential (for example this would simplify a lot To store horizontal and vertical node, it might even be more convenient to use directly a sage
|
…atching_map(self, prong)``, and ``veering_triangulation_at_level(self, level)``.
The aim of this PR is to implement horizontal and vertical degenerations of veering triangulations and linear subvarieties. On a veering triangulation, a horizontal degeneration produces a veering triangulations with paired simple poles while a vertical one produces higher order poles. This PR also introduces a class for linear subvarieties (
IrreducibleRealLinearSubvariety
inveerer.linear_subvariety
) which is a thin wrapper around a list of Delaunay-Strebel graph as well as a class for multiscale compactification (MultiscaleCompactification
inveerer.linear_subvariety
).Todo
MultiscaleVeeringTriangulation
(ie choose a canonical choice of identification of separatrices with half-edges and angle)MultiscaleVeeringTriangulation
(ie__eq__
and__ne__
methods)MultiscaleVeeringTriangulation._check
function that checks thatLinearSubvariety
(ie together with the DS-graph of each component, one needs a canonical multiscale representative)Optimizations
VeeringTriangulationLinearFamily.best_relabelling
VeeringTriangulation.delaunay_cone
polyhedron.cone.Cone.affine_dimension
(called fromVeeringTriangulationLinearFamily.delaunay_flips
)There are several things one might want to try:
affine_dimension
affine_dimension
when computing the set of delaunay flips