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,395 @@
|
|
|
1
|
+
from . import matrix
|
|
2
|
+
from . import homology
|
|
3
|
+
from .ptolemyObstructionClass import PtolemyObstructionClass
|
|
4
|
+
from .ptolemyGeneralizedObstructionClass import PtolemyGeneralizedObstructionClass
|
|
5
|
+
from .ptolemyVariety import PtolemyVariety
|
|
6
|
+
from .utilities import MethodMappingList
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def _gcd(s, t):
|
|
10
|
+
if t == 0:
|
|
11
|
+
return s
|
|
12
|
+
return _gcd(t, s % t)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def get_ptolemy_obstruction_classes(manifold):
|
|
16
|
+
"""
|
|
17
|
+
Generates a list of obstruction cocycles representing each class in
|
|
18
|
+
H^2(M,bd M; Z/2) suitable as argument for get_ptolemy_variety.
|
|
19
|
+
The first element in the list is always the trivial obstruction class.
|
|
20
|
+
|
|
21
|
+
See Definition 1.7 of
|
|
22
|
+
Garoufalidis, Thurston, Zickert
|
|
23
|
+
The Complex Volume of SL(n,C)-Representations of 3-Manifolds
|
|
24
|
+
https://arxiv.org/abs/1111.2828
|
|
25
|
+
|
|
26
|
+
s_f_t takes values +/-1 and is the value of evaluating the cocycle on
|
|
27
|
+
face f of tetrahedron t.
|
|
28
|
+
|
|
29
|
+
**Examples**
|
|
30
|
+
|
|
31
|
+
Get the obstruction classes for 4_1:
|
|
32
|
+
|
|
33
|
+
>>> from snappy import Manifold
|
|
34
|
+
>>> M = Manifold("4_1")
|
|
35
|
+
>>> c = get_ptolemy_obstruction_classes(M)
|
|
36
|
+
|
|
37
|
+
There are two such classes for 4_1:
|
|
38
|
+
|
|
39
|
+
>>> len(c)
|
|
40
|
+
2
|
|
41
|
+
|
|
42
|
+
Print the non-trivial obstruction class:
|
|
43
|
+
|
|
44
|
+
>>> c[1]
|
|
45
|
+
PtolemyObstructionClass(s_0_0 + 1, s_1_0 - 1, s_2_0 - 1, s_3_0 + 1, s_0_0 - s_0_1, s_1_0 - s_3_1, s_2_0 - s_2_1, s_3_0 - s_1_1)
|
|
46
|
+
|
|
47
|
+
Construct Ptolemy variety for non-trivial obstruction class:
|
|
48
|
+
|
|
49
|
+
>>> p = get_ptolemy_variety(M, N = 2, obstruction_class = c[1])
|
|
50
|
+
|
|
51
|
+
Short cut for the above code:
|
|
52
|
+
|
|
53
|
+
>>> p = get_ptolemy_variety(M, N = 2, obstruction_class = 1)
|
|
54
|
+
|
|
55
|
+
Obstruction class only makes sense for even N:
|
|
56
|
+
|
|
57
|
+
>>> p = get_ptolemy_variety(M, N = 3, obstruction_class = c[1])
|
|
58
|
+
Traceback (most recent call last):
|
|
59
|
+
...
|
|
60
|
+
AssertionError: PtolemyObstructionClass only makes sense for even N, try PtolemyGeneralizedObstructionClass
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
When specifying N = 3, it automatically uses generalized obstruction class.
|
|
64
|
+
|
|
65
|
+
>>> len(get_ptolemy_variety(M, N = 3, obstruction_class = 'all'))
|
|
66
|
+
2
|
|
67
|
+
"""
|
|
68
|
+
|
|
69
|
+
# Compute the obstruction classes
|
|
70
|
+
H2_elements, explain_columns = get_obstruction_classes(manifold, 2)
|
|
71
|
+
|
|
72
|
+
# get which faces are identified to face classes
|
|
73
|
+
identified_face_classes = (
|
|
74
|
+
manifold._ptolemy_equations_identified_face_classes())
|
|
75
|
+
|
|
76
|
+
# package into PtolemyObstructionClass objects
|
|
77
|
+
return [PtolemyObstructionClass(manifold, index,
|
|
78
|
+
H2_element, explain_columns,
|
|
79
|
+
identified_face_classes)
|
|
80
|
+
for index, H2_element
|
|
81
|
+
in enumerate(H2_elements)]
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def get_generalized_ptolemy_obstruction_classes(manifold, N):
|
|
85
|
+
"""
|
|
86
|
+
See SnapPy.pyx for documentation
|
|
87
|
+
|
|
88
|
+
>>> from snappy import Manifold
|
|
89
|
+
>>> M = Manifold("4_1")
|
|
90
|
+
>>> get_generalized_ptolemy_obstruction_classes(M, 2)
|
|
91
|
+
[PtolemyGeneralizedObstructionClass([0, 0, 0, 0]), PtolemyGeneralizedObstructionClass([1, 0, 0, 1])]
|
|
92
|
+
>>> get_generalized_ptolemy_obstruction_classes(M, 3)
|
|
93
|
+
[PtolemyGeneralizedObstructionClass([0, 0, 0, 0]), PtolemyGeneralizedObstructionClass([2, 0, 0, 1])]
|
|
94
|
+
>>> get_generalized_ptolemy_obstruction_classes(M, 4)
|
|
95
|
+
[PtolemyGeneralizedObstructionClass([0, 0, 0, 0]), PtolemyGeneralizedObstructionClass([3, 0, 0, 1]), PtolemyGeneralizedObstructionClass([2, 0, 0, 2])]
|
|
96
|
+
>>> get_generalized_ptolemy_obstruction_classes(M, 5)
|
|
97
|
+
[PtolemyGeneralizedObstructionClass([0, 0, 0, 0]), PtolemyGeneralizedObstructionClass([4, 0, 0, 1])]
|
|
98
|
+
|
|
99
|
+
>>> M = Manifold("m202")
|
|
100
|
+
>>> len(get_generalized_ptolemy_obstruction_classes(M, 2))
|
|
101
|
+
4
|
|
102
|
+
>>> len(get_generalized_ptolemy_obstruction_classes(M, 3))
|
|
103
|
+
5
|
|
104
|
+
>>> len(get_generalized_ptolemy_obstruction_classes(M, 4))
|
|
105
|
+
10
|
|
106
|
+
|
|
107
|
+
>>> M = Manifold("m207")
|
|
108
|
+
>>> len(get_generalized_ptolemy_obstruction_classes(M, 2))
|
|
109
|
+
2
|
|
110
|
+
>>> len(get_generalized_ptolemy_obstruction_classes(M, 3))
|
|
111
|
+
14
|
|
112
|
+
>>> len(get_generalized_ptolemy_obstruction_classes(M, 4))
|
|
113
|
+
3
|
|
114
|
+
"""
|
|
115
|
+
|
|
116
|
+
# Compute the obstruction classes
|
|
117
|
+
H2_elements, explain_columns = get_obstruction_classes(manifold, N)
|
|
118
|
+
|
|
119
|
+
filtered_H2_elements = []
|
|
120
|
+
units = [x for x in range(N) if _gcd(x, N) == 1]
|
|
121
|
+
|
|
122
|
+
already_seen = set()
|
|
123
|
+
|
|
124
|
+
for H2_element in H2_elements:
|
|
125
|
+
if not tuple(H2_element) in already_seen:
|
|
126
|
+
filtered_H2_elements.append(H2_element)
|
|
127
|
+
for u in units:
|
|
128
|
+
already_seen.add(
|
|
129
|
+
tuple([(x * u) % N for x in H2_element]))
|
|
130
|
+
|
|
131
|
+
return [PtolemyGeneralizedObstructionClass(H2_element, index=index,
|
|
132
|
+
N=N, manifold=manifold)
|
|
133
|
+
for index, H2_element
|
|
134
|
+
in enumerate(filtered_H2_elements)]
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
def get_obstruction_classes(manifold, N):
|
|
138
|
+
|
|
139
|
+
# compute boundary maps for cellular chain complex
|
|
140
|
+
chain_d3, dummy_rows, dummy_columns = (
|
|
141
|
+
manifold._ptolemy_equations_boundary_map_3())
|
|
142
|
+
chain_d2, dummy_rows, explain_columns = (
|
|
143
|
+
manifold._ptolemy_equations_boundary_map_2())
|
|
144
|
+
|
|
145
|
+
# transpose to compute cohomology
|
|
146
|
+
cochain_d2 = matrix.matrix_transpose(chain_d3)
|
|
147
|
+
cochain_d1 = matrix.matrix_transpose(chain_d2)
|
|
148
|
+
|
|
149
|
+
return (homology.homology_representatives(cochain_d2, cochain_d1, N),
|
|
150
|
+
explain_columns)
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
class PtolemyVarietyList(list):
|
|
154
|
+
def retrieve_decomposition(self, *args, **kwargs):
|
|
155
|
+
return MethodMappingList(
|
|
156
|
+
[ p.retrieve_decomposition(*args, **kwargs)
|
|
157
|
+
for p in self ])
|
|
158
|
+
|
|
159
|
+
def compute_decomposition(self, *args, **kwargs):
|
|
160
|
+
return MethodMappingList(
|
|
161
|
+
[ p.compute_decomposition(*args, **kwargs)
|
|
162
|
+
for p in self ])
|
|
163
|
+
|
|
164
|
+
def retrieve_solutions(self, *args, **kwargs):
|
|
165
|
+
return MethodMappingList(
|
|
166
|
+
[ p.retrieve_solutions(*args, **kwargs)
|
|
167
|
+
for p in self ])
|
|
168
|
+
|
|
169
|
+
def compute_solutions(self, *args, **kwargs):
|
|
170
|
+
return MethodMappingList(
|
|
171
|
+
[ p.compute_solutions(*args, **kwargs)
|
|
172
|
+
for p in self ])
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
def get_ptolemy_variety(manifold, N, obstruction_class = None,
|
|
176
|
+
simplify : bool =True,
|
|
177
|
+
eliminate_fixed_ptolemys : bool =False):
|
|
178
|
+
"""
|
|
179
|
+
Generates Ptolemy variety as described in
|
|
180
|
+
(1) Garoufalidis, Thurston, Zickert
|
|
181
|
+
The Complex Volume of SL(n,C)-Representations of 3-Manifolds
|
|
182
|
+
https://arxiv.org/abs/1111.2828
|
|
183
|
+
|
|
184
|
+
(2) Garoufalidis, Goerner, Zickert:
|
|
185
|
+
Gluing Equations for PGL(n,C)-Representations of 3-Manifolds
|
|
186
|
+
https://arxiv.org/abs/1207.6711
|
|
187
|
+
|
|
188
|
+
The variety can be exported to magma or sage and solved there. The
|
|
189
|
+
solutions can be processed to compute invariants. See below.
|
|
190
|
+
|
|
191
|
+
:param N: which SL(N,C) we want the variety.
|
|
192
|
+
|
|
193
|
+
:param obstruction_class: class from Definition 1.7 of (1).
|
|
194
|
+
``None`` for trivial class,
|
|
195
|
+
a value returned from :meth:`get_ptolemy_obstruction_classes`,
|
|
196
|
+
an integer indexing the obstruction classes returned from
|
|
197
|
+
:meth:`get_ptolemy_obstruction_classes`,
|
|
198
|
+
or 'all' to return a list of Ptolemy varieties, one for each
|
|
199
|
+
obstruction class.
|
|
200
|
+
|
|
201
|
+
:param simplify: indicate whether to simplify the equations which
|
|
202
|
+
significantly reduces the number of variables. Simplifying means that several identified Ptolemy coordinates :math:`x = y = z = ...`
|
|
203
|
+
are eliminated instead of adding relations :math:`x - y = 0, y - z = 0, ...`
|
|
204
|
+
|
|
205
|
+
:param eliminate_fixed_ptolemys: boolean to indicate whether to eliminate
|
|
206
|
+
the Ptolemy coordinates that are set to 1 for fixing the decoration.
|
|
207
|
+
Even though this simplifies the resulting representation, setting it to
|
|
208
|
+
``True`` can cause magma to run longer when finding a Groebner basis.
|
|
209
|
+
|
|
210
|
+
**Examples for 4_1**
|
|
211
|
+
|
|
212
|
+
>>> from snappy import Manifold
|
|
213
|
+
>>> M = Manifold("4_1")
|
|
214
|
+
|
|
215
|
+
Get the varieties for all obstruction classes at once (use
|
|
216
|
+
help(varieties[0]) for more information):
|
|
217
|
+
|
|
218
|
+
>>> varieties = get_ptolemy_variety(M, N = 2, obstruction_class = "all")
|
|
219
|
+
|
|
220
|
+
Print the variety as an ideal (sage object) for the non-trivial class:
|
|
221
|
+
|
|
222
|
+
>>> varieties[1].ideal #doctest: +SKIP
|
|
223
|
+
Ideal (-c_0011_0^2 + c_0011_0*c_0101_0 + c_0101_0^2, -c_0011_0^2 - c_0011_0*c_0101_0 + c_0101_0^2, c_0011_0 - 1) of Multivariate Polynomial Ring in c_0011_0, c_0101_0 over Rational Field
|
|
224
|
+
(skip doctest because example only works in sage and not plain python)
|
|
225
|
+
|
|
226
|
+
>>> for eqn in varieties[1].equations:
|
|
227
|
+
... print(" ", eqn)
|
|
228
|
+
- c_0011_0 * c_0101_0 + c_0011_0^2 + c_0101_0^2
|
|
229
|
+
c_0011_0 * c_0101_0 - c_0011_0^2 - c_0101_0^2
|
|
230
|
+
- 1 + c_0011_0
|
|
231
|
+
|
|
232
|
+
Generate a magma input to compute Groebner basis for N = 3:
|
|
233
|
+
|
|
234
|
+
>>> p = get_ptolemy_variety(M, N = 3)
|
|
235
|
+
>>> s = p.to_magma()
|
|
236
|
+
|
|
237
|
+
The beginning of the magma input
|
|
238
|
+
|
|
239
|
+
>>> print(s.strip()) #doctest: +ELLIPSIS
|
|
240
|
+
// Setting up the Polynomial ring and ideal
|
|
241
|
+
<BLANKLINE>
|
|
242
|
+
R<c_0012_0, c_0012_1, c_0102_0, c_0111_0, c_0201_0, c_1011_0, c_1011_1, c_1101_0> := PolynomialRing(RationalField(), 8, "grevlex");
|
|
243
|
+
MyIdeal := ideal<R |
|
|
244
|
+
c_0012_0 * c_1101_0 + c_0102_0 * c_0111_0 - c_0102_0 * c_1011_0,
|
|
245
|
+
...
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
**If you have a magma installation**
|
|
250
|
+
|
|
251
|
+
Call p.compute_solutions() to automatically call magma on the above output
|
|
252
|
+
and produce exact solutions!!!
|
|
253
|
+
|
|
254
|
+
>>> try:
|
|
255
|
+
... sols = p.compute_solutions(verbose)
|
|
256
|
+
... except:
|
|
257
|
+
... sols = None # magma failed, use precomputed output instead
|
|
258
|
+
|
|
259
|
+
**If you do not have a magma installation**
|
|
260
|
+
|
|
261
|
+
Load a precomputed example from magma which is provided with the package:
|
|
262
|
+
|
|
263
|
+
>>> from snappy.ptolemy.processMagmaFile import _magma_output_for_4_1__sl3, solutions_from_magma, triangulation_from_magma
|
|
264
|
+
>>> print(_magma_output_for_4_1__sl3) #doctest: +ELLIPSIS
|
|
265
|
+
<BLANKLINE>
|
|
266
|
+
==TRIANGULATION=BEGINS==
|
|
267
|
+
% Triangulation
|
|
268
|
+
4_1
|
|
269
|
+
geometric_solution 2.02988321
|
|
270
|
+
oriented_manifold
|
|
271
|
+
...
|
|
272
|
+
|
|
273
|
+
Recover the original trigangulation:
|
|
274
|
+
>>> M = triangulation_from_magma(_magma_output_for_4_1__sl3)
|
|
275
|
+
>>> M.is_isometric_to(Manifold("4_1"))
|
|
276
|
+
True
|
|
277
|
+
|
|
278
|
+
Parse the file and produce solutions:
|
|
279
|
+
|
|
280
|
+
>>> if sols is None: # calling magma failed, so use precomputed example
|
|
281
|
+
... sols = solutions_from_magma(_magma_output_for_4_1__sl3)
|
|
282
|
+
|
|
283
|
+
**Continue here whether you have or do not have magma**
|
|
284
|
+
|
|
285
|
+
Pick the first solution of the three different solutions (up to Galois
|
|
286
|
+
conjugates):
|
|
287
|
+
|
|
288
|
+
>>> len(sols)
|
|
289
|
+
3
|
|
290
|
+
>>> solution = sols[0]
|
|
291
|
+
|
|
292
|
+
Read the exact value for c_1020_0 (help(solution) for more information
|
|
293
|
+
on how to compute cross ratios, volumes and other invariants):
|
|
294
|
+
|
|
295
|
+
>>> solution['c_1020_0']
|
|
296
|
+
Mod(-1/2*x - 3/2, x^2 + 3*x + 4)
|
|
297
|
+
|
|
298
|
+
Example of simplified vs non-simplified variety:
|
|
299
|
+
|
|
300
|
+
>>> simplified = get_ptolemy_variety(M, N = 4, obstruction_class = 1)
|
|
301
|
+
>>> full = get_ptolemy_variety(M, N = 4, obstruction_class = 1, simplify = False)
|
|
302
|
+
>>> len(simplified.variables), len(full.variables)
|
|
303
|
+
(21, 63)
|
|
304
|
+
>>> len(simplified.equations), len(full.equations)
|
|
305
|
+
(24, 72)
|
|
306
|
+
|
|
307
|
+
**ONLY DOCTESTS, NOT PART OF DOCUMENTATION**
|
|
308
|
+
|
|
309
|
+
>>> varieties = get_ptolemy_variety(M, N = 2, obstruction_class = "all", eliminate_fixed_ptolemys = True)
|
|
310
|
+
|
|
311
|
+
>>> for eqn in varieties[1].equations:
|
|
312
|
+
... print(" ", eqn)
|
|
313
|
+
1 - c_0101_0 + c_0101_0^2
|
|
314
|
+
- 1 + c_0101_0 - c_0101_0^2
|
|
315
|
+
|
|
316
|
+
>>> p = get_ptolemy_variety(M, N = 3, eliminate_fixed_ptolemys = True)
|
|
317
|
+
>>> s = p.to_magma()
|
|
318
|
+
>>> print(s.split('ring and ideal')[1].strip()) #doctest: +ELLIPSIS
|
|
319
|
+
R<c_0012_1, c_0102_0, c_0201_0, c_1011_0, c_1011_1, c_1101_0> := PolynomialRing(RationalField(), 6, "grevlex");
|
|
320
|
+
MyIdeal := ideal<R |
|
|
321
|
+
c_0102_0 - c_0102_0 * c_1011_0 + c_1101_0,
|
|
322
|
+
...
|
|
323
|
+
|
|
324
|
+
"""
|
|
325
|
+
|
|
326
|
+
if hasattr(manifold, 'cusp_info'):
|
|
327
|
+
if False in manifold.cusp_info('is_complete'):
|
|
328
|
+
raise Exception("Dehn fillings not supported by Ptolemy variety")
|
|
329
|
+
|
|
330
|
+
# Typing M.ptolemy_variety(N = 3, 1) into sage makes
|
|
331
|
+
# N have type sage.rings.integer.Integer
|
|
332
|
+
N = int(N)
|
|
333
|
+
|
|
334
|
+
# If we are explicitly given an obstruction class or it is None
|
|
335
|
+
# just directly call PtolemyVariety
|
|
336
|
+
if ( obstruction_class is None or
|
|
337
|
+
isinstance(obstruction_class, PtolemyObstructionClass) or
|
|
338
|
+
isinstance(obstruction_class, PtolemyGeneralizedObstructionClass)):
|
|
339
|
+
return PtolemyVariety(
|
|
340
|
+
manifold, N, obstruction_class,
|
|
341
|
+
simplify=simplify,
|
|
342
|
+
eliminate_fixed_ptolemys=eliminate_fixed_ptolemys)
|
|
343
|
+
|
|
344
|
+
# Will we return a list of obstruction classes versus a list
|
|
345
|
+
list_obstruction_classes = False
|
|
346
|
+
|
|
347
|
+
if obstruction_class == 'all_original':
|
|
348
|
+
# Revert to old behavior of listing obstruction classes:
|
|
349
|
+
# Use Z/2-obstruction class for even N
|
|
350
|
+
if N % 2 == 0:
|
|
351
|
+
obstruction_classes = get_ptolemy_obstruction_classes(
|
|
352
|
+
manifold)
|
|
353
|
+
# And no obstruction class for odd N
|
|
354
|
+
else:
|
|
355
|
+
obstruction_classes = [ None ]
|
|
356
|
+
list_obstruction_classes = True
|
|
357
|
+
elif obstruction_class == 'all_generalized':
|
|
358
|
+
# Use the generalized Z/n obstruction class
|
|
359
|
+
obstruction_classes = get_generalized_ptolemy_obstruction_classes(
|
|
360
|
+
manifold, N)
|
|
361
|
+
list_obstruction_classes = True
|
|
362
|
+
else:
|
|
363
|
+
# New mode:
|
|
364
|
+
if N == 2:
|
|
365
|
+
# N = 2 uses Z/2-obstruction class (so that we can compute
|
|
366
|
+
# complex volume)
|
|
367
|
+
obstruction_classes = get_ptolemy_obstruction_classes(
|
|
368
|
+
manifold)
|
|
369
|
+
else:
|
|
370
|
+
# N > 2 uses generalized obstruction class
|
|
371
|
+
obstruction_classes = get_generalized_ptolemy_obstruction_classes(
|
|
372
|
+
manifold, N)
|
|
373
|
+
|
|
374
|
+
# List all obstruction classes
|
|
375
|
+
if obstruction_class == 'all':
|
|
376
|
+
list_obstruction_classes = True
|
|
377
|
+
|
|
378
|
+
# Give a list of all obstruction classes
|
|
379
|
+
if list_obstruction_classes:
|
|
380
|
+
return PtolemyVarietyList([
|
|
381
|
+
PtolemyVariety(
|
|
382
|
+
manifold, N, obstruction_class,
|
|
383
|
+
simplify=simplify,
|
|
384
|
+
eliminate_fixed_ptolemys=eliminate_fixed_ptolemys)
|
|
385
|
+
for obstruction_class in obstruction_classes])
|
|
386
|
+
|
|
387
|
+
# Otherwise try to interpret obstruction_class as an index
|
|
388
|
+
try:
|
|
389
|
+
obstruction_class = obstruction_classes[int(obstruction_class)]
|
|
390
|
+
except (KeyError, IndexError):
|
|
391
|
+
raise Exception("Bad index for obstruction class")
|
|
392
|
+
|
|
393
|
+
return PtolemyVariety(manifold, N, obstruction_class,
|
|
394
|
+
simplify=simplify,
|
|
395
|
+
eliminate_fixed_ptolemys=eliminate_fixed_ptolemys)
|