snappy 3.1.1__cp38-cp38-win_amd64.whl → 3.2__cp38-cp38-win_amd64.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.cp38-win_amd64.pyd +0 -0
- snappy/SnapPy.cp38-win_amd64.pyd +0 -0
- snappy/SnapPyHP.cp38-win_amd64.pyd +0 -0
- snappy/__init__.py +299 -402
- snappy/app.py +70 -20
- snappy/browser.py +18 -17
- snappy/canonical.py +249 -0
- snappy/{verify/cusp_shapes.py → cusps/__init__.py} +8 -18
- snappy/cusps/cusp_area_matrix.py +101 -0
- snappy/{verify/cusp_areas.py → cusps/cusp_areas_from_matrix.py} +23 -39
- snappy/cusps/maximal_cusp_area_matrix.py +136 -0
- snappy/cusps/test.py +21 -0
- snappy/cusps/trig_cusp_area_matrix.py +63 -0
- snappy/database.py +10 -9
- snappy/decorated_isosig.py +337 -114
- snappy/dev/extended_ptolemy/complexVolumesClosed.py +40 -7
- snappy/dev/extended_ptolemy/extended.py +3 -3
- snappy/dev/extended_ptolemy/phc_wrapper.py +10 -10
- snappy/dev/vericlosed/oneVertexTruncatedComplex.py +1 -1
- snappy/doc/_images/m004_paper_plane_on_systole.jpg +0 -0
- snappy/doc/_images/m125_paper_plane.jpg +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/_sources/additional_classes.rst.txt +40 -40
- snappy/doc/_sources/bugs.rst.txt +14 -14
- snappy/doc/_sources/censuses.rst.txt +51 -51
- snappy/doc/_sources/credits.rst.txt +75 -75
- snappy/doc/_sources/development.rst.txt +259 -239
- snappy/doc/_sources/index.rst.txt +182 -115
- snappy/doc/_sources/installing.rst.txt +247 -264
- snappy/doc/_sources/manifold.rst.txt +6 -6
- snappy/doc/_sources/manifoldhp.rst.txt +46 -46
- snappy/doc/_sources/news.rst.txt +355 -283
- snappy/doc/_sources/other.rst.txt +25 -25
- snappy/doc/_sources/platonic_census.rst.txt +20 -20
- snappy/doc/_sources/plink.rst.txt +102 -102
- snappy/doc/_sources/ptolemy.rst.txt +66 -66
- snappy/doc/_sources/ptolemy_classes.rst.txt +42 -42
- snappy/doc/_sources/ptolemy_examples1.rst.txt +298 -297
- snappy/doc/_sources/ptolemy_examples2.rst.txt +363 -363
- snappy/doc/_sources/ptolemy_examples3.rst.txt +301 -301
- snappy/doc/_sources/ptolemy_examples4.rst.txt +61 -61
- snappy/doc/_sources/ptolemy_prelim.rst.txt +105 -105
- snappy/doc/_sources/screenshots.rst.txt +21 -21
- snappy/doc/_sources/snap.rst.txt +87 -87
- snappy/doc/_sources/snappy.rst.txt +28 -28
- snappy/doc/_sources/spherogram.rst.txt +103 -103
- snappy/doc/_sources/todo.rst.txt +47 -47
- snappy/doc/_sources/triangulation.rst.txt +11 -11
- snappy/doc/_sources/tutorial.rst.txt +49 -49
- snappy/doc/_sources/verify.rst.txt +210 -150
- snappy/doc/_sources/verify_internals.rst.txt +79 -90
- snappy/doc/_static/basic.css +924 -902
- snappy/doc/_static/css/badge_only.css +1 -1
- snappy/doc/_static/css/theme.css +1 -1
- snappy/doc/_static/doctools.js +1 -1
- snappy/doc/_static/documentation_options.js +12 -13
- 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/js/versions.js +228 -0
- snappy/doc/_static/language_data.js +199 -199
- snappy/doc/_static/pygments.css +74 -73
- snappy/doc/_static/searchtools.js +125 -71
- snappy/doc/_static/snappy_furo.css +33 -33
- snappy/doc/_static/snappy_sphinx_rtd_theme.css +42 -42
- snappy/doc/_static/sphinx_highlight.js +13 -3
- snappy/doc/additional_classes.html +1499 -1330
- snappy/doc/bugs.html +131 -134
- snappy/doc/censuses.html +426 -445
- snappy/doc/credits.html +180 -183
- snappy/doc/development.html +383 -363
- snappy/doc/genindex.html +1330 -1409
- snappy/doc/index.html +261 -206
- snappy/doc/installing.html +345 -363
- snappy/doc/manifold.html +3451 -2839
- snappy/doc/manifoldhp.html +179 -182
- snappy/doc/news.html +387 -329
- snappy/doc/objects.inv +0 -0
- snappy/doc/other.html +160 -162
- snappy/doc/platonic_census.html +374 -377
- snappy/doc/plink.html +209 -212
- snappy/doc/ptolemy.html +253 -255
- snappy/doc/ptolemy_classes.html +1143 -1146
- snappy/doc/ptolemy_examples1.html +408 -410
- snappy/doc/ptolemy_examples2.html +470 -473
- snappy/doc/ptolemy_examples3.html +413 -416
- snappy/doc/ptolemy_examples4.html +194 -197
- snappy/doc/ptolemy_prelim.html +247 -250
- snappy/doc/py-modindex.html +164 -167
- snappy/doc/screenshots.html +140 -142
- snappy/doc/search.html +134 -137
- snappy/doc/searchindex.js +1 -1
- snappy/doc/snap.html +201 -204
- snappy/doc/snappy.html +180 -182
- snappy/doc/spherogram.html +1210 -1213
- snappy/doc/todo.html +165 -168
- snappy/doc/triangulation.html +1583 -1474
- snappy/doc/tutorial.html +158 -161
- snappy/doc/verify.html +329 -275
- snappy/doc/verify_internals.html +1234 -1691
- snappy/drilling/__init__.py +153 -235
- snappy/drilling/barycentric.py +103 -0
- snappy/drilling/constants.py +0 -2
- snappy/drilling/crush.py +56 -130
- snappy/drilling/cusps.py +12 -6
- snappy/drilling/debug.py +2 -1
- snappy/drilling/exceptions.py +7 -40
- snappy/drilling/moves.py +302 -243
- snappy/drilling/perturb.py +63 -37
- snappy/drilling/shorten.py +36 -0
- snappy/drilling/subdivide.py +0 -5
- snappy/drilling/test.py +23 -0
- snappy/drilling/test_cases.py +126 -0
- snappy/drilling/tracing.py +9 -37
- snappy/exceptions.py +18 -5
- snappy/exterior_to_link/barycentric_geometry.py +2 -4
- snappy/exterior_to_link/main.py +8 -7
- snappy/exterior_to_link/mcomplex_with_link.py +2 -2
- snappy/exterior_to_link/rational_linear_algebra.py +1 -1
- snappy/exterior_to_link/rational_linear_algebra_wrapped.py +1 -1
- snappy/exterior_to_link/test.py +21 -33
- snappy/geometric_structure/__init__.py +212 -0
- snappy/geometric_structure/cusp_neighborhood/__init__.py +3 -0
- snappy/geometric_structure/cusp_neighborhood/complex_cusp_cross_section.py +697 -0
- snappy/geometric_structure/cusp_neighborhood/cusp_cross_section_base.py +484 -0
- snappy/geometric_structure/cusp_neighborhood/exceptions.py +42 -0
- snappy/geometric_structure/cusp_neighborhood/real_cusp_cross_section.py +298 -0
- snappy/geometric_structure/cusp_neighborhood/tiles_for_cusp_neighborhood.py +159 -0
- snappy/geometric_structure/cusp_neighborhood/vertices.py +32 -0
- snappy/geometric_structure/geodesic/__init__.py +0 -0
- snappy/geometric_structure/geodesic/add_core_curves.py +152 -0
- snappy/geometric_structure/geodesic/avoid_core_curves.py +369 -0
- snappy/geometric_structure/geodesic/canonical_keys.py +52 -0
- snappy/geometric_structure/geodesic/check_away_from_core_curve.py +60 -0
- snappy/geometric_structure/geodesic/constants.py +6 -0
- snappy/geometric_structure/geodesic/exceptions.py +22 -0
- snappy/{drilling → geometric_structure/geodesic}/fixed_points.py +34 -9
- snappy/{drilling/geodesic_info.py → geometric_structure/geodesic/geodesic_start_point_info.py} +139 -180
- snappy/geometric_structure/geodesic/graph_trace_helper.py +67 -0
- snappy/geometric_structure/geodesic/line.py +30 -0
- snappy/geometric_structure/geodesic/multiplicity.py +127 -0
- snappy/geometric_structure/geodesic/tiles_for_geodesic.py +101 -0
- snappy/geometric_structure/test.py +22 -0
- snappy/gui.py +23 -13
- snappy/horoviewer.py +7 -7
- snappy/hyperboloid/__init__.py +96 -31
- snappy/hyperboloid/distances.py +245 -0
- snappy/hyperboloid/horoball.py +19 -0
- snappy/hyperboloid/line.py +35 -0
- snappy/hyperboloid/point.py +9 -0
- snappy/hyperboloid/triangle.py +29 -0
- snappy/isometry_signature.py +382 -0
- snappy/len_spec/__init__.py +596 -0
- snappy/len_spec/geodesic_info.py +110 -0
- snappy/len_spec/geodesic_key_info_dict.py +117 -0
- snappy/len_spec/geodesic_piece.py +143 -0
- snappy/len_spec/geometric_structure.py +182 -0
- snappy/len_spec/geometry.py +80 -0
- snappy/len_spec/length_spectrum_geodesic_info.py +170 -0
- snappy/len_spec/spine.py +206 -0
- snappy/len_spec/test.py +24 -0
- snappy/len_spec/test_cases.py +69 -0
- snappy/len_spec/tile.py +275 -0
- snappy/len_spec/word.py +86 -0
- snappy/math_basics.py +39 -13
- snappy/matrix.py +52 -9
- snappy/number.py +12 -6
- snappy/numeric_output_checker.py +2 -3
- snappy/pari.py +8 -4
- snappy/phone_home.py +2 -1
- snappy/polyviewer.py +8 -8
- snappy/ptolemy/__init__.py +1 -1
- snappy/ptolemy/component.py +2 -2
- snappy/ptolemy/coordinates.py +25 -25
- snappy/ptolemy/findLoops.py +9 -9
- snappy/ptolemy/manifoldMethods.py +27 -29
- snappy/ptolemy/polynomial.py +50 -57
- snappy/ptolemy/processFileBase.py +60 -0
- snappy/ptolemy/ptolemyVariety.py +109 -41
- snappy/ptolemy/reginaWrapper.py +4 -4
- snappy/ptolemy/rur.py +1 -1
- snappy/ptolemy/solutionsToPrimeIdealGroebnerBasis.py +9 -9
- snappy/ptolemy/test.py +99 -54
- snappy/ptolemy/utilities.py +1 -1
- 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 +0 -3
- snappy/raytracing/eyeball.py +123 -0
- snappy/raytracing/finite_raytracing_data.py +17 -17
- snappy/raytracing/finite_viewer.py +15 -15
- snappy/raytracing/geodesic_tube_info.py +93 -63
- snappy/raytracing/geodesics.py +94 -64
- snappy/raytracing/geodesics_window.py +56 -34
- snappy/raytracing/gui_utilities.py +21 -6
- snappy/raytracing/hyperboloid_navigation.py +29 -4
- snappy/raytracing/hyperboloid_utilities.py +73 -73
- snappy/raytracing/ideal_raytracing_data.py +121 -91
- snappy/raytracing/inside_viewer.py +199 -66
- snappy/raytracing/pack.py +22 -0
- snappy/raytracing/raytracing_data.py +37 -25
- snappy/raytracing/raytracing_view.py +70 -65
- snappy/raytracing/shaders/Eye.png +0 -0
- snappy/raytracing/shaders/NonGeometric.png +0 -0
- snappy/raytracing/shaders/__init__.py +39 -3
- snappy/raytracing/shaders/fragment.glsl +451 -133
- snappy/raytracing/test.py +29 -0
- snappy/raytracing/tooltip.py +146 -0
- snappy/raytracing/upper_halfspace_utilities.py +42 -9
- snappy/sage_helper.py +67 -134
- snappy/settings.py +90 -77
- snappy/shell.py +2 -0
- snappy/snap/character_varieties.py +2 -2
- snappy/snap/find_field.py +4 -3
- snappy/snap/fundamental_polyhedron.py +2 -2
- snappy/snap/kernel_structures.py +5 -1
- snappy/snap/nsagetools.py +9 -8
- snappy/snap/peripheral/dual_cellulation.py +4 -3
- snappy/snap/peripheral/peripheral.py +2 -2
- snappy/snap/peripheral/surface.py +5 -5
- snappy/snap/peripheral/test.py +1 -1
- snappy/snap/polished_reps.py +8 -8
- snappy/snap/slice_obs_HKL.py +16 -14
- snappy/snap/t3mlite/arrow.py +3 -3
- snappy/snap/t3mlite/edge.py +3 -3
- snappy/snap/t3mlite/homology.py +2 -2
- snappy/snap/t3mlite/mcomplex.py +3 -3
- snappy/snap/t3mlite/simplex.py +12 -0
- snappy/snap/t3mlite/spun.py +18 -17
- snappy/snap/t3mlite/test_vs_regina.py +4 -4
- snappy/snap/test.py +37 -53
- snappy/snap/utilities.py +4 -5
- snappy/test.py +121 -138
- snappy/test_cases.py +263 -0
- snappy/testing.py +131 -0
- snappy/tiling/__init__.py +2 -0
- snappy/tiling/canonical_key_dict.py +59 -0
- snappy/tiling/dict_based_set.py +79 -0
- snappy/tiling/floor.py +49 -0
- snappy/tiling/hyperboloid_dict.py +54 -0
- snappy/tiling/iter_utils.py +78 -0
- snappy/tiling/lifted_tetrahedron.py +22 -0
- snappy/tiling/lifted_tetrahedron_set.py +54 -0
- snappy/tiling/real_hash_dict.py +164 -0
- snappy/tiling/test.py +23 -0
- snappy/tiling/tile.py +215 -0
- snappy/tiling/triangle.py +33 -0
- snappy/tkterminal.py +113 -84
- snappy/twister/main.py +1 -7
- snappy/twister/twister_core.cp38-win_amd64.pyd +0 -0
- snappy/upper_halfspace/__init__.py +78 -17
- snappy/verify/__init__.py +3 -7
- snappy/verify/{verifyCanonical.py → canonical.py} +78 -70
- snappy/verify/complex_volume/adjust_torsion.py +1 -2
- snappy/verify/complex_volume/closed.py +13 -13
- snappy/verify/complex_volume/cusped.py +6 -6
- snappy/verify/complex_volume/extended_bloch.py +5 -8
- snappy/verify/{cuspTranslations.py → cusp_translations.py} +1 -1
- snappy/verify/edge_equations.py +80 -0
- snappy/verify/exceptions.py +0 -55
- snappy/verify/{verifyHyperbolicity.py → hyperbolicity.py} +3 -3
- snappy/verify/interval_newton_shapes_engine.py +7 -5
- snappy/verify/interval_tree.py +5 -5
- snappy/verify/krawczyk_shapes_engine.py +17 -18
- snappy/verify/maximal_cusp_area_matrix/__init__.py +7 -74
- snappy/verify/maximal_cusp_area_matrix/cusp_tiling_engine.py +3 -4
- snappy/verify/maximal_cusp_area_matrix/cusp_translate_engine.py +1 -1
- snappy/verify/{realAlgebra.py → real_algebra.py} +1 -1
- snappy/verify/shapes.py +5 -3
- snappy/verify/short_slopes.py +39 -41
- snappy/verify/{squareExtensions.py → square_extensions.py} +14 -11
- snappy/verify/test.py +57 -60
- snappy/verify/upper_halfspace/extended_matrix.py +1 -1
- snappy/verify/upper_halfspace/finite_point.py +3 -4
- snappy/verify/upper_halfspace/ideal_point.py +9 -9
- snappy/verify/volume.py +2 -2
- snappy/version.py +2 -2
- {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/METADATA +14 -10
- snappy-3.2.dist-info/RECORD +503 -0
- {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/WHEEL +1 -1
- {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/top_level.txt +6 -1
- snappy/__pycache__/__init__.cpython-38.pyc +0 -0
- snappy/__pycache__/browser.cpython-38.pyc +0 -0
- snappy/__pycache__/cache.cpython-38.pyc +0 -0
- snappy/__pycache__/database.cpython-38.pyc +0 -0
- snappy/__pycache__/db_utilities.cpython-38.pyc +0 -0
- snappy/__pycache__/decorated_isosig.cpython-38.pyc +0 -0
- snappy/__pycache__/exceptions.cpython-38.pyc +0 -0
- snappy/__pycache__/export_stl.cpython-38.pyc +0 -0
- snappy/__pycache__/filedialog.cpython-38.pyc +0 -0
- snappy/__pycache__/gui.cpython-38.pyc +0 -0
- snappy/__pycache__/horoviewer.cpython-38.pyc +0 -0
- snappy/__pycache__/math_basics.cpython-38.pyc +0 -0
- snappy/__pycache__/matrix.cpython-38.pyc +0 -0
- snappy/__pycache__/number.cpython-38.pyc +0 -0
- snappy/__pycache__/numeric_output_checker.cpython-38.pyc +0 -0
- snappy/__pycache__/pari.cpython-38.pyc +0 -0
- snappy/__pycache__/polyviewer.cpython-38.pyc +0 -0
- snappy/__pycache__/sage_helper.cpython-38.pyc +0 -0
- snappy/__pycache__/version.cpython-38.pyc +0 -0
- snappy/doc/_sources/verify_canon.rst.txt +0 -90
- snappy/doc/_static/jquery-3.6.0.js +0 -10881
- snappy/doc/_static/js/html5shiv-printshiv.min.js +0 -4
- snappy/doc/_static/js/html5shiv.min.js +0 -4
- snappy/doc/_static/underscore-1.13.1.js +0 -2042
- snappy/doc/_static/underscore.js +0 -6
- snappy/doc/verify_canon.html +0 -304
- snappy/drilling/__pycache__/__init__.cpython-38.pyc +0 -0
- snappy/drilling/__pycache__/constants.cpython-38.pyc +0 -0
- snappy/drilling/__pycache__/crush.cpython-38.pyc +0 -0
- snappy/drilling/__pycache__/cusps.cpython-38.pyc +0 -0
- snappy/drilling/__pycache__/debug.cpython-38.pyc +0 -0
- snappy/drilling/__pycache__/epsilons.cpython-38.pyc +0 -0
- snappy/drilling/__pycache__/exceptions.cpython-38.pyc +0 -0
- snappy/drilling/__pycache__/fixed_points.cpython-38.pyc +0 -0
- snappy/drilling/__pycache__/geodesic_info.cpython-38.pyc +0 -0
- snappy/drilling/__pycache__/geodesic_tube.cpython-38.pyc +0 -0
- snappy/drilling/__pycache__/geometric_structure.cpython-38.pyc +0 -0
- snappy/drilling/__pycache__/line.cpython-38.pyc +0 -0
- snappy/drilling/__pycache__/moves.cpython-38.pyc +0 -0
- snappy/drilling/__pycache__/peripheral_curves.cpython-38.pyc +0 -0
- snappy/drilling/__pycache__/perturb.cpython-38.pyc +0 -0
- snappy/drilling/__pycache__/quotient_space.cpython-38.pyc +0 -0
- snappy/drilling/__pycache__/spatial_dict.cpython-38.pyc +0 -0
- snappy/drilling/__pycache__/subdivide.cpython-38.pyc +0 -0
- snappy/drilling/__pycache__/tracing.cpython-38.pyc +0 -0
- snappy/drilling/geodesic_tube.py +0 -441
- snappy/drilling/geometric_structure.py +0 -366
- snappy/drilling/line.py +0 -122
- snappy/drilling/quotient_space.py +0 -94
- snappy/drilling/spatial_dict.py +0 -128
- snappy/exterior_to_link/__pycache__/__init__.cpython-38.pyc +0 -0
- snappy/exterior_to_link/__pycache__/barycentric_geometry.cpython-38.pyc +0 -0
- snappy/exterior_to_link/__pycache__/exceptions.cpython-38.pyc +0 -0
- snappy/exterior_to_link/__pycache__/hyp_utils.cpython-38.pyc +0 -0
- snappy/exterior_to_link/__pycache__/link_projection.cpython-38.pyc +0 -0
- snappy/exterior_to_link/__pycache__/main.cpython-38.pyc +0 -0
- snappy/exterior_to_link/__pycache__/mcomplex_with_expansion.cpython-38.pyc +0 -0
- snappy/exterior_to_link/__pycache__/mcomplex_with_link.cpython-38.pyc +0 -0
- snappy/exterior_to_link/__pycache__/mcomplex_with_memory.cpython-38.pyc +0 -0
- snappy/exterior_to_link/__pycache__/pl_utils.cpython-38.pyc +0 -0
- snappy/exterior_to_link/__pycache__/put_in_S3.cpython-38.pyc +0 -0
- snappy/exterior_to_link/__pycache__/rational_linear_algebra.cpython-38.pyc +0 -0
- snappy/exterior_to_link/__pycache__/simplify_to_base_tri.cpython-38.pyc +0 -0
- snappy/exterior_to_link/__pycache__/stored_moves.cpython-38.pyc +0 -0
- snappy/hyperboloid/__pycache__/__init__.cpython-38.pyc +0 -0
- snappy/manifolds/__pycache__/__init__.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/__init__.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/component.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/coordinates.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/fieldExtensions.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/findLoops.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/homology.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/manifoldMethods.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/matrix.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/numericalSolutionsToGroebnerBasis.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/polynomial.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/processComponents.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/processFileBase.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/processFileDispatch.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/processMagmaFile.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/processRurFile.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/ptolemyGeneralizedObstructionClass.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/ptolemyObstructionClass.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/ptolemyVariety.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/ptolemyVarietyPrimeIdealGroebnerBasis.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/rur.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/solutionsToPrimeIdealGroebnerBasis.cpython-38.pyc +0 -0
- snappy/ptolemy/__pycache__/utilities.cpython-38.pyc +0 -0
- snappy/snap/__pycache__/__init__.cpython-38.pyc +0 -0
- snappy/snap/__pycache__/character_varieties.cpython-38.pyc +0 -0
- snappy/snap/__pycache__/fundamental_polyhedron.cpython-38.pyc +0 -0
- snappy/snap/__pycache__/interval_reps.cpython-38.pyc +0 -0
- snappy/snap/__pycache__/kernel_structures.cpython-38.pyc +0 -0
- snappy/snap/__pycache__/mcomplex_base.cpython-38.pyc +0 -0
- snappy/snap/__pycache__/nsagetools.cpython-38.pyc +0 -0
- snappy/snap/__pycache__/polished_reps.cpython-38.pyc +0 -0
- snappy/snap/__pycache__/shapes.cpython-38.pyc +0 -0
- snappy/snap/__pycache__/slice_obs_HKL.cpython-38.pyc +0 -0
- snappy/snap/__pycache__/utilities.cpython-38.pyc +0 -0
- snappy/snap/peripheral/__pycache__/__init__.cpython-38.pyc +0 -0
- snappy/snap/peripheral/__pycache__/dual_cellulation.cpython-38.pyc +0 -0
- snappy/snap/peripheral/__pycache__/link.cpython-38.pyc +0 -0
- snappy/snap/peripheral/__pycache__/peripheral.cpython-38.pyc +0 -0
- snappy/snap/peripheral/__pycache__/surface.cpython-38.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/__init__.cpython-38.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/arrow.cpython-38.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/corner.cpython-38.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/edge.cpython-38.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/face.cpython-38.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/files.cpython-38.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/homology.cpython-38.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/linalg.cpython-38.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/mcomplex.cpython-38.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/perm4.cpython-38.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/simplex.cpython-38.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/spun.cpython-38.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/surface.cpython-38.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/tetrahedron.cpython-38.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/vertex.cpython-38.pyc +0 -0
- snappy/togl/__init__.py +0 -3
- snappy/togl/darwin-tk8.6/Togl2.1/LICENSE +0 -28
- snappy/togl/darwin-tk8.6/Togl2.1/libTogl2.1.dylib +0 -0
- snappy/togl/darwin-tk8.6/Togl2.1/pkgIndex.tcl +0 -5
- snappy/togl/darwin-tk8.7/Togl2.1/LICENSE +0 -28
- snappy/togl/darwin-tk8.7/Togl2.1/libTogl2.1.dylib +0 -0
- snappy/togl/darwin-tk8.7/Togl2.1/pkgIndex.tcl +0 -5
- snappy/togl/linux2-x86_64-tk8.6/Togl2.1/LICENSE +0 -28
- snappy/togl/linux2-x86_64-tk8.6/Togl2.1/libTogl2.1.so +0 -0
- snappy/togl/linux2-x86_64-tk8.6/Togl2.1/pkgIndex.tcl +0 -5
- snappy/togl/win32VC-tk8.6/Togl2.1/LICENSE +0 -28
- snappy/togl/win32VC-tk8.6/Togl2.1/Togl21.dll +0 -0
- snappy/togl/win32VC-tk8.6/Togl2.1/Togl21.lib +0 -0
- snappy/togl/win32VC-tk8.6/Togl2.1/pkgIndex.tcl +0 -6
- snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/LICENSE +0 -28
- snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/Togl21.dll +0 -0
- snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/Togl21.lib +0 -0
- snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/pkgIndex.tcl +0 -6
- snappy/twister/__pycache__/__init__.cpython-38.pyc +0 -0
- snappy/twister/__pycache__/main.cpython-38.pyc +0 -0
- snappy/upper_halfspace/__pycache__/__init__.cpython-38.pyc +0 -0
- snappy/upper_halfspace/__pycache__/ideal_point.cpython-38.pyc +0 -0
- snappy/verify/__pycache__/__init__.cpython-38.pyc +0 -0
- snappy/verify/__pycache__/cuspCrossSection.cpython-38.pyc +0 -0
- snappy/verify/__pycache__/cuspTranslations.cpython-38.pyc +0 -0
- snappy/verify/__pycache__/cusp_areas.cpython-38.pyc +0 -0
- snappy/verify/__pycache__/cusp_shapes.cpython-38.pyc +0 -0
- snappy/verify/__pycache__/exceptions.cpython-38.pyc +0 -0
- snappy/verify/__pycache__/interval_newton_shapes_engine.cpython-38.pyc +0 -0
- snappy/verify/__pycache__/interval_tree.cpython-38.pyc +0 -0
- snappy/verify/__pycache__/krawczyk_shapes_engine.cpython-38.pyc +0 -0
- snappy/verify/__pycache__/realAlgebra.cpython-38.pyc +0 -0
- snappy/verify/__pycache__/shapes.cpython-38.pyc +0 -0
- snappy/verify/__pycache__/short_slopes.cpython-38.pyc +0 -0
- snappy/verify/__pycache__/squareExtensions.cpython-38.pyc +0 -0
- snappy/verify/__pycache__/verifyCanonical.cpython-38.pyc +0 -0
- snappy/verify/__pycache__/verifyHyperbolicity.cpython-38.pyc +0 -0
- snappy/verify/__pycache__/volume.cpython-38.pyc +0 -0
- snappy/verify/complex_volume/__pycache__/__init__.cpython-38.pyc +0 -0
- snappy/verify/complex_volume/__pycache__/adjust_torsion.cpython-38.pyc +0 -0
- snappy/verify/complex_volume/__pycache__/closed.cpython-38.pyc +0 -0
- snappy/verify/complex_volume/__pycache__/compute_ptolemys.cpython-38.pyc +0 -0
- snappy/verify/complex_volume/__pycache__/cusped.cpython-38.pyc +0 -0
- snappy/verify/complex_volume/__pycache__/extended_bloch.cpython-38.pyc +0 -0
- snappy/verify/cuspCrossSection.py +0 -1422
- snappy/verify/maximal_cusp_area_matrix/__pycache__/__init__.cpython-38.pyc +0 -0
- snappy/verify/maximal_cusp_area_matrix/__pycache__/cusp_tiling_engine.cpython-38.pyc +0 -0
- snappy/verify/maximal_cusp_area_matrix/__pycache__/cusp_translate_engine.cpython-38.pyc +0 -0
- snappy/verify/upper_halfspace/__pycache__/__init__.cpython-38.pyc +0 -0
- snappy/verify/upper_halfspace/__pycache__/extended_matrix.cpython-38.pyc +0 -0
- snappy/verify/upper_halfspace/__pycache__/finite_point.cpython-38.pyc +0 -0
- snappy/verify/upper_halfspace/__pycache__/ideal_point.cpython-38.pyc +0 -0
- snappy-3.1.1.dist-info/RECORD +0 -575
- {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/entry_points.txt +0 -0
snappy/verify/exceptions.py
CHANGED
@@ -34,9 +34,7 @@ The hierarchy is as follows:
|
|
34
34
|
|
35
35
|
- CuspEquationExactVerifyError
|
36
36
|
- CuspEquationLogLiftNumericalVerifyError
|
37
|
-
- CuspDevelopmentType
|
38
37
|
|
39
|
-
- CuspDevelopmentTypeExactVerifyError
|
40
38
|
- TiltType
|
41
39
|
|
42
40
|
- TiltInequalityNumericalVerifyError
|
@@ -46,9 +44,6 @@ The hierarchy is as follows:
|
|
46
44
|
- ShapeType
|
47
45
|
|
48
46
|
- ShapePositiveImaginaryPartNumericalVerifyError
|
49
|
-
- ConsistencyWithSnapPeaType
|
50
|
-
|
51
|
-
- ConsistencyWithSnapPeaNumericalVerifyError
|
52
47
|
"""
|
53
48
|
|
54
49
|
|
@@ -190,32 +185,6 @@ class CuspEquationLogLiftNumericalVerifyError(LogLiftNumericalVerifyError,
|
|
190
185
|
'%r == %r' % (self.value, self.expected_value))
|
191
186
|
|
192
187
|
|
193
|
-
class CuspDevelopmentType(CuspConsistencyType):
|
194
|
-
"""
|
195
|
-
A base class indicating that there was a failure to find a consistent
|
196
|
-
assignment of side lengths to the Euclidean Horotriangles to form a
|
197
|
-
Euclidean Horotorus for a cusp.
|
198
|
-
"""
|
199
|
-
|
200
|
-
|
201
|
-
class CuspDevelopmentExactVerifyError(ExactVerifyError,
|
202
|
-
CuspDevelopmentType):
|
203
|
-
"""
|
204
|
-
Raised when finding a consistent assignment of side lengths to the
|
205
|
-
Euclidean Horotriangles to form a Euclidean Horotorus for a cusp failed
|
206
|
-
using exact arithmetic.
|
207
|
-
"""
|
208
|
-
|
209
|
-
def __init__(self, value1, value2):
|
210
|
-
self.value1 = value1
|
211
|
-
self.value2 = value2
|
212
|
-
|
213
|
-
def __str__(self):
|
214
|
-
return ('Inconsistency in the side lengths of the Euclidean '
|
215
|
-
'Horotriangles for a cusp: '
|
216
|
-
'%r = %r' % (self.value1, self.value2))
|
217
|
-
|
218
|
-
|
219
188
|
class TiltType(EquationType):
|
220
189
|
"""
|
221
190
|
A base class relating to tilts.
|
@@ -283,27 +252,3 @@ class ShapePositiveImaginaryPartNumericalVerifyError(
|
|
283
252
|
return ('Numerical verification that shape has positive imaginary '
|
284
253
|
'part has failed: Im(%r) > 0' % self.value)
|
285
254
|
|
286
|
-
|
287
|
-
class ConsistencyWithSnapPeaType(EquationType):
|
288
|
-
"""
|
289
|
-
A base class for exceptions raised when there is a difference
|
290
|
-
between the values computed by the SnapPea kernel and by this module
|
291
|
-
for a given quantity.
|
292
|
-
"""
|
293
|
-
|
294
|
-
|
295
|
-
class ConsistencyWithSnapPeaNumericalVerifyError(
|
296
|
-
NumericalVerifyError,
|
297
|
-
ConsistencyWithSnapPeaType):
|
298
|
-
"""
|
299
|
-
Exception raised when there is a significant numerical difference
|
300
|
-
between the values computed by the SnapPea kernel and by this module
|
301
|
-
for a given quantity.
|
302
|
-
"""
|
303
|
-
def __init__(self, value, snappea_value):
|
304
|
-
self.value = value
|
305
|
-
self.snappea_value = snappea_value
|
306
|
-
|
307
|
-
def __str__(self):
|
308
|
-
return ('Inconsistency between SnapPea kernel and verify: '
|
309
|
-
'%r == %r' % (self.snappea_value, self.value))
|
@@ -7,8 +7,8 @@ __all__ = [
|
|
7
7
|
'verify_hyperbolicity' ]
|
8
8
|
|
9
9
|
if _within_sage:
|
10
|
-
from sage.
|
11
|
-
import
|
10
|
+
from sage.symbolic.constants import pi
|
11
|
+
from ..sage_helper import I
|
12
12
|
|
13
13
|
|
14
14
|
class FalseTuple(tuple):
|
@@ -103,7 +103,7 @@ def check_logarithmic_gluing_equations_and_positively_oriented_tets(
|
|
103
103
|
CIF = shape_intervals[0].parent()
|
104
104
|
RIF = CIF.real_field()
|
105
105
|
# 2 pi i in that field
|
106
|
-
two_pi_i = CIF(2 * pi *
|
106
|
+
two_pi_i = CIF(2 * pi * I)
|
107
107
|
|
108
108
|
# Index of the next gluing equation to check
|
109
109
|
LHS_index = 0
|
@@ -1,4 +1,4 @@
|
|
1
|
-
from ..matrix import
|
1
|
+
from ..matrix import make_matrix, make_vector, mat_solve
|
2
2
|
from .. import snap
|
3
3
|
from ..sage_helper import _within_sage, sage_method
|
4
4
|
|
@@ -142,7 +142,7 @@ class IntervalNewtonShapesEngine:
|
|
142
142
|
# Take log of the entire product
|
143
143
|
gluing_LHSs.append(prod.log())
|
144
144
|
|
145
|
-
return
|
145
|
+
return make_vector(gluing_LHSs, ring=BaseField)
|
146
146
|
|
147
147
|
@staticmethod
|
148
148
|
def log_gluing_LHS_derivatives(equations, shapes):
|
@@ -195,7 +195,7 @@ class IntervalNewtonShapesEngine:
|
|
195
195
|
|
196
196
|
gluing_LHS_derivatives.append(row)
|
197
197
|
|
198
|
-
return
|
198
|
+
return make_matrix(gluing_LHS_derivatives, ring=BaseField)
|
199
199
|
|
200
200
|
@staticmethod
|
201
201
|
def interval_vector_mid_points(vec):
|
@@ -322,7 +322,7 @@ class IntervalNewtonShapesEngine:
|
|
322
322
|
Given two vectors of intervals, return the vector of their unions,
|
323
323
|
i.e., the smallest interval containing both intervals.
|
324
324
|
"""
|
325
|
-
return
|
325
|
+
return make_vector([a.union(b) for a, b in zip(vecA, vecB)])
|
326
326
|
|
327
327
|
@staticmethod
|
328
328
|
def certified_newton_iteration(equations, shape_intervals,
|
@@ -350,6 +350,7 @@ class IntervalNewtonShapesEngine:
|
|
350
350
|
|
351
351
|
Intervals containing the true solution::
|
352
352
|
|
353
|
+
sage: from sage.all import vector
|
353
354
|
sage: good_shapes = vector([
|
354
355
|
... C.CIF(C.RIF(0.78055, 0.78056), C.RIF(0.91447, 0.91448)),
|
355
356
|
... C.CIF(C.RIF(0.78055, 0.78056), C.RIF(0.91447, 0.91448)),
|
@@ -367,6 +368,7 @@ class IntervalNewtonShapesEngine:
|
|
367
368
|
|
368
369
|
Intervals not containing a true solution::
|
369
370
|
|
371
|
+
sage: from sage.all import vector
|
370
372
|
sage: bad_shapes = vector([
|
371
373
|
... C.CIF(C.RIF(0.78054, 0.78055), C.RIF(0.91447, 0.91448)),
|
372
374
|
... C.CIF(C.RIF(0.78055, 0.78056), C.RIF(0.91447, 0.91448)),
|
@@ -447,7 +449,7 @@ class IntervalNewtonShapesEngine:
|
|
447
449
|
raise ValueError("Manifold needs to be orientable")
|
448
450
|
|
449
451
|
# Initialize the shape intervals, they have zero length
|
450
|
-
self.initial_shapes =
|
452
|
+
self.initial_shapes = make_vector(
|
451
453
|
[self.CIF(shape) for shape in initial_shapes])
|
452
454
|
|
453
455
|
# Get an independent set of gluing equations from snap
|
snappy/verify/interval_tree.py
CHANGED
@@ -277,13 +277,13 @@ class _IntervalTreeTester(IntervalTree):
|
|
277
277
|
|
278
278
|
def __init__(self):
|
279
279
|
self._entries = []
|
280
|
-
super(
|
280
|
+
super().__init__()
|
281
281
|
|
282
282
|
def insert(self, interval, value):
|
283
283
|
# Insert in plain list for reference
|
284
284
|
self._entries.append((interval, value))
|
285
285
|
# Insert into red black tree
|
286
|
-
super(
|
286
|
+
super().insert(interval, value)
|
287
287
|
|
288
288
|
def brute_force_find(self, interval):
|
289
289
|
"""
|
@@ -300,7 +300,7 @@ class _IntervalTreeTester(IntervalTree):
|
|
300
300
|
self.brute_force_find(interval)))
|
301
301
|
|
302
302
|
def check_consistency(self):
|
303
|
-
from
|
303
|
+
from ..sage_helper import Infinity
|
304
304
|
if self._root.isRed:
|
305
305
|
raise Exception("Red root")
|
306
306
|
_IntervalTreeTester._recursively_check_consistency(
|
@@ -308,7 +308,7 @@ class _IntervalTreeTester(IntervalTree):
|
|
308
308
|
|
309
309
|
@staticmethod
|
310
310
|
def _recursively_check_consistency(node, l, r):
|
311
|
-
from
|
311
|
+
from ..sage_helper import Infinity
|
312
312
|
|
313
313
|
if not node:
|
314
314
|
return -Infinity, 0
|
@@ -370,7 +370,7 @@ class _IntervalTreeTester(IntervalTree):
|
|
370
370
|
|
371
371
|
@staticmethod
|
372
372
|
def run_test():
|
373
|
-
from
|
373
|
+
from ..sage_helper import RIF, Infinity, sin
|
374
374
|
|
375
375
|
intervals = [
|
376
376
|
RIF(sin(1.2 * i), sin(1.2 * i) + sin(1.43 * i) ** 2)
|
@@ -1,12 +1,10 @@
|
|
1
|
-
from
|
2
|
-
from
|
1
|
+
from .. import snap
|
2
|
+
from ..matrix import make_identity_matrix, make_matrix, make_vector
|
3
|
+
|
4
|
+
from ..sage_helper import _within_sage, sage_method
|
3
5
|
|
4
6
|
if _within_sage:
|
5
|
-
from
|
6
|
-
from sage.rings.real_mpfi import RealIntervalField
|
7
|
-
from sage.all import ComplexDoubleField
|
8
|
-
from sage.all import matrix
|
9
|
-
from sage.modules.free_module_element import vector
|
7
|
+
from ..sage_helper import ComplexDoubleField, ComplexIntervalField, RealIntervalField
|
10
8
|
from snappy.pari import prec_dec_to_bits
|
11
9
|
|
12
10
|
__all__ = ['KrawczykShapesEngine']
|
@@ -75,12 +73,12 @@ class KrawczykShapesEngine:
|
|
75
73
|
And here an example where the initial solution is somewhat off::
|
76
74
|
|
77
75
|
sage: M = Manifold("m019")
|
78
|
-
sage: shapes = [
|
79
|
-
sage: C = KrawczykShapesEngine(M, shapes, bits_prec =
|
76
|
+
sage: shapes = [0.780559+0.91449j, 0.780559+0.9144j, 0.46009+0.639j]
|
77
|
+
sage: C = KrawczykShapesEngine(M, shapes, bits_prec = 100)
|
80
78
|
sage: C.expand_until_certified()
|
81
79
|
True
|
82
|
-
sage: C.certified_shapes
|
83
|
-
(0.
|
80
|
+
sage: C.certified_shapes # doctest: +ELLIPSIS
|
81
|
+
(0.7806? + 0.9145?*I, 0.7806? + 0.9145?*I, 0.460...? + 0.6326?*I)
|
84
82
|
|
85
83
|
"""
|
86
84
|
|
@@ -151,7 +149,7 @@ class KrawczykShapesEngine:
|
|
151
149
|
# Take log of the entire product
|
152
150
|
gluing_LHSs.append(prod.log())
|
153
151
|
|
154
|
-
return
|
152
|
+
return make_vector(gluing_LHSs, ring=BaseField)
|
155
153
|
|
156
154
|
def log_gluing_LHS_derivatives(self, shapes):
|
157
155
|
"""
|
@@ -202,7 +200,7 @@ class KrawczykShapesEngine:
|
|
202
200
|
|
203
201
|
gluing_LHS_derivatives.append(row)
|
204
202
|
|
205
|
-
return
|
203
|
+
return make_matrix(gluing_LHS_derivatives, ring=BaseField)
|
206
204
|
|
207
205
|
def log_gluing_LHS_derivatives_sparse(self, shapes):
|
208
206
|
"""
|
@@ -254,7 +252,7 @@ class KrawczykShapesEngine:
|
|
254
252
|
v += d * row[r]
|
255
253
|
result_row.append(v)
|
256
254
|
rows.append(result_row)
|
257
|
-
return
|
255
|
+
return make_matrix(rows, ring=CIF)
|
258
256
|
|
259
257
|
@staticmethod
|
260
258
|
def interval_vector_mid_points(vec):
|
@@ -290,6 +288,7 @@ class KrawczykShapesEngine:
|
|
290
288
|
|
291
289
|
Do several Krawczyk operations to get a better solution::
|
292
290
|
|
291
|
+
sage: from sage.all import vector
|
293
292
|
sage: M = Manifold("m019")
|
294
293
|
sage: shapes = vector(ComplexIntervalField(53), [ 0.5+0.8j, 0.5+0.8j, 0.5+0.8j])
|
295
294
|
sage: for i in range(15):
|
@@ -352,7 +351,7 @@ class KrawczykShapesEngine:
|
|
352
351
|
i.e., the smallest interval containing both intervals.
|
353
352
|
"""
|
354
353
|
|
355
|
-
return
|
354
|
+
return make_vector([a.union(b) for a, b in zip(vecA, vecB)])
|
356
355
|
|
357
356
|
@sage_method
|
358
357
|
def __init__(self, M, initial_shapes, bits_prec=None, dec_prec=None):
|
@@ -391,7 +390,7 @@ class KrawczykShapesEngine:
|
|
391
390
|
|
392
391
|
Or some non-hyperbolic manifolds::
|
393
392
|
|
394
|
-
sage: Manifold("t02333(1,0)").tetrahedra_shapes(intervals = True)
|
393
|
+
sage: Manifold("t02333(1,0)").tetrahedra_shapes(intervals = True) # doctest: +SKIP
|
395
394
|
Traceback (most recent call last):
|
396
395
|
...
|
397
396
|
RuntimeError: Could not certify shape intervals, either there are degenerate shapes or the precision must be increased.
|
@@ -415,14 +414,14 @@ class KrawczykShapesEngine:
|
|
415
414
|
raise Exception("Manifold needs to be orientable")
|
416
415
|
|
417
416
|
# Initialize the shape intervals, they have zero length
|
418
|
-
self.initial_shapes =
|
417
|
+
self.initial_shapes = make_vector(
|
419
418
|
[self.CIF(shape) for shape in initial_shapes])
|
420
419
|
|
421
420
|
# Get an independent set of gluing equations from snap
|
422
421
|
self.equations = snap.shapes.enough_gluing_equations(M)
|
423
422
|
self._make_sparse_equations()
|
424
423
|
|
425
|
-
self.identity =
|
424
|
+
self.identity = make_identity_matrix(ring=self.CIF, n=len(self.initial_shapes))
|
426
425
|
|
427
426
|
CDF = ComplexDoubleField()
|
428
427
|
|
@@ -1,24 +1,18 @@
|
|
1
|
-
from ...sage_helper import
|
2
|
-
from
|
3
|
-
from ..shapes import compute_hyperbolic_shapes
|
4
|
-
from ...math_basics import correct_min
|
5
|
-
from .cusp_tiling_engine import *
|
6
|
-
|
7
|
-
if _within_sage:
|
8
|
-
from sage.all import matrix
|
1
|
+
from ...sage_helper import sage_method
|
2
|
+
from ...matrix import matrix
|
9
3
|
|
10
|
-
|
11
|
-
'triangulation_dependent_cusp_area_matrix']
|
4
|
+
from .cusp_tiling_engine import *
|
12
5
|
|
6
|
+
__all__ = ['legacy_verified_maximal_cusp_area_matrix']
|
13
7
|
|
14
8
|
@sage_method
|
15
|
-
def
|
9
|
+
def legacy_verified_maximal_cusp_area_matrix(snappy_manifold, bits_prec=None):
|
16
10
|
"""
|
17
11
|
TESTS::
|
18
12
|
|
19
13
|
sage: from snappy import Manifold
|
20
14
|
sage: M = Manifold("s776")
|
21
|
-
sage:
|
15
|
+
sage: legacy_verified_maximal_cusp_area_matrix(M) # doctest: +NUMERIC6
|
22
16
|
[28.0000000000? 7.00000000000? 7.00000000000?]
|
23
17
|
[7.00000000000? 28.000000000? 7.00000000000?]
|
24
18
|
[7.00000000000? 7.00000000000? 28.000000000?]
|
@@ -41,68 +35,7 @@ def verified_maximal_cusp_area_matrix(snappy_manifold, bits_prec=None):
|
|
41
35
|
rows[i][j] = v
|
42
36
|
rows[j][i] = v
|
43
37
|
|
44
|
-
return
|
45
|
-
|
46
|
-
|
47
|
-
def triangulation_dependent_cusp_area_matrix(
|
48
|
-
snappy_manifold, verified, bits_prec=None):
|
49
|
-
"""
|
50
|
-
Interesting case: t12521
|
51
|
-
|
52
|
-
Maximal cusp area matrix:
|
53
|
-
|
54
|
-
[ 77.5537626509970512653317518641810890989543820290380458409? 11.40953140648583915022197187043644048603871960228564151087?]
|
55
|
-
[11.40953140648583915022197187043644048603871960228564151087? 91.1461442179608339668518063027198489593908228325190920?]
|
56
|
-
|
57
|
-
This result:
|
58
|
-
|
59
|
-
[ 77.553762651? 11.409531407?]
|
60
|
-
[ 11.409531407? 5.508968850234?]
|
61
|
-
|
62
|
-
After M.canonize:
|
63
|
-
|
64
|
-
[ 62.42018359? 11.409531407?]
|
65
|
-
[ 11.409531407? 15.1140644993?]
|
66
|
-
"""
|
67
|
-
# Get shapes, as intervals if requested
|
68
|
-
shapes = compute_hyperbolic_shapes(
|
69
|
-
snappy_manifold, verified=verified, bits_prec=bits_prec)
|
70
|
-
|
71
|
-
# Compute cusp cross section, the code is agnostic about whether
|
72
|
-
# the numbers are floating-point or intervals.
|
73
|
-
# Note that the constructed cusp cross section will always be too "large"
|
74
|
-
# and we need to scale them down (since during construction the
|
75
|
-
# cross-section of each cusp will have one edge of length 1, the
|
76
|
-
# corresponding tetrahedron does not intersect in "standard" form.)
|
77
|
-
c = ComplexCuspCrossSection.fromManifoldAndShapes(snappy_manifold, shapes)
|
78
|
-
|
79
|
-
# If no areas are given, scale (up or down) all the cusps so that
|
80
|
-
# they are in standard form.
|
81
|
-
c.ensure_std_form(allow_scaling_up=True)
|
82
|
-
|
83
|
-
areas = c.cusp_areas()
|
84
|
-
RIF = areas[0].parent()
|
85
|
-
|
86
|
-
def entry(i, j):
|
87
|
-
if i > j:
|
88
|
-
i, j = j, i
|
89
|
-
result = areas[i] * areas[j]
|
90
|
-
if (i, j) in c._edge_dict:
|
91
|
-
result *= correct_min(
|
92
|
-
[ RIF(1), ComplexCuspCrossSection._exp_distance_of_edges(
|
93
|
-
c._edge_dict[(i,j)])]) ** 2
|
94
|
-
return result
|
95
|
-
|
96
|
-
return _to_matrix([[entry(i, j) for i in range(len(areas))]
|
97
|
-
for j in range(len(areas))])
|
98
|
-
|
99
|
-
|
100
|
-
def _to_matrix(m):
|
101
|
-
# delayed import to avoid cycles
|
102
|
-
from snappy.SnapPy import matrix
|
103
|
-
|
104
|
-
return matrix(m)
|
105
|
-
|
38
|
+
return matrix(rows)
|
106
39
|
|
107
40
|
def _doctest():
|
108
41
|
import doctest
|
@@ -1,6 +1,7 @@
|
|
1
1
|
from ...sage_helper import _within_sage
|
2
2
|
from ...math_basics import correct_max
|
3
3
|
|
4
|
+
from ...geometric_structure.cusp_neighborhood.complex_cusp_cross_section import ComplexCuspCrossSection
|
4
5
|
from ...snap.kernel_structures import *
|
5
6
|
from ...snap.fundamental_polyhedron import *
|
6
7
|
from ...snap.mcomplex_base import *
|
@@ -8,15 +9,13 @@ from ...snap.t3mlite import simplex
|
|
8
9
|
from ...snap import t3mlite as t3m
|
9
10
|
from ...exceptions import InsufficientPrecisionError
|
10
11
|
|
11
|
-
from ..cuspCrossSection import ComplexCuspCrossSection
|
12
12
|
from ..upper_halfspace.ideal_point import *
|
13
13
|
from ..interval_tree import *
|
14
14
|
|
15
15
|
from .cusp_translate_engine import *
|
16
16
|
|
17
17
|
if _within_sage:
|
18
|
-
from
|
19
|
-
import sage.all
|
18
|
+
from ...sage_helper import matrix
|
20
19
|
|
21
20
|
import heapq
|
22
21
|
|
@@ -142,7 +141,7 @@ class CuspTilingEngine(McomplexEngine):
|
|
142
141
|
return CuspTilingEngine(m, original_mcomplex, cusp_areas, translations)
|
143
142
|
|
144
143
|
def __init__(self, mcomplex, original_mcomplex, cusp_areas, translations):
|
145
|
-
super(
|
144
|
+
super().__init__(mcomplex)
|
146
145
|
|
147
146
|
self.original_mcomplex = original_mcomplex
|
148
147
|
self.cusp_areas = cusp_areas
|
@@ -26,7 +26,7 @@ def _find_unique_good_factor(polynomial, eval_method):
|
|
26
26
|
one factor have this property, raise an exception.
|
27
27
|
"""
|
28
28
|
|
29
|
-
# Factor polynomial. Call eval_method on each factor which is
|
29
|
+
# Factor polynomial. Call eval_method on each factor which is supposed to
|
30
30
|
# return an interval. Get those factors for which the resulting interval
|
31
31
|
# contains 0.
|
32
32
|
good_factors = [ factor
|
snappy/verify/shapes.py
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
-
from . import
|
1
|
+
from . import hyperbolicity
|
2
2
|
|
3
3
|
__all__ = ['compute_hyperbolic_shapes']
|
4
4
|
|
5
|
+
from typing import Optional
|
5
6
|
|
6
|
-
def compute_hyperbolic_shapes(manifold,
|
7
|
+
def compute_hyperbolic_shapes(manifold,
|
8
|
+
verified : bool, bits_prec : Optional[int] = None):
|
7
9
|
|
8
10
|
# Get shapes, as intervals if requested
|
9
11
|
shapes = manifold.tetrahedra_shapes('rect', intervals=verified,
|
@@ -11,7 +13,7 @@ def compute_hyperbolic_shapes(manifold, verified, bits_prec=None):
|
|
11
13
|
|
12
14
|
# Check it is a valid hyperbolic structure
|
13
15
|
if verified:
|
14
|
-
|
16
|
+
hyperbolicity.check_logarithmic_gluing_equations_and_positively_oriented_tets(
|
15
17
|
manifold, shapes)
|
16
18
|
else:
|
17
19
|
# If not verified, just ask SnapPea kernel for solution type
|
snappy/verify/short_slopes.py
CHANGED
@@ -1,33 +1,19 @@
|
|
1
1
|
from ..sage_helper import _within_sage
|
2
|
+
from ..exceptions import InsufficientPrecisionError
|
3
|
+
from ..math_basics import is_RealIntervalFieldElement, is_ComplexIntervalFieldElement
|
2
4
|
|
3
5
|
import math
|
4
6
|
|
5
7
|
if _within_sage:
|
6
|
-
from
|
7
|
-
|
8
|
-
from sage.rings.real_mpfi import is_RealIntervalFieldElement
|
9
|
-
from sage.rings.complex_interval import is_ComplexIntervalFieldElement
|
10
|
-
|
11
|
-
# python's sqrt only work for floats
|
12
|
-
# They would fail or convert to float losing precision
|
13
|
-
from sage.all import sqrt
|
8
|
+
from ..sage_helper import gcd
|
14
9
|
else:
|
15
|
-
|
16
|
-
|
17
|
-
from math import gcd
|
18
|
-
except ImportError:
|
19
|
-
from fractions import gcd
|
20
|
-
|
21
|
-
# Otherwise, define our own sqrt which checks whether
|
22
|
-
# the given type defines a sqrt method and fallsback
|
23
|
-
# to python's log and sqrt which has the above drawback of
|
24
|
-
# potentially losing precision.
|
25
|
-
def sqrt(x):
|
26
|
-
if hasattr(x, 'sqrt'):
|
27
|
-
return x.sqrt()
|
28
|
-
return math.sqrt(x)
|
29
|
-
|
10
|
+
# Python 3 has gcd in math
|
11
|
+
from math import gcd
|
30
12
|
|
13
|
+
# Reject computing short slopes if intervals for translations
|
14
|
+
# are too wide (error is more than 1%).
|
15
|
+
_min_diameter_translations = 0.01
|
16
|
+
|
31
17
|
def short_slopes_from_cusp_shape_and_area(
|
32
18
|
cusp_shape, cusp_area, length=6):
|
33
19
|
"""
|
@@ -62,35 +48,32 @@ def translations_from_cusp_shape_and_area(
|
|
62
48
|
|
63
49
|
if kernel_convention:
|
64
50
|
inv_cusp_shape = 1 / cusp_shape.conjugate()
|
65
|
-
scale =
|
51
|
+
scale = (cusp_area / _imag(inv_cusp_shape)).sqrt()
|
66
52
|
return (scale * inv_cusp_shape, scale)
|
67
53
|
else:
|
68
|
-
scale =
|
54
|
+
scale = (cusp_area / _imag(cusp_shape)).sqrt()
|
69
55
|
return (scale, cusp_shape * scale)
|
70
56
|
|
71
|
-
|
72
57
|
def short_slopes_from_translations(translations, length=6):
|
73
58
|
|
74
59
|
m_tran, l_tran = translations
|
75
60
|
|
76
|
-
if
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
raise Exception("Longitude translation expected to be complex")
|
61
|
+
if is_ComplexIntervalFieldElement(m_tran):
|
62
|
+
raise Exception("Meridian translation expected to be real")
|
63
|
+
if is_RealIntervalFieldElement(l_tran):
|
64
|
+
raise Exception("Longitude translation expected to be complex")
|
81
65
|
|
82
|
-
|
83
|
-
|
66
|
+
is_interval_1 = is_RealIntervalFieldElement(m_tran)
|
67
|
+
is_interval_2 = is_ComplexIntervalFieldElement(l_tran)
|
84
68
|
|
85
|
-
|
86
|
-
|
69
|
+
if is_interval_1 != is_interval_2:
|
70
|
+
raise Exception("Mismatch of non-intervals and intervals.")
|
87
71
|
|
88
|
-
|
89
|
-
|
72
|
+
if is_interval_1:
|
73
|
+
return _verified_short_slopes_from_translations(translations, length)
|
90
74
|
|
91
75
|
return _unverified_short_slopes_from_translations(translations, length)
|
92
76
|
|
93
|
-
|
94
77
|
def _unverified_short_slopes_from_translations(translations, length=6):
|
95
78
|
m_tran, l_tran = translations
|
96
79
|
|
@@ -114,7 +97,7 @@ def _unverified_short_slopes_from_translations(translations, length=6):
|
|
114
97
|
max_real_range_sqr = length ** 2 - _imag(total_l_tran) ** 2
|
115
98
|
|
116
99
|
if max_real_range_sqr >= 0:
|
117
|
-
max_real_range = sqrt(
|
100
|
+
max_real_range = max_real_range_sqr.sqrt()
|
118
101
|
|
119
102
|
if l == 0:
|
120
103
|
min_m = 1
|
@@ -136,7 +119,22 @@ def _verified_short_slopes_from_translations(translations, length=6):
|
|
136
119
|
m_tran, l_tran = translations
|
137
120
|
|
138
121
|
if not m_tran > 0:
|
139
|
-
raise Exception("Expected positive meridian translation")
|
122
|
+
raise Exception("Expected positive meridian translation.")
|
123
|
+
|
124
|
+
if not l_tran.imag() != 0:
|
125
|
+
raise InsufficientPrecisionError(
|
126
|
+
"Could not verify that longitude meridian translation "
|
127
|
+
"has non-trivial imaginary part.")
|
128
|
+
|
129
|
+
if m_tran.diameter() > _min_diameter_translations:
|
130
|
+
raise InsufficientPrecisionError(
|
131
|
+
"Meridian translation has insufficient precision to compute "
|
132
|
+
"a reasonable set of short slopes.")
|
133
|
+
|
134
|
+
if l_tran.diameter() > _min_diameter_translations:
|
135
|
+
raise InsufficientPrecisionError(
|
136
|
+
"Longitude translation has insufficient precision to compute "
|
137
|
+
"a reasonable set of short slopes.")
|
140
138
|
|
141
139
|
RIF = m_tran.parent()
|
142
140
|
|
@@ -164,7 +162,7 @@ def _verified_short_slopes_from_translations(translations, length=6):
|
|
164
162
|
(- total_l_tran.real() + max_real_range) / m_tran)
|
165
163
|
|
166
164
|
for m in range(min_m, max_m + 1):
|
167
|
-
if gcd(m, l)
|
165
|
+
if gcd(m, l) in [+1, -1]:
|
168
166
|
result.append((m, l))
|
169
167
|
|
170
168
|
return result
|