snappy 3.1.1__cp311-cp311-macosx_11_0_arm64.whl → 3.2__cp311-cp311-macosx_11_0_arm64.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.cpython-311-darwin.so +0 -0
- snappy/SnapPy.cpython-311-darwin.so +0 -0
- snappy/SnapPyHP.cpython-311-darwin.so +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/development.rst.txt +66 -46
- snappy/doc/_sources/index.rst.txt +72 -5
- snappy/doc/_sources/installing.rst.txt +145 -162
- snappy/doc/_sources/news.rst.txt +73 -1
- snappy/doc/_sources/ptolemy_examples1.rst.txt +8 -7
- snappy/doc/_sources/ptolemy_examples3.rst.txt +2 -2
- snappy/doc/_sources/triangulation.rst.txt +2 -2
- snappy/doc/_sources/verify.rst.txt +89 -29
- snappy/doc/_sources/verify_internals.rst.txt +5 -16
- snappy/doc/_static/basic.css +23 -1
- 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 +2 -3
- 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 +2 -2
- snappy/doc/_static/pygments.css +1 -0
- snappy/doc/_static/searchtools.js +125 -71
- snappy/doc/_static/sphinx_highlight.js +13 -3
- snappy/doc/additional_classes.html +291 -122
- snappy/doc/bugs.html +17 -20
- snappy/doc/censuses.html +34 -53
- snappy/doc/credits.html +18 -21
- snappy/doc/development.html +88 -68
- snappy/doc/genindex.html +66 -145
- snappy/doc/index.html +86 -31
- snappy/doc/installing.html +164 -182
- snappy/doc/manifold.html +1168 -556
- snappy/doc/manifoldhp.html +18 -21
- snappy/doc/news.html +91 -33
- snappy/doc/objects.inv +0 -0
- snappy/doc/other.html +20 -22
- snappy/doc/platonic_census.html +31 -34
- snappy/doc/plink.html +19 -22
- snappy/doc/ptolemy.html +20 -22
- snappy/doc/ptolemy_classes.html +102 -105
- snappy/doc/ptolemy_examples1.html +34 -36
- snappy/doc/ptolemy_examples2.html +28 -31
- snappy/doc/ptolemy_examples3.html +26 -29
- snappy/doc/ptolemy_examples4.html +20 -23
- snappy/doc/ptolemy_prelim.html +25 -28
- snappy/doc/py-modindex.html +16 -19
- snappy/doc/screenshots.html +22 -24
- snappy/doc/search.html +15 -18
- snappy/doc/searchindex.js +1 -1
- snappy/doc/snap.html +18 -21
- snappy/doc/snappy.html +18 -20
- snappy/doc/spherogram.html +84 -87
- snappy/doc/todo.html +17 -20
- snappy/doc/triangulation.html +324 -215
- snappy/doc/tutorial.html +17 -20
- snappy/doc/verify.html +100 -46
- snappy/doc/verify_internals.html +106 -563
- 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.cpython-311-darwin.so +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 +26 -11
- 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-311.pyc +0 -0
- snappy/__pycache__/browser.cpython-311.pyc +0 -0
- snappy/__pycache__/cache.cpython-311.pyc +0 -0
- snappy/__pycache__/database.cpython-311.pyc +0 -0
- snappy/__pycache__/db_utilities.cpython-311.pyc +0 -0
- snappy/__pycache__/decorated_isosig.cpython-311.pyc +0 -0
- snappy/__pycache__/exceptions.cpython-311.pyc +0 -0
- snappy/__pycache__/export_stl.cpython-311.pyc +0 -0
- snappy/__pycache__/filedialog.cpython-311.pyc +0 -0
- snappy/__pycache__/gui.cpython-311.pyc +0 -0
- snappy/__pycache__/horoviewer.cpython-311.pyc +0 -0
- snappy/__pycache__/infowindow.cpython-311.pyc +0 -0
- snappy/__pycache__/math_basics.cpython-311.pyc +0 -0
- snappy/__pycache__/matrix.cpython-311.pyc +0 -0
- snappy/__pycache__/number.cpython-311.pyc +0 -0
- snappy/__pycache__/numeric_output_checker.cpython-311.pyc +0 -0
- snappy/__pycache__/pari.cpython-311.pyc +0 -0
- snappy/__pycache__/polyviewer.cpython-311.pyc +0 -0
- snappy/__pycache__/sage_helper.cpython-311.pyc +0 -0
- snappy/__pycache__/version.cpython-311.pyc +0 -0
- snappy/doc/_sources/verify_canon.rst.txt +0 -90
- snappy/doc/_static/js/html5shiv-printshiv.min.js +0 -4
- snappy/doc/_static/js/html5shiv.min.js +0 -4
- snappy/doc/verify_canon.html +0 -304
- snappy/drilling/__pycache__/__init__.cpython-311.pyc +0 -0
- snappy/drilling/__pycache__/constants.cpython-311.pyc +0 -0
- snappy/drilling/__pycache__/crush.cpython-311.pyc +0 -0
- snappy/drilling/__pycache__/cusps.cpython-311.pyc +0 -0
- snappy/drilling/__pycache__/debug.cpython-311.pyc +0 -0
- snappy/drilling/__pycache__/epsilons.cpython-311.pyc +0 -0
- snappy/drilling/__pycache__/exceptions.cpython-311.pyc +0 -0
- snappy/drilling/__pycache__/fixed_points.cpython-311.pyc +0 -0
- snappy/drilling/__pycache__/geodesic_info.cpython-311.pyc +0 -0
- snappy/drilling/__pycache__/geodesic_tube.cpython-311.pyc +0 -0
- snappy/drilling/__pycache__/geometric_structure.cpython-311.pyc +0 -0
- snappy/drilling/__pycache__/line.cpython-311.pyc +0 -0
- snappy/drilling/__pycache__/moves.cpython-311.pyc +0 -0
- snappy/drilling/__pycache__/peripheral_curves.cpython-311.pyc +0 -0
- snappy/drilling/__pycache__/perturb.cpython-311.pyc +0 -0
- snappy/drilling/__pycache__/quotient_space.cpython-311.pyc +0 -0
- snappy/drilling/__pycache__/spatial_dict.cpython-311.pyc +0 -0
- snappy/drilling/__pycache__/subdivide.cpython-311.pyc +0 -0
- snappy/drilling/__pycache__/tracing.cpython-311.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-311.pyc +0 -0
- snappy/exterior_to_link/__pycache__/barycentric_geometry.cpython-311.pyc +0 -0
- snappy/exterior_to_link/__pycache__/exceptions.cpython-311.pyc +0 -0
- snappy/exterior_to_link/__pycache__/hyp_utils.cpython-311.pyc +0 -0
- snappy/exterior_to_link/__pycache__/link_projection.cpython-311.pyc +0 -0
- snappy/exterior_to_link/__pycache__/main.cpython-311.pyc +0 -0
- snappy/exterior_to_link/__pycache__/mcomplex_with_expansion.cpython-311.pyc +0 -0
- snappy/exterior_to_link/__pycache__/mcomplex_with_link.cpython-311.pyc +0 -0
- snappy/exterior_to_link/__pycache__/mcomplex_with_memory.cpython-311.pyc +0 -0
- snappy/exterior_to_link/__pycache__/pl_utils.cpython-311.pyc +0 -0
- snappy/exterior_to_link/__pycache__/put_in_S3.cpython-311.pyc +0 -0
- snappy/exterior_to_link/__pycache__/rational_linear_algebra.cpython-311.pyc +0 -0
- snappy/exterior_to_link/__pycache__/simplify_to_base_tri.cpython-311.pyc +0 -0
- snappy/exterior_to_link/__pycache__/stored_moves.cpython-311.pyc +0 -0
- snappy/hyperboloid/__pycache__/__init__.cpython-311.pyc +0 -0
- snappy/manifolds/__pycache__/__init__.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/__init__.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/component.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/coordinates.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/fieldExtensions.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/findLoops.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/homology.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/manifoldMethods.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/matrix.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/numericalSolutionsToGroebnerBasis.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/polynomial.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/processComponents.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/processFileBase.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/processFileDispatch.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/processMagmaFile.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/processRurFile.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/ptolemyGeneralizedObstructionClass.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/ptolemyObstructionClass.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/ptolemyVariety.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/ptolemyVarietyPrimeIdealGroebnerBasis.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/rur.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/solutionsToPrimeIdealGroebnerBasis.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/utilities.cpython-311.pyc +0 -0
- snappy/raytracing/__pycache__/__init__.cpython-311.pyc +0 -0
- snappy/raytracing/__pycache__/finite_raytracing_data.cpython-311.pyc +0 -0
- snappy/raytracing/__pycache__/gui_utilities.cpython-311.pyc +0 -0
- snappy/raytracing/__pycache__/hyperboloid_navigation.cpython-311.pyc +0 -0
- snappy/raytracing/__pycache__/hyperboloid_utilities.cpython-311.pyc +0 -0
- snappy/raytracing/__pycache__/ideal_raytracing_data.cpython-311.pyc +0 -0
- snappy/raytracing/__pycache__/inside_viewer.cpython-311.pyc +0 -0
- snappy/raytracing/__pycache__/raytracing_data.cpython-311.pyc +0 -0
- snappy/raytracing/__pycache__/raytracing_view.cpython-311.pyc +0 -0
- snappy/raytracing/__pycache__/upper_halfspace_utilities.cpython-311.pyc +0 -0
- snappy/raytracing/__pycache__/view_scale_controller.cpython-311.pyc +0 -0
- snappy/raytracing/zoom_slider/__pycache__/__init__.cpython-311.pyc +0 -0
- snappy/snap/__pycache__/__init__.cpython-311.pyc +0 -0
- snappy/snap/__pycache__/character_varieties.cpython-311.pyc +0 -0
- snappy/snap/__pycache__/fundamental_polyhedron.cpython-311.pyc +0 -0
- snappy/snap/__pycache__/interval_reps.cpython-311.pyc +0 -0
- snappy/snap/__pycache__/kernel_structures.cpython-311.pyc +0 -0
- snappy/snap/__pycache__/mcomplex_base.cpython-311.pyc +0 -0
- snappy/snap/__pycache__/nsagetools.cpython-311.pyc +0 -0
- snappy/snap/__pycache__/polished_reps.cpython-311.pyc +0 -0
- snappy/snap/__pycache__/shapes.cpython-311.pyc +0 -0
- snappy/snap/__pycache__/slice_obs_HKL.cpython-311.pyc +0 -0
- snappy/snap/__pycache__/utilities.cpython-311.pyc +0 -0
- snappy/snap/peripheral/__pycache__/__init__.cpython-311.pyc +0 -0
- snappy/snap/peripheral/__pycache__/dual_cellulation.cpython-311.pyc +0 -0
- snappy/snap/peripheral/__pycache__/link.cpython-311.pyc +0 -0
- snappy/snap/peripheral/__pycache__/peripheral.cpython-311.pyc +0 -0
- snappy/snap/peripheral/__pycache__/surface.cpython-311.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/__init__.cpython-311.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/arrow.cpython-311.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/corner.cpython-311.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/edge.cpython-311.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/face.cpython-311.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/files.cpython-311.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/homology.cpython-311.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/linalg.cpython-311.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/mcomplex.cpython-311.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/perm4.cpython-311.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/simplex.cpython-311.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/spun.cpython-311.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/surface.cpython-311.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/tetrahedron.cpython-311.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/vertex.cpython-311.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-311.pyc +0 -0
- snappy/twister/__pycache__/main.cpython-311.pyc +0 -0
- snappy/upper_halfspace/__pycache__/__init__.cpython-311.pyc +0 -0
- snappy/upper_halfspace/__pycache__/ideal_point.cpython-311.pyc +0 -0
- snappy/verify/__pycache__/__init__.cpython-311.pyc +0 -0
- snappy/verify/__pycache__/cuspCrossSection.cpython-311.pyc +0 -0
- snappy/verify/__pycache__/cuspTranslations.cpython-311.pyc +0 -0
- snappy/verify/__pycache__/cusp_areas.cpython-311.pyc +0 -0
- snappy/verify/__pycache__/cusp_shapes.cpython-311.pyc +0 -0
- snappy/verify/__pycache__/exceptions.cpython-311.pyc +0 -0
- snappy/verify/__pycache__/interval_newton_shapes_engine.cpython-311.pyc +0 -0
- snappy/verify/__pycache__/interval_tree.cpython-311.pyc +0 -0
- snappy/verify/__pycache__/krawczyk_shapes_engine.cpython-311.pyc +0 -0
- snappy/verify/__pycache__/realAlgebra.cpython-311.pyc +0 -0
- snappy/verify/__pycache__/shapes.cpython-311.pyc +0 -0
- snappy/verify/__pycache__/short_slopes.cpython-311.pyc +0 -0
- snappy/verify/__pycache__/squareExtensions.cpython-311.pyc +0 -0
- snappy/verify/__pycache__/verifyCanonical.cpython-311.pyc +0 -0
- snappy/verify/__pycache__/verifyHyperbolicity.cpython-311.pyc +0 -0
- snappy/verify/__pycache__/volume.cpython-311.pyc +0 -0
- snappy/verify/complex_volume/__pycache__/__init__.cpython-311.pyc +0 -0
- snappy/verify/complex_volume/__pycache__/adjust_torsion.cpython-311.pyc +0 -0
- snappy/verify/complex_volume/__pycache__/closed.cpython-311.pyc +0 -0
- snappy/verify/complex_volume/__pycache__/compute_ptolemys.cpython-311.pyc +0 -0
- snappy/verify/complex_volume/__pycache__/cusped.cpython-311.pyc +0 -0
- snappy/verify/complex_volume/__pycache__/extended_bloch.cpython-311.pyc +0 -0
- snappy/verify/cuspCrossSection.py +0 -1422
- snappy/verify/maximal_cusp_area_matrix/__pycache__/__init__.cpython-311.pyc +0 -0
- snappy/verify/maximal_cusp_area_matrix/__pycache__/cusp_tiling_engine.cpython-311.pyc +0 -0
- snappy/verify/maximal_cusp_area_matrix/__pycache__/cusp_translate_engine.cpython-311.pyc +0 -0
- snappy/verify/upper_halfspace/__pycache__/__init__.cpython-311.pyc +0 -0
- snappy/verify/upper_halfspace/__pycache__/extended_matrix.cpython-311.pyc +0 -0
- snappy/verify/upper_halfspace/__pycache__/finite_point.cpython-311.pyc +0 -0
- snappy/verify/upper_halfspace/__pycache__/ideal_point.cpython-311.pyc +0 -0
- snappy-3.1.1.dist-info/RECORD +0 -585
- {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/entry_points.txt +0 -0
snappy/doc/manifold.html
CHANGED
@@ -1,23 +1,24 @@
|
|
1
|
+
|
2
|
+
|
1
3
|
<!DOCTYPE html>
|
2
|
-
<html class="writer-html5" lang="en" >
|
4
|
+
<html class="writer-html5" lang="en" data-content_root="./">
|
3
5
|
<head>
|
4
|
-
<meta charset="utf-8" /><meta name="
|
6
|
+
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
5
7
|
|
6
8
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
7
|
-
<title>Manifold: the main class — SnapPy 3.
|
8
|
-
<link rel="stylesheet"
|
9
|
-
<link rel="stylesheet" href="_static/css/theme.css
|
10
|
-
<link rel="stylesheet"
|
11
|
-
|
12
|
-
<!--[if lt IE 9]>
|
13
|
-
<script src="_static/js/html5shiv.min.js"></script>
|
14
|
-
<![endif]-->
|
9
|
+
<title>Manifold: the main class — SnapPy 3.2 documentation</title>
|
10
|
+
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=fa44fd50" />
|
11
|
+
<link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=e59714d7" />
|
12
|
+
<link rel="stylesheet" type="text/css" href="_static/snappy_sphinx_rtd_theme.css?v=1b8ec2a8" />
|
13
|
+
|
15
14
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
15
|
+
<link rel="shortcut icon" href="_static/SnapPy.ico"/>
|
16
|
+
<script src="_static/jquery.js?v=5d32c60e"></script>
|
17
|
+
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
18
|
+
<script src="_static/documentation_options.js?v=828ea960"></script>
|
19
|
+
<script src="_static/doctools.js?v=9a2dae69"></script>
|
20
|
+
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
21
|
+
<script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
|
21
22
|
<script src="_static/js/theme.js"></script>
|
22
23
|
<link rel="index" title="Index" href="genindex.html" />
|
23
24
|
<link rel="search" title="Search" href="search.html" />
|
@@ -37,9 +38,6 @@
|
|
37
38
|
SnapPy
|
38
39
|
<img src="_static/SnapPy-horizontal-128.png" class="logo" alt="Logo"/>
|
39
40
|
</a>
|
40
|
-
<div class="version">
|
41
|
-
3.1.1
|
42
|
-
</div>
|
43
41
|
<div role="search">
|
44
42
|
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
|
45
43
|
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
|
@@ -92,7 +90,6 @@
|
|
92
90
|
<li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.hyperbolic_adjoint_torsion"><code class="docutils literal notranslate"><span class="pre">Manifold.hyperbolic_adjoint_torsion()</span></code></a></li>
|
93
91
|
<li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.hyperbolic_torsion"><code class="docutils literal notranslate"><span class="pre">Manifold.hyperbolic_torsion()</span></code></a></li>
|
94
92
|
<li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.identify"><code class="docutils literal notranslate"><span class="pre">Manifold.identify()</span></code></a></li>
|
95
|
-
<li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.init_hyperbolic_structure"><code class="docutils literal notranslate"><span class="pre">Manifold.init_hyperbolic_structure()</span></code></a></li>
|
96
93
|
<li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.inside_view"><code class="docutils literal notranslate"><span class="pre">Manifold.inside_view()</span></code></a></li>
|
97
94
|
<li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.invariant_trace_field_gens"><code class="docutils literal notranslate"><span class="pre">Manifold.invariant_trace_field_gens()</span></code></a></li>
|
98
95
|
<li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.is_isometric_to"><code class="docutils literal notranslate"><span class="pre">Manifold.is_isometric_to()</span></code></a></li>
|
@@ -101,6 +98,8 @@
|
|
101
98
|
<li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.isometry_signature"><code class="docutils literal notranslate"><span class="pre">Manifold.isometry_signature()</span></code></a></li>
|
102
99
|
<li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.isomorphisms_to"><code class="docutils literal notranslate"><span class="pre">Manifold.isomorphisms_to()</span></code></a></li>
|
103
100
|
<li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.length_spectrum"><code class="docutils literal notranslate"><span class="pre">Manifold.length_spectrum()</span></code></a></li>
|
101
|
+
<li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.length_spectrum_alt"><code class="docutils literal notranslate"><span class="pre">Manifold.length_spectrum_alt()</span></code></a></li>
|
102
|
+
<li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.length_spectrum_alt_gen"><code class="docutils literal notranslate"><span class="pre">Manifold.length_spectrum_alt_gen()</span></code></a></li>
|
104
103
|
<li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.link"><code class="docutils literal notranslate"><span class="pre">Manifold.link()</span></code></a></li>
|
105
104
|
<li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.name"><code class="docutils literal notranslate"><span class="pre">Manifold.name()</span></code></a></li>
|
106
105
|
<li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.normal_boundary_slopes"><code class="docutils literal notranslate"><span class="pre">Manifold.normal_boundary_slopes()</span></code></a></li>
|
@@ -108,7 +107,6 @@
|
|
108
107
|
<li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.num_cusps"><code class="docutils literal notranslate"><span class="pre">Manifold.num_cusps()</span></code></a></li>
|
109
108
|
<li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.num_tetrahedra"><code class="docutils literal notranslate"><span class="pre">Manifold.num_tetrahedra()</span></code></a></li>
|
110
109
|
<li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.orientation_cover"><code class="docutils literal notranslate"><span class="pre">Manifold.orientation_cover()</span></code></a></li>
|
111
|
-
<li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.pickle"><code class="docutils literal notranslate"><span class="pre">Manifold.pickle()</span></code></a></li>
|
112
110
|
<li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.plink"><code class="docutils literal notranslate"><span class="pre">Manifold.plink()</span></code></a></li>
|
113
111
|
<li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.polished_holonomy"><code class="docutils literal notranslate"><span class="pre">Manifold.polished_holonomy()</span></code></a></li>
|
114
112
|
<li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.ptolemy_generalized_obstruction_classes"><code class="docutils literal notranslate"><span class="pre">Manifold.ptolemy_generalized_obstruction_classes()</span></code></a></li>
|
@@ -129,6 +127,7 @@
|
|
129
127
|
<li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.splitting_surfaces"><code class="docutils literal notranslate"><span class="pre">Manifold.splitting_surfaces()</span></code></a></li>
|
130
128
|
<li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.symmetric_triangulation"><code class="docutils literal notranslate"><span class="pre">Manifold.symmetric_triangulation()</span></code></a></li>
|
131
129
|
<li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.symmetry_group"><code class="docutils literal notranslate"><span class="pre">Manifold.symmetry_group()</span></code></a></li>
|
130
|
+
<li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.symplectic_basis"><code class="docutils literal notranslate"><span class="pre">Manifold.symplectic_basis()</span></code></a></li>
|
132
131
|
<li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.tetrahedra_field_gens"><code class="docutils literal notranslate"><span class="pre">Manifold.tetrahedra_field_gens()</span></code></a></li>
|
133
132
|
<li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.tetrahedra_shapes"><code class="docutils literal notranslate"><span class="pre">Manifold.tetrahedra_shapes()</span></code></a></li>
|
134
133
|
<li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.trace_field_gens"><code class="docutils literal notranslate"><span class="pre">Manifold.trace_field_gens()</span></code></a></li>
|
@@ -185,15 +184,14 @@
|
|
185
184
|
<div itemprop="articleBody">
|
186
185
|
|
187
186
|
<section id="manifold-the-main-class">
|
188
|
-
<h1>Manifold: the main class<a class="headerlink" href="#manifold-the-main-class" title="
|
187
|
+
<h1>Manifold: the main class<a class="headerlink" href="#manifold-the-main-class" title="Link to this heading"></a></h1>
|
189
188
|
<dl class="py class">
|
190
189
|
<dt class="sig sig-object py" id="snappy.Manifold">
|
191
|
-
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.</span></span><span class="sig-name descname"><span class="pre">Manifold</span></span><
|
192
|
-
<dd><
|
193
|
-
<div><p>A Manifold is a Triangulation together with a geometric structure.
|
190
|
+
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.</span></span><span class="sig-name descname"><span class="pre">Manifold</span></span><a class="headerlink" href="#snappy.Manifold" title="Link to this definition"></a></dt>
|
191
|
+
<dd><p>A Manifold is a <a class="reference internal" href="triangulation.html#snappy.Triangulation" title="snappy.Triangulation"><code class="xref py py-class docutils literal notranslate"><span class="pre">Triangulation</span></code></a> together with a geometric structure.
|
194
192
|
That is, a Manifold is an ideal triangulation of the interior of a
|
195
|
-
compact 3-manifold with torus boundary components, where
|
196
|
-
tetrahedron has been assigned the geometry of an ideal tetrahedron
|
193
|
+
compact 3-manifold with torus and Klein-bottle boundary components, where
|
194
|
+
each tetrahedron has been assigned the geometry of an ideal tetrahedron
|
197
195
|
in hyperbolic 3-space. A Dehn-filling can be specified for each
|
198
196
|
boundary component, allowing the description of closed 3-manifolds,
|
199
197
|
some orbifolds and cone 3-manifolds. Here’s a quick example:</p>
|
@@ -231,15 +229,15 @@ specify a link complement.</p></li>
|
|
231
229
|
information on Dehn fillings added.</p>
|
232
230
|
<ul>
|
233
231
|
<li><p>SnapPea cusped census manifolds: e.g. ‘m123’, ‘s123’, ‘v123’.</p></li>
|
234
|
-
<li><
|
235
|
-
<
|
232
|
+
<li><p>Link complements:</p>
|
233
|
+
<blockquote>
|
234
|
+
<div><ul class="simple">
|
236
235
|
<li><p>Rolfsen’s table: e.g. ‘4_1’, ‘04_1’, ‘5^2_6’, ‘6_4^7’, ‘L20935’, ‘l104001’.</p></li>
|
237
236
|
<li><p>Hoste-Thistlethwaite Knotscape table: e.g. ‘11a17’ or ‘12n345’</p></li>
|
238
237
|
<li><p>Callahan-Dean-Weeks-Champanerkar-Kofman-Patterson knots: e.g. ‘K6_21’.</p></li>
|
239
238
|
<li><p>Dowker-Thistlethwaite code: e.g. ‘DT:[(6,8,2,4)]’</p></li>
|
240
239
|
</ul>
|
241
|
-
</
|
242
|
-
</dl>
|
240
|
+
</div></blockquote>
|
243
241
|
</li>
|
244
242
|
<li><p>Once-punctured torus bundles: e.g. ‘b++LLR’, ‘b+-llR’, ‘bo-RRL’, ‘bn+LRLR’</p></li>
|
245
243
|
<li><p>Fibered manifold associated to a braid: ‘Braid[1,2,-3,4]’</p>
|
@@ -254,21 +252,15 @@ of the last cusp.</p>
|
|
254
252
|
</li>
|
255
253
|
<li><p>A SnapPea triangulation or link projection file: ‘filename’</p>
|
256
254
|
<p>The file will be loaded if found in the current directory or the
|
257
|
-
path given by the shell variable SNAPPEA_MANIFOLD_DIRECTORY
|
255
|
+
path given by the shell variable <code class="docutils literal notranslate"><span class="pre">SNAPPEA_MANIFOLD_DIRECTORY</span></code>.
|
258
256
|
See <a class="reference internal" href="#snappy.Manifold.save" title="snappy.Manifold.save"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Manifold.save()</span></code></a> for details.</p>
|
259
257
|
</li>
|
260
|
-
|
261
|
-
|
262
|
-
<ul class="simple">
|
263
|
-
<li><dl class="simple">
|
264
|
-
<dt>A string containing the contents of a SnapPea triangulation or link</dt><dd><p>projection file.</p>
|
265
|
-
</dd>
|
266
|
-
</dl>
|
267
|
-
</li>
|
258
|
+
<li><p>A string containing the contents of a SnapPea triangulation or link
|
259
|
+
projection file.</p></li>
|
268
260
|
</ul>
|
269
261
|
<dl class="py method">
|
270
262
|
<dt class="sig sig-object py" id="snappy.Manifold.DT_code">
|
271
|
-
<span class="sig-name descname"><span class="pre">DT_code</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">alpha</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">flips</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.DT_code" title="
|
263
|
+
<span class="sig-name descname"><span class="pre">DT_code</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">alpha</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">flips</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.DT_code" title="Link to this definition"></a></dt>
|
272
264
|
<dd><p>Return the Dowker-Thistlethwaite code of this link complement,
|
273
265
|
if it is a link complement. The DT code is intended to be an
|
274
266
|
immutable attribute, for use with knot and link exteriors
|
@@ -289,7 +281,7 @@ only, which is set only when the manifold was created.</p>
|
|
289
281
|
|
290
282
|
<dl class="py method">
|
291
283
|
<dt class="sig sig-object py" id="snappy.Manifold.alexander_polynomial">
|
292
|
-
<span class="sig-name descname"><span class="pre">alexander_polynomial</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.alexander_polynomial" title="
|
284
|
+
<span class="sig-name descname"><span class="pre">alexander_polynomial</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.alexander_polynomial" title="Link to this definition"></a></dt>
|
293
285
|
<dd><p>Computes the multivariable Alexander polynomial of the manifold:</p>
|
294
286
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">'K12n123'</span><span class="p">)</span>
|
295
287
|
<span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">.</span><span class="n">alexander_polynomial</span><span class="p">()</span>
|
@@ -300,13 +292,14 @@ only, which is set only when the manifold was created.</p>
|
|
300
292
|
<span class="n">a</span><span class="o">^</span><span class="mi">2</span><span class="o">*</span><span class="n">b</span> <span class="o">+</span> <span class="n">a</span><span class="o">*</span><span class="n">b</span><span class="o">^</span><span class="mi">2</span> <span class="o">+</span> <span class="n">a</span><span class="o">*</span><span class="n">b</span> <span class="o">+</span> <span class="n">a</span> <span class="o">+</span> <span class="n">b</span>
|
301
293
|
</pre></div>
|
302
294
|
</div>
|
303
|
-
<p>Any provided keyword arguments are passed to
|
295
|
+
<p>Any provided keyword arguments are passed to
|
296
|
+
<a class="reference internal" href="triangulation.html#snappy.Triangulation.fundamental_group" title="snappy.Triangulation.fundamental_group"><code class="xref py py-meth docutils literal notranslate"><span class="pre">fundamental_group</span></code></a> and
|
304
297
|
so affect the group presentation used in the computation.</p>
|
305
298
|
</dd></dl>
|
306
299
|
|
307
300
|
<dl class="py method">
|
308
301
|
<dt class="sig sig-object py" id="snappy.Manifold.browse">
|
309
|
-
<span class="sig-name descname"><span class="pre">browse</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.browse" title="
|
302
|
+
<span class="sig-name descname"><span class="pre">browse</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.browse" title="Link to this definition"></a></dt>
|
310
303
|
<dd><p>Opens browser window with a graphical interface, which allows to
|
311
304
|
explore the manifold and interact with it.
|
312
305
|
This includes: invariants, Dirichlet domain, cusp neighborhoods,
|
@@ -320,33 +313,158 @@ inside view, symmetry, Dehn filling, drilling, etc.</p>
|
|
320
313
|
|
321
314
|
<dl class="py method">
|
322
315
|
<dt class="sig sig-object py" id="snappy.Manifold.canonical_retriangulation">
|
323
|
-
<span class="sig-name descname"><span class="pre">canonical_retriangulation</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">verified</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">interval_bits_precs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[53,</span> <span class="pre">212]</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">exact_bits_prec_and_degrees</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[(212,</span> <span class="pre">10),</span> <span class="pre">(1000,</span> <span class="pre">20),</span> <span class="pre">(2000,</span> <span class="pre">20)]</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.canonical_retriangulation" title="
|
324
|
-
<dd><p>
|
325
|
-
|
316
|
+
<span class="sig-name descname"><span class="pre">canonical_retriangulation</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">verified</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">interval_bits_precs</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Sequence</span><span class="p"><span class="pre">[</span></span><span class="pre">int</span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">[53,</span> <span class="pre">212]</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">exact_bits_prec_and_degrees</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Sequence</span><span class="p"><span class="pre">[</span></span><span class="pre">Tuple</span><span class="p"><span class="pre">[</span></span><span class="pre">int</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">int</span><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">[(212,</span> <span class="pre">10),</span> <span class="pre">(1000,</span> <span class="pre">20),</span> <span class="pre">(2000,</span> <span class="pre">20)]</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><a class="reference internal" href="triangulation.html#snappy.Triangulation" title="snappy.Triangulation"><span class="pre">Triangulation</span></a><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><a class="reference internal" href="#snappy.Manifold" title="snappy.Manifold"><span class="pre">Manifold</span></a></span></span><a class="headerlink" href="#snappy.Manifold.canonical_retriangulation" title="Link to this definition"></a></dt>
|
317
|
+
<dd><p>Returns a triangulation canonically associated to the hyperbolic manifold.
|
318
|
+
That is, the triangulation is (up to combinatorial isomorphism relabeling
|
319
|
+
the tetrahedra and vertices) completely determined by the isometry type of
|
320
|
+
the hyperbolic manifold.</p>
|
321
|
+
<p>Manifolds with incomplete cusps are rejected (unlike in the case of
|
322
|
+
<a class="reference internal" href="#snappy.Manifold.isometry_signature" title="snappy.Manifold.isometry_signature"><code class="xref py py-meth docutils literal notranslate"><span class="pre">isometry_signature</span></code></a>).</p>
|
323
|
+
<p>We now describe the canonical retriangulation. If all cells of
|
324
|
+
the canonical cell decomposition (defined by <a class="reference external" href="https://projecteuclid.org/euclid.jdg/1214441650">Epstein and Penner ‘88</a>) are tetrahedral,
|
325
|
+
<a class="reference internal" href="#snappy.Manifold.canonical_retriangulation" title="snappy.Manifold.canonical_retriangulation"><code class="xref py py-meth docutils literal notranslate"><span class="pre">canonical_retriangulation</span></code></a>
|
326
|
+
simply returns that ideal triangulation as a
|
327
|
+
<a class="reference internal" href="#snappy.Manifold" title="snappy.Manifold"><code class="xref py py-class docutils literal notranslate"><span class="pre">Manifold</span></code></a>. Here is an example:</p>
|
328
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">"m015"</span><span class="p">)</span>
|
329
|
+
<span class="gp">>>> </span><span class="n">K</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">canonical_retriangulation</span><span class="p">()</span>
|
330
|
+
<span class="gp">>>> </span><span class="n">K</span><span class="o">.</span><span class="n">has_finite_vertices</span><span class="p">()</span>
|
331
|
+
<span class="go">False</span>
|
332
|
+
<span class="gp">>>> </span><span class="n">K</span><span class="o">.</span><span class="n">solution_type</span><span class="p">()</span>
|
333
|
+
<span class="go">'all tetrahedra positively oriented'</span>
|
334
|
+
</pre></div>
|
335
|
+
</div>
|
336
|
+
<p>If there are non-tetrahedral cells,
|
337
|
+
<a class="reference internal" href="#snappy.Manifold.canonical_retriangulation" title="snappy.Manifold.canonical_retriangulation"><code class="xref py py-meth docutils literal notranslate"><span class="pre">canonical_retriangulation</span></code></a>
|
338
|
+
subdivides the canonical cell decomposition. It introduces a finite vertex
|
339
|
+
for each canonical cell resulting in a
|
340
|
+
<a class="reference internal" href="triangulation.html#snappy.Triangulation" title="snappy.Triangulation"><code class="xref py py-class docutils literal notranslate"><span class="pre">Triangulation</span></code></a>. Here is an example where the
|
341
|
+
canonical cell is a cube:</p>
|
326
342
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">"m412"</span><span class="p">)</span>
|
327
343
|
<span class="gp">>>> </span><span class="n">K</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">canonical_retriangulation</span><span class="p">()</span>
|
328
|
-
<span class="gp">>>> </span><span class="
|
329
|
-
<span class="go">
|
344
|
+
<span class="gp">>>> </span><span class="n">K</span><span class="o">.</span><span class="n">has_finite_vertices</span><span class="p">()</span>
|
345
|
+
<span class="go">True</span>
|
346
|
+
</pre></div>
|
347
|
+
</div>
|
348
|
+
<p>The canonical retriangulation can be used to find the symmetries of a
|
349
|
+
single manifold. It also can compute the isometries between two
|
350
|
+
manifolds. We do this using
|
351
|
+
<a class="reference internal" href="triangulation.html#snappy.Triangulation.isomorphisms_to" title="snappy.Triangulation.isomorphisms_to"><code class="xref py py-meth docutils literal notranslate"><span class="pre">isomorphisms_to</span></code></a>:</p>
|
352
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">"5_2"</span><span class="p">)</span><span class="o">.</span><span class="n">canonical_retriangulation</span><span class="p">()</span>
|
353
|
+
<span class="gp">>>> </span><span class="n">N</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">"m015"</span><span class="p">)</span><span class="o">.</span><span class="n">canonical_retriangulation</span><span class="p">()</span>
|
354
|
+
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">isomorphisms_to</span><span class="p">(</span><span class="n">M</span><span class="p">)</span>
|
355
|
+
<span class="go">[0 -> 0</span>
|
356
|
+
<span class="go">[1 0]</span>
|
357
|
+
<span class="go">[0 1]</span>
|
358
|
+
<span class="go">...</span>
|
359
|
+
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">isomorphisms_to</span><span class="p">(</span><span class="n">N</span><span class="p">)</span>
|
360
|
+
<span class="go">[0 -> 0</span>
|
361
|
+
<span class="go">[-1 2]</span>
|
362
|
+
<span class="go">[ 0 -1]</span>
|
363
|
+
<span class="go">...</span>
|
330
364
|
</pre></div>
|
331
365
|
</div>
|
332
|
-
<p>
|
333
|
-
|
334
|
-
|
366
|
+
<p>The canonical retriangulation is also the basis for the
|
367
|
+
<a class="reference internal" href="#snappy.Manifold.isometry_signature" title="snappy.Manifold.isometry_signature"><code class="xref py py-meth docutils literal notranslate"><span class="pre">isometry_signature</span></code></a>.</p>
|
368
|
+
<p><strong>Subdivision</strong></p>
|
369
|
+
<p>If the canonical cell decomposition has a non-tetrahedral cell, the method
|
370
|
+
subdivides. You can think of the subdivision in either of the following
|
371
|
+
(equivalent) ways:</p>
|
372
|
+
<ul class="simple">
|
373
|
+
<li><p>A coarsening of the barycentric subdivision with only a quarter of the
|
374
|
+
number of tetrahedra. That is, take the barycentric subdivision and
|
375
|
+
merge the four tetrahedra adjacent to a barycentric edge connecting
|
376
|
+
an edge midpoint to a face midpoint.</p></li>
|
377
|
+
<li><p>Taking the double suspension of each face (which is an ideal n-gon)
|
378
|
+
about the centers of the two neighboring 3-cells. Then split each
|
379
|
+
such topological “lens” into n tetrahedra along its central axis.</p></li>
|
380
|
+
</ul>
|
381
|
+
<p><strong>Verified computations</strong></p>
|
382
|
+
<p>While the canonical retriangulation is combinatorial, some intermediate
|
383
|
+
computations are numerical. Thus, if <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">False</span></code>,
|
384
|
+
floating-point issues can arise.
|
385
|
+
(Arguably this gave rise to a mistake in the
|
386
|
+
non-orientable census. <code class="docutils literal notranslate"><span class="pre">x101</span></code> and <code class="docutils literal notranslate"><span class="pre">x103</span></code> were later identified as
|
387
|
+
the same by <a class="reference external" href="http://arxiv.org/abs/1311.7615">Burton ‘14</a>.)</p>
|
388
|
+
<p>The method can be made <a class="reference internal" href="verify.html#verify-primer"><span class="std std-ref">verified</span></a> by passing
|
389
|
+
<code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">True</span></code>:</p>
|
390
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">"v2986"</span><span class="p">)</span>
|
391
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">K</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">canonical_retriangulation</span><span class="p">(</span><span class="n">verified</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span>
|
392
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">K</span><span class="o">.</span><span class="n">has_finite_vertices</span><span class="p">()</span> <span class="c1"># Cell decomposition verified to be tetrahedral</span>
|
393
|
+
<span class="kc">False</span>
|
394
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">K</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span><span class="n">decorated</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="c1"># Verified isometry signature.</span>
|
395
|
+
<span class="s1">'jvLALQQdeefgihihiokcmmwwswg'</span>
|
396
|
+
<span class="n">sage</span><span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="n">K</span><span class="o">.</span><span class="n">isomorphisms_to</span><span class="p">(</span><span class="n">K</span><span class="p">))</span> <span class="c1"># Verified to have no (non-trivial) symmetries.</span>
|
397
|
+
<span class="mi">1</span>
|
398
|
+
</pre></div>
|
399
|
+
</div>
|
400
|
+
<p>Interval arithmetic can only be used to verify the canonical cell decomposition
|
401
|
+
if all cells are tetrahedral. For non-tetrahedral cells, the method
|
402
|
+
automatically switches to
|
403
|
+
exact methods to verify the canonical cell decomposition. That is, it uses
|
404
|
+
snap-like methods
|
405
|
+
(<a class="reference external" href="http://en.wikipedia.org/wiki/Lenstra%E2%80%93Lenstra%E2%80%93Lov%C3%A1sz_lattice_basis_reduction_algorithm">LLL-algorithm</a>)
|
406
|
+
to guess a representation of the
|
407
|
+
shapes in the shape field. It then uses exact arithmetic to verify the
|
408
|
+
shapes form a valid geometric structure and compute the necessary tilts
|
409
|
+
to verify the canonical cell decomposition. Note that this can take a
|
410
|
+
long time!</p>
|
411
|
+
<p>Here is an example where exact methods are used:</p>
|
335
412
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">"m412"</span><span class="p">)</span>
|
336
413
|
<span class="n">sage</span><span class="p">:</span> <span class="n">K</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">canonical_retriangulation</span><span class="p">(</span><span class="n">verified</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span>
|
337
|
-
<span class="n">sage</span><span class="p">:</span> <span class="
|
338
|
-
<span class="
|
414
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">K</span><span class="o">.</span><span class="n">has_finite_vertices</span><span class="p">()</span> <span class="c1"># Has non-tetrahedral cell</span>
|
415
|
+
<span class="kc">True</span>
|
339
416
|
</pre></div>
|
340
417
|
</div>
|
341
|
-
<p>
|
342
|
-
|
418
|
+
<p>If the canonical retriangulation cannot be verified, an exception will be
|
419
|
+
raised. (Note that this is new (and safer) in Version 3.2. Prior to that
|
420
|
+
version, <a class="reference internal" href="#snappy.Manifold.canonical_retriangulation" title="snappy.Manifold.canonical_retriangulation"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Manifold.canonical_retriangulation()</span></code></a> could return <code class="docutils literal notranslate"><span class="pre">None</span></code>
|
421
|
+
instead.)</p>
|
422
|
+
<p>Here is an example where we skip the (potentially lengthy) exact methods
|
423
|
+
needed to verify a non-tetrahedral cell. The method fails (early
|
424
|
+
and with an exception) since the cells are actually tetrahedral:</p>
|
425
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">"m412"</span><span class="p">)</span>
|
426
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">K</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">canonical_retriangulation</span><span class="p">(</span><span class="n">verified</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span> <span class="n">exact_bits_prec_and_degrees</span> <span class="o">=</span> <span class="p">[])</span> <span class="c1"># doctest: +ELLIPSIS +IGNORE_EXCEPTION_DETAIL</span>
|
427
|
+
<span class="n">Traceback</span> <span class="p">(</span><span class="n">most</span> <span class="n">recent</span> <span class="n">call</span> <span class="n">last</span><span class="p">):</span>
|
428
|
+
<span class="o">...</span>
|
429
|
+
<span class="n">snappy</span><span class="o">.</span><span class="n">verify</span><span class="o">.</span><span class="n">exceptions</span><span class="o">.</span><span class="n">TiltInequalityNumericalVerifyError</span><span class="p">:</span> <span class="n">Numerical</span> <span class="n">verification</span> <span class="n">that</span> <span class="n">tilt</span> <span class="ow">is</span> <span class="n">negative</span> <span class="n">has</span> <span class="n">failed</span><span class="p">:</span> <span class="o">...</span> <span class="o"><</span> <span class="mi">0</span>
|
430
|
+
</pre></div>
|
431
|
+
</div>
|
432
|
+
<dl class="field-list simple">
|
433
|
+
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
434
|
+
<dd class="field-odd"><ul class="simple">
|
435
|
+
<li><p><strong>verified</strong> – Use <a class="reference internal" href="verify.html#verify-primer"><span class="std std-ref">verified computation</span></a>.</p></li>
|
436
|
+
<li><p><strong>interval_bits_precs</strong> – Only relevant if <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">True</span></code>.
|
437
|
+
A list of (increasing) precisions used to try to
|
438
|
+
certify the canonical cell decomposition using intervals. Each
|
439
|
+
precision is tried until we succeed. If none succeeded, we move on
|
440
|
+
to exact methods.</p></li>
|
441
|
+
<li><p><strong>exact_bits_prec_and_degrees</strong> – Only relevant if <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">True</span></code>.
|
442
|
+
A list of pairs (precision, max degree) used when the
|
443
|
+
LLL-algorithm is trying to find the defining
|
444
|
+
polynomial of the shape field with
|
445
|
+
<code class="docutils literal notranslate"><span class="pre">ListOfApproximateAlgebraicNumbers.find_field</span></code>.
|
446
|
+
Each pair is tried until we succeed.</p></li>
|
447
|
+
<li><p><strong>verbose</strong> – Print information about the methods tried to compute and verify the
|
448
|
+
canonical retriangulation.</p></li>
|
449
|
+
</ul>
|
450
|
+
</dd>
|
451
|
+
<dt class="field-even">Returns<span class="colon">:</span></dt>
|
452
|
+
<dd class="field-even"><p>If the canonical cell decomposition exists entirely of
|
453
|
+
(hyperbolic ideal) tetrahedra, a <a class="reference internal" href="#snappy.Manifold" title="snappy.Manifold"><code class="xref py py-class docutils literal notranslate"><span class="pre">Manifold</span></code></a> with those
|
454
|
+
tetrahedra.
|
455
|
+
Otherwise, a <a class="reference internal" href="triangulation.html#snappy.Triangulation" title="snappy.Triangulation"><code class="xref py py-class docutils literal notranslate"><span class="pre">Triangulation</span></code></a> that is a subdivision of the
|
456
|
+
canonical cell decomposition.</p>
|
457
|
+
</dd>
|
458
|
+
</dl>
|
343
459
|
</dd></dl>
|
344
460
|
|
345
461
|
<dl class="py method">
|
346
462
|
<dt class="sig sig-object py" id="snappy.Manifold.canonize">
|
347
|
-
<span class="sig-name descname"><span class="pre">canonize</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.canonize" title="
|
463
|
+
<span class="sig-name descname"><span class="pre">canonize</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span><a class="headerlink" href="#snappy.Manifold.canonize" title="Link to this definition"></a></dt>
|
348
464
|
<dd><p>Change the triangulation to an arbitrary retriangulation of
|
349
|
-
the canonical cell decomposition
|
465
|
+
the canonical cell decomposition. See
|
466
|
+
<a class="reference internal" href="#snappy.Manifold.canonical_retriangulation" title="snappy.Manifold.canonical_retriangulation"><code class="xref py py-meth docutils literal notranslate"><span class="pre">canonical_retriangulation</span></code></a>
|
467
|
+
to get the actual canonical cell decomposition.</p>
|
350
468
|
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">'m007'</span><span class="p">)</span>
|
351
469
|
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">num_tetrahedra</span><span class="p">()</span>
|
352
470
|
<span class="go">3</span>
|
@@ -355,14 +473,15 @@ the canonical cell decomposition.</p>
|
|
355
473
|
<span class="go">4</span>
|
356
474
|
</pre></div>
|
357
475
|
</div>
|
358
|
-
<p>Note:
|
359
|
-
|
476
|
+
<p>Note: Due to rounding error, it is possible that this is actually
|
477
|
+
not a retriangulation of the canonical cell decomposition.</p>
|
360
478
|
</dd></dl>
|
361
479
|
|
362
480
|
<dl class="py method">
|
363
481
|
<dt class="sig sig-object py" id="snappy.Manifold.chern_simons">
|
364
|
-
<span class="sig-name descname"><span class="pre">chern_simons</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">accuracy</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.chern_simons" title="
|
365
|
-
<dd><p>Returns the Chern-Simons invariant of the manifold
|
482
|
+
<span class="sig-name descname"><span class="pre">chern_simons</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">accuracy</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.chern_simons" title="Link to this definition"></a></dt>
|
483
|
+
<dd><p>Returns the Chern-Simons invariant of the manifold (normalized by
|
484
|
+
dividing it by <span class="math notranslate nohighlight">\(2 \pi^2\)</span>), if it is known.</p>
|
366
485
|
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">'m015'</span><span class="p">)</span>
|
367
486
|
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">chern_simons</span><span class="p">()</span>
|
368
487
|
<span class="go">-0.15320413</span>
|
@@ -389,24 +508,35 @@ manifold so as to initialize SnapPea’s internals. For instance,</p>
|
|
389
508
|
<span class="go">0.07731787</span>
|
390
509
|
</pre></div>
|
391
510
|
</div>
|
392
|
-
<p>works, but will fail with
|
393
|
-
|
394
|
-
made.</p>
|
511
|
+
<p>works, but will fail with
|
512
|
+
<code class="docutils literal notranslate"><span class="pre">ValueError:</span> <span class="pre">The</span> <span class="pre">Chern-Simons</span> <span class="pre">invariant</span> <span class="pre">isn't</span> <span class="pre">currently</span> <span class="pre">known.</span></code>
|
513
|
+
if the first call to chern_simons is not made.</p>
|
395
514
|
</dd></dl>
|
396
515
|
|
397
516
|
<dl class="py method">
|
398
517
|
<dt class="sig sig-object py" id="snappy.Manifold.complex_volume">
|
399
|
-
<span class="sig-name descname"><span class="pre">complex_volume</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">verified_modulo_2_torsion</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bits_prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.complex_volume" title="
|
400
|
-
<dd><p>Returns the complex volume
|
401
|
-
|
518
|
+
<span class="sig-name descname"><span class="pre">complex_volume</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">verified_modulo_2_torsion</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bits_prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.complex_volume" title="Link to this definition"></a></dt>
|
519
|
+
<dd><p>Returns the complex volume modulo <span class="math notranslate nohighlight">\(i \pi^2\)</span> which is given by</p>
|
520
|
+
<div class="math notranslate nohighlight">
|
521
|
+
\[\text{vol} + i \text{CS}\]</div>
|
522
|
+
<p>where <span class="math notranslate nohighlight">\(\text{CS}\)</span> is the (unnormalized) Chern-Simons invariant.</p>
|
402
523
|
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">'5_2'</span><span class="p">)</span>
|
403
524
|
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">complex_volume</span><span class="p">()</span>
|
404
525
|
<span class="go">2.82812209 - 3.02412838*I</span>
|
405
|
-
|
406
|
-
|
526
|
+
</pre></div>
|
527
|
+
</div>
|
528
|
+
<p>Note that <a class="reference internal" href="#snappy.Manifold.chern_simons" title="snappy.Manifold.chern_simons"><code class="xref py py-meth docutils literal notranslate"><span class="pre">chern_simons</span></code></a>
|
529
|
+
normalizes the Chern-Simons invariant by dividing it by
|
530
|
+
<span class="math notranslate nohighlight">\(2 \pi^2 = 19.7392...\)</span></p>
|
531
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">chern_simons</span><span class="p">()</span>
|
532
|
+
<span class="go">-0.153204133297152</span>
|
533
|
+
</pre></div>
|
534
|
+
</div>
|
535
|
+
<p>More examples:</p>
|
536
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">dehn_fill</span><span class="p">((</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">))</span>
|
407
537
|
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">complex_volume</span><span class="p">()</span>
|
408
538
|
<span class="go">2.22671790 + 1.52619361*I</span>
|
409
|
-
<span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">"3_1"</span><span class="p">)</span>
|
539
|
+
<span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">"3_1"</span><span class="p">)</span> <span class="c1"># A non-hyperbolic example.</span>
|
410
540
|
<span class="gp">>>> </span><span class="n">cvol</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">complex_volume</span><span class="p">()</span>
|
411
541
|
<span class="gp">>>> </span><span class="n">cvol</span><span class="o">.</span><span class="n">real</span><span class="p">()</span>
|
412
542
|
<span class="go">0</span>
|
@@ -416,11 +546,11 @@ volume + i 2 pi^2 (chern simons)</p>
|
|
416
546
|
</div>
|
417
547
|
<p>If no cusp is filled or there is only one cusped (filled or
|
418
548
|
unfilled), the complex volume can be verified up to multiples
|
419
|
-
of i pi^2 /
|
420
|
-
when inside SageMath
|
421
|
-
with <
|
549
|
+
of <span class="math notranslate nohighlight">\(i \pi^2 /2\)</span> by passing <code class="docutils literal notranslate"><span class="pre">verified_modulo_2_torsion</span> <span class="pre">=</span> <span class="pre">True</span></code>
|
550
|
+
when inside SageMath. Higher precision can be requested
|
551
|
+
with <code class="docutils literal notranslate"><span class="pre">bits_prec</span></code>:</p>
|
422
552
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: M = Manifold("m015")
|
423
|
-
sage: M.complex_volume(verified_modulo_2_torsion=True, bits_prec =
|
553
|
+
sage: M.complex_volume(verified_modulo_2_torsion=True, bits_prec = 93) # doctest: +NUMERIC21
|
424
554
|
2.828122088330783162764? + 1.910673824035377649698?*I
|
425
555
|
sage: M = Manifold("m015(3,4)")
|
426
556
|
sage: M.complex_volume(verified_modulo_2_torsion=True) # doctest: +NUMERIC6
|
@@ -431,7 +561,7 @@ sage: M.complex_volume(verified_modulo_2_torsion=True) # doctest: +NUMERIC6
|
|
431
561
|
|
432
562
|
<dl class="py method">
|
433
563
|
<dt class="sig sig-object py" id="snappy.Manifold.copy">
|
434
|
-
<span class="sig-name descname"><span class="pre">copy</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.copy" title="
|
564
|
+
<span class="sig-name descname"><span class="pre">copy</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.copy" title="Link to this definition"></a></dt>
|
435
565
|
<dd><p>Returns a copy of the manifold</p>
|
436
566
|
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">'m015'</span><span class="p">)</span>
|
437
567
|
<span class="gp">>>> </span><span class="n">N</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
@@ -441,24 +571,22 @@ sage: M.complex_volume(verified_modulo_2_torsion=True) # doctest: +NUMERIC6
|
|
441
571
|
|
442
572
|
<dl class="py method">
|
443
573
|
<dt class="sig sig-object py" id="snappy.Manifold.cover">
|
444
|
-
<span class="sig-name descname"><span class="pre">cover</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">permutation_rep</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.cover" title="
|
445
|
-
<dd><p>
|
446
|
-
|
447
|
-
specified by a
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
such that set(P) == set(range(d)) where d is the degree of the
|
452
|
-
cover.</p>
|
574
|
+
<span class="sig-name descname"><span class="pre">cover</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">permutation_rep</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><a class="reference internal" href="#snappy.Manifold" title="snappy.Manifold"><span class="pre">snappy.Manifold</span></a></span></span><a class="headerlink" href="#snappy.Manifold.cover" title="Link to this definition"></a></dt>
|
575
|
+
<dd><p>Returns a <a class="reference internal" href="#snappy.Manifold" title="snappy.Manifold"><code class="xref py py-class docutils literal notranslate"><span class="pre">Manifold</span></code></a> representing the finite cover specified by a
|
576
|
+
transitive permutation representation. The representation is
|
577
|
+
specified by a list of permutations, one for each generator of the
|
578
|
+
simplified presentation of the fundamental group. Each permutation is
|
579
|
+
specified as a list <code class="docutils literal notranslate"><span class="pre">P</span></code> such such that <code class="docutils literal notranslate"><span class="pre">set(P)</span> <span class="pre">==</span> <span class="pre">set(range(d))</span></code>
|
580
|
+
where <code class="docutils literal notranslate"><span class="pre">d</span></code> is the degree of the cover.</p>
|
453
581
|
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">'m004'</span><span class="p">)</span>
|
454
582
|
<span class="gp">>>> </span><span class="n">N0</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">cover</span><span class="p">([[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">2</span><span class="p">],</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">3</span><span class="p">]])</span>
|
455
583
|
<span class="gp">>>> </span><span class="nb">abs</span><span class="p">(</span><span class="n">N0</span><span class="o">.</span><span class="n">volume</span><span class="p">()</span><span class="o">/</span><span class="n">M</span><span class="o">.</span><span class="n">volume</span><span class="p">()</span> <span class="o">-</span> <span class="mi">5</span><span class="p">)</span> <span class="o"><</span> <span class="mf">0.0000000001</span>
|
456
584
|
<span class="go">True</span>
|
457
585
|
</pre></div>
|
458
586
|
</div>
|
459
|
-
<p>If within
|
460
|
-
PermutationGroupElement
|
461
|
-
range(1
|
587
|
+
<p>If within SageMath, the permutations can also be of type
|
588
|
+
<code class="docutils literal notranslate"><span class="pre">PermutationGroupElement</span></code>, in which case they act on the set
|
589
|
+
<code class="docutils literal notranslate"><span class="pre">range(1,</span> <span class="pre">d</span> <span class="pre">+</span> <span class="pre">1)</span></code>. Or, you can specify a GAP or Magma subgroup
|
462
590
|
of the fundamental group. Some examples:</p>
|
463
591
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">'m004'</span><span class="p">)</span>
|
464
592
|
</pre></div>
|
@@ -510,7 +638,7 @@ of the fundamental group. Some examples:</p>
|
|
510
638
|
|
511
639
|
<dl class="py method">
|
512
640
|
<dt class="sig sig-object py" id="snappy.Manifold.cover_info">
|
513
|
-
<span class="sig-name descname"><span class="pre">cover_info</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.cover_info" title="
|
641
|
+
<span class="sig-name descname"><span class="pre">cover_info</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.cover_info" title="Link to this definition"></a></dt>
|
514
642
|
<dd><p>If this is a manifold or triangulation which was constructed as
|
515
643
|
a covering space, return a dictionary describing the cover. Otherwise
|
516
644
|
return 0. The dictionary keys are ‘base’, ‘type’ and ‘degree’.</p>
|
@@ -518,9 +646,8 @@ return 0. The dictionary keys are ‘base’, ‘type’ and ‘degree’.</p>
|
|
518
646
|
|
519
647
|
<dl class="py method">
|
520
648
|
<dt class="sig sig-object py" id="snappy.Manifold.covers">
|
521
|
-
<span class="sig-name descname"><span class="pre">covers</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">degree</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">method</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">cover_type</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'all'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.covers" title="
|
522
|
-
<dd><p>
|
523
|
-
<p>Returns a list of Manifolds corresponding to all of the
|
649
|
+
<span class="sig-name descname"><span class="pre">covers</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">degree</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">method</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">cover_type</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'all'</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">list</span><span class="p"><span class="pre">[</span></span><a class="reference internal" href="#snappy.Manifold" title="snappy.Manifold"><span class="pre">snappy.Manifold</span></a><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#snappy.Manifold.covers" title="Link to this definition"></a></dt>
|
650
|
+
<dd><p>Returns a list of <a class="reference internal" href="#snappy.Manifold" title="snappy.Manifold"><code class="xref py py-class docutils literal notranslate"><span class="pre">Manifold</span></code></a>s corresponding to all of the
|
524
651
|
finite covers of the given degree. The default method is
|
525
652
|
‘low_index’ for general covers and ‘snappea’ for cyclic
|
526
653
|
covers. The former uses Sim’s algorithm while the latter
|
@@ -556,143 +683,150 @@ used it to do the heavy lifting by specifying method=’magma’.</p>
|
|
556
683
|
|
557
684
|
<dl class="py method">
|
558
685
|
<dt class="sig sig-object py" id="snappy.Manifold.cusp_area_matrix">
|
559
|
-
<span class="sig-name descname"><span class="pre">cusp_area_matrix</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">method</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'
|
560
|
-
<dd><p>
|
561
|
-
|
562
|
-
|
563
|
-
|
564
|
-
|
565
|
-
|
566
|
-
|
567
|
-
|
568
|
-
<
|
569
|
-
<code class="docutils literal notranslate"><span class="pre">method</span></code>). By default (<code class="docutils literal notranslate"><span class="pre">method='trigDependentTryCanonize'</span></code>),
|
570
|
-
it returns a result which can be suboptimal and non-deterministic
|
571
|
-
but is quicker to compute and sufficies for many applications:</p>
|
572
|
-
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">"s776"</span><span class="p">)</span>
|
686
|
+
<span class="sig-name descname"><span class="pre">cusp_area_matrix</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">method</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'maximal'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verified</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bits_prec</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.cusp_area_matrix" title="Link to this definition"></a></dt>
|
687
|
+
<dd><p>Returns the maximal cusp area matrix <span class="math notranslate nohighlight">\((A_{ij})\)</span> where
|
688
|
+
<span class="math notranslate nohighlight">\(A_{ij}\)</span> is defined as follows.
|
689
|
+
Let <span class="math notranslate nohighlight">\(C_i\)</span> and <span class="math notranslate nohighlight">\(C_j\)</span> be the (open) cusp neighborhoods about cusp
|
690
|
+
<span class="math notranslate nohighlight">\(i\)</span> and <span class="math notranslate nohighlight">\(j\)</span>. Let <span class="math notranslate nohighlight">\(A(C_i)\)</span> and <span class="math notranslate nohighlight">\(A(C_j)\)</span> be the
|
691
|
+
areas of <span class="math notranslate nohighlight">\(C_i\)</span> and <span class="math notranslate nohighlight">\(C_j\)</span>, respectively. Then, <span class="math notranslate nohighlight">\(C_i\)</span>
|
692
|
+
and <span class="math notranslate nohighlight">\(C_j\)</span> are embedded (if <span class="math notranslate nohighlight">\(i = j\)</span>) or disjoint (otherwise)
|
693
|
+
if and only if <span class="math notranslate nohighlight">\(A(C_i)A(C_j) \leq A_{ij}\)</span>.</p>
|
694
|
+
<p>Here is an example:</p>
|
695
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">"L6a5"</span><span class="p">)</span>
|
573
696
|
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_area_matrix</span><span class="p">()</span>
|
574
|
-
<span class="go">[
|
575
|
-
<span class="go">[7.00000000000000
|
576
|
-
<span class="go">[
|
577
|
-
</pre></div>
|
578
|
-
</div>
|
579
|
-
<p>
|
580
|
-
|
581
|
-
|
582
|
-
matrix
|
583
|
-
|
584
|
-
<
|
585
|
-
|
586
|
-
|
587
|
-
|
588
|
-
|
589
|
-
</
|
590
|
-
<
|
591
|
-
<
|
592
|
-
|
593
|
-
|
594
|
-
|
595
|
-
|
596
|
-
|
597
|
-
|
598
|
-
|
599
|
-
|
600
|
-
|
601
|
-
</
|
602
|
-
<p>
|
603
|
-
|
604
|
-
|
605
|
-
|
606
|
-
|
607
|
-
|
608
|
-
|
609
|
-
|
610
|
-
|
611
|
-
|
612
|
-
|
613
|
-
<
|
614
|
-
<
|
615
|
-
<
|
616
|
-
|
617
|
-
<
|
618
|
-
<span class="
|
619
|
-
|
620
|
-
</
|
621
|
-
|
622
|
-
<p>
|
623
|
-
<
|
624
|
-
|
625
|
-
|
626
|
-
</pre></div>
|
627
|
-
</div>
|
697
|
+
<span class="go">[27.9999999999996 7.00000000000000 7.00000000000000]</span>
|
698
|
+
<span class="go">[7.00000000000000 27.9999999999999 7.00000000000000]</span>
|
699
|
+
<span class="go">[7.00000000000000 7.00000000000000 28.0000000000001]</span>
|
700
|
+
</pre></div>
|
701
|
+
</div>
|
702
|
+
<p><strong>Faster lower bounds</strong></p>
|
703
|
+
<p>This section can be skipped by most users!</p>
|
704
|
+
<p>Prior to SnapPy version 3.2, the algorithm to compute the maximal cusp
|
705
|
+
area matrix was much slower and required <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">True</span></code> and
|
706
|
+
SageMath. Thus, in prior versions, <code class="xref py py-attr docutils literal notranslate"><span class="pre">method</span></code> defaulted to
|
707
|
+
<code class="docutils literal notranslate"><span class="pre">trigDependentTryCanonize</span></code>. This meant, that, by default,
|
708
|
+
<a class="reference internal" href="#snappy.Manifold.cusp_area_matrix" title="snappy.Manifold.cusp_area_matrix"><code class="xref py py-meth docutils literal notranslate"><span class="pre">cusp_area_matrix()</span></code></a> only returned
|
709
|
+
(some) lower bounds for the maximal cusp area matrix entries.</p>
|
710
|
+
<p>These lower bounds can still be accessed:</p>
|
711
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_area_matrix</span><span class="p">(</span><span class="n">method</span> <span class="o">=</span> <span class="s1">'trigDependentTryCanonize'</span><span class="p">)</span>
|
712
|
+
<span class="go">[21.4375000000000 7.00000000000000 7.00000000000000]</span>
|
713
|
+
<span class="go">[7.00000000000000 28.0000000000000 7.00000000000000]</span>
|
714
|
+
<span class="go">[7.00000000000000 7.00000000000000 28.0000000000000]</span>
|
715
|
+
</pre></div>
|
716
|
+
</div>
|
717
|
+
<p>If <code class="xref py py-attr docutils literal notranslate"><span class="pre">method</span> <span class="pre">=</span> <span class="pre">'trigDependent'</span></code> or
|
718
|
+
<code class="xref py py-attr docutils literal notranslate"><span class="pre">method</span> <span class="pre">=</span> <span class="pre">'trigDependenyTryCanonize'</span></code>, the result is triangulation
|
719
|
+
dependent or not even deterministic, respectively.
|
720
|
+
Furthermore, if <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">True</span></code> is also set, while the left
|
721
|
+
endpoints of the intervals are lower bounds for the maximal cusp area
|
722
|
+
matrix entries, the right endpoints are meaningless and could be smaller
|
723
|
+
or larger than the maximal cusp area matrix entries.</p>
|
724
|
+
<p><strong>Verified computation</strong></p>
|
725
|
+
<p>If <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">False</span></code>, floating-point issues can arise resulting in
|
726
|
+
incorrect values. The method can be made
|
727
|
+
<a class="reference internal" href="verify.html#verify-primer"><span class="std std-ref">verified</span></a> by passing <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">True</span></code>:</p>
|
728
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: M.cusp_area_matrix(verified=True) # doctest: +NUMERIC3
|
729
|
+
[ 28.0000? 7.000000000000? 7.00000000000?]
|
730
|
+
[7.000000000000? 28.000000? 7.00000000000?]
|
731
|
+
[ 7.00000000000? 7.00000000000? 28.00000?]
|
732
|
+
</pre></div>
|
733
|
+
</div>
|
734
|
+
<dl class="field-list simple">
|
735
|
+
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
736
|
+
<dd class="field-odd"><ul class="simple">
|
737
|
+
<li><p><strong>verified</strong> – Use <a class="reference internal" href="verify.html#verify-primer"><span class="std std-ref">verified computation</span></a>.</p></li>
|
738
|
+
<li><p><strong>bits_prec</strong> – Precision used for computation. Increase if computation
|
739
|
+
did not succeed or a more precise result is desired.</p></li>
|
740
|
+
<li><p><strong>method</strong> – Switches to older algorithms giving lower bounds when
|
741
|
+
<code class="docutils literal notranslate"><span class="pre">trigDependentTryCanonize</span></code> and <code class="docutils literal notranslate"><span class="pre">trigDependent</span></code>.</p></li>
|
742
|
+
</ul>
|
743
|
+
</dd>
|
744
|
+
<dt class="field-even">Returns<span class="colon">:</span></dt>
|
745
|
+
<dd class="field-even"><p>Maximal cusp area matrix (default) or lower bounds
|
746
|
+
(if <code class="xref py py-attr docutils literal notranslate"><span class="pre">method</span></code> switches to older algorithm).</p>
|
747
|
+
</dd>
|
748
|
+
</dl>
|
628
749
|
</dd></dl>
|
629
750
|
|
630
751
|
<dl class="py method">
|
631
752
|
<dt class="sig sig-object py" id="snappy.Manifold.cusp_areas">
|
632
|
-
<span class="sig-name descname"><span class="pre">cusp_areas</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">policy</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'unbiased'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">method</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'
|
633
|
-
<dd><p>
|
634
|
-
|
635
|
-
|
636
|
-
|
637
|
-
|
753
|
+
<span class="sig-name descname"><span class="pre">cusp_areas</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">policy</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'unbiased'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">method</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'maximal'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verified</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bits_prec</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">first_cusps</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">List</span><span class="p"><span class="pre">[</span></span><span class="pre">int</span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">[]</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.cusp_areas" title="Link to this definition"></a></dt>
|
754
|
+
<dd><p>Returns a list of areas, one for each cusp. The cusp neighborhoods
|
755
|
+
defined by these areas are embedded and disjoint. Furthermore, these
|
756
|
+
neighborhoods are maximal in that they fail to be embedded or
|
757
|
+
disjoint if any cusp neighborhood is enlarged (unless <code class="xref py py-attr docutils literal notranslate"><span class="pre">method</span></code>
|
758
|
+
is set to a value different from the default).</p>
|
759
|
+
<p>There are different policies how these cusp neighborhoods are found.</p>
|
760
|
+
<p>The default <code class="xref py py-attr docutils literal notranslate"><span class="pre">policy</span></code> is <code class="docutils literal notranslate"><span class="pre">unbiased</span></code>. This means that the
|
761
|
+
cusp neighborhoods are blown up simultaneously and a cusp neighborhood
|
762
|
+
stops growing when it touches any cusp neighborhood including itself:</p>
|
638
763
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">"s776"</span><span class="p">)</span>
|
639
764
|
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_areas</span><span class="p">()</span>
|
640
765
|
<span class="go">[2.64575131106459, 2.64575131106459, 2.64575131106459]</span>
|
641
766
|
</pre></div>
|
642
767
|
</div>
|
643
|
-
<p>Alternatively, <code class="docutils literal notranslate"><span class="pre">policy='greedy'</span></code>
|
644
|
-
neighborhood is blown up until it touches itself,
|
645
|
-
cusp neighborhood is blown up until it touches itself
|
646
|
-
cusp neighborhood,
|
768
|
+
<p>Alternatively, <code class="xref py py-attr docutils literal notranslate"><span class="pre">policy='greedy'</span></code> can be specified. This means
|
769
|
+
that the first cusp neighborhood is blown up until it touches itself,
|
770
|
+
then the second cusp neighborhood is blown up until it touches itself
|
771
|
+
or the first cusp neighborhood, and so on:</p>
|
647
772
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_areas</span><span class="p">(</span><span class="n">policy</span><span class="o">=</span><span class="s1">'greedy'</span><span class="p">)</span>
|
648
773
|
<span class="go">[5.29150262212918, 1.32287565553230, 1.32287565553229]</span>
|
649
774
|
</pre></div>
|
650
775
|
</div>
|
651
|
-
<p>
|
652
|
-
|
653
|
-
<div class="
|
654
|
-
<span class="
|
655
|
-
<span class="go">[7.053940530873898, 3.2712450270, 2.7091590087]</span>
|
656
|
-
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_areas</span><span class="p">(</span><span class="n">policy</span><span class="o">=</span><span class="s1">'greedy'</span><span class="p">,</span> <span class="n">first_cusps</span><span class="o">=</span><span class="p">[])</span>
|
657
|
-
<span class="go">[7.053940530873898, 3.2712450270, 2.7091590087]</span>
|
658
|
-
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_areas</span><span class="p">(</span><span class="n">policy</span><span class="o">=</span><span class="s1">'greedy'</span><span class="p">,</span> <span class="n">first_cusps</span><span class="o">=</span><span class="p">[</span><span class="mi">0</span><span class="p">,])</span>
|
659
|
-
<span class="go">[7.053940530873898, 3.2712450270, 2.7091590087]</span>
|
660
|
-
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_areas</span><span class="p">(</span><span class="n">policy</span><span class="o">=</span><span class="s1">'greedy'</span><span class="p">,</span> <span class="n">first_cusps</span><span class="o">=</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">])</span>
|
661
|
-
<span class="go">[7.053940530873898, 3.2712450270, 2.7091590087]</span>
|
662
|
-
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_areas</span><span class="p">(</span><span class="n">policy</span><span class="o">=</span><span class="s1">'greedy'</span><span class="p">,</span> <span class="n">first_cusps</span><span class="o">=</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">])</span>
|
663
|
-
<span class="go">[7.053940530873898, 3.2712450270, 2.7091590087]</span>
|
664
|
-
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_areas</span><span class="p">(</span><span class="n">policy</span><span class="o">=</span><span class="s1">'greedy'</span><span class="p">,</span> <span class="n">first_cusps</span><span class="o">=</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">1</span><span class="p">])</span>
|
665
|
-
<span class="go">[7.053940530873898, 2.3513135103, 3.7690945490]</span>
|
666
|
-
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_areas</span><span class="p">(</span><span class="n">policy</span><span class="o">=</span><span class="s1">'greedy'</span><span class="p">,</span> <span class="n">first_cusps</span><span class="o">=</span><span class="p">[</span><span class="mi">1</span><span class="p">,])</span>
|
667
|
-
<span class="go">[4.0302253322, 5.725527974287718, 1.5478612583]</span>
|
668
|
-
</pre></div>
|
669
|
-
</div>
|
670
|
-
<p><code class="docutils literal notranslate"><span class="pre">cusp_areas</span></code> is implemented using
|
671
|
-
<a class="reference internal" href="#snappy.Manifold.cusp_area_matrix" title="snappy.Manifold.cusp_area_matrix"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Manifold.cusp_area_matrix()</span></code></a> and the same arguments
|
672
|
-
(<code class="docutils literal notranslate"><span class="pre">method</span></code>, <code class="docutils literal notranslate"><span class="pre">verified</span></code>, <code class="docutils literal notranslate"><span class="pre">bits_prec</span></code>) are accepted. For
|
673
|
-
example, verified computations are supported:</p>
|
674
|
-
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: M=Manifold("v2854")
|
675
|
-
sage: M.cusp_areas(verified=True) # doctest: +NUMERIC9
|
676
|
-
[3.6005032476?, 3.6005032476?]
|
776
|
+
<p>Use <code class="xref py py-attr docutils literal notranslate"><span class="pre">first_cusps</span></code> to specify the order in which the cusp
|
777
|
+
neighborhoods are blown up:</p>
|
778
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_areas</span><span class="p">(</span><span class="n">policy</span><span class="o">=</span><span class="s1">'greedy'</span><span class="p">,</span> <span class="n">first_cusps</span><span class="o">=</span><span class="p">[</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">2</span><span class="p">])</span>
|
779
|
+
<span class="go">[1.32287565553230, 5.29150262212918, 1.32287565553229]</span>
|
677
780
|
</pre></div>
|
678
781
|
</div>
|
679
|
-
<p>
|
680
|
-
|
681
|
-
|
682
|
-
|
683
|
-
|
684
|
-
<p>Area of the cusp neighborhood touching itself for a one-cusped
|
685
|
-
manifold:</p>
|
686
|
-
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: M=Manifold("v1959")
|
687
|
-
sage: M.cusp_areas(method='maximal', verified=True, bits_prec=100) # doctest: +NUMERIC15
|
688
|
-
[7.15679216175810579?]
|
782
|
+
<p>An incomplete list can be given to <code class="xref py py-attr docutils literal notranslate"><span class="pre">first_cusps</span></code>. In this case,
|
783
|
+
the list is automatically completed by appending the remaining cusps in
|
784
|
+
order. Thus, the above call is equivalent to:</p>
|
785
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_areas</span><span class="p">(</span><span class="n">policy</span><span class="o">=</span><span class="s1">'greedy'</span><span class="p">,</span> <span class="n">first_cusps</span><span class="o">=</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
|
786
|
+
<span class="go">[1.32287565553230, 5.29150262212918, 1.32287565553229]</span>
|
689
787
|
</pre></div>
|
690
788
|
</div>
|
789
|
+
<p>Under the hood, this method is using
|
790
|
+
<a class="reference internal" href="#snappy.Manifold.cusp_area_matrix" title="snappy.Manifold.cusp_area_matrix"><code class="xref py py-meth docutils literal notranslate"><span class="pre">cusp_area_matrix()</span></code></a>.</p>
|
791
|
+
<p><strong>Verified computation</strong></p>
|
792
|
+
<p>If <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">False</span></code>, floating-point issues can arise resulting in
|
793
|
+
incorrect values. The method can be made
|
794
|
+
<a class="reference internal" href="verify.html#verify-primer"><span class="std std-ref">verified</span></a> by passing <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">True</span></code>:</p>
|
795
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: M=Manifold("s776")
|
796
|
+
sage: M.cusp_areas(verified=True) # doctest: +NUMERIC9
|
797
|
+
[2.64575131107?, 2.64575131107?, 2.64575131107?]
|
798
|
+
</pre></div>
|
799
|
+
</div>
|
800
|
+
<dl class="field-list simple">
|
801
|
+
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
802
|
+
<dd class="field-odd"><ul class="simple">
|
803
|
+
<li><p><strong>verified</strong> – Use <a class="reference internal" href="verify.html#verify-primer"><span class="std std-ref">verified computation</span></a>.</p></li>
|
804
|
+
<li><p><strong>bits_prec</strong> – Precision used for computation. Increase if computation
|
805
|
+
did not succeed or a more precise result is desired.</p></li>
|
806
|
+
<li><p><strong>method</strong> – Passed to <a class="reference internal" href="#snappy.Manifold.cusp_area_matrix" title="snappy.Manifold.cusp_area_matrix"><code class="xref py py-meth docutils literal notranslate"><span class="pre">cusp_area_matrix()</span></code></a>. If set
|
807
|
+
to a value different from the default <code class="docutils literal notranslate"><span class="pre">maximal</span></code>, the cusp
|
808
|
+
neighborhoods stop growing when the corresponding value
|
809
|
+
in the computed cusp area matrix is exceeded. At this point,
|
810
|
+
the cusp neighborhood might not necessarily touch any other
|
811
|
+
cusp neighborhood since we do not use the maximal cusp area
|
812
|
+
matrix.</p></li>
|
813
|
+
<li><p><strong>policy</strong> – Specifies process of choosing cusp neighborhoods.
|
814
|
+
Either <code class="docutils literal notranslate"><span class="pre">unbiased</span></code> or <code class="docutils literal notranslate"><span class="pre">greedy</span></code>, see above.</p></li>
|
815
|
+
<li><p><strong>first_cusps</strong> – Preference order of cusps.
|
816
|
+
Only relevant if <code class="xref py py-attr docutils literal notranslate"><span class="pre">policy='greedy'</span></code>, see above.</p></li>
|
817
|
+
</ul>
|
818
|
+
</dd>
|
819
|
+
<dt class="field-even">Returns<span class="colon">:</span></dt>
|
820
|
+
<dd class="field-even"><p>Areas of maximal embedded and disjoint cusp neighborhoods
|
821
|
+
(default). Or areas of some embedded and disjoint cusp
|
822
|
+
neighborhoods (if <code class="xref py py-attr docutils literal notranslate"><span class="pre">method</span></code> switches to older algorithm).</p>
|
823
|
+
</dd>
|
824
|
+
</dl>
|
691
825
|
</dd></dl>
|
692
826
|
|
693
827
|
<dl class="py method">
|
694
828
|
<dt class="sig sig-object py" id="snappy.Manifold.cusp_info">
|
695
|
-
<span class="sig-name descname"><span class="pre">cusp_info</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data_spec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verified</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bits_prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.cusp_info" title="
|
829
|
+
<span class="sig-name descname"><span class="pre">cusp_info</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data_spec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verified</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bits_prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.cusp_info" title="Link to this definition"></a></dt>
|
696
830
|
<dd><p>Returns an info object containing information about the given
|
697
831
|
cusp. Usage:</p>
|
698
832
|
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">'v3227(0,0)(1,2)(3,2)'</span><span class="p">)</span>
|
@@ -744,7 +878,7 @@ sage: M.cusp_info('shape', verified = True, bits_prec = 60) # doctest: +
|
|
744
878
|
|
745
879
|
<dl class="py method">
|
746
880
|
<dt class="sig sig-object py" id="snappy.Manifold.cusp_neighborhood">
|
747
|
-
<span class="sig-name descname"><span class="pre">cusp_neighborhood</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.cusp_neighborhood" title="
|
881
|
+
<span class="sig-name descname"><span class="pre">cusp_neighborhood</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><a class="reference internal" href="additional_classes.html#snappy.CuspNeighborhood" title="SnapPy.CuspNeighborhood"><span class="pre">CuspNeighborhood</span></a></span></span><a class="headerlink" href="#snappy.Manifold.cusp_neighborhood" title="Link to this definition"></a></dt>
|
748
882
|
<dd><p>Returns information about the cusp neighborhoods of the
|
749
883
|
manifold, in the form of data about the corresponding horoball
|
750
884
|
diagrams in hyperbolic 3-space.</p>
|
@@ -761,43 +895,40 @@ diagrams in hyperbolic 3-space.</p>
|
|
761
895
|
|
762
896
|
<dl class="py method">
|
763
897
|
<dt class="sig sig-object py" id="snappy.Manifold.cusp_translations">
|
764
|
-
<span class="sig-name descname"><span class="pre">cusp_translations</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">policy</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'unbiased'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">method</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'
|
765
|
-
<dd><p>
|
766
|
-
|
767
|
-
|
768
|
-
|
769
|
-
|
770
|
-
|
898
|
+
<span class="sig-name descname"><span class="pre">cusp_translations</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">policy</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'unbiased'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">method</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'maximal'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verified</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bits_prec</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">first_cusps</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">List</span><span class="p"><span class="pre">[</span></span><span class="pre">int</span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">[]</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.cusp_translations" title="Link to this definition"></a></dt>
|
899
|
+
<dd><p>Returns a list of the (complex) Euclidean translations corresponding to the
|
900
|
+
meridian and longitude of each cusp.</p>
|
901
|
+
<p>That is, the method uses <a class="reference internal" href="#snappy.Manifold.cusp_areas" title="snappy.Manifold.cusp_areas"><code class="xref py py-meth docutils literal notranslate"><span class="pre">cusp_areas()</span></code></a> to find
|
902
|
+
(maximal) embedded and disjoint cusp neighborhoods. It then uses the
|
903
|
+
boundaries of these cusp neighborhoods to measure the meridian and
|
904
|
+
longitude of each cusp. The result is a pair for each cusp. The first
|
905
|
+
entry of the pair corresponds to the meridian and is complex. The
|
906
|
+
second entry corresponds to the longitude and is always real:</p>
|
771
907
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">"s776"</span><span class="p">)</span>
|
772
908
|
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_translations</span><span class="p">()</span>
|
773
909
|
<span class="go">[(0.500000000000000 + 1.32287565553230*I, 2.00000000000000), (0.500000000000000 + 1.32287565553230*I, 2.00000000000000), (0.499999999999999 + 1.32287565553230*I, 2.00000000000000)]</span>
|
774
910
|
</pre></div>
|
775
911
|
</div>
|
776
|
-
<p>
|
777
|
-
|
778
|
-
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_translations</span><span class="p">(</span><span class="n">policy</span> <span class="o">=</span> <span class="s1">'greedy'</span><span class="p">,</span> <span class="n">first_cusps</span> <span class="o">=</span> <span class="p">[],</span> <span class="n">bits_prec</span> <span class="o">=</span> <span class="mi">100</span><span class="p">)</span>
|
912
|
+
<p>It takes the same arguments as <a class="reference internal" href="#snappy.Manifold.cusp_areas" title="snappy.Manifold.cusp_areas"><code class="xref py py-meth docutils literal notranslate"><span class="pre">cusp_areas()</span></code></a>:</p>
|
913
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_translations</span><span class="p">(</span><span class="n">policy</span> <span class="o">=</span> <span class="s1">'greedy'</span><span class="p">)</span>
|
779
914
|
<span class="go">[(0.70710678118654752440084436210 + 1.8708286933869706927918743662*I, 2.8284271247461900976033774484), (0.35355339059327376220042218105 + 0.93541434669348534639593718308*I, 1.4142135623730950488016887242), (0.35355339059327376220042218105 + 0.93541434669348534639593718308*I, 1.4142135623730950488016887242)]</span>
|
780
915
|
</pre></div>
|
781
916
|
</div>
|
782
|
-
<p>
|
783
|
-
<
|
917
|
+
<p><strong>Verified computations</strong></p>
|
918
|
+
<p>If <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">False</span></code>, floating-point issues can arise resulting in
|
919
|
+
incorrect values. The method can be made
|
920
|
+
<a class="reference internal" href="verify.html#verify-primer"><span class="std std-ref">verified</span></a> by passing <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">True</span></code>:</p>
|
921
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: M.cusp_translations(verified = True) # doctest: +NUMERIC9
|
784
922
|
[(0.50000000000? + 1.32287565553?*I, 2.00000000000?), (0.500000000000? + 1.32287565554?*I, 2.00000000000?), (0.500000000000? + 1.32287565554?*I, 2.00000000000?)]
|
785
923
|
</pre></div>
|
786
924
|
</div>
|
787
|
-
<p>that
|
788
|
-
|
789
|
-
is always in a <code class="docutils literal notranslate"><span class="pre">RealIntervalField</span></code>).</p>
|
790
|
-
<p><strong>Remark:</strong> The default <code class="docutils literal notranslate"><span class="pre">method</span> <span class="pre">=</span> <span class="pre">'trigDependentTryCanonize'</span></code> is
|
791
|
-
(potentially) non-deterministic and thus the result of</p>
|
792
|
-
<blockquote>
|
793
|
-
<div><p>[ M.cusp_translations()[i] for i in range(M.num_cusps()) ]</p>
|
794
|
-
</div></blockquote>
|
795
|
-
<p>might not correspond to disjoint cusp neighborhoods.</p>
|
925
|
+
<p>Note that the first element of each pair is a SageMath <code class="docutils literal notranslate"><span class="pre">ComplexIntervalField</span></code> and
|
926
|
+
the second element a <code class="docutils literal notranslate"><span class="pre">RealIntervalField</span></code>.</p>
|
796
927
|
</dd></dl>
|
797
928
|
|
798
929
|
<dl class="py method">
|
799
930
|
<dt class="sig sig-object py" id="snappy.Manifold.dehn_fill">
|
800
|
-
<span class="sig-name descname"><span class="pre">dehn_fill</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">filling_data</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">which_cusp</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.dehn_fill" title="
|
931
|
+
<span class="sig-name descname"><span class="pre">dehn_fill</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">filling_data</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">which_cusp</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span><a class="headerlink" href="#snappy.Manifold.dehn_fill" title="Link to this definition"></a></dt>
|
801
932
|
<dd><p>Set the Dehn filling coefficients of the cusps. This can be
|
802
933
|
specified in the following ways, where the cusps are numbered
|
803
934
|
by 0,1,…,(num_cusps - 1).</p>
|
@@ -838,8 +969,8 @@ by 0,1,…,(num_cusps - 1).</p>
|
|
838
969
|
|
839
970
|
<dl class="py method">
|
840
971
|
<dt class="sig sig-object py" id="snappy.Manifold.dirichlet_domain">
|
841
|
-
<span class="sig-name descname"><span class="pre">dirichlet_domain</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">vertex_epsilon</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">
|
842
|
-
<dd><p>Returns a DirichletDomain object representing a Dirichlet
|
972
|
+
<span class="sig-name descname"><span class="pre">dirichlet_domain</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">vertex_epsilon</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1e-08</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">displacement</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">(0.0,</span> <span class="pre">0.0,</span> <span class="pre">0.0)</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">centroid_at_origin</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">maximize_injectivity_radius</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">include_words</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><a class="reference internal" href="additional_classes.html#snappy.DirichletDomain" title="SnapPy.DirichletDomain"><span class="pre">DirichletDomain</span></a></span></span><a class="headerlink" href="#snappy.Manifold.dirichlet_domain" title="Link to this definition"></a></dt>
|
973
|
+
<dd><p>Returns a <a class="reference internal" href="additional_classes.html#snappy.DirichletDomain" title="snappy.DirichletDomain"><code class="xref py py-class docutils literal notranslate"><span class="pre">DirichletDomain</span></code></a> object representing a Dirichlet
|
843
974
|
domain of the hyperbolic manifold, typically centered at a
|
844
975
|
point which is a local maximum of injectivity radius. It will
|
845
976
|
have ideal vertices if the manifold is not closed.</p>
|
@@ -852,7 +983,7 @@ have ideal vertices if the manifold is not closed.</p>
|
|
852
983
|
</div>
|
853
984
|
<p>The group elements for the face-pairings of the Dirichlet domain
|
854
985
|
can be given as words in the original generators of the
|
855
|
-
(unsimplified) fundamental group by setting include_words = True
|
986
|
+
(unsimplified) fundamental group by setting <code class="xref py py-attr docutils literal notranslate"><span class="pre">include_words</span> <span class="pre">=</span> <span class="pre">True</span></code>:</p>
|
856
987
|
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="nb">sorted</span><span class="p">(</span><span class="n">M</span><span class="o">.</span><span class="n">dirichlet_domain</span><span class="p">(</span><span class="n">include_words</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span><span class="o">.</span><span class="n">pairing_words</span><span class="p">())</span>
|
857
988
|
<span class="go">['A', ...]</span>
|
858
989
|
</pre></div>
|
@@ -876,7 +1007,7 @@ the default choices are shown below:</p>
|
|
876
1007
|
|
877
1008
|
<dl class="py method">
|
878
1009
|
<dt class="sig sig-object py" id="snappy.Manifold.drill">
|
879
|
-
<span class="sig-name descname"><span class="pre">drill</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">which_curve</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">max_segments</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">6</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.drill" title="
|
1010
|
+
<span class="sig-name descname"><span class="pre">drill</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">which_curve</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">max_segments</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">6</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.drill" title="Link to this definition"></a></dt>
|
880
1011
|
<dd><p>Drills out the specified dual curve from among all dual curves
|
881
1012
|
with at most max_segments, which defaults to 6. The method
|
882
1013
|
dual_curve allows one to see the properties of curves before
|
@@ -891,38 +1022,35 @@ choosing which one to drill out.</p>
|
|
891
1022
|
|
892
1023
|
<dl class="py method">
|
893
1024
|
<dt class="sig sig-object py" id="snappy.Manifold.drill_word">
|
894
|
-
<span class="sig-name descname"><span class="pre">drill_word</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">word</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verified</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bits_prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.drill_word" title="
|
1025
|
+
<span class="sig-name descname"><span class="pre">drill_word</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">word</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verified</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bits_prec</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><a class="reference internal" href="#snappy.Manifold" title="snappy.Manifold"><span class="pre">Manifold</span></a></span></span><a class="headerlink" href="#snappy.Manifold.drill_word" title="Link to this definition"></a></dt>
|
895
1026
|
<dd><p>Drills the geodesic corresponding to the given word in the unsimplified
|
896
|
-
fundamental group
|
897
|
-
<div class="
|
898
|
-
<span class="gp">>>> </span><span class="n">M</span
|
899
|
-
<span class="
|
900
|
-
<span class="go">
|
901
|
-
<span class="go">1
|
902
|
-
<span class="go">1 1.08707014499574 + 1.72276844987009*I circle + bC</span>
|
1027
|
+
fundamental group. Here is an example:</p>
|
1028
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">"m004"</span><span class="p">)</span>
|
1029
|
+
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">length_spectrum_alt</span><span class="p">(</span><span class="n">max_len</span><span class="o">=</span><span class="mf">1.2</span><span class="p">)</span>
|
1030
|
+
<span class="go">[Length Core curve Word</span>
|
1031
|
+
<span class="go"> 1.08707014499574 + 1.72276844987009*I - bC,</span>
|
1032
|
+
<span class="go"> 1.08707014499574 - 1.72276844987009*I - a]</span>
|
903
1033
|
<span class="gp">>>> </span><span class="n">N</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">drill_word</span><span class="p">(</span><span class="s1">'a'</span><span class="p">)</span>
|
904
1034
|
<span class="gp">>>> </span><span class="n">N</span><span class="o">.</span><span class="n">identify</span><span class="p">()</span>
|
905
1035
|
<span class="go">[m129(0,0)(0,0), 5^2_1(0,0)(0,0), L5a1(0,0)(0,0), ooct01_00001(0,0)(0,0)]</span>
|
906
1036
|
</pre></div>
|
907
1037
|
</div>
|
908
|
-
<p>The last cusp of the
|
909
|
-
geodesic
|
910
|
-
(1,0)
|
911
|
-
|
912
|
-
That is, the new longitude is homotopic to the closed geodesic when embedding
|
913
|
-
the drilled manifold into the original manifold.</p>
|
914
|
-
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">N</span><span class="o">.</span><span class="n">dehn_fill</span><span class="p">((</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">),</span><span class="mi">1</span><span class="p">)</span>
|
1038
|
+
<p>The last cusp of the resulting manifold corresponds to the drilled
|
1039
|
+
geodesic. The longitude and meridian for that cusp are chosen such that
|
1040
|
+
<code class="docutils literal notranslate"><span class="pre">(1,0)</span></code>-filling the last cusp results in the given (undrilled) manifold:</p>
|
1041
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">N</span><span class="o">.</span><span class="n">dehn_fill</span><span class="p">((</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">),</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
|
915
1042
|
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">is_isometric_to</span><span class="p">(</span><span class="n">N</span><span class="p">)</span>
|
916
1043
|
<span class="go">True</span>
|
917
1044
|
<span class="gp">>>> </span><span class="n">N</span><span class="o">.</span><span class="n">cusp_info</span><span class="p">(</span><span class="mi">1</span><span class="p">)[</span><span class="s1">'core_length'</span><span class="p">]</span>
|
918
1045
|
<span class="go">1.08707014499574 - 1.72276844987009*I</span>
|
919
1046
|
</pre></div>
|
920
1047
|
</div>
|
921
|
-
<p>
|
922
|
-
|
923
|
-
|
924
|
-
|
925
|
-
|
1048
|
+
<p>The orientation of the new longitude is chosen so that it is parallel to
|
1049
|
+
the closed geodesic. That is, the new longitude is homotopic to the closed
|
1050
|
+
geodesic when embedding the drilled manifold into the given manifold.</p>
|
1051
|
+
<p>If the given geodesic coincides with a core curve of a filled cusp, the
|
1052
|
+
cusp is unfilled instead:</p>
|
1053
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">"m004(2,3)"</span><span class="p">)</span>
|
926
1054
|
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">volume</span><span class="p">()</span>
|
927
1055
|
<span class="go">1.73712388065</span>
|
928
1056
|
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_info</span><span class="p">(</span><span class="mi">0</span><span class="p">)[</span><span class="s1">'core_length'</span><span class="p">]</span>
|
@@ -934,30 +1062,19 @@ cusp becomes the last cusp.</p>
|
|
934
1062
|
<span class="go">m004_drilled(0,0)</span>
|
935
1063
|
<span class="gp">>>> </span><span class="n">N</span><span class="o">.</span><span class="n">num_cusps</span><span class="p">()</span>
|
936
1064
|
<span class="go">1</span>
|
937
|
-
<span class="gp">>>> </span><span class="n">N</span><span class="o">.</span><span class="n">dehn_fill</span><span class="p">((</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">))</span>
|
938
|
-
<span class="gp">>>> </span><span class="n">N</span><span class="o">.</span><span class="n">volume</span><span class="p">()</span>
|
939
|
-
<span class="go">1.73712388065</span>
|
940
1065
|
</pre></div>
|
941
1066
|
</div>
|
942
|
-
<p>
|
943
|
-
|
944
|
-
|
945
|
-
|
946
|
-
|
947
|
-
If <cite>verified = True</cite> is specified, intervals are used for all computations
|
948
|
-
and the result is provably correct (only supported when used inside
|
949
|
-
SageMath).
|
950
|
-
That is, the algorithm will fail with an exception (most likely
|
951
|
-
InsufficientPrecisionError) if insufficient precision is used. Example of
|
952
|
-
verified computation:</p>
|
953
|
-
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">"m004(2,3)"</span><span class="p">)</span>
|
954
|
-
<span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">.</span><span class="n">drill_word</span><span class="p">(</span><span class="s1">'caa'</span><span class="p">,</span> <span class="n">verified</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span> <span class="n">bits_prec</span> <span class="o">=</span> <span class="mi">100</span><span class="p">)</span>
|
955
|
-
<span class="n">m004_drilled</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">)(</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span>
|
1067
|
+
<p>In this case, the peripheral information is also
|
1068
|
+
updated such that the above remark about <code class="docutils literal notranslate"><span class="pre">(1,0)</span></code>-filling applies again:</p>
|
1069
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">N</span><span class="o">.</span><span class="n">dehn_fill</span><span class="p">((</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">),</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
|
1070
|
+
<span class="gp">>>> </span><span class="n">N</span><span class="o">.</span><span class="n">volume</span><span class="p">()</span>
|
1071
|
+
<span class="go">1.73712388065</span>
|
956
1072
|
</pre></div>
|
957
1073
|
</div>
|
958
|
-
<p>
|
959
|
-
|
960
|
-
<
|
1074
|
+
<p>That is, the longitude and meridian of the unfilled cusps are reinstalled
|
1075
|
+
and the cusps reindexed so that the unfilled cusp becomes the last cusp.</p>
|
1076
|
+
<p>Here is another example where we drill the core geodesic:</p>
|
1077
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">"v2986(3,4)"</span><span class="p">)</span>
|
961
1078
|
<span class="gp">>>> </span><span class="n">N</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">drill_word</span><span class="p">(</span><span class="s1">'EdFgabcGEdFgaDcc'</span><span class="p">)</span>
|
962
1079
|
<span class="gp">>>> </span><span class="n">N</span><span class="o">.</span><span class="n">is_isometric_to</span><span class="p">(</span><span class="n">Manifold</span><span class="p">(</span><span class="s2">"v2986"</span><span class="p">),</span> <span class="n">return_isometries</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span>
|
963
1080
|
<span class="go">[0 -> 0</span>
|
@@ -966,17 +1083,52 @@ verified computation:</p>
|
|
966
1083
|
<span class="go"> Does not extend to link]</span>
|
967
1084
|
</pre></div>
|
968
1085
|
</div>
|
1086
|
+
<p>While the result of drilling a geodesic is a triangulation and thus
|
1087
|
+
combinatorial in nature, some intermediate computations (for example,
|
1088
|
+
to compute the intersections of the geodesic with the faces of the
|
1089
|
+
tetrahedra) are numerical. Sometimes, it is necessary to increase the
|
1090
|
+
precision with <code class="xref py py-attr docutils literal notranslate"><span class="pre">bits_prec</span></code> to make the method succeed and produce
|
1091
|
+
the correct result.</p>
|
1092
|
+
<p><strong>Verified computation</strong></p>
|
1093
|
+
<p>If <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">False</span></code>, floating-point issues can arise resulting
|
1094
|
+
in drilling the wrong loop. The method can be made
|
1095
|
+
<a class="reference internal" href="verify.html#verify-primer"><span class="std std-ref">verified</span></a> by passing <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">True</span></code>:</p>
|
1096
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">"m004(2,3)"</span><span class="p">)</span>
|
1097
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">.</span><span class="n">drill_word</span><span class="p">(</span><span class="s1">'caa'</span><span class="p">,</span> <span class="n">verified</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span> <span class="n">bits_prec</span> <span class="o">=</span> <span class="mi">100</span><span class="p">)</span>
|
1098
|
+
<span class="n">m004_drilled</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">)(</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span>
|
1099
|
+
</pre></div>
|
1100
|
+
</div>
|
1101
|
+
<p>That is, if the precision is insufficient to prove the result is correct,
|
1102
|
+
the algorithm fails with an exception (most likely
|
1103
|
+
<code class="docutils literal notranslate"><span class="pre">InsufficientPrecisionError</span></code>).</p>
|
1104
|
+
<dl class="field-list simple">
|
1105
|
+
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
1106
|
+
<dd class="field-odd"><ul class="simple">
|
1107
|
+
<li><p><strong>word</strong> – The word in the unsimplified fundamental group specifying the
|
1108
|
+
geodesic to be drilled.</p></li>
|
1109
|
+
<li><p><strong>bits_prec</strong> – The precision used in the intermediate computation. Increase
|
1110
|
+
if the computation failed.</p></li>
|
1111
|
+
<li><p><strong>verified</strong> – Use <a class="reference internal" href="verify.html#verify-primer"><span class="std std-ref">verified computation</span></a>.</p></li>
|
1112
|
+
<li><p><strong>verbose</strong> – Print intermediate results and statistics.</p></li>
|
1113
|
+
</ul>
|
1114
|
+
</dd>
|
1115
|
+
<dt class="field-even">Returns<span class="colon">:</span></dt>
|
1116
|
+
<dd class="field-even"><p>Manifold obtained by drilling geodesic. <code class="docutils literal notranslate"><span class="pre">(1,0)</span></code>-filling the
|
1117
|
+
last cusp gives the given (undrilled) manifold.</p>
|
1118
|
+
</dd>
|
1119
|
+
</dl>
|
969
1120
|
</dd></dl>
|
970
1121
|
|
971
1122
|
<dl class="py method">
|
972
1123
|
<dt class="sig sig-object py" id="snappy.Manifold.drill_words">
|
973
|
-
<span class="sig-name descname"><span class="pre">drill_words</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">words</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Sequence</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verified</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bits_prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.drill_words" title="
|
974
|
-
<dd><p>A generalization of
|
975
|
-
|
976
|
-
|
977
|
-
|
978
|
-
|
979
|
-
|
1124
|
+
<span class="sig-name descname"><span class="pre">drill_words</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">words</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Sequence</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verified</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bits_prec</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><a class="reference internal" href="#snappy.Manifold" title="snappy.Manifold"><span class="pre">Manifold</span></a></span></span><a class="headerlink" href="#snappy.Manifold.drill_words" title="Link to this definition"></a></dt>
|
1125
|
+
<dd><p>A generalization of <a class="reference internal" href="#snappy.Manifold.drill_word" title="snappy.Manifold.drill_word"><code class="xref py py-meth docutils literal notranslate"><span class="pre">drill_word</span></code></a> to drill
|
1126
|
+
several geodesics simultaneously. It takes a list of words in the
|
1127
|
+
unsimplified fundamental group.</p>
|
1128
|
+
<p>Here is an example where we drill two geodesics. One of the geodesics is
|
1129
|
+
the core curve corresponding to the third cusp. The other geodesic is not
|
1130
|
+
a core curve:</p>
|
1131
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span><span class="o">=</span><span class="n">Manifold</span><span class="p">(</span><span class="s2">"t12047(0,0)(1,3)(1,4)(1,5)"</span><span class="p">)</span>
|
980
1132
|
<span class="gp">>>> </span><span class="p">[</span> <span class="n">info</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'core_length'</span><span class="p">)</span> <span class="k">for</span> <span class="n">info</span> <span class="ow">in</span> <span class="n">M</span><span class="o">.</span><span class="n">cusp_info</span><span class="p">()</span> <span class="p">]</span>
|
981
1133
|
<span class="go">[None,</span>
|
982
1134
|
<span class="go"> 0.510804267610103 + 1.92397456664239*I,</span>
|
@@ -992,15 +1144,17 @@ and a geodesic that is not a core curve:</p>
|
|
992
1144
|
<span class="go">t12047_drilled(0,0)(1,3)(1,5)(0,0)(0,0)</span>
|
993
1145
|
</pre></div>
|
994
1146
|
</div>
|
995
|
-
<p>
|
996
|
-
|
997
|
-
|
998
|
-
|
999
|
-
because one geodesic was a core curve. The
|
1000
|
-
(from (1,4)) and grouped with the other
|
1001
|
-
|
1002
|
-
<
|
1003
|
-
|
1147
|
+
<p>Let n be the number of geodesics that were drilled. Then the last n
|
1148
|
+
cusps correspond to the drilled geodesics and appear in the same order than
|
1149
|
+
the geodesics were given as words. Note that in the above example, we expect
|
1150
|
+
six cusps since we started with four cusps and drilled two geodesics. However,
|
1151
|
+
we only obtain five cusps because one geodesic was a core curve. The
|
1152
|
+
corresponding cusp was unfilled (from <code class="docutils literal notranslate"><span class="pre">(1,4)</span></code>) and grouped with the other
|
1153
|
+
cusps coming from drilling.</p>
|
1154
|
+
<p>We obtain the given (undrilled) manifold by <code class="docutils literal notranslate"><span class="pre">(1,0)</span></code>-filling the last n
|
1155
|
+
cusps.</p>
|
1156
|
+
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">N</span><span class="o">.</span><span class="n">dehn_fill</span><span class="p">((</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">),</span> <span class="o">-</span><span class="mi">2</span><span class="p">)</span>
|
1157
|
+
<span class="gp">>>> </span><span class="n">N</span><span class="o">.</span><span class="n">dehn_fill</span><span class="p">((</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">),</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
|
1004
1158
|
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">is_isometric_to</span><span class="p">(</span><span class="n">N</span><span class="p">)</span>
|
1005
1159
|
<span class="go">True</span>
|
1006
1160
|
<span class="gp">>>> </span><span class="p">[</span> <span class="n">info</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'core_length'</span><span class="p">)</span> <span class="k">for</span> <span class="n">info</span> <span class="ow">in</span> <span class="n">N</span><span class="o">.</span><span class="n">cusp_info</span><span class="p">()</span> <span class="p">]</span>
|
@@ -1011,11 +1165,28 @@ because one geodesic was a core curve. The corresponding cusp was unfilled
|
|
1011
1165
|
<span class="go"> 1.43914411734251 + 2.66246879992796*I]</span>
|
1012
1166
|
</pre></div>
|
1013
1167
|
</div>
|
1168
|
+
<dl class="field-list simple">
|
1169
|
+
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
1170
|
+
<dd class="field-odd"><ul class="simple">
|
1171
|
+
<li><p><strong>word</strong> – The words in the unsimplified fundamental group specifying the
|
1172
|
+
geodesics to be drilled.</p></li>
|
1173
|
+
<li><p><strong>bits_prec</strong> – The precision used in the intermediate computation. Increase
|
1174
|
+
if the computation failed.</p></li>
|
1175
|
+
<li><p><strong>verified</strong> – Use <a class="reference internal" href="verify.html#verify-primer"><span class="std std-ref">verified computation</span></a>.</p></li>
|
1176
|
+
<li><p><strong>verbose</strong> – Print intermediate results and statistics.</p></li>
|
1177
|
+
</ul>
|
1178
|
+
</dd>
|
1179
|
+
<dt class="field-even">Returns<span class="colon">:</span></dt>
|
1180
|
+
<dd class="field-even"><p>Manifold obtained by drilling geodesics. <code class="docutils literal notranslate"><span class="pre">(1,0)</span></code>-filling the
|
1181
|
+
last n cusps gives the given (undrilled) manifold where n is the
|
1182
|
+
number of given words.</p>
|
1183
|
+
</dd>
|
1184
|
+
</dl>
|
1014
1185
|
</dd></dl>
|
1015
1186
|
|
1016
1187
|
<dl class="py method">
|
1017
1188
|
<dt class="sig sig-object py" id="snappy.Manifold.dual_curves">
|
1018
|
-
<span class="sig-name descname"><span class="pre">dual_curves</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">max_segments</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">6</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.dual_curves" title="
|
1189
|
+
<span class="sig-name descname"><span class="pre">dual_curves</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">max_segments</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">6</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.dual_curves" title="Link to this definition"></a></dt>
|
1019
1190
|
<dd><p>Constructs a <em>reasonable</em> selection of simple closed curves in
|
1020
1191
|
a manifold’s dual 1-skeleton. In particular, it returns those
|
1021
1192
|
that appear to represent geodesics. The resulting curves can
|
@@ -1053,7 +1224,7 @@ max_segments</p>
|
|
1053
1224
|
|
1054
1225
|
<dl class="py method">
|
1055
1226
|
<dt class="sig sig-object py" id="snappy.Manifold.edge_valences">
|
1056
|
-
<span class="sig-name descname"><span class="pre">edge_valences</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.edge_valences" title="
|
1227
|
+
<span class="sig-name descname"><span class="pre">edge_valences</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.edge_valences" title="Link to this definition"></a></dt>
|
1057
1228
|
<dd><p>Returns a dictionary whose keys are the valences of the edges
|
1058
1229
|
in the triangulation, and the value associated to a key is the
|
1059
1230
|
number of edges of that valence.</p>
|
@@ -1066,7 +1237,7 @@ number of edges of that valence.</p>
|
|
1066
1237
|
|
1067
1238
|
<dl class="py method">
|
1068
1239
|
<dt class="sig sig-object py" id="snappy.Manifold.exterior_to_link">
|
1069
|
-
<span class="sig-name descname"><span class="pre">exterior_to_link</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">check_input</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">check_answer</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">careful_perturbation</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">simplify_link</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pachner_search_tries</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">10</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">seed</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.exterior_to_link" title="
|
1240
|
+
<span class="sig-name descname"><span class="pre">exterior_to_link</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">check_input</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">check_answer</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">careful_perturbation</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">simplify_link</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pachner_search_tries</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">10</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">seed</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><a class="reference internal" href="spherogram.html#spherogram.Link" title="spherogram.Link"><span class="pre">Link</span></a></span></span><a class="headerlink" href="#snappy.Manifold.exterior_to_link" title="Link to this definition"></a></dt>
|
1070
1241
|
<dd><p>For a triangulation of the exterior of a link in the 3-sphere,
|
1071
1242
|
return a planar diagram for the link. The peripheral curves whose
|
1072
1243
|
Dehn filling is the 3-sphere are <strong>part of the input</strong>, specified
|
@@ -1130,7 +1301,7 @@ each component of the link may not be preserved.</p>
|
|
1130
1301
|
|
1131
1302
|
<dl class="py method">
|
1132
1303
|
<dt class="sig sig-object py" id="snappy.Manifold.filled_triangulation">
|
1133
|
-
<span class="sig-name descname"><span class="pre">filled_triangulation</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cusps_to_fill</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'all'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.filled_triangulation" title="
|
1304
|
+
<span class="sig-name descname"><span class="pre">filled_triangulation</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cusps_to_fill</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'all'</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><a class="reference internal" href="#snappy.Manifold" title="snappy.Manifold"><span class="pre">snappy.Manifold</span></a></span></span><a class="headerlink" href="#snappy.Manifold.filled_triangulation" title="Link to this definition"></a></dt>
|
1134
1305
|
<dd><p>Return a new Manifold where the specified cusps have been
|
1135
1306
|
permanently filled in.</p>
|
1136
1307
|
<p>Filling all the cusps results in a Triangulation rather
|
@@ -1153,8 +1324,8 @@ structures when there are no cusps.</p>
|
|
1153
1324
|
|
1154
1325
|
<dl class="py method">
|
1155
1326
|
<dt class="sig sig-object py" id="snappy.Manifold.fundamental_group">
|
1156
|
-
<span class="sig-name descname"><span class="pre">fundamental_group</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">simplify_presentation</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fillings_may_affect_generators</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">minimize_number_of_generators</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">try_hard_to_shorten_relators</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.fundamental_group" title="
|
1157
|
-
<dd><p>Return a HolonomyGroup representing the fundamental group of
|
1327
|
+
<span class="sig-name descname"><span class="pre">fundamental_group</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">simplify_presentation</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fillings_may_affect_generators</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">minimize_number_of_generators</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">try_hard_to_shorten_relators</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><a class="reference internal" href="additional_classes.html#snappy.HolonomyGroup" title="SnapPy.HolonomyGroup"><span class="pre">HolonomyGroup</span></a></span></span><a class="headerlink" href="#snappy.Manifold.fundamental_group" title="Link to this definition"></a></dt>
|
1328
|
+
<dd><p>Return a <a class="reference internal" href="additional_classes.html#snappy.HolonomyGroup" title="snappy.HolonomyGroup"><code class="xref py py-class docutils literal notranslate"><span class="pre">HolonomyGroup</span></code></a> representing the fundamental group of
|
1158
1329
|
the manifold, together with its holonomy representation. If
|
1159
1330
|
integer Dehn surgery parameters have been set, then the
|
1160
1331
|
corresponding peripheral elements are killed.</p>
|
@@ -1190,7 +1361,7 @@ corresponding peripheral elements are killed.</p>
|
|
1190
1361
|
|
1191
1362
|
<dl class="py method">
|
1192
1363
|
<dt class="sig sig-object py" id="snappy.Manifold.gluing_equations">
|
1193
|
-
<span class="sig-name descname"><span class="pre">gluing_equations</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">form</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'log'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.gluing_equations" title="
|
1364
|
+
<span class="sig-name descname"><span class="pre">gluing_equations</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">form</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'log'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.gluing_equations" title="Link to this definition"></a></dt>
|
1194
1365
|
<dd><p>In the default mode, this function returns a matrix with rows
|
1195
1366
|
of the form</p>
|
1196
1367
|
<blockquote>
|
@@ -1231,9 +1402,8 @@ function returns a list of tuples of the form:</p>
|
|
1231
1402
|
|
1232
1403
|
<dl class="py method">
|
1233
1404
|
<dt class="sig sig-object py" id="snappy.Manifold.gluing_equations_pgl">
|
1234
|
-
<span class="sig-name descname"><span class="pre">gluing_equations_pgl</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">N</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">2</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">equation_type</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'all'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.gluing_equations_pgl" title="
|
1235
|
-
<dd><p>
|
1236
|
-
<p>Returns a NeumannZagierTypeEquations object that contains a matrix
|
1405
|
+
<span class="sig-name descname"><span class="pre">gluing_equations_pgl</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">N</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">2</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">equation_type</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'all'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.gluing_equations_pgl" title="Link to this definition"></a></dt>
|
1406
|
+
<dd><p>Returns a NeumannZagierTypeEquations object that contains a matrix
|
1237
1407
|
encoding the gluing equations for boundary-parabolic PGL(N,C)
|
1238
1408
|
representations together with explanations of the meaning
|
1239
1409
|
of the rows and the columns of the matrix.</p>
|
@@ -1242,7 +1412,7 @@ as described in
|
|
1242
1412
|
Stavros Garoufalidis, Matthias Goerner, Christian K. Zickert:
|
1243
1413
|
“Gluing Equations for PGL(n,C)-Representations of 3-Manifolds”
|
1244
1414
|
(<a class="reference external" href="http://arxiv.org/abs/1207.6711">http://arxiv.org/abs/1207.6711</a>).</p>
|
1245
|
-
<p>The result of the
|
1415
|
+
<p>The result of the <a class="reference internal" href="#snappy.Manifold.gluing_equations" title="snappy.Manifold.gluing_equations"><code class="xref py py-meth docutils literal notranslate"><span class="pre">gluing_equations()</span></code></a> can be obtained from
|
1246
1416
|
the general method by:</p>
|
1247
1417
|
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">'m004'</span><span class="p">)</span>
|
1248
1418
|
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">gluing_equations_pgl</span><span class="p">()</span><span class="o">.</span><span class="n">matrix</span>
|
@@ -1267,17 +1437,17 @@ the columns and rows:</p>
|
|
1267
1437
|
</div>
|
1268
1438
|
<p>The first row of the matrix means that the edge equation for
|
1269
1439
|
edge 0 is</p>
|
1270
|
-
<
|
1271
|
-
|
1272
|
-
</div></blockquote>
|
1440
|
+
<div class="math notranslate nohighlight">
|
1441
|
+
\[{z_{0000,0}}^2 * z'_{0000,0} * z_{0000,1} * {z''_{0000,1}}^2 = 1.\]</div>
|
1273
1442
|
<p>Similarly, the next row encodes the edge equation for the other edge
|
1274
1443
|
and the next two rows encode peripheral equations.</p>
|
1275
|
-
<p>Following the SnapPy convention, a z denotes the cross ratio
|
1276
|
-
edge (0,1), a zp the cross ratio
|
1277
|
-
|
1444
|
+
<p>Following the SnapPy convention, a <code class="docutils literal notranslate"><span class="pre">z</span></code> denotes the cross ratio
|
1445
|
+
<span class="math notranslate nohighlight">\(z\)</span> at the edge (0,1), a <code class="docutils literal notranslate"><span class="pre">zp</span></code> the cross ratio <span class="math notranslate nohighlight">\(z'\)</span> at
|
1446
|
+
the edge (0,2) and a <code class="docutils literal notranslate"><span class="pre">zpp</span></code> the cross
|
1447
|
+
ratio <span class="math notranslate nohighlight">\(z''\)</span> at the edge (1,2). The entire symbol <code class="docutils literal notranslate"><span class="pre">z_xxxx_y</span></code> then
|
1278
1448
|
denotes the cross ratio belonging to the subsimplex at integral
|
1279
|
-
point xxxx (always 0000 for N = 2) of the simplex
|
1280
|
-
SnapPy convention is different from the paper
|
1449
|
+
point <code class="docutils literal notranslate"><span class="pre">xxxx</span></code> (always <code class="docutils literal notranslate"><span class="pre">0000</span></code> for <code class="docutils literal notranslate"><span class="pre">N</span> <span class="pre">=</span> <span class="pre">2</span></code>) of the simplex <code class="docutils literal notranslate"><span class="pre">y</span></code>.</p>
|
1450
|
+
<p>Note: the SnapPy convention is different from the paper
|
1281
1451
|
mentioned above, e.g., compare
|
1282
1452
|
kernel_code/edge_classes.c with Figure 3. We follow the SnapPy
|
1283
1453
|
convention here so that all computations done in SnapPy are
|
@@ -1290,20 +1460,20 @@ consistent.</p>
|
|
1290
1460
|
</pre></div>
|
1291
1461
|
</div>
|
1292
1462
|
<p>A subset of all gluing equations can be obtained by setting the
|
1293
|
-
equation_type
|
1463
|
+
<code class="docutils literal notranslate"><span class="pre">equation_type</span></code>:</p>
|
1294
1464
|
<ul class="simple">
|
1295
|
-
<li><p>all gluing equations:
|
1296
|
-
<li><p>non-peripheral equations:
|
1465
|
+
<li><p>all gluing equations: <code class="docutils literal notranslate"><span class="pre">all</span></code></p></li>
|
1466
|
+
<li><p>non-peripheral equations: <code class="docutils literal notranslate"><span class="pre">non_peripheral</span></code></p>
|
1297
1467
|
<ul>
|
1298
|
-
<li><p>edge gluing equations:
|
1299
|
-
<li><p>face gluing equations:
|
1300
|
-
<li><p>internal gluing equations:
|
1468
|
+
<li><p>edge gluing equations: <code class="docutils literal notranslate"><span class="pre">edge</span></code></p></li>
|
1469
|
+
<li><p>face gluing equations: <code class="docutils literal notranslate"><span class="pre">face</span></code></p></li>
|
1470
|
+
<li><p>internal gluing equations: <code class="docutils literal notranslate"><span class="pre">internal</span></code></p></li>
|
1301
1471
|
</ul>
|
1302
1472
|
</li>
|
1303
|
-
<li><p>cusp gluing equations:
|
1473
|
+
<li><p>cusp gluing equations: <code class="docutils literal notranslate"><span class="pre">peripheral</span></code></p>
|
1304
1474
|
<ul>
|
1305
|
-
<li><p>cusp gluing equations for meridians:
|
1306
|
-
<li><p>cusp gluing equations for longitudes:
|
1475
|
+
<li><p>cusp gluing equations for meridians: <code class="docutils literal notranslate"><span class="pre">meridian</span></code></p></li>
|
1476
|
+
<li><p>cusp gluing equations for longitudes: <code class="docutils literal notranslate"><span class="pre">longitude</span></code></p></li>
|
1307
1477
|
</ul>
|
1308
1478
|
</li>
|
1309
1479
|
</ul>
|
@@ -1311,8 +1481,8 @@ equation_type:</p>
|
|
1311
1481
|
|
1312
1482
|
<dl class="py method">
|
1313
1483
|
<dt class="sig sig-object py" id="snappy.Manifold.has_finite_vertices">
|
1314
|
-
<span class="sig-name descname"><span class="pre">has_finite_vertices</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.has_finite_vertices" title="
|
1315
|
-
<dd><p>Returns True if and only if the triangulation has finite (non-ideal)
|
1484
|
+
<span class="sig-name descname"><span class="pre">has_finite_vertices</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">bool</span></span></span><a class="headerlink" href="#snappy.Manifold.has_finite_vertices" title="Link to this definition"></a></dt>
|
1485
|
+
<dd><p>Returns <code class="docutils literal notranslate"><span class="pre">True</span></code> if and only if the triangulation has finite (non-ideal)
|
1316
1486
|
vertices.</p>
|
1317
1487
|
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">T</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s2">"m004"</span><span class="p">)</span>
|
1318
1488
|
<span class="gp">>>> </span><span class="n">T</span><span class="o">.</span><span class="n">has_finite_vertices</span><span class="p">()</span>
|
@@ -1334,7 +1504,7 @@ finite vertices:</p>
|
|
1334
1504
|
|
1335
1505
|
<dl class="py method">
|
1336
1506
|
<dt class="sig sig-object py" id="snappy.Manifold.high_precision">
|
1337
|
-
<span class="sig-name descname"><span class="pre">high_precision</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.high_precision" title="
|
1507
|
+
<span class="sig-name descname"><span class="pre">high_precision</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.high_precision" title="Link to this definition"></a></dt>
|
1338
1508
|
<dd><p>Return a high precision version of this manifold.</p>
|
1339
1509
|
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">'m004'</span><span class="p">)</span>
|
1340
1510
|
<span class="gp">>>> </span><span class="nb">type</span><span class="p">(</span><span class="n">M</span><span class="o">.</span><span class="n">high_precision</span><span class="p">())</span>
|
@@ -1345,7 +1515,7 @@ finite vertices:</p>
|
|
1345
1515
|
|
1346
1516
|
<dl class="py method">
|
1347
1517
|
<dt class="sig sig-object py" id="snappy.Manifold.holonomy_matrix_entries">
|
1348
|
-
<span class="sig-name descname"><span class="pre">holonomy_matrix_entries</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">fundamental_group_args</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[]</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">match_kernel</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.holonomy_matrix_entries" title="
|
1518
|
+
<span class="sig-name descname"><span class="pre">holonomy_matrix_entries</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">fundamental_group_args</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[]</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">match_kernel</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.holonomy_matrix_entries" title="Link to this definition"></a></dt>
|
1349
1519
|
<dd><p>The entries of the matrices of the holonomy as list of ApproximateAlgebraicNumbers
|
1350
1520
|
(four consecutive numbers per matrix). The numbers are guaranteed to lie in the
|
1351
1521
|
trace field only if match_kernel = False:</p>
|
@@ -1362,7 +1532,7 @@ trace field only if match_kernel = False:</p>
|
|
1362
1532
|
|
1363
1533
|
<dl class="py method">
|
1364
1534
|
<dt class="sig sig-object py" id="snappy.Manifold.homological_longitude">
|
1365
|
-
<span class="sig-name descname"><span class="pre">homological_longitude</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cusp</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.homological_longitude" title="
|
1535
|
+
<span class="sig-name descname"><span class="pre">homological_longitude</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cusp</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.homological_longitude" title="Link to this definition"></a></dt>
|
1366
1536
|
<dd><p>Returns the peripheral curve in the given cusp, if any, which is
|
1367
1537
|
homologically trivial (with rational coefficients) in the manifold:</p>
|
1368
1538
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">'m015'</span><span class="p">)</span>
|
@@ -1397,8 +1567,8 @@ the manifold, an exception is raised:</p>
|
|
1397
1567
|
|
1398
1568
|
<dl class="py method">
|
1399
1569
|
<dt class="sig sig-object py" id="snappy.Manifold.homology">
|
1400
|
-
<span class="sig-name descname"><span class="pre">homology</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.homology" title="
|
1401
|
-
<dd><p>Returns an AbelianGroup representing the first integral
|
1570
|
+
<span class="sig-name descname"><span class="pre">homology</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><a class="reference internal" href="additional_classes.html#snappy.AbelianGroup" title="SnapPy.AbelianGroup"><span class="pre">AbelianGroup</span></a></span></span><a class="headerlink" href="#snappy.Manifold.homology" title="Link to this definition"></a></dt>
|
1571
|
+
<dd><p>Returns an <a class="reference internal" href="additional_classes.html#snappy.AbelianGroup" title="snappy.AbelianGroup"><code class="xref py py-class docutils literal notranslate"><span class="pre">AbelianGroup</span></code></a> representing the first integral
|
1402
1572
|
homology group of the underlying (Dehn filled) manifold.</p>
|
1403
1573
|
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">'m003'</span><span class="p">)</span>
|
1404
1574
|
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">homology</span><span class="p">()</span>
|
@@ -1409,7 +1579,7 @@ homology group of the underlying (Dehn filled) manifold.</p>
|
|
1409
1579
|
|
1410
1580
|
<dl class="py method">
|
1411
1581
|
<dt class="sig sig-object py" id="snappy.Manifold.hyperbolic_SLN_torsion">
|
1412
|
-
<span class="sig-name descname"><span class="pre">hyperbolic_SLN_torsion</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">N</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bits_prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">100</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.hyperbolic_SLN_torsion" title="
|
1582
|
+
<span class="sig-name descname"><span class="pre">hyperbolic_SLN_torsion</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">N</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bits_prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">100</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.hyperbolic_SLN_torsion" title="Link to this definition"></a></dt>
|
1413
1583
|
<dd><p>Compute the torsion polynomial of the holonomy representation lifted
|
1414
1584
|
to SL(2, C) and then followed by the irreducible representation
|
1415
1585
|
from SL(2, C) -> SL(N, C):</p>
|
@@ -1422,7 +1592,7 @@ from SL(2, C) -> SL(N, C):</p>
|
|
1422
1592
|
|
1423
1593
|
<dl class="py method">
|
1424
1594
|
<dt class="sig sig-object py" id="snappy.Manifold.hyperbolic_adjoint_torsion">
|
1425
|
-
<span class="sig-name descname"><span class="pre">hyperbolic_adjoint_torsion</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">bits_prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">100</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.hyperbolic_adjoint_torsion" title="
|
1595
|
+
<span class="sig-name descname"><span class="pre">hyperbolic_adjoint_torsion</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">bits_prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">100</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.hyperbolic_adjoint_torsion" title="Link to this definition"></a></dt>
|
1426
1596
|
<dd><p>Computes the torsion polynomial of the adjoint representation
|
1427
1597
|
a la Dubois-Yamaguichi. This is not a sign-refined computation
|
1428
1598
|
so the result is only defined up to sign, not to mention a power
|
@@ -1439,7 +1609,7 @@ of the variable ‘a’:</p>
|
|
1439
1609
|
|
1440
1610
|
<dl class="py method">
|
1441
1611
|
<dt class="sig sig-object py" id="snappy.Manifold.hyperbolic_torsion">
|
1442
|
-
<span class="sig-name descname"><span class="pre">hyperbolic_torsion</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">bits_prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">100</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">all_lifts</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">wada_conventions</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">phi</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.hyperbolic_torsion" title="
|
1612
|
+
<span class="sig-name descname"><span class="pre">hyperbolic_torsion</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">bits_prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">100</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">all_lifts</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">wada_conventions</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">phi</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.hyperbolic_torsion" title="Link to this definition"></a></dt>
|
1443
1613
|
<dd><p>Computes the hyperbolic torsion polynomial as defined in
|
1444
1614
|
<a class="reference external" href="http://arxiv.org/abs/1108.3045">[DFJ]</a>:</p>
|
1445
1615
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">'K11n42'</span><span class="p">)</span>
|
@@ -1454,7 +1624,7 @@ of the variable ‘a’:</p>
|
|
1454
1624
|
|
1455
1625
|
<dl class="py method">
|
1456
1626
|
<dt class="sig sig-object py" id="snappy.Manifold.identify">
|
1457
|
-
<span class="sig-name descname"><span class="pre">identify</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">extends_to_link</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.identify" title="
|
1627
|
+
<span class="sig-name descname"><span class="pre">identify</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">extends_to_link</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.identify" title="Link to this definition"></a></dt>
|
1458
1628
|
<dd><p>Looks for the manifold in all of the SnapPy databases.
|
1459
1629
|
For hyperbolic manifolds this is done by searching for isometries:</p>
|
1460
1630
|
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">'m125'</span><span class="p">)</span>
|
@@ -1480,14 +1650,9 @@ because of how the kernel code works:</p>
|
|
1480
1650
|
</div>
|
1481
1651
|
</dd></dl>
|
1482
1652
|
|
1483
|
-
<dl class="py method">
|
1484
|
-
<dt class="sig sig-object py" id="snappy.Manifold.init_hyperbolic_structure">
|
1485
|
-
<span class="sig-name descname"><span class="pre">init_hyperbolic_structure</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">force_recompute</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.init_hyperbolic_structure" title="Permalink to this definition"></a></dt>
|
1486
|
-
<dd></dd></dl>
|
1487
|
-
|
1488
1653
|
<dl class="py method">
|
1489
1654
|
<dt class="sig sig-object py" id="snappy.Manifold.inside_view">
|
1490
|
-
<span class="sig-name descname"><span class="pre">inside_view</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cohomology_class</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">geodesics</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[]</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.inside_view" title="
|
1655
|
+
<span class="sig-name descname"><span class="pre">inside_view</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cohomology_class</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">geodesics</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Sequence</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">[]</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.inside_view" title="Link to this definition"></a></dt>
|
1491
1656
|
<dd><p>Show raytraced inside view of hyperbolic manifold. See
|
1492
1657
|
<a class="reference external" href="https://im.icerm.brown.edu/portfolio/snappy-views/">images</a>
|
1493
1658
|
and <a class="reference external" href="https://youtu.be/CAERhmUCkRs">demo video</a>.</p>
|
@@ -1500,10 +1665,10 @@ and <a class="reference external" href="https://youtu.be/CAERhmUCkRs">demo video
|
|
1500
1665
|
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">inside_view</span><span class="p">(</span><span class="n">cohomology_class</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span>
|
1501
1666
|
</pre></div>
|
1502
1667
|
</div>
|
1503
|
-
<p>The cohomology class in H^2(M,
|
1504
|
-
fractal can be specified as a cocycle or using an automatically
|
1505
|
-
basis (of, say, length <code class="docutils literal notranslate"><span class="pre">n</span></code>). Thus, <code class="docutils literal notranslate"><span class="pre">cohomology_class</span></code> can be
|
1506
|
-
the following.</p>
|
1668
|
+
<p>The cohomology class in <span class="math notranslate nohighlight">\(H^2(M, \partial M; \mathbb{R})\)</span> producing the
|
1669
|
+
cohomology fractal can be specified as a cocycle or using an automatically
|
1670
|
+
computed basis (of, say, length <code class="docutils literal notranslate"><span class="pre">n</span></code>). Thus, <code class="docutils literal notranslate"><span class="pre">cohomology_class</span></code> can be
|
1671
|
+
one of the following.</p>
|
1507
1672
|
<ul class="simple">
|
1508
1673
|
<li><p>An integer <code class="docutils literal notranslate"><span class="pre">i</span></code> between 0 and <code class="docutils literal notranslate"><span class="pre">n</span></code> - 1 to pick the <code class="docutils literal notranslate"><span class="pre">i</span></code>-th basis
|
1509
1674
|
vector.</p></li>
|
@@ -1511,11 +1676,16 @@ vector.</p></li>
|
|
1511
1676
|
combination of basis vectors.</p></li>
|
1512
1677
|
<li><p>A weight for each face of each tetrahedron.</p></li>
|
1513
1678
|
</ul>
|
1679
|
+
<p>Geodesics can be specified as words in the unsimplified fundamental group:</p>
|
1680
|
+
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">"m004"</span><span class="p">)</span>
|
1681
|
+
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">inside_view</span><span class="p">(</span><span class="n">geodesics</span><span class="o">=</span><span class="p">[</span><span class="s1">'a'</span><span class="p">,</span> <span class="s1">'bC'</span><span class="p">])</span>
|
1682
|
+
</pre></div>
|
1683
|
+
</div>
|
1514
1684
|
</dd></dl>
|
1515
1685
|
|
1516
1686
|
<dl class="py method">
|
1517
1687
|
<dt class="sig sig-object py" id="snappy.Manifold.invariant_trace_field_gens">
|
1518
|
-
<span class="sig-name descname"><span class="pre">invariant_trace_field_gens</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">fundamental_group_args</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[]</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.invariant_trace_field_gens" title="
|
1688
|
+
<span class="sig-name descname"><span class="pre">invariant_trace_field_gens</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">fundamental_group_args</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[]</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.invariant_trace_field_gens" title="Link to this definition"></a></dt>
|
1519
1689
|
<dd><p>The generators of the trace field as ApproximateAlgebraicNumbers. Can be
|
1520
1690
|
used to compute the tetrahedra field, where the first two parameters
|
1521
1691
|
are bits of precision and maximum degree of the field:</p>
|
@@ -1530,9 +1700,9 @@ are bits of precision and maximum degree of the field:</p>
|
|
1530
1700
|
|
1531
1701
|
<dl class="py method">
|
1532
1702
|
<dt class="sig sig-object py" id="snappy.Manifold.is_isometric_to">
|
1533
|
-
<span class="sig-name descname"><span class="pre">is_isometric_to</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">Manifold</span>
|
1534
|
-
<dd><p>Returns True if M and N are isometric, False if they not.
|
1535
|
-
RuntimeError is raised in cases where the SnapPea kernel fails
|
1703
|
+
<span class="sig-name descname"><span class="pre">is_isometric_to</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#snappy.Manifold" title="snappy.Manifold"><span class="pre">Manifold</span></a><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">ManifoldHP</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">return_isometries</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">bool</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">List</span><span class="p"><span class="pre">[</span></span><span class="pre">Isometry</span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#snappy.Manifold.is_isometric_to" title="Link to this definition"></a></dt>
|
1704
|
+
<dd><p>Returns <code class="docutils literal notranslate"><span class="pre">True</span></code> if M and N are isometric, <code class="docutils literal notranslate"><span class="pre">False</span></code> if they not.
|
1705
|
+
A <code class="docutils literal notranslate"><span class="pre">RuntimeError</span></code> is raised in cases where the SnapPea kernel fails
|
1536
1706
|
to determine either answer. (This is fairly common for closed
|
1537
1707
|
manifolds.)</p>
|
1538
1708
|
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">'m004'</span><span class="p">)</span>
|
@@ -1561,14 +1731,14 @@ acts on the left. That is, the two <em>columns</em> of the matrix
|
|
1561
1731
|
give the image of the meridian and longitude respectively. In
|
1562
1732
|
the above example, the meridian of cusp 0 is sent to the
|
1563
1733
|
meridian of cusp 1.</p>
|
1564
|
-
<p>Note: The answer True is rigorous, but the answer False may
|
1734
|
+
<p>Note: The answer <code class="docutils literal notranslate"><span class="pre">True</span></code> is rigorous, but the answer <code class="docutils literal notranslate"><span class="pre">False</span></code> may
|
1565
1735
|
not be as there could be numerical errors resulting in finding
|
1566
1736
|
an incorrect canonical triangulation.</p>
|
1567
1737
|
</dd></dl>
|
1568
1738
|
|
1569
1739
|
<dl class="py method">
|
1570
1740
|
<dt class="sig sig-object py" id="snappy.Manifold.is_orientable">
|
1571
|
-
<span class="sig-name descname"><span class="pre">is_orientable</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.is_orientable" title="
|
1741
|
+
<span class="sig-name descname"><span class="pre">is_orientable</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">bool</span></span></span><a class="headerlink" href="#snappy.Manifold.is_orientable" title="Link to this definition"></a></dt>
|
1572
1742
|
<dd><p>Return whether the underlying 3-manifold is orientable.</p>
|
1573
1743
|
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">'x124'</span><span class="p">)</span>
|
1574
1744
|
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">is_orientable</span><span class="p">()</span>
|
@@ -1579,10 +1749,11 @@ an incorrect canonical triangulation.</p>
|
|
1579
1749
|
|
1580
1750
|
<dl class="py method">
|
1581
1751
|
<dt class="sig sig-object py" id="snappy.Manifold.is_two_bridge">
|
1582
|
-
<span class="sig-name descname"><span class="pre">is_two_bridge</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.is_two_bridge" title="
|
1752
|
+
<span class="sig-name descname"><span class="pre">is_two_bridge</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">bool</span></span></span><a class="headerlink" href="#snappy.Manifold.is_two_bridge" title="Link to this definition"></a></dt>
|
1583
1753
|
<dd><p>If the manifold is the complement of a two-bridge knot or link
|
1584
|
-
in S^3
|
1585
|
-
fraction describing the link.
|
1754
|
+
in <span class="math notranslate nohighlight">\(S^3\)</span>, then this method returns <span class="math notranslate nohighlight">\((p,q)\)</span> where
|
1755
|
+
<span class="math notranslate nohighlight">\(p/q\)</span> is the fraction describing the link.
|
1756
|
+
Otherwise, returns <code class="docutils literal notranslate"><span class="pre">False</span></code>.</p>
|
1586
1757
|
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">'m004'</span><span class="p">)</span>
|
1587
1758
|
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">is_two_bridge</span><span class="p">()</span>
|
1588
1759
|
<span class="go">(2, 5)</span>
|
@@ -1591,57 +1762,138 @@ fraction describing the link. Otherwise, returns False.</p>
|
|
1591
1762
|
<span class="go">False</span>
|
1592
1763
|
</pre></div>
|
1593
1764
|
</div>
|
1594
|
-
<p>Note: An answer of
|
1595
|
-
|
1765
|
+
<p>Note: An answer of <code class="docutils literal notranslate"><span class="pre">True</span></code> is rigorous, but not the answer
|
1766
|
+
<code class="docutils literal notranslate"><span class="pre">False</span></code>, as there could be numerical errors resulting in
|
1596
1767
|
finding an incorrect canonical triangulation.</p>
|
1597
1768
|
</dd></dl>
|
1598
1769
|
|
1599
1770
|
<dl class="py method">
|
1600
1771
|
<dt class="sig sig-object py" id="snappy.Manifold.isometry_signature">
|
1601
|
-
<span class="sig-name descname"><span class="pre">isometry_signature</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">of_link</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verified</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">interval_bits_precs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[53,</span> <span class="pre">212]</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">exact_bits_prec_and_degrees</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[(212,</span> <span class="pre">10),</span> <span class="pre">(1000,</span> <span class="pre">20),</span> <span class="pre">(2000,</span> <span class="pre">20)]</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.isometry_signature" title="
|
1602
|
-
<dd><p>
|
1603
|
-
|
1604
|
-
|
1605
|
-
<
|
1606
|
-
<
|
1607
|
-
<span class="
|
1608
|
-
|
1609
|
-
</
|
1610
|
-
|
1611
|
-
|
1612
|
-
|
1613
|
-
|
1614
|
-
<
|
1615
|
-
|
1616
|
-
</
|
1617
|
-
|
1618
|
-
<p>
|
1619
|
-
|
1620
|
-
<
|
1621
|
-
|
1622
|
-
|
1623
|
-
<span class="
|
1624
|
-
<
|
1625
|
-
|
1772
|
+
<span class="sig-name descname"><span class="pre">isometry_signature</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">of_link</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ignore_orientation</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verified</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">interval_bits_precs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[53,</span> <span class="pre">212]</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">exact_bits_prec_and_degrees</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[(212,</span> <span class="pre">10),</span> <span class="pre">(1000,</span> <span class="pre">20),</span> <span class="pre">(2000,</span> <span class="pre">20)]</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">str</span></span></span><a class="headerlink" href="#snappy.Manifold.isometry_signature" title="Link to this definition"></a></dt>
|
1773
|
+
<dd><p>Returns the “isometry signature”, a complete invariant of the hyperbolic
|
1774
|
+
3-manifold obtained by applying the Dehn-fillings.
|
1775
|
+
The isometry signature is always a (decorated) isomorphism signature, see
|
1776
|
+
<a class="reference internal" href="#snappy.Manifold.triangulation_isosig" title="snappy.Manifold.triangulation_isosig"><code class="xref py py-meth docutils literal notranslate"><span class="pre">triangulation_isosig()</span></code></a>, and was introduced in
|
1777
|
+
<a class="reference external" href="http://arxiv.org/abs/1502.00383">Goerner ‘16</a>.</p>
|
1778
|
+
<p>Depending on <code class="xref py py-attr docutils literal notranslate"><span class="pre">ignore_orientation</span></code>, it is a complete invariant of
|
1779
|
+
either the oriented (if orientable) or unoriented hyperbolic 3-manifold.
|
1780
|
+
If <code class="xref py py-attr docutils literal notranslate"><span class="pre">of_link</span> <span class="pre">=</span> <span class="pre">True</span></code> is specified, the signature is decorated by the
|
1781
|
+
unoriented peripheral curves (aka meridian and longitude, up to homotopy).
|
1782
|
+
If the 3-manifold arises as a link complement, the decorated isometry
|
1783
|
+
signature obtained with <code class="xref py py-attr docutils literal notranslate"><span class="pre">of_link</span> <span class="pre">=</span> <span class="pre">True</span></code> is a complete invariant of
|
1784
|
+
the link.</p>
|
1785
|
+
<p>The isometry signature is computed differently based on whether there
|
1786
|
+
is at least one unfilled cusp.</p>
|
1787
|
+
<p><strong>Cusped manifolds</strong></p>
|
1788
|
+
<p>If there is at least one unfilled cusped, we are in the cusped case.</p>
|
1789
|
+
<p>Here is an example of two links having isometric (hyperbolic) complements:</p>
|
1790
|
+
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">"L5a1"</span><span class="p">)</span>
|
1791
|
+
<span class="gp">>>> </span><span class="n">N</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">"L7n2"</span><span class="p">)</span>
|
1792
|
+
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">isometry_signature</span><span class="p">()</span>
|
1793
|
+
<span class="go">'eLPkbdcddhgggb'</span>
|
1794
|
+
<span class="gp">>>> </span><span class="n">N</span><span class="o">.</span><span class="n">isometry_signature</span><span class="p">()</span>
|
1795
|
+
<span class="go">'eLPkbdcddhgggb'</span>
|
1796
|
+
</pre></div>
|
1797
|
+
</div>
|
1798
|
+
<p>The complements do have opposite handedness though:</p>
|
1799
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">isometry_signature</span><span class="p">(</span><span class="n">ignore_orientation</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
1800
|
+
<span class="go">'eLPkbdcddxvvcv'</span>
|
1801
|
+
<span class="gp">>>> </span><span class="n">N</span><span class="o">.</span><span class="n">isometry_signature</span><span class="p">(</span><span class="n">ignore_orientation</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
1802
|
+
<span class="go">'eLPkbdcddhgggb'</span>
|
1803
|
+
</pre></div>
|
1804
|
+
</div>
|
1805
|
+
<p>We can show that the two links are distinct:</p>
|
1806
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">isometry_signature</span><span class="p">(</span><span class="n">of_link</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span>
|
1626
1807
|
<span class="go">'eLPkbdcddhgggb_baCbbaCb'</span>
|
1627
|
-
<span class="gp">>>> </span><span class="n">
|
1808
|
+
<span class="gp">>>> </span><span class="n">N</span><span class="o">.</span><span class="n">isometry_signature</span><span class="p">(</span><span class="n">of_link</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span>
|
1628
1809
|
<span class="go">'eLPkbdcddhgggb_bBcBbaCb'</span>
|
1629
1810
|
</pre></div>
|
1630
1811
|
</div>
|
1631
|
-
<p>
|
1632
|
-
|
1633
|
-
<p>
|
1634
|
-
|
1635
|
-
|
1636
|
-
<
|
1637
|
-
<span class="
|
1638
|
-
</pre></div>
|
1639
|
-
</div>
|
1812
|
+
<p>If we Dehn-fill some cusps, the method uses the filled triangulation.
|
1813
|
+
Here, we Dehn-fill the Whitehead link to get the figure-eight knot:</p>
|
1814
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">dehn_fill</span><span class="p">((</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">),</span> <span class="mi">0</span><span class="p">)</span>
|
1815
|
+
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">isometry_signature</span><span class="p">(</span><span class="n">of_link</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span>
|
1816
|
+
<span class="go">'cPcbbbiht_bacb'</span>
|
1817
|
+
<span class="gp">>>> </span><span class="n">Manifold</span><span class="p">(</span><span class="s2">"4_1"</span><span class="p">)</span><span class="o">.</span><span class="n">isometry_signature</span><span class="p">(</span><span class="n">of_link</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span>
|
1818
|
+
<span class="go">'cPcbbbiht_bacb'</span>
|
1819
|
+
</pre></div>
|
1820
|
+
</div>
|
1821
|
+
<p>In general, the isometry signature is the isomorphism signature (see
|
1822
|
+
<a class="reference internal" href="#snappy.Manifold.triangulation_isosig" title="snappy.Manifold.triangulation_isosig"><code class="xref py py-meth docutils literal notranslate"><span class="pre">triangulation_isosig()</span></code></a>) of the
|
1823
|
+
<a class="reference internal" href="#snappy.Manifold.canonical_retriangulation" title="snappy.Manifold.canonical_retriangulation"><code class="xref py py-meth docutils literal notranslate"><span class="pre">canonical_retriangulation()</span></code></a> of the
|
1824
|
+
<a class="reference internal" href="#snappy.Manifold.filled_triangulation" title="snappy.Manifold.filled_triangulation"><code class="xref py py-meth docutils literal notranslate"><span class="pre">filled_triangulation()</span></code></a>:</p>
|
1825
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">T</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">filled_triangulation</span><span class="p">()</span><span class="o">.</span><span class="n">canonical_retriangulation</span><span class="p">()</span>
|
1826
|
+
<span class="gp">>>> </span><span class="n">T</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span><span class="n">ignore_cusp_ordering</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
|
1827
|
+
<span class="gp">... </span> <span class="n">ignore_curve_orientations</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span>
|
1828
|
+
<span class="go">'cPcbbbiht_bacb'</span>
|
1829
|
+
</pre></div>
|
1830
|
+
</div>
|
1831
|
+
<p><strong>Closed manifolds</strong></p>
|
1832
|
+
<p>If all cusps are filled, we are in the closed case. In this case, the
|
1833
|
+
isometry signature gives the resulting closed hyperbolic 3-manifold as
|
1834
|
+
canonical surgery on a hyperbolic 1-cusped manifold (which is encoded by
|
1835
|
+
its isometry signature). Only orientable manifolds are supported in the
|
1836
|
+
closed case.</p>
|
1837
|
+
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">"v2000(1,3)"</span><span class="p">)</span>
|
1838
|
+
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">isometry_signature</span><span class="p">()</span>
|
1839
|
+
<span class="go">'fLLQcacdedenbxxrr(-7,12)'</span>
|
1840
|
+
</pre></div>
|
1841
|
+
</div>
|
1842
|
+
<p>The following code illustrates how the isometry signature is computed:</p>
|
1843
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">length_spectrum_alt</span><span class="p">(</span><span class="n">count</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
|
1844
|
+
<span class="go">[Length Core curve Word</span>
|
1845
|
+
<span class="go"> 0.06491027903143 - 2.63765810995071*I - d,</span>
|
1846
|
+
<span class="go"> 0.49405010583448 + 2.38451103485706*I - a]</span>
|
1847
|
+
<span class="gp">>>> </span><span class="n">K</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">drill_word</span><span class="p">(</span><span class="s1">'d'</span><span class="p">)</span><span class="o">.</span><span class="n">filled_triangulation</span><span class="p">()</span><span class="o">.</span><span class="n">canonical_retriangulation</span><span class="p">()</span>
|
1848
|
+
<span class="gp">>>> </span><span class="n">K</span><span class="o">.</span><span class="n">dehn_fill</span><span class="p">((</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">),</span> <span class="mi">0</span><span class="p">)</span>
|
1849
|
+
<span class="gp">>>> </span><span class="n">K</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span><span class="n">ignore_cusp_ordering</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">ignore_curves</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
1850
|
+
<span class="go">'fLLQcacdedenbxxrr(-7,12)'</span>
|
1851
|
+
</pre></div>
|
1852
|
+
</div>
|
1853
|
+
<p>Note that there is clearly a unique shortest geodesic in this example.
|
1854
|
+
In general, the method first considers a canonical set of geodesics.
|
1855
|
+
For each such geodesic, it computes a candidate signature as above. It
|
1856
|
+
then picks a canonical signature among the candidates. Further details
|
1857
|
+
can be found in an upcoming paper.</p>
|
1858
|
+
<p><strong>Verified computations</strong></p>
|
1859
|
+
<p>While the isometry signature is purely combinatorial, some intermediate
|
1860
|
+
computations are numerical. Thus, if <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">False</span></code>,
|
1861
|
+
floating-point issues can arise.</p>
|
1862
|
+
<p>The method can be made <a class="reference internal" href="verify.html#verify-primer"><span class="std std-ref">verified</span></a> by passing
|
1863
|
+
<code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">True</span></code>:</p>
|
1864
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">=</span><span class="n">Manifold</span><span class="p">(</span><span class="s2">"m007(4,1)"</span><span class="p">)</span>
|
1865
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">.</span><span class="n">isometry_signature</span><span class="p">(</span><span class="n">verified</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
1866
|
+
<span class="s1">'eLPkbcdddhggsj(3,1)'</span>
|
1867
|
+
</pre></div>
|
1868
|
+
</div>
|
1869
|
+
<p>This method always needs to compute at least one canonical retriangulation.
|
1870
|
+
It can take the same arguments as <a class="reference internal" href="#snappy.Manifold.canonical_retriangulation" title="snappy.Manifold.canonical_retriangulation"><code class="xref py py-meth docutils literal notranslate"><span class="pre">canonical_retriangulation()</span></code></a> and
|
1871
|
+
passes them to <a class="reference internal" href="#snappy.Manifold.canonical_retriangulation" title="snappy.Manifold.canonical_retriangulation"><code class="xref py py-meth docutils literal notranslate"><span class="pre">canonical_retriangulation()</span></code></a> when computing the
|
1872
|
+
verified canonical retriangulation. If the manifold is closed, interval
|
1873
|
+
arithmetic is used when finding and drilling the short geodesics.</p>
|
1874
|
+
<dl class="field-list simple">
|
1875
|
+
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
1876
|
+
<dd class="field-odd"><ul class="simple">
|
1877
|
+
<li><p><strong>of_link</strong> – Also encode the unoriented peripheral curves.
|
1878
|
+
Note that it is not necessary for the manifold to be a link
|
1879
|
+
complement to invoke this flag.
|
1880
|
+
Only relevant in the cusped case.</p></li>
|
1881
|
+
<li><p><strong>ignore_orientation</strong> – Do not encode the orientation of the 3-manifold.</p></li>
|
1882
|
+
<li><p><strong>verified</strong> – Use <a class="reference internal" href="verify.html#verify-primer"><span class="std std-ref">verified computation</span></a>.</p></li>
|
1883
|
+
<li><p><strong>interval_bits_precs</strong> – Passed to <a class="reference internal" href="#snappy.Manifold.canonical_retriangulation" title="snappy.Manifold.canonical_retriangulation"><code class="xref py py-meth docutils literal notranslate"><span class="pre">canonical_retriangulation()</span></code></a> and (in the closed
|
1884
|
+
case) also used when calling <a class="reference internal" href="#snappy.Manifold.length_spectrum_alt_gen" title="snappy.Manifold.length_spectrum_alt_gen"><code class="xref py py-meth docutils literal notranslate"><span class="pre">length_spectrum_alt_gen()</span></code></a> and
|
1885
|
+
<a class="reference internal" href="#snappy.Manifold.drill_word" title="snappy.Manifold.drill_word"><code class="xref py py-meth docutils literal notranslate"><span class="pre">drill_word()</span></code></a> to find and drill the short geodesics.</p></li>
|
1886
|
+
<li><p><strong>exact_bits_prec_and_degrees</strong> – Passed to <a class="reference internal" href="#snappy.Manifold.canonical_retriangulation" title="snappy.Manifold.canonical_retriangulation"><code class="xref py py-meth docutils literal notranslate"><span class="pre">canonical_retriangulation()</span></code></a>.</p></li>
|
1887
|
+
<li><p><strong>verbose</strong> – Print information about finding and drilling the short geodesics.
|
1888
|
+
Also passed to <a class="reference internal" href="#snappy.Manifold.canonical_retriangulation" title="snappy.Manifold.canonical_retriangulation"><code class="xref py py-meth docutils literal notranslate"><span class="pre">canonical_retriangulation()</span></code></a>.</p></li>
|
1889
|
+
</ul>
|
1890
|
+
</dd>
|
1891
|
+
</dl>
|
1640
1892
|
</dd></dl>
|
1641
1893
|
|
1642
1894
|
<dl class="py method">
|
1643
1895
|
<dt class="sig sig-object py" id="snappy.Manifold.isomorphisms_to">
|
1644
|
-
<span class="sig-name descname"><span class="pre">isomorphisms_to</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">Triangulation</span>
|
1896
|
+
<span class="sig-name descname"><span class="pre">isomorphisms_to</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="triangulation.html#snappy.Triangulation" title="snappy.Triangulation"><span class="pre">Triangulation</span></a><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">TriangulationHP</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">List</span><span class="p"><span class="pre">[</span></span><span class="pre">Isometry</span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#snappy.Manifold.isomorphisms_to" title="Link to this definition"></a></dt>
|
1645
1897
|
<dd><p>Returns a complete list of combinatorial isomorphisms between
|
1646
1898
|
the two triangulations:</p>
|
1647
1899
|
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">'5^2_1'</span><span class="p">)</span>
|
@@ -1664,7 +1916,7 @@ meridian of cusp 1.</p>
|
|
1664
1916
|
|
1665
1917
|
<dl class="py method">
|
1666
1918
|
<dt class="sig sig-object py" id="snappy.Manifold.length_spectrum">
|
1667
|
-
<span class="sig-name descname"><span class="pre">length_spectrum</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cutoff</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1.0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">full_rigor</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">grouped</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">include_words</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.length_spectrum" title="
|
1919
|
+
<span class="sig-name descname"><span class="pre">length_spectrum</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cutoff</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1.0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">full_rigor</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">grouped</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">include_words</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.length_spectrum" title="Link to this definition"></a></dt>
|
1668
1920
|
<dd><p>Returns a list of geodesics (with multiplicities) of length
|
1669
1921
|
up to the specified cutoff value. (The default cutoff is 1.0.)</p>
|
1670
1922
|
<p>Here’s a quick example:</p>
|
@@ -1682,19 +1934,250 @@ up to the specified cutoff value. (The default cutoff is 1.0.)</p>
|
|
1682
1934
|
</div>
|
1683
1935
|
</dd></dl>
|
1684
1936
|
|
1937
|
+
<dl class="py method">
|
1938
|
+
<dt class="sig sig-object py" id="snappy.Manifold.length_spectrum_alt">
|
1939
|
+
<span class="sig-name descname"><span class="pre">length_spectrum_alt</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">count</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">max_len</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Any</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bits_prec</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verified</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">List</span><span class="p"><span class="pre">[</span></span><span class="pre">LengthSpectrumGeodesicInfo</span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#snappy.Manifold.length_spectrum_alt" title="Link to this definition"></a></dt>
|
1940
|
+
<dd><p>Returns a list of geodesics. How far this list goes can be specified
|
1941
|
+
by either a cut-off length or a count. The method only supports
|
1942
|
+
orientable manifolds. It is a convenience method for
|
1943
|
+
<a class="reference internal" href="#snappy.Manifold.length_spectrum_alt_gen" title="snappy.Manifold.length_spectrum_alt_gen"><code class="xref py py-meth docutils literal notranslate"><span class="pre">length_spectrum_alt_gen()</span></code></a>.
|
1944
|
+
We refer the reader to
|
1945
|
+
<a class="reference internal" href="#snappy.Manifold.length_spectrum_alt_gen" title="snappy.Manifold.length_spectrum_alt_gen"><code class="xref py py-meth docutils literal notranslate"><span class="pre">length_spectrum_alt_gen()</span></code></a>
|
1946
|
+
for further details not covered here.</p>
|
1947
|
+
<p><strong>Cut-off length</strong></p>
|
1948
|
+
<p>Here is an example where a cut-off length for the geodesics is specified:</p>
|
1949
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">"m202(3,4)(3,4)"</span><span class="p">)</span>
|
1950
|
+
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">length_spectrum_alt</span><span class="p">(</span><span class="n">max_len</span> <span class="o">=</span> <span class="mf">0.5</span><span class="p">)</span>
|
1951
|
+
<span class="go">[Length Core curve Word</span>
|
1952
|
+
<span class="go"> 0.14820741547094 - 1.76955170166922*I Cusp 1 bcDc,</span>
|
1953
|
+
<span class="go"> 0.14820741547097 - 1.76955170166923*I Cusp 0 aabcDabcB]</span>
|
1954
|
+
</pre></div>
|
1955
|
+
</div>
|
1956
|
+
<p>It also supports <a class="reference internal" href="verify.html#verify-primer"><span class="std std-ref">verified</span></a> computations:</p>
|
1957
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: M.length_spectrum_alt(max_len = 0.5, verified = True, bits_prec = 100) # doctest: +SKIP
|
1958
|
+
[Length Core curve Word
|
1959
|
+
0.148207415470948? - 1.76955170166924? *I Cusp 0 aabcDabcB,
|
1960
|
+
0.14820741547094... - 1.76955170166923...*I Cusp 1 bcDc]
|
1961
|
+
</pre></div>
|
1962
|
+
</div>
|
1963
|
+
<p>If <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified=True</span></code>, the returned list is guaranteed to include all
|
1964
|
+
geodesics up to the given cut-off length and might include additional
|
1965
|
+
geodesics.</p>
|
1966
|
+
<p><strong>Count</strong></p>
|
1967
|
+
<p>Here is an example where a count is specified:</p>
|
1968
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">"m202(3,4)(3,4)"</span><span class="p">)</span>
|
1969
|
+
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">length_spectrum_alt</span><span class="p">(</span><span class="n">count</span> <span class="o">=</span> <span class="mi">3</span><span class="p">)</span>
|
1970
|
+
<span class="go">[Length Core curve Word</span>
|
1971
|
+
<span class="go"> 0.14820741547094 - 1.76955170166922*I Cusp 1 bcDc,</span>
|
1972
|
+
<span class="go"> 0.14820741547097 - 1.76955170166923*I Cusp 0 aabcDabcB,</span>
|
1973
|
+
<span class="go"> 0.79356651781096 + 2.65902431489655*I - aB,</span>
|
1974
|
+
<span class="go"> 0.79356651781096 + 2.65902431489655*I - b]</span>
|
1975
|
+
</pre></div>
|
1976
|
+
</div>
|
1977
|
+
<p>Note that the number of geodesics listed might be larger than the given
|
1978
|
+
count. In particular, this happens when the same (real) length appears
|
1979
|
+
multiple times. If <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified=True</span></code>, the returned list is guaranteed
|
1980
|
+
to include the <code class="xref py py-attr docutils literal notranslate"><span class="pre">count</span></code> shortest geodesics and might include additional
|
1981
|
+
geodesics.</p>
|
1982
|
+
<p><strong>Verified systole</strong></p>
|
1983
|
+
<p>Even though, the first reported geodesic might not be the shortest, we
|
1984
|
+
obtain an interval containing the systole as follows, also see
|
1985
|
+
<a class="reference internal" href="#snappy.Manifold.length_spectrum_alt_gen" title="snappy.Manifold.length_spectrum_alt_gen"><code class="xref py py-meth docutils literal notranslate"><span class="pre">length_spectrum_alt_gen()</span></code></a>:</p>
|
1986
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: M = Manifold("m004")
|
1987
|
+
sage: M.length_spectrum_alt(count=1, verified=True, bits_prec=100)[0].length.real() # doctest: +NUMERIC21
|
1988
|
+
1.0870701449957390997853?
|
1989
|
+
</pre></div>
|
1990
|
+
</div>
|
1991
|
+
<dl class="field-list simple">
|
1992
|
+
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
1993
|
+
<dd class="field-odd"><ul class="simple">
|
1994
|
+
<li><p><strong>count</strong> – Number of shortest geodesics to list. The actual result might
|
1995
|
+
contain additional geodesics. Exactly one of <code class="xref py py-attr docutils literal notranslate"><span class="pre">count</span></code> and
|
1996
|
+
<code class="xref py py-attr docutils literal notranslate"><span class="pre">max_len</span></code> has to be specified.</p></li>
|
1997
|
+
<li><p><strong>max_len</strong> – Cut-off length for geodesics. The actual result includes all
|
1998
|
+
geodesics up to the given length and might include additional
|
1999
|
+
geodesics. Exactly one of <code class="xref py py-attr docutils literal notranslate"><span class="pre">count</span></code> and <code class="xref py py-attr docutils literal notranslate"><span class="pre">max_len</span></code> has
|
2000
|
+
to be specified.</p></li>
|
2001
|
+
<li><p><strong>bits_prec</strong> – Precision used for the computation. Increase if computation did
|
2002
|
+
not succeed.</p></li>
|
2003
|
+
<li><p><strong>verified</strong> – Use <a class="reference internal" href="verify.html#verify-primer"><span class="std std-ref">verified computation</span></a>.</p></li>
|
2004
|
+
</ul>
|
2005
|
+
</dd>
|
2006
|
+
<dt class="field-even">Returns<span class="colon">:</span></dt>
|
2007
|
+
<dd class="field-even"><p>A list of geodesics such that the (lower bound of) the real
|
2008
|
+
length is non-decreasing.</p>
|
2009
|
+
</dd>
|
2010
|
+
</dl>
|
2011
|
+
</dd></dl>
|
2012
|
+
|
2013
|
+
<dl class="py method">
|
2014
|
+
<dt class="sig sig-object py" id="snappy.Manifold.length_spectrum_alt_gen">
|
2015
|
+
<span class="sig-name descname"><span class="pre">length_spectrum_alt_gen</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">bits_prec</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verified</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">Sequence</span><span class="p"><span class="pre">[</span></span><span class="pre">LengthSpectrumGeodesicInfo</span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#snappy.Manifold.length_spectrum_alt_gen" title="Link to this definition"></a></dt>
|
2016
|
+
<dd><p>Returns a generator for the geodesics sorted by real length. The method
|
2017
|
+
only supports orientable manifolds.</p>
|
2018
|
+
<p>Here is an example:</p>
|
2019
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">"m202(3,4)(0,0)"</span><span class="p">)</span>
|
2020
|
+
<span class="gp">>>> </span><span class="n">spec</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">length_spectrum_alt_gen</span><span class="p">()</span>
|
2021
|
+
<span class="gp">>>> </span><span class="nb">next</span><span class="p">(</span><span class="n">spec</span><span class="p">)</span>
|
2022
|
+
<span class="go">Length Core curve Word</span>
|
2023
|
+
<span class="go">0.14742465268512 - 1.78287093565202*I Cusp 0 aabcDabcB</span>
|
2024
|
+
<span class="gp">>>> </span><span class="nb">next</span><span class="p">(</span><span class="n">spec</span><span class="p">)</span>
|
2025
|
+
<span class="go">0.81161414965958 + 2.72911699294426*I - b</span>
|
2026
|
+
<span class="gp">>>> </span><span class="nb">next</span><span class="p">(</span><span class="n">spec</span><span class="p">)</span>
|
2027
|
+
<span class="go">0.84163270359334 + 2.61245944742151*I - aB</span>
|
2028
|
+
</pre></div>
|
2029
|
+
</div>
|
2030
|
+
<p>Note that the shortest geodesic in the above example happens to be the
|
2031
|
+
core curve of the filled cusp (Cusp 0).</p>
|
2032
|
+
<p>Access just the length or word:</p>
|
2033
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">g</span> <span class="o">=</span> <span class="nb">next</span><span class="p">(</span><span class="n">spec</span><span class="p">)</span>
|
2034
|
+
<span class="gp">>>> </span><span class="n">g</span><span class="o">.</span><span class="n">length</span>
|
2035
|
+
<span class="go">0.93461379591349 + 2.70060614107722*I</span>
|
2036
|
+
<span class="gp">>>> </span><span class="n">g</span><span class="o">.</span><span class="n">word</span>
|
2037
|
+
<span class="go">'a'</span>
|
2038
|
+
</pre></div>
|
2039
|
+
</div>
|
2040
|
+
<p>The word is given with respect to the unsimplified fundamental group:</p>
|
2041
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">G</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">fundamental_group</span><span class="p">(</span><span class="n">simplify_presentation</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
2042
|
+
<span class="gp">>>> </span><span class="n">G</span><span class="o">.</span><span class="n">complex_length</span><span class="p">(</span><span class="s1">'a'</span><span class="p">)</span>
|
2043
|
+
<span class="go">0.93461379591349 + 2.70060614107722*I</span>
|
2044
|
+
</pre></div>
|
2045
|
+
</div>
|
2046
|
+
<p>The method also supports higher precision:</p>
|
2047
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">"m003(-3,1)"</span><span class="p">)</span>
|
2048
|
+
<span class="gp">>>> </span><span class="n">spec</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">length_spectrum_alt_gen</span><span class="p">(</span><span class="n">bits_prec</span><span class="o">=</span><span class="mi">100</span><span class="p">)</span>
|
2049
|
+
<span class="gp">>>> </span><span class="nb">next</span><span class="p">(</span><span class="n">spec</span><span class="p">)</span><span class="o">.</span><span class="n">length</span>
|
2050
|
+
<span class="go">0.58460368501798696932015666264 + 2.4953704555604684110903962008*I</span>
|
2051
|
+
</pre></div>
|
2052
|
+
</div>
|
2053
|
+
<p><strong>Performance</strong></p>
|
2054
|
+
<p>This method uses a different algorithm than
|
2055
|
+
<a class="reference internal" href="#snappy.Manifold.length_spectrum" title="snappy.Manifold.length_spectrum"><code class="xref py py-meth docutils literal notranslate"><span class="pre">length_spectrum</span></code></a>. In particular,
|
2056
|
+
it does not compute the Dirichlet domain. It also allows for
|
2057
|
+
<a class="reference internal" href="verify.html#verify-primer"><span class="std std-ref">verified computations</span></a>.
|
2058
|
+
It is implemented in python and thus
|
2059
|
+
typically slower than <a class="reference internal" href="#snappy.Manifold.length_spectrum" title="snappy.Manifold.length_spectrum"><code class="xref py py-meth docutils literal notranslate"><span class="pre">length_spectrum</span></code></a>.
|
2060
|
+
But there are also some cases where it is significantly faster. In
|
2061
|
+
particular, this applies to spun triangulations such as <code class="docutils literal notranslate"><span class="pre">m004(21,10)</span></code>.</p>
|
2062
|
+
<p>Here is example where we can help the algorithm by guessing and drilling
|
2063
|
+
and filling a short geodesic:</p>
|
2064
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">"o9_00639"</span><span class="p">)</span>
|
2065
|
+
</pre></div>
|
2066
|
+
</div>
|
2067
|
+
<p>Over an hour to compute:</p>
|
2068
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">high_precision</span><span class="p">()</span><span class="o">.</span><span class="n">length_spectrum</span><span class="p">(</span><span class="mf">0.1</span><span class="p">)</span>
|
2069
|
+
<span class="go">mult length topology parity</span>
|
2070
|
+
<span class="go">1 0.00150226276052 - 2.39996262244127*I circle +</span>
|
2071
|
+
</pre></div>
|
2072
|
+
</div>
|
2073
|
+
<p>A couple of minutes to compute:</p>
|
2074
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">spec</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">length_spectrum_alt_gen</span><span class="p">(</span><span class="n">bits_prec</span> <span class="o">=</span> <span class="mi">150</span><span class="p">)</span>
|
2075
|
+
<span class="gp">>>> </span><span class="nb">next</span><span class="p">(</span><span class="n">spec</span><span class="p">)</span>
|
2076
|
+
<span class="go">Length Word Core curve</span>
|
2077
|
+
<span class="go">0.00150226276052 - 2.39996262244127*I a -</span>
|
2078
|
+
</pre></div>
|
2079
|
+
</div>
|
2080
|
+
<p>After drilling and filling, less than a second to compute:</p>
|
2081
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">N</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">drill_word</span><span class="p">(</span><span class="s1">'a'</span><span class="p">)</span>
|
2082
|
+
<span class="gp">>>> </span><span class="n">N</span><span class="o">.</span><span class="n">dehn_fill</span><span class="p">((</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">),</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="c1"># N is now isometric to o9_00639 but as a surgery m125(0,0)(34,55)</span>
|
2083
|
+
<span class="gp">>>> </span><span class="n">spec</span> <span class="o">=</span> <span class="n">N</span><span class="o">.</span><span class="n">length_spectrum_alt_gen</span><span class="p">()</span>
|
2084
|
+
<span class="gp">>>> </span><span class="nb">next</span><span class="p">(</span><span class="n">spec</span><span class="p">)</span>
|
2085
|
+
<span class="go">Length Core curve Word</span>
|
2086
|
+
<span class="go">0.00150226276073 - 2.39996262244128*I Cusp 1 cDcDDcDcDDcDDcDcDDcDcDDcDDcDcDDcDD</span>
|
2087
|
+
<span class="gp">>>> </span><span class="nb">next</span><span class="p">(</span><span class="n">spec</span><span class="p">)</span><span class="o">.</span><span class="n">length</span><span class="o">.</span><span class="n">real</span><span class="p">()</span>
|
2088
|
+
<span class="go">0.96218768626877</span>
|
2089
|
+
</pre></div>
|
2090
|
+
</div>
|
2091
|
+
<p><strong>Verified computations</strong></p>
|
2092
|
+
<p>The method also supports <a class="reference internal" href="verify.html#verify-primer"><span class="std std-ref">verified computations</span></a>:</p>
|
2093
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">"m019"</span><span class="p">)</span>
|
2094
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">spec</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">length_spectrum_alt_gen</span><span class="p">(</span><span class="n">verified</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">bits_prec</span><span class="o">=</span><span class="mi">100</span><span class="p">)</span>
|
2095
|
+
<span class="n">sage</span><span class="p">:</span> <span class="nb">next</span><span class="p">(</span><span class="n">spec</span><span class="p">)</span>
|
2096
|
+
<span class="n">Length</span> <span class="n">Core</span> <span class="n">curve</span> <span class="n">Word</span>
|
2097
|
+
<span class="mf">0.43153441294719</span><span class="o">...</span> <span class="o">+</span> <span class="mf">2.35105908147863</span><span class="o">...*</span><span class="n">I</span> <span class="o">-</span> <span class="n">a</span>
|
2098
|
+
<span class="n">sage</span><span class="p">:</span> <span class="nb">next</span><span class="p">(</span><span class="n">spec</span><span class="p">)</span>
|
2099
|
+
<span class="mf">0.88944299721255</span><span class="o">...</span> <span class="o">-</span> <span class="mf">2.94185904702273</span><span class="o">...*</span><span class="n">I</span> <span class="o">-</span> <span class="n">bD</span>
|
2100
|
+
</pre></div>
|
2101
|
+
</div>
|
2102
|
+
<p>If <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">True</span></code> is passed, the algorithm guarantees that the lower
|
2103
|
+
bound of the real length is (non-strictly) increasing. In particular, we know
|
2104
|
+
that we have found all geodesics less than the following length:</p>
|
2105
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="nb">next</span><span class="p">(</span><span class="n">spec</span><span class="p">)</span><span class="o">.</span><span class="n">length</span><span class="o">.</span><span class="n">real</span><span class="p">()</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="c1"># doctest: +NUMERIC12</span>
|
2106
|
+
<span class="mf">0.94135129037387168886341739832</span>
|
2107
|
+
</pre></div>
|
2108
|
+
</div>
|
2109
|
+
<p>To illustrate some pitfalls, here is an example of a potential a result
|
2110
|
+
of the method:</p>
|
2111
|
+
<table class="docutils align-default">
|
2112
|
+
<thead>
|
2113
|
+
<tr class="row-odd"><th class="head"><p>Real length interval</p></th>
|
2114
|
+
<th class="head"><p>Word</p></th>
|
2115
|
+
</tr>
|
2116
|
+
</thead>
|
2117
|
+
<tbody>
|
2118
|
+
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">[1.0,</span> <span class="pre">2.0]</span></code></p></td>
|
2119
|
+
<td><p><code class="docutils literal notranslate"><span class="pre">a</span></code></p></td>
|
2120
|
+
</tr>
|
2121
|
+
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">[1.2,</span> <span class="pre">1.3]</span></code></p></td>
|
2122
|
+
<td><p><code class="docutils literal notranslate"><span class="pre">b</span></code></p></td>
|
2123
|
+
</tr>
|
2124
|
+
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">[1.7,</span> <span class="pre">1.8]</span></code></p></td>
|
2125
|
+
<td><p><code class="docutils literal notranslate"><span class="pre">c</span></code></p></td>
|
2126
|
+
</tr>
|
2127
|
+
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">[3.0,</span> <span class="pre">4.0]</span></code></p></td>
|
2128
|
+
<td><p><code class="docutils literal notranslate"><span class="pre">d</span></code></p></td>
|
2129
|
+
</tr>
|
2130
|
+
</tbody>
|
2131
|
+
</table>
|
2132
|
+
<p>Note that we cannot say whether geodesic <code class="docutils literal notranslate"><span class="pre">a</span></code> is actually the first,
|
2133
|
+
second or third shortest geodesic or tied with <code class="docutils literal notranslate"><span class="pre">b</span></code> or <code class="docutils literal notranslate"><span class="pre">c</span></code>. Increasing
|
2134
|
+
precision can change (representative words and) the order in which the
|
2135
|
+
geodesics are emitted.</p>
|
2136
|
+
<p>We can say that together <code class="docutils literal notranslate"><span class="pre">a</span></code>, <code class="docutils literal notranslate"><span class="pre">b</span></code> and <code class="docutils literal notranslate"><span class="pre">c</span></code> are the three shortest
|
2137
|
+
geodesics. Furthermore, we can also say that the systole
|
2138
|
+
of the manifold is in <code class="docutils literal notranslate"><span class="pre">[1.0,</span> <span class="pre">2.0]</span></code> even though <code class="docutils literal notranslate"><span class="pre">a</span></code> itself might not be
|
2139
|
+
the shortest geodesic. The latter is true in general:</p>
|
2140
|
+
<p><strong>Verified systole</strong></p>
|
2141
|
+
<p>It is not necessarily true that the first geodesic returned
|
2142
|
+
by the method is the shortest geodesic. Despite this, the interval for
|
2143
|
+
the real length of the first geodesic always contains the systole of
|
2144
|
+
the manifold:</p>
|
2145
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: M = Manifold("m004")
|
2146
|
+
sage: spec = M.length_spectrum_alt_gen(verified=True)
|
2147
|
+
sage: g = next(spec) # g might or might not be shortest geodesic
|
2148
|
+
sage: systole = g.length.real() # But interval is large enough to contain systole
|
2149
|
+
sage: systole # doctest: +NUMERIC6
|
2150
|
+
1.08707015?
|
2151
|
+
</pre></div>
|
2152
|
+
</div>
|
2153
|
+
<dl class="field-list simple">
|
2154
|
+
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
2155
|
+
<dd class="field-odd"><ul class="simple">
|
2156
|
+
<li><p><strong>bits_prec</strong> – Precision used for the computation. Increase if computation did
|
2157
|
+
not succeed.</p></li>
|
2158
|
+
<li><p><strong>verified</strong> – Use <a class="reference internal" href="verify.html#verify-primer"><span class="std std-ref">verified computation</span></a>.</p></li>
|
2159
|
+
</ul>
|
2160
|
+
</dd>
|
2161
|
+
<dt class="field-even">Returns<span class="colon">:</span></dt>
|
2162
|
+
<dd class="field-even"><p>A generator to enumerate the geodesics such that the (lower bound
|
2163
|
+
of the) real length is non-decreasing.</p>
|
2164
|
+
</dd>
|
2165
|
+
</dl>
|
2166
|
+
</dd></dl>
|
2167
|
+
|
1685
2168
|
<dl class="py method">
|
1686
2169
|
<dt class="sig sig-object py" id="snappy.Manifold.link">
|
1687
|
-
<span class="sig-name descname"><span class="pre">link</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.link" title="
|
2170
|
+
<span class="sig-name descname"><span class="pre">link</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.link" title="Link to this definition"></a></dt>
|
1688
2171
|
<dd><p>If the manifold is stored as a link complement in your
|
1689
2172
|
current session then it returns the number of components
|
1690
2173
|
and crossing of the link. To view and interact with the
|
1691
2174
|
link see <a class="reference internal" href="spherogram.html#spherogram.Link.view" title="spherogram.Link.view"><code class="xref py py-meth docutils literal notranslate"><span class="pre">spherogram.Link.view()</span></code></a>
|
1692
|
-
and <a class="reference internal" href="#snappy.
|
2175
|
+
and <a class="reference internal" href="triangulation.html#snappy.Triangulation.plink" title="snappy.Triangulation.plink"><code class="xref py py-meth docutils literal notranslate"><span class="pre">plink</span></code></a>.</p>
|
1693
2176
|
</dd></dl>
|
1694
2177
|
|
1695
2178
|
<dl class="py method">
|
1696
2179
|
<dt class="sig sig-object py" id="snappy.Manifold.name">
|
1697
|
-
<span class="sig-name descname"><span class="pre">name</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.name" title="
|
2180
|
+
<span class="sig-name descname"><span class="pre">name</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">str</span></span></span><a class="headerlink" href="#snappy.Manifold.name" title="Link to this definition"></a></dt>
|
1698
2181
|
<dd><p>Return the name of the triangulation.</p>
|
1699
2182
|
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">'4_1'</span><span class="p">)</span>
|
1700
2183
|
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">name</span><span class="p">()</span>
|
@@ -1705,7 +2188,7 @@ and <a class="reference internal" href="#snappy.Manifold.plink" title="snappy.Ma
|
|
1705
2188
|
|
1706
2189
|
<dl class="py method">
|
1707
2190
|
<dt class="sig sig-object py" id="snappy.Manifold.normal_boundary_slopes">
|
1708
|
-
<span class="sig-name descname"><span class="pre">normal_boundary_slopes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">subset</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'all'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">algorithm</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'FXrays'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.normal_boundary_slopes" title="
|
2191
|
+
<span class="sig-name descname"><span class="pre">normal_boundary_slopes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">subset</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'all'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">algorithm</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'FXrays'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.normal_boundary_slopes" title="Link to this definition"></a></dt>
|
1709
2192
|
<dd><p>For a one-cusped manifold, returns all the nonempty boundary slopes of
|
1710
2193
|
spun normal surfaces. Provided the triangulation supports a
|
1711
2194
|
genuine hyperbolic structure, then by <a class="reference external" href="http://arxiv.org/abs/math/0503027">Thurston and Walsh</a> any strict boundary slope
|
@@ -1718,8 +2201,9 @@ semifiber) must be listed here.</p>
|
|
1718
2201
|
</div>
|
1719
2202
|
<p>If the <code class="docutils literal notranslate"><span class="pre">subset</span></code> flag is set to <code class="docutils literal notranslate"><span class="pre">'kabaya'</span></code>, then it only
|
1720
2203
|
returns boundary slopes associated to vertex surfaces with a quad
|
1721
|
-
in every tetrahedron; by Theorem 1.1. of
|
1722
|
-
|
2204
|
+
in every tetrahedron; by Theorem 1.1. of
|
2205
|
+
<a class="reference external" href="http://arxiv.org/abs/1102.4588">Dunfield and Garoufalidis ‘12</a>
|
2206
|
+
these are all strict boundary slopes.</p>
|
1723
2207
|
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">N</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">'m113'</span><span class="p">)</span>
|
1724
2208
|
<span class="gp">>>> </span><span class="n">N</span><span class="o">.</span><span class="n">normal_boundary_slopes</span><span class="p">()</span>
|
1725
2209
|
<span class="go">[(1, 1), (1, 2), (2, -1), (2, 3), (8, 11)]</span>
|
@@ -1738,7 +2222,7 @@ giving isolated rays in the space of embedded normal surfaces.</p>
|
|
1738
2222
|
|
1739
2223
|
<dl class="py method">
|
1740
2224
|
<dt class="sig sig-object py" id="snappy.Manifold.normal_surfaces">
|
1741
|
-
<span class="sig-name descname"><span class="pre">normal_surfaces</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">algorithm</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'FXrays'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.normal_surfaces" title="
|
2225
|
+
<span class="sig-name descname"><span class="pre">normal_surfaces</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">algorithm</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'FXrays'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.normal_surfaces" title="Link to this definition"></a></dt>
|
1742
2226
|
<dd><p>All the vertex spun-normal surfaces in the current triangulation.</p>
|
1743
2227
|
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">'m004'</span><span class="p">)</span>
|
1744
2228
|
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">normal_surfaces</span><span class="p">()</span>
|
@@ -1752,7 +2236,7 @@ giving isolated rays in the space of embedded normal surfaces.</p>
|
|
1752
2236
|
|
1753
2237
|
<dl class="py method">
|
1754
2238
|
<dt class="sig sig-object py" id="snappy.Manifold.num_cusps">
|
1755
|
-
<span class="sig-name descname"><span class="pre">num_cusps</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cusp_type</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'all'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.num_cusps" title="
|
2239
|
+
<span class="sig-name descname"><span class="pre">num_cusps</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cusp_type</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'all'</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">int</span></span></span><a class="headerlink" href="#snappy.Manifold.num_cusps" title="Link to this definition"></a></dt>
|
1756
2240
|
<dd><p>Return the total number of cusps. By giving the optional argument
|
1757
2241
|
‘orientable’ or ‘nonorientable’ it will only count cusps of that type.</p>
|
1758
2242
|
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">'m125'</span><span class="p">)</span>
|
@@ -1764,7 +2248,7 @@ giving isolated rays in the space of embedded normal surfaces.</p>
|
|
1764
2248
|
|
1765
2249
|
<dl class="py method">
|
1766
2250
|
<dt class="sig sig-object py" id="snappy.Manifold.num_tetrahedra">
|
1767
|
-
<span class="sig-name descname"><span class="pre">num_tetrahedra</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.num_tetrahedra" title="
|
2251
|
+
<span class="sig-name descname"><span class="pre">num_tetrahedra</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">int</span></span></span><a class="headerlink" href="#snappy.Manifold.num_tetrahedra" title="Link to this definition"></a></dt>
|
1768
2252
|
<dd><p>Return the number of tetrahedra in the triangulation.</p>
|
1769
2253
|
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">'m004'</span><span class="p">)</span>
|
1770
2254
|
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">num_tetrahedra</span><span class="p">()</span>
|
@@ -1775,7 +2259,7 @@ giving isolated rays in the space of embedded normal surfaces.</p>
|
|
1775
2259
|
|
1776
2260
|
<dl class="py method">
|
1777
2261
|
<dt class="sig sig-object py" id="snappy.Manifold.orientation_cover">
|
1778
|
-
<span class="sig-name descname"><span class="pre">orientation_cover</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.orientation_cover" title="
|
2262
|
+
<span class="sig-name descname"><span class="pre">orientation_cover</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.orientation_cover" title="Link to this definition"></a></dt>
|
1779
2263
|
<dd><p>For a non-orientable Triangulation, returns the 2-fold cover which
|
1780
2264
|
is orientable.</p>
|
1781
2265
|
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">X</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">'x123'</span><span class="p">)</span>
|
@@ -1790,14 +2274,9 @@ is orientable.</p>
|
|
1790
2274
|
</div>
|
1791
2275
|
</dd></dl>
|
1792
2276
|
|
1793
|
-
<dl class="py method">
|
1794
|
-
<dt class="sig sig-object py" id="snappy.Manifold.pickle">
|
1795
|
-
<span class="sig-name descname"><span class="pre">pickle</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.pickle" title="Permalink to this definition"></a></dt>
|
1796
|
-
<dd></dd></dl>
|
1797
|
-
|
1798
2277
|
<dl class="py method">
|
1799
2278
|
<dt class="sig sig-object py" id="snappy.Manifold.plink">
|
1800
|
-
<span class="sig-name descname"><span class="pre">plink</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.plink" title="
|
2279
|
+
<span class="sig-name descname"><span class="pre">plink</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.plink" title="Link to this definition"></a></dt>
|
1801
2280
|
<dd><p>Brings up a link editor window if the manifold is stored
|
1802
2281
|
as a link complement in your current session.</p>
|
1803
2282
|
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">'4_1'</span><span class="p">)</span> <span class="c1"># stored as a triangulation with a link</span>
|
@@ -1814,9 +2293,9 @@ as a link complement in your current session.</p>
|
|
1814
2293
|
|
1815
2294
|
<dl class="py method">
|
1816
2295
|
<dt class="sig sig-object py" id="snappy.Manifold.polished_holonomy">
|
1817
|
-
<span class="sig-name descname"><span class="pre">polished_holonomy</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">bits_prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">100</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fundamental_group_args</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[]</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">lift_to_SL2</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ignore_solution_type</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">dec_prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">match_kernel</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.polished_holonomy" title="
|
1818
|
-
<dd><p>Return the fundamental group of M
|
1819
|
-
holonomy representation:</p>
|
2296
|
+
<span class="sig-name descname"><span class="pre">polished_holonomy</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">bits_prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">100</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fundamental_group_args</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[]</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">lift_to_SL2</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ignore_solution_type</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">dec_prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">match_kernel</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.polished_holonomy" title="Link to this definition"></a></dt>
|
2297
|
+
<dd><p>Return the fundamental group of M equipped with a high-precision version of
|
2298
|
+
the holonomy representation:</p>
|
1820
2299
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">'m004'</span><span class="p">)</span>
|
1821
2300
|
<span class="n">sage</span><span class="p">:</span> <span class="n">G</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">polished_holonomy</span><span class="p">()</span>
|
1822
2301
|
<span class="n">sage</span><span class="p">:</span> <span class="n">G</span><span class="p">(</span><span class="s1">'a'</span><span class="p">)</span><span class="o">.</span><span class="n">trace</span><span class="p">()</span>
|
@@ -1830,9 +2309,8 @@ holonomy representation:</p>
|
|
1830
2309
|
|
1831
2310
|
<dl class="py method">
|
1832
2311
|
<dt class="sig sig-object py" id="snappy.Manifold.ptolemy_generalized_obstruction_classes">
|
1833
|
-
<span class="sig-name descname"><span class="pre">ptolemy_generalized_obstruction_classes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">N</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.ptolemy_generalized_obstruction_classes" title="
|
1834
|
-
<dd><p>
|
1835
|
-
<p>Returns the obstruction classes needed to compute
|
2312
|
+
<span class="sig-name descname"><span class="pre">ptolemy_generalized_obstruction_classes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">N</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.ptolemy_generalized_obstruction_classes" title="Link to this definition"></a></dt>
|
2313
|
+
<dd><p>Returns the obstruction classes needed to compute
|
1836
2314
|
PGL(N,C)-representations for any N, i.e., it returns a list with
|
1837
2315
|
a representative cocycle for each element in
|
1838
2316
|
H^2(M, boundary M; Z/N) / (Z/N)^* where (Z/N)^* are the units in Z/N.
|
@@ -1890,7 +2368,7 @@ four face classes.</p>
|
|
1890
2368
|
|
1891
2369
|
<dl class="py method">
|
1892
2370
|
<dt class="sig sig-object py" id="snappy.Manifold.ptolemy_obstruction_classes">
|
1893
|
-
<span class="sig-name descname"><span class="pre">ptolemy_obstruction_classes</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.ptolemy_obstruction_classes" title="
|
2371
|
+
<span class="sig-name descname"><span class="pre">ptolemy_obstruction_classes</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.ptolemy_obstruction_classes" title="Link to this definition"></a></dt>
|
1894
2372
|
<dd><p>Returns the obstruction classes needed to compute
|
1895
2373
|
pSL(N,C) = SL(N,C)/{+1,-1} representations for even N, i.e., it
|
1896
2374
|
returns a list with a representative cocycle for each class in
|
@@ -1946,9 +2424,8 @@ hence the cocycle takes the same value on those two faces (s_3_0 = s_1_1).</p>
|
|
1946
2424
|
|
1947
2425
|
<dl class="py method">
|
1948
2426
|
<dt class="sig sig-object py" id="snappy.Manifold.ptolemy_variety">
|
1949
|
-
<span class="sig-name descname"><span class="pre">ptolemy_variety</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">N</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">obstruction_class</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">simplify</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">eliminate_fixed_ptolemys</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.ptolemy_variety" title="
|
1950
|
-
<dd><p>
|
1951
|
-
<p>Returns a Ptolemy variety as described in</p>
|
2427
|
+
<span class="sig-name descname"><span class="pre">ptolemy_variety</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">N</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">obstruction_class</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">simplify</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">eliminate_fixed_ptolemys</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.ptolemy_variety" title="Link to this definition"></a></dt>
|
2428
|
+
<dd><p>Returns a Ptolemy variety as described in</p>
|
1952
2429
|
<ul class="simple">
|
1953
2430
|
<li><p>Stavros Garoufalidis, Dyland Thurston, Christian K. Zickert:
|
1954
2431
|
“The Complex Volume of SL(n,C)-Representations of 3-Manifolds”
|
@@ -2115,7 +2592,7 @@ on how to compute cross ratios, volumes and other invariants):</p>
|
|
2115
2592
|
|
2116
2593
|
<dl class="py method">
|
2117
2594
|
<dt class="sig sig-object py" id="snappy.Manifold.randomize">
|
2118
|
-
<span class="sig-name descname"><span class="pre">randomize</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">blowup_multiple</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">4</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">passes_at_fours</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">6</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.randomize" title="
|
2595
|
+
<span class="sig-name descname"><span class="pre">randomize</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">blowup_multiple</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">4</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">passes_at_fours</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">6</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.randomize" title="Link to this definition"></a></dt>
|
2119
2596
|
<dd><p>Perform random Pachner moves on the underlying triangulation,
|
2120
2597
|
including some initial 3 -> 2 moves that increase the number of
|
2121
2598
|
tetrahedra by blowup_multiple.</p>
|
@@ -2127,7 +2604,7 @@ tetrahedra by blowup_multiple.</p>
|
|
2127
2604
|
|
2128
2605
|
<dl class="py method">
|
2129
2606
|
<dt class="sig sig-object py" id="snappy.Manifold.reverse_orientation">
|
2130
|
-
<span class="sig-name descname"><span class="pre">reverse_orientation</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.reverse_orientation" title="
|
2607
|
+
<span class="sig-name descname"><span class="pre">reverse_orientation</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span><a class="headerlink" href="#snappy.Manifold.reverse_orientation" title="Link to this definition"></a></dt>
|
2131
2608
|
<dd><p>Reverses the orientation of the Triangulation, presuming that
|
2132
2609
|
it is orientable.</p>
|
2133
2610
|
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">'m015'</span><span class="p">)</span>
|
@@ -2141,7 +2618,7 @@ it is orientable.</p>
|
|
2141
2618
|
|
2142
2619
|
<dl class="py method">
|
2143
2620
|
<dt class="sig sig-object py" id="snappy.Manifold.save">
|
2144
|
-
<span class="sig-name descname"><span class="pre">save</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">file_name</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.save" title="
|
2621
|
+
<span class="sig-name descname"><span class="pre">save</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">file_name</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.save" title="Link to this definition"></a></dt>
|
2145
2622
|
<dd><p>Save the triangulation as a SnapPea triangulation file.</p>
|
2146
2623
|
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">'m004'</span><span class="p">)</span>
|
2147
2624
|
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="s1">'fig-eight.tri'</span><span class="p">)</span>
|
@@ -2159,7 +2636,7 @@ with Dehn coefficients (2,3).</p>
|
|
2159
2636
|
|
2160
2637
|
<dl class="py method">
|
2161
2638
|
<dt class="sig sig-object py" id="snappy.Manifold.set_name">
|
2162
|
-
<span class="sig-name descname"><span class="pre">set_name</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">new_name</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.set_name" title="
|
2639
|
+
<span class="sig-name descname"><span class="pre">set_name</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">new_name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span><a class="headerlink" href="#snappy.Manifold.set_name" title="Link to this definition"></a></dt>
|
2163
2640
|
<dd><p>Give the triangulation a new name.</p>
|
2164
2641
|
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">'4_1'</span><span class="p">)</span>
|
2165
2642
|
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">set_name</span><span class="p">(</span><span class="s1">'figure-eight-comp'</span><span class="p">)</span>
|
@@ -2171,7 +2648,7 @@ with Dehn coefficients (2,3).</p>
|
|
2171
2648
|
|
2172
2649
|
<dl class="py method">
|
2173
2650
|
<dt class="sig sig-object py" id="snappy.Manifold.set_peripheral_curves">
|
2174
|
-
<span class="sig-name descname"><span class="pre">set_peripheral_curves</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">peripheral_data</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">which_cusp</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">return_matrices</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.set_peripheral_curves" title="
|
2651
|
+
<span class="sig-name descname"><span class="pre">set_peripheral_curves</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">peripheral_data</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">which_cusp</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">return_matrices</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.set_peripheral_curves" title="Link to this definition"></a></dt>
|
2175
2652
|
<dd><p>Each cusp has a preferred marking. In the case of a torus
|
2176
2653
|
cusp, this is pair of essential simple curves meeting in one
|
2177
2654
|
point; equivalently, a basis of the first homology of the
|
@@ -2231,9 +2708,8 @@ possible while fixing the longitudes via the option
|
|
2231
2708
|
|
2232
2709
|
<dl class="py method">
|
2233
2710
|
<dt class="sig sig-object py" id="snappy.Manifold.set_target_holonomy">
|
2234
|
-
<span class="sig-name descname"><span class="pre">set_target_holonomy</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">target</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">which_cusp</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">recompute</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.set_target_holonomy" title="
|
2235
|
-
<dd><p>
|
2236
|
-
<p>Computes a geometric structure in which the Dehn filling curve
|
2711
|
+
<span class="sig-name descname"><span class="pre">set_target_holonomy</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">target</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">which_cusp</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">recompute</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.set_target_holonomy" title="Link to this definition"></a></dt>
|
2712
|
+
<dd><p>Computes a geometric structure in which the Dehn filling curve
|
2237
2713
|
on the specified cusp has holonomy equal to the target value.
|
2238
2714
|
The holonomies of Dehn filling curves on other cusps are left
|
2239
2715
|
unchanged. If the ‘recompute’ flag is False, the Dehn filling
|
@@ -2242,7 +2718,7 @@ equations are modified, but not solved.</p>
|
|
2242
2718
|
|
2243
2719
|
<dl class="py method">
|
2244
2720
|
<dt class="sig sig-object py" id="snappy.Manifold.set_tetrahedra_shapes">
|
2245
|
-
<span class="sig-name descname"><span class="pre">set_tetrahedra_shapes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">filled_shapes</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">complete_shapes</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fillings</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.set_tetrahedra_shapes" title="
|
2721
|
+
<span class="sig-name descname"><span class="pre">set_tetrahedra_shapes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">filled_shapes</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">complete_shapes</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fillings</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.set_tetrahedra_shapes" title="Link to this definition"></a></dt>
|
2246
2722
|
<dd><p>Replaces the tetrahedron shapes with those in the given lists,
|
2247
2723
|
and sets the Dehn filling coefficients as specified by the
|
2248
2724
|
fillings argument. The shapes will get double precision
|
@@ -2251,23 +2727,22 @@ values; polishing will be needed for high precision shapes.</p>
|
|
2251
2727
|
|
2252
2728
|
<dl class="py method">
|
2253
2729
|
<dt class="sig sig-object py" id="snappy.Manifold.short_slopes">
|
2254
|
-
<span class="sig-name descname"><span class="pre">short_slopes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">length</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">6</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">policy</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'unbiased'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">method</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'
|
2255
|
-
<dd><p>
|
2256
|
-
<a class="reference internal" href="#snappy.Manifold.cusp_areas" title="snappy.Manifold.cusp_areas"><code class="xref py py-meth docutils literal notranslate"><span class="pre">
|
2257
|
-
|
2258
|
-
|
2259
|
-
|
2730
|
+
<span class="sig-name descname"><span class="pre">short_slopes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">length</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">6</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">policy</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'unbiased'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">method</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'maximal'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verified</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bits_prec</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">first_cusps</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">List</span><span class="p"><span class="pre">[</span></span><span class="pre">int</span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">[]</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.short_slopes" title="Link to this definition"></a></dt>
|
2731
|
+
<dd><p>Returns a list of short slopes (for Dehn-fillings) for each cusp.</p>
|
2732
|
+
<p>That is, the method uses <a class="reference internal" href="#snappy.Manifold.cusp_areas" title="snappy.Manifold.cusp_areas"><code class="xref py py-meth docutils literal notranslate"><span class="pre">cusp_areas()</span></code></a> to find
|
2733
|
+
(maximal) embedded and disjoint cusp neighborhoods. It uses the boundaries
|
2734
|
+
of these cusp neighborhoods to measure the length of a peripheral curve.
|
2735
|
+
For each cusp, it determines all simple peripheral curves shorter than
|
2736
|
+
the given <code class="xref py py-attr docutils literal notranslate"><span class="pre">length</span></code> (which defaults to 6). The result is a list
|
2737
|
+
of the corresponding slopes for each cusp:</p>
|
2260
2738
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">"otet20_00022"</span><span class="p">)</span>
|
2261
2739
|
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">short_slopes</span><span class="p">()</span>
|
2262
2740
|
<span class="go">[[(1, 0), (-1, 1), (0, 1)], [(1, 0)]]</span>
|
2263
2741
|
</pre></div>
|
2264
2742
|
</div>
|
2265
|
-
<p>
|
2266
|
-
|
2267
|
-
(
|
2268
|
-
enough):</p>
|
2269
|
-
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">.</span><span class="n">short_slopes</span><span class="p">(</span><span class="n">verified</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span>
|
2270
|
-
<span class="p">[[(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)],</span> <span class="p">[(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">)]]</span>
|
2743
|
+
<p>It takes the same arguments as <a class="reference internal" href="#snappy.Manifold.cusp_areas" title="snappy.Manifold.cusp_areas"><code class="xref py py-meth docutils literal notranslate"><span class="pre">cusp_areas()</span></code></a>:</p>
|
2744
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">short_slopes</span><span class="p">(</span><span class="n">policy</span> <span class="o">=</span> <span class="s1">'greedy'</span><span class="p">)</span>
|
2745
|
+
<span class="go">[[(1, 0)], [(1, 0)]]</span>
|
2271
2746
|
</pre></div>
|
2272
2747
|
</div>
|
2273
2748
|
<p>The ten exceptional slopes of the figure-eight knot:</p>
|
@@ -2276,12 +2751,26 @@ enough):</p>
|
|
2276
2751
|
<span class="go">[[(1, 0), (-4, 1), (-3, 1), (-2, 1), (-1, 1), (0, 1), (1, 1), (2, 1), (3, 1), (4, 1)]]</span>
|
2277
2752
|
</pre></div>
|
2278
2753
|
</div>
|
2279
|
-
<p>Two more slopes appear when increasing length to 2
|
2754
|
+
<p>Two more slopes appear when increasing length to <span class="math notranslate nohighlight">\(2\pi\)</span>:</p>
|
2280
2755
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">short_slopes</span><span class="p">(</span><span class="n">length</span> <span class="o">=</span> <span class="mf">6.283185307179586</span><span class="p">)</span>
|
2281
2756
|
<span class="go">[[(1, 0), (-5, 1), (-4, 1), (-3, 1), (-2, 1), (-1, 1), (0, 1), (1, 1), (2, 1), (3, 1), (4, 1), (5, 1)]]</span>
|
2282
2757
|
</pre></div>
|
2283
2758
|
</div>
|
2284
|
-
<p
|
2759
|
+
<p><strong>Verified computation</strong></p>
|
2760
|
+
<p>If <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">False</span></code>, floating-point issues can arise resulting in
|
2761
|
+
incorrect values. The method can be made
|
2762
|
+
<a class="reference internal" href="verify.html#verify-primer"><span class="std std-ref">verified</span></a> by passing <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">True</span></code>:</p>
|
2763
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">"4_1"</span><span class="p">)</span>
|
2764
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">.</span><span class="n">short_slopes</span><span class="p">(</span><span class="n">verified</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span>
|
2765
|
+
<span class="p">[[(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="p">(</span><span class="o">-</span><span class="mi">4</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="o">-</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="o">-</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="mi">1</span><span class="p">)]]</span>
|
2766
|
+
</pre></div>
|
2767
|
+
</div>
|
2768
|
+
<p>If <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">True</span></code>, the result is guaranteed to contain all short
|
2769
|
+
slopes and might contain additional slopes (with lengths slightly longer
|
2770
|
+
than the given <code class="xref py py-attr docutils literal notranslate"><span class="pre">length</span></code> but this could not be proven using the
|
2771
|
+
interval estimates).</p>
|
2772
|
+
<p>The given <code class="xref py py-attr docutils literal notranslate"><span class="pre">length</span></code> is cast to a SageMath <code class="docutils literal notranslate"><span class="pre">RealIntervalField</span></code> of the
|
2773
|
+
given precision if <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">True</span></code>:</p>
|
2285
2774
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="kn">from</span> <span class="nn">sage.all</span> <span class="kn">import</span> <span class="n">pi</span>
|
2286
2775
|
<span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">.</span><span class="n">short_slopes</span><span class="p">(</span><span class="n">length</span> <span class="o">=</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">pi</span><span class="p">,</span> <span class="n">verified</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span> <span class="n">bits_prec</span> <span class="o">=</span> <span class="mi">100</span><span class="p">)</span>
|
2287
2776
|
<span class="p">[[(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="p">(</span><span class="o">-</span><span class="mi">5</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="o">-</span><span class="mi">4</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="o">-</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="o">-</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="mi">1</span><span class="p">)]]</span>
|
@@ -2291,7 +2780,7 @@ enough):</p>
|
|
2291
2780
|
|
2292
2781
|
<dl class="py method">
|
2293
2782
|
<dt class="sig sig-object py" id="snappy.Manifold.simplify">
|
2294
|
-
<span class="sig-name descname"><span class="pre">simplify</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">passes_at_fours</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">6</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.simplify" title="
|
2783
|
+
<span class="sig-name descname"><span class="pre">simplify</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">passes_at_fours</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">6</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.simplify" title="Link to this definition"></a></dt>
|
2295
2784
|
<dd><p>Try to simplify the triangulation by doing Pachner moves.</p>
|
2296
2785
|
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">'12n123'</span><span class="p">)</span>
|
2297
2786
|
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">simplify</span><span class="p">()</span>
|
@@ -2316,7 +2805,7 @@ before giving up.</p>
|
|
2316
2805
|
|
2317
2806
|
<dl class="py method">
|
2318
2807
|
<dt class="sig sig-object py" id="snappy.Manifold.slice_obstruction_HKL">
|
2319
|
-
<span class="sig-name descname"><span class="pre">slice_obstruction_HKL</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">primes_spec</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">check_in_S3</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.slice_obstruction_HKL" title="
|
2808
|
+
<span class="sig-name descname"><span class="pre">slice_obstruction_HKL</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">primes_spec</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">check_in_S3</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.slice_obstruction_HKL" title="Link to this definition"></a></dt>
|
2320
2809
|
<dd><p>For the exterior of a knot in S^3, searches for a topological
|
2321
2810
|
slicing obstruction from:</p>
|
2322
2811
|
<p>Herald, Kirk, Livingston, Math Zeit., 2010
|
@@ -2332,7 +2821,6 @@ slice), and otherwise returns None:</p>
|
|
2332
2821
|
<span class="n">sage</span><span class="p">:</span> <span class="n">spec</span> <span class="o">=</span> <span class="p">[(</span><span class="mi">10</span><span class="p">,</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">20</span><span class="p">]),</span> <span class="p">(</span><span class="mi">20</span><span class="p">,</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">10</span><span class="p">])]</span>
|
2333
2822
|
<span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">.</span><span class="n">slice_obstruction_HKL</span><span class="p">(</span><span class="n">spec</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
2334
2823
|
<span class="n">Looking</span> <span class="n">at</span> <span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span> <span class="o">...</span>
|
2335
|
-
<span class="n">Looking</span> <span class="n">at</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="o">...</span>
|
2336
2824
|
<span class="n">Looking</span> <span class="n">at</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">7</span><span class="p">)</span> <span class="o">...</span>
|
2337
2825
|
<span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">7</span><span class="p">)</span>
|
2338
2826
|
</pre></div>
|
@@ -2341,7 +2829,6 @@ slice), and otherwise returns None:</p>
|
|
2341
2829
|
the q by just q_max:</p>
|
2342
2830
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">spec</span> <span class="o">=</span> <span class="p">[([</span><span class="mi">3</span><span class="p">,</span> <span class="mi">10</span><span class="p">],</span> <span class="mi">10</span><span class="p">)]</span>
|
2343
2831
|
<span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">.</span><span class="n">slice_obstruction_HKL</span><span class="p">(</span><span class="n">spec</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
2344
|
-
<span class="n">Looking</span> <span class="n">at</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="o">...</span>
|
2345
2832
|
<span class="n">Looking</span> <span class="n">at</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">7</span><span class="p">)</span> <span class="o">...</span>
|
2346
2833
|
<span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">7</span><span class="p">)</span>
|
2347
2834
|
</pre></div>
|
@@ -2362,7 +2849,7 @@ Alexander polynomials.</p>
|
|
2362
2849
|
|
2363
2850
|
<dl class="py method">
|
2364
2851
|
<dt class="sig sig-object py" id="snappy.Manifold.solution_type">
|
2365
|
-
<span class="sig-name descname"><span class="pre">solution_type</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">enum</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.solution_type" title="
|
2852
|
+
<span class="sig-name descname"><span class="pre">solution_type</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">enum</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.solution_type" title="Link to this definition"></a></dt>
|
2366
2853
|
<dd><p>Returns the type of the current solution to the gluing
|
2367
2854
|
equations, basically a summary of how degenerate the solution
|
2368
2855
|
is. If the flag enum=True is set, then an integer value is
|
@@ -2395,7 +2882,7 @@ simplices have reversed orientations.</p></li>
|
|
2395
2882
|
|
2396
2883
|
<dl class="py method">
|
2397
2884
|
<dt class="sig sig-object py" id="snappy.Manifold.split">
|
2398
|
-
<span class="sig-name descname"><span class="pre">split</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">which_surface</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.split" title="
|
2885
|
+
<span class="sig-name descname"><span class="pre">split</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">which_surface</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.split" title="Link to this definition"></a></dt>
|
2399
2886
|
<dd><p>Split the manifold open along a surface of positive characteristic found
|
2400
2887
|
by the method “splitting_surfaces”. Returns a list of the pieces, with any
|
2401
2888
|
sphere boundary components filled in.</p>
|
@@ -2424,7 +2911,7 @@ sphere boundary components filled in.</p>
|
|
2424
2911
|
|
2425
2912
|
<dl class="py method">
|
2426
2913
|
<dt class="sig sig-object py" id="snappy.Manifold.splitting_surfaces">
|
2427
|
-
<span class="sig-name descname"><span class="pre">splitting_surfaces</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.splitting_surfaces" title="
|
2914
|
+
<span class="sig-name descname"><span class="pre">splitting_surfaces</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.splitting_surfaces" title="Link to this definition"></a></dt>
|
2428
2915
|
<dd><p>Searches for connected closed normal surfaces of nonnegative Euler
|
2429
2916
|
characteristic. If spheres or projective planes are found, then
|
2430
2917
|
tori and Klein bottles aren’t reported. There is no guarantee
|
@@ -2449,7 +2936,7 @@ using the method “split”.</p>
|
|
2449
2936
|
|
2450
2937
|
<dl class="py method">
|
2451
2938
|
<dt class="sig sig-object py" id="snappy.Manifold.symmetric_triangulation">
|
2452
|
-
<span class="sig-name descname"><span class="pre">symmetric_triangulation</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.symmetric_triangulation" title="
|
2939
|
+
<span class="sig-name descname"><span class="pre">symmetric_triangulation</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.symmetric_triangulation" title="Link to this definition"></a></dt>
|
2453
2940
|
<dd><p>Returns a Dehn filling description of the manifold realizing
|
2454
2941
|
the symmetry group.</p>
|
2455
2942
|
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">'m003(-3,1)'</span><span class="p">)</span>
|
@@ -2467,15 +2954,37 @@ the symmetry group.</p>
|
|
2467
2954
|
|
2468
2955
|
<dl class="py method">
|
2469
2956
|
<dt class="sig sig-object py" id="snappy.Manifold.symmetry_group">
|
2470
|
-
<span class="sig-name descname"><span class="pre">symmetry_group</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">of_link</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.symmetry_group" title="
|
2957
|
+
<span class="sig-name descname"><span class="pre">symmetry_group</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">of_link</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><a class="reference internal" href="additional_classes.html#snappy.SymmetryGroup" title="SnapPy.SymmetryGroup"><span class="pre">SymmetryGroup</span></a></span></span><a class="headerlink" href="#snappy.Manifold.symmetry_group" title="Link to this definition"></a></dt>
|
2471
2958
|
<dd><p>Returns the symmetry group of the Manifold.
|
2472
2959
|
If the flag “of_link” is set, then it only returns symmetries
|
2473
2960
|
that preserves the meridians.</p>
|
2474
2961
|
</dd></dl>
|
2475
2962
|
|
2963
|
+
<dl class="py method">
|
2964
|
+
<dt class="sig sig-object py" id="snappy.Manifold.symplectic_basis">
|
2965
|
+
<span class="sig-name descname"><span class="pre">symplectic_basis</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">verify</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.symplectic_basis" title="Link to this definition"></a></dt>
|
2966
|
+
<dd><p>Extend the Neumann-Zagier matrix to one which is symplectic
|
2967
|
+
(up to factors of 2) using oscillating curves, see
|
2968
|
+
<a class="reference external" href="https://arxiv.org/abs/2208.06969">Mathews and Purcell ‘22</a>.
|
2969
|
+
Only accepts triangulations with 1 cusp.</p>
|
2970
|
+
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">"4_1"</span><span class="p">)</span>
|
2971
|
+
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">symplectic_basis</span><span class="p">()</span>
|
2972
|
+
<span class="go">[-1 0 -1 -1]</span>
|
2973
|
+
<span class="go">[ 2 0 -2 0]</span>
|
2974
|
+
<span class="go">[-2 -1 -2 -1]</span>
|
2975
|
+
<span class="go">[ 0 -1 -2 -1]</span>
|
2976
|
+
</pre></div>
|
2977
|
+
</div>
|
2978
|
+
<dl class="field-list simple">
|
2979
|
+
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
2980
|
+
<dd class="field-odd"><p><strong>verify</strong> – Explicitly test if the resulting matrix is symplectic.</p>
|
2981
|
+
</dd>
|
2982
|
+
</dl>
|
2983
|
+
</dd></dl>
|
2984
|
+
|
2476
2985
|
<dl class="py method">
|
2477
2986
|
<dt class="sig sig-object py" id="snappy.Manifold.tetrahedra_field_gens">
|
2478
|
-
<span class="sig-name descname"><span class="pre">tetrahedra_field_gens</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.tetrahedra_field_gens" title="
|
2987
|
+
<span class="sig-name descname"><span class="pre">tetrahedra_field_gens</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.tetrahedra_field_gens" title="Link to this definition"></a></dt>
|
2479
2988
|
<dd><p>The shapes of the tetrahedra as ApproximateAlgebraicNumbers. Can be
|
2480
2989
|
used to compute the tetrahedra field, where the first two parameters
|
2481
2990
|
are bits of precision and maximum degree of the field:</p>
|
@@ -2491,7 +3000,7 @@ sage: tets.find_field(100, 10, optimize=True) # doctest: +NORMALIZE_WHITESPAC
|
|
2491
3000
|
|
2492
3001
|
<dl class="py method">
|
2493
3002
|
<dt class="sig sig-object py" id="snappy.Manifold.tetrahedra_shapes">
|
2494
|
-
<span class="sig-name descname"><span class="pre">tetrahedra_shapes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">part</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fixed_alignment</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bits_prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">dec_prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">intervals</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.tetrahedra_shapes" title="
|
3003
|
+
<span class="sig-name descname"><span class="pre">tetrahedra_shapes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">part</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fixed_alignment</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bits_prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">dec_prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">intervals</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.tetrahedra_shapes" title="Link to this definition"></a></dt>
|
2495
3004
|
<dd><p>Gives the shapes of the tetrahedra in the current solution to
|
2496
3005
|
the gluing equations. Returns a list containing one info object
|
2497
3006
|
for each tetrahedron. The keys are:</p>
|
@@ -2520,7 +3029,7 @@ normalize the triangle.</p>
|
|
2520
3029
|
|
2521
3030
|
<dl class="py method">
|
2522
3031
|
<dt class="sig sig-object py" id="snappy.Manifold.trace_field_gens">
|
2523
|
-
<span class="sig-name descname"><span class="pre">trace_field_gens</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">fundamental_group_args</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[]</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.trace_field_gens" title="
|
3032
|
+
<span class="sig-name descname"><span class="pre">trace_field_gens</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">fundamental_group_args</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[]</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.trace_field_gens" title="Link to this definition"></a></dt>
|
2524
3033
|
<dd><p>The generators of the trace field as ApproximateAlgebraicNumbers. Can be
|
2525
3034
|
used to compute the tetrahedra field, where the first two parameters
|
2526
3035
|
are bits of precision and maximum degree of the field:</p>
|
@@ -2536,119 +3045,218 @@ are bits of precision and maximum degree of the field:</p>
|
|
2536
3045
|
|
2537
3046
|
<dl class="py method">
|
2538
3047
|
<dt class="sig sig-object py" id="snappy.Manifold.triangulation_isosig">
|
2539
|
-
<span class="sig-name descname"><span class="pre">triangulation_isosig</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">decorated</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ignore_cusp_ordering</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ignore_curve_orientations</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ignore_orientation</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.triangulation_isosig" title="
|
2540
|
-
<dd><p>Returns
|
2541
|
-
|
2542
|
-
<div class="
|
3048
|
+
<span class="sig-name descname"><span class="pre">triangulation_isosig</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">decorated</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ignore_cusp_ordering</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ignore_curves</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ignore_curve_orientations</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ignore_filling_orientations</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ignore_orientation</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">str</span></span></span><a class="headerlink" href="#snappy.Manifold.triangulation_isosig" title="Link to this definition"></a></dt>
|
3049
|
+
<dd><p>Returns the “(decorated) isomorphism signature”, a compact text
|
3050
|
+
representation of the triangulation:</p>
|
3051
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">T</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">'m004'</span><span class="p">)</span>
|
2543
3052
|
<span class="gp">>>> </span><span class="n">T</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">()</span>
|
2544
3053
|
<span class="go">'cPcbbbiht_BaCB'</span>
|
2545
3054
|
</pre></div>
|
2546
3055
|
</div>
|
2547
|
-
<p>
|
2548
|
-
<div class="
|
2549
|
-
<span class="gp">>>> </span><span class="n">
|
2550
|
-
<span class="go">'hLMzMkbcdefggghhhqxqhx_BaaB'</span>
|
2551
|
-
<span class="gp">>>> </span><span class="n">B</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">'hLMzMkbcdefggghhhqxqhx_BaaB'</span><span class="p">)</span>
|
2552
|
-
<span class="gp">>>> </span><span class="n">A</span> <span class="o">==</span> <span class="n">B</span>
|
3056
|
+
<p>This string can be used later to recreate an isomorphic triangulation:</p>
|
3057
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">U</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">'cPcbbbiht_BaCB'</span><span class="p">)</span>
|
3058
|
+
<span class="gp">>>> </span><span class="n">T</span> <span class="o">==</span> <span class="n">U</span>
|
2553
3059
|
<span class="go">True</span>
|
2554
3060
|
</pre></div>
|
2555
3061
|
</div>
|
2556
|
-
<p>
|
2557
|
-
|
2558
|
-
|
2559
|
-
<
|
2560
|
-
<
|
2561
|
-
|
2562
|
-
<span class="
|
2563
|
-
<span class="gp">>>> </span><span class="n">
|
2564
|
-
<span class="
|
2565
|
-
|
2566
|
-
|
2567
|
-
<
|
2568
|
-
<
|
2569
|
-
|
2570
|
-
<
|
2571
|
-
|
2572
|
-
<
|
2573
|
-
<
|
2574
|
-
<
|
2575
|
-
|
2576
|
-
|
2577
|
-
<span class="
|
2578
|
-
<span class="
|
2579
|
-
|
2580
|
-
</
|
2581
|
-
<
|
2582
|
-
|
2583
|
-
|
2584
|
-
|
2585
|
-
<span class="
|
2586
|
-
|
2587
|
-
|
2588
|
-
<span class="gp">>>> </span><span class="n">
|
2589
|
-
<span class="
|
3062
|
+
<p>The isomorphism signature is also used to compute the
|
3063
|
+
<a class="reference internal" href="#snappy.Manifold.isometry_signature" title="snappy.Manifold.isometry_signature"><code class="xref py py-meth docutils literal notranslate"><span class="pre">isometry_signature</span></code></a>.
|
3064
|
+
It comes in two flavors controlled by the <code class="xref py py-attr docutils literal notranslate"><span class="pre">decorated</span></code> flag.</p>
|
3065
|
+
<p><strong>Undecorated isomorphism signature</strong></p>
|
3066
|
+
<p>The undecorated isomorphism signature is a complete invariant of the
|
3067
|
+
(oriented) triangulation up to combinatorial isomorphism:</p>
|
3068
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">T</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">'m015'</span><span class="p">)</span>
|
3069
|
+
<span class="gp">>>> </span><span class="n">T</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span><span class="n">decorated</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
3070
|
+
<span class="go">'dLQbcccdero'</span>
|
3071
|
+
</pre></div>
|
3072
|
+
</div>
|
3073
|
+
<p>It was introduced in
|
3074
|
+
<a class="reference external" href="http://arxiv.org/abs/1110.6080">Burton ‘11</a>. It canonizes and
|
3075
|
+
generalizes the ealier dehydration string by
|
3076
|
+
<a class="reference external" href="https://doi.org/10.1090/S0025-5718-99-01036-4">Callahan, Hildebrand and Weeks ‘99</a>.
|
3077
|
+
The undecorated isomorphism signature can also be given to
|
3078
|
+
<a class="reference external" href="https://regina-normal.github.io/">Regina</a>’s
|
3079
|
+
<code class="docutils literal notranslate"><span class="pre">Triangulation3.fromIsoSig</span></code>.</p>
|
3080
|
+
<p>By default, the orientation (if orientable) is ignored. More
|
3081
|
+
precisely, it computes the string for both orientations (if orientable)
|
3082
|
+
and uses the lexicographically smaller string:</p>
|
3083
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">T</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">'m015'</span><span class="p">)</span>
|
3084
|
+
<span class="gp">>>> </span><span class="n">T</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span><span class="n">decorated</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
3085
|
+
<span class="go">'dLQbcccdero'</span>
|
3086
|
+
<span class="gp">>>> </span><span class="n">T</span><span class="o">.</span><span class="n">reverse_orientation</span><span class="p">()</span>
|
3087
|
+
<span class="gp">>>> </span><span class="n">T</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span><span class="n">decorated</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
3088
|
+
<span class="go">'dLQbcccdero'</span>
|
3089
|
+
</pre></div>
|
3090
|
+
</div>
|
3091
|
+
<p>When specifying <code class="xref py py-attr docutils literal notranslate"><span class="pre">ignore_orientation</span> <span class="pre">=</span> <span class="pre">False</span></code>, the result
|
3092
|
+
encodes the orientation (if orientable). Now the result is
|
3093
|
+
different if we change the orientation of a chiral triangulation:</p>
|
3094
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">T</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">'m015'</span><span class="p">)</span>
|
3095
|
+
<span class="gp">>>> </span><span class="n">T</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span><span class="n">decorated</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">ignore_orientation</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
3096
|
+
<span class="go">'dLQbcccdero'</span>
|
3097
|
+
<span class="gp">>>> </span><span class="n">T</span><span class="o">.</span><span class="n">reverse_orientation</span><span class="p">()</span>
|
3098
|
+
<span class="gp">>>> </span><span class="n">T</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span><span class="n">decorated</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">ignore_orientation</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
3099
|
+
<span class="go">'dLQbccceekg'</span>
|
3100
|
+
</pre></div>
|
3101
|
+
</div>
|
3102
|
+
<p><strong>Decorated isomorphism signature (default)</strong></p>
|
3103
|
+
<p>SnapPy can decorate the isomorphism signature to include the following
|
3104
|
+
peripheral information in a canonical way (that is invariant under
|
3105
|
+
the action by combinatorial isomorphisms of the triangulation):</p>
|
3106
|
+
<ol class="arabic simple">
|
3107
|
+
<li><p>Indexing of the cusps (that is, ideal vertices).</p>
|
3108
|
+
<ul class="simple">
|
3109
|
+
<li><p>Included by default.
|
3110
|
+
Can be suppressed with <code class="xref py py-attr docutils literal notranslate"><span class="pre">ignore_cusp_ordering</span> <span class="pre">=</span> <span class="pre">True</span></code>.</p></li>
|
3111
|
+
</ul>
|
3112
|
+
</li>
|
3113
|
+
<li><p>Peripheral curves (aka meridian and longitude, up to homotopy).</p>
|
3114
|
+
<ul class="simple">
|
3115
|
+
<li><p>Included by default.
|
3116
|
+
Can be suppressed with <code class="xref py py-attr docutils literal notranslate"><span class="pre">ignore_curves</span> <span class="pre">=</span> <span class="pre">True</span></code>.</p></li>
|
3117
|
+
<li><p>By default, the decoration encodes the oriented peripheral curves.
|
3118
|
+
By specifying <code class="xref py py-attr docutils literal notranslate"><span class="pre">ignore_curve_orientations</span> <span class="pre">=</span> <span class="pre">True</span></code>, it encodes
|
3119
|
+
the unoriented peripheral curves instead.</p></li>
|
3120
|
+
</ul>
|
3121
|
+
</li>
|
3122
|
+
<li><p>Dehn-fillings (if present).</p>
|
3123
|
+
<ul class="simple">
|
3124
|
+
<li><p>By default, the decoration encodes the oriented Dehn-fillings.
|
3125
|
+
That is, we also encodes the orientation of the peripheral curve
|
3126
|
+
that is used for the Dehn-filling (this explanation only
|
3127
|
+
works if the coefficients are integral).
|
3128
|
+
By specifying <code class="xref py py-attr docutils literal notranslate"><span class="pre">ignore_filling_orientations</span> <span class="pre">=</span> <span class="pre">True</span></code>, the
|
3129
|
+
decoration encodes the unoriented Dehn-fillings.
|
3130
|
+
That is, it normalizes the Dehn-filling coefficients by picking
|
3131
|
+
a canonical pair among <span class="math notranslate nohighlight">\((m,l)\)</span> and <span class="math notranslate nohighlight">\((-m,-l)\)</span>.</p></li>
|
3132
|
+
</ul>
|
3133
|
+
</li>
|
3134
|
+
</ol>
|
3135
|
+
<p>Details of the encoding are explained in the
|
3136
|
+
<a class="reference external" href="https://github.com/3-manifolds/SnapPy/blob/master/python/decorated_isosig.py">SnapPy source code</a>.</p>
|
3137
|
+
<p><strong>Example</strong></p>
|
3138
|
+
<p>Let us consider the links <span class="math notranslate nohighlight">\(9^2_{34}\)</span> and <code class="docutils literal notranslate"><span class="pre">L9a21</span></code>. Note that we use
|
3139
|
+
<a class="reference internal" href="#snappy.Manifold.canonical_retriangulation" title="snappy.Manifold.canonical_retriangulation"><code class="xref py py-meth docutils literal notranslate"><span class="pre">canonical_retriangulation</span></code></a>
|
3140
|
+
to make the following examples say something intrinsic about the
|
3141
|
+
hyperbolic manifold:</p>
|
3142
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">snappy</span> <span class="kn">import</span> <span class="n">Manifold</span>
|
3143
|
+
<span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">'9^2_34'</span><span class="p">)</span><span class="o">.</span><span class="n">canonical_retriangulation</span><span class="p">()</span>
|
3144
|
+
<span class="gp">>>> </span><span class="n">N</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">'L9a21'</span><span class="p">)</span><span class="o">.</span><span class="n">canonical_retriangulation</span><span class="p">()</span>
|
2590
3145
|
</pre></div>
|
2591
3146
|
</div>
|
2592
|
-
<p>
|
2593
|
-
|
2594
|
-
<div class="
|
2595
|
-
<span class="
|
2596
|
-
<span class="
|
2597
|
-
<span class="gp">>>> </span><span class="n">
|
2598
|
-
<span class="gp">>>> </span><span class="n">isosig</span>
|
2599
|
-
<span class="go">'gLLAQcdeefffdopuado_babbbaab'</span>
|
2600
|
-
<span class="gp">>>> </span><span class="n">N</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="n">isosig</span><span class="p">)</span>
|
2601
|
-
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">isomorphisms_to</span><span class="p">(</span><span class="n">N</span><span class="p">)</span>
|
3147
|
+
<p>The decorated isosig recovers the entire peripheral information faithfully
|
3148
|
+
(including orientation, see below):</p>
|
3149
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">()</span>
|
3150
|
+
<span class="go">'oLLvzQLLQQccdhifihnlmkmlnnpvuvbvouggbggoo_baBabbbBbC'</span>
|
3151
|
+
<span class="gp">>>> </span><span class="n">K</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">'oLLvzQLLQQccdhifihnlmkmlnnpvuvbvouggbggoo_baBabbbBbC'</span><span class="p">)</span>
|
3152
|
+
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">isomorphisms_to</span><span class="p">(</span><span class="n">K</span><span class="p">)</span>
|
2602
3153
|
<span class="go">[0 -> 0 1 -> 1</span>
|
2603
|
-
<span class="go">[
|
2604
|
-
<span class="go">[
|
2605
|
-
<span class="go">Extends to link, 0 -> 0 1 -> 1</span>
|
2606
|
-
<span class="go">[1 0] [1 0]</span>
|
2607
|
-
<span class="go">[0 -1] [0 -1]</span>
|
3154
|
+
<span class="go">[1 0] [1 0]</span>
|
3155
|
+
<span class="go">[0 1] [0 1]</span>
|
2608
3156
|
<span class="go">Extends to link]</span>
|
2609
3157
|
</pre></div>
|
2610
3158
|
</div>
|
2611
|
-
<p>
|
2612
|
-
|
2613
|
-
<
|
2614
|
-
|
2615
|
-
|
2616
|
-
|
2617
|
-
|
2618
|
-
<
|
2619
|
-
<span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">
|
2620
|
-
<span class="
|
2621
|
-
<span class="
|
2622
|
-
|
2623
|
-
</div>
|
2624
|
-
|
2625
|
-
<
|
2626
|
-
|
2627
|
-
|
2628
|
-
<
|
2629
|
-
<span class="
|
2630
|
-
|
2631
|
-
|
2632
|
-
<
|
2633
|
-
|
2634
|
-
|
2635
|
-
|
2636
|
-
<
|
2637
|
-
|
2638
|
-
|
2639
|
-
|
2640
|
-
|
2641
|
-
|
2642
|
-
|
2643
|
-
|
2644
|
-
|
2645
|
-
|
2646
|
-
|
3159
|
+
<p>The two links have isometric complements:</p>
|
3160
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span><span class="n">decorated</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
3161
|
+
<span class="go">'oLLvzQLLQQccdhifihnlmkmlnnpvuvbvouggbggoo'</span>
|
3162
|
+
<span class="gp">>>> </span><span class="n">N</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span><span class="n">decorated</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
3163
|
+
<span class="go">'oLLvzQLLQQccdhifihnlmkmlnnpvuvbvouggbggoo'</span>
|
3164
|
+
</pre></div>
|
3165
|
+
</div>
|
3166
|
+
<p>However, the complements have different handedness:</p>
|
3167
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span><span class="n">decorated</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span><span class="n">ignore_orientation</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
3168
|
+
<span class="go">'oLLzLPwzQQccdeghjiiklmnmnnuvuvvavovvffffo'</span>
|
3169
|
+
<span class="gp">>>> </span><span class="n">N</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span><span class="n">decorated</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span><span class="n">ignore_orientation</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
3170
|
+
<span class="go">'oLLvzQLLQQccdhifihnlmkmlnnpvuvbvouggbggoo'</span>
|
3171
|
+
</pre></div>
|
3172
|
+
</div>
|
3173
|
+
<p>Also, the cusps/components of the link are indexed differently:</p>
|
3174
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span><span class="n">ignore_curves</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
3175
|
+
<span class="go">'oLLvzQLLQQccdhifihnlmkmlnnpvuvbvouggbggoo_ba'</span>
|
3176
|
+
<span class="gp">>>> </span><span class="n">N</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span><span class="n">ignore_curves</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
3177
|
+
<span class="go">'oLLvzQLLQQccdhifihnlmkmlnnpvuvbvouggbggoo_ab'</span>
|
3178
|
+
</pre></div>
|
3179
|
+
</div>
|
3180
|
+
<p>Ignoring the indexing, we also see that the oriented merdians and
|
3181
|
+
longitudes do not match:</p>
|
3182
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span><span class="n">ignore_cusp_ordering</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
3183
|
+
<span class="go">'oLLvzQLLQQccdhifihnlmkmlnnpvuvbvouggbggoo_bBbCBabb'</span>
|
3184
|
+
<span class="gp">>>> </span><span class="n">N</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span><span class="n">ignore_cusp_ordering</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
3185
|
+
<span class="go">'oLLvzQLLQQccdhifihnlmkmlnnpvuvbvouggbggoo_BbbCbabb'</span>
|
3186
|
+
</pre></div>
|
3187
|
+
</div>
|
3188
|
+
<p>However, they are the same links (ignoring indexing and orientation):</p>
|
3189
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span><span class="n">ignore_cusp_ordering</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">ignore_curve_orientations</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
3190
|
+
<span class="go">'oLLvzQLLQQccdhifihnlmkmlnnpvuvbvouggbggoo_bBBcbabb'</span>
|
3191
|
+
<span class="gp">>>> </span><span class="n">N</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span><span class="n">ignore_cusp_ordering</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">ignore_curve_orientations</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
3192
|
+
<span class="go">'oLLvzQLLQQccdhifihnlmkmlnnpvuvbvouggbggoo_bBBcbabb'</span>
|
3193
|
+
</pre></div>
|
3194
|
+
</div>
|
3195
|
+
<p>Let us create two surgery presentations from the links (note that we
|
3196
|
+
fill after
|
3197
|
+
<a class="reference internal" href="#snappy.Manifold.canonical_retriangulation" title="snappy.Manifold.canonical_retriangulation"><code class="xref py py-meth docutils literal notranslate"><span class="pre">canonical_retriangulation</span></code></a>
|
3198
|
+
since it rejects Dehn-fillings):</p>
|
3199
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">dehn_fill</span><span class="p">((</span><span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">),</span><span class="mi">0</span><span class="p">)</span>
|
3200
|
+
<span class="gp">>>> </span><span class="n">N</span><span class="o">.</span><span class="n">dehn_fill</span><span class="p">((</span><span class="mi">4</span><span class="p">,</span><span class="o">-</span><span class="mi">5</span><span class="p">),</span><span class="mi">1</span><span class="p">)</span>
|
3201
|
+
</pre></div>
|
3202
|
+
</div>
|
3203
|
+
<p>They are equivalent surgery presentations (of the same manifold):</p>
|
3204
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span>
|
3205
|
+
<span class="gp">... </span> <span class="n">ignore_cusp_ordering</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
3206
|
+
<span class="gp">... </span> <span class="n">ignore_curves</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
3207
|
+
<span class="gp">... </span> <span class="n">ignore_filling_orientations</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
3208
|
+
<span class="go">'oLLvzQLLQQccdhifihnlmkmlnnpvuvbvouggbggoo(0,0)(1,5)'</span>
|
3209
|
+
<span class="gp">>>> </span><span class="n">N</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span>
|
3210
|
+
<span class="gp">... </span> <span class="n">ignore_cusp_ordering</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
3211
|
+
<span class="gp">... </span> <span class="n">ignore_curves</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
3212
|
+
<span class="gp">... </span> <span class="n">ignore_filling_orientations</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
3213
|
+
<span class="go">'oLLvzQLLQQccdhifihnlmkmlnnpvuvbvouggbggoo(0,0)(1,5)'</span>
|
3214
|
+
</pre></div>
|
3215
|
+
</div>
|
3216
|
+
<p><strong>Orientation</strong></p>
|
3217
|
+
<p>Note that <code class="xref py py-attr docutils literal notranslate"><span class="pre">ignore_orientation=True</span></code> only applies to the undecorated
|
3218
|
+
part of the isomorphism signature. The decoration can still capture the
|
3219
|
+
the orientation.
|
3220
|
+
More, precisely, the result of <a class="reference internal" href="#snappy.Manifold.triangulation_isosig" title="snappy.Manifold.triangulation_isosig"><code class="xref py py-meth docutils literal notranslate"><span class="pre">triangulation_isosig()</span></code></a> depends on
|
3221
|
+
the orientation (if the triangulation is orientable and chiral) if any
|
3222
|
+
of the following is true:</p>
|
3223
|
+
<ol class="arabic simple">
|
3224
|
+
<li><p><code class="xref py py-attr docutils literal notranslate"><span class="pre">ignore_orientation</span> <span class="pre">=</span> <span class="pre">False</span></code>.</p></li>
|
3225
|
+
<li><p><code class="xref py py-attr docutils literal notranslate"><span class="pre">decorated</span> <span class="pre">=</span> <span class="pre">True</span></code> and
|
3226
|
+
<code class="xref py py-attr docutils literal notranslate"><span class="pre">ignore_curves</span> <span class="pre">=</span> <span class="pre">False</span></code> and
|
3227
|
+
<code class="xref py py-attr docutils literal notranslate"><span class="pre">ignore_filling_orientations</span> <span class="pre">=</span> <span class="pre">False</span></code>.</p></li>
|
3228
|
+
</ol>
|
3229
|
+
<p>In these cases, re-constructing a triangulation from the isomorphism
|
3230
|
+
signature yields a triangulation with the same handedness.</p>
|
3231
|
+
<dl class="field-list simple">
|
3232
|
+
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
3233
|
+
<dd class="field-odd"><ul class="simple">
|
3234
|
+
<li><p><strong>decorated</strong> – Include peripheral information such as indexing of the cusps,
|
3235
|
+
(oriented or unoriented) peripheral curves and
|
3236
|
+
(oriented or unoriented) Dehn-fillings.</p></li>
|
3237
|
+
<li><p><strong>ignore_cusp_ordering</strong> – Do not encode the indexing of the cusps.
|
3238
|
+
Only relevant if <code class="xref py py-attr docutils literal notranslate"><span class="pre">decorated</span> <span class="pre">=</span> <span class="pre">True</span></code>.</p></li>
|
3239
|
+
<li><p><strong>ignore_curves</strong> – Do not encode the peripheral curves.
|
3240
|
+
Only relevant if <code class="xref py py-attr docutils literal notranslate"><span class="pre">decorated</span> <span class="pre">=</span> <span class="pre">True</span></code>.
|
3241
|
+
This is new in SnapPy version 3.2.
|
3242
|
+
If <code class="xref py py-attr docutils literal notranslate"><span class="pre">ignore_curves</span> <span class="pre">=</span> <span class="pre">True</span></code>, the result of this method cannot
|
3243
|
+
be given to prior versions.</p></li>
|
3244
|
+
<li><p><strong>ignore_curve_orientations</strong> – Do not encode the orientations of the peripheral curves.
|
3245
|
+
Only relevant if <code class="xref py py-attr docutils literal notranslate"><span class="pre">decorated</span> <span class="pre">=</span> <span class="pre">True</span></code> and
|
3246
|
+
<code class="xref py py-attr docutils literal notranslate"><span class="pre">ignore_curves</span> <span class="pre">=</span> <span class="pre">False</span></code>.</p></li>
|
3247
|
+
<li><p><strong>ignore_filling_orientations</strong> – Do not encode the orientations of the Dehn-fillings.
|
3248
|
+
Only relevant if <code class="xref py py-attr docutils literal notranslate"><span class="pre">decorated</span> <span class="pre">=</span> <span class="pre">True</span></code>.</p></li>
|
3249
|
+
<li><p><strong>ignore_orientation</strong> – Do not encode the orientation of the triangulation in the
|
3250
|
+
undecorated part of the triangulation isosig.
|
3251
|
+
See above section about orientation.</p></li>
|
3252
|
+
</ul>
|
3253
|
+
</dd>
|
3254
|
+
</dl>
|
2647
3255
|
</dd></dl>
|
2648
3256
|
|
2649
3257
|
<dl class="py method">
|
2650
3258
|
<dt class="sig sig-object py" id="snappy.Manifold.use_field_conversion">
|
2651
|
-
<
|
3259
|
+
<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">use_field_conversion</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.use_field_conversion" title="Link to this definition"></a></dt>
|
2652
3260
|
<dd><p>A class method for specifying a numerical conversion function.
|
2653
3261
|
This method is deprecated: SnapPy will automatically use
|
2654
3262
|
SageMath number types or its own SnapPy number type depending on
|
@@ -2672,23 +3280,27 @@ strings ‘sage’ or ‘snappy’ can be passed as arguments to select
|
|
2672
3280
|
either of the two default behaviors.</p>
|
2673
3281
|
<p>EXAMPLE:</p>
|
2674
3282
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">'m004'</span><span class="p">)</span>
|
2675
|
-
<span class="n">sage</span><span class="p">:</span> <span class="n">
|
2676
|
-
<span class="n">
|
3283
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">R</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">volume</span><span class="p">()</span><span class="o">.</span><span class="n">parent</span><span class="p">()</span>
|
3284
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">R</span><span class="o">.</span><span class="n">name</span><span class="p">()</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">'RealField'</span><span class="p">)</span>
|
3285
|
+
<span class="kc">True</span>
|
3286
|
+
<span class="n">sage</span><span class="p">:</span> <span class="kn">from</span> <span class="nn">snappy.number</span> <span class="kn">import</span> <span class="n">SnapPyNumbers</span>
|
2677
3287
|
<span class="n">sage</span><span class="p">:</span> <span class="n">Manifold</span><span class="o">.</span><span class="n">use_field_conversion</span><span class="p">(</span><span class="s1">'snappy'</span><span class="p">)</span>
|
2678
3288
|
<span class="n">sage</span><span class="p">:</span> <span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">'m004'</span><span class="p">)</span>
|
2679
|
-
<span class="n">sage</span><span class="p">:</span> <span class="n">
|
2680
|
-
<span class="n">
|
3289
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">R</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">volume</span><span class="p">()</span><span class="o">.</span><span class="n">parent</span><span class="p">()</span>
|
3290
|
+
<span class="n">sage</span><span class="p">:</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">R</span><span class="p">,</span> <span class="n">SnapPyNumbers</span><span class="p">)</span>
|
3291
|
+
<span class="kc">True</span>
|
2681
3292
|
<span class="n">sage</span><span class="p">:</span> <span class="n">Manifold</span><span class="o">.</span><span class="n">use_field_conversion</span><span class="p">(</span><span class="s1">'sage'</span><span class="p">)</span>
|
2682
3293
|
<span class="n">sage</span><span class="p">:</span> <span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">'m004'</span><span class="p">)</span>
|
2683
|
-
<span class="n">sage</span><span class="p">:</span> <span class="n">
|
2684
|
-
<span class="n">
|
3294
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">R</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">volume</span><span class="p">()</span><span class="o">.</span><span class="n">parent</span><span class="p">()</span>
|
3295
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">R</span><span class="o">.</span><span class="n">name</span><span class="p">()</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">'RealField'</span><span class="p">)</span>
|
3296
|
+
<span class="kc">True</span>
|
2685
3297
|
</pre></div>
|
2686
3298
|
</div>
|
2687
3299
|
</dd></dl>
|
2688
3300
|
|
2689
3301
|
<dl class="py method">
|
2690
3302
|
<dt class="sig sig-object py" id="snappy.Manifold.verify_hyperbolicity">
|
2691
|
-
<span class="sig-name descname"><span class="pre">verify_hyperbolicity</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bits_prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">holonomy</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fundamental_group_args</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[]</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">lift_to_SL</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.verify_hyperbolicity" title="
|
3303
|
+
<span class="sig-name descname"><span class="pre">verify_hyperbolicity</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bits_prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">holonomy</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fundamental_group_args</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[]</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">lift_to_SL</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.verify_hyperbolicity" title="Link to this definition"></a></dt>
|
2692
3304
|
<dd><p>Given an orientable SnapPy Manifold, verifies its hyperbolicity.</p>
|
2693
3305
|
<p>Similar to HIKMOT’s <a class="reference internal" href="#snappy.Manifold.verify_hyperbolicity" title="snappy.Manifold.verify_hyperbolicity"><code class="xref py py-meth docutils literal notranslate"><span class="pre">verify_hyperbolicity()</span></code></a>, the result is either
|
2694
3306
|
<code class="docutils literal notranslate"><span class="pre">(True,</span> <span class="pre">listOfShapeIntervals)</span></code> or <code class="docutils literal notranslate"><span class="pre">(False,</span> <span class="pre">[])</span></code> if verification failed.
|
@@ -2746,7 +3358,7 @@ tetrahedra are positively oriented.</p>
|
|
2746
3358
|
|
2747
3359
|
<dl class="py method">
|
2748
3360
|
<dt class="sig sig-object py" id="snappy.Manifold.volume">
|
2749
|
-
<span class="sig-name descname"><span class="pre">volume</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">accuracy</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verified</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bits_prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.volume" title="
|
3361
|
+
<span class="sig-name descname"><span class="pre">volume</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">accuracy</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verified</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bits_prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.volume" title="Link to this definition"></a></dt>
|
2750
3362
|
<dd><p>Returns the volume of the current solution to the hyperbolic
|
2751
3363
|
gluing equations; if the solution is sufficiently non-degenerate,
|
2752
3364
|
this is the sum of the volumes of the hyperbolic pieces in
|
@@ -2778,9 +3390,9 @@ that the manifold is indeed hyperbolic):</p>
|
|
2778
3390
|
|
2779
3391
|
<dl class="py method">
|
2780
3392
|
<dt class="sig sig-object py" id="snappy.Manifold.with_hyperbolic_structure">
|
2781
|
-
<span class="sig-name descname"><span class="pre">with_hyperbolic_structure</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.with_hyperbolic_structure" title="
|
3393
|
+
<span class="sig-name descname"><span class="pre">with_hyperbolic_structure</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.with_hyperbolic_structure" title="Link to this definition"></a></dt>
|
2782
3394
|
<dd><p>Add a (possibly degenerate) hyperbolic structure, turning the
|
2783
|
-
Triangulation into a Manifold
|
3395
|
+
<a class="reference internal" href="triangulation.html#snappy.Triangulation" title="snappy.Triangulation"><code class="xref py py-class docutils literal notranslate"><span class="pre">Triangulation</span></code></a> into a <a class="reference internal" href="#snappy.Manifold" title="snappy.Manifold"><code class="xref py py-class docutils literal notranslate"><span class="pre">Manifold</span></code></a>.</p>
|
2784
3396
|
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">'m004'</span><span class="p">)</span>
|
2785
3397
|
<span class="gp">>>> </span><span class="n">N</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">with_hyperbolic_structure</span><span class="p">()</span>
|
2786
3398
|
<span class="gp">>>> </span><span class="n">N</span><span class="o">.</span><span class="n">volume</span><span class="p">()</span>
|
@@ -2791,8 +3403,8 @@ Triangulation into a Manifold.</p>
|
|
2791
3403
|
|
2792
3404
|
<dl class="py method">
|
2793
3405
|
<dt class="sig sig-object py" id="snappy.Manifold.without_hyperbolic_structure">
|
2794
|
-
<span class="sig-name descname"><span class="pre">without_hyperbolic_structure</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.without_hyperbolic_structure" title="
|
2795
|
-
<dd><p>Returns self as a Triangulation
|
3406
|
+
<span class="sig-name descname"><span class="pre">without_hyperbolic_structure</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.without_hyperbolic_structure" title="Link to this definition"></a></dt>
|
3407
|
+
<dd><p>Returns self as a <a class="reference internal" href="triangulation.html#snappy.Triangulation" title="snappy.Triangulation"><code class="xref py py-class docutils literal notranslate"><span class="pre">Triangulation</span></code></a>, forgetting the hyperbolic
|
2796
3408
|
structure in the process.</p>
|
2797
3409
|
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">'9_42'</span><span class="p">)</span>
|
2798
3410
|
<span class="gp">>>> </span><span class="n">T</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">without_hyperbolic_structure</span><span class="p">()</span>
|
@@ -2817,7 +3429,7 @@ structure in the process.</p>
|
|
2817
3429
|
<hr/>
|
2818
3430
|
|
2819
3431
|
<div role="contentinfo">
|
2820
|
-
<p>© Copyright 2009-
|
3432
|
+
<p>© Copyright 2009-2025, by Marc Culler, Nathan Dunfield, Matthias Goerner, Jeffrey Weeks and others.</p>
|
2821
3433
|
</div>
|
2822
3434
|
|
2823
3435
|
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|