snappy 3.3__cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- snappy/CyOpenGL.cpython-310-aarch64-linux-gnu.so +0 -0
- snappy/SnapPy.cpython-310-aarch64-linux-gnu.so +0 -0
- snappy/SnapPy.ico +0 -0
- snappy/SnapPy.png +0 -0
- snappy/SnapPyHP.cpython-310-aarch64-linux-gnu.so +0 -0
- snappy/__init__.py +534 -0
- snappy/app.py +604 -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 +280 -0
- snappy/cusps/cusp_area_matrix.py +98 -0
- snappy/cusps/cusp_areas_from_matrix.py +96 -0
- snappy/cusps/maximal_cusp_area_matrix.py +136 -0
- snappy/cusps/short_slopes_for_cusp.py +217 -0
- snappy/cusps/test.py +22 -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 +717 -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/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 +52 -0
- snappy/doc/_sources/credits.rst.txt +81 -0
- snappy/doc/_sources/development.rst.txt +261 -0
- snappy/doc/_sources/index.rst.txt +215 -0
- snappy/doc/_sources/installing.rst.txt +249 -0
- snappy/doc/_sources/manifold.rst.txt +6 -0
- snappy/doc/_sources/manifoldhp.rst.txt +46 -0
- snappy/doc/_sources/news.rst.txt +425 -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 +906 -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 +149 -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 +192 -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 +635 -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 +453 -0
- snappy/doc/credits.html +184 -0
- snappy/doc/development.html +385 -0
- snappy/doc/doc-latest/additional_classes.html +1500 -0
- snappy/doc/doc-latest/bugs.html +132 -0
- snappy/doc/doc-latest/censuses.html +453 -0
- snappy/doc/doc-latest/credits.html +184 -0
- snappy/doc/doc-latest/development.html +385 -0
- snappy/doc/doc-latest/genindex.html +1349 -0
- snappy/doc/doc-latest/index.html +287 -0
- snappy/doc/doc-latest/installing.html +346 -0
- snappy/doc/doc-latest/manifold.html +3632 -0
- snappy/doc/doc-latest/manifoldhp.html +180 -0
- snappy/doc/doc-latest/news.html +438 -0
- snappy/doc/doc-latest/objects.inv +0 -0
- snappy/doc/doc-latest/other.html +160 -0
- snappy/doc/doc-latest/platonic_census.html +376 -0
- snappy/doc/doc-latest/plink.html +210 -0
- snappy/doc/doc-latest/ptolemy.html +253 -0
- snappy/doc/doc-latest/ptolemy_classes.html +1144 -0
- snappy/doc/doc-latest/ptolemy_examples1.html +409 -0
- snappy/doc/doc-latest/ptolemy_examples2.html +471 -0
- snappy/doc/doc-latest/ptolemy_examples3.html +414 -0
- snappy/doc/doc-latest/ptolemy_examples4.html +195 -0
- snappy/doc/doc-latest/ptolemy_prelim.html +248 -0
- snappy/doc/doc-latest/py-modindex.html +165 -0
- snappy/doc/doc-latest/screenshots.html +141 -0
- snappy/doc/doc-latest/search.html +135 -0
- snappy/doc/doc-latest/searchindex.js +1 -0
- snappy/doc/doc-latest/snap.html +202 -0
- snappy/doc/doc-latest/snappy.html +181 -0
- snappy/doc/doc-latest/spherogram.html +1346 -0
- snappy/doc/doc-latest/todo.html +166 -0
- snappy/doc/doc-latest/triangulation.html +1676 -0
- snappy/doc/doc-latest/tutorial.html +159 -0
- snappy/doc/doc-latest/verify.html +330 -0
- snappy/doc/doc-latest/verify_internals.html +1235 -0
- snappy/doc/genindex.html +1349 -0
- snappy/doc/index.html +287 -0
- snappy/doc/installing.html +346 -0
- snappy/doc/manifold.html +3632 -0
- snappy/doc/manifoldhp.html +180 -0
- snappy/doc/news.html +438 -0
- snappy/doc/objects.inv +0 -0
- snappy/doc/other.html +160 -0
- snappy/doc/platonic_census.html +376 -0
- snappy/doc/plink.html +210 -0
- snappy/doc/ptolemy.html +253 -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 +1346 -0
- snappy/doc/todo.html +166 -0
- snappy/doc/triangulation.html +1676 -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 +132 -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 +198 -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 +130 -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 +691 -0
- snappy/geometric_structure/cusp_neighborhood/cusp_cross_section_base.py +480 -0
- snappy/geometric_structure/cusp_neighborhood/exceptions.py +41 -0
- snappy/geometric_structure/cusp_neighborhood/real_cusp_cross_section.py +294 -0
- snappy/geometric_structure/cusp_neighborhood/tiles_for_cusp_neighborhood.py +156 -0
- snappy/geometric_structure/cusp_neighborhood/vertices.py +35 -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_representatives.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 +106 -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 +128 -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 +259 -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 +389 -0
- snappy/len_spec/__init__.py +609 -0
- snappy/len_spec/geodesic_info.py +129 -0
- snappy/len_spec/geodesic_key_info_dict.py +116 -0
- snappy/len_spec/geodesic_piece.py +146 -0
- snappy/len_spec/geometric_structure.py +182 -0
- snappy/len_spec/geometry.py +136 -0
- snappy/len_spec/length_spectrum_geodesic_info.py +185 -0
- snappy/len_spec/spine.py +128 -0
- snappy/len_spec/test.py +24 -0
- snappy/len_spec/test_cases.py +69 -0
- snappy/len_spec/tile.py +276 -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/margulis/__init__.py +332 -0
- snappy/margulis/cusp_neighborhood_neighborhood.py +66 -0
- snappy/margulis/geodesic_neighborhood.py +152 -0
- snappy/margulis/margulis_info.py +21 -0
- snappy/margulis/mu_from_neighborhood_pair.py +175 -0
- snappy/margulis/neighborhood.py +29 -0
- snappy/margulis/test.py +22 -0
- snappy/math_basics.py +187 -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 +856 -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 +995 -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 +124 -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 +119 -0
- snappy/settings.py +407 -0
- snappy/shell.py +53 -0
- snappy/snap/__init__.py +117 -0
- snappy/snap/character_varieties.py +375 -0
- snappy/snap/find_field.py +372 -0
- snappy/snap/fox_milnor.py +271 -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 +716 -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/__init__.py +194 -0
- snappy/snap/slice_obs_HKL/basics.py +236 -0
- snappy/snap/slice_obs_HKL/direct.py +217 -0
- snappy/snap/slice_obs_HKL/poly_norm.py +212 -0
- snappy/snap/slice_obs_HKL/rep_theory.py +424 -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 +139 -0
- snappy/snap/utilities.py +288 -0
- snappy/test.py +213 -0
- snappy/test_cases.py +263 -0
- snappy/testing.py +131 -0
- snappy/tiling/__init__.py +2 -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/quotient_dict.py +70 -0
- snappy/tiling/real_hash_dict.py +164 -0
- snappy/tiling/test.py +23 -0
- snappy/tiling/tile.py +224 -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-310-aarch64-linux-gnu.so +0 -0
- snappy/upper_halfspace/__init__.py +146 -0
- snappy/upper_halfspace/ideal_point.py +29 -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/real_algebra.py +286 -0
- snappy/verify/shapes.py +25 -0
- snappy/verify/square_extensions.py +1005 -0
- snappy/verify/test.py +72 -0
- snappy/verify/volume.py +128 -0
- snappy/version.py +2 -0
- snappy-3.3.dist-info/METADATA +58 -0
- snappy-3.3.dist-info/RECORD +541 -0
- snappy-3.3.dist-info/WHEEL +6 -0
- snappy-3.3.dist-info/entry_points.txt +2 -0
- snappy-3.3.dist-info/top_level.txt +28 -0
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
from .gimbalLoopFinder import GimbalLoopFinder
|
|
2
|
+
from .truncatedComplex import TruncatedComplex
|
|
3
|
+
from .hyperbolicStructure import HyperbolicStructure
|
|
4
|
+
from .verificationError import *
|
|
5
|
+
|
|
6
|
+
from sage.all import matrix, prod, RealDoubleField, pi
|
|
7
|
+
|
|
8
|
+
__all__ = [ 'VerifyHyperbolicStructureEngine']
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class VerifyHyperbolicStructureEngine:
|
|
12
|
+
def __init__(self, hyperbolic_structure):
|
|
13
|
+
self.hyperbolic_structure = hyperbolic_structure
|
|
14
|
+
self.mcomplex = self.hyperbolic_structure.mcomplex
|
|
15
|
+
|
|
16
|
+
if not hyperbolic_structure.exact_edges:
|
|
17
|
+
raise RuntimeError(
|
|
18
|
+
'Need to specify "exact edges", i.e., edges for which we '
|
|
19
|
+
'already know by, e.g., the Krawczyk test that their edge '
|
|
20
|
+
'equations are fullfilled')
|
|
21
|
+
|
|
22
|
+
num_edges = len(self.mcomplex.Edges)
|
|
23
|
+
exact_edges = set(hyperbolic_structure.exact_edges)
|
|
24
|
+
|
|
25
|
+
self.approx_edges = [i for i in range(num_edges)
|
|
26
|
+
if i not in exact_edges]
|
|
27
|
+
|
|
28
|
+
self.truncated_complex = TruncatedComplex(self.mcomplex)
|
|
29
|
+
|
|
30
|
+
self.gimbal_loops = [
|
|
31
|
+
GimbalLoopFinder(self.truncated_complex,
|
|
32
|
+
vertex,
|
|
33
|
+
self.approx_edges).compute_grouped_loop()
|
|
34
|
+
for vertex in self.mcomplex.Vertices ]
|
|
35
|
+
|
|
36
|
+
self.rotations_and_derivatives_for_approx_edges = {
|
|
37
|
+
e : HyperbolicStructure.so3_matrix_and_derivative_for_z_rotation(
|
|
38
|
+
self.hyperbolic_structure.angle_sums[e])
|
|
39
|
+
for e in self.approx_edges
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
def gimbal_derivative(self):
|
|
43
|
+
|
|
44
|
+
self.edge_index_to_column_index = {
|
|
45
|
+
e : i for i, e in enumerate(self.approx_edges)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
RIF = self.hyperbolic_structure.vertex_gram_matrices[0].base_ring()
|
|
49
|
+
num_rows = 3 * len(self.mcomplex.Vertices)
|
|
50
|
+
num_cols = len(self.approx_edges)
|
|
51
|
+
result = matrix(RIF, num_rows, num_cols)
|
|
52
|
+
|
|
53
|
+
for i, gimbal_loop in enumerate(self.gimbal_loops):
|
|
54
|
+
path_matrices = [
|
|
55
|
+
self.hyperbolic_structure.so3_matrix_for_path(edgePath)
|
|
56
|
+
for edgeLoop, edgePath in gimbal_loop ]
|
|
57
|
+
|
|
58
|
+
for j, (edgeLoop, edgePath) in enumerate(gimbal_loop):
|
|
59
|
+
col = self.edge_index_to_column_index[edgeLoop.edge_index]
|
|
60
|
+
m = self._gimbal_derivative_matrix(
|
|
61
|
+
gimbal_loop, path_matrices, j)
|
|
62
|
+
result[3 * i , col] += m[0,1]
|
|
63
|
+
result[3 * i + 1, col] += m[0,2]
|
|
64
|
+
result[3 * i + 2, col] += m[1,2]
|
|
65
|
+
|
|
66
|
+
return result
|
|
67
|
+
|
|
68
|
+
def assert_avoiding_gimbal_lock(self):
|
|
69
|
+
d = self.gimbal_derivative()
|
|
70
|
+
if not VerifyHyperbolicStructureEngine.is_invertible(d):
|
|
71
|
+
raise GimbalDerivativeNotInvertibleError(d, d.determinant())
|
|
72
|
+
|
|
73
|
+
def assert_two_pi_in_ange_sum_intervals(self):
|
|
74
|
+
RIF = self.hyperbolic_structure.angle_sums[0].parent()
|
|
75
|
+
two_pi = RIF(2 * pi)
|
|
76
|
+
|
|
77
|
+
for angle in self.hyperbolic_structure.angle_sums:
|
|
78
|
+
if two_pi not in angle:
|
|
79
|
+
raise AngleSumIntervalNotContainingTwoPiError()
|
|
80
|
+
|
|
81
|
+
def assert_vertex_gram_matrices_valid(self):
|
|
82
|
+
for G_adj in self.hyperbolic_structure.vertex_gram_adjoints:
|
|
83
|
+
_assert_vertex_gram_adjoint_valid(G_adj)
|
|
84
|
+
for G in self.hyperbolic_structure.vertex_gram_matrices:
|
|
85
|
+
_assert_vertex_gram_matrix_valid (G )
|
|
86
|
+
|
|
87
|
+
def assert_verified_hyperbolic(self):
|
|
88
|
+
self.assert_vertex_gram_matrices_valid()
|
|
89
|
+
self.assert_avoiding_gimbal_lock()
|
|
90
|
+
self.assert_two_pi_in_ange_sum_intervals()
|
|
91
|
+
|
|
92
|
+
@staticmethod
|
|
93
|
+
def is_invertible(m):
|
|
94
|
+
r, c = m.dimensions()
|
|
95
|
+
if r != c:
|
|
96
|
+
raise AssertionError("Not a square matrix in invertible check "
|
|
97
|
+
"of VerifyHyperbolicStructureEngine.")
|
|
98
|
+
|
|
99
|
+
RIF = m.base_ring()
|
|
100
|
+
max_entry = RIF(1) / (r * c)
|
|
101
|
+
|
|
102
|
+
real_m = matrix(RealDoubleField(), m)
|
|
103
|
+
try:
|
|
104
|
+
real_approx_inv = real_m.inverse()
|
|
105
|
+
except ZeroDivisionError:
|
|
106
|
+
return False
|
|
107
|
+
|
|
108
|
+
approx_inv = real_approx_inv.change_ring(RIF)
|
|
109
|
+
idMatrix = matrix.identity(RIF, r)
|
|
110
|
+
t = approx_inv * m - idMatrix
|
|
111
|
+
|
|
112
|
+
for row in t:
|
|
113
|
+
for entry in row:
|
|
114
|
+
if not (entry < max_entry):
|
|
115
|
+
return False
|
|
116
|
+
return True
|
|
117
|
+
|
|
118
|
+
def _gimbal_derivative_matrix(self, gimbal_loop, path_matrices, j):
|
|
119
|
+
|
|
120
|
+
def term(i):
|
|
121
|
+
edgeLoop, path = gimbal_loop[i]
|
|
122
|
+
rotation_and_derivative = (
|
|
123
|
+
self.rotations_and_derivatives_for_approx_edges[
|
|
124
|
+
edgeLoop.edge_index])
|
|
125
|
+
|
|
126
|
+
if i == j:
|
|
127
|
+
return path_matrices[i] * rotation_and_derivative[1]
|
|
128
|
+
else:
|
|
129
|
+
return path_matrices[i] * rotation_and_derivative[0]
|
|
130
|
+
|
|
131
|
+
return prod([term(i) for i in range(len(gimbal_loop) - 1, -1, -1)])
|
|
132
|
+
|
|
133
|
+
def _assert_vertex_gram_adjoint_valid(G_adj):
|
|
134
|
+
for i in range(4):
|
|
135
|
+
if not (G_adj[i, i] < 0):
|
|
136
|
+
raise BadVertexGramMatrixError(
|
|
137
|
+
"Failed to verify diagonal %d cofactor < 0" % i)
|
|
138
|
+
for j in range(4):
|
|
139
|
+
if i != j:
|
|
140
|
+
if not (G_adj[i, j] ** 2 < G_adj[i, i] * G_adj[j, j]):
|
|
141
|
+
raise BadVertexGramMatrixError(
|
|
142
|
+
"Failed to verify cofactor inequality for (%d,%d)" % (i,j))
|
|
143
|
+
|
|
144
|
+
def _assert_vertex_gram_matrix_valid(G):
|
|
145
|
+
for i in range(4):
|
|
146
|
+
for j in range(4):
|
|
147
|
+
if not (G[i,j] <= -1):
|
|
148
|
+
raise BadVertexGramMatrixError(
|
|
149
|
+
"Failed to verify entry (%d,%d) <= - 1" % (i, j))
|
|
150
|
+
|
|
151
|
+
p = G.characteristic_polynomial()
|
|
152
|
+
|
|
153
|
+
# Budan-Fourier theorem (see e.g.,
|
|
154
|
+
# Saugata Basu, Richard Pollack, Marie-Francoise Roy
|
|
155
|
+
# Algorithms in Real Algebraic Geometry)
|
|
156
|
+
# it is sufficient to verify that a_0 < 0, a_1 > 0, a_2 < 0.
|
|
157
|
+
# for the characteristic polynomial
|
|
158
|
+
# p_G(x) = det(xI-G) = x^4 + 4x^3 + a_2 x^2 + a_1x + a_0.
|
|
159
|
+
#
|
|
160
|
+
a0, a1, a2, a3, a4 = p.coefficients(sparse = False)
|
|
161
|
+
|
|
162
|
+
if not a3 == 4:
|
|
163
|
+
raise BadVertexGramMatrixError(
|
|
164
|
+
"Failed to verify a3 = 4 for characteristic polynomial")
|
|
165
|
+
if not a4 == 1:
|
|
166
|
+
raise BadVertexGramMatrixError(
|
|
167
|
+
"Failed to verify a4 = 1 for characteristic polynomial")
|
|
168
|
+
|
|
169
|
+
if not (a0 < 0):
|
|
170
|
+
raise BadVertexGramMatrixError(
|
|
171
|
+
"Failed to verify a0 < 0 for characteristic polynomial")
|
|
172
|
+
if not (a1 > 0):
|
|
173
|
+
raise BadVertexGramMatrixError(
|
|
174
|
+
"Failed to verify a1 > 0 for characteristic polynomial")
|
|
175
|
+
if not (a2 < 0):
|
|
176
|
+
raise BadVertexGramMatrixError(
|
|
177
|
+
"Failed to verify a2 < 0 for characteristic polynomial")
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
==================
|
|
2
|
+
Additional Classes
|
|
3
|
+
==================
|
|
4
|
+
|
|
5
|
+
.. automodule:: snappy
|
|
6
|
+
|
|
7
|
+
AbelianGroup
|
|
8
|
+
============
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
.. autoclass:: AbelianGroup
|
|
12
|
+
:members:
|
|
13
|
+
:inherited-members:
|
|
14
|
+
:exclude-members: coefficients
|
|
15
|
+
|
|
16
|
+
FundamentalGroup
|
|
17
|
+
================
|
|
18
|
+
|
|
19
|
+
.. autoclass:: HolonomyGroup
|
|
20
|
+
:members:
|
|
21
|
+
:inherited-members:
|
|
22
|
+
|
|
23
|
+
SymmetryGroup
|
|
24
|
+
=============
|
|
25
|
+
.. autoclass:: SymmetryGroup
|
|
26
|
+
:members:
|
|
27
|
+
:inherited-members:
|
|
28
|
+
|
|
29
|
+
DirichletDomain
|
|
30
|
+
===============
|
|
31
|
+
.. autoclass:: DirichletDomain
|
|
32
|
+
:members:
|
|
33
|
+
:inherited-members:
|
|
34
|
+
|
|
35
|
+
CuspNeighborhood
|
|
36
|
+
================
|
|
37
|
+
|
|
38
|
+
.. autoclass:: CuspNeighborhood
|
|
39
|
+
:members:
|
|
40
|
+
:inherited-members:
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
.. Reporting bugs and other problems
|
|
2
|
+
|
|
3
|
+
Reporting bugs and other problems
|
|
4
|
+
=================================
|
|
5
|
+
|
|
6
|
+
We very much welcome reports of any difficulties you encounter
|
|
7
|
+
installing or using SnapPy. While we do significant testing before
|
|
8
|
+
each release, with so many supported platforms/configurations and only
|
|
9
|
+
three core developers, we need your help to keep things running
|
|
10
|
+
smoothly. To report a problem, you may either `open a formal issue
|
|
11
|
+
ticket <https://github.com/3-manifolds/SnapPy/issues>`_ or `write to the
|
|
12
|
+
developers <snappy-help@computop.org>`_. As always, it is most helpful
|
|
13
|
+
if you include the details of your computer's configuration as well as
|
|
14
|
+
verbatim copies of any error messages.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
Census manifolds
|
|
2
|
+
================
|
|
3
|
+
|
|
4
|
+
Snappy comes with a large library of manifolds, which can be accessed
|
|
5
|
+
individually through the Manifold and Triangulation constructors but
|
|
6
|
+
can also be iterated through using the objects described on this
|
|
7
|
+
page.
|
|
8
|
+
|
|
9
|
+
SnapPy's iterators support several flexible methods for accessing
|
|
10
|
+
manifolds. They can be sliced (i.e. restricted to subranges) either
|
|
11
|
+
by index or by volume. Calling the iterator with keyword arguments
|
|
12
|
+
such as num_tets=1, betti=2 or num_cusps=3 returns an iterator which
|
|
13
|
+
is filtered by the specified conditions. In addition these iterators
|
|
14
|
+
can determine whether they contain a given manifold. They support
|
|
15
|
+
python's "A in B" syntax, and also provide an identify method which
|
|
16
|
+
will return a copy of the census manifold which is isometric to the
|
|
17
|
+
manifold passed as an argument.
|
|
18
|
+
|
|
19
|
+
.. currentmodule:: snappy
|
|
20
|
+
.. autodata:: OrientableCuspedCensus
|
|
21
|
+
.. autodata:: OrientableClosedCensus
|
|
22
|
+
.. autodata:: CensusKnots
|
|
23
|
+
.. autodata:: LinkExteriors
|
|
24
|
+
.. autodata:: HTLinkExteriors
|
|
25
|
+
.. autodata:: RibbonLinks
|
|
26
|
+
.. autodata:: NonorientableCuspedCensus
|
|
27
|
+
.. autodata:: NonorientableClosedCensus
|
|
28
|
+
|
|
29
|
+
There are also:
|
|
30
|
+
|
|
31
|
+
.. toctree::
|
|
32
|
+
:maxdepth: 1
|
|
33
|
+
|
|
34
|
+
platonic_census
|
|
35
|
+
|
|
36
|
+
As instances of subclasses of ManifoldTable, the objects above
|
|
37
|
+
support the following methods.
|
|
38
|
+
|
|
39
|
+
.. autoclass:: snappy.database.ManifoldTable
|
|
40
|
+
:members:
|
|
41
|
+
:inherited-members:
|
|
42
|
+
|
|
43
|
+
Because of the large size of their datasets, the classes below
|
|
44
|
+
can only iterate through slices by index, and do not provide
|
|
45
|
+
the identification methods.
|
|
46
|
+
|
|
47
|
+
.. autoclass:: AlternatingKnotExteriors
|
|
48
|
+
:members:
|
|
49
|
+
:inherited-members:
|
|
50
|
+
.. autoclass:: NonalternatingKnotExteriors
|
|
51
|
+
:members:
|
|
52
|
+
:inherited-members:
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
Credits
|
|
2
|
+
=======
|
|
3
|
+
|
|
4
|
+
Primary development and maintenance:
|
|
5
|
+
|
|
6
|
+
* `Marc Culler <http://www.math.uic.edu/~culler>`_
|
|
7
|
+
* `Nathan Dunfield <http://dunfield.info>`_
|
|
8
|
+
* `Matthias Goerner <http://www.unhyperbolic.org/>`_
|
|
9
|
+
* `Jeff Weeks <http://www.geometrygames.org>`_
|
|
10
|
+
|
|
11
|
+
Additional contributions:
|
|
12
|
+
|
|
13
|
+
* Mark Bell, Tracy Hall, Saul Schleimer, `Twister <https://github.com/MarkCBell/twister>`_.
|
|
14
|
+
|
|
15
|
+
* Jim Hoste and Morwen Thistlethwaite, manifold and link censuses.
|
|
16
|
+
|
|
17
|
+
* Ben Burton, manifold censuses and isosig code.
|
|
18
|
+
|
|
19
|
+
* Abhijit Champanerkar and Ilya Kofman, knot censuses.
|
|
20
|
+
|
|
21
|
+
* Robert Lipschitz and Jennet Dickinson, improvements to Spherogram.
|
|
22
|
+
|
|
23
|
+
* Malik Obeidin, improvements to Spherogram and the manifold
|
|
24
|
+
databases.
|
|
25
|
+
|
|
26
|
+
* Malik Obeidin and Cameron Rudd, exterior to link diagram code.
|
|
27
|
+
|
|
28
|
+
* Jose Sanchez, 3D printing code.
|
|
29
|
+
|
|
30
|
+
* Jean-Philippe Burelle, SL(2, C) character variety code.
|
|
31
|
+
|
|
32
|
+
* David Bachman, Henry Segerman and Saul Schleimer, initial code the
|
|
33
|
+
raytraced inside view is based on.
|
|
34
|
+
|
|
35
|
+
* Zoltán Szabó, computing the knot Floer homology calculator.
|
|
36
|
+
|
|
37
|
+
* `PARI library <http://pari.math.u-bordeaux.fr/>`_.
|
|
38
|
+
|
|
39
|
+
* `QD quad-double library
|
|
40
|
+
<http://crd-legacy.lbl.gov/~dhbailey/mpdist/>`_.
|
|
41
|
+
|
|
42
|
+
* Frédéric Chapoton, code cleanup and linting.
|
|
43
|
+
|
|
44
|
+
* Sherry Gong for code related to ribbon concordances and slice
|
|
45
|
+
obstrutions `[DG] <https://arXiv.org/abs/2512.21825>`_.
|
|
46
|
+
|
|
47
|
+
* Shana Li for the census of 10 tetrahedra cusped manfiolds `[Li]
|
|
48
|
+
<https://arXiv.org/abs/2512.02142>`_.
|
|
49
|
+
|
|
50
|
+
* Others, please let Marc or Nathan know if we've forgotten you.
|
|
51
|
+
|
|
52
|
+
Citing SnapPy
|
|
53
|
+
-------------
|
|
54
|
+
|
|
55
|
+
Please cite as:
|
|
56
|
+
|
|
57
|
+
M. Culler, N. M. Dunfield, M. Goerner, and J. R. Weeks, SnapPy, a computer program
|
|
58
|
+
for studying the geometry and topology of 3-manifolds, http://snappy.computop.org
|
|
59
|
+
|
|
60
|
+
or in BibTeX format ::
|
|
61
|
+
|
|
62
|
+
@misc{SnapPy,
|
|
63
|
+
author={Culler, Marc and Dunfield, Nathan M. and Goerner,
|
|
64
|
+
Matthias and Weeks, Jeffrey R.},
|
|
65
|
+
title={Snap{P}y, a computer program for studying the geometry and topology of $3$-manifolds},
|
|
66
|
+
howpublished={Available at \url{http://snappy.computop.org} (DD/MM/YYYY)},
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
or as an AMSRef::
|
|
70
|
+
|
|
71
|
+
\bib{SnapPy}{misc}{
|
|
72
|
+
author={Culler, Marc},
|
|
73
|
+
author={Dunfield, Nathan M.},
|
|
74
|
+
author={Goerner, Matthias},
|
|
75
|
+
author={Weeks, Jeffrey R.},
|
|
76
|
+
title={Snap{P}y, a computer program for studying the geometry and topology of $3$-manifolds},
|
|
77
|
+
note={Available at \url{http://snappy.computop.org} (DD/MM/YYYY)}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
where DD/MM/YYYY should be replaced by the date when you downloaded your
|
|
81
|
+
copy of SnapPy.
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
Development Basics
|
|
2
|
+
==================
|
|
3
|
+
|
|
4
|
+
Submitting patches
|
|
5
|
+
------------------
|
|
6
|
+
|
|
7
|
+
The source code for SnapPy and its various parts are `hosted on GitHub
|
|
8
|
+
<https://github.com/3-manifolds>`_ as `Git repositories
|
|
9
|
+
<https://git-scm.com/>`_. To contribute a patch, create a free
|
|
10
|
+
GitHub account, fork the appropriate repository, and then send us a
|
|
11
|
+
pull request, as described in `here
|
|
12
|
+
<https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request>`_.
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
macOS
|
|
16
|
+
-----
|
|
17
|
+
|
|
18
|
+
Here is how to get a clean development setup under macOS.
|
|
19
|
+
|
|
20
|
+
- Install the latest Python 3.13 from Python.org using the `Mac
|
|
21
|
+
Installer Disk Image <http://www.python.org/download/>`_. Set your
|
|
22
|
+
path so that "python3" is::
|
|
23
|
+
|
|
24
|
+
/Library/Frameworks/Python.framework/Versions/3.13/bin/python3
|
|
25
|
+
|
|
26
|
+
- Use `pip <https://pip.pypa.io/en/latest/index.html>`_ to install the
|
|
27
|
+
following packages::
|
|
28
|
+
|
|
29
|
+
python3 -m pip install --upgrade setuptools virtualenv wheel pip
|
|
30
|
+
python3 -m pip install cython # Used for Python-C interfacing
|
|
31
|
+
python3 -m pip install sphinx # For building the documentation
|
|
32
|
+
python3 -m pip install ipython # Improved Python shell
|
|
33
|
+
python3 -m pip install py2app # For making app bundles
|
|
34
|
+
python3 -m pip install pyx FXrays low_index
|
|
35
|
+
|
|
36
|
+
- Get the source code from the repository, using Git. For
|
|
37
|
+
example you can install Git via its `package installer
|
|
38
|
+
<https://www.git-scm.org/>`_. Now do::
|
|
39
|
+
|
|
40
|
+
git clone https://github.com/3-manifolds/plink.git
|
|
41
|
+
git clone https://github.com/3-manifolds/spherogram.git
|
|
42
|
+
git clone https://github.com/3-manifolds/snappy.git
|
|
43
|
+
|
|
44
|
+
- Test the stand-alone link editor::
|
|
45
|
+
|
|
46
|
+
cd plink
|
|
47
|
+
python3 setup.py pip_install
|
|
48
|
+
python3 -m plink.app # Link editor appears!
|
|
49
|
+
|
|
50
|
+
This last command runs the script ``plink/app.py``; the real code for
|
|
51
|
+
the link editor is in ``plink/__init__.py``.
|
|
52
|
+
|
|
53
|
+
- Build and install Spherogram::
|
|
54
|
+
|
|
55
|
+
cd ../spherogram
|
|
56
|
+
python3 setup.py pip_install
|
|
57
|
+
python3 setup.py test
|
|
58
|
+
|
|
59
|
+
- Now build SnapPy itself. One builds it twice to generate the
|
|
60
|
+
documentation, much of which is extracted from the installed module::
|
|
61
|
+
|
|
62
|
+
cd ../snappy
|
|
63
|
+
python3 setup.py pip_install
|
|
64
|
+
python3 setup.py test # Run the tests; pretty picture should appear.
|
|
65
|
+
python3 -m snappy.app #SnapPy starts!
|
|
66
|
+
|
|
67
|
+
To build the clickable app, just do the following::
|
|
68
|
+
|
|
69
|
+
cd mac_osx_app
|
|
70
|
+
python3 release.py --manual
|
|
71
|
+
|
|
72
|
+
though for general development purposes ``python3 -m snappy.app`` is
|
|
73
|
+
usually the way to go.
|
|
74
|
+
|
|
75
|
+
Some major parts of the SnapPy codebase are:
|
|
76
|
+
|
|
77
|
+
- ``SnapPy.pyx``, ``SnapPycore.pxi``, ``SnapPy.pxi``: The Cython interface
|
|
78
|
+
to the SnapPea kernel
|
|
79
|
+
- ``opengl/CyOpenGL*.pyx``: The Cython interface to OpenGL*
|
|
80
|
+
- ``snappy/app.py``: The core GUI code
|
|
81
|
+
- ``snappy/polyviewer.py``: The GUI code for Dirichlet domains
|
|
82
|
+
- ``snappy/horoviewer.py``: The GUI code for horoball pictures
|
|
83
|
+
- ``snappy/database.py``: Interacts with the sqlite3 manifold database
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
Windows
|
|
87
|
+
-------
|
|
88
|
+
|
|
89
|
+
These instructions have been tested on Windows 10, and describe
|
|
90
|
+
setting up a development environment using the (free) MSVC
|
|
91
|
+
compiler. To build the CyPari subcomponent, which few will want or
|
|
92
|
+
need to do, one must install additional tools.
|
|
93
|
+
|
|
94
|
+
- Install `Python 3.13.1
|
|
95
|
+
<https://www.python.org/downloads/windows/>`_, specifically the
|
|
96
|
+
default 64-bit version (the file name will end in ``amd64.exe``).
|
|
97
|
+
These instructions assume it has been installed in the directory
|
|
98
|
+
``C:\Python313`` which is not the default.
|
|
99
|
+
|
|
100
|
+
- With Python 3.13.1, you need the MSVC command line tools. You can
|
|
101
|
+
get them by using Microsoft's free `Build Tools for Visual Studio 2019
|
|
102
|
+
<https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=16>`_
|
|
103
|
+
installer and selecting the "C++ command line tools" and installing
|
|
104
|
+
the following subpackages: "MSVC v142 - VS 2019 C++ build tools",
|
|
105
|
+
"Testing tools core features", "C++/CLI support for v142", and
|
|
106
|
+
"Windows 10 SDK (most recent version)".
|
|
107
|
+
|
|
108
|
+
If you would like to make your own installer you will also need
|
|
109
|
+
`Inno Setup <http://www.jrsoftware.org/isdl.php>`_, specifically the
|
|
110
|
+
unicode version; tested with version 5.5.9.
|
|
111
|
+
|
|
112
|
+
- In the unlikely event you want to build `CyPari
|
|
113
|
+
<https://github.com/3-manifolds/CyPari>`_ from source, you'll need
|
|
114
|
+
`MSYS2 <http://msys2.github.io>`_. Follow the instructions on the
|
|
115
|
+
webpage to update everything to the very latest MSYS2 (``pacman -Sy
|
|
116
|
+
pacman; pacman -Syu; pacman -Su`` etc.). You should also install
|
|
117
|
+
the ucrt toolchain::
|
|
118
|
+
|
|
119
|
+
pacman -S mingw-w64-ucrt-x86_64-toolchain
|
|
120
|
+
|
|
121
|
+
- Make a shortcut to ``c:\msys64\msys2.exe`` as you will be using it all
|
|
122
|
+
the time; alternatively, pin ``mys2.exe`` to your taskbar.
|
|
123
|
+
|
|
124
|
+
- Install some additional packages::
|
|
125
|
+
|
|
126
|
+
pacman -S git make nano openssh perl tar unzip wget winpty patch
|
|
127
|
+
|
|
128
|
+
- Install your favorite text editor, for example you can install Emacs
|
|
129
|
+
via::
|
|
130
|
+
|
|
131
|
+
pacman -S mingw-w64-x86_64-emacs
|
|
132
|
+
|
|
133
|
+
- Make it so that MinGW, Python, and Inno Setup are all in your PATH,
|
|
134
|
+
as well as work around some stupid bug, by making the end of your
|
|
135
|
+
"~/.bash_profile" file to read::
|
|
136
|
+
|
|
137
|
+
PATH=/c/Python313:/c/Python313/Scripts:$PATH
|
|
138
|
+
PATH=$PATH:'/c/Program Files (x86)/Inno Setup 5'
|
|
139
|
+
export PATH
|
|
140
|
+
alias emacs="/mingw64/bin/emacs"
|
|
141
|
+
winpty bash; exit
|
|
142
|
+
|
|
143
|
+
For example, do::
|
|
144
|
+
|
|
145
|
+
nano ~/.bash_profile
|
|
146
|
+
|
|
147
|
+
- Make sure you have the right version of Python in your path by
|
|
148
|
+
typing::
|
|
149
|
+
|
|
150
|
+
python --version
|
|
151
|
+
|
|
152
|
+
You should see something like ``Python 3.13.1``.
|
|
153
|
+
|
|
154
|
+
- Use pip to install some basic tools::
|
|
155
|
+
|
|
156
|
+
python -m pip install --upgrade pip setuptools wheel # Upgrades pip to the current version.
|
|
157
|
+
python -m pip install sphinx cython cypari pyx FXrays low_index
|
|
158
|
+
|
|
159
|
+
- Fetch the latest development versions of the source straight from
|
|
160
|
+
the t3m repository::
|
|
161
|
+
|
|
162
|
+
git clone https://github.com/3-manifolds/plink.git
|
|
163
|
+
git clone https://github.com/3-manifolds/spherogram.git
|
|
164
|
+
git clone https://github.com/3-manifolds/snappy.git
|
|
165
|
+
|
|
166
|
+
- Build the components, from easiest to hardest, and then test::
|
|
167
|
+
|
|
168
|
+
cd plink
|
|
169
|
+
python setup.py pip_install
|
|
170
|
+
cd ../Spherogram
|
|
171
|
+
python setup.py pip_install
|
|
172
|
+
cd ../SnapPy
|
|
173
|
+
python setup.py pip_install
|
|
174
|
+
cd ..
|
|
175
|
+
python -m SnapPy.test
|
|
176
|
+
|
|
177
|
+
- To run the app, you can just do::
|
|
178
|
+
|
|
179
|
+
python -m snappy.app
|
|
180
|
+
|
|
181
|
+
- To build the binary installer, you need PyInstaller::
|
|
182
|
+
|
|
183
|
+
python -m pip install pyinstaller
|
|
184
|
+
|
|
185
|
+
To build the binary installer do::
|
|
186
|
+
|
|
187
|
+
cd windows_exe
|
|
188
|
+
python make.py
|
|
189
|
+
|
|
190
|
+
You will need to close the SnapPy window that pops up here to
|
|
191
|
+
complete the build process.
|
|
192
|
+
|
|
193
|
+
- Useful tips for those coming from Unix. In MSYS2, your home
|
|
194
|
+
directory is really something like::
|
|
195
|
+
|
|
196
|
+
c:\msys2\home\Nathan Dunfield
|
|
197
|
+
|
|
198
|
+
whereas your Windows 10 home directory is::
|
|
199
|
+
|
|
200
|
+
c:\Users\Nathan Dunfield
|
|
201
|
+
|
|
202
|
+
It is handy to have symbolic links from your MSYS2 home directory to
|
|
203
|
+
the Downloads and Desktop folders on the Windows side. `See this
|
|
204
|
+
discussion <http://www.howtogeek.com/howto/16226/>`_, but basically
|
|
205
|
+
you start a "Command Prompt" as Administrator and do::
|
|
206
|
+
|
|
207
|
+
cd "C:\msys64\home\Nathan Dunfield"
|
|
208
|
+
mklink /D Desktop "C:\Users\Nathan Dunfield\Desktop"
|
|
209
|
+
mklink /D Downloads "C:\Users\Nathan Dunfield\Downloads"
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
Linux
|
|
213
|
+
-----
|
|
214
|
+
|
|
215
|
+
Things you'll need:
|
|
216
|
+
|
|
217
|
+
- Python 3 with Tkinter: You'll need to have `Python
|
|
218
|
+
<http://python.org>`_ (version 3.9 or newer) and `Tk
|
|
219
|
+
<http://tcl.tk>`_ (at least version 8.5) with `Tkinter
|
|
220
|
+
<http://wiki.python.org/moin/TkInter>`_ to connect them, including
|
|
221
|
+
the header files. For instance, on Debian or Ubuntu, install the
|
|
222
|
+
packages "python3-tk", "python3-pip", and "python3-dev". On Fedora,
|
|
223
|
+
you'll want e.g. "python3-tkinter", "python3-pip", and
|
|
224
|
+
"python3-devel", and "python3-wheel".
|
|
225
|
+
|
|
226
|
+
- Test that Python is in order by installing PLink from source::
|
|
227
|
+
|
|
228
|
+
python3 -m pip install --user plink
|
|
229
|
+
python3 -m plink.app # Should start the link editor!
|
|
230
|
+
|
|
231
|
+
.. _openglmesa:
|
|
232
|
+
|
|
233
|
+
- Support for OpenGL (3D graphics): This is built in on OS X and the
|
|
234
|
+
most installations of Fedora and Ubuntu. But you'll need the `MESA
|
|
235
|
+
<http://www.mesa3d.org/>`_ header files "gl.h" and "glu.h" to compile
|
|
236
|
+
SnapPy. On Debian and Ubuntu, install "libglu1-mesa-dev"; On Fedora install
|
|
237
|
+
"mesa-libGLU-devel".
|
|
238
|
+
|
|
239
|
+
- `Cython <http://cython.org>`_, which you can install via::
|
|
240
|
+
|
|
241
|
+
python3 -m pip install --user cython
|
|
242
|
+
|
|
243
|
+
- The gcc C++ compiler, g++.
|
|
244
|
+
|
|
245
|
+
- Fetch the latest development versions of the source straight from
|
|
246
|
+
the repository::
|
|
247
|
+
|
|
248
|
+
git clone https://github.com/3-manifolds/PLink.git
|
|
249
|
+
git clone https://github.com/3-manifolds/Spherogram.git
|
|
250
|
+
git clone https://github.com/3-manifolds/Snappy.git
|
|
251
|
+
|
|
252
|
+
- Build the components, from easiest to hardest, and then test::
|
|
253
|
+
|
|
254
|
+
cd PLink
|
|
255
|
+
python setup.py pip_install
|
|
256
|
+
cd ../Spherogram
|
|
257
|
+
python setup.py pip_install
|
|
258
|
+
cd ../SnapPy
|
|
259
|
+
python setup.py pip_install
|
|
260
|
+
cd ..
|
|
261
|
+
python -m SnapPy.test
|