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,259 @@
|
|
|
1
|
+
from .triangle import R13IdealTriangle
|
|
2
|
+
from .line import R13Line
|
|
3
|
+
from .point import R13Point
|
|
4
|
+
from .horoball import R13Horoball
|
|
5
|
+
from . import r13_dot
|
|
6
|
+
|
|
7
|
+
from ..math_basics import is_RealIntervalFieldElement # type: ignore
|
|
8
|
+
from ..sage_helper import _within_sage # type: ignore
|
|
9
|
+
|
|
10
|
+
if _within_sage:
|
|
11
|
+
from ..sage_helper import Infinity
|
|
12
|
+
|
|
13
|
+
__all__ = ['distance_r13_lines',
|
|
14
|
+
'lower_bound_distance_r13_line_triangle']
|
|
15
|
+
|
|
16
|
+
# Pick a value so that pari does not throw an exception when
|
|
17
|
+
# computing exp(r) and arcsinh(exp(r)/2).
|
|
18
|
+
#
|
|
19
|
+
# Pari throws an overflow error for exp(1e-20) instead of just returning 0.
|
|
20
|
+
# Pari throws an out of memory error for
|
|
21
|
+
# snappy.number.Number('1e-1000000').arcsinh().
|
|
22
|
+
#
|
|
23
|
+
_numeric_log_of_zero = -1e4
|
|
24
|
+
|
|
25
|
+
def distance_r13_lines(line0 : R13Line, line1 : R13Line):
|
|
26
|
+
"""
|
|
27
|
+
Computes distance between two hyperbolic lines.
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
p00 = r13_dot(line0.points[0], line1.points[0])
|
|
31
|
+
p01 = r13_dot(line0.points[0], line1.points[1])
|
|
32
|
+
p10 = r13_dot(line0.points[1], line1.points[0])
|
|
33
|
+
p11 = r13_dot(line0.points[1], line1.points[1])
|
|
34
|
+
|
|
35
|
+
pp = line0.inner_product * line1.inner_product
|
|
36
|
+
|
|
37
|
+
t0 = _safe_sqrt((p00 * p11) / pp)
|
|
38
|
+
t1 = _safe_sqrt((p01 * p10) / pp)
|
|
39
|
+
|
|
40
|
+
p = (t0 + t1 - 1) / 2
|
|
41
|
+
|
|
42
|
+
return 2 * _safe_sqrt(p).arcsinh()
|
|
43
|
+
|
|
44
|
+
def distance_r13_horoballs(horoball_defining_vec0,
|
|
45
|
+
horoball_defining_vec1):
|
|
46
|
+
p = -r13_dot(horoball_defining_vec0, horoball_defining_vec1) / 2
|
|
47
|
+
return _safe_log(p)
|
|
48
|
+
|
|
49
|
+
def distance_r13_horoball_line(horoball_defining_vec, # Light-like
|
|
50
|
+
line : R13Line):
|
|
51
|
+
|
|
52
|
+
p = (r13_dot(line.points[0], horoball_defining_vec) *
|
|
53
|
+
r13_dot(line.points[1], horoball_defining_vec))
|
|
54
|
+
s = -2 * p / line.inner_product
|
|
55
|
+
|
|
56
|
+
return _safe_log(s)/2
|
|
57
|
+
|
|
58
|
+
def distance_r13_horoball_plane(horoball_defining_vec, # Light-like
|
|
59
|
+
plane_defining_vec): # Unit space-like
|
|
60
|
+
p = r13_dot(horoball_defining_vec, plane_defining_vec)
|
|
61
|
+
return _safe_log_of_abs(p)
|
|
62
|
+
|
|
63
|
+
def distance_r13_horoball_point(horoball_defining_vec, # Light-like
|
|
64
|
+
pt): # Unit-time-like
|
|
65
|
+
p = r13_dot(horoball_defining_vec, pt)
|
|
66
|
+
return (-p).log()
|
|
67
|
+
|
|
68
|
+
def distance_r13_point_line(pt, # Unit time-like
|
|
69
|
+
line : R13Line):
|
|
70
|
+
"""
|
|
71
|
+
This also works if line is degenerate and starts and ends at some point.
|
|
72
|
+
"""
|
|
73
|
+
|
|
74
|
+
return _safe_arccosh(cosh_distance_r13_point_line(pt, line))
|
|
75
|
+
|
|
76
|
+
def cosh_distance_r13_point_line(pt, # Unit time-like
|
|
77
|
+
line : R13Line):
|
|
78
|
+
p = (r13_dot(line.points[0], pt) *
|
|
79
|
+
r13_dot(line.points[1], pt))
|
|
80
|
+
s = _safe_div(2 * p, -line.inner_product)
|
|
81
|
+
return _safe_sqrt(s)
|
|
82
|
+
|
|
83
|
+
def distance_r13_point_plane(pt, # Unit time-like
|
|
84
|
+
plane_defining_vec): # Unit space-like
|
|
85
|
+
p = r13_dot(pt, plane_defining_vec)
|
|
86
|
+
return p.arcsinh().abs()
|
|
87
|
+
|
|
88
|
+
def distance_r13_points(pt0, # Unit time-like
|
|
89
|
+
pt1): # Unit time-like
|
|
90
|
+
"""
|
|
91
|
+
Computes the hyperbolic distance between two points (represented
|
|
92
|
+
by unit time vectors) in the hyperboloid model.
|
|
93
|
+
"""
|
|
94
|
+
p = r13_dot(pt0, pt1)
|
|
95
|
+
|
|
96
|
+
# Due to rounding errors, the resulting number or interval can be
|
|
97
|
+
# slightly less than 1 or contain numbers slightly less than 1,
|
|
98
|
+
# respectively - resulting in NaN's. Avoid this here.
|
|
99
|
+
return _safe_arccosh(-p)
|
|
100
|
+
|
|
101
|
+
def lower_bound_distance_to_r13_triangle(
|
|
102
|
+
geometric_object, triangle : R13IdealTriangle, verified : bool):
|
|
103
|
+
if isinstance(geometric_object, R13Horoball):
|
|
104
|
+
return lower_bound_distance_r13_horoball_triangle(
|
|
105
|
+
geometric_object.defining_vec, triangle, verified)
|
|
106
|
+
if isinstance(geometric_object, R13Line):
|
|
107
|
+
return lower_bound_distance_r13_line_triangle(
|
|
108
|
+
geometric_object, triangle, verified)
|
|
109
|
+
if isinstance(geometric_object, R13Point):
|
|
110
|
+
return lower_bound_distance_r13_point_triangle(
|
|
111
|
+
geometric_object.point, triangle, verified)
|
|
112
|
+
raise ValueError(
|
|
113
|
+
"Distance between %r and triangle not supported" % geometric_object)
|
|
114
|
+
|
|
115
|
+
def lower_bound_distance_r13_horoball_triangle(
|
|
116
|
+
horoball_defining_vec,
|
|
117
|
+
triangle : R13IdealTriangle, verified : bool):
|
|
118
|
+
|
|
119
|
+
if verified:
|
|
120
|
+
epsilon = 0
|
|
121
|
+
else:
|
|
122
|
+
RF = horoball_defining_vec[0].parent()
|
|
123
|
+
epsilon = _compute_epsilon(RF)
|
|
124
|
+
|
|
125
|
+
for bounding_plane, edge in zip(triangle.bounding_planes,
|
|
126
|
+
triangle.edges):
|
|
127
|
+
if r13_dot(horoball_defining_vec, bounding_plane) > epsilon:
|
|
128
|
+
return distance_r13_horoball_line(horoball_defining_vec, edge)
|
|
129
|
+
|
|
130
|
+
return distance_r13_horoball_plane(
|
|
131
|
+
horoball_defining_vec, triangle.plane)
|
|
132
|
+
|
|
133
|
+
def lower_bound_distance_r13_line_triangle(
|
|
134
|
+
line : R13Line, triangle : R13IdealTriangle, verified : bool):
|
|
135
|
+
|
|
136
|
+
if verified:
|
|
137
|
+
epsilon = 0
|
|
138
|
+
else:
|
|
139
|
+
RF = line.points[0][0].parent()
|
|
140
|
+
epsilon = _compute_epsilon(RF)
|
|
141
|
+
|
|
142
|
+
a0 = r13_dot(triangle.plane, line.points[0])
|
|
143
|
+
a1 = r13_dot(triangle.plane, line.points[1])
|
|
144
|
+
|
|
145
|
+
abs0 = abs(a0)
|
|
146
|
+
abs1 = abs(a1)
|
|
147
|
+
|
|
148
|
+
pt = abs1 * line.points[0] + abs0 * line.points[1]
|
|
149
|
+
|
|
150
|
+
for bounding_plane, edge in zip(triangle.bounding_planes,
|
|
151
|
+
triangle.edges):
|
|
152
|
+
if r13_dot(pt, bounding_plane) > epsilon:
|
|
153
|
+
return distance_r13_lines(line, edge)
|
|
154
|
+
|
|
155
|
+
p = a0 * a1
|
|
156
|
+
|
|
157
|
+
if p > 0:
|
|
158
|
+
return (-2 * p / line.inner_product).sqrt().arcsinh()
|
|
159
|
+
|
|
160
|
+
RF = line.points[0][0].parent()
|
|
161
|
+
return RF(0)
|
|
162
|
+
|
|
163
|
+
def lower_bound_distance_r13_point_triangle(
|
|
164
|
+
point,
|
|
165
|
+
triangle : R13IdealTriangle, verified : bool):
|
|
166
|
+
|
|
167
|
+
if verified:
|
|
168
|
+
epsilon = 0
|
|
169
|
+
else:
|
|
170
|
+
RF = point[0].parent()
|
|
171
|
+
epsilon = _compute_epsilon(RF)
|
|
172
|
+
|
|
173
|
+
for bounding_plane, edge in zip(triangle.bounding_planes,
|
|
174
|
+
triangle.edges):
|
|
175
|
+
if r13_dot(point, bounding_plane) > epsilon:
|
|
176
|
+
return distance_r13_point_line(point, edge)
|
|
177
|
+
|
|
178
|
+
return distance_r13_point_plane(point, triangle.plane)
|
|
179
|
+
|
|
180
|
+
def _compute_epsilon(RF):
|
|
181
|
+
return RF(0.5) ** (RF.prec() // 2)
|
|
182
|
+
|
|
183
|
+
def _safe_sqrt(p):
|
|
184
|
+
"""
|
|
185
|
+
Compute the sqrt of a number that is known to be non-negative
|
|
186
|
+
though might not be non-negative because of floating point
|
|
187
|
+
issues. When using interval arithmetic, this means that
|
|
188
|
+
while the upper bound will be non-negative, the lower bound
|
|
189
|
+
we computed might be negative because it is too conservative.
|
|
190
|
+
|
|
191
|
+
Example of a quantity that can be given to this function:
|
|
192
|
+
negative inner product of two vectors in the positive
|
|
193
|
+
light cone. This is because we know that the inner product
|
|
194
|
+
of two such vectors is always non-positive.
|
|
195
|
+
"""
|
|
196
|
+
|
|
197
|
+
if p >= 0:
|
|
198
|
+
return p.sqrt()
|
|
199
|
+
|
|
200
|
+
if is_RealIntervalFieldElement(p):
|
|
201
|
+
RIF = p.parent()
|
|
202
|
+
return p.intersection(RIF(0, Infinity)).sqrt()
|
|
203
|
+
else:
|
|
204
|
+
RF = p.parent()
|
|
205
|
+
return RF(0)
|
|
206
|
+
|
|
207
|
+
def _safe_log(p):
|
|
208
|
+
if is_RealIntervalFieldElement(p):
|
|
209
|
+
RIF = p.parent()
|
|
210
|
+
p = p.intersection(RIF(0, Infinity))
|
|
211
|
+
else:
|
|
212
|
+
if p <= 0:
|
|
213
|
+
RF = p.parent()
|
|
214
|
+
return RF(_numeric_log_of_zero)
|
|
215
|
+
return p.log()
|
|
216
|
+
|
|
217
|
+
def _safe_log_of_abs(p):
|
|
218
|
+
return _safe_log_non_neg(p.abs())
|
|
219
|
+
|
|
220
|
+
def _safe_log_non_neg(p):
|
|
221
|
+
if p == 0:
|
|
222
|
+
if is_RealIntervalFieldElement(p):
|
|
223
|
+
RIF = p.parent()
|
|
224
|
+
return RIF(-Infinity)
|
|
225
|
+
else:
|
|
226
|
+
RF = p.parent()
|
|
227
|
+
return RF(_numeric_log_of_zero)
|
|
228
|
+
else:
|
|
229
|
+
return p.log()
|
|
230
|
+
|
|
231
|
+
def _safe_arccosh(p):
|
|
232
|
+
if is_RealIntervalFieldElement(p):
|
|
233
|
+
RIF = p.parent()
|
|
234
|
+
p = p.intersection(RIF(1, Infinity))
|
|
235
|
+
else:
|
|
236
|
+
if p < 1:
|
|
237
|
+
RF = p.parent()
|
|
238
|
+
return RF(0)
|
|
239
|
+
return p.arccosh()
|
|
240
|
+
|
|
241
|
+
def _safe_div(a, b):
|
|
242
|
+
"""
|
|
243
|
+
Compute a / b where be is known to be non-negative and we should
|
|
244
|
+
return infinity if b is zero.
|
|
245
|
+
"""
|
|
246
|
+
|
|
247
|
+
if b > 0:
|
|
248
|
+
return a / b
|
|
249
|
+
|
|
250
|
+
if is_RealIntervalFieldElement(b):
|
|
251
|
+
RIF = b.parent()
|
|
252
|
+
if b == 0:
|
|
253
|
+
return RIF(Infinity)
|
|
254
|
+
else:
|
|
255
|
+
return a / b.intersection(RIF(0, Infinity))
|
|
256
|
+
else:
|
|
257
|
+
RIF = b.parent()
|
|
258
|
+
return RIF(1e20)
|
|
259
|
+
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
__all__ = ['R13Horoball']
|
|
2
|
+
|
|
3
|
+
class R13Horoball:
|
|
4
|
+
"""
|
|
5
|
+
Horoball defined by { x : r13_dot(x, l) > -1 } where l is a
|
|
6
|
+
light-like vector.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
def __init__(self,
|
|
10
|
+
defining_vec): # Light-like vector
|
|
11
|
+
self.defining_vec = defining_vec
|
|
12
|
+
|
|
13
|
+
def transformed(self,
|
|
14
|
+
m): # O13-matrix
|
|
15
|
+
"""
|
|
16
|
+
Returns image of the horoball under given O13-matrix m.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
return R13Horoball(m * self.defining_vec)
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
from ..hyperboloid import r13_dot
|
|
2
|
+
|
|
3
|
+
__all__ = [ 'R13Line' ]
|
|
4
|
+
|
|
5
|
+
class R13Line:
|
|
6
|
+
"""
|
|
7
|
+
A line in the hyperboloid model - represented by two
|
|
8
|
+
like-like vectors spanning the line.
|
|
9
|
+
|
|
10
|
+
For distance computations, the inner product between the two
|
|
11
|
+
vectors is stored as well.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
def __init__(self,
|
|
15
|
+
points, # Two light-like vectors
|
|
16
|
+
inner_product=None): # Optional: their inner product
|
|
17
|
+
"""
|
|
18
|
+
inner_product can be given if known, otherwise, will be computed.
|
|
19
|
+
"""
|
|
20
|
+
self.points = points
|
|
21
|
+
if inner_product is None:
|
|
22
|
+
self.inner_product = r13_dot(points[0], points[1])
|
|
23
|
+
else:
|
|
24
|
+
self.inner_product = inner_product
|
|
25
|
+
|
|
26
|
+
def transformed(self,
|
|
27
|
+
m): # O13-matrix
|
|
28
|
+
"""
|
|
29
|
+
Returns image of the line under given O13-matrix m.
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
return R13Line(
|
|
33
|
+
[ m * point for point in self.points],
|
|
34
|
+
self.inner_product)
|
|
35
|
+
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
from .line import R13Line
|
|
2
|
+
from . import (time_r13_normalise,
|
|
3
|
+
space_r13_normalise,
|
|
4
|
+
r13_dot)
|
|
5
|
+
|
|
6
|
+
from typing import Sequence
|
|
7
|
+
|
|
8
|
+
__all__ = ['R13IdealTriangle']
|
|
9
|
+
|
|
10
|
+
class R13IdealTriangle:
|
|
11
|
+
def __init__(self,
|
|
12
|
+
plane, # one space-like normal vector
|
|
13
|
+
bounding_planes, # three space-like normal vectors
|
|
14
|
+
edges : Sequence[R13Line] # Same order as bounding_planes
|
|
15
|
+
):
|
|
16
|
+
self.plane = plane
|
|
17
|
+
self.bounding_planes = bounding_planes
|
|
18
|
+
self.edges = edges
|
|
19
|
+
|
|
20
|
+
def triangle_bounding_plane(v_opp, v0, v1):
|
|
21
|
+
m = time_r13_normalise(
|
|
22
|
+
-(r13_dot(v1, v_opp) * v0 + r13_dot(v0, v_opp) * v1))
|
|
23
|
+
|
|
24
|
+
return _make_r13_unit_tangent_vector(m - v_opp, m)
|
|
25
|
+
|
|
26
|
+
def _make_r13_unit_tangent_vector(direction, point):
|
|
27
|
+
s = r13_dot(direction, point)
|
|
28
|
+
return space_r13_normalise(direction + s * point)
|
|
29
|
+
|
snappy/info_icon.gif
ADDED
|
Binary file
|
snappy/infowindow.py
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
import sys
|
|
3
|
+
import os
|
|
4
|
+
import datetime
|
|
5
|
+
from .gui import *
|
|
6
|
+
from .version import version as SnapPy_version
|
|
7
|
+
from IPython import __version__ as IPython_version
|
|
8
|
+
|
|
9
|
+
snappy_path = os.path.dirname(__file__)
|
|
10
|
+
icon_file = os.path.join(snappy_path, 'info_icon.gif')
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class InfoWindow(Tk_.Toplevel):
|
|
14
|
+
def __init__(self, root, title, content, root_attr_name):
|
|
15
|
+
self.root = root
|
|
16
|
+
self.root_attr_name = root_attr_name
|
|
17
|
+
setattr(root, root_attr_name, self)
|
|
18
|
+
Tk_.Toplevel.__init__(self, self.root, class_='snappy')
|
|
19
|
+
self.title(title)
|
|
20
|
+
self.content = content
|
|
21
|
+
self.image = Tk_.PhotoImage(file=icon_file)
|
|
22
|
+
self.style = SnapPyStyle()
|
|
23
|
+
self.body()
|
|
24
|
+
|
|
25
|
+
def body(self):
|
|
26
|
+
self.resizable(False, False)
|
|
27
|
+
box = ttk.Frame(self)
|
|
28
|
+
icon = ttk.Label(box, image=self.image)
|
|
29
|
+
icon.grid(row=0, column=0, pady=30, sticky=Tk_.N)
|
|
30
|
+
message = Tk_.Message(box, text=self.content)
|
|
31
|
+
message.grid(row=0, column=1, padx=20, pady=10)
|
|
32
|
+
box.pack()
|
|
33
|
+
|
|
34
|
+
def destroy(self):
|
|
35
|
+
if hasattr(self.root, self.root_attr_name):
|
|
36
|
+
delattr(self.root, self.root_attr_name)
|
|
37
|
+
Tk_.Toplevel.destroy(self)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
about_snappy_text = """
|
|
41
|
+
For information on how to use SnapPy, please see the Help menu.
|
|
42
|
+
|
|
43
|
+
SnapPy is a program for studying the topology and geometry of 3-manifolds, with a focus on hyperbolic structures. It was written by Marc Culler, Nathan Dunfield, Matthias Gӧrner, and Jeff Weeks, with additional contributions by many others. Its homepage is
|
|
44
|
+
|
|
45
|
+
http://snappy.computop.org/
|
|
46
|
+
|
|
47
|
+
This is version %s of SnapPy, running on Python %s using Tk %s and IPython %s.
|
|
48
|
+
|
|
49
|
+
Development of SnapPy was made possible in part by generous support from the National Science Foundation of the United States.
|
|
50
|
+
|
|
51
|
+
SnapPy is copyright © 2009-%d by Marc Culler, Nathan Dunfield, Matthias Gӧrner, Jeff Weeks, and others and is distributed under the GNU Public License, version 2 or later.
|
|
52
|
+
""" % (SnapPy_version,
|
|
53
|
+
sys.version.split()[0],
|
|
54
|
+
Tk_.Tcl().eval('info patchlevel'),
|
|
55
|
+
IPython_version,
|
|
56
|
+
datetime.datetime.now().year)
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def about_snappy(window):
|
|
60
|
+
return InfoWindow(window, 'About SnapPy', about_snappy_text, 'about_snappy')
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
if __name__ == '__main__':
|
|
64
|
+
root = Tk_.Tk()
|
|
65
|
+
info = InfoWindow(root, title='About SnapPy', content=about_snappy_text)
|