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

Multiscale compactification of veering triangulations #56

Open
wants to merge 160 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
160 commits
Select commit Hold shift + click to select a range
2acd123
fix VeeringTriangulation.cylinders for triangulation with boundaries
videlec Nov 7, 2024
ebf2711
implement degenerations (step 1)
videlec Nov 7, 2024
3e0a94f
missing optional doctest tag
videlec Nov 7, 2024
a5fbcaa
optimization of delaunay flip computations
videlec Nov 8, 2024
58227f5
pylint does not like mone as variable name
videlec Nov 8, 2024
fb15b55
fix relabelling and mutability in degeneration
videlec Nov 14, 2024
be4b2bc
move relabel_on_edges in permutation.pyx
videlec Nov 14, 2024
5181fdd
small optimization in creation of LinearConstraint
videlec Nov 14, 2024
925044c
implement horizontal degenerations for DelaunayStrebelAutomaton
videlec Nov 14, 2024
c6effe3
LinearFamily.strebel_graph with folded edges
videlec Nov 14, 2024
27cc089
import VeeringTriangulationLinearFamilies in veerer namespace
videlec Nov 14, 2024
e1e960b
vertex -> state in automaton string representation
videlec Nov 14, 2024
6fd8232
fix automorphisms for linear families
videlec Nov 14, 2024
98c8e1c
forgotten import in linear family
videlec Nov 21, 2024
51972d6
fix degeneration and delaunay_strebel_automaton for VeeringTriangulation
videlec Nov 21, 2024
01780b6
Simplify automaton generation
videlec Nov 21, 2024
348caa1
linear subvarieties
videlec Nov 21, 2024
a880492
add delaunay_cone.py
videlec Nov 21, 2024
8e23774
fix VeeringTriangulation.degeneration
videlec Nov 21, 2024
6e00255
move the construction of edge degeneration subsets in veering_triangu…
videlec Nov 21, 2024
1447ca2
remove delaunay_cone.py
videlec Nov 21, 2024
4e14e53
implement vertical degenerations of subvarieties
videlec Nov 21, 2024
ce030c7
fix some output change in veerer_demo.rst
videlec Nov 21, 2024
0144198
fix output change in strebel_graph.py
videlec Nov 21, 2024
24b05e1
some optional tag in doctests
videlec Nov 21, 2024
91044a8
set sort=False in edges calls
videlec Nov 21, 2024
24a4fb5
some strata do not know their dimension
videlec Nov 21, 2024
a3377d9
fix subgraph and stratum_dimension for disconnected linear families
videlec Nov 21, 2024
1965207
simplify string representation of Triangulation and VeeringTriangulation
videlec Nov 22, 2024
789d2e5
use rotation transitions only for veering-strebel
videlec Nov 22, 2024
95f7a85
implement cone intersection
videlec Nov 22, 2024
cec76da
cache Delaunay cone and optimize vertical edge degenerations
videlec Nov 22, 2024
275cba0
make perm_orbit a bit safer
videlec Dec 1, 2024
dda6414
Change data structure
videlec Dec 9, 2024
d023a82
is_connected for automata
videlec Dec 11, 2024
c79b623
canonical labels for non-connected surfaces
videlec Dec 11, 2024
ddc0aa5
fix angle excess computation in degeneration
videlec Dec 12, 2024
a99547c
use x and y coordinates for flat structures
videlec Dec 13, 2024
492089a
cleaning and extra checks in veering_triangulation.py
videlec Dec 13, 2024
2897846
fix Triangulation.colouring_from_xy
videlec Dec 13, 2024
d948387
more linear subvarieties examples
videlec Dec 13, 2024
a71b689
vec_slope was renamed slope
videlec Dec 13, 2024
c0f3027
some fixes in veering_triangulation.py
videlec Dec 13, 2024
f33f645
flip edges rather than half-edges
videlec Dec 13, 2024
1720119
draft of prime_components() function
videlec Dec 14, 2024
a1ce6c2
complete the implementation of prime decomposition
videlec Dec 17, 2024
6aa09e9
one more test in permutation.pyx
videlec Dec 17, 2024
c136b44
abstract prime_decomposition in linear_algebra.py
videlec Dec 17, 2024
bbbe23a
full implementation of multiscale
videlec Dec 17, 2024
789e32c
fixes wrt to half-edge vs edge
videlec Dec 17, 2024
da42cd0
simplify plotting via flatsurf
videlec Dec 17, 2024
c84a2cb
fix flatsurf conversion
videlec Dec 17, 2024
ce7cabf
get rid of cover.py
videlec Dec 17, 2024
565cf0f
do not import cover and layout in __init__
videlec Dec 17, 2024
f643512
get rid of measured_train_track
videlec Dec 17, 2024
41a9ff7
fix veering quadrangulations
videlec Dec 17, 2024
26c833f
do not assume that entries are integers in perm_on_list
videlec Dec 17, 2024
e9cf370
fix an import in misc.py
videlec Dec 17, 2024
e798e3f
try modifying test workflow
videlec Dec 17, 2024
0c40296
linting
videlec Dec 17, 2024
e3dbb89
no build isolation
videlec Dec 17, 2024
0dce0b0
set surface immutable in tatami_decomposition
videlec Dec 17, 2024
598144a
more optional tags
videlec Dec 17, 2024
d1164a4
fix ultimate doctest
videlec Dec 17, 2024
ccfb292
fixes
videlec Dec 17, 2024
663d6f5
output from sage-flatsurf changed
videlec Dec 17, 2024
e254ab5
deactivate test for plotting quad diff
videlec Dec 17, 2024
a1f3187
fix backward Delaunay flips
videlec Dec 22, 2024
26146d2
fancier plotting
videlec Dec 22, 2024
6fea181
some explanations in tatami decomposition
videlec Dec 22, 2024
6d56a5b
cone equality and difference
videlec Dec 22, 2024
c93996d
introduce a DelaunayCone class
videlec Dec 22, 2024
343baf1
implement rank + simplify train-track equations
videlec Dec 23, 2024
6216a59
copyright in linear_subvariety.py
videlec Dec 23, 2024
f2312f5
Degenerations helper class
videlec Dec 23, 2024
fa93427
strebel_delaunay_graph -> delaunay_strebel_graph
videlec Dec 23, 2024
6b1dbf1
check argument to VeeringTriangulation.degeneration
videlec Dec 24, 2024
ca4344d
cleaning in linear_subvariety.py
videlec Dec 24, 2024
4dd292a
fix angle excess in the upper level of a vertical degeneration
videlec Dec 24, 2024
11a85c5
add parametrization for all exceptional quadrilateral unfoldings
videlec Dec 25, 2024
8f35844
add relative_dimension and fix rank
videlec Dec 25, 2024
bbe38e1
Add a document multiscale_veering_triangulation.py and class Multisca…
KaiFu2210 Dec 29, 2024
c86ccb1
make degeneration works with folded edges
videlec Dec 26, 2024
f96cd6e
multiscale compactifications with folded edges
videlec Dec 26, 2024
3e6dcab
also return relabellings in VeeringTriangulation.degeneration
videlec Dec 30, 2024
23482ff
Add method degeneration
KaiFu2210 Dec 31, 2024
0608489
add option to include collapsed half-edges in relabelling output of d…
videlec Dec 31, 2024
37003ff
Add checks for horizontal nodes and vertical nodes.
KaiFu2210 Jan 2, 2025
ced3819
Path and monodromy in Delaunay-Strebel graphs
videlec Jan 2, 2025
508e1a1
place holder for face separatrix transport
videlec Jan 2, 2025
f1437e3
cleaner dispatch in separatrix transport
videlec Jan 2, 2025
3c95184
cleaning
videlec Jan 2, 2025
6b93dfd
fix example
videlec Jan 2, 2025
a9815c9
fix forward/backward flip vertex separatrix transport
videlec Jan 2, 2025
7862d73
Correct the examples.
KaiFu2210 Jan 2, 2025
d94a4ce
mapping optional argument for LinearFamily.strebel_graph
videlec Jan 2, 2025
936d66e
mapping optional argument for Constellation.set_canonical_labels
videlec Jan 2, 2025
2b15f80
fix tuple vs list for half-edge and edge data
videlec Jan 2, 2025
c441701
optional argument mapping for LinearFamily.set_canonical_labels
videlec Jan 2, 2025
f755642
Modify the normalisation of prongs
KaiFu2210 Jan 2, 2025
1166816
Add methods __eq__ and __ne__
KaiFu2210 Jan 2, 2025
7ad4724
fix rotation of VeeringTriangulationLinearFamily
videlec Jan 2, 2025
49fda4f
make transport of vertex separatrices work in the meromorphic case
videlec Jan 2, 2025
7db7f0f
Delaunay-Strebel graph monodromy
videlec Jan 2, 2025
f0935e2
fix train-track linear space when there is no internal face
videlec Jan 3, 2025
5e1a9db
much faster monodromy computation
videlec Jan 3, 2025
f686ad7
even faster
videlec Jan 3, 2025
7571668
fix monodromy computation for meromorphic
videlec Jan 3, 2025
dc60464
clean monodromy code
videlec Jan 3, 2025
8569a43
Add checks and normalisations of vertical separatrices in class Veeri…
KaiFu2210 Jan 3, 2025
dd88e7f
Modify the method _check_face_separatrix in VeeringTriangulation
KaiFu2210 Jan 4, 2025
08dac58
Modify the method _check_face_separatrix in StrebelGraph
KaiFu2210 Jan 4, 2025
d7a20fa
document errors in _{check_vertex,face}_separatrix
videlec Jan 4, 2025
70e0d32
face_separatrices + examples + simplifcation
videlec Jan 4, 2025
c063e53
make constellation be different when types mismatch
videlec Jan 4, 2025
18a3906
fix vertex and face monodromies
videlec Jan 4, 2025
53dbe7c
missing delaunay_strebel_graph.py file
videlec Jan 4, 2025
54628fe
fix order of face_separatrices
videlec Jan 4, 2025
4ecd2bc
update CI script to not use mamba
videlec Jan 4, 2025
55781f0
linting
videlec Jan 4, 2025
bc8f1af
add conda-forge channel for conda in CI
videlec Jan 4, 2025
3054cf2
Modify VeeringTriangulation.strebel_graph to return the correspondenc…
KaiFu2210 Jan 4, 2025
31487be
more documentation in labelled_digraph.py
videlec Jan 4, 2025
98d269d
fix doctests
videlec Jan 4, 2025
f363db6
more useful output for mapping of strebel graph + fix automaton
videlec Jan 4, 2025
fb9e76b
monodromy of infinite cylinders
videlec Jan 4, 2025
35b53f1
explicit call of vertices/edges of digraph with sort=False
videlec Jan 4, 2025
ff24541
fix doctest in flat_structure.py
videlec Jan 4, 2025
1f5494b
one more sort=False in Graph.edges call
videlec Jan 4, 2025
af891fc
one TODO
videlec Jan 6, 2025
382a286
more comments
videlec Jan 6, 2025
5fa3d91
even more comments
videlec Jan 6, 2025
75083b8
more comments
videlec Jan 6, 2025
fb07c4e
fix todo for PrimeDegenerations
videlec Jan 6, 2025
a1b06eb
fix comparison of linear families
videlec Jan 6, 2025
c43fc46
Add one example of multi-scale veering triangulation with non-trivial…
KaiFu2210 Jan 6, 2025
7cc937d
Modify class MultiscaleVeeringTriangulation to enable multiple veerin…
KaiFu2210 Jan 7, 2025
7051706
Add a method MultiscaleVeeringTriangulation.transport_along_path
KaiFu2210 Jan 7, 2025
7f071b6
Add method MultiscaleVeeringTriangulation.prime_decomposition
KaiFu2210 Jan 7, 2025
7575a5a
Add method MultiscaleVeeringTriangulation.codimension_one_vertical_de…
KaiFu2210 Jan 8, 2025
543e1fe
functions to study cylinders
videlec Jan 14, 2025
2ef550a
fix some comparisons
videlec Jan 14, 2025
9543625
remove trailing whitespaces
videlec Jan 17, 2025
7d1e2b9
iterator through codimension one degenerations
videlec Jan 17, 2025
07cbb90
Modify the methods MultiscaleVeeringTriangulation.degeneration and .c…
KaiFu2210 Jan 17, 2025
8d88b45
Modify the method MultiscaleVeeringTriangulation.degeneration and add…
KaiFu2210 Jan 18, 2025
f329fad
Add the method MultiscaleVeeringTriangulation.codimension_one_horizon…
KaiFu2210 Jan 20, 2025
6635ea5
Add 'index' parameter (default: False) to method MultiscaleVeeringTri…
KaiFu2210 Jan 20, 2025
258be6d
fix strebel graph in presence of boundaries and folded edges
videlec Jan 20, 2025
49223ae
fix automorphism_quotient
videlec Jan 20, 2025
f2639ba
Modify the methods tree_with_targets and the vertical and horizontal …
KaiFu2210 Jan 20, 2025
8cdbc82
fix monodromy of infinite cylinders
videlec Jan 20, 2025
b273fa9
Add a method multiscale_compactification_representatives.
KaiFu2210 Jan 20, 2025
89a4964
Add an example of H(2) to the method multiscale_compactification_repr…
KaiFu2210 Jan 20, 2025
c8c2ce7
comparison and slicing for LabelledDiGraphPath
videlec Jan 21, 2025
b3581f5
additional functions for permutations
videlec Jan 21, 2025
7de5157
change naming convention for constraints
videlec Jan 21, 2025
9dbd2f8
fix two bugs in error messages
videlec Jan 21, 2025
6ca2ae4
Adjust the encoding of horizontal nodes.
KaiFu2210 Jan 22, 2025
bbf2b6a
Remove the method ``_num_vertical_separatrices_in_corner``, ``prong_m…
KaiFu2210 Jan 23, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions .github/workflows/doc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,20 @@ jobs:
build-manual:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
with: { submodules: recursive }
- uses: conda-incubator/setup-miniconda@v2
with: { miniforge-variant: "Mambaforge", miniforge-version: "latest" }
- uses: conda-incubator/setup-miniconda@v3
with:
channels: conda-forge
- name: install dependencies
shell: bash -l {0}
run: |
mamba env update --quiet -n test -f environment.yml
conda env update --quiet -n test -f environment.yml
conda list
- name: install veerer
shell: bash -l {0}
run: |
pip install --no-index .
pip install --no-index --no-build-isolation .
- name: fix permissions
shell: bash -l {0}
run: |
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@ jobs:
codespell:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
with: { submodules: recursive }
- uses: conda-incubator/setup-miniconda@v2
with: { miniforge-variant: "Mambaforge", miniforge-version: "latest" }
- uses: conda-incubator/setup-miniconda@v3
with: { miniforge-version: "latest" }
- name: install codespell
shell: bash -l {0}
run: |
mamba install -y codespell
conda install -y codespell
- name: run codespell
shell: bash -l {0}
run: |
Expand Down
36 changes: 28 additions & 8 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,42 +16,62 @@ jobs:
- optionals: "sage"
sagelib: "10.0"
python: "3.10"
pip: "24.3.1"
setuptools: "70.3.0"
- optionals: "sage,sage_flatsurf,pyeantic,pyintervalxt,pyflatsurf,pynormaliz,surface_dynamics"
sagelib: "10.3"
python: "3.10"
pip: "24.3.1"
setuptools: "70.3.0"
# Test optional dependencies in isolation
- optionals: "sage"
sagelib: "10.3"
python: "3.10"
pip: "24.3.1"
setuptools: "70.3.0"
# Recent sage-flatsurf depends on surface-dynamics
- optionals: "sage,surface_dynamics,sage_flatsurf"
sagelib: "10.3"
python: "3.10"
pip: "24.3.1"
setuptools: "70.3.0"
- optionals: "sage,pyeantic"
sagelib: "10.3"
python: "3.10"
pip: "24.3.1"
setuptools: "70.3.0"
- optionals: "sage,pyintervalxt"
sagelib: "10.3"
python: "3.10"
pip: "24.3.1"
setuptools: "70.3.0"
- optionals: "sage,pynormaliz"
sagelib: "10.3"
python: "3.10"
pip: "24.3.1"
setuptools: "70.3.0"
- optionals: "sage,surface_dynamics"
sagelib: "10.3"
python: "3.10"
pip: "24.3.1"
setuptools: "70.3.0"
- optionals: "sage,pyflatsurf"
sagelib: "10.3"
python: "3.10"
pip: "24.3.1"
setuptools: "70.3.0"
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
with: { submodules: recursive }
- uses: conda-incubator/setup-miniconda@v2
with: { miniforge-variant: "Mambaforge", miniforge-version: "latest", python-version: "${{ matrix.python }}" }
- uses: conda-incubator/setup-miniconda@v3
with:
channels: conda-forge
python-version: ${{ matrix.python }}
- name: Install dependencies
shell: bash -l {0}
run: |
if (echo "${{ matrix.optionals }}" | grep sage); then
mamba install -n test sagelib=${{ matrix.sagelib }}
conda install -n test sagelib=${{ matrix.sagelib }}
echo "sagelib ==${{ matrix.sagelib }}" >> $CONDA_PREFIX/conda-meta/pinned
fi

Expand All @@ -60,25 +80,25 @@ jobs:
(test "$optional" == '' || (echo "${{ matrix.optionals }}" | grep -E '\b'"$optional"'\b') > /dev/null) && echo "$REPLY" || true
done < environment.yml > environment.test.yml

mamba env update --quiet -n test -f environment.test.yml
conda env update --quiet -n test -f environment.test.yml

conda list
- name: Install veerer
shell: bash -l {0}
run: |
pip install --verbose --no-index .
pip install --verbose --no-index --no-build-isolation .
# Show message about cppyy regenerating pre-compiled headers so it does not show during the tests
python -c 'import cppyy' || true
- name: Run SageMath doctests
shell: bash -l {0}
run: |
mamba remove -y pytest # sage -t breaks in some old versions of SageMath if pytest is installed
conda remove -y pytest # sage -t breaks in some old versions of SageMath if pytest is installed
sage -tp --force-lib --long --optional=${{ matrix.optionals }} veerer doc
- name: Run pytest
shell: bash -l {0}
working-directory: tests
run: |
mamba install -y pytest pytest-xdist
conda install -y pytest pytest-xdist
pytest -n auto
- uses: flatsurf/actions/show-logs@main
if: ${{ always() }}
Expand Down
1 change: 1 addition & 0 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -89,4 +89,5 @@ Authors

- Mark Bell
- Vincent Delecroix
- Kai Fu
- Saul Schleimer
10 changes: 9 additions & 1 deletion doc/source/background.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,18 @@
Veering triangulations
======================

Geometry
--------

Veering triangulations were originally defined as 3-dimensional
triangulation of mapping tori in [Ag11]_, see also [Gu09]_, [Gu16]_. It
turns out that they also encode nicely train-tracks splitting sequences of
pseudo-Anosov.
pseudo-Anosov mapping classes.

The veerer library implements most of the tools from [BeDeGaGuSc]_ which
shares a lot of ideas with [Ha09]_.

- Embedded graphs
- Veering triangulation, Strebel graph and parametrization of Abelian and quadratic differentials
- Linear subvarieties and Veering-Strebel flip graph
- Degenerations and multiscale compactification
14 changes: 7 additions & 7 deletions doc/source/ferenczi_zamboni.rst
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,15 @@ There are only two possible moves::

sage: from veerer import VeeringTriangulation, VeeringFlipSequence # random output due to deprecation warnings from realalg
sage: V = VeeringTriangulation("(0,1,2)", "PBR")
sage: R = VeeringFlipSequence(V, "0R", [2,1,0])
sage: L = VeeringFlipSequence(V, "0B", [1,0,2])
sage: R = VeeringFlipSequence(V, "0R", "(0,2)")
sage: L = VeeringFlipSequence(V, "0B", "(0,1)")

The smallest dilatation is the golden rotation::

sage: assert R.is_closed() and L.is_closed()
sage: fp = R * L
sage: fp
VeeringFlipSequence(VeeringTriangulation("(0,1,2)", "PBR"), "0R 2B", "(0,2,1)")
VeeringFlipSequence(VeeringTriangulation("(0,1,2)", "PBR"), "0R 2B", "(0,2,1)(~0,~2,~1)")
sage: a, S = fp.self_similar_surface()
sage: SS = S.copy(mutable=True)
sage: SS.flip(0)
Expand Down Expand Up @@ -140,22 +140,22 @@ Some pseudo-Anosov with small dilatation in H(2)
sage: assert f.is_pseudo_anosov()
sage: f.self_similar_surface()
(a,
FlatVeeringTriangulation(Triangulation("(0,6,5)(1,2,~6)(3,4,~5)"), [(1, -1), (a, a^3 - a^2 - a - 1), (a^3 - 2*a - 2, a^2), (-a^3 + a^2 + a + 1, -a), (2*a^3 - a^2 - 2*a - 2, a^3 - 2), (-a^3 + a + 1, -a^3 + a + 2), (a^3 - a - 2, a^3 - a - 1), (-a^3 + a + 2, -a^3 + a + 1), (-a^3 + a + 1, -a^3 + a + 2)]))
FlatVeeringTriangulation("(0,6,5)(1,2,~6)(3,4,~5)", "BBBBRRR", (1, a, -a^3 + 2*a + 2, -a^3 + a^2 + a + 1, 2*a^3 - a^2 - 2*a - 2, a^3 - a - 1, a^3 - a - 2), (1, -a^3 + a^2 + a + 1, a^2, a, a^3 - 2, a^3 - a - 2, a^3 - a - 1)))

sage: f = R1 * R1 * R5
sage: assert f.is_pseudo_anosov()
sage: f.self_similar_surface()
(a,
FlatVeeringTriangulation(Triangulation("(0,6,5)(1,2,~6)(3,4,~5)"), [(1, -1), (a^2, 2*a^3 - 3*a^2 - 2*a - 4), (a^3 - 2*a^2 - 2, a), (a, a^3 - 2*a^2 - 2), (a^3 - a^2 - a - 1, a^3 - a^2 - a - 3), (-a^3 + a^2 + 1, -2*a^3 + 3*a^2 + a + 5), (a^3 - a^2 - 2, 2*a^3 - 3*a^2 - a - 4), (-a^3 + a^2 + 2, -2*a^3 + 3*a^2 + a + 4), (-a^3 + a^2 + 1, -2*a^3 + 3*a^2 + a + 5)]))
FlatVeeringTriangulation("(0,6,5)(1,2,~6)(3,4,~5)", "BBBBRRR", (1, a^2, -a^3 + 2*a^2 + 2, a, a^3 - a^2 - a - 1, a^3 - a^2 - 1, a^3 - a^2 - 2), (1, -2*a^3 + 3*a^2 + 2*a + 4, a, -a^3 + 2*a^2 + 2, a^3 - a^2 - a - 3, 2*a^3 - 3*a^2 - a - 5, 2*a^3 - 3*a^2 - a - 4)))

sage: f = R3 * R1 * R2 * CL5
sage: assert f.is_pseudo_anosov()
sage: f.self_similar_surface()
(a,
FlatVeeringTriangulation(Triangulation("(0,~5,4)(1,2,~6)(3,5,6)"), [(1, 1), (1, 1), (-1/2*a + 3/2, 1/2*a - 1/2), (1/2*a - 1/2, -1/2*a + 3/2), (a - 4, -a), (-a + 3, a - 1), (1/2*a - 5/2, -1/2*a - 1/2), (1/2*a - 5/2, -1/2*a - 1/2), (-a + 3, a - 1)]))
FlatVeeringTriangulation("(0,~5,4)(1,2,~6)(3,5,6)", "RRBBRBR", (1, 1, 1/2*a - 3/2, 1/2*a - 1/2, -a + 4, a - 3, -1/2*a + 5/2), (1, 1, 1/2*a - 1/2, 1/2*a - 3/2, a, a - 1, 1/2*a + 1/2)))

sage: f = R3 * R1 * R2 * CL5 * CR5
sage: assert f.is_pseudo_anosov()
sage: f.self_similar_surface()
(a,
FlatVeeringTriangulation(Triangulation("(0,~5,4)(1,2,~6)(3,5,6)"), [(1, 1), (7/33*a^3 - 23/33*a^2 - 19/33*a - 25/33, -10/33*a^3 + 32/33*a^2 + 37/33*a + 16/33), (-20/33*a^3 + 61/33*a^2 + 92/33*a + 62/33, 5/33*a^3 - 16/33*a^2 - 2/33*a - 8/33), (-1/33*a^3 + 8/33*a^2 - 2/33*a - 20/33, -8/33*a^3 + 19/33*a^2 + 56/33*a + 26/33), (4/11*a^3 - 10/11*a^2 - 25/11*a - 30/11, -1/11*a^3 + 1/11*a^2 + 7/11*a - 5/11), (-4/11*a^3 + 10/11*a^2 + 25/11*a + 19/11, 1/11*a^3 - 1/11*a^2 - 7/11*a - 6/11), (13/33*a^3 - 38/33*a^2 - 73/33*a - 37/33, 5/33*a^3 - 16/33*a^2 - 35/33*a - 8/33), (13/33*a^3 - 38/33*a^2 - 73/33*a - 37/33, 5/33*a^3 - 16/33*a^2 - 35/33*a - 8/33), (-4/11*a^3 + 10/11*a^2 + 25/11*a + 19/11, 1/11*a^3 - 1/11*a^2 - 7/11*a - 6/11)]))
FlatVeeringTriangulation("(0,~5,4)(1,2,~6)(3,5,6)", "RBBBRBR", (1, 7/33*a^3 - 23/33*a^2 - 19/33*a - 25/33, 20/33*a^3 - 61/33*a^2 - 92/33*a - 62/33, -1/33*a^3 + 8/33*a^2 - 2/33*a - 20/33, -4/11*a^3 + 10/11*a^2 + 25/11*a + 30/11, 4/11*a^3 - 10/11*a^2 - 25/11*a - 19/11, -13/33*a^3 + 38/33*a^2 + 73/33*a + 37/33), (1, 10/33*a^3 - 32/33*a^2 - 37/33*a - 16/33, 5/33*a^3 - 16/33*a^2 - 2/33*a - 8/33, 8/33*a^3 - 19/33*a^2 - 56/33*a - 26/33, 1/11*a^3 - 1/11*a^2 - 7/11*a + 5/11, 1/11*a^3 - 1/11*a^2 - 7/11*a - 6/11, -5/33*a^3 + 16/33*a^2 + 35/33*a + 8/33)))
52 changes: 24 additions & 28 deletions doc/source/veerer_demo.rst
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,12 @@ part of a project that also involve
with SageMath (see below).
- The Python library `PyNormaliz <https://pypi.org/project/PyNormaliz/>`_
(polytope, in particular over number fields).
- The software `SageMath <https://www.sagemath.org/>`_ (plotting, linear algebra
and many other things)
- The SageMath library `surface_dynamics
- The Sagemath libraries `sage-flatsruf
<https://flatsurf.github.io/sage-flatsurf/>`_ (plotting and construction of
surfaces) and `surface_dynamics
<https://pypi.org/project/surface-dynamics/>`_ (for analyzing stratum
components)
- The software `SageMath <https://www.sagemath.org/>`_ (many things)

To import all features from veerer one usually starts with the following
lines::
Expand Down Expand Up @@ -76,12 +77,12 @@ colors.
::

sage: FS0 = T0.flat_structure_min()
sage: FS0.plot().show(figsize=5)
sage: FS0.plot().show(figsize=5) # optional - sage_flatsurf

::

sage: FFS0 = T0.flat_structure_geometric_middle()
sage: FFS0.plot().show(figsize=5)
sage: FFS0.plot().show(figsize=5) # optional - sage_flatsurf

::

Expand All @@ -100,12 +101,12 @@ colors.
::

sage: FS1 = T1.flat_structure_min()
sage: FS1.plot().show(figsize=5)
sage: FS1.plot().show(figsize=5) # optional - sage_flatsurf

::

sage: FFS1 = T1.flat_structure_geometric_middle()
sage: FFS1.plot().show(figsize=5)
sage: FFS1.plot().show(figsize=5) # optional - sage_flatsurf

::

Expand All @@ -124,20 +125,11 @@ colors.
::

sage: FS2 = T2.flat_structure_min()
sage: FS2.plot().show(figsize=5) # not tested (warning from matplotlib)
sage: FS2.plot().show(figsize=5) # optional - sage_flatsurf # not tested


Viewing train-tracks!
---------------------

Recall that a veering triangulation is just a pair of transversal
train-tracks.

::

sage: TT_horiz = FS1.plot(horizontal_train_track=True, edge_labels=False)
sage: TT_vert = FS1.plot(vertical_train_track=True, edge_labels=False)
sage: graphics_array([TT_horiz, TT_vert], 1, 2).show(figsize=6)
More examples
-------------

::

Expand Down Expand Up @@ -211,7 +203,7 @@ Core vs not core
::

sage: FS = S.flat_structure_min()
sage: FS.plot()
sage: FS.plot() # optional - sage_flatsurf
Graphics object consisting of ... graphics primitives

::
Expand Down Expand Up @@ -258,15 +250,19 @@ of the product of the two train-track polytopes.
sage: print(T1.is_delaunay())
True
sage: print(T1.delaunay_cone())
Cone of dimension 8 in ambient dimension 18 made of 13 facets (backend=ppl)
8-dimensional Delaunay cone of VeeringTriangulation("(0,~3,4)(~0,7,~6)(1,2,~7)(~1,~2,3)(~4,5,~8)(~5,8,6)", "RBRRBRBRB") made of
2 forward-flip facets
2 backward-flip facets
5 x-degeneration facets
4 y-degeneration facets

Core automaton
--------------

The core automaton of a given triangulations `T_0` is the directed graph whose
vertices are core veering triangulations that can be reached from `T_0` by a
sequence of flips and there is a directed edge `T_i \to T_j` if `T_j` is obtained
from `T_i` by a flip.
The core automaton of a given triangulations `T_0` is the automaton (or
directed graph) whose states (or vertices) are core veering triangulations that
can be reached from `T_0` by a sequence of flips and there is a transition (or
directed edge) `T_i \to T_j` if `T_j` is obtained from `T_i` by a flip.

::

Expand All @@ -278,7 +274,7 @@ from `T_i` by a flip.
sage: A0.run()
0
sage: A0
Core veering automaton with 2 vertices
Core veering automaton with 2 states

::

Expand Down Expand Up @@ -348,8 +344,8 @@ Some data (orientable case)
To give an idea about the complexity and timings when generating the
above data, here are the steps involved. The timings are for the stratum
component H(4)^hyp that is the fourth row in the above array: -
generating the core graph ~20 secs for H(4)^hyp (the graph has 9116
vertices and 44664 edges) - filtering the geometric triangulations
generating the core graph ~20 secs for H(4)^hyp (the automaton has 9116
states and 44664 transitions) - filtering the geometric triangulations
(single test involves a polytope computation) ~20 secs for H(4)^hyp -
filtering cylindrical (single test is cheap) ~2 sec for H(4)^hyp

Expand Down
2 changes: 1 addition & 1 deletion tests/test_flip.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ def test_flip_reduced(fp, cols, repeat):
# actually do the flip
V.flip(e, col, reduced=True)
assert V.edge_has_curve(e)
assert V.forward_flippable_edges() == [e[0] for e in V.edges() if V.edge_colour(e[0]) == PURPLE], (V0, e, col)
assert V.forward_flippable_edges() == V.purple_edges(), (V0, e, col)

if __name__ == '__main__':
import sys
Expand Down
5 changes: 2 additions & 3 deletions tests/test_triangulation_relabel.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,9 @@

def test_relabel():
T = Triangulation([(0,1,2), (-1,-2,-3)], mutable=True)
p = perm_init([1,5,0,2,4,3])
p = perm_init([3,2,0,1,4,5])
T.relabel(p)
assert T.faces() == [[0, 1, 5], [2, 3, 4]]
assert T.edges() == [[0, 2], [1, 3], [4, 5]]
assert T.faces() == [[0, 4, 3], [1, 5, 2]]
T._check()

if __name__ == '__main__':
Expand Down
5 changes: 1 addition & 4 deletions veerer/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,9 @@

from .constants import RED, BLUE, PURPLE, GREEN, HORIZONTAL, VERTICAL, RIGHT, LEFT, UP, DOWN
from .triangulation import Triangulation
from .cover import TriangulationCover
from .veering_triangulation import VeeringTriangulation, VeeringTriangulations
from .linear_family import VeeringTriangulationLinearFamily, StrebelGraphLinearFamily
from .linear_family import VeeringTriangulationLinearFamily, StrebelGraphLinearFamily, VeeringTriangulationLinearFamilies
from .strebel_graph import StrebelGraph
from .automaton import FlipGraph, CoreAutomaton, ReducedCoreAutomaton, DelaunayAutomaton, DelaunayStrebelAutomaton
from .flip_sequence import VeeringFlipSequence
from .flat_structure import FlatVeeringTriangulation
from .layout import FlatVeeringTriangulationLayout
from .measured_train_track import MeasuredTrainTrack
Loading
Loading