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,182 @@
|
|
1
|
+
.. SnapPy documentation master file
|
2
|
+
You can adapt this file completely to your liking, but it should at least
|
3
|
+
contain the root `toctree` directive.
|
4
|
+
|
5
|
+
======
|
6
|
+
SnapPy
|
7
|
+
======
|
8
|
+
|
9
|
+
What is SnapPy?
|
10
|
+
===============
|
11
|
+
|
12
|
+
.. image:: images/SnapPy-196.png
|
13
|
+
:align: right
|
14
|
+
:alt: SnapPy logo
|
15
|
+
|
16
|
+
|
17
|
+
SnapPy is a program for studying the topology and geometry of
|
18
|
+
3-manifolds, with a focus on hyperbolic structures. It runs on Mac OS
|
19
|
+
X, Linux, and Windows, and combines a link editor and 3D-graphics for
|
20
|
+
Dirichlet domains and cusp neighborhoods with a powerful command-line
|
21
|
+
interface based on the Python_ programming language. You can see it
|
22
|
+
:doc:`in action<screenshots>`, learn how to :doc:`install<installing>`
|
23
|
+
it, and watch the :doc:`tutorial<tutorial>`.
|
24
|
+
|
25
|
+
.. _Python: http://python.org
|
26
|
+
|
27
|
+
News
|
28
|
+
====
|
29
|
+
|
30
|
+
* Version 3.2 (January 2025):
|
31
|
+
|
32
|
+
- An alternative implementation of the length spectrum. It supports verified
|
33
|
+
computations and is significantly faster in some cases. See
|
34
|
+
:meth:`length_spectrum_alt <snappy.Manifold.length_spectrum_alt>`
|
35
|
+
and
|
36
|
+
:meth:`length_spectrum_alt_gen <snappy.Manifold.length_spectrum_alt_gen>`.
|
37
|
+
|
38
|
+
- :meth:`isometry_signature <snappy.Manifold.isometry_signature>` now also
|
39
|
+
works for closed manifolds.
|
40
|
+
|
41
|
+
- A paper plane or eye ball in the
|
42
|
+
:meth:`inside_view <snappy.Manifold.inside_view>` showing the position
|
43
|
+
and bearing of the user in the hyperbolic manifold. By default, we now show
|
44
|
+
the paper plane instead of the edges of the triangulation so that the view
|
45
|
+
is intrinsic to the manifold. The geodesics window now also features a
|
46
|
+
button to put the camera onto a geodesic. Here are some examples:
|
47
|
+
|
48
|
+
.. list-table::
|
49
|
+
:width: 100%
|
50
|
+
:class: borderless
|
51
|
+
|
52
|
+
* - .. image:: images/o9_00000_systole_paper_plane.jpg
|
53
|
+
:width: 90%
|
54
|
+
:align: center
|
55
|
+
:alt: Paper plane near shortest geodesic of o9_00000
|
56
|
+
- .. image:: images/o9_00000_systole_paper_plane_closer.jpg
|
57
|
+
:width: 90%
|
58
|
+
:align: center
|
59
|
+
:alt: Paper plane very near shortest geodesic of o9_00000
|
60
|
+
- .. image:: images/m004_paper_plane_on_systole.jpg
|
61
|
+
:width: 90%
|
62
|
+
:align: center
|
63
|
+
:alt: Paper plane on shortest geodesic of m004
|
64
|
+
- .. image:: images/m125_paper_plane.jpg
|
65
|
+
:width: 90%
|
66
|
+
:align: center
|
67
|
+
:alt: Paper plane coming out of a cusp of m125
|
68
|
+
|
69
|
+
- A faster and more robust algorithm to the compute maximal cusp area matrix.
|
70
|
+
The new algorithm is now the default for
|
71
|
+
:meth:`~snappy.Manifold.cusp_area_matrix`,
|
72
|
+
:meth:`~snappy.Manifold.cusp_areas`,
|
73
|
+
:meth:`~snappy.Manifold.short_slopes` and
|
74
|
+
:meth:`~snappy.Manifold.cusp_translations`.
|
75
|
+
|
76
|
+
- New options ``ignore_curves`` and ``ignore_filling_orientations``
|
77
|
+
for :meth:`~snappy.Triangulation.triangulation_isosig`. Also
|
78
|
+
fixing a subtle bug where the filling coefficients returned by
|
79
|
+
:meth:`triangulation_isosig <snappy.Triangulation.triangulation_isosig>` were
|
80
|
+
not canonical when ``ignore_curve_orientations = True``.
|
81
|
+
|
82
|
+
- :meth:`~snappy.Manifold.canonical_retriangulation`
|
83
|
+
and
|
84
|
+
:meth:`~snappy.Manifold.isometry_signature` fail with
|
85
|
+
exceptions rather than silently returning ``None``. In particular, it now
|
86
|
+
safe to compare isometry signatures (without further checks) to determine
|
87
|
+
whether M and N are isometric hyperbolic manifolds::
|
88
|
+
|
89
|
+
>>> M.isometry_signature(verified=True) == N.isometry_signature(verified=True)
|
90
|
+
|
91
|
+
- Bug fix to :meth:`slice_obstruction_HKL
|
92
|
+
<snappy.Manifold.slice_obstruction_HKL>`: earlier versions
|
93
|
+
incorrectly allowed looking at mod 2 homology of the branched
|
94
|
+
cover, where the theory does not directly apply.
|
95
|
+
|
96
|
+
- New self-contained SnapPy application for Linux.
|
97
|
+
|
98
|
+
- Support for Python 3.13 and SageMath 10.5.
|
99
|
+
|
100
|
+
|
101
|
+
* Versions 3.1 (May 2023) and 3.1.1 (June 2023):
|
102
|
+
|
103
|
+
- A method :meth:`exterior_to_link <snappy.Manifold.exterior_to_link>`
|
104
|
+
for going from a link exterior to a link diagram taken from
|
105
|
+
`Dunfield-Obeidin-Rudd <https://arxiv.org/abs/2112.03251>`_.
|
106
|
+
|
107
|
+
- Covers now computed by the stand-alone `low_index
|
108
|
+
<https://pypi.org/project/low-index/>`_ module, which uses
|
109
|
+
multiple processor cores and is typically much faster than the old
|
110
|
+
code. In some cases, it is dramatically faster than even GAP or
|
111
|
+
Magma.
|
112
|
+
|
113
|
+
- Added geodesics to the :meth:`inside_view
|
114
|
+
<snappy.Manifold.inside_view>`. Here are some intersecting tubes
|
115
|
+
about closed geodesics in the manifold ``v3539(5,1)``:
|
116
|
+
|
117
|
+
.. image:: images/geodesics.jpg
|
118
|
+
:width: 50%
|
119
|
+
:align: center
|
120
|
+
:alt: Geodesic tubes for v3539(5,1)
|
121
|
+
|
122
|
+
- Added drilling any simple geodesic with :meth:`drill_word
|
123
|
+
<snappy.Manifold.drill_word>` and :meth:`drill_words
|
124
|
+
<snappy.Manifold.drill_words>`, not just those that are
|
125
|
+
:meth:`combinatorially simple <snappy.Manifold.dual_curves>`.
|
126
|
+
|
127
|
+
- Added `ignore_orientation` flag to :meth:`triangulation_isosig
|
128
|
+
<snappy.Triangulation.triangulation_isosig>`.
|
129
|
+
|
130
|
+
- Added `include_words` flag to :meth:`length_spectrum
|
131
|
+
<snappy.Manifold.length_spectrum>` for getting the word
|
132
|
+
corresponding to a geodesic which can be given to
|
133
|
+
:meth:`drill_word <snappy.Manifold.drill_word>`.
|
134
|
+
|
135
|
+
- Support for Python 3.11 and SageMath 10.0.
|
136
|
+
|
137
|
+
- Modernized styling of the documentation.
|
138
|
+
|
139
|
+
* :doc:`Complete version history <news>`.
|
140
|
+
|
141
|
+
Documentation
|
142
|
+
=============
|
143
|
+
|
144
|
+
.. toctree::
|
145
|
+
:maxdepth: 1
|
146
|
+
|
147
|
+
installing
|
148
|
+
screenshots
|
149
|
+
tutorial
|
150
|
+
snappy
|
151
|
+
plink
|
152
|
+
spherogram
|
153
|
+
snap
|
154
|
+
verify
|
155
|
+
other
|
156
|
+
news
|
157
|
+
credits
|
158
|
+
bugs
|
159
|
+
todo
|
160
|
+
development
|
161
|
+
|
162
|
+
Credits
|
163
|
+
=======
|
164
|
+
|
165
|
+
Written by `Marc Culler <http://www.math.uic.edu/~culler>`_, `Nathan
|
166
|
+
Dunfield <http://dunfield.info>`_, and `Matthias Goerner
|
167
|
+
<http://www.unhyperbolic.org/>`_ using the SnapPea kernel written by
|
168
|
+
`Jeff Weeks <http://www.geometrygames.org>`_, with contributions from
|
169
|
+
:doc:`many others <credits>`. If you use SnapPy in your work, please
|
170
|
+
:ref:`cite it as described here <credits:Citing SnapPy>`. If you
|
171
|
+
encounter problems with SnapPy, :doc:`please report them <bugs>`.
|
172
|
+
|
173
|
+
Released under the terms of the `GNU General Public License
|
174
|
+
<http://www.gnu.org/licenses/gpl-2.0.txt>`_, version 2 or later.
|
175
|
+
|
176
|
+
The development of SnapPy was partially supported by grants from the
|
177
|
+
National Science Foundation, including DMS-0707136, DMS-0906155,
|
178
|
+
DMS-1105476, DMS-1510204, DMS-1811156, and the Institute for
|
179
|
+
Computational and Experimental Research in Mathematics. Any opinions,
|
180
|
+
findings, and conclusions or recommendations expressed on this site
|
181
|
+
are those of the authors and do not necessarily reflect the views of
|
182
|
+
the National Science Foundation.
|
@@ -0,0 +1,247 @@
|
|
1
|
+
.. Installing SnapPy
|
2
|
+
|
3
|
+
Installing SnapPy
|
4
|
+
=================
|
5
|
+
|
6
|
+
Here are detailed instructions on how to get SnapPy working on a
|
7
|
+
variety of platforms. The current version is |release| which was released
|
8
|
+
on |release_date|. If you encounter any problems installing SnapPy,
|
9
|
+
:doc:`please let us know <bugs>`.
|
10
|
+
|
11
|
+
macOS
|
12
|
+
-----
|
13
|
+
|
14
|
+
Simply download `SnapPy.dmg
|
15
|
+
<https://github.com/3-manifolds/SnapPy/releases/latest/download/SnapPy.dmg>`_
|
16
|
+
and copy SnapPy.app to the Applications folder. Double-click to start
|
17
|
+
it, just like any other application. The current version works with macOS 10.14 and
|
18
|
+
newer and earlier releases `can be found here
|
19
|
+
<https://github.com/3-manifolds/SnapPy/releases/>`_.
|
20
|
+
|
21
|
+
Windows
|
22
|
+
-------
|
23
|
+
|
24
|
+
Simply download and run `InstallSnapPy.exe
|
25
|
+
<https://github.com/3-manifolds/SnapPy/releases/latest/download/InstallSnapPy.exe>`_.
|
26
|
+
Earlier releases `can be found here
|
27
|
+
<https://github.com/3-manifolds/SnapPy/releases/>`_.
|
28
|
+
|
29
|
+
|
30
|
+
Linux app
|
31
|
+
---------
|
32
|
+
|
33
|
+
Starting with SnapPy 3.2, a completely self-contained SnapPy `AppImage
|
34
|
+
<https://docs.appimage.org/introduction/quickstart.html#ref-quickstart>`_
|
35
|
+
is available that should work on any Linux system from the last 5
|
36
|
+
years. This AppImage contains its own private copy of Python, so if
|
37
|
+
you plan to use SnapPy in your own Python programs, skip ahead to
|
38
|
+
`Python Modules for Linux`_. Here is the recipe for installing the
|
39
|
+
AppImage in ``~/bin`` after you have downloaded the file
|
40
|
+
`SnapPy-x86_64.AppImage
|
41
|
+
<https://github.com/3-manifolds/SnapPy/releases/latest/download/SnapPy-x86_64.AppImage.>`_::
|
42
|
+
|
43
|
+
mkdir -p ~/bin
|
44
|
+
mv ~/Downloads/SnapPy-x86_64.AppImage ~/bin
|
45
|
+
chmod +x ~/bin/SnapPy-x86_64.AppImage
|
46
|
+
ln -s -f ~/bin/SnapPy-x86_64.AppImage ~/bin/SnapPy
|
47
|
+
~/bin/SnapPy-x86_64.AppImage --install
|
48
|
+
|
49
|
+
The last command registers the SnapPy app with your desktop system and
|
50
|
+
starts it. Next time, you can start SnapPy by using the desktop
|
51
|
+
search tool with GNOME or the main menu with KDE. You can pin also the icon
|
52
|
+
to your dash or task bar for easy access. From a terminal window, you
|
53
|
+
can also start the app by typing ``SnapPy`` provided ``~/bin`` is in
|
54
|
+
your `$PATH <https://opensource.com/article/17/6/set-path-linux>`_.
|
55
|
+
|
56
|
+
|
57
|
+
Python Modules for macOS or Windows
|
58
|
+
-----------------------------------
|
59
|
+
|
60
|
+
If you write Python programs on macOS or Windows, you may wish to
|
61
|
+
install SnapPy as a Python module into your own copy of Python. We
|
62
|
+
support Python 3.9 and up. (On macOS, use a Python downloaded from
|
63
|
+
`Python.org <http://python.org>`_ and not the one provided by Apple.)
|
64
|
+
After installing Python, you may install a SnapPy module from your
|
65
|
+
Terminal application or Command Prompt with the command::
|
66
|
+
|
67
|
+
python3 -m pip install --upgrade --user snappy snappy_15_knots
|
68
|
+
|
69
|
+
If you do not want the larger version of HTLinkExteriors that includes
|
70
|
+
the 15 crossing knots (it uses 110M of disk space), omit
|
71
|
+
``snappy_15_knots`` from the command.
|
72
|
+
|
73
|
+
|
74
|
+
Python Modules for Linux
|
75
|
+
------------------------
|
76
|
+
|
77
|
+
You can also use SnapPy with your Linux system's version of Python,
|
78
|
+
for example if you want to incorporate SnapPy in your own Python
|
79
|
+
scripts. These instructions assume you have system administrator
|
80
|
+
(superuser) privileges to install software packages from your Linux
|
81
|
+
distribution. (If you're not a superuser, use either the
|
82
|
+
`Linux app`_ or `conda`_.)
|
83
|
+
|
84
|
+
The first step is to install Python and other requirements; here's how
|
85
|
+
to do that on the most popular Linux distributions:
|
86
|
+
|
87
|
+
+ **Ubuntu/Debian/Mint/MX Linux/Elementary:** Tested on Ubuntu 24.04::
|
88
|
+
|
89
|
+
sudo apt install python3-pip python3-tk
|
90
|
+
|
91
|
+
+ **Fedora**: Tested on Fedora 41::
|
92
|
+
|
93
|
+
sudo dnf install python3-pip python3-tkinter
|
94
|
+
|
95
|
+
+ **Arch/Manjaro/EndeavourOS**: Install via::
|
96
|
+
|
97
|
+
sudo pacman -Sy python-pip tk
|
98
|
+
|
99
|
+
+ **openSUSE**: For Tumbleweed::
|
100
|
+
|
101
|
+
sudo zypper install python3-pip python3-tk
|
102
|
+
|
103
|
+
For Leap, as of version 15.6 you need to ask for a recent version of
|
104
|
+
Python or it will give you Python 3.6 which is too old for SnapPy::
|
105
|
+
|
106
|
+
sudo zypper install python312-pip python312-tk
|
107
|
+
|
108
|
+
You will need to replace ``python3`` by ``python3.12`` in subsequent
|
109
|
+
steps.
|
110
|
+
|
111
|
+
+ **Red Hat Enterprise Linux/CentOS/Rocky Linux/AlmaLinux:**: These instructions
|
112
|
+
are for version 8 or later; tested on AlmaLinux 8 and 9::
|
113
|
+
|
114
|
+
sudo dnf install python3.11-pip python3.11-tkinter
|
115
|
+
|
116
|
+
You will also need to replace ``python3`` by ``python3.11`` in subsequent
|
117
|
+
steps.
|
118
|
+
|
119
|
+
|
120
|
+
Next, you need to install the SnapPy Python modules. For this, you can
|
121
|
+
either use a *virtual environment* (``python -m venv``) or do a *user
|
122
|
+
install* (``pip install --user``). The former will work on any
|
123
|
+
version of Linux, whereas the latter is now strongly discouraged on
|
124
|
+
many systems (e.g. Ubuntu 24.04). If you have not previously
|
125
|
+
installed SnapPy on this computer, we recommend using a virtual
|
126
|
+
environment, but suggest a user install if you are upgrading an
|
127
|
+
existing version of SnapPy that was installed in that manner.
|
128
|
+
|
129
|
+
Virtual environment
|
130
|
+
Here is the `official tutorial
|
131
|
+
<https://docs.python.org/3/tutorial/venv.html>`_ on using virtual
|
132
|
+
environments in Python and an `in-depth article
|
133
|
+
<https://realpython.com/python-virtual-environments-a-primer/>`_. A
|
134
|
+
recipe is::
|
135
|
+
|
136
|
+
python3 -m venv snappy_venv
|
137
|
+
# Switch to snappy_venv's Python
|
138
|
+
source snappy_venv/bin/activate
|
139
|
+
pip install snappy snappy_15_knots
|
140
|
+
# Start the SnapPy app!
|
141
|
+
SnapPy
|
142
|
+
# Return to system Python
|
143
|
+
deactivate
|
144
|
+
|
145
|
+
If you always want to use the ``snappy_venv`` Python, adjust your
|
146
|
+
`$PATH <https://opensource.com/article/17/6/set-path-linux>`_ to
|
147
|
+
**start** with ``snappy_venv/bin``.
|
148
|
+
|
149
|
+
User install
|
150
|
+
To do a user install with pip, try::
|
151
|
+
|
152
|
+
# Note no "sudo" below!
|
153
|
+
python3 -m pip install --upgrade --user snappy snappy_15_knots
|
154
|
+
|
155
|
+
If you get a long error message that starts::
|
156
|
+
|
157
|
+
error: externally-managed-environment
|
158
|
+
|
159
|
+
you should probably use a virtual environment; however,
|
160
|
+
you can force pip to do a user install via::
|
161
|
+
|
162
|
+
# Note no "sudo" below!
|
163
|
+
python3 -m pip install --upgrade --user --break-system-packages snappy snappy_15_knots
|
164
|
+
|
165
|
+
Despite the scary name, provided you don't use ``sudo``, this will
|
166
|
+
not actually modify the system packages, but rather install
|
167
|
+
``snappy`` into the subdirectory
|
168
|
+
``~/.local/share/python3.*/site-packages`` of your home directory.
|
169
|
+
|
170
|
+
After a user install, you run the following command to start
|
171
|
+
the app::
|
172
|
+
|
173
|
+
~/.local/bin/SnapPy
|
174
|
+
|
175
|
+
So that you can start SnapPy with just the command ``SnapPy``, make
|
176
|
+
sure ``~/.local/bin`` is in `in your path
|
177
|
+
<https://opensource.com/article/17/6/set-path-linux>`_.
|
178
|
+
|
179
|
+
|
180
|
+
SageMath
|
181
|
+
--------
|
182
|
+
|
183
|
+
SnapPy has some special features when used within `SageMath
|
184
|
+
<http://sagemath.org>`_, the universal mathematics software based on
|
185
|
+
Python. This section describes how to install SnapPy into your
|
186
|
+
existing copy of SageMath::
|
187
|
+
|
188
|
+
sage -pip install --upgrade snappy snappy_15_knots
|
189
|
+
|
190
|
+
Alternatively, SageMath on `CoCalc <https://cocalc.com/>`_ (formerly
|
191
|
+
the SageMathCloud) also has SnapPy preinstalled, and the graphics
|
192
|
+
features even work via the `X11 interface
|
193
|
+
<http://blog.sagemath.com/cocalc/2018/11/05/x11.html>`_, see the
|
194
|
+
bottom of that page for more.
|
195
|
+
|
196
|
+
The graphical features may or may not work, depending on how Tkinter
|
197
|
+
was configured within Sage. (There is no problem on macOS if you use
|
198
|
+
this `SageMath binary
|
199
|
+
<https://github.com/3-manifolds/Sage_macOS/releases>`_.) If the
|
200
|
+
graphical features seem to "hang" when you try to start them, type
|
201
|
+
``%gui tk`` at the Sage prompt; please note that doing so may break
|
202
|
+
Sage's "attach" feature.
|
203
|
+
|
204
|
+
|
205
|
+
Kitchen sink
|
206
|
+
------------
|
207
|
+
|
208
|
+
SnapPy gains extra features when used in `SageMath`_ and one can use
|
209
|
+
Sage's Python to interact not just with SnapPy but a range of other
|
210
|
+
computational tools in low-dimensional topology including
|
211
|
+
`Regina <http://regina-normal.github.io/>`_,
|
212
|
+
`snap <http://snap-pari.sourceforge.net>`_,
|
213
|
+
`heegaard <https://github.com/3-manifolds/heegaard>`_,
|
214
|
+
`gridlink <https://github.com/3-manifolds/gridlink>`_,
|
215
|
+
and `flipper <http://flipper.readthedocs.io>`_.
|
216
|
+
We offer a `prepackaged Docker image
|
217
|
+
<https://hub.docker.com/r/computop/sage/>`_ with all of the above tools
|
218
|
+
and many more; using this is sometimes the easiest way to get a
|
219
|
+
working setup for such multifaceted computations, especially on Windows. For more, watch
|
220
|
+
`this demonstration <https://icerm.brown.edu/video_archive/?play=1992>`_.
|
221
|
+
|
222
|
+
|
223
|
+
Conda
|
224
|
+
-----
|
225
|
+
|
226
|
+
Conda can be used to install Python on all platforms and is a
|
227
|
+
particularly good choice to use SnapPy on the older Linux systems
|
228
|
+
often found on high-performance clusters. Here is a recipe for
|
229
|
+
installing SnapPy into a new conda environment on macOS or Linux::
|
230
|
+
|
231
|
+
source ~/miniforge3/bin/activate
|
232
|
+
mamba create --name snappy_env python=3.12
|
233
|
+
conda activate snappy_env
|
234
|
+
pip install snappy
|
235
|
+
python -m snappy.app
|
236
|
+
|
237
|
+
|
238
|
+
Source code
|
239
|
+
-----------
|
240
|
+
|
241
|
+
The complete source code for all platforms: |tarball|_
|
242
|
+
|
243
|
+
You can also browse our `source code repository
|
244
|
+
<https://github.com/3-manifolds/SnapPy>`_ or clone it using `git
|
245
|
+
<https://git-scm.com/>`_ via::
|
246
|
+
|
247
|
+
git clone https://github.com/3-manifolds/SnapPy.git
|
@@ -0,0 +1,46 @@
|
|
1
|
+
ManifoldHP: High-precision variant
|
2
|
+
==================================================
|
3
|
+
|
4
|
+
A ManifoldHP is a variant of :class:`Manifold <snappy.Manifold>` which
|
5
|
+
does all floating-point calculations in `quad-double precision
|
6
|
+
<http://web.mit.edu/tabbott/Public/quaddouble-debian/qd-2.3.4-old/docs/qd.pdf>`_,
|
7
|
+
which has four times as many significant digits as the ordinary
|
8
|
+
`double precision numbers
|
9
|
+
<http://en.wikipedia.org/wiki/Double_precision_floating-point_format>`_
|
10
|
+
used by Manifold. More precisely, numbers used in ManifoldHP have 212
|
11
|
+
bits for the mantissa/significand (roughly 63 decimal digits) versus
|
12
|
+
53 bits with Manifold.
|
13
|
+
|
14
|
+
To the user, the only difference between Manifold and ManifoldHP is the extra precision::
|
15
|
+
|
16
|
+
>>> L = Manifold('m004')
|
17
|
+
>>> L.volume()
|
18
|
+
2.02988321282
|
19
|
+
>>> H = ManifoldHP('m004')
|
20
|
+
>>> H.volume()
|
21
|
+
2.029883212819307250042405108549040571883378615060599584034978214
|
22
|
+
|
23
|
+
and it is easy to go back and forth between the two types::
|
24
|
+
|
25
|
+
>>> D = H.low_precision()
|
26
|
+
>>> D.volume(), type(D)
|
27
|
+
(2.02988321282, <class 'snappy.Manifold'>)
|
28
|
+
>>> U = L.high_precision()
|
29
|
+
>>> type(U)
|
30
|
+
<class 'snappy.ManifoldHP'>
|
31
|
+
|
32
|
+
FAQ
|
33
|
+
---
|
34
|
+
|
35
|
+
Q. How does this differ from the program `Snap <http://snap-pari.sourceforge.net/>`_ or the :doc:`corresponding features <snap>` of SnapPy?
|
36
|
+
|
37
|
+
A. Snap computes hyperbolic structures to whatever precision you specify, not just 212 bits. However, only some aspects of that structure can be accessed at the higher precision. In contrast, with ManifoldHP every part of the SnapPea kernel uses the high-precision structure. Eventually, we hope to add a ManifoldAP which allows for arbitrary precision throughout the kernel.
|
38
|
+
|
39
|
+
Q. Are there any negatives to using ManifoldHP over Manifold?
|
40
|
+
|
41
|
+
A. Yes, ManifoldHP is generally slower by a factor of 10 to 100. Multiplying two quad-double numbers requires at least 10 ordinary double multiplications, so some of this is inevitable.
|
42
|
+
|
43
|
+
Q. What is one place where the extra precision really helps?
|
44
|
+
|
45
|
+
A. Computing Dirichlet domains and subsidiary things like the length spectrum. A ManifoldHP can find the Dirichlet domain of a typically 15 crossing knot exterior but Manifold can't.
|
46
|
+
|