snappy 3.1.1__cp311-cp311-macosx_11_0_arm64.whl → 3.2__cp311-cp311-macosx_11_0_arm64.whl
Sign up to get free protection for your applications and to get access to all the features.
- 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
|