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/crush.py
CHANGED
@@ -1,23 +1,20 @@
|
|
1
1
|
from .cusps import CuspPostDrillInfo
|
2
|
-
from .tracing import GeodesicPiece
|
3
2
|
from .peripheral_curves import install_peripheral_curves
|
3
|
+
from .barycentric import transpositions, perm_to_index
|
4
4
|
|
5
5
|
from ..snap.t3mlite import Tetrahedron, Perm4, Mcomplex, simplex
|
6
6
|
|
7
|
-
from typing import
|
8
|
-
|
7
|
+
from typing import Set, Sequence
|
9
8
|
|
10
9
|
def crush_geodesic_pieces(tetrahedra : Sequence[Tetrahedron]) -> Mcomplex:
|
11
10
|
"""
|
12
11
|
Given tetrahedra produced by traverse_geodesics_to_subdivide,
|
13
|
-
compute the barycentric subdivision and crush all
|
14
|
-
barycentric subdivision that
|
15
|
-
GeodesicPiece.
|
12
|
+
compute the barycentric subdivision and crush all subtetrahedra in the
|
13
|
+
barycentric subdivision that have been marked as being adjacent to an edge
|
14
|
+
that coincides with a GeodesicPiece.
|
16
15
|
|
17
|
-
|
18
|
-
|
19
|
-
of all pieces are at vertices of the tetrahedron, that is the line
|
20
|
-
segment the GeodesicPiece represents is an edge of the tetrahedron.
|
16
|
+
The function mark_subtetrahedra_about_geodesic_pieces marks the
|
17
|
+
subtetrahedra as described above.
|
21
18
|
"""
|
22
19
|
|
23
20
|
# We call the tetrahedra in the barycentric subdivision subtetrahedra
|
@@ -38,16 +35,17 @@ def crush_geodesic_pieces(tetrahedra : Sequence[Tetrahedron]) -> Mcomplex:
|
|
38
35
|
# Using the index i that p has in Perm4.S4, we index
|
39
36
|
# a subtetrahedron by 24 * tet.Index + i.
|
40
37
|
|
41
|
-
#
|
42
|
-
#
|
38
|
+
# The subtetrahedra that are supposed to be curshed in the barycentric
|
39
|
+
# are assumed to be marked in tet.marked_subtetrahedra.
|
43
40
|
#
|
44
|
-
#
|
45
|
-
#
|
46
|
-
mask, peripheral_base_subtet_indices = (
|
47
|
-
_tet_mask_and_peripheral_base_subtet_indices(tetrahedra))
|
41
|
+
# Later, we also pick a subtetrahedron for each simple closed curve to
|
42
|
+
# compute a new meridian and longitude.
|
48
43
|
|
49
44
|
# Use bit mask to create the subtetrahedra surviving the crushing.
|
50
|
-
subtetrahedra = [
|
45
|
+
subtetrahedra = [
|
46
|
+
Tetrahedron() if marked_subtet == 0 else None
|
47
|
+
for tet in tetrahedra
|
48
|
+
for marked_subtet in tet.marked_subtetrahedra ]
|
51
49
|
|
52
50
|
_assign_orientations(subtetrahedra)
|
53
51
|
|
@@ -64,10 +62,10 @@ def crush_geodesic_pieces(tetrahedra : Sequence[Tetrahedron]) -> Mcomplex:
|
|
64
62
|
# The gluings internal (between subtetrahedra of the
|
65
63
|
# same tetrahedron)
|
66
64
|
for face in range(3):
|
67
|
-
other_perm = perm *
|
68
|
-
j =
|
65
|
+
other_perm = perm * transpositions[face]
|
66
|
+
j = perm_to_index(other_perm)
|
69
67
|
other_subtet_index = 24 * tet.Index + j
|
70
|
-
if face == 1 and
|
68
|
+
if face == 1 and tet.marked_subtetrahedra[j] != 0:
|
71
69
|
# We are processing subtetrahedron t and its
|
72
70
|
# neighbor c is adjacent to a GeodesicPiece (=)
|
73
71
|
# and thus it and its neighbor c' get crushed.
|
@@ -89,7 +87,7 @@ def crush_geodesic_pieces(tetrahedra : Sequence[Tetrahedron]) -> Mcomplex:
|
|
89
87
|
# 0============1============0
|
90
88
|
#
|
91
89
|
other_perm = perm * Perm4((2,1,0,3))
|
92
|
-
j =
|
90
|
+
j = perm_to_index(other_perm)
|
93
91
|
other_subtet_index = 24 * tet.Index + j
|
94
92
|
# attach is working symmetrically also setting the Neighbors
|
95
93
|
# and Gluings of the other tetrahedron, so only call it once
|
@@ -104,12 +102,12 @@ def crush_geodesic_pieces(tetrahedra : Sequence[Tetrahedron]) -> Mcomplex:
|
|
104
102
|
face = perm.image(simplex.F3)
|
105
103
|
other_tet = tet.Neighbor[face]
|
106
104
|
other_perm = tet.Gluing[face] * perm
|
107
|
-
j =
|
105
|
+
j = perm_to_index(other_perm)
|
108
106
|
other_subtet_index = 24 * other_tet.Index + j
|
109
107
|
if other_subtet_index > subtet_index:
|
110
108
|
subtet.attach(simplex.F3,
|
111
|
-
|
112
|
-
|
109
|
+
subtetrahedra[other_subtet_index],
|
110
|
+
(0,1,2,3))
|
113
111
|
|
114
112
|
# Only vertex 0 corresponds to an original vertex.
|
115
113
|
# The other vertices will actually be finite, i.e., have
|
@@ -186,11 +184,41 @@ def crush_geodesic_pieces(tetrahedra : Sequence[Tetrahedron]) -> Mcomplex:
|
|
186
184
|
|
187
185
|
_fix_all_peripheral_curves(subtetrahedra)
|
188
186
|
|
189
|
-
# Find peripheral curves for
|
187
|
+
# Find peripheral curves for each cusps created by crushing the simple
|
190
188
|
# closed curves.
|
191
|
-
|
192
|
-
|
193
|
-
|
189
|
+
# Record which of these cusps was already processed to only do this once
|
190
|
+
# per cusp.
|
191
|
+
new_cusp_indices : Set[int] = set()
|
192
|
+
for tet in tetrahedra:
|
193
|
+
for perm, orientation in zip(Perm4.S4(), tet.marked_subtetrahedra):
|
194
|
+
# We found a subtetrahedron adjacent to a geodesic piece.
|
195
|
+
#
|
196
|
+
# Make sure its 0-1 edge is parallel and not anti-parallel to
|
197
|
+
# the geodesic piece. This way the longitude will be parallel to
|
198
|
+
# the geodesic piece.
|
199
|
+
if orientation != +1:
|
200
|
+
continue
|
201
|
+
# Check orientation of subtetrahedron so that the orientation of
|
202
|
+
# the meridian relative to the longitude matches the orientation of the
|
203
|
+
# cusp.
|
204
|
+
if perm.sign() == 1:
|
205
|
+
continue
|
206
|
+
v : int = perm.image(simplex.V0)
|
207
|
+
cusp_index : int = tet.post_drill_infos[v].index
|
208
|
+
if cusp_index is None:
|
209
|
+
raise Exception("Vertex on geodesic has no assigned cusp")
|
210
|
+
if cusp_index in new_cusp_indices:
|
211
|
+
continue
|
212
|
+
# First time we encounter this simple closed curve. Pick a base
|
213
|
+
# tet to install the meridian and longitude.
|
214
|
+
# This base tet better not be one of the subtetrahedra that is
|
215
|
+
# crushed. So pick a neighbor of the subtetrahedron adjacent
|
216
|
+
# to the geodesic piece.
|
217
|
+
other_perm = perm * transpositions[1]
|
218
|
+
subtet_index = 24 * tet.Index + perm_to_index(other_perm)
|
219
|
+
install_peripheral_curves(subtetrahedra[subtet_index])
|
220
|
+
new_cusp_indices.add(cusp_index)
|
221
|
+
|
194
222
|
# To preserve the orientation, make sure that the first subtetrahedron
|
195
223
|
# we pass to Mcomplex has the same orientation as the original tetrahedron
|
196
224
|
# - since the SnapPea kernel will use the first tetrahedron of an
|
@@ -200,108 +228,6 @@ def crush_geodesic_pieces(tetrahedra : Sequence[Tetrahedron]) -> Mcomplex:
|
|
200
228
|
for subtet in subtetrahedra
|
201
229
|
if subtet and subtet.orientation == s ])
|
202
230
|
|
203
|
-
|
204
|
-
_perm_tuple_to_index : Dict[Tuple[int, int, int, int], int] = {
|
205
|
-
perm.tuple() : i for i, perm in enumerate(Perm4.S4()) }
|
206
|
-
|
207
|
-
_transpositions : List[Perm4] = [ Perm4((1,0,2,3)),
|
208
|
-
Perm4((0,2,1,3)),
|
209
|
-
Perm4((0,1,3,2)) ]
|
210
|
-
|
211
|
-
|
212
|
-
def _perm_to_index(perm : Perm4) -> int:
|
213
|
-
return _perm_tuple_to_index[perm.tuple()]
|
214
|
-
|
215
|
-
|
216
|
-
def _find_perm_for_piece(piece : GeodesicPiece):
|
217
|
-
"""
|
218
|
-
Given a GeodesicPiece with endpoints being on the vertices
|
219
|
-
of the tetrahedron and spanning an oriented edge of the tetrahedron,
|
220
|
-
find an "edge embedding permutation" (similar to regina's
|
221
|
-
edge embedding) that maps the 0-1 edge to the given edge.
|
222
|
-
|
223
|
-
The subtetrahedron corresponding to this permutation is
|
224
|
-
adjacent to half of this edge.
|
225
|
-
"""
|
226
|
-
|
227
|
-
s0 = piece.endpoints[0].subsimplex
|
228
|
-
s1 = piece.endpoints[1].subsimplex
|
229
|
-
|
230
|
-
# Important to consistently always pick a permutation of the
|
231
|
-
# same parity and respect the ordering of the vertices V0 and V1
|
232
|
-
# since this affects which subtetrahedron will be chosen as peripheral
|
233
|
-
# base subtetrahedron - and thus ultimately affects the orientation
|
234
|
-
# of the meridian and longitude computed by install_peripheral_curves.
|
235
|
-
for perm in Perm4.A4():
|
236
|
-
if perm.image(simplex.V0) == s0 and perm.image(simplex.V1) == s1:
|
237
|
-
return perm
|
238
|
-
|
239
|
-
|
240
|
-
def _traverse_edge(tet0 : Tetrahedron, perm0 : Perm4, mask : List[bool]):
|
241
|
-
"""
|
242
|
-
Given a subtetrahedron in the barycentric subdivision parametrized
|
243
|
-
by a tetrahedron and permutation, find all subtetrahedra adjacent to the
|
244
|
-
same edge in the original triangulation. Delete them from the bit mask.
|
245
|
-
"""
|
246
|
-
|
247
|
-
tet = tet0
|
248
|
-
perm = perm0
|
249
|
-
|
250
|
-
while True:
|
251
|
-
# All subtetrahedra touching the same edge in the current
|
252
|
-
# tetrahedron.
|
253
|
-
for p in [ perm,
|
254
|
-
perm * _transpositions[0],
|
255
|
-
perm * _transpositions[2],
|
256
|
-
perm * _transpositions[0] * _transpositions[2] ]:
|
257
|
-
subtet_index = 24 * tet.Index + _perm_to_index(p)
|
258
|
-
mask[subtet_index] = False
|
259
|
-
|
260
|
-
# Find the next "edge embedding"
|
261
|
-
face = perm.image(simplex.F3)
|
262
|
-
tet, perm = (
|
263
|
-
tet.Neighbor[face],
|
264
|
-
tet.Gluing[face] * perm * Perm4((0,1,3,2)))
|
265
|
-
# Stop if back at the first "edge embedding"
|
266
|
-
if tet is tet0 and perm.tuple() == perm0.tuple():
|
267
|
-
return
|
268
|
-
|
269
|
-
|
270
|
-
def _tet_mask_and_peripheral_base_subtet_indices(tetrahedra):
|
271
|
-
"""
|
272
|
-
Given the same input as described in crush_geodesic_data,
|
273
|
-
computes the bit mask of which subtetrahedra will not be
|
274
|
-
crushed. Also return a set of indices, that is the index
|
275
|
-
of one subtetrahedron for each simple closed curve that
|
276
|
-
can be used later to compute a new meridian and longitude.
|
277
|
-
"""
|
278
|
-
|
279
|
-
# The bit mask to compute
|
280
|
-
mask = (24 * len(tetrahedra)) * [ True ]
|
281
|
-
|
282
|
-
# Maps index of simple closed curve to index of subtetrahedron
|
283
|
-
index_to_peripheral_base_subtet_index = { }
|
284
|
-
|
285
|
-
# For each GeodesicPiece
|
286
|
-
for tet in tetrahedra:
|
287
|
-
for piece in tet.geodesic_pieces:
|
288
|
-
# Find all subtetrahedra adjacent to it to delete
|
289
|
-
# them from mask
|
290
|
-
perm = _find_perm_for_piece(piece)
|
291
|
-
|
292
|
-
_traverse_edge(tet, perm, mask)
|
293
|
-
|
294
|
-
# And if this is the first time we encounter this
|
295
|
-
# simple closed curve, compute a base tet.
|
296
|
-
if piece.index not in index_to_peripheral_base_subtet_index:
|
297
|
-
# Get the neighboring subtetrahedron that won't be crushed
|
298
|
-
other_perm = perm * _transpositions[1]
|
299
|
-
subtet_index = 24 * tet.Index + _perm_to_index(other_perm)
|
300
|
-
index_to_peripheral_base_subtet_index[piece.index] = subtet_index
|
301
|
-
|
302
|
-
return mask, index_to_peripheral_base_subtet_index.values()
|
303
|
-
|
304
|
-
|
305
231
|
def _assign_orientations(subtetrahedra):
|
306
232
|
for j in range(len(subtetrahedra) // 24):
|
307
233
|
for i, perm in enumerate(Perm4.S4()):
|
snappy/drilling/cusps.py
CHANGED
@@ -1,8 +1,10 @@
|
|
1
|
-
from .
|
2
|
-
from
|
1
|
+
from ..geometric_structure.geodesic.geodesic_start_point_info import GeodesicStartPointInfo
|
2
|
+
from ..geometric_structure import Filling, FillingMatrix
|
3
3
|
|
4
4
|
from ..snap.t3mlite import Mcomplex, simplex
|
5
5
|
|
6
|
+
from . import exceptions
|
7
|
+
|
6
8
|
from typing import Tuple, Optional, Sequence
|
7
9
|
|
8
10
|
# @dataclass
|
@@ -49,11 +51,11 @@ class CuspPostDrillInfo:
|
|
49
51
|
|
50
52
|
|
51
53
|
def index_geodesics_and_add_post_drill_infos(
|
52
|
-
geodesics : Sequence[
|
54
|
+
geodesics : Sequence[GeodesicStartPointInfo],
|
53
55
|
mcomplex : Mcomplex) -> None:
|
54
56
|
|
55
|
-
all_reindexed_verts =
|
56
|
-
g.core_curve_cusp for g in geodesics if g.core_curve_cusp
|
57
|
+
all_reindexed_verts = {
|
58
|
+
g.core_curve_cusp for g in geodesics if g.core_curve_cusp}
|
57
59
|
|
58
60
|
old_vertices = [v for v in mcomplex.Vertices
|
59
61
|
if v not in all_reindexed_verts]
|
@@ -66,11 +68,15 @@ def index_geodesics_and_add_post_drill_infos(
|
|
66
68
|
|
67
69
|
for i, g in enumerate(geodesics):
|
68
70
|
if g.core_curve_cusp:
|
71
|
+
if g.core_curve_multiplicity not in [-1, +1]:
|
72
|
+
raise exceptions.GeodesicMultipleOfCoreCurve(
|
73
|
+
g.word, g.core_curve_multiplicity)
|
74
|
+
|
69
75
|
g.core_curve_cusp.post_drill_info = CuspPostDrillInfo(
|
70
76
|
index=n + i,
|
71
77
|
peripheral_matrix=_multiply_filling_matrix(
|
72
78
|
g.core_curve_cusp.filling_matrix,
|
73
|
-
g.
|
79
|
+
g.core_curve_multiplicity))
|
74
80
|
else:
|
75
81
|
g.index = n + i
|
76
82
|
|
snappy/drilling/debug.py
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
from ..snap.t3mlite import simplex
|
2
|
+
from ..matrix import make_identity_matrix
|
2
3
|
from ..hyperboloid import *
|
3
4
|
|
4
5
|
|
@@ -82,7 +83,7 @@ def check_points_consistency(m):
|
|
82
83
|
|
83
84
|
def check_edge_consistency(m):
|
84
85
|
RF = m.Tetrahedra[0].O13_matrices[simplex.F0].base_ring()
|
85
|
-
id_matrix =
|
86
|
+
id_matrix = make_identity_matrix(ring=RF, n=4)
|
86
87
|
|
87
88
|
for e in m.Edges:
|
88
89
|
t = id_matrix
|
snappy/drilling/exceptions.py
CHANGED
@@ -1,17 +1,6 @@
|
|
1
1
|
class DrillGeodesicError(RuntimeError):
|
2
2
|
pass
|
3
3
|
|
4
|
-
|
5
|
-
class WordAppearsToBeParabolic(DrillGeodesicError):
|
6
|
-
def __init__(self, word, trace):
|
7
|
-
self.word = word
|
8
|
-
self.trace = trace
|
9
|
-
super().__init__(
|
10
|
-
"Attempting to drill a geodesic corresponding to a matrix "
|
11
|
-
"that could be parabolic. "
|
12
|
-
"Word: %s, trace: %r." % (word, trace))
|
13
|
-
|
14
|
-
|
15
4
|
class GeodesicSystemNotSimpleError(DrillGeodesicError):
|
16
5
|
def __init__(self, maximal_tube_radius):
|
17
6
|
self.maximal_tube_radius = maximal_tube_radius
|
@@ -21,26 +10,13 @@ class GeodesicSystemNotSimpleError(DrillGeodesicError):
|
|
21
10
|
"The maximal tube radius about the given system of geodesics "
|
22
11
|
"was estimated to be: %r." % maximal_tube_radius)
|
23
12
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
"The given geodesic is very close to a core curve and might "
|
29
|
-
"intersect it.")
|
30
|
-
|
31
|
-
|
32
|
-
class UnfinishedGraphTraceGeodesicError(DrillGeodesicError):
|
33
|
-
def __init__(self, steps):
|
34
|
-
self.steps = steps
|
13
|
+
class GeodesicMultipleOfCoreCurve(DrillGeodesicError):
|
14
|
+
def __init__(self, word, multiplicity):
|
15
|
+
self.word = word
|
16
|
+
self.multiplicity = multiplicity
|
35
17
|
super().__init__(
|
36
|
-
"The
|
37
|
-
|
38
|
-
"%d steps. "
|
39
|
-
"This is probably due to a pathology, e.g., a bad conjugate "
|
40
|
-
"was picked and the line is very far away from the fundamental "
|
41
|
-
"domain or the given geodesic is very close to a core curve of "
|
42
|
-
"a filled cusp." % steps)
|
43
|
-
|
18
|
+
"The geodesic %s is a %d-fold multiple of a core curve." % (
|
19
|
+
word, multiplicity))
|
44
20
|
|
45
21
|
class UnfinishedTraceGeodesicError(DrillGeodesicError):
|
46
22
|
def __init__(self, steps):
|
@@ -51,15 +27,6 @@ class UnfinishedTraceGeodesicError(DrillGeodesicError):
|
|
51
27
|
"e.g., the geodesic is very close to a core curve of "
|
52
28
|
"filled cusp." % steps)
|
53
29
|
|
54
|
-
class GeodesicStartingPiecesCrossSameFaceError(DrillGeodesicError):
|
55
|
-
def __init__(self):
|
56
|
-
super().__init__(
|
57
|
-
"The first and last piece of the geodesic do not cross distinct "
|
58
|
-
"faces. This can happen if the amount the start point was "
|
59
|
-
"perturbed too much. Unfortunately, reducing this amount has "
|
60
|
-
"not been implemented yet. If you run into this case, please "
|
61
|
-
"report it giving the manifold and geodesic it occurred with.")
|
62
|
-
|
63
30
|
class GeodesicHittingOneSkeletonError(DrillGeodesicError):
|
64
31
|
"""
|
65
32
|
Base class for exceptions caused by the geodesic hitting the
|
@@ -69,7 +36,7 @@ class GeodesicHittingOneSkeletonError(DrillGeodesicError):
|
|
69
36
|
|
70
37
|
class GeodesicStartPointOnTwoSkeletonError(GeodesicHittingOneSkeletonError):
|
71
38
|
"""
|
72
|
-
Raised when the start point given to
|
39
|
+
Raised when the start point given to GeodesicStartPointInfo appears not to be in the
|
73
40
|
interior of a tetrahedron.
|
74
41
|
"""
|
75
42
|
|