snappy 3.2__cp313-cp313-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-313-darwin.so +0 -0
- snappy/SnapPy.cpython-313-darwin.so +0 -0
- snappy/SnapPy.ico +0 -0
- snappy/SnapPy.png +0 -0
- snappy/SnapPyHP.cpython-313-darwin.so +0 -0
- snappy/__init__.py +760 -0
- snappy/app.py +605 -0
- snappy/app_menus.py +372 -0
- snappy/browser.py +998 -0
- snappy/cache.py +25 -0
- snappy/canonical.py +249 -0
- snappy/cusps/__init__.py +38 -0
- snappy/cusps/cusp_area_matrix.py +101 -0
- snappy/cusps/cusp_areas_from_matrix.py +173 -0
- 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 +454 -0
- snappy/db_utilities.py +79 -0
- snappy/decorated_isosig.py +710 -0
- snappy/dev/__init__.py +0 -0
- snappy/dev/extended_ptolemy/__init__.py +8 -0
- snappy/dev/extended_ptolemy/closed.py +106 -0
- snappy/dev/extended_ptolemy/complexVolumesClosed.py +149 -0
- snappy/dev/extended_ptolemy/direct.py +42 -0
- snappy/dev/extended_ptolemy/extended.py +406 -0
- snappy/dev/extended_ptolemy/giac_helper.py +43 -0
- snappy/dev/extended_ptolemy/giac_rur.py +129 -0
- snappy/dev/extended_ptolemy/gluing.py +46 -0
- snappy/dev/extended_ptolemy/phc_wrapper.py +220 -0
- snappy/dev/extended_ptolemy/printMatrices.py +70 -0
- snappy/dev/vericlosed/__init__.py +1 -0
- snappy/dev/vericlosed/computeApproxHyperbolicStructureNew.py +159 -0
- snappy/dev/vericlosed/computeApproxHyperbolicStructureOrb.py +90 -0
- snappy/dev/vericlosed/computeVerifiedHyperbolicStructure.py +111 -0
- snappy/dev/vericlosed/gimbalLoopFinder.py +130 -0
- snappy/dev/vericlosed/hyperbolicStructure.py +313 -0
- snappy/dev/vericlosed/krawczykCertifiedEdgeLengthsEngine.py +165 -0
- snappy/dev/vericlosed/oneVertexTruncatedComplex.py +122 -0
- snappy/dev/vericlosed/orb/__init__.py +1 -0
- snappy/dev/vericlosed/orb/orb_solution_for_snappea_finite_triangulation_mac +0 -0
- snappy/dev/vericlosed/parseVertexGramMatrixFile.py +47 -0
- snappy/dev/vericlosed/polishApproxHyperbolicStructure.py +61 -0
- snappy/dev/vericlosed/test.py +54 -0
- snappy/dev/vericlosed/truncatedComplex.py +176 -0
- snappy/dev/vericlosed/verificationError.py +58 -0
- snappy/dev/vericlosed/verifyHyperbolicStructureEngine.py +177 -0
- snappy/doc/_images/SnapPy-196.png +0 -0
- snappy/doc/_images/geodesics.jpg +0 -0
- snappy/doc/_images/m004_paper_plane_on_systole.jpg +0 -0
- snappy/doc/_images/m125_paper_plane.jpg +0 -0
- snappy/doc/_images/mac.png +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/_images/plink-action.png +0 -0
- snappy/doc/_images/ubuntu.png +0 -0
- snappy/doc/_images/win7.png +0 -0
- snappy/doc/_sources/additional_classes.rst.txt +40 -0
- snappy/doc/_sources/bugs.rst.txt +14 -0
- snappy/doc/_sources/censuses.rst.txt +51 -0
- snappy/doc/_sources/credits.rst.txt +75 -0
- snappy/doc/_sources/development.rst.txt +259 -0
- snappy/doc/_sources/index.rst.txt +182 -0
- snappy/doc/_sources/installing.rst.txt +247 -0
- snappy/doc/_sources/manifold.rst.txt +6 -0
- snappy/doc/_sources/manifoldhp.rst.txt +46 -0
- snappy/doc/_sources/news.rst.txt +355 -0
- snappy/doc/_sources/other.rst.txt +25 -0
- snappy/doc/_sources/platonic_census.rst.txt +20 -0
- snappy/doc/_sources/plink.rst.txt +102 -0
- snappy/doc/_sources/ptolemy.rst.txt +66 -0
- snappy/doc/_sources/ptolemy_classes.rst.txt +42 -0
- snappy/doc/_sources/ptolemy_examples1.rst.txt +298 -0
- snappy/doc/_sources/ptolemy_examples2.rst.txt +363 -0
- snappy/doc/_sources/ptolemy_examples3.rst.txt +301 -0
- snappy/doc/_sources/ptolemy_examples4.rst.txt +61 -0
- snappy/doc/_sources/ptolemy_prelim.rst.txt +105 -0
- snappy/doc/_sources/screenshots.rst.txt +21 -0
- snappy/doc/_sources/snap.rst.txt +87 -0
- snappy/doc/_sources/snappy.rst.txt +28 -0
- snappy/doc/_sources/spherogram.rst.txt +103 -0
- snappy/doc/_sources/todo.rst.txt +47 -0
- snappy/doc/_sources/triangulation.rst.txt +11 -0
- snappy/doc/_sources/tutorial.rst.txt +49 -0
- snappy/doc/_sources/verify.rst.txt +210 -0
- snappy/doc/_sources/verify_internals.rst.txt +79 -0
- snappy/doc/_static/SnapPy-horizontal-128.png +0 -0
- snappy/doc/_static/SnapPy.ico +0 -0
- snappy/doc/_static/_sphinx_javascript_frameworks_compat.js +123 -0
- snappy/doc/_static/basic.css +925 -0
- snappy/doc/_static/css/badge_only.css +1 -0
- snappy/doc/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
- snappy/doc/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
- snappy/doc/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
- snappy/doc/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
- snappy/doc/_static/css/fonts/fontawesome-webfont.eot +0 -0
- snappy/doc/_static/css/fonts/fontawesome-webfont.svg +2671 -0
- snappy/doc/_static/css/fonts/fontawesome-webfont.ttf +0 -0
- snappy/doc/_static/css/fonts/fontawesome-webfont.woff +0 -0
- snappy/doc/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
- snappy/doc/_static/css/fonts/lato-bold-italic.woff +0 -0
- snappy/doc/_static/css/fonts/lato-bold-italic.woff2 +0 -0
- snappy/doc/_static/css/fonts/lato-bold.woff +0 -0
- snappy/doc/_static/css/fonts/lato-bold.woff2 +0 -0
- snappy/doc/_static/css/fonts/lato-normal-italic.woff +0 -0
- snappy/doc/_static/css/fonts/lato-normal-italic.woff2 +0 -0
- snappy/doc/_static/css/fonts/lato-normal.woff +0 -0
- snappy/doc/_static/css/fonts/lato-normal.woff2 +0 -0
- snappy/doc/_static/css/theme.css +4 -0
- snappy/doc/_static/doctools.js +156 -0
- snappy/doc/_static/documentation_options.js +13 -0
- snappy/doc/_static/file.png +0 -0
- 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/jquery.js +2 -0
- snappy/doc/_static/js/badge_only.js +1 -0
- snappy/doc/_static/js/theme.js +1 -0
- snappy/doc/_static/js/versions.js +228 -0
- snappy/doc/_static/language_data.js +199 -0
- snappy/doc/_static/minus.png +0 -0
- snappy/doc/_static/plus.png +0 -0
- snappy/doc/_static/pygments.css +75 -0
- snappy/doc/_static/searchtools.js +620 -0
- snappy/doc/_static/snappy_furo.css +33 -0
- snappy/doc/_static/snappy_sphinx_rtd_theme.css +42 -0
- snappy/doc/_static/sphinx_highlight.js +154 -0
- snappy/doc/additional_classes.html +1500 -0
- snappy/doc/bugs.html +132 -0
- snappy/doc/censuses.html +427 -0
- snappy/doc/credits.html +181 -0
- snappy/doc/development.html +384 -0
- snappy/doc/genindex.html +1331 -0
- snappy/doc/index.html +262 -0
- snappy/doc/installing.html +346 -0
- snappy/doc/manifold.html +3452 -0
- snappy/doc/manifoldhp.html +180 -0
- snappy/doc/news.html +388 -0
- snappy/doc/objects.inv +0 -0
- snappy/doc/other.html +161 -0
- snappy/doc/platonic_census.html +375 -0
- snappy/doc/plink.html +210 -0
- snappy/doc/ptolemy.html +254 -0
- snappy/doc/ptolemy_classes.html +1144 -0
- snappy/doc/ptolemy_examples1.html +409 -0
- snappy/doc/ptolemy_examples2.html +471 -0
- snappy/doc/ptolemy_examples3.html +414 -0
- snappy/doc/ptolemy_examples4.html +195 -0
- snappy/doc/ptolemy_prelim.html +248 -0
- snappy/doc/py-modindex.html +165 -0
- snappy/doc/screenshots.html +141 -0
- snappy/doc/search.html +135 -0
- snappy/doc/searchindex.js +1 -0
- snappy/doc/snap.html +202 -0
- snappy/doc/snappy.html +181 -0
- snappy/doc/spherogram.html +1211 -0
- snappy/doc/todo.html +166 -0
- snappy/doc/triangulation.html +1584 -0
- snappy/doc/tutorial.html +159 -0
- snappy/doc/verify.html +330 -0
- snappy/doc/verify_internals.html +1235 -0
- snappy/drilling/__init__.py +456 -0
- snappy/drilling/barycentric.py +103 -0
- snappy/drilling/constants.py +5 -0
- snappy/drilling/crush.py +270 -0
- snappy/drilling/cusps.py +125 -0
- snappy/drilling/debug.py +242 -0
- snappy/drilling/epsilons.py +6 -0
- snappy/drilling/exceptions.py +55 -0
- snappy/drilling/moves.py +620 -0
- snappy/drilling/peripheral_curves.py +210 -0
- snappy/drilling/perturb.py +188 -0
- snappy/drilling/shorten.py +36 -0
- snappy/drilling/subdivide.py +274 -0
- snappy/drilling/test.py +23 -0
- snappy/drilling/test_cases.py +126 -0
- snappy/drilling/tracing.py +351 -0
- snappy/exceptions.py +26 -0
- snappy/export_stl.py +120 -0
- snappy/exterior_to_link/__init__.py +2 -0
- snappy/exterior_to_link/barycentric_geometry.py +463 -0
- snappy/exterior_to_link/exceptions.py +6 -0
- snappy/exterior_to_link/geodesic_map.json +14408 -0
- snappy/exterior_to_link/hyp_utils.py +112 -0
- snappy/exterior_to_link/link_projection.py +323 -0
- snappy/exterior_to_link/main.py +197 -0
- snappy/exterior_to_link/mcomplex_with_expansion.py +261 -0
- snappy/exterior_to_link/mcomplex_with_link.py +687 -0
- snappy/exterior_to_link/mcomplex_with_memory.py +162 -0
- snappy/exterior_to_link/pl_utils.py +491 -0
- snappy/exterior_to_link/put_in_S3.py +156 -0
- snappy/exterior_to_link/rational_linear_algebra.py +123 -0
- snappy/exterior_to_link/rational_linear_algebra_wrapped.py +135 -0
- snappy/exterior_to_link/simplify_to_base_tri.py +114 -0
- snappy/exterior_to_link/stored_moves.py +475 -0
- snappy/exterior_to_link/test.py +31 -0
- snappy/filedialog.py +28 -0
- 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/geometric_structure/geodesic/fixed_points.py +93 -0
- snappy/geometric_structure/geodesic/geodesic_start_point_info.py +435 -0
- 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 +121 -0
- snappy/horoviewer.py +443 -0
- snappy/hyperboloid/__init__.py +212 -0
- 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/info_icon.gif +0 -0
- snappy/infowindow.py +65 -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/manifolds/HTWKnots/alternating.gz +0 -0
- snappy/manifolds/HTWKnots/nonalternating.gz +0 -0
- snappy/manifolds/__init__.py +3 -0
- snappy/math_basics.py +176 -0
- snappy/matrix.py +525 -0
- snappy/number.py +657 -0
- snappy/numeric_output_checker.py +345 -0
- snappy/pari.py +41 -0
- snappy/phone_home.py +57 -0
- snappy/polyviewer.py +259 -0
- snappy/ptolemy/__init__.py +17 -0
- snappy/ptolemy/component.py +103 -0
- snappy/ptolemy/coordinates.py +2290 -0
- snappy/ptolemy/fieldExtensions.py +153 -0
- snappy/ptolemy/findLoops.py +473 -0
- snappy/ptolemy/geometricRep.py +59 -0
- snappy/ptolemy/homology.py +165 -0
- snappy/ptolemy/magma/default.magma_template +229 -0
- snappy/ptolemy/magma/radicalsOfPrimaryDecomposition.magma_template +79 -0
- snappy/ptolemy/manifoldMethods.py +395 -0
- snappy/ptolemy/matrix.py +350 -0
- snappy/ptolemy/numericalSolutionsToGroebnerBasis.py +113 -0
- snappy/ptolemy/polynomial.py +857 -0
- snappy/ptolemy/processComponents.py +173 -0
- snappy/ptolemy/processFileBase.py +247 -0
- snappy/ptolemy/processFileDispatch.py +46 -0
- snappy/ptolemy/processMagmaFile.py +392 -0
- snappy/ptolemy/processRurFile.py +150 -0
- snappy/ptolemy/ptolemyGeneralizedObstructionClass.py +102 -0
- snappy/ptolemy/ptolemyObstructionClass.py +64 -0
- snappy/ptolemy/ptolemyVariety.py +1029 -0
- snappy/ptolemy/ptolemyVarietyPrimeIdealGroebnerBasis.py +140 -0
- snappy/ptolemy/reginaWrapper.py +698 -0
- snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c0.magma_out.bz2 +0 -0
- snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c1.magma_out.bz2 +0 -0
- snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c2.magma_out.bz2 +0 -0
- snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c3.magma_out.bz2 +0 -0
- snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c4.magma_out.bz2 +0 -0
- snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c5.magma_out.bz2 +0 -0
- snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c6.magma_out.bz2 +0 -0
- snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c7.magma_out.bz2 +0 -0
- snappy/ptolemy/regina_testing_files_generalized/m003__sl3_c0.magma_out.bz2 +0 -0
- snappy/ptolemy/regina_testing_files_generalized/m003__sl3_c1.magma_out.bz2 +0 -0
- snappy/ptolemy/regina_testing_files_generalized/m015__sl2_c0.magma_out.bz2 +0 -0
- snappy/ptolemy/regina_testing_files_generalized/m015__sl2_c1.magma_out.bz2 +0 -0
- snappy/ptolemy/regina_testing_files_generalized/m015__sl3_c0.magma_out.bz2 +0 -0
- snappy/ptolemy/regina_testing_files_generalized/m015__sl3_c1.magma_out.bz2 +0 -0
- snappy/ptolemy/rur.py +545 -0
- snappy/ptolemy/solutionsToPrimeIdealGroebnerBasis.py +277 -0
- snappy/ptolemy/test.py +1126 -0
- snappy/ptolemy/testing_files/3_1__sl2_c0.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files/3_1__sl2_c1.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files/4_1__sl2_c0.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files/4_1__sl2_c1.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files/4_1__sl3_c0.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files/4_1__sl4_c0.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files/4_1__sl4_c1.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files/5_2__sl2_c0.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files/5_2__sl2_c1.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c0.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c1.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c2.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c3.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c4.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c5.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c6.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c7.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files/data/pgl2/OrientableCuspedCensus/03_tetrahedra/m019__sl2_c0.magma_out +95 -0
- snappy/ptolemy/testing_files/data/pgl2/OrientableCuspedCensus/03_tetrahedra/m019__sl2_c1.magma_out +95 -0
- snappy/ptolemy/testing_files/m015__sl3_c0.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files/m135__sl2_c0.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files/m135__sl2_c1.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files/m135__sl2_c2.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files/m135__sl2_c3.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files/m135__sl2_c4.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files/m135__sl2_c5.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files/m135__sl2_c6.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files/m135__sl2_c7.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files/s000__sl2_c0.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files/s000__sl2_c1.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files/t00000__sl2_c0.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files/t00000__sl2_c1.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files/v0000__sl2_c0.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files/v0000__sl2_c1.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files/v0000__sl2_c2.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files/v0000__sl2_c3.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files_generalized/m003__sl2_c0.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files_generalized/m003__sl2_c1.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files_generalized/m003__sl3_c0.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files_generalized/m003__sl3_c1.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files_generalized/m004__sl2_c0.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files_generalized/m004__sl2_c1.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files_generalized/m015__sl2_c1.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files_generalized/m015__sl3_c0.magma_out.bz2 +0 -0
- snappy/ptolemy/testing_files_rur/m052__sl3_c0.rur.bz2 +0 -0
- snappy/ptolemy/utilities.py +236 -0
- 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 +197 -0
- snappy/raytracing/eyeball.py +123 -0
- snappy/raytracing/finite_raytracing_data.py +237 -0
- snappy/raytracing/finite_viewer.py +590 -0
- snappy/raytracing/geodesic_tube_info.py +174 -0
- snappy/raytracing/geodesics.py +246 -0
- snappy/raytracing/geodesics_window.py +258 -0
- snappy/raytracing/gui_utilities.py +293 -0
- snappy/raytracing/hyperboloid_navigation.py +556 -0
- snappy/raytracing/hyperboloid_utilities.py +234 -0
- snappy/raytracing/ideal_raytracing_data.py +592 -0
- snappy/raytracing/inside_viewer.py +974 -0
- snappy/raytracing/pack.py +22 -0
- snappy/raytracing/raytracing_data.py +126 -0
- snappy/raytracing/raytracing_view.py +454 -0
- snappy/raytracing/shaders/Eye.png +0 -0
- snappy/raytracing/shaders/NonGeometric.png +0 -0
- snappy/raytracing/shaders/__init__.py +101 -0
- snappy/raytracing/shaders/fragment.glsl +1744 -0
- snappy/raytracing/test.py +29 -0
- snappy/raytracing/tooltip.py +146 -0
- snappy/raytracing/upper_halfspace_utilities.py +98 -0
- snappy/raytracing/view_scale_controller.py +98 -0
- snappy/raytracing/zoom_slider/__init__.py +263 -0
- snappy/raytracing/zoom_slider/inward.png +0 -0
- snappy/raytracing/zoom_slider/inward18.png +0 -0
- snappy/raytracing/zoom_slider/outward.png +0 -0
- snappy/raytracing/zoom_slider/outward18.png +0 -0
- snappy/raytracing/zoom_slider/test.py +20 -0
- snappy/sage_helper.py +117 -0
- snappy/settings.py +409 -0
- snappy/shell.py +53 -0
- snappy/snap/__init__.py +114 -0
- snappy/snap/character_varieties.py +375 -0
- snappy/snap/find_field.py +372 -0
- snappy/snap/fundamental_polyhedron.py +569 -0
- snappy/snap/generators.py +39 -0
- snappy/snap/interval_reps.py +81 -0
- snappy/snap/kernel_structures.py +128 -0
- snappy/snap/mcomplex_base.py +18 -0
- snappy/snap/nsagetools.py +702 -0
- snappy/snap/peripheral/__init__.py +1 -0
- snappy/snap/peripheral/dual_cellulation.py +219 -0
- snappy/snap/peripheral/link.py +127 -0
- snappy/snap/peripheral/peripheral.py +159 -0
- snappy/snap/peripheral/surface.py +522 -0
- snappy/snap/peripheral/test.py +35 -0
- snappy/snap/polished_reps.py +335 -0
- snappy/snap/shapes.py +152 -0
- snappy/snap/slice_obs_HKL.py +668 -0
- snappy/snap/t3mlite/__init__.py +2 -0
- snappy/snap/t3mlite/arrow.py +243 -0
- snappy/snap/t3mlite/corner.py +22 -0
- snappy/snap/t3mlite/edge.py +172 -0
- snappy/snap/t3mlite/face.py +37 -0
- snappy/snap/t3mlite/files.py +211 -0
- snappy/snap/t3mlite/homology.py +53 -0
- snappy/snap/t3mlite/linalg.py +419 -0
- snappy/snap/t3mlite/mcomplex.py +1499 -0
- snappy/snap/t3mlite/perm4.py +320 -0
- snappy/snap/t3mlite/setup.py +12 -0
- snappy/snap/t3mlite/simplex.py +199 -0
- snappy/snap/t3mlite/spun.py +297 -0
- snappy/snap/t3mlite/surface.py +519 -0
- snappy/snap/t3mlite/test.py +20 -0
- snappy/snap/t3mlite/test_vs_regina.py +86 -0
- snappy/snap/t3mlite/tetrahedron.py +109 -0
- snappy/snap/t3mlite/vertex.py +42 -0
- snappy/snap/test.py +134 -0
- snappy/snap/utilities.py +288 -0
- snappy/test.py +209 -0
- 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 +920 -0
- snappy/twister/__init__.py +20 -0
- snappy/twister/main.py +646 -0
- snappy/twister/surfaces/S_0_1 +3 -0
- snappy/twister/surfaces/S_0_2 +3 -0
- snappy/twister/surfaces/S_0_4 +7 -0
- snappy/twister/surfaces/S_0_4_Lantern +8 -0
- snappy/twister/surfaces/S_1 +3 -0
- snappy/twister/surfaces/S_1_1 +4 -0
- snappy/twister/surfaces/S_1_2 +5 -0
- snappy/twister/surfaces/S_1_2_5 +6 -0
- snappy/twister/surfaces/S_2 +6 -0
- snappy/twister/surfaces/S_2_1 +8 -0
- snappy/twister/surfaces/S_2_heeg +10 -0
- snappy/twister/surfaces/S_3 +8 -0
- snappy/twister/surfaces/S_3_1 +10 -0
- snappy/twister/surfaces/S_4_1 +12 -0
- snappy/twister/surfaces/S_5_1 +14 -0
- snappy/twister/surfaces/heeg_fig8 +9 -0
- snappy/twister/twister_core.cpython-313-darwin.so +0 -0
- snappy/upper_halfspace/__init__.py +146 -0
- snappy/upper_halfspace/ideal_point.py +26 -0
- snappy/verify/__init__.py +13 -0
- snappy/verify/canonical.py +542 -0
- snappy/verify/complex_volume/__init__.py +18 -0
- snappy/verify/complex_volume/adjust_torsion.py +86 -0
- snappy/verify/complex_volume/closed.py +168 -0
- snappy/verify/complex_volume/compute_ptolemys.py +90 -0
- snappy/verify/complex_volume/cusped.py +56 -0
- snappy/verify/complex_volume/extended_bloch.py +201 -0
- snappy/verify/cusp_translations.py +85 -0
- snappy/verify/edge_equations.py +80 -0
- snappy/verify/exceptions.py +254 -0
- snappy/verify/hyperbolicity.py +224 -0
- snappy/verify/interval_newton_shapes_engine.py +523 -0
- snappy/verify/interval_tree.py +400 -0
- snappy/verify/krawczyk_shapes_engine.py +518 -0
- snappy/verify/maximal_cusp_area_matrix/__init__.py +46 -0
- snappy/verify/maximal_cusp_area_matrix/cusp_tiling_engine.py +419 -0
- snappy/verify/maximal_cusp_area_matrix/cusp_translate_engine.py +153 -0
- snappy/verify/real_algebra.py +286 -0
- snappy/verify/shapes.py +25 -0
- snappy/verify/short_slopes.py +200 -0
- snappy/verify/square_extensions.py +1005 -0
- snappy/verify/test.py +78 -0
- snappy/verify/upper_halfspace/__init__.py +9 -0
- snappy/verify/upper_halfspace/extended_matrix.py +100 -0
- snappy/verify/upper_halfspace/finite_point.py +283 -0
- snappy/verify/upper_halfspace/ideal_point.py +426 -0
- snappy/verify/volume.py +128 -0
- snappy/version.py +2 -0
- snappy-3.2.dist-info/METADATA +58 -0
- snappy-3.2.dist-info/RECORD +503 -0
- snappy-3.2.dist-info/WHEEL +5 -0
- snappy-3.2.dist-info/entry_points.txt +2 -0
- snappy-3.2.dist-info/top_level.txt +28 -0
@@ -0,0 +1,301 @@
|
|
1
|
+
Step-by-step examples: Part 3
|
2
|
+
=============================
|
3
|
+
|
4
|
+
.. _ptolemy-example-using-magma-sage:
|
5
|
+
|
6
|
+
Computing solutions with magma or sage vs retrieving solutions
|
7
|
+
--------------------------------------------------------------
|
8
|
+
|
9
|
+
So far, we querried the database for solutions to a Ptolemy variety::
|
10
|
+
|
11
|
+
>>> p = Manifold("m011").ptolemy_variety(2)
|
12
|
+
>>> p.retrieve_solutions()
|
13
|
+
Trying to retrieve solutions from http://ptolemy.unhyperbolic.org/data/pgl2/OrientableCuspedCensus/03_tetrahedra/m011__sl2_c0.magma_out ...
|
14
|
+
Parsing...
|
15
|
+
[PtolemyCoordinates(
|
16
|
+
{'c_0011_0': 1,
|
17
|
+
'c_0011_1': -1,
|
18
|
+
'c_0011_2': -1,
|
19
|
+
'c_0101_0': -1,
|
20
|
+
'c_0101_1': Mod(x^2 + x, x^3 + 2*x^2 + x + 1),
|
21
|
+
...
|
22
|
+
's_3_2': 1},
|
23
|
+
is_numerical = False, ...)]
|
24
|
+
|
25
|
+
We can use ``compute_solutions`` instead of ``retrieve_solutions`` to actually compute the solutions ourselves (for example, for a non-census triangulation not in the database). Currently, we support two engines:
|
26
|
+
|
27
|
+
* `sage <http://www.sagemath.org/>`_ (which is free, but can only solve a fairly limited number of Ptolemy varieties)
|
28
|
+
* `magma <http://magma.maths.usyd.edu.au/magma/>`_
|
29
|
+
|
30
|
+
If you are inside sage::
|
31
|
+
|
32
|
+
>>> p = Manifold("m011").ptolemy_variety(2)
|
33
|
+
>>> p.compute_solutions(engine = 'sage')
|
34
|
+
[PtolemyCoordinates(
|
35
|
+
{'c_0011_0': 1,
|
36
|
+
'c_0011_1': -1,
|
37
|
+
'c_0011_2': -1,
|
38
|
+
'c_0101_0': -1,
|
39
|
+
'c_0101_1': Mod(x^2 + x, x^3 + 2*x^2 + x + 1),
|
40
|
+
...
|
41
|
+
's_3_2': 1},
|
42
|
+
is_numerical = False, ...)]
|
43
|
+
|
44
|
+
If you have magma installed::
|
45
|
+
|
46
|
+
>>> p = Manifold("m011").ptolemy_variety(2)
|
47
|
+
>>> p.compute_solutions(engine = 'magma', verbose = True)
|
48
|
+
Writing to file: /tmp/tmppNSc8S/m011__sl2_c0.magma
|
49
|
+
Magma's output in: /tmp/tmppNSc8S/m011__sl2_c0.magma_out
|
50
|
+
Command: ulimit -m 732421; echo | magma "/tmp/tmppNSc8S/m011__sl2_c0.magma" > "/tmp/tmppNSc8S/m011__sl2_c0.magma_out"
|
51
|
+
Starting magma...
|
52
|
+
magma finished.
|
53
|
+
Parsing magma result...
|
54
|
+
[PtolemyCoordinates(
|
55
|
+
{'c_0011_0': 1,
|
56
|
+
'c_0011_1': -1,
|
57
|
+
'c_0011_2': -1,
|
58
|
+
'c_0101_0': -1,
|
59
|
+
'c_0101_1': Mod(x^2 + x, x^3 + 2*x^2 + x + 1),
|
60
|
+
...
|
61
|
+
's_3_2': 1},
|
62
|
+
is_numerical = False, ...)]
|
63
|
+
|
64
|
+
To get an idea of what Ptolemy varieties magma can still handle, have a look at the `database <http://ptolemy.unhyperbolic.org/html/summary.html>`_: for *N* = 2, the computations up to 12 tetrahedra only took
|
65
|
+
|
66
|
+
**Remark:** The magma engine is not expected to work under windows. It will also fail if magma is not installed or the magma executable cannot be found. The ptolemy module creates a temporary file (``m011__sl2_c0`` here) and also gives the command it tried to run to process the file through magma. If you believe that magma is installed correctly on your system but encounter an error, you can try to run the command yourself to understand better what is going on. Feel free to report a bug (to enischte at gmail dot com) including the temporary files (``m011__sl2_c0`` and ``m011__sl2_c0.out`` here) and any other error messages.
|
67
|
+
|
68
|
+
**Remark:** If no engine is specified, it is assumed to be sage when used inside sage and magma instead.
|
69
|
+
|
70
|
+
.. _ptolemy-example-complex-volume:
|
71
|
+
|
72
|
+
Computing the complex volume
|
73
|
+
----------------------------
|
74
|
+
|
75
|
+
Similar to ``volume_numerical``, we can compute the complex volume (volume + i Chern-Simons) for all representations (that are :ref:`generically decorated <ptolemy-generically-decorated>`).
|
76
|
+
|
77
|
+
Here is an example computing the solutions to the Ptolemy variety ourselves::
|
78
|
+
|
79
|
+
>>> Manifold("m011").ptolemy_variety(2,'all').compute_solutions().complex_volume_numerical()
|
80
|
+
[[[-4.30211422042248 E-16 + 0.725471193740844*I,
|
81
|
+
-0.942707362776931 + 0.459731436553693*I,
|
82
|
+
0.942707362776931 + 0.459731436553693*I]],
|
83
|
+
[[4.64255370258293 E-15 + 0.680993020093457*I,
|
84
|
+
3.94215909915729 E-15 + 0.312682687518267*I,
|
85
|
+
-2.78183391239608 - 0.496837853805869*I,
|
86
|
+
2.78183391239608 - 0.496837853805869*I]]]
|
87
|
+
|
88
|
+
And here the same example retrieving solutions from the database::
|
89
|
+
|
90
|
+
>>> Manifold("m011").ptolemy_variety(2,'all').retrieve_solutions().complex_volume_numerical()
|
91
|
+
Trying to retrieve solutions from http://ptolemy.unhyperbolic.org/data/pgl2/OrientableCuspedCensus/03_tetrahedra/m011__sl2_c0.magma_out ...
|
92
|
+
Parsing...
|
93
|
+
Trying to retrieve solutions from http://ptolemy.unhyperbolic.org/data/pgl2/OrientableCuspedCensus/03_tetrahedra/m011__sl2_c1.magma_out ...
|
94
|
+
Parsing...
|
95
|
+
[[[-4.30211422042248 E-16 + 0.725471193740844*I,
|
96
|
+
...
|
97
|
+
2.78183391239608 - 0.496837853805869*I]]]
|
98
|
+
|
99
|
+
.. _ptolemy-detailed-example-matrices:
|
100
|
+
|
101
|
+
Computing the matrices for a different presentation
|
102
|
+
---------------------------------------------------
|
103
|
+
|
104
|
+
The :py:meth:`~snappy.Triangulation.fundamental_group` method of a SnapPy triangulation can yield different presentations by supplying optional arguments such as ``simplify_presentation`` and ``minimize_number_of_generators``. If we have a word in one of these presentations and want to evaluate its image under the representation, we need to supply the presentation as follows::
|
105
|
+
|
106
|
+
>>> M=Manifold("m003")
|
107
|
+
>>> sol = M.ptolemy_variety(2).retrieve_solutions()[0]
|
108
|
+
>>> G = M.fundamental_group(simplify_presentation = False)
|
109
|
+
>>> sol.evaluate_word('a', G)
|
110
|
+
|
111
|
+
Again, we can check that the representation actually assigns the identity to all relators:
|
112
|
+
|
113
|
+
>>> G
|
114
|
+
Generators:
|
115
|
+
a,b,c
|
116
|
+
Relators:
|
117
|
+
BCaC
|
118
|
+
AbCbA
|
119
|
+
>>> sol.evaluate_word('AbCbA', G)
|
120
|
+
[[Mod(1, x^2 - x - 1), 0], [0, Mod(1, x^2 - x - 1)]]
|
121
|
+
>>> for relator in G.relators():
|
122
|
+
... print(sol.evaluate_word(relator, G))
|
123
|
+
[[Mod(1, x^2 - x - 1), 0], [0, Mod(1, x^2 - x - 1)]]
|
124
|
+
[[Mod(1, x^2 - x - 1), 0], [0, Mod(1, x^2 - x - 1)]]
|
125
|
+
|
126
|
+
|
127
|
+
.. _ptolemy-example-boundary-holonomy:
|
128
|
+
|
129
|
+
Computing the images of the peripheral curves for a representation
|
130
|
+
------------------------------------------------------------------
|
131
|
+
|
132
|
+
The object returned by :py:meth:`~snappy.Triangulation.fundamental_group` also contains words for the peripheral curves of a manifold. We can compute the corresponding matrices::
|
133
|
+
|
134
|
+
>>> M = Manifold("m003")
|
135
|
+
>>> G = M.fundamental_group()
|
136
|
+
>>> sol = M.ptolemy_variety(2,1).retrieve_solutions()[0]
|
137
|
+
>>> for i, cusp_curves in enumerate(G.peripheral_curves()):
|
138
|
+
... print("Cusp %d:" % i)
|
139
|
+
... for cusp_curve in cusp_curves:
|
140
|
+
... print(sol.evaluate_word(cusp_curve, G))
|
141
|
+
Cusp 0:
|
142
|
+
[[Mod(2*x - 3, x^2 + x + 1), Mod(2*x, x^2 + x + 1)], [Mod(6, x^2 + x + 1), Mod(-2*x + 1, x^2 + x + 1)]]
|
143
|
+
[[Mod(-2*x - 5, x^2 + x + 1), Mod(-2, x^2 + x + 1)], [Mod(6*x + 6, x^2 + x + 1), Mod(2*x + 3, x^2 + x + 1)]]
|
144
|
+
|
145
|
+
**Remark:** For each cusp, we can conjugate these matrices into *P* since the representation is :ref:`boundary-unipotent <ptolemy-boundary-unipotent>`. We might implement a method returning a matrix in *P* for the longitude and meridian of a cusp in the future (simply by finding loops corresponding to a longitude and meridian as path of short edges in the truncated simplex in Figure 17 of [GGZ2012]_).
|
146
|
+
|
147
|
+
.. _ptolemy-example-find-witness:
|
148
|
+
|
149
|
+
Finding a witness point for a positively dimensional component of the Ptolemy variety
|
150
|
+
-------------------------------------------------------------------------------------
|
151
|
+
|
152
|
+
We already saw an :ref:`example of a positively dimensional component <ptolemy-non-zero-dim-comp>`. By flattening, we obtain a list of all the components of the Ptolemy varieties for all obstruction classes::
|
153
|
+
|
154
|
+
>>> M=Manifold("m371")
|
155
|
+
>>> sols = M.ptolemy_variety(2,'all').retrieve_solutions().flatten()
|
156
|
+
|
157
|
+
We can now just look at the positively dimensional ones::
|
158
|
+
|
159
|
+
>>> one_dim_sols = [ sol for sol in sols if sol.dimension > 0]
|
160
|
+
>>> len(one_dim_sols)
|
161
|
+
1
|
162
|
+
>>> one_dim_sols
|
163
|
+
[[ PtolemyCoordinates(
|
164
|
+
{'c_0011_0': 1,
|
165
|
+
'c_0011_1': -1,
|
166
|
+
'c_0011_2': -1,
|
167
|
+
'c_0011_3': Mod(-x - 1, x^2 + x + 2),
|
168
|
+
...,
|
169
|
+
's_3_4': 1},
|
170
|
+
is_numerical = False, ...)
|
171
|
+
(witnesses for NonZeroDimensionalComponent(dimension = 1, free_variables = ['c_0110_2'])) ]]
|
172
|
+
|
173
|
+
We see that we have one such component and that each component is actually itself a list of witness points.
|
174
|
+
|
175
|
+
**Remark:** Witness points are a fairly new feature and not all files in the database have been updated yet to contain them. You might instead just see ``[NonZeroDimensionalComponent(dimension = 1)]``.
|
176
|
+
|
177
|
+
**Remark:** The ptolemy module also reports the `free variables` for the positively dimensional components. We can set these variables to random values and generically will obtain a new witness point.
|
178
|
+
|
179
|
+
We can access the witness point(s) for each component just by iteration::
|
180
|
+
|
181
|
+
>>> for component in one_dim_sols:
|
182
|
+
... print("Component:")
|
183
|
+
... for witness in component:
|
184
|
+
... print(" Witness:")
|
185
|
+
... print(" Volumes:", witness.volume_numerical())
|
186
|
+
Component:
|
187
|
+
Witness:
|
188
|
+
Volumes: [0.E-38, 0.E-38]
|
189
|
+
|
190
|
+
The different volumes in a line correspond to different Galois conjugates of the same `algebraic` witness point.
|
191
|
+
|
192
|
+
.. _ptolemy-example-non-zero-dim-rep:
|
193
|
+
|
194
|
+
Finding non-zero dimensional families of boundary-unipotent representations
|
195
|
+
---------------------------------------------------------------------------
|
196
|
+
|
197
|
+
We now revisit the :ref:`1-dimensional component of the Ptolemy variety<ptolemy-non-zero-dim-comp>` and answer the question whether this yields a 1-dimensional family of representations or not. We pick a :ref:`witness point <ptolemy-example-find-witness>` for the component and check the :ref:`matrices for the peripheral curves <ptolemy-example-boundary-holonomy>`::
|
198
|
+
|
199
|
+
>>> M = Manifold("m371")
|
200
|
+
>>> G = M.fundamental_group()
|
201
|
+
>>> sols = M.ptolemy_variety(2,'all').retrieve_solutions().flatten()
|
202
|
+
>>> components = [ sol for sol in sols if sol.dimension > 0]
|
203
|
+
>>> for component in components:
|
204
|
+
... print("Component of dimension %d" % component.dimension)
|
205
|
+
... for witness in component:
|
206
|
+
... for i, cusp_curves in enumerate(G.peripheral_curves()):
|
207
|
+
... print(" Cusp %d:" % i)
|
208
|
+
... for cusp_curve in cusp_curves:
|
209
|
+
... print(" ", witness.evaluate_word(cusp_curve, G))
|
210
|
+
Component of dimension 1
|
211
|
+
Cusp 0:
|
212
|
+
[[Mod(1, x^2 + x + 2), 0], [0, Mod(1, x^2 + x + 2)]]
|
213
|
+
[[Mod(1, x^2 + x + 2), 0], [0, Mod(1, x^2 + x + 2)]]
|
214
|
+
|
215
|
+
We see that the matrices are trivial, thus this 1-dimensional component corresponds to a 1-dimensional family of :ref:`decorations <ptolemy-generically-decorated>` of the same (up to Galois conjugacy) representation. The corresponding family of representation is 0-dimensional.
|
216
|
+
|
217
|
+
Let us try another manifold, ``m410``:
|
218
|
+
|
219
|
+
>>> M = Manifold("m410")
|
220
|
+
>>> G = M.fundamental_group()
|
221
|
+
>>> sols = M.ptolemy_variety(2,'all').retrieve_solutions().flatten()
|
222
|
+
>>> components = [ sol for sol in sols if sol.dimension > 0]
|
223
|
+
>>> for component in components:
|
224
|
+
... print("Component of dimension %d" % component.dimension)
|
225
|
+
... for witness in component:
|
226
|
+
... for i, cusp_curves in enumerate(G.peripheral_curves()):
|
227
|
+
... print(" Cusp %d:" % i)
|
228
|
+
... for cusp_curve in cusp_curves:
|
229
|
+
... print(" ", witness.evaluate_word(cusp_curve, G))
|
230
|
+
Component of dimension 1
|
231
|
+
Cusp 0:
|
232
|
+
[[Mod(1, x^2 + 2), 0], [0, Mod(1, x^2 + 2)]]
|
233
|
+
[[Mod(1, x^2 + 2), Mod(x, x^2 + 2)], [0, Mod(1, x^2 + 2)]]
|
234
|
+
Component of dimension 1
|
235
|
+
Cusp 0:
|
236
|
+
[[Mod(1, x^2 + 7), 0], [0, Mod(1, x^2 + 7)]]
|
237
|
+
[[Mod(1, x^2 + 7), 0], [0, Mod(1, x^2 + 7)]]
|
238
|
+
|
239
|
+
It has two 1-dimensional components, and for the first one, we see that the matrices are non-trivial, so this corresponds indeed to a 1-dimensional family of representations.
|
240
|
+
|
241
|
+
**Remark:** The witness points are chosen so that they are not at the intersection of two positively dimensional components. This is for the following reason: it could happen that there is a 1-dimensional family of representations which contains points where the boundary holonomy becomes trivial. This yields a representation where the above matrices are trivial yet it is part of a 1-dimensional family of boundary-unipotent representations. In the ptolemy variety, however, this means that two non-zero dimensional components (one corresponding to a family of decorations, the other to a family of representations) intersect.
|
242
|
+
|
243
|
+
Representations that are the same as PSL(2, **C**)-representations
|
244
|
+
------------------------------------------------------------------
|
245
|
+
|
246
|
+
Let us compare the volumes of ``m009`` and ``m159``:
|
247
|
+
|
248
|
+
>>> Manifold("m009").ptolemy_variety(2,'all').retrieve_solutions().volume_numerical()
|
249
|
+
[[],
|
250
|
+
[],
|
251
|
+
[],
|
252
|
+
[[2.66674478344907, -2.66674478344907, 2.66674478344907, -2.66674478344907]]]
|
253
|
+
>>> Manifold("m159").ptolemy_variety(2,'all').retrieve_solutions().volume_numerical()
|
254
|
+
[[[0.E-38, 0.E-37, 0.E-37],
|
255
|
+
[-2.02988321281931, 2.02988321281931, -2.02988321281931, 2.02988321281931]],
|
256
|
+
[[0.698544082784440, -0.698544082784440, 3.82168758617998, -3.82168758617998],
|
257
|
+
[0.E-37, 0.E-37, 0.E-37, 0.E-37]]]
|
258
|
+
|
259
|
+
In both cases, some volumes appear twice (2.66674... for ``m009`` and 2.02988... for ``m159``). In the case of ``m009``, these two volumes correspond to the same PSL(2, **C**)-representation and in case ``m159`` to two different boundary-unipotent SL(2, **C**)-representations that are the same as PSL(2, **C**)-representations (see :ref:`ptolemy-psl-multiplicity`). We can get the multiplicity by calling ``degree_to_shapes``::
|
260
|
+
|
261
|
+
>>> Manifold("m009").ptolemy_variety(2).degree_to_shapes()
|
262
|
+
2
|
263
|
+
>>> Manifold("m159").ptolemy_variety(2).degree_to_shapes()
|
264
|
+
1
|
265
|
+
|
266
|
+
When we convert the Ptolemy coordinates to shapes/cross ratios for ``m009``, we also see that we see the same shape assignment appears twice (at least numerically)::
|
267
|
+
|
268
|
+
>>> Manifold("m009").ptolemy_variety(2,'all').retrieve_solutions().numerical().cross_ratios()
|
269
|
+
[[],
|
270
|
+
[],
|
271
|
+
[],
|
272
|
+
[[CrossRatios(
|
273
|
+
{'z_0000_0': 0.500000000000000 + 1.32287565553230*I,
|
274
|
+
'z_0000_1': 0.375000000000000 + 0.330718913883074*I,
|
275
|
+
'z_0000_2': 0.500000000000000 + 1.32287565553230*I,
|
276
|
+
'zp_0000_0': 0.250000000000000 + 0.661437827766148*I,
|
277
|
+
...},
|
278
|
+
is_numerical = True, ...),
|
279
|
+
CrossRatios(
|
280
|
+
{'z_0000_0': 0.500000000000000 - 1.32287565553230*I,
|
281
|
+
'z_0000_1': 0.375000000000000 - 0.330718913883074*I,
|
282
|
+
'z_0000_2': 0.500000000000000 - 1.32287565553230*I,
|
283
|
+
...}
|
284
|
+
is_numerical = True, ...),
|
285
|
+
CrossRatios(
|
286
|
+
{'z_0000_0': 0.500000000000000 + 1.32287565553230*I,
|
287
|
+
'z_0000_1': 0.375000000000000 + 0.330718913883074*I,
|
288
|
+
'z_0000_2': 0.500000000000000 + 1.32287565553230*I,
|
289
|
+
...},
|
290
|
+
is_numerical = True, ...),
|
291
|
+
CrossRatios(
|
292
|
+
{'z_0000_0': 0.500000000000000 - 1.32287565553230*I,
|
293
|
+
'z_0000_1': 0.375000000000000 - 0.330718913883074*I,
|
294
|
+
'z_0000_2': 0.500000000000000 - 1.32287565553230*I,
|
295
|
+
...},
|
296
|
+
is_numerical = True, ...)]]]
|
297
|
+
|
298
|
+
|
299
|
+
|
300
|
+
**Remark:** The tables at `ptolemy.unhyperbolic.org <http://ptolemy.unhyperbolic.org/html/summary.html>`_ use the cross ratios to list representations that are the same as PSL(2, **C**)-representation only once.
|
301
|
+
|
@@ -0,0 +1,61 @@
|
|
1
|
+
Step-by-step examples: Part 4
|
2
|
+
=============================
|
3
|
+
|
4
|
+
**Advanced topics. Still under construction.**
|
5
|
+
|
6
|
+
.. _ptolemy-example-structure-of-solution:
|
7
|
+
|
8
|
+
The structure of an exact solution
|
9
|
+
----------------------------------
|
10
|
+
|
11
|
+
A solution to the Ptolemy variety (here ``sol``) is an object of type ``PtolemyCoordinates`` which is a subclass of a python dictionary. It assigns a value to each Ptolemy coordinate c\ :sub:`...` (the s\ :sub:`...` are related to the obstruction class which is trivial here). We can get the value assigned to a particular Ptolemy coordinate as follows::
|
12
|
+
|
13
|
+
>>> sol = Manifold("m003").ptolemy_variety(2).retrieve_solutions()[0]
|
14
|
+
>>> sol['c_0101_1']
|
15
|
+
Mod(-x, x^2 - x - 1)
|
16
|
+
|
17
|
+
This is a pari object of type `POLMOD`. It means that the solution is in the number field with defining polynomial *x*\ :sup:`2`\ - *x* - 1 and that it is equal to - *x* where *x* is a root in the defining polynomial.
|
18
|
+
|
19
|
+
We can get to the parts of a pari `POLMOD` object by::
|
20
|
+
|
21
|
+
>>> sol['c_0101_1'].lift()
|
22
|
+
-x
|
23
|
+
>>> sol['c_0101_1'].mod()
|
24
|
+
x^2 - x - 1
|
25
|
+
|
26
|
+
These objects also support the field operations, here we are computing a cross ratio::
|
27
|
+
|
28
|
+
>>> (sol['c_0101_0'] * sol['c_1010_0']) / (sol['c_1001_0'] * sol['c_0110_0'])
|
29
|
+
Mod(x, x^2 - x - 1)
|
30
|
+
|
31
|
+
**Remark:** We would prefer to represent these using types that are better suited when using sage such as NumberField and NumberFieldElement. In the future, we might jettison support of the ptolemy module outside of sage and use sage's native types.
|
32
|
+
|
33
|
+
Rational Univariate Representation
|
34
|
+
----------------------------------
|
35
|
+
|
36
|
+
We have some limited support for the `Rational Univariate Representation`, for example::
|
37
|
+
|
38
|
+
>>> sols = Manifold("m069").ptolemy_variety(3).retrieve_solutions()
|
39
|
+
>>> sols[4]
|
40
|
+
PtolemyCoordinates(
|
41
|
+
{ 'c_0201_0': ( Mod(-426088934700737884313191344*x^24 + 4110489425474123899213651272*x^23 ...
|
42
|
+
- 67064980598091504185767190,
|
43
|
+
x^25 ... - 196124*x^4 + 14010*x^3 - 1560*x^2 + 72*x - 1)
|
44
|
+
) / ( Mod(875895332415105303646551573*x^24 - 8450034810535061601312104296*x^23 ...
|
45
|
+
+ 137871639973525691285247446,
|
46
|
+
x^25 ... - 196124*x^4 + 14010*x^3 - 1560*x^2 + 72*x - 1) ),
|
47
|
+
...
|
48
|
+
},
|
49
|
+
is_numerical = False, ...)
|
50
|
+
|
51
|
+
This means that ``c_0201_0`` is assigned the fraction of those two ``POLDMOD`` objects.
|
52
|
+
|
53
|
+
**Remark:** This is still under development.
|
54
|
+
|
55
|
+
TODO
|
56
|
+
----
|
57
|
+
|
58
|
+
* Give an overview of the classes and the methods.
|
59
|
+
* Explain how the magma file are generated. Say that magma computes the RadicalDecomposition. Ptolemy module can process the lexicographic Groebner basis of a prime ideal.
|
60
|
+
|
61
|
+
|
@@ -0,0 +1,105 @@
|
|
1
|
+
Mathematical preliminaries
|
2
|
+
==========================
|
3
|
+
|
4
|
+
Given a triangulation, the ptolemy module will produce a system of equation that is equivalent to
|
5
|
+
the reduced Ptolemy variety (see [GTZ2011]_, Section 5 of [GGZ2012]_, and Proposition 4.7 of [GGZ2014]_).
|
6
|
+
|
7
|
+
A solution
|
8
|
+
to this system of equations where no Ptolemy coordinate is zero yields a :ref:`boundary-unipotent <ptolemy-boundary-unipotent>`
|
9
|
+
SL(*N*, **C**)-representation, respectively, PSL(*N*, **C**)-representation (see :ref:`obstruction-class`).
|
10
|
+
|
11
|
+
Note that a solution where some Ptolemy coordinates are zero might not have enough information
|
12
|
+
to recover the representation - thus the ptolemy module discards those and thus might miss some
|
13
|
+
boundary-unipotent representations for the chosen triangulation (see :ref:`ptolemy-generically-decorated`).
|
14
|
+
This is the same problem that the
|
15
|
+
gluing equations for finding PGL(2, **C**)-representations suffer from where simplices in the developing
|
16
|
+
map can be degenerate and yielding cross ratios that are 0, 1, or :math:`\infty`\ .
|
17
|
+
|
18
|
+
.. _ptolemy-boundary-unipotent:
|
19
|
+
|
20
|
+
Boundary-unipotent
|
21
|
+
------------------
|
22
|
+
|
23
|
+
We call a SL(*N*, **C**)-representation *boundary-unipotent* if each peripheral subgroup is taken to
|
24
|
+
a conjugate of the unipotent group *P* of upper unit-triangular matrices. Similarly, we call
|
25
|
+
a PSL(*N*, **C**)-representation *boundary-unipotent* if each peripheral subgroup is taken to a conjugate
|
26
|
+
of the unipotent group of PSL(*N*, **C**), i.e., the image of *P* under the projection SL(*N*, **C**)\ :math:`\rightarrow`\ PSL(*N*, **C**).
|
27
|
+
|
28
|
+
Note that even when boundary-unipotent PSL(*N*, **C**)-representation can be lifted to an
|
29
|
+
SL(*N*, **C**)-representation, the lift might no longer be boundary-unipotent, i.e., there might be
|
30
|
+
a peripheral curve whose image now is conjugate to an upper triangular matrix with an *N*-th root
|
31
|
+
of unity on the diagonal. For example, if the manifold is hyperbolic and has one cusp,
|
32
|
+
any lift of the geometric representation will take the longitude
|
33
|
+
to a matrix with trace -2 and is thus not boundary-unipotent as SL(2, **C**)-representation.
|
34
|
+
|
35
|
+
.. _obstruction-class:
|
36
|
+
|
37
|
+
Obstruction class
|
38
|
+
-----------------
|
39
|
+
|
40
|
+
Given a boundary-unipotent PSL(*N*, **C**)-representation, we obtain an *obstruction class* in H\ :sup:`2`\ (M,\ :math:`\partial`\ M; **Z**/*N*)
|
41
|
+
that is trivial if and only if the representations lifts to a boundary-unipotent SL(*N*, **C**)-representation (see Section 9.1 of [GTZ2011]_ and Section 1.3 of [GGZ2014]_).
|
42
|
+
Given a triangulation and an element in H\ :sup:`2`\ (M,\ :math:`\partial`\ M; **Z**/*N*), the Ptolemy variety can be modified to find
|
43
|
+
the boundary-unipotent
|
44
|
+
PSL(*N*, **C**)-representations with that obstruction class (for *N* > 2 this is implemented here but has not been published yet).
|
45
|
+
|
46
|
+
Note that two elements in H\ :sup:`2`\ (M,\ :math:`\partial`\ M; **Z**/*N*)
|
47
|
+
related by multiplication by an element in (**Z**/*N*)\ :sup:`*` yield Ptolemy
|
48
|
+
varieties corresponding to picking different Galois conjugates for the *N*-th root of unity. Thus, it is enough
|
49
|
+
to consider a representative for each element in the quotient H\ :sup:`2`\ (M,\ :math:`\partial`\ M; **Z**/*N*)/(**Z**/*N*)\ :sup:`*`\ .
|
50
|
+
|
51
|
+
.. _ptolemy-psl-multiplicity:
|
52
|
+
|
53
|
+
SL(*N*, **C**) vs PSL(*N*, **C**)
|
54
|
+
---------------------------------
|
55
|
+
|
56
|
+
The reduced Ptolemy variety for the trivial obstruction class can have several points (say *d*) giving different SL(*N*, **C**)-representations that are the same as PSL(*N*, **C**)-representations. Similarly, for the non-trivial obstruction class we can have *d* points in the reduced Ptolemy variety yielding the same PSL(*N*, **C**)-representation.
|
57
|
+
|
58
|
+
The degree *d* of this correspondence is the size of H\ :sup:`1`\ (\ :math:`\hat{M}`\ ; **Z**/*N*) where :math:`\hat{M}` is the cell complex obtained from collapsing each cusp to a point.
|
59
|
+
|
60
|
+
.. _ptolemy-generically-decorated:
|
61
|
+
|
62
|
+
Generically decorated representations
|
63
|
+
-------------------------------------
|
64
|
+
|
65
|
+
We want to point out two important facts when using the reduced Ptolemy variety to find boundary-unipotent representations:
|
66
|
+
|
67
|
+
* We miss representations that are not generically decorated (as mentioned above). This happens but rarely.
|
68
|
+
* A positively dimensional component in the reduced Ptolemy variety might mean two things (which we can distinguish by looking at the images of the peripheral groups):
|
69
|
+
* a positively dimensional family of boundary-unipotent representations or
|
70
|
+
* a family of decorations of the same representation.
|
71
|
+
|
72
|
+
The reason for this is that the reduced Ptolmey variety does not parametrize representations but generically decorated representations (which can also be thought of as development maps). We just list the facts about decorations important to us here and refer the reader for details to Section 4 of [GTZ2011]_ and Section 8 of [GGZ2012]_ (where decoration would be called *B*-decoration or (SL(*N*), **C**), *B*)-decoration with *B* the Borel group of upper triangular matrices):
|
73
|
+
|
74
|
+
* Every boundary-unipotent representation of a cusped manifold admits a decoration. The set of decorations of a representation is intrinsic to the representation and independent of the triangulation.
|
75
|
+
* The representation determines the decoration uniquely if and only if the representation is boundary-non-degenerate (which most representations are).
|
76
|
+
* Given a decorated representation and an ideal triangulation of a cusped manifold, we obtain Ptolemy coordinates.
|
77
|
+
* If all the resulting Ptolemy coordinates are non-zero, we call the representation *generically decorated* - a notion that depends on the chosen triangulation.
|
78
|
+
* The reduced Ptolemy variety parametrizes generically decorated and boundary-unipotent representations.
|
79
|
+
|
80
|
+
|
81
|
+
.. _ptolemy-reduced-variety:
|
82
|
+
|
83
|
+
Reduced Ptolemy variety
|
84
|
+
-----------------------
|
85
|
+
|
86
|
+
We will actually always use the reduced Ptolemy variety, i.e., the system of equation that consists of the Ptolemy relations (always of the form
|
87
|
+
:math:`\pm` c\ :sub:`...` c\ :sub:`...` :math:`\pm` c\ :sub:`...` c\ :sub:`...` :math:`\pm` c\ :sub:`...` c\ :sub:`...`\) and extra equations fixing an appropriate set of (N-1) Ptolemy coordinates per cusp as described in Proposition 4.7 of [GGZ2014]_. This is because the Ptolemy relations alone admit an action by (**C**\ :sup:`*`\ )\ :sup:`(N-1)` for each cusp that does not change the representation it yields.
|
88
|
+
|
89
|
+
In other words, the Ptolemy variety parametrizes *P*-decorations and the reduced Ptolemy variety parametrizes *B*-decorations.
|
90
|
+
|
91
|
+
Future work
|
92
|
+
-----------
|
93
|
+
|
94
|
+
In unpublished work, we developed an algorithm that takes some triangulation of a manifold and constructs a set of triangulations and corresponding Ptolemy varieties (with extra edge relations) such that we can guarantee that all boundary-unipotent PSL(2,C)-representations are found - not just the ones that are generically decorated with respect to the chosen triangulation. This is inspired by [S2009]_. The ptolemy module might support this in the future.
|
95
|
+
|
96
|
+
In [Z2014]_, the Ptolemy variety was extended to detect non boundary-unipotent representations as well. The ptolemy module might produce these varieties in the future. This might offer another way of computing A-polynomials - that when combined with the above algorithm is guaranteed to be the full A-polynomial and not just a factor of it.
|
97
|
+
|
98
|
+
References
|
99
|
+
----------
|
100
|
+
|
101
|
+
.. [S2009] Henry Segerman: A generalisation of the deformation variety, http://arxiv.org/abs/0904.1893
|
102
|
+
.. [GTZ2011] Stavros Garoufalidis, Dylan P. Thurston, and Christian K. Zickert: The Complex Volume of SL(n,C)-Representations of 3-Manifolds, http://arxiv.org/abs/1111.2828
|
103
|
+
.. [GGZ2012] Stavros Garoufalidis, Matthias Goerner, and Christian K. Zickert: Gluing Equations for PGL(n,C)-Representations of 3-Manifolds, http://arxiv.org/abs/1207.6711
|
104
|
+
.. [GGZ2014] Stavros Garoufalidis, Matthias Goerner, and Christian K. Zickert: The Ptolemy Field of 3-Manifold Representations, http://arxiv.org/abs/1401.5542
|
105
|
+
.. [Z2014] Christian K. Zickert: Ptolemy coordinates, Dehn invariant, and the A-polynomial, http://arxiv.org/abs/1405.0025
|
@@ -0,0 +1,21 @@
|
|
1
|
+
==============================
|
2
|
+
Screenshots: SnapPy in action
|
3
|
+
==============================
|
4
|
+
|
5
|
+
Mac OS X
|
6
|
+
---------
|
7
|
+
|
8
|
+
.. image:: images/mac.png
|
9
|
+
:width: 717 px
|
10
|
+
|
11
|
+
|
12
|
+
Linux (Ubuntu 13.10)
|
13
|
+
------------------------
|
14
|
+
|
15
|
+
.. image:: images/ubuntu.png
|
16
|
+
|
17
|
+
|
18
|
+
Windows 7
|
19
|
+
--------------------
|
20
|
+
|
21
|
+
.. image:: images/win7.png
|
@@ -0,0 +1,87 @@
|
|
1
|
+
.. Documentation of the Snap part of SnapPy
|
2
|
+
.. automodule:: snappy.snap
|
3
|
+
|
4
|
+
Number theory of hyperbolic 3-manifolds
|
5
|
+
=======================================
|
6
|
+
|
7
|
+
SnapPy has support for arbitrary-precision computation and for
|
8
|
+
identifying number fields associated to hyperbolic 3-manifolds. While
|
9
|
+
this functionality is less than that of `Snap
|
10
|
+
<http://snap-pari.sf.net/>`_, it is already useful. Except for the
|
11
|
+
first example, one currently needs to use SnapPy inside of `Sage
|
12
|
+
<http://sagemath.org>`_ to have access to these features. Here's how
|
13
|
+
to find the tetrahedra shapes to high-precision::
|
14
|
+
|
15
|
+
sage: import snappy
|
16
|
+
sage: M = snappy.Manifold('m004')
|
17
|
+
sage: M.tetrahedra_shapes('rect', bits_prec=100)
|
18
|
+
[0.50000000000000000000000000000 + 0.86602540378443864676372317075*I, 0.50000000000000000000000000000 + 0.86602540378443864676372317075*I]
|
19
|
+
sage: M.tetrahedra_shapes('rect', dec_prec=100)[0]
|
20
|
+
0.500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +
|
21
|
+
0.866025403784438646763723170752936183471402626905190314027903489725966508454400018540573093378624288*I
|
22
|
+
|
23
|
+
One can also compute the holonomy representation to any precision::
|
24
|
+
|
25
|
+
sage: G = M.polished_holonomy(bits_prec=100)
|
26
|
+
sage: G.SL2C('a')
|
27
|
+
[0.50000000000000000000000000000 + 0.86602540378443864676372317075*I -1.0000000000000000000000000000*I]
|
28
|
+
[ 1.0000000000000000000000000000*I 1.0000000000000000000000000000 - 1.7320508075688772935274463415*I]
|
29
|
+
|
30
|
+
You can also try to guess the shapes exactly using an LLL-based
|
31
|
+
algorithm of the type pioneered by Snap::
|
32
|
+
|
33
|
+
sage: T = M.tetrahedra_field_gens()
|
34
|
+
sage: T.find_field(prec=100, degree=10, optimize=True)
|
35
|
+
(Number Field in z with defining polynomial x^2 - x + 1, <ApproxAN: 0.5 + 0.866025403784*I>, [x, x])
|
36
|
+
|
37
|
+
You can do the same for various other fields via the methods
|
38
|
+
``trace_field_gens``, ``invariant_trace_field_gens``, and ``holonomy_matrix_entries``.
|
39
|
+
|
40
|
+
In more complicated examples, one needs to use higher precision and/or
|
41
|
+
degree to actually find the exact values::
|
42
|
+
|
43
|
+
sage: N = snappy.Manifold('m004(1,3)')
|
44
|
+
sage: K = N.trace_field_gens()
|
45
|
+
sage: K.find_field(prec=100, degree=10, optimize=True) # Fails, so no output
|
46
|
+
sage: K.find_field(prec=200, degree=20, optimize=True)[0]
|
47
|
+
Number Field in z with defining polynomial x^11 - 2*x^10 - 8*x^9 + 16*x^8 + 22*x^7 - 44*x^6 - 25*x^5 + 50*x^4 + 11*x^3 - 22*x^2 - x + 1
|
48
|
+
|
49
|
+
We can also compute various hyperbolicly-twisted Alexander
|
50
|
+
polynomials, as described `here <http://dunfield.info/torsion>`_::
|
51
|
+
|
52
|
+
sage: M = snappy.Manifold('5_2')
|
53
|
+
sage: M.alexander_polynomial()
|
54
|
+
2*a^2 - 3*a + 2
|
55
|
+
sage: M.hyperbolic_torsion(bits_prec=100)
|
56
|
+
(2.3376410213776269870195455729 - 0.56227951206230124389918214504*I)*a^2
|
57
|
+
- 4.0000000000000000000000000003*a
|
58
|
+
+ 2.3376410213776269870195455731 - 0.56227951206230124389918214477*I
|
59
|
+
sage: M.hyperbolic_SLN_torsion(3, 100) # Dubois-Yamagachi adjoint torsion
|
60
|
+
(0.40431358073618481197132660504 +
|
61
|
+
0.75939451500971650241038772223*I)*a^3
|
62
|
+
+ (2.9032849613891083021420278850 -
|
63
|
+
4.1185388389935516999882632998*I)*a^2
|
64
|
+
+ (-2.9032849613891083021420278809 +
|
65
|
+
4.1185388389935516999882633007*I)*a
|
66
|
+
- 0.40431358073618481197132661847 - 0.75939451500971650241038771418*I
|
67
|
+
sage: M.hyperbolic_SLN_torsion(4, 100) # Why not?
|
68
|
+
(2.5890988184099251088892745185 + 3.5126610817613336586374292713*I)*a^4
|
69
|
+
+ (10.357403823939297224437742077 - 13.378446302375451727042633120*I)*a^3
|
70
|
+
+ (-26.821802363180149782221451472 + 7.0253221635226673172748587283*I)*a^2
|
71
|
+
+ (10.357403823939297224437738856 - 13.378446302375451727042631346*I)*a
|
72
|
+
+ 2.5890988184099251088892549440 + 3.5126610817613336586374448040*I
|
73
|
+
|
74
|
+
You can find out more about each of these methods using
|
75
|
+
introspection::
|
76
|
+
|
77
|
+
sage: M.hyperbolic_torsion?
|
78
|
+
Definition: M.hyperbolic_torsion(M, bits_prec=100, all_lifts=False, wada_conventions=False, phi=None)
|
79
|
+
Docstring:
|
80
|
+
Computes the hyperbolic torsion polynomial as defined in [DFJ].
|
81
|
+
|
82
|
+
>>> M = Manifold('K11n42')
|
83
|
+
>>> M.alexander_polynomial()
|
84
|
+
1
|
85
|
+
>>> tau = M.hyperbolic_torsion(bits_prec=200)
|
86
|
+
>>> tau.degree()
|
87
|
+
6
|
@@ -0,0 +1,28 @@
|
|
1
|
+
.. Documentation of the Python part of SnapPy
|
2
|
+
|
3
|
+
The snappy module and its classes
|
4
|
+
=======================================
|
5
|
+
|
6
|
+
SnapPy is centered around a Python interface for SnapPea called
|
7
|
+
"snappy", and this is what you're interacting with in the main "SnapPy
|
8
|
+
command shell" window. The main class is Manifold, which is an ideal
|
9
|
+
triangulation of the interior of a compact 3-manifold with torus
|
10
|
+
boundary, where each tetrahedron has been assigned the geometry of
|
11
|
+
an ideal tetrahedron in hyperbolic 3-space. A Dehn-filling can be
|
12
|
+
specified for each boundary component, allowing the description of
|
13
|
+
closed 3-manifolds and some orbifolds. The class Manifold is derived
|
14
|
+
from the simpler Triangulation class which lacks any geometric
|
15
|
+
structure. There are also some additional classes for things like
|
16
|
+
fundamental groups, Dirichlet domains, etc. Snappy comes with a large
|
17
|
+
library of 3-manifolds, some of which are grouped together in censuses.
|
18
|
+
|
19
|
+
|
20
|
+
.. toctree::
|
21
|
+
:maxdepth: 2
|
22
|
+
|
23
|
+
manifold
|
24
|
+
manifoldhp
|
25
|
+
triangulation
|
26
|
+
additional_classes
|
27
|
+
censuses
|
28
|
+
|