snappy 3.1.1__cp38-cp38-win_amd64.whl → 3.2__cp38-cp38-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- snappy/CyOpenGL.cp38-win_amd64.pyd +0 -0
- snappy/SnapPy.cp38-win_amd64.pyd +0 -0
- snappy/SnapPyHP.cp38-win_amd64.pyd +0 -0
- snappy/__init__.py +299 -402
- snappy/app.py +70 -20
- snappy/browser.py +18 -17
- snappy/canonical.py +249 -0
- snappy/{verify/cusp_shapes.py → cusps/__init__.py} +8 -18
- snappy/cusps/cusp_area_matrix.py +101 -0
- snappy/{verify/cusp_areas.py → cusps/cusp_areas_from_matrix.py} +23 -39
- snappy/cusps/maximal_cusp_area_matrix.py +136 -0
- snappy/cusps/test.py +21 -0
- snappy/cusps/trig_cusp_area_matrix.py +63 -0
- snappy/database.py +10 -9
- snappy/decorated_isosig.py +337 -114
- snappy/dev/extended_ptolemy/complexVolumesClosed.py +40 -7
- snappy/dev/extended_ptolemy/extended.py +3 -3
- snappy/dev/extended_ptolemy/phc_wrapper.py +10 -10
- snappy/dev/vericlosed/oneVertexTruncatedComplex.py +1 -1
- snappy/doc/_images/m004_paper_plane_on_systole.jpg +0 -0
- snappy/doc/_images/m125_paper_plane.jpg +0 -0
- snappy/doc/_images/o9_00000_systole_paper_plane.jpg +0 -0
- snappy/doc/_images/o9_00000_systole_paper_plane_closer.jpg +0 -0
- snappy/doc/_sources/additional_classes.rst.txt +40 -40
- snappy/doc/_sources/bugs.rst.txt +14 -14
- snappy/doc/_sources/censuses.rst.txt +51 -51
- snappy/doc/_sources/credits.rst.txt +75 -75
- snappy/doc/_sources/development.rst.txt +259 -239
- snappy/doc/_sources/index.rst.txt +182 -115
- snappy/doc/_sources/installing.rst.txt +247 -264
- snappy/doc/_sources/manifold.rst.txt +6 -6
- snappy/doc/_sources/manifoldhp.rst.txt +46 -46
- snappy/doc/_sources/news.rst.txt +355 -283
- snappy/doc/_sources/other.rst.txt +25 -25
- snappy/doc/_sources/platonic_census.rst.txt +20 -20
- snappy/doc/_sources/plink.rst.txt +102 -102
- snappy/doc/_sources/ptolemy.rst.txt +66 -66
- snappy/doc/_sources/ptolemy_classes.rst.txt +42 -42
- snappy/doc/_sources/ptolemy_examples1.rst.txt +298 -297
- snappy/doc/_sources/ptolemy_examples2.rst.txt +363 -363
- snappy/doc/_sources/ptolemy_examples3.rst.txt +301 -301
- snappy/doc/_sources/ptolemy_examples4.rst.txt +61 -61
- snappy/doc/_sources/ptolemy_prelim.rst.txt +105 -105
- snappy/doc/_sources/screenshots.rst.txt +21 -21
- snappy/doc/_sources/snap.rst.txt +87 -87
- snappy/doc/_sources/snappy.rst.txt +28 -28
- snappy/doc/_sources/spherogram.rst.txt +103 -103
- snappy/doc/_sources/todo.rst.txt +47 -47
- snappy/doc/_sources/triangulation.rst.txt +11 -11
- snappy/doc/_sources/tutorial.rst.txt +49 -49
- snappy/doc/_sources/verify.rst.txt +210 -150
- snappy/doc/_sources/verify_internals.rst.txt +79 -90
- snappy/doc/_static/basic.css +924 -902
- snappy/doc/_static/css/badge_only.css +1 -1
- snappy/doc/_static/css/theme.css +1 -1
- snappy/doc/_static/doctools.js +1 -1
- snappy/doc/_static/documentation_options.js +12 -13
- snappy/doc/_static/fonts/Lato/lato-bold.eot +0 -0
- snappy/doc/_static/fonts/Lato/lato-bold.ttf +0 -0
- snappy/doc/_static/fonts/Lato/lato-bold.woff +0 -0
- snappy/doc/_static/fonts/Lato/lato-bold.woff2 +0 -0
- snappy/doc/_static/fonts/Lato/lato-bolditalic.eot +0 -0
- snappy/doc/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
- snappy/doc/_static/fonts/Lato/lato-bolditalic.woff +0 -0
- snappy/doc/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
- snappy/doc/_static/fonts/Lato/lato-italic.eot +0 -0
- snappy/doc/_static/fonts/Lato/lato-italic.ttf +0 -0
- snappy/doc/_static/fonts/Lato/lato-italic.woff +0 -0
- snappy/doc/_static/fonts/Lato/lato-italic.woff2 +0 -0
- snappy/doc/_static/fonts/Lato/lato-regular.eot +0 -0
- snappy/doc/_static/fonts/Lato/lato-regular.ttf +0 -0
- snappy/doc/_static/fonts/Lato/lato-regular.woff +0 -0
- snappy/doc/_static/fonts/Lato/lato-regular.woff2 +0 -0
- snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
- snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
- snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
- snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
- snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
- snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
- snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
- snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
- snappy/doc/_static/js/versions.js +228 -0
- snappy/doc/_static/language_data.js +199 -199
- snappy/doc/_static/pygments.css +74 -73
- snappy/doc/_static/searchtools.js +125 -71
- snappy/doc/_static/snappy_furo.css +33 -33
- snappy/doc/_static/snappy_sphinx_rtd_theme.css +42 -42
- snappy/doc/_static/sphinx_highlight.js +13 -3
- snappy/doc/additional_classes.html +1499 -1330
- snappy/doc/bugs.html +131 -134
- snappy/doc/censuses.html +426 -445
- snappy/doc/credits.html +180 -183
- snappy/doc/development.html +383 -363
- snappy/doc/genindex.html +1330 -1409
- snappy/doc/index.html +261 -206
- snappy/doc/installing.html +345 -363
- snappy/doc/manifold.html +3451 -2839
- snappy/doc/manifoldhp.html +179 -182
- snappy/doc/news.html +387 -329
- snappy/doc/objects.inv +0 -0
- snappy/doc/other.html +160 -162
- snappy/doc/platonic_census.html +374 -377
- snappy/doc/plink.html +209 -212
- snappy/doc/ptolemy.html +253 -255
- snappy/doc/ptolemy_classes.html +1143 -1146
- snappy/doc/ptolemy_examples1.html +408 -410
- snappy/doc/ptolemy_examples2.html +470 -473
- snappy/doc/ptolemy_examples3.html +413 -416
- snappy/doc/ptolemy_examples4.html +194 -197
- snappy/doc/ptolemy_prelim.html +247 -250
- snappy/doc/py-modindex.html +164 -167
- snappy/doc/screenshots.html +140 -142
- snappy/doc/search.html +134 -137
- snappy/doc/searchindex.js +1 -1
- snappy/doc/snap.html +201 -204
- snappy/doc/snappy.html +180 -182
- snappy/doc/spherogram.html +1210 -1213
- snappy/doc/todo.html +165 -168
- snappy/doc/triangulation.html +1583 -1474
- snappy/doc/tutorial.html +158 -161
- snappy/doc/verify.html +329 -275
- snappy/doc/verify_internals.html +1234 -1691
- snappy/drilling/__init__.py +153 -235
- snappy/drilling/barycentric.py +103 -0
- snappy/drilling/constants.py +0 -2
- snappy/drilling/crush.py +56 -130
- snappy/drilling/cusps.py +12 -6
- snappy/drilling/debug.py +2 -1
- snappy/drilling/exceptions.py +7 -40
- snappy/drilling/moves.py +302 -243
- snappy/drilling/perturb.py +63 -37
- snappy/drilling/shorten.py +36 -0
- snappy/drilling/subdivide.py +0 -5
- snappy/drilling/test.py +23 -0
- snappy/drilling/test_cases.py +126 -0
- snappy/drilling/tracing.py +9 -37
- snappy/exceptions.py +18 -5
- snappy/exterior_to_link/barycentric_geometry.py +2 -4
- snappy/exterior_to_link/main.py +8 -7
- snappy/exterior_to_link/mcomplex_with_link.py +2 -2
- snappy/exterior_to_link/rational_linear_algebra.py +1 -1
- snappy/exterior_to_link/rational_linear_algebra_wrapped.py +1 -1
- snappy/exterior_to_link/test.py +21 -33
- snappy/geometric_structure/__init__.py +212 -0
- snappy/geometric_structure/cusp_neighborhood/__init__.py +3 -0
- snappy/geometric_structure/cusp_neighborhood/complex_cusp_cross_section.py +697 -0
- snappy/geometric_structure/cusp_neighborhood/cusp_cross_section_base.py +484 -0
- snappy/geometric_structure/cusp_neighborhood/exceptions.py +42 -0
- snappy/geometric_structure/cusp_neighborhood/real_cusp_cross_section.py +298 -0
- snappy/geometric_structure/cusp_neighborhood/tiles_for_cusp_neighborhood.py +159 -0
- snappy/geometric_structure/cusp_neighborhood/vertices.py +32 -0
- snappy/geometric_structure/geodesic/__init__.py +0 -0
- snappy/geometric_structure/geodesic/add_core_curves.py +152 -0
- snappy/geometric_structure/geodesic/avoid_core_curves.py +369 -0
- snappy/geometric_structure/geodesic/canonical_keys.py +52 -0
- snappy/geometric_structure/geodesic/check_away_from_core_curve.py +60 -0
- snappy/geometric_structure/geodesic/constants.py +6 -0
- snappy/geometric_structure/geodesic/exceptions.py +22 -0
- snappy/{drilling → geometric_structure/geodesic}/fixed_points.py +34 -9
- snappy/{drilling/geodesic_info.py → geometric_structure/geodesic/geodesic_start_point_info.py} +139 -180
- snappy/geometric_structure/geodesic/graph_trace_helper.py +67 -0
- snappy/geometric_structure/geodesic/line.py +30 -0
- snappy/geometric_structure/geodesic/multiplicity.py +127 -0
- snappy/geometric_structure/geodesic/tiles_for_geodesic.py +101 -0
- snappy/geometric_structure/test.py +22 -0
- snappy/gui.py +23 -13
- snappy/horoviewer.py +7 -7
- snappy/hyperboloid/__init__.py +96 -31
- snappy/hyperboloid/distances.py +245 -0
- snappy/hyperboloid/horoball.py +19 -0
- snappy/hyperboloid/line.py +35 -0
- snappy/hyperboloid/point.py +9 -0
- snappy/hyperboloid/triangle.py +29 -0
- snappy/isometry_signature.py +382 -0
- snappy/len_spec/__init__.py +596 -0
- snappy/len_spec/geodesic_info.py +110 -0
- snappy/len_spec/geodesic_key_info_dict.py +117 -0
- snappy/len_spec/geodesic_piece.py +143 -0
- snappy/len_spec/geometric_structure.py +182 -0
- snappy/len_spec/geometry.py +80 -0
- snappy/len_spec/length_spectrum_geodesic_info.py +170 -0
- snappy/len_spec/spine.py +206 -0
- snappy/len_spec/test.py +24 -0
- snappy/len_spec/test_cases.py +69 -0
- snappy/len_spec/tile.py +275 -0
- snappy/len_spec/word.py +86 -0
- snappy/math_basics.py +39 -13
- snappy/matrix.py +52 -9
- snappy/number.py +12 -6
- snappy/numeric_output_checker.py +2 -3
- snappy/pari.py +8 -4
- snappy/phone_home.py +2 -1
- snappy/polyviewer.py +8 -8
- snappy/ptolemy/__init__.py +1 -1
- snappy/ptolemy/component.py +2 -2
- snappy/ptolemy/coordinates.py +25 -25
- snappy/ptolemy/findLoops.py +9 -9
- snappy/ptolemy/manifoldMethods.py +27 -29
- snappy/ptolemy/polynomial.py +50 -57
- snappy/ptolemy/processFileBase.py +60 -0
- snappy/ptolemy/ptolemyVariety.py +109 -41
- snappy/ptolemy/reginaWrapper.py +4 -4
- snappy/ptolemy/rur.py +1 -1
- snappy/ptolemy/solutionsToPrimeIdealGroebnerBasis.py +9 -9
- snappy/ptolemy/test.py +99 -54
- snappy/ptolemy/utilities.py +1 -1
- snappy/raytracing/__init__.py +64 -0
- snappy/raytracing/additional_horospheres.py +64 -0
- snappy/raytracing/additional_len_spec_choices.py +63 -0
- snappy/raytracing/cohomology_fractal.py +0 -3
- snappy/raytracing/eyeball.py +123 -0
- snappy/raytracing/finite_raytracing_data.py +17 -17
- snappy/raytracing/finite_viewer.py +15 -15
- snappy/raytracing/geodesic_tube_info.py +93 -63
- snappy/raytracing/geodesics.py +94 -64
- snappy/raytracing/geodesics_window.py +56 -34
- snappy/raytracing/gui_utilities.py +21 -6
- snappy/raytracing/hyperboloid_navigation.py +29 -4
- snappy/raytracing/hyperboloid_utilities.py +73 -73
- snappy/raytracing/ideal_raytracing_data.py +121 -91
- snappy/raytracing/inside_viewer.py +199 -66
- snappy/raytracing/pack.py +22 -0
- snappy/raytracing/raytracing_data.py +37 -25
- snappy/raytracing/raytracing_view.py +70 -65
- snappy/raytracing/shaders/Eye.png +0 -0
- snappy/raytracing/shaders/NonGeometric.png +0 -0
- snappy/raytracing/shaders/__init__.py +39 -3
- snappy/raytracing/shaders/fragment.glsl +451 -133
- snappy/raytracing/test.py +29 -0
- snappy/raytracing/tooltip.py +146 -0
- snappy/raytracing/upper_halfspace_utilities.py +42 -9
- snappy/sage_helper.py +67 -134
- snappy/settings.py +90 -77
- snappy/shell.py +2 -0
- snappy/snap/character_varieties.py +2 -2
- snappy/snap/find_field.py +4 -3
- snappy/snap/fundamental_polyhedron.py +2 -2
- snappy/snap/kernel_structures.py +5 -1
- snappy/snap/nsagetools.py +9 -8
- snappy/snap/peripheral/dual_cellulation.py +4 -3
- snappy/snap/peripheral/peripheral.py +2 -2
- snappy/snap/peripheral/surface.py +5 -5
- snappy/snap/peripheral/test.py +1 -1
- snappy/snap/polished_reps.py +8 -8
- snappy/snap/slice_obs_HKL.py +16 -14
- snappy/snap/t3mlite/arrow.py +3 -3
- snappy/snap/t3mlite/edge.py +3 -3
- snappy/snap/t3mlite/homology.py +2 -2
- snappy/snap/t3mlite/mcomplex.py +3 -3
- snappy/snap/t3mlite/simplex.py +12 -0
- snappy/snap/t3mlite/spun.py +18 -17
- snappy/snap/t3mlite/test_vs_regina.py +4 -4
- snappy/snap/test.py +37 -53
- snappy/snap/utilities.py +4 -5
- snappy/test.py +121 -138
- snappy/test_cases.py +263 -0
- snappy/testing.py +131 -0
- snappy/tiling/__init__.py +2 -0
- snappy/tiling/canonical_key_dict.py +59 -0
- snappy/tiling/dict_based_set.py +79 -0
- snappy/tiling/floor.py +49 -0
- snappy/tiling/hyperboloid_dict.py +54 -0
- snappy/tiling/iter_utils.py +78 -0
- snappy/tiling/lifted_tetrahedron.py +22 -0
- snappy/tiling/lifted_tetrahedron_set.py +54 -0
- snappy/tiling/real_hash_dict.py +164 -0
- snappy/tiling/test.py +23 -0
- snappy/tiling/tile.py +215 -0
- snappy/tiling/triangle.py +33 -0
- snappy/tkterminal.py +113 -84
- snappy/twister/main.py +1 -7
- snappy/twister/twister_core.cp38-win_amd64.pyd +0 -0
- snappy/upper_halfspace/__init__.py +78 -17
- snappy/verify/__init__.py +3 -7
- snappy/verify/{verifyCanonical.py → canonical.py} +78 -70
- snappy/verify/complex_volume/adjust_torsion.py +1 -2
- snappy/verify/complex_volume/closed.py +13 -13
- snappy/verify/complex_volume/cusped.py +6 -6
- snappy/verify/complex_volume/extended_bloch.py +5 -8
- snappy/verify/{cuspTranslations.py → cusp_translations.py} +1 -1
- snappy/verify/edge_equations.py +80 -0
- snappy/verify/exceptions.py +0 -55
- snappy/verify/{verifyHyperbolicity.py → hyperbolicity.py} +3 -3
- snappy/verify/interval_newton_shapes_engine.py +7 -5
- snappy/verify/interval_tree.py +5 -5
- snappy/verify/krawczyk_shapes_engine.py +17 -18
- snappy/verify/maximal_cusp_area_matrix/__init__.py +7 -74
- snappy/verify/maximal_cusp_area_matrix/cusp_tiling_engine.py +3 -4
- snappy/verify/maximal_cusp_area_matrix/cusp_translate_engine.py +1 -1
- snappy/verify/{realAlgebra.py → real_algebra.py} +1 -1
- snappy/verify/shapes.py +5 -3
- snappy/verify/short_slopes.py +39 -41
- snappy/verify/{squareExtensions.py → square_extensions.py} +14 -11
- snappy/verify/test.py +57 -60
- snappy/verify/upper_halfspace/extended_matrix.py +1 -1
- snappy/verify/upper_halfspace/finite_point.py +3 -4
- snappy/verify/upper_halfspace/ideal_point.py +9 -9
- snappy/verify/volume.py +2 -2
- snappy/version.py +2 -2
- {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/METADATA +14 -10
- snappy-3.2.dist-info/RECORD +503 -0
- {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/WHEEL +1 -1
- {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/top_level.txt +6 -1
- snappy/__pycache__/__init__.cpython-38.pyc +0 -0
- snappy/__pycache__/browser.cpython-38.pyc +0 -0
- snappy/__pycache__/cache.cpython-38.pyc +0 -0
- snappy/__pycache__/database.cpython-38.pyc +0 -0
- snappy/__pycache__/db_utilities.cpython-38.pyc +0 -0
- snappy/__pycache__/decorated_isosig.cpython-38.pyc +0 -0
- snappy/__pycache__/exceptions.cpython-38.pyc +0 -0
- snappy/__pycache__/export_stl.cpython-38.pyc +0 -0
- snappy/__pycache__/filedialog.cpython-38.pyc +0 -0
- snappy/__pycache__/gui.cpython-38.pyc +0 -0
- snappy/__pycache__/horoviewer.cpython-38.pyc +0 -0
- snappy/__pycache__/math_basics.cpython-38.pyc +0 -0
- snappy/__pycache__/matrix.cpython-38.pyc +0 -0
- snappy/__pycache__/number.cpython-38.pyc +0 -0
- snappy/__pycache__/numeric_output_checker.cpython-38.pyc +0 -0
- snappy/__pycache__/pari.cpython-38.pyc +0 -0
- snappy/__pycache__/polyviewer.cpython-38.pyc +0 -0
- snappy/__pycache__/sage_helper.cpython-38.pyc +0 -0
- snappy/__pycache__/version.cpython-38.pyc +0 -0
- snappy/doc/_sources/verify_canon.rst.txt +0 -90
- snappy/doc/_static/jquery-3.6.0.js +0 -10881
- snappy/doc/_static/js/html5shiv-printshiv.min.js +0 -4
- snappy/doc/_static/js/html5shiv.min.js +0 -4
- snappy/doc/_static/underscore-1.13.1.js +0 -2042
- snappy/doc/_static/underscore.js +0 -6
- snappy/doc/verify_canon.html +0 -304
- snappy/drilling/__pycache__/__init__.cpython-38.pyc +0 -0
- snappy/drilling/__pycache__/constants.cpython-38.pyc +0 -0
- snappy/drilling/__pycache__/crush.cpython-38.pyc +0 -0
- snappy/drilling/__pycache__/cusps.cpython-38.pyc +0 -0
- snappy/drilling/__pycache__/debug.cpython-38.pyc +0 -0
- snappy/drilling/__pycache__/epsilons.cpython-38.pyc +0 -0
- snappy/drilling/__pycache__/exceptions.cpython-38.pyc +0 -0
- snappy/drilling/__pycache__/fixed_points.cpython-38.pyc +0 -0
- snappy/drilling/__pycache__/geodesic_info.cpython-38.pyc +0 -0
- snappy/drilling/__pycache__/geodesic_tube.cpython-38.pyc +0 -0
- snappy/drilling/__pycache__/geometric_structure.cpython-38.pyc +0 -0
- snappy/drilling/__pycache__/line.cpython-38.pyc +0 -0
- snappy/drilling/__pycache__/moves.cpython-38.pyc +0 -0
- snappy/drilling/__pycache__/peripheral_curves.cpython-38.pyc +0 -0
- snappy/drilling/__pycache__/perturb.cpython-38.pyc +0 -0
- snappy/drilling/__pycache__/quotient_space.cpython-38.pyc +0 -0
- snappy/drilling/__pycache__/spatial_dict.cpython-38.pyc +0 -0
- snappy/drilling/__pycache__/subdivide.cpython-38.pyc +0 -0
- snappy/drilling/__pycache__/tracing.cpython-38.pyc +0 -0
- snappy/drilling/geodesic_tube.py +0 -441
- snappy/drilling/geometric_structure.py +0 -366
- snappy/drilling/line.py +0 -122
- snappy/drilling/quotient_space.py +0 -94
- snappy/drilling/spatial_dict.py +0 -128
- snappy/exterior_to_link/__pycache__/__init__.cpython-38.pyc +0 -0
- snappy/exterior_to_link/__pycache__/barycentric_geometry.cpython-38.pyc +0 -0
- snappy/exterior_to_link/__pycache__/exceptions.cpython-38.pyc +0 -0
- snappy/exterior_to_link/__pycache__/hyp_utils.cpython-38.pyc +0 -0
- snappy/exterior_to_link/__pycache__/link_projection.cpython-38.pyc +0 -0
- snappy/exterior_to_link/__pycache__/main.cpython-38.pyc +0 -0
- snappy/exterior_to_link/__pycache__/mcomplex_with_expansion.cpython-38.pyc +0 -0
- snappy/exterior_to_link/__pycache__/mcomplex_with_link.cpython-38.pyc +0 -0
- snappy/exterior_to_link/__pycache__/mcomplex_with_memory.cpython-38.pyc +0 -0
- snappy/exterior_to_link/__pycache__/pl_utils.cpython-38.pyc +0 -0
- snappy/exterior_to_link/__pycache__/put_in_S3.cpython-38.pyc +0 -0
- snappy/exterior_to_link/__pycache__/rational_linear_algebra.cpython-38.pyc +0 -0
- snappy/exterior_to_link/__pycache__/simplify_to_base_tri.cpython-38.pyc +0 -0
- snappy/exterior_to_link/__pycache__/stored_moves.cpython-38.pyc +0 -0
- snappy/hyperboloid/__pycache__/__init__.cpython-38.pyc +0 -0
- snappy/manifolds/__pycache__/__init__.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/__init__.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/component.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/coordinates.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/fieldExtensions.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/findLoops.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/homology.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/manifoldMethods.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/matrix.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/numericalSolutionsToGroebnerBasis.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/polynomial.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/processComponents.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/processFileBase.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/processFileDispatch.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/processMagmaFile.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/processRurFile.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/ptolemyGeneralizedObstructionClass.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/ptolemyObstructionClass.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/ptolemyVariety.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/ptolemyVarietyPrimeIdealGroebnerBasis.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/rur.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/solutionsToPrimeIdealGroebnerBasis.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/utilities.cpython-38.pyc +0 -0
- snappy/snap/__pycache__/__init__.cpython-38.pyc +0 -0
- snappy/snap/__pycache__/character_varieties.cpython-38.pyc +0 -0
- snappy/snap/__pycache__/fundamental_polyhedron.cpython-38.pyc +0 -0
- snappy/snap/__pycache__/interval_reps.cpython-38.pyc +0 -0
- snappy/snap/__pycache__/kernel_structures.cpython-38.pyc +0 -0
- snappy/snap/__pycache__/mcomplex_base.cpython-38.pyc +0 -0
- snappy/snap/__pycache__/nsagetools.cpython-38.pyc +0 -0
- snappy/snap/__pycache__/polished_reps.cpython-38.pyc +0 -0
- snappy/snap/__pycache__/shapes.cpython-38.pyc +0 -0
- snappy/snap/__pycache__/slice_obs_HKL.cpython-38.pyc +0 -0
- snappy/snap/__pycache__/utilities.cpython-38.pyc +0 -0
- snappy/snap/peripheral/__pycache__/__init__.cpython-38.pyc +0 -0
- snappy/snap/peripheral/__pycache__/dual_cellulation.cpython-38.pyc +0 -0
- snappy/snap/peripheral/__pycache__/link.cpython-38.pyc +0 -0
- snappy/snap/peripheral/__pycache__/peripheral.cpython-38.pyc +0 -0
- snappy/snap/peripheral/__pycache__/surface.cpython-38.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/__init__.cpython-38.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/arrow.cpython-38.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/corner.cpython-38.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/edge.cpython-38.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/face.cpython-38.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/files.cpython-38.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/homology.cpython-38.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/linalg.cpython-38.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/mcomplex.cpython-38.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/perm4.cpython-38.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/simplex.cpython-38.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/spun.cpython-38.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/surface.cpython-38.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/tetrahedron.cpython-38.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/vertex.cpython-38.pyc +0 -0
- snappy/togl/__init__.py +0 -3
- snappy/togl/darwin-tk8.6/Togl2.1/LICENSE +0 -28
- snappy/togl/darwin-tk8.6/Togl2.1/libTogl2.1.dylib +0 -0
- snappy/togl/darwin-tk8.6/Togl2.1/pkgIndex.tcl +0 -5
- snappy/togl/darwin-tk8.7/Togl2.1/LICENSE +0 -28
- snappy/togl/darwin-tk8.7/Togl2.1/libTogl2.1.dylib +0 -0
- snappy/togl/darwin-tk8.7/Togl2.1/pkgIndex.tcl +0 -5
- snappy/togl/linux2-x86_64-tk8.6/Togl2.1/LICENSE +0 -28
- snappy/togl/linux2-x86_64-tk8.6/Togl2.1/libTogl2.1.so +0 -0
- snappy/togl/linux2-x86_64-tk8.6/Togl2.1/pkgIndex.tcl +0 -5
- snappy/togl/win32VC-tk8.6/Togl2.1/LICENSE +0 -28
- snappy/togl/win32VC-tk8.6/Togl2.1/Togl21.dll +0 -0
- snappy/togl/win32VC-tk8.6/Togl2.1/Togl21.lib +0 -0
- snappy/togl/win32VC-tk8.6/Togl2.1/pkgIndex.tcl +0 -6
- snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/LICENSE +0 -28
- snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/Togl21.dll +0 -0
- snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/Togl21.lib +0 -0
- snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/pkgIndex.tcl +0 -6
- snappy/twister/__pycache__/__init__.cpython-38.pyc +0 -0
- snappy/twister/__pycache__/main.cpython-38.pyc +0 -0
- snappy/upper_halfspace/__pycache__/__init__.cpython-38.pyc +0 -0
- snappy/upper_halfspace/__pycache__/ideal_point.cpython-38.pyc +0 -0
- snappy/verify/__pycache__/__init__.cpython-38.pyc +0 -0
- snappy/verify/__pycache__/cuspCrossSection.cpython-38.pyc +0 -0
- snappy/verify/__pycache__/cuspTranslations.cpython-38.pyc +0 -0
- snappy/verify/__pycache__/cusp_areas.cpython-38.pyc +0 -0
- snappy/verify/__pycache__/cusp_shapes.cpython-38.pyc +0 -0
- snappy/verify/__pycache__/exceptions.cpython-38.pyc +0 -0
- snappy/verify/__pycache__/interval_newton_shapes_engine.cpython-38.pyc +0 -0
- snappy/verify/__pycache__/interval_tree.cpython-38.pyc +0 -0
- snappy/verify/__pycache__/krawczyk_shapes_engine.cpython-38.pyc +0 -0
- snappy/verify/__pycache__/realAlgebra.cpython-38.pyc +0 -0
- snappy/verify/__pycache__/shapes.cpython-38.pyc +0 -0
- snappy/verify/__pycache__/short_slopes.cpython-38.pyc +0 -0
- snappy/verify/__pycache__/squareExtensions.cpython-38.pyc +0 -0
- snappy/verify/__pycache__/verifyCanonical.cpython-38.pyc +0 -0
- snappy/verify/__pycache__/verifyHyperbolicity.cpython-38.pyc +0 -0
- snappy/verify/__pycache__/volume.cpython-38.pyc +0 -0
- snappy/verify/complex_volume/__pycache__/__init__.cpython-38.pyc +0 -0
- snappy/verify/complex_volume/__pycache__/adjust_torsion.cpython-38.pyc +0 -0
- snappy/verify/complex_volume/__pycache__/closed.cpython-38.pyc +0 -0
- snappy/verify/complex_volume/__pycache__/compute_ptolemys.cpython-38.pyc +0 -0
- snappy/verify/complex_volume/__pycache__/cusped.cpython-38.pyc +0 -0
- snappy/verify/complex_volume/__pycache__/extended_bloch.cpython-38.pyc +0 -0
- snappy/verify/cuspCrossSection.py +0 -1422
- snappy/verify/maximal_cusp_area_matrix/__pycache__/__init__.cpython-38.pyc +0 -0
- snappy/verify/maximal_cusp_area_matrix/__pycache__/cusp_tiling_engine.cpython-38.pyc +0 -0
- snappy/verify/maximal_cusp_area_matrix/__pycache__/cusp_translate_engine.cpython-38.pyc +0 -0
- snappy/verify/upper_halfspace/__pycache__/__init__.cpython-38.pyc +0 -0
- snappy/verify/upper_halfspace/__pycache__/extended_matrix.cpython-38.pyc +0 -0
- snappy/verify/upper_halfspace/__pycache__/finite_point.cpython-38.pyc +0 -0
- snappy/verify/upper_halfspace/__pycache__/ideal_point.cpython-38.pyc +0 -0
- snappy-3.1.1.dist-info/RECORD +0 -575
- {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/entry_points.txt +0 -0
snappy/drilling/geodesic_tube.py
DELETED
@@ -1,441 +0,0 @@
|
|
1
|
-
from . import constants
|
2
|
-
from . import exceptions
|
3
|
-
from . import epsilons
|
4
|
-
from .line import distance_r13_lines, R13Line, R13LineWithMatrix
|
5
|
-
from .geodesic_info import GeodesicInfo, LiftedTetrahedron
|
6
|
-
from .quotient_space import balance_end_points_of_line, ZQuotientLiftedTetrahedronSet
|
7
|
-
|
8
|
-
from ..hyperboloid import ( # type: ignore
|
9
|
-
r13_dot,
|
10
|
-
o13_inverse,
|
11
|
-
time_r13_normalise,
|
12
|
-
space_r13_normalise,
|
13
|
-
distance_unit_time_r13_points)
|
14
|
-
from ..snap.t3mlite import simplex, Tetrahedron, Mcomplex # type: ignore
|
15
|
-
from ..matrix import matrix # type: ignore
|
16
|
-
from ..math_basics import is_RealIntervalFieldElement # type: ignore
|
17
|
-
from ..exceptions import InsufficientPrecisionError # type: ignore
|
18
|
-
|
19
|
-
import heapq
|
20
|
-
|
21
|
-
from typing import Sequence, Any
|
22
|
-
|
23
|
-
|
24
|
-
def add_structures_necessary_for_tube(mcomplex : Mcomplex) -> None:
|
25
|
-
"""
|
26
|
-
A GeodesicTube can only be built from an Mcomplex if add_r13_geometry
|
27
|
-
and this function (add_structure_necessary_for_tube) was called.
|
28
|
-
|
29
|
-
This function adds R13Line objects for the edges of the tetrahedra.
|
30
|
-
It also adds a bounding plane for each edge of each face of each
|
31
|
-
tetrahedron. Such a bounding plane is perpendicular to the plane supporting
|
32
|
-
the face and intersects the plane in an edge of face. That is, the
|
33
|
-
bounding planes for a face cut out the triangle in the plane supporting
|
34
|
-
the face.
|
35
|
-
|
36
|
-
This information is used to compute the distance (or at least a lower bound
|
37
|
-
for the distance) of a hyperbolic line L to a (triangular) face of a
|
38
|
-
tetrahedron.
|
39
|
-
|
40
|
-
In particular, we can check whether both endpoints of L fall "outside" of
|
41
|
-
one of the bounding planes. In that case, the point of the triangle
|
42
|
-
closest to the line is on edge corresponding to the bounding plane.
|
43
|
-
"""
|
44
|
-
|
45
|
-
for tet in mcomplex.Tetrahedra:
|
46
|
-
tet.R13_edges = {
|
47
|
-
e: R13Line([tet.R13_vertices[simplex.Head[e]],
|
48
|
-
tet.R13_vertices[simplex.Tail[e]]])
|
49
|
-
for e in simplex.OneSubsimplices }
|
50
|
-
tet.triangle_bounding_planes = {
|
51
|
-
f : { e: triangle_bounding_plane(tet, f, e)
|
52
|
-
for e in _face_to_edges[f] }
|
53
|
-
for f in simplex.TwoSubsimplices }
|
54
|
-
|
55
|
-
|
56
|
-
class _PendingPiece:
|
57
|
-
"""
|
58
|
-
A lifted tetrahedron that still needs to be processed by GeodesicTube
|
59
|
-
together with the face through which this lifted tetrahedron was
|
60
|
-
reached.
|
61
|
-
|
62
|
-
The lifted tetrahedron lives in the quotient space of the hyperboloid
|
63
|
-
model by (powers of) the matrix corresponding to the closed geodesic,
|
64
|
-
see ZQuotientLiftedTetrahedronSet.
|
65
|
-
|
66
|
-
The algorithm in GeodesicTube might add the same lifted tetrahedron
|
67
|
-
multiple times to the queue of pending pieces as there are four
|
68
|
-
neighboring lifted tetrahedra from which this lifted tetrahedron can
|
69
|
-
be reached.
|
70
|
-
|
71
|
-
Let L be the line (in the quotient space) about which we develop the
|
72
|
-
geodesic tube. lower_bound is a lower bound on the distance between
|
73
|
-
L and the face through which this lifted tetrahedron was reached.
|
74
|
-
Note that lower_bound might be larger than the distance between L and
|
75
|
-
this lifted tetrahedron (which is the minimum of all distances between
|
76
|
-
L and any of the faces of this lifted tetrahedron).
|
77
|
-
|
78
|
-
The < operator is overloaded so that the piece with the lowest
|
79
|
-
lower_bound will be picked up next by a priority queue.
|
80
|
-
|
81
|
-
If pieces are processed in this order, then the lower_bound of the
|
82
|
-
next piece will actually be a lower bound for the distance between L
|
83
|
-
and the lifted tetrahedron (with other pending pieces for the same
|
84
|
-
lifted tetrahedron having higher values for lower_bound and thus
|
85
|
-
being further down the queue).
|
86
|
-
"""
|
87
|
-
|
88
|
-
def __init__(self,
|
89
|
-
lifted_tetrahedron : LiftedTetrahedron,
|
90
|
-
lower_bound,
|
91
|
-
entry_cell : int = simplex.T):
|
92
|
-
self.lifted_tetrahedron = lifted_tetrahedron
|
93
|
-
self.lower_bound = lower_bound
|
94
|
-
|
95
|
-
# Either element of simplex.ZeroSubsimplices (if piece was reached
|
96
|
-
# through another piece) or simplex.T (if this pending piece was
|
97
|
-
# used to start tiling).
|
98
|
-
self.entry_cell = entry_cell
|
99
|
-
|
100
|
-
if is_RealIntervalFieldElement(lower_bound):
|
101
|
-
# For convenience, lower_bound is an interval but it is only
|
102
|
-
# the left value of the interval that is relevant and that we
|
103
|
-
# should use: A < B can be False for two intervals even
|
104
|
-
# when A's left value is lower than B's left value.
|
105
|
-
if lower_bound.is_NaN():
|
106
|
-
raise InsufficientPrecisionError(
|
107
|
-
"A NaN was encountered while developing a tube about a "
|
108
|
-
"geodesic. "
|
109
|
-
"Increasing the precision will probably fix this.")
|
110
|
-
|
111
|
-
self._key = lower_bound.lower()
|
112
|
-
else:
|
113
|
-
self._key = lower_bound
|
114
|
-
|
115
|
-
def __lt__(self, other):
|
116
|
-
return self._key < other._key
|
117
|
-
|
118
|
-
# @dataclass
|
119
|
-
|
120
|
-
|
121
|
-
class GeodesicTubePiece:
|
122
|
-
"""
|
123
|
-
A class for the pieces produced by GeodesicTube to cover a tube T about
|
124
|
-
the given geodesic of the given radius r in the given manifold.
|
125
|
-
|
126
|
-
Such a piece is encoded as a tetrahedron and a line L in the
|
127
|
-
hyperboloiod model. Imagine that tetrahedron as part of the
|
128
|
-
fundamental domain and intersect it with a tube about L with
|
129
|
-
radius r. The images of these intersections in the manifold
|
130
|
-
cover T. Because we error on the side of rather adding than dropping
|
131
|
-
a piece when using interval arithmetic, the union of the images might not
|
132
|
-
be exactly T but a superset. A piece also stores a lower bound for the
|
133
|
-
distance between its tetrahedron in the fundamental domain and L.
|
134
|
-
|
135
|
-
In other words, GeodesicTube produces a piece for each tetrahedron
|
136
|
-
in the fundamental domain and each lift of the closed geodesic
|
137
|
-
to the hyperboloid model for which the above distance is less than r
|
138
|
-
(or more accurately, could not be proven to be greater than r).
|
139
|
-
|
140
|
-
When using verified computation, lower_bound is an interval for
|
141
|
-
convenience, even though only the left value of the interval is
|
142
|
-
relevant.
|
143
|
-
"""
|
144
|
-
|
145
|
-
def __init__(self,
|
146
|
-
tet : Tetrahedron,
|
147
|
-
lifted_geodesic : R13Line,
|
148
|
-
# A number or interval (even though only left value is relevant)
|
149
|
-
# bounding the distance between tet and lifted_geodesic from
|
150
|
-
# below
|
151
|
-
lower_bound):
|
152
|
-
self.tet = tet
|
153
|
-
self.lifted_geodesic = lifted_geodesic
|
154
|
-
self.lower_bound = lower_bound
|
155
|
-
|
156
|
-
|
157
|
-
class GeodesicTube:
|
158
|
-
"""
|
159
|
-
Computes all GeodesicPiece's needed to cover a tube about the
|
160
|
-
given closed geodesic in the given manifold. The geodesic cannot be
|
161
|
-
a core curve of a filled cusp.
|
162
|
-
|
163
|
-
A GeodesicTube is constructed from a triangulation with a suitable
|
164
|
-
geometric structure and a suitable GeodesicInfo object.
|
165
|
-
|
166
|
-
To add the necessary geometric structure to a triangulation, call
|
167
|
-
add_r13_geometry and add_structures_necessary_for_tube.
|
168
|
-
|
169
|
-
The GeodesicInfo object needs to be constructed with a line and
|
170
|
-
GeodesicInfo.find_tet_or_core_curve be called on it.
|
171
|
-
|
172
|
-
Calling GeodesicInfo.add_pieces_for_radius will then add the
|
173
|
-
necessary pieces to GeodesicInfo.pieces to cover the tube of the
|
174
|
-
given radius.
|
175
|
-
"""
|
176
|
-
def __init__(self, mcomplex : Mcomplex, geodesic : GeodesicInfo):
|
177
|
-
self.mcomplex = mcomplex
|
178
|
-
|
179
|
-
if geodesic.line is None:
|
180
|
-
raise ValueError(
|
181
|
-
"GeodesicTube expected GeodesicInfo with line set to start "
|
182
|
-
"developing a tube about the geodesic.")
|
183
|
-
|
184
|
-
if not geodesic.lifted_tetrahedra:
|
185
|
-
raise ValueError(
|
186
|
-
"GeodesicTube expected GeodesicInfo with lifted_tetrahedra "
|
187
|
-
"set to start developing a tube about the geodesic.")
|
188
|
-
|
189
|
-
self._line : R13Line = geodesic.line.r13_line
|
190
|
-
|
191
|
-
# The pending pieces as priority queue - that is, a python list
|
192
|
-
# but we use heapq to access it.
|
193
|
-
self._pending_pieces : Sequence[_PendingPiece] = []
|
194
|
-
|
195
|
-
# Start tiling the tube about the geodesic with the lifted
|
196
|
-
# tetrahedra computed with GeodesicInfo.find_tet_or_core_curve.
|
197
|
-
#
|
198
|
-
# Note that that method guarantees that at least one of the
|
199
|
-
# lifted tetrahedra it intersects the above line. Thus, the tiling
|
200
|
-
# is seeded correctly. That is, we cannot fail in the following way:
|
201
|
-
# assume that the given lifted tetrahedra are far away from the given
|
202
|
-
# line. Then the algorithm below thinks we are done, before we
|
203
|
-
# even started properly tiling - and we obviously get an incomplete
|
204
|
-
# result.
|
205
|
-
#
|
206
|
-
for lifted_tetrahedron in geodesic.lifted_tetrahedra:
|
207
|
-
heapq.heappush(
|
208
|
-
self._pending_pieces,
|
209
|
-
_PendingPiece(lifted_tetrahedron, mcomplex.RF(0)))
|
210
|
-
|
211
|
-
# Initialize data structure recording which lifted tetrahedra have
|
212
|
-
# already been visited and been added to the result while tiling
|
213
|
-
# the quotient space.
|
214
|
-
self._visited_lifted_tetrahedra = ZQuotientLiftedTetrahedronSet(
|
215
|
-
mcomplex,
|
216
|
-
balance_end_points_of_line(
|
217
|
-
geodesic.line,
|
218
|
-
geodesic.unnormalised_start_point))
|
219
|
-
|
220
|
-
# The resulting pieces needed to cover the tube.
|
221
|
-
self.pieces : Sequence[GeodesicTubePiece] = [ ]
|
222
|
-
|
223
|
-
def add_pieces_for_radius(self, r):
|
224
|
-
"""
|
225
|
-
Ensures that all pieces needed to cover a tube up to radius
|
226
|
-
r are stored in GeodesicTube.pieces.
|
227
|
-
"""
|
228
|
-
|
229
|
-
while not self.covered_radius() > r:
|
230
|
-
self._add_next_piece()
|
231
|
-
|
232
|
-
def covered_radius(self):
|
233
|
-
"""
|
234
|
-
The pieces in GeodesicTube.pieces cover a tube of radius at least
|
235
|
-
the value returned by this function.
|
236
|
-
|
237
|
-
Note that, for convenience, an interval is returned even though
|
238
|
-
only the left value is relevant.
|
239
|
-
"""
|
240
|
-
return self._pending_pieces[0].lower_bound
|
241
|
-
|
242
|
-
def _add_next_piece(self):
|
243
|
-
"""
|
244
|
-
Finds the pending piece "closest" to the lifted closed geodesic,
|
245
|
-
adds it to the result and marks the neighboring lifted tetrahedra
|
246
|
-
to the pending queue.
|
247
|
-
|
248
|
-
Here, "closest" is not quite precise because we pick the piece
|
249
|
-
with the lowest lower bound for the distance. Also recall that the
|
250
|
-
distance of a pending piece is the distance between the lifted
|
251
|
-
geodesic L and the entry cell of the lifted tetrahedron, not between
|
252
|
-
L and the lifted tetrahedron itself.
|
253
|
-
|
254
|
-
So the right picture to have in mind is: imagine the 2-skeleton
|
255
|
-
of the triangulation in the quotient space intersecting the boundary
|
256
|
-
of a geodesic tube. As the geodesic tube grows, the intersection
|
257
|
-
sweeps through the 2-skeleton. The pending pieces will be processed in
|
258
|
-
the order the faces of the 2-skeleton are encountered during the
|
259
|
-
sweep.
|
260
|
-
"""
|
261
|
-
|
262
|
-
# Find "closest" pieces not yet visited
|
263
|
-
while True:
|
264
|
-
pending_piece = heapq.heappop(self._pending_pieces)
|
265
|
-
if self._visited_lifted_tetrahedra.add(
|
266
|
-
pending_piece.lifted_tetrahedron):
|
267
|
-
break
|
268
|
-
|
269
|
-
if self.mcomplex.verified:
|
270
|
-
epsilon = 0
|
271
|
-
else:
|
272
|
-
epsilon = epsilons.compute_tube_injectivity_radius_epsilon(
|
273
|
-
self.mcomplex.RF)
|
274
|
-
|
275
|
-
tet = pending_piece.lifted_tetrahedron.tet
|
276
|
-
m = pending_piece.lifted_tetrahedron.o13_matrix
|
277
|
-
|
278
|
-
# Imagine the fixed lift of the given geodesic and how it
|
279
|
-
# relates to the lifted tetrahedron which is the image of
|
280
|
-
# the tetrahedron in the fundamental domain under the matrix.
|
281
|
-
#
|
282
|
-
# Applying the inverse matrix moves the tetrahedron back into
|
283
|
-
# the fundamental domain and thus we obtain the line we want
|
284
|
-
# to record in GeodesicTubePiece.
|
285
|
-
#
|
286
|
-
lifted_geodesic = self._line.transformed(o13_inverse(m))
|
287
|
-
|
288
|
-
# Check that this line is not intersecting a core curve.
|
289
|
-
for v in simplex.ZeroSubsimplices:
|
290
|
-
core_curve = tet.core_curves.get(v, None)
|
291
|
-
if core_curve:
|
292
|
-
d = distance_r13_lines(
|
293
|
-
core_curve.r13_line,
|
294
|
-
lifted_geodesic)
|
295
|
-
if not d > epsilon:
|
296
|
-
raise exceptions.GeodesicCloseToCoreCurve()
|
297
|
-
|
298
|
-
# Emit GeodesicTubePiece
|
299
|
-
self.pieces.append(
|
300
|
-
GeodesicTubePiece(
|
301
|
-
tet=tet,
|
302
|
-
lifted_geodesic=lifted_geodesic,
|
303
|
-
lower_bound=pending_piece.lower_bound))
|
304
|
-
|
305
|
-
# For all faces ...
|
306
|
-
for f, new_tet in tet.Neighbor.items():
|
307
|
-
# ... except the one that was used to reach this lifted tetrahedron
|
308
|
-
if f == pending_piece.entry_cell:
|
309
|
-
continue
|
310
|
-
entry_face = tet.Gluing[f].image(f)
|
311
|
-
heapq.heappush(
|
312
|
-
self._pending_pieces,
|
313
|
-
_PendingPiece(
|
314
|
-
LiftedTetrahedron(
|
315
|
-
new_tet,
|
316
|
-
# Inverse of tet.O13_matrices[f]
|
317
|
-
m * new_tet.O13_matrices[entry_face]),
|
318
|
-
# Distance of this face to lifted geodesic
|
319
|
-
# (equal to distance of face entry_face of
|
320
|
-
# new_tet)
|
321
|
-
lower_bound_for_distance_line_to_tet_face(
|
322
|
-
lifted_geodesic,
|
323
|
-
tet,
|
324
|
-
f,
|
325
|
-
self.mcomplex.verified),
|
326
|
-
entry_cell=entry_face))
|
327
|
-
|
328
|
-
|
329
|
-
def make_r13_unit_tangent_vector(direction, point):
|
330
|
-
s = r13_dot(direction, point)
|
331
|
-
return space_r13_normalise(direction + s * point)
|
332
|
-
|
333
|
-
|
334
|
-
def triangle_bounding_plane(tet, face, edge):
|
335
|
-
v = tet.R13_vertices[face - edge]
|
336
|
-
v0 = tet.R13_vertices[simplex.Head[edge]]
|
337
|
-
v1 = tet.R13_vertices[simplex.Tail[edge]]
|
338
|
-
|
339
|
-
m = time_r13_normalise(
|
340
|
-
v0 / -r13_dot(v0, v) + v1 / -r13_dot(v1, v))
|
341
|
-
|
342
|
-
return make_r13_unit_tangent_vector(m - v, m)
|
343
|
-
|
344
|
-
|
345
|
-
_face_to_edges = { f : [ e for e in simplex.OneSubsimplices
|
346
|
-
if simplex.is_subset(e, f) ]
|
347
|
-
for f in simplex.TwoSubsimplices }
|
348
|
-
|
349
|
-
|
350
|
-
def lower_bound_for_distance_line_to_tet_face(
|
351
|
-
line, tet, face, verified):
|
352
|
-
|
353
|
-
RF = line.points[0][0].parent()
|
354
|
-
if verified:
|
355
|
-
epsilon = 0
|
356
|
-
else:
|
357
|
-
epsilon = epsilons.compute_epsilon(RF)
|
358
|
-
|
359
|
-
a0 = r13_dot(tet.R13_planes[face], line.points[0])
|
360
|
-
a1 = r13_dot(tet.R13_planes[face], line.points[1])
|
361
|
-
|
362
|
-
abs0 = abs(a0)
|
363
|
-
abs1 = abs(a1)
|
364
|
-
|
365
|
-
if abs0 > epsilon and abs1 > epsilon:
|
366
|
-
pt = line.points[0] / abs0 + line.points[1] / abs1
|
367
|
-
|
368
|
-
for e in _face_to_edges[face]:
|
369
|
-
if r13_dot(pt, tet.triangle_bounding_planes[face][e]) > epsilon:
|
370
|
-
return distance_r13_lines(line, tet.R13_edges[e])
|
371
|
-
|
372
|
-
p = a0 * a1
|
373
|
-
|
374
|
-
if p > 0:
|
375
|
-
return (-2 * p / line.inner_product).sqrt().arcsinh()
|
376
|
-
|
377
|
-
return RF(0)
|
378
|
-
else:
|
379
|
-
for e in _face_to_edges[face]:
|
380
|
-
p = tet.triangle_bounding_planes[face][e]
|
381
|
-
b0 = r13_dot(line.points[0], p)
|
382
|
-
b1 = r13_dot(line.points[1], p)
|
383
|
-
if b0 > epsilon and b1 > epsilon:
|
384
|
-
return distance_r13_lines(line, tet.R13_edges[e])
|
385
|
-
|
386
|
-
return RF(0)
|
387
|
-
|
388
|
-
|
389
|
-
if __name__ == '__main__':
|
390
|
-
from snappy import *
|
391
|
-
from snappy.dev.endpoints import *
|
392
|
-
M = Manifold("m015")
|
393
|
-
m = compute_mcomplex_with_R13_geometry(M, verified=True, bits_prec=100)
|
394
|
-
|
395
|
-
g = GeodesicTube(m, 'b')
|
396
|
-
|
397
|
-
inj = g.compute_injectivity_radius()
|
398
|
-
|
399
|
-
for i in range(40):
|
400
|
-
g.add_next_piece()
|
401
|
-
|
402
|
-
print("============================")
|
403
|
-
|
404
|
-
for p in g.pieces:
|
405
|
-
print(p.lower_bound_distance)
|
406
|
-
|
407
|
-
print("Injectivity radius:", inj)
|
408
|
-
|
409
|
-
# Expected:
|
410
|
-
|
411
|
-
"""
|
412
|
-
[0,
|
413
|
-
0.000000000000000,
|
414
|
-
0.157432650379166,
|
415
|
-
0.759562243855202,
|
416
|
-
0.759562243855203,
|
417
|
-
0.759562243855202,
|
418
|
-
0.759562243855203,
|
419
|
-
0.759562243855203,
|
420
|
-
0.759562243855203,
|
421
|
-
1.06170905665770,
|
422
|
-
1.06170905665770,
|
423
|
-
1.06170905665770,
|
424
|
-
1.06170905665770,
|
425
|
-
1.06170905665770,
|
426
|
-
1.06170905665770,
|
427
|
-
1.12951210091877,
|
428
|
-
1.12951210091877,
|
429
|
-
1.14163116050953,
|
430
|
-
1.14163116050953,
|
431
|
-
1.14163116050953,
|
432
|
-
1.14163116050953,
|
433
|
-
1.14163116050953,
|
434
|
-
1.26080401747415,
|
435
|
-
1.26080401747415,
|
436
|
-
1.26080401747415,
|
437
|
-
1.26080401747415,
|
438
|
-
1.35112753701695,
|
439
|
-
1.35112753701695,
|
440
|
-
1.46879789565717,
|
441
|
-
"""
|