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
snappy/dev/__init__.py
ADDED
|
File without changes
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Experimenting with different ways of computing (P)SL(2, C)
|
|
3
|
+
representations of fundamental groups of closed 3-manifolds.
|
|
4
|
+
|
|
5
|
+
When using PHCPack, for the integral homology spheres below, using two
|
|
6
|
+
variables per tetrahedron is *much* faster than using one (typically
|
|
7
|
+
10 times faster, sometimes more than 100 times faster), and moreover
|
|
8
|
+
seems to gives more useful results. The Ptolemy approach was
|
|
9
|
+
typically 10 times faster than using the gluing equations with 2
|
|
10
|
+
variables per tet, in one case as much as 60 times faster, though
|
|
11
|
+
there was one relatively small example where using gluing equations
|
|
12
|
+
was twice as fast as using the Ptolemy ones.
|
|
13
|
+
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
import sys, snappy, giac_rur, extended, phc_wrapper, time, gluing
|
|
17
|
+
from sage.all import QQ, PolynomialRing, CC, QQbar, macaulay2
|
|
18
|
+
|
|
19
|
+
zhs_names = ['m004(-1, 2)', 'm137(-5, 1)', 'm201(1, 4)', 'm275(-4, 3)', 'm372(-3, 2)', 's244(-4, 1)', 's547(3, 4)', 's648(3, 2)', 's727(-5, 3)', 's850(-3, 2)', 's879(1, 2)', 'v2946(-5, 1)', 'v3536(5, 2)', 't08666(-1, 2)', 't10118(-1, 2)', 't11240(5, 2)', 't12072(-11, 1)', 't12721(-1, 3)', 'o9_26088(9, 1)', 'o9_30426(-5, 2)', 'o9_33595(-2, 3)', 'o9_35356(-3, 4)', 'o9_36955(1, 4)', 'o9_38292(-1, 3)', 'o9_39468(5, 4)', 'o9_40388(-4, 1)', 'o9_41178(4, 1)', 'o9_41826(4, 1)', 'o9_42617(3, 2)', 'o9_43446(-4, 3)', 'o9_44109(-4, 3)']
|
|
20
|
+
|
|
21
|
+
zhs_exs = [snappy.Manifold(name) for name in zhs_names]
|
|
22
|
+
|
|
23
|
+
def ptolemy_rur(manifold):
|
|
24
|
+
return extended.rur_for_dehn_filling(manifold)
|
|
25
|
+
|
|
26
|
+
def ptolemy_sage(manifold):
|
|
27
|
+
I = extended.ptolemy_ideal_for_filled(manifold)
|
|
28
|
+
return I.variety(QQbar)
|
|
29
|
+
|
|
30
|
+
def ptolemy_phc(manifold):
|
|
31
|
+
I = extended.ptolemy_ideal_for_filled(manifold)
|
|
32
|
+
return phc_wrapper.find_solutions(I)
|
|
33
|
+
|
|
34
|
+
def ptolemy_phc_direct(manifold):
|
|
35
|
+
I = extended.ptolemy_ideal_for_filled(manifold)
|
|
36
|
+
return phc_wrapper.phcpy_direct(I)
|
|
37
|
+
|
|
38
|
+
def ptolemy_phc_as_used(manifold):
|
|
39
|
+
return extended.shapes_of_SL2C_reps_for_filled(manifold, phc_wrapper.phcpy_direct)
|
|
40
|
+
|
|
41
|
+
def ptolemy_phc_direct_alt(manifold):
|
|
42
|
+
I = extended.ptolemy_ideal_for_filled(manifold, nonzero_cond=False)
|
|
43
|
+
return phc_wrapper.phcpy_direct(I)
|
|
44
|
+
|
|
45
|
+
def ptolemy_nag4m2(manifold):
|
|
46
|
+
"""
|
|
47
|
+
50-100 times slower than PHCpack even on the simplest examples.
|
|
48
|
+
"""
|
|
49
|
+
I = extended.ptolemy_ideal_for_filled(manifold)
|
|
50
|
+
macaulay2('loadPackage "NumericalAlgebraicGeometry"')
|
|
51
|
+
macaulay2(I.ring())
|
|
52
|
+
return macaulay2(I.gens()).toList().solveSystem()
|
|
53
|
+
|
|
54
|
+
def gluing_phc(manifold, vars_per_tet=2):
|
|
55
|
+
I = gluing.gluing_variety_ideal(manifold, vars_per_tet)
|
|
56
|
+
sols = phc_wrapper.phcpy_direct(I)
|
|
57
|
+
output_vars = ['z%d' % i for i in range(manifold.num_tetrahedra())]
|
|
58
|
+
return [sol for sol in sols
|
|
59
|
+
if all(abs(sol[z] - 1) > 1e-7 for z in output_vars)]
|
|
60
|
+
|
|
61
|
+
def hash_sol(sol):
|
|
62
|
+
zs = sorted([k for k in sol.keys() if k[0] == 'z'], key=lambda x:int(x[1:]))
|
|
63
|
+
return ';'.join(['%.6f,%.6f' % (sol[z].real, sol[z].imag) for z in zs])
|
|
64
|
+
|
|
65
|
+
def hash_sols(sols):
|
|
66
|
+
return {hash_sol(sol) for sol in sols}
|
|
67
|
+
|
|
68
|
+
def compare_phc(manifold):
|
|
69
|
+
#start = time.time()
|
|
70
|
+
#sols = ptolemy_phc_direct(manifold)
|
|
71
|
+
#print('Ptolemy (direct): %d solutions in %.2f' % (len(sols), time.time() - start))
|
|
72
|
+
#
|
|
73
|
+
#start = time.time()
|
|
74
|
+
#sols = ptolemy_phc_direct_alt(manifold)
|
|
75
|
+
#print('Ptolemy (direct alt): %d solutions in %.2f' % (len(sols), time.time() - start))
|
|
76
|
+
|
|
77
|
+
start = time.time()
|
|
78
|
+
sols1 = hash_sols(ptolemy_phc_as_used(manifold))
|
|
79
|
+
print('Ptolemy (as used): %d solutions in %.2f' % (len(sols1), time.time() - start))
|
|
80
|
+
|
|
81
|
+
#start = time.time()
|
|
82
|
+
#sols2 = hash_sols(gluing_phc(manifold, 2))
|
|
83
|
+
#print('Gluing (direct 2 per tet): %d solutions in %.2f' % (len(sols2), time.time() - start))
|
|
84
|
+
|
|
85
|
+
#start = time.time()
|
|
86
|
+
#sols3 = hash_sols(gluing_phc(manifold, 1))
|
|
87
|
+
#print('Gluing (direct 1 per tet): %d solutions in %.2f' % (len(sols3), time.time() - start))
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
start = time.time()
|
|
91
|
+
alt_manifold = manifold.copy()
|
|
92
|
+
alt_manifold.set_peripheral_curves('fillings')
|
|
93
|
+
sols4 = hash_sols(ptolemy_phc_as_used(alt_manifold))
|
|
94
|
+
print('Ptolemy (as used, with merid changed): %d solutions in %.2f' % (len(sols4), time.time() - start))
|
|
95
|
+
|
|
96
|
+
#print('Overlap 1 and 2: %d' % len(sols1.intersection(sols2)))
|
|
97
|
+
#print('Overlap 1 and 3: %d' % len(sols1.intersection(sols3)))
|
|
98
|
+
#print('Overlap 2 and 3: %d' % len(sols2.intersection(sols3)))
|
|
99
|
+
print('Overlap 1 and 4: %d' % len(sols1.intersection(sols4)))
|
|
100
|
+
#print('Common to all : %d' % len(sols2.intersection(sols3).intersection(sols1)))
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
M = zhs_exs[0]
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
from snappy.verify.complex_volume.adjust_torsion import (
|
|
2
|
+
verified_complex_volume_from_lifted_ptolemys)
|
|
3
|
+
from snappy.verify.complex_volume.closed import zero_lifted_holonomy
|
|
4
|
+
|
|
5
|
+
from snappy.dev.extended_ptolemy import extended
|
|
6
|
+
from snappy.dev.extended_ptolemy import giac_rur
|
|
7
|
+
|
|
8
|
+
import snappy.snap.t3mlite as t3m
|
|
9
|
+
|
|
10
|
+
from sage.all import (RealIntervalField, ComplexIntervalField,
|
|
11
|
+
RealBallField, ComplexBallField,
|
|
12
|
+
RealField,
|
|
13
|
+
Integer,
|
|
14
|
+
prod, log, exp, pi, xgcd)
|
|
15
|
+
import sage.all
|
|
16
|
+
|
|
17
|
+
import re
|
|
18
|
+
|
|
19
|
+
def evaluate_at_roots(numberField, exact_values, precision = 53):
|
|
20
|
+
"""
|
|
21
|
+
numberField is a sage number field.
|
|
22
|
+
exact_values a dictionary where values are elements in that number field.
|
|
23
|
+
precision is desired precision in bits.
|
|
24
|
+
|
|
25
|
+
For each embedding of the number field, evaluates the values in the
|
|
26
|
+
dictionary and produces a new dictionary with the same keys.
|
|
27
|
+
The new dictionaries are returned in a list.
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
CIF = ComplexIntervalField(precision)
|
|
31
|
+
return [{ k : v.lift().substitute(root) for k, v in exact_values.items()}
|
|
32
|
+
for root, multiplicity in numberField.polynomial().roots(CIF)]
|
|
33
|
+
|
|
34
|
+
def compute_representative_ptolemys_and_full_var_dict(M, precision = 53):
|
|
35
|
+
"""
|
|
36
|
+
Given a closed manifold (as Dehn-filling on 1-cusped manifold), compute
|
|
37
|
+
a list of list of dictionaries assigning complex intervals to
|
|
38
|
+
a subset of ptolemy variables and the full var dictionary to expand these
|
|
39
|
+
to all variables.
|
|
40
|
+
(Outer list for components, inner list for Galois conjugates).
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
I, full_var_dict = extended.ptolemy_ideal_for_filled(
|
|
44
|
+
M, return_full_var_dict = 'data', notation = 'full')
|
|
45
|
+
|
|
46
|
+
rur = giac_rur.rational_univariate_representation(I)
|
|
47
|
+
|
|
48
|
+
return [
|
|
49
|
+
evaluate_at_roots(numberField, exact_values, precision)
|
|
50
|
+
for numberField, exact_values, mult in rur ], full_var_dict
|
|
51
|
+
|
|
52
|
+
def lift_ptolemy_coordinates(M, solution, full_var_dict):
|
|
53
|
+
"""
|
|
54
|
+
Given a closed manifold (as Dehn-filling on 1-cusped manifold) and an
|
|
55
|
+
assignment of subset of ptolemy variables and the full var dict, compute
|
|
56
|
+
logs for all Ptolemy's.
|
|
57
|
+
"""
|
|
58
|
+
|
|
59
|
+
lifted = { str(k) : log(v)
|
|
60
|
+
for k, v in solution.items()
|
|
61
|
+
if str(k)[0].islower() }
|
|
62
|
+
|
|
63
|
+
m, l = zero_lifted_holonomy(
|
|
64
|
+
M, lifted['m'], lifted['l'], 2)
|
|
65
|
+
|
|
66
|
+
return { k : lifted[name] - (m_count * m + l_count * l)
|
|
67
|
+
for k, (sign, m_count, l_count, name) in full_var_dict.items()
|
|
68
|
+
if k[0] == 'c'}
|
|
69
|
+
|
|
70
|
+
def complex_volumes(M, precision = 53):
|
|
71
|
+
"""
|
|
72
|
+
Compute all complex volumes from the extended Ptolemy variety for the
|
|
73
|
+
closed manifold M (given as Dehn-filling on 1-cusped manifold).
|
|
74
|
+
Note: not every volume might correspond to a representation factoring
|
|
75
|
+
through the closed manifold. In particular, we get the complex volume
|
|
76
|
+
of the geometric representation of the cusped manifold.
|
|
77
|
+
"""
|
|
78
|
+
|
|
79
|
+
representative_ptolemys, full_var_dict = (
|
|
80
|
+
compute_representative_ptolemys_and_full_var_dict(M, precision))
|
|
81
|
+
|
|
82
|
+
return [
|
|
83
|
+
[ verified_complex_volume_from_lifted_ptolemys(
|
|
84
|
+
t3m.Mcomplex(M),
|
|
85
|
+
lift_ptolemy_coordinates(M, sol, full_var_dict))
|
|
86
|
+
for sol in galois_conjugates ]
|
|
87
|
+
for galois_conjugates in representative_ptolemys ]
|
|
88
|
+
|
|
89
|
+
def has_value(v, values):
|
|
90
|
+
|
|
91
|
+
RIF = RealIntervalField(212)
|
|
92
|
+
|
|
93
|
+
for value in values:
|
|
94
|
+
if abs(RIF(v.imag()) - RIF(value.imag())) < RIF(1e-20):
|
|
95
|
+
r = (RIF(v.real()) - RIF(value.real())) / RIF(pi**2/2)
|
|
96
|
+
|
|
97
|
+
is_int, k = r.is_int()
|
|
98
|
+
if is_int:
|
|
99
|
+
if abs(r - k) < RIF(1e-20):
|
|
100
|
+
return True
|
|
101
|
+
return False
|
|
102
|
+
|
|
103
|
+
if __name__ == '__main__':
|
|
104
|
+
# Use 5_2(1,2) as an example.
|
|
105
|
+
from snappy import ManifoldHP
|
|
106
|
+
|
|
107
|
+
M = ManifoldHP("5_2")
|
|
108
|
+
M.chern_simons()
|
|
109
|
+
M.dehn_fill((1,2))
|
|
110
|
+
|
|
111
|
+
# Complex volume of geometric representation of 5_2(1,2).
|
|
112
|
+
# Unverified.
|
|
113
|
+
geom_cvol = M.complex_volume()
|
|
114
|
+
|
|
115
|
+
# This file uses a different convention (simply adding Neumann's
|
|
116
|
+
# extensions of Roger's dilogarithm to the Abelian cover of C \ {0,1})
|
|
117
|
+
# from the rest of SnapPy, so convert.
|
|
118
|
+
geom_cvol = sage.all.I * geom_cvol
|
|
119
|
+
|
|
120
|
+
# The complex volumes as verified intervals of the SL(2,C)-representations
|
|
121
|
+
# detected by the (spun-)triangulation.
|
|
122
|
+
# Grouped by algebraic component of the extended Ptolemy variety.
|
|
123
|
+
#
|
|
124
|
+
# We can only compute it in this file up to multiples of pi^2/2.
|
|
125
|
+
#
|
|
126
|
+
# (Note that Neumann's method can compute it up to multiple of pi^2 but
|
|
127
|
+
# assumes an ordered triangulation. Most census triangulations are not
|
|
128
|
+
# orderable and would require subdivision).
|
|
129
|
+
#
|
|
130
|
+
# The method uses SageMath's giac to compute the rational univariate
|
|
131
|
+
# representation and evaluates it at the roots of the defining polynomial
|
|
132
|
+
# using complex intervals.
|
|
133
|
+
#
|
|
134
|
+
# It can be accessed from sage (with SnapPy installed) by:
|
|
135
|
+
# from snappy.dev.extended_ptolemy.complexVolumesClosed import complex_volumes
|
|
136
|
+
#
|
|
137
|
+
# Tested with SageMath 9.7 and 10.0.
|
|
138
|
+
#
|
|
139
|
+
cvols_by_component = complex_volumes(M, precision = 300)
|
|
140
|
+
|
|
141
|
+
print(cvols_by_component)
|
|
142
|
+
|
|
143
|
+
# Concatenate the grouped complex volumes to just have a single list.
|
|
144
|
+
cvols = sum(cvols_by_component, [])
|
|
145
|
+
|
|
146
|
+
if not has_value(geom_cvol, cvols):
|
|
147
|
+
raise RuntimeError(
|
|
148
|
+
"There is a problem. The complex volume of the geometric "
|
|
149
|
+
"representation is not included.")
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import snappy
|
|
2
|
+
from sage.all import QQ, PolynomialRing, matrix, prod
|
|
3
|
+
import giac_rur
|
|
4
|
+
from closed import zhs_exs
|
|
5
|
+
import phc_wrapper
|
|
6
|
+
|
|
7
|
+
def inverse_word(word):
|
|
8
|
+
return word.swapcase()[::-1]
|
|
9
|
+
|
|
10
|
+
def halfes(word):
|
|
11
|
+
a = len(word)//2
|
|
12
|
+
return word[:a], inverse_word(word[a:])
|
|
13
|
+
|
|
14
|
+
def character_variety(group):
|
|
15
|
+
gens = group.generators()
|
|
16
|
+
vars = [g + repr(i) for g in gens for i in range(4)]
|
|
17
|
+
R = PolynomialRing(QQ, vars)
|
|
18
|
+
mats = {g:matrix(R, [[R(g + '0'), R(g + '1')], [R(g + '2'), R(g + '3')]]) for g in gens}
|
|
19
|
+
rels = [A.det() - 1 for A in mats.values()]
|
|
20
|
+
for g in gens:
|
|
21
|
+
mats[g.upper()] = matrix(R, [[R(g + '3'), -R(g + '1')], [-R(g + '2'), R(g + '0')]])
|
|
22
|
+
|
|
23
|
+
def to_mat(word):
|
|
24
|
+
return prod(mats[w] for w in word)
|
|
25
|
+
|
|
26
|
+
for word in group.relators():
|
|
27
|
+
w0, w1 = halfes(word)
|
|
28
|
+
diff = to_mat(w0) - to_mat(w1)
|
|
29
|
+
rels += diff.list()
|
|
30
|
+
|
|
31
|
+
rels += [R('a2'), R('a1 - 1'), R('b1')]
|
|
32
|
+
return R.ideal(rels)
|
|
33
|
+
|
|
34
|
+
def test_rur(manifold):
|
|
35
|
+
G = manifold.fundamental_group(True, True, False)
|
|
36
|
+
I = character_variety(G)
|
|
37
|
+
return giac_rur.rational_univariate_representation(I)
|
|
38
|
+
|
|
39
|
+
def test_phc(manifold):
|
|
40
|
+
G = manifold.fundamental_group(True, True, False)
|
|
41
|
+
I = character_variety(G)
|
|
42
|
+
return phc_wrapper.find_solutions(I)
|