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/doc/verify_internals.html
CHANGED
@@ -1,1692 +1,1235 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
<meta name="viewport" content="width=device-width, initial-scale=1
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
<link rel="stylesheet"
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
<script src="_static/js/theme.js"></script>
|
22
|
-
<link rel="index" title="Index" href="genindex.html" />
|
23
|
-
<link rel="search" title="Search" href="search.html" />
|
24
|
-
<link rel="next" title="Other components" href="other.html" />
|
25
|
-
<link rel="prev" title="
|
26
|
-
</head>
|
27
|
-
|
28
|
-
<body class="wy-body-for-nav">
|
29
|
-
<div class="wy-grid-for-nav">
|
30
|
-
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
31
|
-
<div class="wy-side-scroll">
|
32
|
-
<div class="wy-side-nav-search" >
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
<a href="index.html" class="icon icon-home">
|
37
|
-
SnapPy
|
38
|
-
<img src="_static/SnapPy-horizontal-128.png" class="logo" alt="Logo"/>
|
39
|
-
</a>
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
<
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
</
|
50
|
-
|
51
|
-
|
52
|
-
<li class="toctree-l1"><a class="reference internal" href="
|
53
|
-
<li class="toctree-l1"><a class="reference internal" href="
|
54
|
-
<li class="toctree-l1"><a class="reference internal" href="
|
55
|
-
<li class="toctree-l1"><a class="reference internal" href="
|
56
|
-
<li class="toctree-l1"><a class="reference internal" href="
|
57
|
-
<li class="toctree-
|
58
|
-
<li class="toctree-
|
59
|
-
<li class="toctree-
|
60
|
-
<li class="toctree-
|
61
|
-
<li class="toctree-
|
62
|
-
<li class="toctree-
|
63
|
-
<li class="toctree-
|
64
|
-
<li class="toctree-
|
65
|
-
<li class="toctree-
|
66
|
-
|
67
|
-
|
68
|
-
<li class="toctree-
|
69
|
-
</
|
70
|
-
</
|
71
|
-
|
72
|
-
<li class="toctree-
|
73
|
-
</
|
74
|
-
</li>
|
75
|
-
|
76
|
-
|
77
|
-
<li class="toctree-
|
78
|
-
</
|
79
|
-
</li>
|
80
|
-
<li class="toctree-
|
81
|
-
|
82
|
-
|
83
|
-
</ul>
|
84
|
-
</li>
|
85
|
-
<li class="toctree-
|
86
|
-
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.
|
87
|
-
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.
|
88
|
-
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.
|
89
|
-
</
|
90
|
-
</li>
|
91
|
-
<li class="toctree-
|
92
|
-
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.exceptions.
|
93
|
-
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.exceptions.
|
94
|
-
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.exceptions.
|
95
|
-
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.exceptions.
|
96
|
-
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.exceptions.
|
97
|
-
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.exceptions.
|
98
|
-
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.exceptions.
|
99
|
-
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.exceptions.
|
100
|
-
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.exceptions.
|
101
|
-
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.exceptions.
|
102
|
-
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.exceptions.
|
103
|
-
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.exceptions.
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
<li class="toctree-
|
113
|
-
<li class="toctree-
|
114
|
-
<li class="toctree-
|
115
|
-
<li class="toctree-
|
116
|
-
</
|
117
|
-
</li>
|
118
|
-
</ul>
|
119
|
-
|
120
|
-
</
|
121
|
-
</
|
122
|
-
</
|
123
|
-
|
124
|
-
<
|
125
|
-
<
|
126
|
-
<
|
127
|
-
|
128
|
-
|
129
|
-
<
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
<
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
<
|
158
|
-
<
|
159
|
-
<
|
160
|
-
<
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
<code class="docutils literal notranslate"><span class="pre">
|
168
|
-
|
169
|
-
<
|
170
|
-
<
|
171
|
-
<
|
172
|
-
<
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
<
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
<
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
<
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
<
|
217
|
-
|
218
|
-
<
|
219
|
-
|
220
|
-
</
|
221
|
-
<p>
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
<p>
|
226
|
-
<
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
</
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
<p>
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
<
|
247
|
-
<
|
248
|
-
<
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
<
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
sage
|
271
|
-
|
272
|
-
|
273
|
-
(
|
274
|
-
</
|
275
|
-
</
|
276
|
-
<
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
<
|
282
|
-
<
|
283
|
-
<span class="
|
284
|
-
<
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
</dd></dl>
|
290
|
-
|
291
|
-
<dl class="py method">
|
292
|
-
<dt class="sig sig-object py" id="snappy.verify.IntervalNewtonShapesEngine.
|
293
|
-
<span class="sig-name descname"><span class="pre">
|
294
|
-
<dd><p>
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
</
|
300
|
-
|
301
|
-
<
|
302
|
-
|
303
|
-
<
|
304
|
-
<
|
305
|
-
|
306
|
-
<
|
307
|
-
<span class="n">sage</span><span class="p">:</span> <span class="n">
|
308
|
-
<span class="
|
309
|
-
<span class="n">sage</span><span class="p">:</span> <span class="n">
|
310
|
-
<span class="
|
311
|
-
<span class="n">sage</span><span class="p">:</span> <span class="n">
|
312
|
-
|
313
|
-
<span class="n">sage</span><span class="p">:</span> <span class="n">IntervalNewtonShapesEngine</span><span class="o">.</span><span class="n">interval_vector_is_contained_in</span><span class="p">(</span><span class="n">
|
314
|
-
<span class="kc">
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
<
|
320
|
-
<
|
321
|
-
<
|
322
|
-
<
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
<
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
<
|
337
|
-
|
338
|
-
<
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
</
|
365
|
-
|
366
|
-
|
367
|
-
<
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
<
|
373
|
-
<
|
374
|
-
</
|
375
|
-
<p>
|
376
|
-
|
377
|
-
<p>
|
378
|
-
|
379
|
-
|
380
|
-
<
|
381
|
-
|
382
|
-
|
383
|
-
<
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
</div>
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
sage: LHSs
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
</
|
400
|
-
</
|
401
|
-
|
402
|
-
<
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
<
|
413
|
-
<
|
414
|
-
|
415
|
-
<
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
<p>
|
422
|
-
<
|
423
|
-
|
424
|
-
</div
|
425
|
-
<p>
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
<
|
432
|
-
<
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
(0.
|
439
|
-
|
440
|
-
</div>
|
441
|
-
|
442
|
-
<
|
443
|
-
sage
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
(
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
<
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
<p>
|
482
|
-
|
483
|
-
<
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
<p>
|
492
|
-
|
493
|
-
<
|
494
|
-
<
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
<
|
499
|
-
|
500
|
-
<
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
<
|
505
|
-
|
506
|
-
</
|
507
|
-
<p>
|
508
|
-
|
509
|
-
|
510
|
-
<
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
<
|
521
|
-
|
522
|
-
sage: C = KrawczykShapesEngine(M, shapes, bits_prec =
|
523
|
-
sage: C.expand_until_certified()
|
524
|
-
True
|
525
|
-
sage: C.certified_shapes # doctest: +
|
526
|
-
(0.
|
527
|
-
</pre></div>
|
528
|
-
</div>
|
529
|
-
<
|
530
|
-
<
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
</
|
539
|
-
|
540
|
-
<
|
541
|
-
<
|
542
|
-
<
|
543
|
-
|
544
|
-
|
545
|
-
<p>
|
546
|
-
|
547
|
-
|
548
|
-
</
|
549
|
-
|
550
|
-
<
|
551
|
-
|
552
|
-
<
|
553
|
-
<
|
554
|
-
|
555
|
-
<
|
556
|
-
<span class="n">sage</span><span class="p">:</span> <span class="n">
|
557
|
-
<span class="
|
558
|
-
<span class="n">sage</span><span class="p">:</span> <span class="n">
|
559
|
-
<span class="
|
560
|
-
<span class="n">sage</span><span class="p">:</span> <span class="n">
|
561
|
-
|
562
|
-
<span class="n">sage</span><span class="p">:</span> <span class="n">KrawczykShapesEngine</span><span class="o">.</span><span class="n">interval_vector_is_contained_in</span><span class="p">(</span><span class="n">
|
563
|
-
<span class="kc">
|
564
|
-
|
565
|
-
|
566
|
-
|
567
|
-
|
568
|
-
<
|
569
|
-
<
|
570
|
-
<
|
571
|
-
<
|
572
|
-
|
573
|
-
|
574
|
-
|
575
|
-
|
576
|
-
|
577
|
-
|
578
|
-
<
|
579
|
-
|
580
|
-
|
581
|
-
|
582
|
-
|
583
|
-
|
584
|
-
|
585
|
-
<
|
586
|
-
<
|
587
|
-
<
|
588
|
-
<
|
589
|
-
|
590
|
-
|
591
|
-
|
592
|
-
<
|
593
|
-
<
|
594
|
-
<
|
595
|
-
<
|
596
|
-
<p>
|
597
|
-
|
598
|
-
|
599
|
-
</
|
600
|
-
<
|
601
|
-
|
602
|
-
<
|
603
|
-
|
604
|
-
<
|
605
|
-
<
|
606
|
-
|
607
|
-
|
608
|
-
|
609
|
-
|
610
|
-
|
611
|
-
|
612
|
-
|
613
|
-
|
614
|
-
|
615
|
-
|
616
|
-
|
617
|
-
|
618
|
-
|
619
|
-
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
625
|
-
|
626
|
-
|
627
|
-
|
628
|
-
|
629
|
-
|
630
|
-
|
631
|
-
|
632
|
-
|
633
|
-
|
634
|
-
|
635
|
-
|
636
|
-
|
637
|
-
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
|
645
|
-
|
646
|
-
|
647
|
-
|
648
|
-
</dd></dl>
|
649
|
-
|
650
|
-
<dl class="py method">
|
651
|
-
<dt class="sig sig-object py" id="snappy.verify.KrawczykShapesEngine.
|
652
|
-
<span class="sig-name descname"><span class="pre">
|
653
|
-
<dd><p>
|
654
|
-
|
655
|
-
|
656
|
-
|
657
|
-
|
658
|
-
|
659
|
-
<
|
660
|
-
|
661
|
-
<
|
662
|
-
|
663
|
-
|
664
|
-
|
665
|
-
<
|
666
|
-
<
|
667
|
-
</
|
668
|
-
<p>
|
669
|
-
|
670
|
-
<p>
|
671
|
-
|
672
|
-
|
673
|
-
|
674
|
-
<
|
675
|
-
|
676
|
-
|
677
|
-
<
|
678
|
-
|
679
|
-
|
680
|
-
|
681
|
-
|
682
|
-
|
683
|
-
|
684
|
-
|
685
|
-
|
686
|
-
<
|
687
|
-
sage:
|
688
|
-
sage: LHSs = C.log_gluing_LHSs(shapes)
|
689
|
-
sage: LHSs # doctest: +
|
690
|
-
(0.
|
691
|
-
sage: zero in LHSs[0]
|
692
|
-
|
693
|
-
</pre></div>
|
694
|
-
</div>
|
695
|
-
|
696
|
-
|
697
|
-
|
698
|
-
|
699
|
-
(
|
700
|
-
|
701
|
-
|
702
|
-
</
|
703
|
-
|
704
|
-
</dd></dl>
|
705
|
-
|
706
|
-
|
707
|
-
<
|
708
|
-
<
|
709
|
-
<
|
710
|
-
|
711
|
-
</
|
712
|
-
|
713
|
-
|
714
|
-
|
715
|
-
|
716
|
-
|
717
|
-
|
718
|
-
|
719
|
-
|
720
|
-
|
721
|
-
<
|
722
|
-
|
723
|
-
|
724
|
-
|
725
|
-
|
726
|
-
|
727
|
-
|
728
|
-
|
729
|
-
|
730
|
-
<p>
|
731
|
-
|
732
|
-
|
733
|
-
|
734
|
-
|
735
|
-
|
736
|
-
|
737
|
-
|
738
|
-
|
739
|
-
|
740
|
-
|
741
|
-
</div>
|
742
|
-
|
743
|
-
|
744
|
-
|
745
|
-
|
746
|
-
|
747
|
-
|
748
|
-
|
749
|
-
|
750
|
-
</pre></
|
751
|
-
|
752
|
-
|
753
|
-
|
754
|
-
|
755
|
-
<
|
756
|
-
|
757
|
-
<
|
758
|
-
|
759
|
-
|
760
|
-
|
761
|
-
|
762
|
-
|
763
|
-
|
764
|
-
|
765
|
-
<
|
766
|
-
<
|
767
|
-
|
768
|
-
<
|
769
|
-
|
770
|
-
|
771
|
-
|
772
|
-
|
773
|
-
|
774
|
-
|
775
|
-
|
776
|
-
|
777
|
-
|
778
|
-
|
779
|
-
|
780
|
-
|
781
|
-
|
782
|
-
|
783
|
-
|
784
|
-
|
785
|
-
|
786
|
-
|
787
|
-
|
788
|
-
</
|
789
|
-
|
790
|
-
|
791
|
-
|
792
|
-
<
|
793
|
-
<
|
794
|
-
|
795
|
-
|
796
|
-
|
797
|
-
|
798
|
-
|
799
|
-
|
800
|
-
<
|
801
|
-
<
|
802
|
-
|
803
|
-
<p>
|
804
|
-
|
805
|
-
</
|
806
|
-
|
807
|
-
<
|
808
|
-
<
|
809
|
-
|
810
|
-
|
811
|
-
<p>
|
812
|
-
|
813
|
-
|
814
|
-
|
815
|
-
|
816
|
-
<
|
817
|
-
|
818
|
-
|
819
|
-
|
820
|
-
|
821
|
-
|
822
|
-
|
823
|
-
|
824
|
-
|
825
|
-
|
826
|
-
</dd></dl>
|
827
|
-
|
828
|
-
|
829
|
-
<
|
830
|
-
<span
|
831
|
-
<
|
832
|
-
|
833
|
-
|
834
|
-
|
835
|
-
|
836
|
-
|
837
|
-
|
838
|
-
<p>
|
839
|
-
|
840
|
-
|
841
|
-
|
842
|
-
|
843
|
-
|
844
|
-
|
845
|
-
|
846
|
-
|
847
|
-
|
848
|
-
|
849
|
-
|
850
|
-
|
851
|
-
|
852
|
-
<p>
|
853
|
-
|
854
|
-
|
855
|
-
<p><
|
856
|
-
|
857
|
-
|
858
|
-
|
859
|
-
|
860
|
-
|
861
|
-
|
862
|
-
</
|
863
|
-
|
864
|
-
<
|
865
|
-
<
|
866
|
-
|
867
|
-
<
|
868
|
-
|
869
|
-
|
870
|
-
|
871
|
-
<
|
872
|
-
|
873
|
-
<
|
874
|
-
|
875
|
-
|
876
|
-
|
877
|
-
|
878
|
-
|
879
|
-
<
|
880
|
-
|
881
|
-
|
882
|
-
<
|
883
|
-
<span class="
|
884
|
-
<span class="
|
885
|
-
<span class="
|
886
|
-
|
887
|
-
|
888
|
-
<
|
889
|
-
<
|
890
|
-
|
891
|
-
|
892
|
-
|
893
|
-
<
|
894
|
-
|
895
|
-
|
896
|
-
|
897
|
-
|
898
|
-
<p>
|
899
|
-
<p>
|
900
|
-
|
901
|
-
|
902
|
-
|
903
|
-
|
904
|
-
<p>
|
905
|
-
|
906
|
-
|
907
|
-
|
908
|
-
<p>
|
909
|
-
|
910
|
-
|
911
|
-
|
912
|
-
<p>
|
913
|
-
sage: from sage.rings.
|
914
|
-
sage: from sage.rings.
|
915
|
-
sage: from sage.rings.
|
916
|
-
sage: from sage.rings.
|
917
|
-
sage:
|
918
|
-
sage:
|
919
|
-
sage:
|
920
|
-
|
921
|
-
sage:
|
922
|
-
|
923
|
-
|
924
|
-
|
925
|
-
sage:
|
926
|
-
sage:
|
927
|
-
sage:
|
928
|
-
|
929
|
-
|
930
|
-
|
931
|
-
sage:
|
932
|
-
|
933
|
-
|
934
|
-
|
935
|
-
|
936
|
-
|
937
|
-
|
938
|
-
|
939
|
-
|
940
|
-
|
941
|
-
|
942
|
-
|
943
|
-
sage:
|
944
|
-
|
945
|
-
|
946
|
-
|
947
|
-
|
948
|
-
sage:
|
949
|
-
|
950
|
-
|
951
|
-
|
952
|
-
|
953
|
-
|
954
|
-
|
955
|
-
|
956
|
-
|
957
|
-
|
958
|
-
|
959
|
-
|
960
|
-
|
961
|
-
|
962
|
-
|
963
|
-
|
964
|
-
<
|
965
|
-
<
|
966
|
-
|
967
|
-
|
968
|
-
|
969
|
-
|
970
|
-
|
971
|
-
|
972
|
-
|
973
|
-
<
|
974
|
-
|
975
|
-
|
976
|
-
|
977
|
-
|
978
|
-
<
|
979
|
-
<
|
980
|
-
<
|
981
|
-
<
|
982
|
-
|
983
|
-
|
984
|
-
|
985
|
-
|
986
|
-
<
|
987
|
-
|
988
|
-
|
989
|
-
|
990
|
-
|
991
|
-
|
992
|
-
|
993
|
-
|
994
|
-
<
|
995
|
-
<span
|
996
|
-
<
|
997
|
-
|
998
|
-
|
999
|
-
|
1000
|
-
<
|
1001
|
-
|
1002
|
-
|
1003
|
-
|
1004
|
-
|
1005
|
-
|
1006
|
-
<
|
1007
|
-
|
1008
|
-
|
1009
|
-
|
1010
|
-
|
1011
|
-
|
1012
|
-
<p>
|
1013
|
-
|
1014
|
-
</
|
1015
|
-
|
1016
|
-
<
|
1017
|
-
<
|
1018
|
-
|
1019
|
-
|
1020
|
-
|
1021
|
-
</
|
1022
|
-
|
1023
|
-
<
|
1024
|
-
<
|
1025
|
-
<
|
1026
|
-
<
|
1027
|
-
|
1028
|
-
|
1029
|
-
</
|
1030
|
-
|
1031
|
-
<
|
1032
|
-
<
|
1033
|
-
<
|
1034
|
-
<
|
1035
|
-
|
1036
|
-
|
1037
|
-
|
1038
|
-
</
|
1039
|
-
|
1040
|
-
<
|
1041
|
-
<
|
1042
|
-
<
|
1043
|
-
<
|
1044
|
-
<p>
|
1045
|
-
</
|
1046
|
-
|
1047
|
-
<
|
1048
|
-
|
1049
|
-
|
1050
|
-
<
|
1051
|
-
|
1052
|
-
|
1053
|
-
|
1054
|
-
|
1055
|
-
|
1056
|
-
|
1057
|
-
|
1058
|
-
|
1059
|
-
|
1060
|
-
|
1061
|
-
<
|
1062
|
-
|
1063
|
-
|
1064
|
-
|
1065
|
-
|
1066
|
-
<
|
1067
|
-
|
1068
|
-
|
1069
|
-
|
1070
|
-
|
1071
|
-
|
1072
|
-
|
1073
|
-
|
1074
|
-
|
1075
|
-
|
1076
|
-
|
1077
|
-
|
1078
|
-
|
1079
|
-
|
1080
|
-
|
1081
|
-
|
1082
|
-
<p>
|
1083
|
-
|
1084
|
-
|
1085
|
-
|
1086
|
-
|
1087
|
-
|
1088
|
-
<
|
1089
|
-
|
1090
|
-
|
1091
|
-
|
1092
|
-
|
1093
|
-
|
1094
|
-
|
1095
|
-
</
|
1096
|
-
|
1097
|
-
|
1098
|
-
|
1099
|
-
|
1100
|
-
<
|
1101
|
-
|
1102
|
-
</
|
1103
|
-
|
1104
|
-
|
1105
|
-
|
1106
|
-
<
|
1107
|
-
<
|
1108
|
-
|
1109
|
-
|
1110
|
-
|
1111
|
-
|
1112
|
-
|
1113
|
-
|
1114
|
-
<
|
1115
|
-
|
1116
|
-
<p>The
|
1117
|
-
|
1118
|
-
|
1119
|
-
|
1120
|
-
|
1121
|
-
<
|
1122
|
-
<
|
1123
|
-
<
|
1124
|
-
|
1125
|
-
|
1126
|
-
|
1127
|
-
|
1128
|
-
<
|
1129
|
-
|
1130
|
-
|
1131
|
-
|
1132
|
-
|
1133
|
-
|
1134
|
-
<
|
1135
|
-
<
|
1136
|
-
<
|
1137
|
-
|
1138
|
-
|
1139
|
-
|
1140
|
-
|
1141
|
-
|
1142
|
-
|
1143
|
-
|
1144
|
-
<
|
1145
|
-
|
1146
|
-
|
1147
|
-
|
1148
|
-
|
1149
|
-
|
1150
|
-
|
1151
|
-
|
1152
|
-
<
|
1153
|
-
|
1154
|
-
|
1155
|
-
|
1156
|
-
|
1157
|
-
|
1158
|
-
|
1159
|
-
|
1160
|
-
|
1161
|
-
|
1162
|
-
|
1163
|
-
<dl class="py
|
1164
|
-
<dt class="sig sig-object py" id="snappy.verify.
|
1165
|
-
<
|
1166
|
-
<dd><p>
|
1167
|
-
|
1168
|
-
|
1169
|
-
|
1170
|
-
<
|
1171
|
-
|
1172
|
-
<
|
1173
|
-
|
1174
|
-
|
1175
|
-
|
1176
|
-
|
1177
|
-
|
1178
|
-
|
1179
|
-
</
|
1180
|
-
|
1181
|
-
<
|
1182
|
-
<
|
1183
|
-
<span class="
|
1184
|
-
<
|
1185
|
-
|
1186
|
-
|
1187
|
-
|
1188
|
-
|
1189
|
-
|
1190
|
-
|
1191
|
-
|
1192
|
-
|
1193
|
-
|
1194
|
-
|
1195
|
-
|
1196
|
-
<
|
1197
|
-
<
|
1198
|
-
|
1199
|
-
|
1200
|
-
|
1201
|
-
|
1202
|
-
|
1203
|
-
|
1204
|
-
|
1205
|
-
</
|
1206
|
-
|
1207
|
-
<
|
1208
|
-
<
|
1209
|
-
<
|
1210
|
-
|
1211
|
-
|
1212
|
-
|
1213
|
-
|
1214
|
-
|
1215
|
-
<
|
1216
|
-
|
1217
|
-
|
1218
|
-
|
1219
|
-
</
|
1220
|
-
</
|
1221
|
-
|
1222
|
-
|
1223
|
-
|
1224
|
-
</
|
1225
|
-
</div>
|
1226
|
-
|
1227
|
-
|
1228
|
-
<
|
1229
|
-
|
1230
|
-
|
1231
|
-
|
1232
|
-
|
1233
|
-
|
1234
|
-
|
1235
|
-
sage: exactly_checked_canonical_retriangulation(M, 500, 6) # doctest: +IGNORE_EXCEPTION_DETAIL
|
1236
|
-
Traceback (most recent call last):
|
1237
|
-
...
|
1238
|
-
TiltProvenPositiveNumericalVerifyError: Numerical verification that tilt is negative has failed, tilt is actually positive. This is provably not the proto-canonical triangulation: 0.1645421638874662848910671879? <= 0
|
1239
|
-
</pre></div>
|
1240
|
-
</div>
|
1241
|
-
</dd></dl>
|
1242
|
-
|
1243
|
-
</section>
|
1244
|
-
<section id="module-snappy.verify.squareExtensions">
|
1245
|
-
<span id="exact-computations-for-cusp-cross-sections"></span><h2>Exact computations for cusp cross sections<a class="headerlink" href="#module-snappy.verify.squareExtensions" title="Permalink to this heading"></a></h2>
|
1246
|
-
<p>The squareExtensions module provides
|
1247
|
-
two special classes to give exact representations of the values
|
1248
|
-
involved when computing a cusp cross section.</p>
|
1249
|
-
<p>The method find_shapes_as_complex_sqrt_lin_combinations returns a list of
|
1250
|
-
shapes as ComplexSqrtLinCombination’s. This can be used as input to
|
1251
|
-
CuspCrossSection. The outputs of CuspCrossSection, including the tilts, will
|
1252
|
-
then be of type SqrtLinCombination.</p>
|
1253
|
-
<p>Consider the real number field N generated by the real and imaginary part of
|
1254
|
-
the shapes. The edge lengths and the factors used to normalize the cusp areas
|
1255
|
-
will be square roots in N and thus the tilts will be N-linear combinations of
|
1256
|
-
square roots in N. To avoid computing in a massive tower of square extensions
|
1257
|
-
of N, we implement SqrtLinCombination here that provides a special
|
1258
|
-
implementation of the == operator.</p>
|
1259
|
-
<dl class="py function">
|
1260
|
-
<dt class="sig sig-object py" id="snappy.verify.squareExtensions.find_shapes_as_complex_sqrt_lin_combinations">
|
1261
|
-
<span class="sig-prename descclassname"><span class="pre">snappy.verify.squareExtensions.</span></span><span class="sig-name descname"><span class="pre">find_shapes_as_complex_sqrt_lin_combinations</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">M</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prec</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">degree</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.squareExtensions.find_shapes_as_complex_sqrt_lin_combinations" title="Permalink to this definition"></a></dt>
|
1262
|
-
<dd><p>Given a manifold M, use snap (which uses LLL-algorithm) with the given
|
1263
|
-
decimal precision and maximal degree to find exact values for the shapes’
|
1264
|
-
real and imaginary part. Return the shapes as list of
|
1265
|
-
ComplexSqrtLinCombination’s. Return None on failure.</p>
|
1266
|
-
<p>Example:</p>
|
1267
|
-
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="kn">from</span> <span class="nn">snappy</span> <span class="kn">import</span> <span class="n">Manifold</span>
|
1268
|
-
<span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">=</span><span class="n">Manifold</span><span class="p">(</span><span class="s2">"m412"</span><span class="p">)</span>
|
1269
|
-
<span class="n">sage</span><span class="p">:</span> <span class="n">find_shapes_as_complex_sqrt_lin_combinations</span><span class="p">(</span><span class="n">M</span><span class="p">,</span> <span class="mi">200</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span>
|
1270
|
-
<span class="p">[</span><span class="n">ComplexSqrtLinCombination</span><span class="p">((</span><span class="mi">1</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="n">x</span> <span class="o">-</span> <span class="mi">1</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="mi">1</span><span class="p">)),</span> <span class="n">ComplexSqrtLinCombination</span><span class="p">((</span><span class="mi">1</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="n">x</span> <span class="o">-</span> <span class="mi">1</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="mi">1</span><span class="p">)),</span> <span class="n">ComplexSqrtLinCombination</span><span class="p">((</span><span class="mi">1</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="n">x</span> <span class="o">-</span> <span class="mi">1</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="mi">1</span><span class="p">)),</span> <span class="n">ComplexSqrtLinCombination</span><span class="p">((</span><span class="mi">1</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="n">x</span> <span class="o">-</span> <span class="mi">1</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="mi">1</span><span class="p">)),</span> <span class="n">ComplexSqrtLinCombination</span><span class="p">((</span><span class="mi">1</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="n">x</span> <span class="o">-</span> <span class="mi">1</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="mi">1</span><span class="p">))]</span>
|
1271
|
-
</pre></div>
|
1272
|
-
</div>
|
1273
|
-
</dd></dl>
|
1274
|
-
|
1275
|
-
<dl class="py class">
|
1276
|
-
<dt class="sig sig-object py" id="snappy.verify.squareExtensions.SqrtLinCombination">
|
1277
|
-
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.squareExtensions.</span></span><span class="sig-name descname"><span class="pre">SqrtLinCombination</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">d</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">{}</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">embed_cache</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.squareExtensions.SqrtLinCombination" title="Permalink to this definition"></a></dt>
|
1278
|
-
<dd><p>A class representing a linear combination</p>
|
1279
|
-
<blockquote>
|
1280
|
-
<div><p>c_1 * sqrt(r_1) + c_2 * sqrt(r_2) + … + c_n * sqrt(r_n)</p>
|
1281
|
-
</div></blockquote>
|
1282
|
-
<p>where c_i and r_i have to be of type Integer, Rational or elements
|
1283
|
-
of the same Sage NumberField with a real embedding (Caution: this is
|
1284
|
-
assumed but not checked!) such that all r_i are positive (Caution: this is
|
1285
|
-
not checked during construction!).</p>
|
1286
|
-
<p>It implements +, -, * where one of the operators is allowed to be an
|
1287
|
-
integer or rational.</p>
|
1288
|
-
<p>/ is only implemented when the denominator has only one term c_1 * sqrt(1).
|
1289
|
-
sqrt is only implemented for c_1 * sqrt(1) and it is not checked that
|
1290
|
-
c_1 is positive.</p>
|
1291
|
-
<p>== is implemented, but the other comparison operators are not: casting to
|
1292
|
-
a RealIntervalField is implemented instead and the user can compare the
|
1293
|
-
intervals.</p>
|
1294
|
-
<p>The == operator is implemented by first reducing A == B to D == 0 and then
|
1295
|
-
converting to a different data type (_FactorizedSqrtLinCombination) that can
|
1296
|
-
represent linear combinations:</p>
|
1297
|
-
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">D</span> <span class="o">=</span> <span class="n">c_1</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="n">r_</span><span class="p">{</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">})</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="n">r_</span><span class="p">{</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">})</span> <span class="o">*</span> <span class="o">...</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="n">r_</span><span class="p">{</span><span class="mi">1</span><span class="p">,</span><span class="n">k_1</span><span class="p">})</span>
|
1298
|
-
<span class="o">+</span> <span class="n">c_2</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="n">r_</span><span class="p">{</span><span class="mi">2</span><span class="p">,</span><span class="mi">1</span><span class="p">})</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="n">r_</span><span class="p">{</span><span class="mi">2</span><span class="p">,</span><span class="mi">2</span><span class="p">})</span> <span class="o">*</span> <span class="o">...</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="n">r_</span><span class="p">{</span><span class="mi">2</span><span class="p">,</span><span class="n">k_2</span><span class="p">})</span>
|
1299
|
-
<span class="o">+</span> <span class="o">...</span>
|
1300
|
-
<span class="o">+</span> <span class="n">c_n</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="n">r_</span><span class="p">{</span><span class="n">n</span><span class="p">,</span><span class="mi">1</span><span class="p">})</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="n">r_</span><span class="p">{</span><span class="n">n</span><span class="p">,</span><span class="mi">2</span><span class="p">})</span> <span class="o">*</span> <span class="o">...</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="n">r_</span><span class="p">{</span><span class="n">n</span><span class="p">,</span><span class="n">k_n</span><span class="p">})</span>
|
1301
|
-
</pre></div>
|
1302
|
-
</div>
|
1303
|
-
<dl class="simple">
|
1304
|
-
<dt>by just trivially setting</dt><dd><p>k_i = 0 when r_i = 1 and
|
1305
|
-
r_{i,1} = r_i and k_1 = 1 otherwise.</p>
|
1306
|
-
</dd>
|
1307
|
-
</dl>
|
1308
|
-
<p>For this data type, multiplying two sqrt(r_{i,j}) with equal r_{i,j} will
|
1309
|
-
cancel the two sqrt’s and apply the common r_{i,j} to the c_i of the result
|
1310
|
-
instead. Thus, the following procedure for determining whether D == 0 will
|
1311
|
-
eventually terminate:</p>
|
1312
|
-
<ul class="simple">
|
1313
|
-
<li><p>if the number of terms n is 0, return True</p></li>
|
1314
|
-
<li><p>if the number of terms n is 1, return c_1 == 0</p></li>
|
1315
|
-
<li><p>if there is a r_{i,j} common to each summand, factor it out</p></li>
|
1316
|
-
<li><p>pick one of the r_{i,j}, split the sum into two parts “left”,
|
1317
|
-
respectively, “right” of all the terms containing sqrt(r_{i,j}),
|
1318
|
-
respectively, not containing sqrt(r_{i,j}).</p></li>
|
1319
|
-
<li><p>If left^2 - right^2 == 0 is False, return False.
|
1320
|
-
(sqrt(r_{i,j})^2 simplifies to r_{i,j} and disappears, so the resulting
|
1321
|
-
expression is easier and this recursion terminates eventually.)</p></li>
|
1322
|
-
<li><p>If left == 0 (some comment applies), return True</p></li>
|
1323
|
-
<li><p>Use interval arithmetic of increasing precision until it is high enough
|
1324
|
-
to determine the signs of left and right.
|
1325
|
-
Return True if and only if the signs differ, otherwise False.</p></li>
|
1326
|
-
</ul>
|
1327
|
-
<p>Examples:</p>
|
1328
|
-
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: from sage.rings.number_field.number_field import NumberField
|
1329
|
-
sage: from sage.rings.integer import Integer
|
1330
|
-
sage: from sage.rings.rational import Rational
|
1331
|
-
sage: from sage.rings.real_mpfr import RealLiteral, RealField
|
1332
|
-
sage: from sage.rings.real_mpfi import RealIntervalField
|
1333
|
-
sage: from sage.calculus.var import var
|
1334
|
-
sage: from sage.functions.other import sqrt
|
1335
|
-
sage: x = var('x')
|
1336
|
-
sage: poly = x ** 6 + Rational((3,2))*x**4 + Rational((9,16))*x**2 - Rational((23,64))
|
1337
|
-
sage: nf = NumberField(poly, 'z', embedding = RealField()(0.56227951206))
|
1338
|
-
sage: z = nf.gen()
|
1339
|
-
|
1340
|
-
sage: A = SqrtLinCombination(z)
|
1341
|
-
sage: B = SqrtLinCombination(Rational((8,9))*z**4 + Rational((10,9))*z**2 + Rational((2,9)))
|
1342
|
-
sage: C = SqrtLinCombination(3)
|
1343
|
-
sage: D = SqrtLinCombination(Integer(5))
|
1344
|
-
sage: E = SqrtLinCombination(Rational((6,7)))
|
1345
|
-
|
1346
|
-
sage: A + B
|
1347
|
-
(8/9*z^4 + 10/9*z^2 + z + 2/9) * sqrt(1)
|
1348
|
-
sage: B - E
|
1349
|
-
(8/9*z^4 + 10/9*z^2 - 40/63) * sqrt(1)
|
1350
|
-
sage: A + sqrt(B) * sqrt(B)
|
1351
|
-
(8/9*z^4 + 10/9*z^2 + z + 2/9) * sqrt(1)
|
1352
|
-
sage: A + sqrt(B) * sqrt(B) + C == A + B + C
|
1353
|
-
True
|
1354
|
-
sage: A / E
|
1355
|
-
(7/6*z) * sqrt(1)
|
1356
|
-
sage: B / A.sqrt()
|
1357
|
-
(128/207*z^5 + 376/207*z^3 + 302/207*z) * sqrt(z)
|
1358
|
-
sage: B / (D * A.sqrt())
|
1359
|
-
(128/1035*z^5 + 376/1035*z^3 + 302/1035*z) * sqrt(z)
|
1360
|
-
sage: RIF = RealIntervalField(100)
|
1361
|
-
sage: RIF(B.sqrt() + E.sqrt())
|
1362
|
-
1.73967449622339881238507307209?
|
1363
|
-
sage: A - B == 0
|
1364
|
-
False
|
1365
|
-
sage: (A + B).sqrt()
|
1366
|
-
(1) * sqrt(8/9*z^4 + 10/9*z^2 + z + 2/9)
|
1367
|
-
sage: 3 * A.sqrt() + (4 * B).sqrt() + C + 8 == (9 * A).sqrt() + 2 * B.sqrt() + (C * C).sqrt() + 11 - 3
|
1368
|
-
True
|
1369
|
-
</pre></div>
|
1370
|
-
</div>
|
1371
|
-
<dl class="py method">
|
1372
|
-
<dt class="sig sig-object py" id="snappy.verify.squareExtensions.SqrtLinCombination.sign">
|
1373
|
-
<span class="sig-name descname"><span class="pre">sign</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.squareExtensions.SqrtLinCombination.sign" title="Permalink to this definition"></a></dt>
|
1374
|
-
<dd><p>Returns the +1, 0, -1 depending on whether the value is positive,
|
1375
|
-
zero or negative. For the zero case, exact arithmetic is used to
|
1376
|
-
certify. Otherwise, interval arithmetic is used.</p>
|
1377
|
-
</dd></dl>
|
1378
|
-
|
1379
|
-
<dl class="py method">
|
1380
|
-
<dt class="sig sig-object py" id="snappy.verify.squareExtensions.SqrtLinCombination.sign_with_interval">
|
1381
|
-
<span class="sig-name descname"><span class="pre">sign_with_interval</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.squareExtensions.SqrtLinCombination.sign_with_interval" title="Permalink to this definition"></a></dt>
|
1382
|
-
<dd><p>Similar to sign, but for the non-zero case, also return the interval
|
1383
|
-
certifying the sign - useful for debugging.</p>
|
1384
|
-
</dd></dl>
|
1385
|
-
|
1386
|
-
</dd></dl>
|
1387
|
-
|
1388
|
-
<dl class="py class">
|
1389
|
-
<dt class="sig sig-object py" id="snappy.verify.squareExtensions.ComplexSqrtLinCombination">
|
1390
|
-
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.squareExtensions.</span></span><span class="sig-name descname"><span class="pre">ComplexSqrtLinCombination</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">real</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">imag</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">embed_cache</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.squareExtensions.ComplexSqrtLinCombination" title="Permalink to this definition"></a></dt>
|
1391
|
-
<dd><p>A pair (real, imag) of SqrtLinCombinations representing the complex number
|
1392
|
-
real + imag * I. Supports <code class="docutils literal notranslate"><span class="pre">real()</span></code>, <code class="docutils literal notranslate"><span class="pre">imag()</span></code>, <code class="docutils literal notranslate"><span class="pre">+</span></code>, <code class="docutils literal notranslate"><span class="pre">-</span></code>, <code class="docutils literal notranslate"><span class="pre">*</span></code>, <code class="docutils literal notranslate"><span class="pre">/</span></code>,
|
1393
|
-
<code class="docutils literal notranslate"><span class="pre">abs</span></code>, <code class="docutils literal notranslate"><span class="pre">conjugate()</span></code> and <code class="docutils literal notranslate"><span class="pre">==</span></code>.</p>
|
1394
|
-
<dl class="py method">
|
1395
|
-
<dt class="sig sig-object py" id="snappy.verify.squareExtensions.ComplexSqrtLinCombination.imag">
|
1396
|
-
<span class="sig-name descname"><span class="pre">imag</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.squareExtensions.ComplexSqrtLinCombination.imag" title="Permalink to this definition"></a></dt>
|
1397
|
-
<dd><p>Imaginary part.</p>
|
1398
|
-
</dd></dl>
|
1399
|
-
|
1400
|
-
<dl class="py method">
|
1401
|
-
<dt class="sig sig-object py" id="snappy.verify.squareExtensions.ComplexSqrtLinCombination.real">
|
1402
|
-
<span class="sig-name descname"><span class="pre">real</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.squareExtensions.ComplexSqrtLinCombination.real" title="Permalink to this definition"></a></dt>
|
1403
|
-
<dd><p>Real part.</p>
|
1404
|
-
</dd></dl>
|
1405
|
-
|
1406
|
-
</dd></dl>
|
1407
|
-
|
1408
|
-
</section>
|
1409
|
-
<section id="module-snappy.verify.exceptions">
|
1410
|
-
<span id="exceptions"></span><h2>Exceptions<a class="headerlink" href="#module-snappy.verify.exceptions" title="Permalink to this heading"></a></h2>
|
1411
|
-
<p>All final exceptions are deriving from two base classes:</p>
|
1412
|
-
<ul class="simple">
|
1413
|
-
<li><p>a subclass of VerifyErrorBase to indicate whether a numerical or exact
|
1414
|
-
verification failed</p></li>
|
1415
|
-
<li><p>a subclass of EquationType to indicate the type of equation of
|
1416
|
-
inequality for which the verification failed.</p></li>
|
1417
|
-
</ul>
|
1418
|
-
<p>Intermediate subclasses (those without __init__) are not supposed to be
|
1419
|
-
raised.</p>
|
1420
|
-
<p>The hierarchy is as follows:</p>
|
1421
|
-
<ul class="simple">
|
1422
|
-
<li><p>VerifyErrorBase(RuntimeError)</p>
|
1423
|
-
<ul>
|
1424
|
-
<li><p>NumericalVerifyError</p>
|
1425
|
-
<ul>
|
1426
|
-
<li><p>InequalityNumericalVerifyError</p></li>
|
1427
|
-
<li><p>LogLiftNumericalVerifyError</p></li>
|
1428
|
-
</ul>
|
1429
|
-
</li>
|
1430
|
-
<li><p>ExactVerifyError</p>
|
1431
|
-
<ul>
|
1432
|
-
<li><p>IsZeroExactVerifyError</p></li>
|
1433
|
-
</ul>
|
1434
|
-
</li>
|
1435
|
-
</ul>
|
1436
|
-
</li>
|
1437
|
-
<li><p>EquationType</p>
|
1438
|
-
<ul>
|
1439
|
-
<li><p>EdgeEquationType</p>
|
1440
|
-
<ul>
|
1441
|
-
<li><p>EdgeEquationExactVerifyError</p></li>
|
1442
|
-
<li><p>EdgeEquationLogLiftNumericalVerifyError</p></li>
|
1443
|
-
</ul>
|
1444
|
-
</li>
|
1445
|
-
<li><p>CuspConsistencyType</p>
|
1446
|
-
<ul>
|
1447
|
-
<li><p>CuspEquationType</p>
|
1448
|
-
<ul>
|
1449
|
-
<li><p>CuspEquationExactVerifyError</p></li>
|
1450
|
-
<li><p>CuspEquationLogLiftNumericalVerifyError</p></li>
|
1451
|
-
</ul>
|
1452
|
-
</li>
|
1453
|
-
<li><p>CuspDevelopmentType</p>
|
1454
|
-
<ul>
|
1455
|
-
<li><p>CuspDevelopmentTypeExactVerifyError</p></li>
|
1456
|
-
</ul>
|
1457
|
-
</li>
|
1458
|
-
</ul>
|
1459
|
-
</li>
|
1460
|
-
<li><p>TiltType</p>
|
1461
|
-
<ul>
|
1462
|
-
<li><p>TiltInequalityNumericalVerifyError</p>
|
1463
|
-
<ul>
|
1464
|
-
<li><p>TiltProvenPositiveNumericalVerifyError</p></li>
|
1465
|
-
</ul>
|
1466
|
-
</li>
|
1467
|
-
<li><p>TiltIsZeroExactVerifyError</p></li>
|
1468
|
-
</ul>
|
1469
|
-
</li>
|
1470
|
-
<li><p>ShapeType</p>
|
1471
|
-
<ul>
|
1472
|
-
<li><p>ShapePositiveImaginaryPartNumericalVerifyError</p></li>
|
1473
|
-
</ul>
|
1474
|
-
</li>
|
1475
|
-
<li><p>ConsistencyWithSnapPeaType</p>
|
1476
|
-
<ul>
|
1477
|
-
<li><p>ConsistencyWithSnapPeaNumericalVerifyError</p></li>
|
1478
|
-
</ul>
|
1479
|
-
</li>
|
1480
|
-
</ul>
|
1481
|
-
</li>
|
1482
|
-
</ul>
|
1483
|
-
<dl class="py exception">
|
1484
|
-
<dt class="sig sig-object py" id="snappy.verify.exceptions.ConsistencyWithSnapPeaNumericalVerifyError">
|
1485
|
-
<em class="property"><span class="pre">exception</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">ConsistencyWithSnapPeaNumericalVerifyError</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">snappea_value</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.exceptions.ConsistencyWithSnapPeaNumericalVerifyError" title="Permalink to this definition"></a></dt>
|
1486
|
-
<dd><p>Exception raised when there is a significant numerical difference
|
1487
|
-
between the values computed by the SnapPea kernel and by this module
|
1488
|
-
for a given quantity.</p>
|
1489
|
-
</dd></dl>
|
1490
|
-
|
1491
|
-
<dl class="py class">
|
1492
|
-
<dt class="sig sig-object py" id="snappy.verify.exceptions.ConsistencyWithSnapPeaType">
|
1493
|
-
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">ConsistencyWithSnapPeaType</span></span><a class="headerlink" href="#snappy.verify.exceptions.ConsistencyWithSnapPeaType" title="Permalink to this definition"></a></dt>
|
1494
|
-
<dd><p>A base class for exceptions raised when there is a difference
|
1495
|
-
between the values computed by the SnapPea kernel and by this module
|
1496
|
-
for a given quantity.</p>
|
1497
|
-
</dd></dl>
|
1498
|
-
|
1499
|
-
<dl class="py class">
|
1500
|
-
<dt class="sig sig-object py" id="snappy.verify.exceptions.CuspConsistencyType">
|
1501
|
-
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">CuspConsistencyType</span></span><a class="headerlink" href="#snappy.verify.exceptions.CuspConsistencyType" title="Permalink to this definition"></a></dt>
|
1502
|
-
<dd><p>A base class indicating that verificatin of an equation involving a cusp
|
1503
|
-
failed.</p>
|
1504
|
-
</dd></dl>
|
1505
|
-
|
1506
|
-
<dl class="py exception">
|
1507
|
-
<dt class="sig sig-object py" id="snappy.verify.exceptions.CuspDevelopmentExactVerifyError">
|
1508
|
-
<em class="property"><span class="pre">exception</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">CuspDevelopmentExactVerifyError</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">value2</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.exceptions.CuspDevelopmentExactVerifyError" title="Permalink to this definition"></a></dt>
|
1509
|
-
<dd><p>Raised when finding a consistent assignment of side lengths to the
|
1510
|
-
Euclidean Horotriangles to form a Euclidean Horotorus for a cusp failed
|
1511
|
-
using exact arithmetic.</p>
|
1512
|
-
</dd></dl>
|
1513
|
-
|
1514
|
-
<dl class="py class">
|
1515
|
-
<dt class="sig sig-object py" id="snappy.verify.exceptions.CuspDevelopmentType">
|
1516
|
-
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">CuspDevelopmentType</span></span><a class="headerlink" href="#snappy.verify.exceptions.CuspDevelopmentType" title="Permalink to this definition"></a></dt>
|
1517
|
-
<dd><p>A base class indicating that there was a failure to find a consistent
|
1518
|
-
assignment of side lengths to the Euclidean Horotriangles to form a
|
1519
|
-
Euclidean Horotorus for a cusp.</p>
|
1520
|
-
</dd></dl>
|
1521
|
-
|
1522
|
-
<dl class="py exception">
|
1523
|
-
<dt class="sig sig-object py" id="snappy.verify.exceptions.CuspEquationExactVerifyError">
|
1524
|
-
<em class="property"><span class="pre">exception</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">CuspEquationExactVerifyError</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">expected_value</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.exceptions.CuspEquationExactVerifyError" title="Permalink to this definition"></a></dt>
|
1525
|
-
<dd><p>Exception for failed verification of a polynomial cusp gluing equation
|
1526
|
-
using exact arithmetics.</p>
|
1527
|
-
</dd></dl>
|
1528
|
-
|
1529
|
-
<dl class="py exception">
|
1530
|
-
<dt class="sig sig-object py" id="snappy.verify.exceptions.CuspEquationLogLiftNumericalVerifyError">
|
1531
|
-
<em class="property"><span class="pre">exception</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">CuspEquationLogLiftNumericalVerifyError</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">expected_value</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.exceptions.CuspEquationLogLiftNumericalVerifyError" title="Permalink to this definition"></a></dt>
|
1532
|
-
<dd><p>Exception for failed numerical verification that a logarithmic cusp
|
1533
|
-
equation has error bound by epsilon.</p>
|
1534
|
-
</dd></dl>
|
1535
|
-
|
1536
|
-
<dl class="py class">
|
1537
|
-
<dt class="sig sig-object py" id="snappy.verify.exceptions.CuspEquationType">
|
1538
|
-
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">CuspEquationType</span></span><a class="headerlink" href="#snappy.verify.exceptions.CuspEquationType" title="Permalink to this definition"></a></dt>
|
1539
|
-
<dd><p>A base class indicating that a cusp gluing equation (involving the
|
1540
|
-
shapes) failed.</p>
|
1541
|
-
</dd></dl>
|
1542
|
-
|
1543
|
-
<dl class="py exception">
|
1544
|
-
<dt class="sig sig-object py" id="snappy.verify.exceptions.EdgeEquationExactVerifyError">
|
1545
|
-
<em class="property"><span class="pre">exception</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">EdgeEquationExactVerifyError</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.exceptions.EdgeEquationExactVerifyError" title="Permalink to this definition"></a></dt>
|
1546
|
-
<dd><p>Exception for failed verification of a polynomial edge equation
|
1547
|
-
using exact arithmetics.</p>
|
1548
|
-
</dd></dl>
|
1549
|
-
|
1550
|
-
<dl class="py exception">
|
1551
|
-
<dt class="sig sig-object py" id="snappy.verify.exceptions.EdgeEquationLogLiftNumericalVerifyError">
|
1552
|
-
<em class="property"><span class="pre">exception</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">EdgeEquationLogLiftNumericalVerifyError</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.exceptions.EdgeEquationLogLiftNumericalVerifyError" title="Permalink to this definition"></a></dt>
|
1553
|
-
<dd><p>Exception for failed numerical verification that a logarithmic edge
|
1554
|
-
equation has error bound by epsilon.</p>
|
1555
|
-
</dd></dl>
|
1556
|
-
|
1557
|
-
<dl class="py class">
|
1558
|
-
<dt class="sig sig-object py" id="snappy.verify.exceptions.EdgeEquationType">
|
1559
|
-
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">EdgeEquationType</span></span><a class="headerlink" href="#snappy.verify.exceptions.EdgeEquationType" title="Permalink to this definition"></a></dt>
|
1560
|
-
<dd><p>A base class indicating that an edge equation could not be verified.</p>
|
1561
|
-
</dd></dl>
|
1562
|
-
|
1563
|
-
<dl class="py class">
|
1564
|
-
<dt class="sig sig-object py" id="snappy.verify.exceptions.EquationType">
|
1565
|
-
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">EquationType</span></span><a class="headerlink" href="#snappy.verify.exceptions.EquationType" title="Permalink to this definition"></a></dt>
|
1566
|
-
<dd><p>A base class to derive subclasses which indicate what kind of
|
1567
|
-
equation failed to be verified.</p>
|
1568
|
-
</dd></dl>
|
1569
|
-
|
1570
|
-
<dl class="py exception">
|
1571
|
-
<dt class="sig sig-object py" id="snappy.verify.exceptions.ExactVerifyError">
|
1572
|
-
<em class="property"><span class="pre">exception</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">ExactVerifyError</span></span><a class="headerlink" href="#snappy.verify.exceptions.ExactVerifyError" title="Permalink to this definition"></a></dt>
|
1573
|
-
<dd><p>The base for all exceptions resulting from a failed verification of an
|
1574
|
-
equation using exact arithmetics.</p>
|
1575
|
-
</dd></dl>
|
1576
|
-
|
1577
|
-
<dl class="py exception">
|
1578
|
-
<dt class="sig sig-object py" id="snappy.verify.exceptions.InequalityNumericalVerifyError">
|
1579
|
-
<em class="property"><span class="pre">exception</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">InequalityNumericalVerifyError</span></span><a class="headerlink" href="#snappy.verify.exceptions.InequalityNumericalVerifyError" title="Permalink to this definition"></a></dt>
|
1580
|
-
<dd><p>The base for all exceptions resulting from a failed numerical
|
1581
|
-
verification of an inequality (typically by interval arithmetics).</p>
|
1582
|
-
</dd></dl>
|
1583
|
-
|
1584
|
-
<dl class="py exception">
|
1585
|
-
<dt class="sig sig-object py" id="snappy.verify.exceptions.IsZeroExactVerifyError">
|
1586
|
-
<em class="property"><span class="pre">exception</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">IsZeroExactVerifyError</span></span><a class="headerlink" href="#snappy.verify.exceptions.IsZeroExactVerifyError" title="Permalink to this definition"></a></dt>
|
1587
|
-
<dd><p>The base for all exceptions resulting from verifying that a desired
|
1588
|
-
quantity is zero using exact arithmetics.</p>
|
1589
|
-
</dd></dl>
|
1590
|
-
|
1591
|
-
<dl class="py exception">
|
1592
|
-
<dt class="sig sig-object py" id="snappy.verify.exceptions.LogLiftNumericalVerifyError">
|
1593
|
-
<em class="property"><span class="pre">exception</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">LogLiftNumericalVerifyError</span></span><a class="headerlink" href="#snappy.verify.exceptions.LogLiftNumericalVerifyError" title="Permalink to this definition"></a></dt>
|
1594
|
-
<dd><p>To verify a logarithmic gluing equation, the verify module will usually
|
1595
|
-
first verify the corresponding polynomial gluing equation.
|
1596
|
-
This means that the logarithmic gluing equation will be fulfilled up
|
1597
|
-
to a multiple of 2 Pi I.
|
1598
|
-
It then computes the logarithms and numerically checks that the result
|
1599
|
-
is close (by some epsilon) to the right value. Because we already know
|
1600
|
-
that the difference is a multiple of 2 Pi I, checking closeness is enough.</p>
|
1601
|
-
<p>This exception is supposed to be raised if the polynomial gluing equations
|
1602
|
-
have passed but checking the logarithmic equation is epsilon-close has
|
1603
|
-
failed.</p>
|
1604
|
-
</dd></dl>
|
1605
|
-
|
1606
|
-
<dl class="py exception">
|
1607
|
-
<dt class="sig sig-object py" id="snappy.verify.exceptions.NumericalVerifyError">
|
1608
|
-
<em class="property"><span class="pre">exception</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">NumericalVerifyError</span></span><a class="headerlink" href="#snappy.verify.exceptions.NumericalVerifyError" title="Permalink to this definition"></a></dt>
|
1609
|
-
<dd><p>The base for all exceptions resulting from a failed numerical
|
1610
|
-
verification of an equality (using some epsilon) or inequality
|
1611
|
-
(typically by interval arithmetics).</p>
|
1612
|
-
</dd></dl>
|
1613
|
-
|
1614
|
-
<dl class="py exception">
|
1615
|
-
<dt class="sig sig-object py" id="snappy.verify.exceptions.ShapePositiveImaginaryPartNumericalVerifyError">
|
1616
|
-
<em class="property"><span class="pre">exception</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">ShapePositiveImaginaryPartNumericalVerifyError</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.exceptions.ShapePositiveImaginaryPartNumericalVerifyError" title="Permalink to this definition"></a></dt>
|
1617
|
-
<dd><p>Failed numerical verification of a shape having positive imaginary part.</p>
|
1618
|
-
</dd></dl>
|
1619
|
-
|
1620
|
-
<dl class="py class">
|
1621
|
-
<dt class="sig sig-object py" id="snappy.verify.exceptions.ShapeType">
|
1622
|
-
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">ShapeType</span></span><a class="headerlink" href="#snappy.verify.exceptions.ShapeType" title="Permalink to this definition"></a></dt>
|
1623
|
-
<dd><p>Base class for failed verification of legal shapes.</p>
|
1624
|
-
</dd></dl>
|
1625
|
-
|
1626
|
-
<dl class="py exception">
|
1627
|
-
<dt class="sig sig-object py" id="snappy.verify.exceptions.TiltInequalityNumericalVerifyError">
|
1628
|
-
<em class="property"><span class="pre">exception</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">TiltInequalityNumericalVerifyError</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.exceptions.TiltInequalityNumericalVerifyError" title="Permalink to this definition"></a></dt>
|
1629
|
-
<dd><p>Numerically verifying that a tilt is negative has failed.</p>
|
1630
|
-
</dd></dl>
|
1631
|
-
|
1632
|
-
<dl class="py exception">
|
1633
|
-
<dt class="sig sig-object py" id="snappy.verify.exceptions.TiltIsZeroExactVerifyError">
|
1634
|
-
<em class="property"><span class="pre">exception</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">TiltIsZeroExactVerifyError</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.exceptions.TiltIsZeroExactVerifyError" title="Permalink to this definition"></a></dt>
|
1635
|
-
<dd><p>Verifying that a tilt is zero has failed using exact arithmetic.</p>
|
1636
|
-
</dd></dl>
|
1637
|
-
|
1638
|
-
<dl class="py exception">
|
1639
|
-
<dt class="sig sig-object py" id="snappy.verify.exceptions.TiltProvenPositiveNumericalVerifyError">
|
1640
|
-
<em class="property"><span class="pre">exception</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">TiltProvenPositiveNumericalVerifyError</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.exceptions.TiltProvenPositiveNumericalVerifyError" title="Permalink to this definition"></a></dt>
|
1641
|
-
<dd><p>Numerically verifying that a tilt is negative has not only failed, we
|
1642
|
-
proved that the tilt is positive and thus that this cannot be a
|
1643
|
-
proto-canonical triangulation.</p>
|
1644
|
-
</dd></dl>
|
1645
|
-
|
1646
|
-
<dl class="py class">
|
1647
|
-
<dt class="sig sig-object py" id="snappy.verify.exceptions.TiltType">
|
1648
|
-
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">TiltType</span></span><a class="headerlink" href="#snappy.verify.exceptions.TiltType" title="Permalink to this definition"></a></dt>
|
1649
|
-
<dd><p>A base class relating to tilts.</p>
|
1650
|
-
</dd></dl>
|
1651
|
-
|
1652
|
-
<dl class="py exception">
|
1653
|
-
<dt class="sig sig-object py" id="snappy.verify.exceptions.VerifyErrorBase">
|
1654
|
-
<em class="property"><span class="pre">exception</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">VerifyErrorBase</span></span><a class="headerlink" href="#snappy.verify.exceptions.VerifyErrorBase" title="Permalink to this definition"></a></dt>
|
1655
|
-
<dd><p>The base for all exceptions related to verification.</p>
|
1656
|
-
</dd></dl>
|
1657
|
-
|
1658
|
-
</section>
|
1659
|
-
</section>
|
1660
|
-
|
1661
|
-
|
1662
|
-
</div>
|
1663
|
-
</div>
|
1664
|
-
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
|
1665
|
-
<a href="verify_canon.html" class="btn btn-neutral float-left" title="Canonical retriangulation and isometry signature" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
|
1666
|
-
<a href="other.html" class="btn btn-neutral float-right" title="Other components" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
|
1667
|
-
</div>
|
1668
|
-
|
1669
|
-
<hr/>
|
1670
|
-
|
1671
|
-
<div role="contentinfo">
|
1672
|
-
<p>© Copyright 2009-2023, by Marc Culler, Nathan Dunfield, Matthias Goerner, Jeffrey Weeks and others.</p>
|
1673
|
-
</div>
|
1674
|
-
|
1675
|
-
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
1676
|
-
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
1677
|
-
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
1678
|
-
|
1679
|
-
|
1680
|
-
</footer>
|
1681
|
-
</div>
|
1682
|
-
</div>
|
1683
|
-
</section>
|
1684
|
-
</div>
|
1685
|
-
<script>
|
1686
|
-
jQuery(function () {
|
1687
|
-
SphinxRtdTheme.Navigation.enable(true);
|
1688
|
-
});
|
1689
|
-
</script>
|
1690
|
-
|
1691
|
-
</body>
|
1
|
+
|
2
|
+
|
3
|
+
<!DOCTYPE html>
|
4
|
+
<html class="writer-html5" lang="en" data-content_root="./">
|
5
|
+
<head>
|
6
|
+
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
7
|
+
|
8
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
9
|
+
<title>Internals of verified computations — SnapPy 3.2 documentation</title>
|
10
|
+
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=fa44fd50" />
|
11
|
+
<link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=e59714d7" />
|
12
|
+
<link rel="stylesheet" type="text/css" href="_static/snappy_sphinx_rtd_theme.css?v=1b8ec2a8" />
|
13
|
+
|
14
|
+
|
15
|
+
<link rel="shortcut icon" href="_static/SnapPy.ico"/>
|
16
|
+
<script src="_static/jquery.js?v=5d32c60e"></script>
|
17
|
+
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
18
|
+
<script src="_static/documentation_options.js?v=828ea960"></script>
|
19
|
+
<script src="_static/doctools.js?v=9a2dae69"></script>
|
20
|
+
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
21
|
+
<script src="_static/js/theme.js"></script>
|
22
|
+
<link rel="index" title="Index" href="genindex.html" />
|
23
|
+
<link rel="search" title="Search" href="search.html" />
|
24
|
+
<link rel="next" title="Other components" href="other.html" />
|
25
|
+
<link rel="prev" title="Verified computations" href="verify.html" />
|
26
|
+
</head>
|
27
|
+
|
28
|
+
<body class="wy-body-for-nav">
|
29
|
+
<div class="wy-grid-for-nav">
|
30
|
+
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
31
|
+
<div class="wy-side-scroll">
|
32
|
+
<div class="wy-side-nav-search" >
|
33
|
+
|
34
|
+
|
35
|
+
|
36
|
+
<a href="index.html" class="icon icon-home">
|
37
|
+
SnapPy
|
38
|
+
<img src="_static/SnapPy-horizontal-128.png" class="logo" alt="Logo"/>
|
39
|
+
</a>
|
40
|
+
<div role="search">
|
41
|
+
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
|
42
|
+
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
|
43
|
+
<input type="hidden" name="check_keywords" value="yes" />
|
44
|
+
<input type="hidden" name="area" value="default" />
|
45
|
+
</form>
|
46
|
+
</div>
|
47
|
+
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
48
|
+
<ul class="current">
|
49
|
+
<li class="toctree-l1"><a class="reference internal" href="installing.html">Installing SnapPy</a></li>
|
50
|
+
<li class="toctree-l1"><a class="reference internal" href="screenshots.html">Screenshots: SnapPy in action</a></li>
|
51
|
+
<li class="toctree-l1"><a class="reference internal" href="tutorial.html">Tutorial</a></li>
|
52
|
+
<li class="toctree-l1"><a class="reference internal" href="snappy.html">The snappy module and its classes</a></li>
|
53
|
+
<li class="toctree-l1"><a class="reference internal" href="plink.html">Using SnapPy’s link editor</a></li>
|
54
|
+
<li class="toctree-l1"><a class="reference internal" href="spherogram.html">Links: planar diagrams and invariants</a></li>
|
55
|
+
<li class="toctree-l1"><a class="reference internal" href="snap.html">Number theory of hyperbolic 3-manifolds</a></li>
|
56
|
+
<li class="toctree-l1 current"><a class="reference internal" href="verify.html">Verified computations</a><ul class="current">
|
57
|
+
<li class="toctree-l2"><a class="reference internal" href="verify.html#introduction">Introduction</a></li>
|
58
|
+
<li class="toctree-l2"><a class="reference internal" href="verify.html#overview">Overview</a></li>
|
59
|
+
<li class="toctree-l2 current"><a class="reference internal" href="verify.html#verified-computation-topics">Verified computation topics</a><ul class="current">
|
60
|
+
<li class="toctree-l3 current"><a class="current reference internal" href="#">Internals of verified computations</a><ul>
|
61
|
+
<li class="toctree-l4"><a class="reference internal" href="#naming">Naming</a></li>
|
62
|
+
<li class="toctree-l4"><a class="reference internal" href="#generating-certified-shape-intervals">Generating certified shape intervals</a><ul>
|
63
|
+
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.CertifiedShapesEngine"><code class="docutils literal notranslate"><span class="pre">CertifiedShapesEngine</span></code></a></li>
|
64
|
+
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.IntervalNewtonShapesEngine"><code class="docutils literal notranslate"><span class="pre">IntervalNewtonShapesEngine</span></code></a></li>
|
65
|
+
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.KrawczykShapesEngine"><code class="docutils literal notranslate"><span class="pre">KrawczykShapesEngine</span></code></a></li>
|
66
|
+
</ul>
|
67
|
+
</li>
|
68
|
+
<li class="toctree-l4"><a class="reference internal" href="#verification-of-hyperbolicity">Verification of hyperbolicity</a><ul>
|
69
|
+
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.hyperbolicity.check_logarithmic_gluing_equations_and_positively_oriented_tets"><code class="docutils literal notranslate"><span class="pre">check_logarithmic_gluing_equations_and_positively_oriented_tets()</span></code></a></li>
|
70
|
+
</ul>
|
71
|
+
</li>
|
72
|
+
<li class="toctree-l4"><a class="reference internal" href="#verified-canonical-cell-decompositions">Verified canonical cell decompositions</a><ul>
|
73
|
+
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.canonical.interval_checked_canonical_triangulation"><code class="docutils literal notranslate"><span class="pre">interval_checked_canonical_triangulation()</span></code></a></li>
|
74
|
+
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.canonical.exactly_checked_canonical_retriangulation"><code class="docutils literal notranslate"><span class="pre">exactly_checked_canonical_retriangulation()</span></code></a></li>
|
75
|
+
</ul>
|
76
|
+
</li>
|
77
|
+
<li class="toctree-l4"><a class="reference internal" href="#module-snappy.verify.square_extensions">Exact computations for cusp cross sections</a><ul>
|
78
|
+
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.square_extensions.find_shapes_as_complex_sqrt_lin_combinations"><code class="docutils literal notranslate"><span class="pre">find_shapes_as_complex_sqrt_lin_combinations()</span></code></a></li>
|
79
|
+
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.square_extensions.SqrtLinCombination"><code class="docutils literal notranslate"><span class="pre">SqrtLinCombination</span></code></a></li>
|
80
|
+
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.square_extensions.ComplexSqrtLinCombination"><code class="docutils literal notranslate"><span class="pre">ComplexSqrtLinCombination</span></code></a></li>
|
81
|
+
</ul>
|
82
|
+
</li>
|
83
|
+
<li class="toctree-l4"><a class="reference internal" href="#module-snappy.verify.exceptions">Exceptions</a><ul>
|
84
|
+
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.exceptions.CuspConsistencyType"><code class="docutils literal notranslate"><span class="pre">CuspConsistencyType</span></code></a></li>
|
85
|
+
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.exceptions.CuspEquationExactVerifyError"><code class="docutils literal notranslate"><span class="pre">CuspEquationExactVerifyError</span></code></a></li>
|
86
|
+
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.exceptions.CuspEquationLogLiftNumericalVerifyError"><code class="docutils literal notranslate"><span class="pre">CuspEquationLogLiftNumericalVerifyError</span></code></a></li>
|
87
|
+
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.exceptions.CuspEquationType"><code class="docutils literal notranslate"><span class="pre">CuspEquationType</span></code></a></li>
|
88
|
+
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.exceptions.EdgeEquationExactVerifyError"><code class="docutils literal notranslate"><span class="pre">EdgeEquationExactVerifyError</span></code></a></li>
|
89
|
+
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.exceptions.EdgeEquationLogLiftNumericalVerifyError"><code class="docutils literal notranslate"><span class="pre">EdgeEquationLogLiftNumericalVerifyError</span></code></a></li>
|
90
|
+
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.exceptions.EdgeEquationType"><code class="docutils literal notranslate"><span class="pre">EdgeEquationType</span></code></a></li>
|
91
|
+
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.exceptions.EquationType"><code class="docutils literal notranslate"><span class="pre">EquationType</span></code></a></li>
|
92
|
+
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.exceptions.ExactVerifyError"><code class="docutils literal notranslate"><span class="pre">ExactVerifyError</span></code></a></li>
|
93
|
+
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.exceptions.InequalityNumericalVerifyError"><code class="docutils literal notranslate"><span class="pre">InequalityNumericalVerifyError</span></code></a></li>
|
94
|
+
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.exceptions.IsZeroExactVerifyError"><code class="docutils literal notranslate"><span class="pre">IsZeroExactVerifyError</span></code></a></li>
|
95
|
+
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.exceptions.LogLiftNumericalVerifyError"><code class="docutils literal notranslate"><span class="pre">LogLiftNumericalVerifyError</span></code></a></li>
|
96
|
+
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.exceptions.NumericalVerifyError"><code class="docutils literal notranslate"><span class="pre">NumericalVerifyError</span></code></a></li>
|
97
|
+
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.exceptions.ShapePositiveImaginaryPartNumericalVerifyError"><code class="docutils literal notranslate"><span class="pre">ShapePositiveImaginaryPartNumericalVerifyError</span></code></a></li>
|
98
|
+
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.exceptions.ShapeType"><code class="docutils literal notranslate"><span class="pre">ShapeType</span></code></a></li>
|
99
|
+
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.exceptions.TiltInequalityNumericalVerifyError"><code class="docutils literal notranslate"><span class="pre">TiltInequalityNumericalVerifyError</span></code></a></li>
|
100
|
+
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.exceptions.TiltIsZeroExactVerifyError"><code class="docutils literal notranslate"><span class="pre">TiltIsZeroExactVerifyError</span></code></a></li>
|
101
|
+
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.exceptions.TiltProvenPositiveNumericalVerifyError"><code class="docutils literal notranslate"><span class="pre">TiltProvenPositiveNumericalVerifyError</span></code></a></li>
|
102
|
+
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.exceptions.TiltType"><code class="docutils literal notranslate"><span class="pre">TiltType</span></code></a></li>
|
103
|
+
<li class="toctree-l5"><a class="reference internal" href="#snappy.verify.exceptions.VerifyErrorBase"><code class="docutils literal notranslate"><span class="pre">VerifyErrorBase</span></code></a></li>
|
104
|
+
</ul>
|
105
|
+
</li>
|
106
|
+
</ul>
|
107
|
+
</li>
|
108
|
+
</ul>
|
109
|
+
</li>
|
110
|
+
</ul>
|
111
|
+
</li>
|
112
|
+
<li class="toctree-l1"><a class="reference internal" href="other.html">Other components</a></li>
|
113
|
+
<li class="toctree-l1"><a class="reference internal" href="news.html">News</a></li>
|
114
|
+
<li class="toctree-l1"><a class="reference internal" href="credits.html">Credits</a></li>
|
115
|
+
<li class="toctree-l1"><a class="reference internal" href="bugs.html">Reporting bugs and other problems</a></li>
|
116
|
+
<li class="toctree-l1"><a class="reference internal" href="todo.html">To Do List</a></li>
|
117
|
+
<li class="toctree-l1"><a class="reference internal" href="development.html">Development Basics</a></li>
|
118
|
+
</ul>
|
119
|
+
|
120
|
+
</div>
|
121
|
+
</div>
|
122
|
+
</nav>
|
123
|
+
|
124
|
+
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
125
|
+
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
126
|
+
<a href="index.html">SnapPy</a>
|
127
|
+
</nav>
|
128
|
+
|
129
|
+
<div class="wy-nav-content">
|
130
|
+
<div class="rst-content">
|
131
|
+
<div role="navigation" aria-label="Page navigation">
|
132
|
+
<ul class="wy-breadcrumbs">
|
133
|
+
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
|
134
|
+
<li class="breadcrumb-item"><a href="verify.html">Verified computations</a></li>
|
135
|
+
<li class="breadcrumb-item active">Internals of verified computations</li>
|
136
|
+
<li class="wy-breadcrumbs-aside">
|
137
|
+
</li>
|
138
|
+
</ul>
|
139
|
+
<hr/>
|
140
|
+
</div>
|
141
|
+
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
142
|
+
<div itemprop="articleBody">
|
143
|
+
|
144
|
+
<section id="internals-of-verified-computations">
|
145
|
+
<h1>Internals of verified computations<a class="headerlink" href="#internals-of-verified-computations" title="Link to this heading"></a></h1>
|
146
|
+
<section id="naming">
|
147
|
+
<h2>Naming<a class="headerlink" href="#naming" title="Link to this heading"></a></h2>
|
148
|
+
<p>The names of methods containing <code class="docutils literal notranslate"><span class="pre">check</span></code> will raise an exception if
|
149
|
+
the desired property cannot be certified. There are different types of
|
150
|
+
Exceptions to indicate how the certification failed. This type can be
|
151
|
+
used by other methods to perform some action such as changing the
|
152
|
+
triangulation or increasing precision or to give up.</p>
|
153
|
+
<p>The user-facing methods have names starting with <code class="docutils literal notranslate"><span class="pre">verify</span></code> or
|
154
|
+
<code class="docutils literal notranslate"><span class="pre">verified</span></code> and will fail more gracefully returning <code class="docutils literal notranslate"><span class="pre">False</span></code> or
|
155
|
+
<code class="docutils literal notranslate"><span class="pre">None</span></code> in such a case.</p>
|
156
|
+
</section>
|
157
|
+
<section id="generating-certified-shape-intervals">
|
158
|
+
<h2>Generating certified shape intervals<a class="headerlink" href="#generating-certified-shape-intervals" title="Link to this heading"></a></h2>
|
159
|
+
<p>The recommended way to obtain certified intervals for the shapes is via
|
160
|
+
<code class="docutils literal notranslate"><span class="pre">manifold.tetrahedra_shapes(intervals=True)</span></code> as <a class="reference internal" href="verify.html"><span class="doc">described
|
161
|
+
earlier</span></a>. Here we document the <code class="docutils literal notranslate"><span class="pre">KrawczykShapesEngine</span></code> and
|
162
|
+
<code class="docutils literal notranslate"><span class="pre">IntervalNewtonShapesEngine</span></code> which is implemented internally to
|
163
|
+
generate the intervals. It is of interest for those users who want to
|
164
|
+
understand the underlying interval math and experiment with the Newton
|
165
|
+
interval method or the Krawczyk test. <code class="docutils literal notranslate"><span class="pre">CertifiedShapesEngine</span></code> is an
|
166
|
+
alias of either <code class="docutils literal notranslate"><span class="pre">KrawczykShapesEngine</span></code> or
|
167
|
+
<code class="docutils literal notranslate"><span class="pre">IntervalNewtonShapesEngine</span></code> to determine the default method used by
|
168
|
+
verify.</p>
|
169
|
+
<dl class="py attribute" id="module-snappy.verify">
|
170
|
+
<dt class="sig sig-object py" id="snappy.verify.CertifiedShapesEngine">
|
171
|
+
<span class="sig-prename descclassname"><span class="pre">snappy.verify.</span></span><span class="sig-name descname"><span class="pre">CertifiedShapesEngine</span></span><a class="headerlink" href="#snappy.verify.CertifiedShapesEngine" title="Link to this definition"></a></dt>
|
172
|
+
<dd><p>alias of <a class="reference internal" href="#snappy.verify.KrawczykShapesEngine" title="snappy.verify.krawczyk_shapes_engine.KrawczykShapesEngine"><code class="xref py py-class docutils literal notranslate"><span class="pre">KrawczykShapesEngine</span></code></a></p>
|
173
|
+
</dd></dl>
|
174
|
+
|
175
|
+
<dl class="py class">
|
176
|
+
<dt class="sig sig-object py" id="snappy.verify.IntervalNewtonShapesEngine">
|
177
|
+
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.</span></span><span class="sig-name descname"><span class="pre">IntervalNewtonShapesEngine</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">M</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">initial_shapes</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bits_prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">dec_prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.IntervalNewtonShapesEngine" title="Link to this definition"></a></dt>
|
178
|
+
<dd><p>An engine that is initialized with an approximated candidate solution to
|
179
|
+
the rectangular gluing equations and produces intervals certified to
|
180
|
+
contain a true solution. After the engine is successfully run, the
|
181
|
+
resulting intervals are stored in certified_shapes which is a vector of
|
182
|
+
elements in a Sage’s ComplexIntervalField.</p>
|
183
|
+
<p>A simple example to obtain certified shape intervals that uses
|
184
|
+
KrawczykShapesEngine or IntervalNewtonShapesEngine under the hood:</p>
|
185
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: from snappy import Manifold
|
186
|
+
sage: M = Manifold("m015")
|
187
|
+
sage: M.tetrahedra_shapes('rect', bits_prec = 80, intervals = True) # doctest: +NUMERIC15 +NORMALIZE_WHITESPACE
|
188
|
+
[0.6623589786223730129805? + 0.5622795120623012438992?*I,
|
189
|
+
0.6623589786223730129805? + 0.5622795120623012438992?*I,
|
190
|
+
0.6623589786223730129805? + 0.5622795120623012438992?*I]
|
191
|
+
</pre></div>
|
192
|
+
</div>
|
193
|
+
<p>Its objective is thus the same as HIKMOT and it is certainly HIKMOT
|
194
|
+
inspired. However, it conceptually differs in that:</p>
|
195
|
+
<ol class="arabic">
|
196
|
+
<li><p>It uses the Newton interval method instead of the Krawczyk
|
197
|
+
test (we implement Gaussian elimination in interval arithmetic to
|
198
|
+
compute the inverse of an interval matrix having interval arithmetic
|
199
|
+
semantics, see mat_solve).</p></li>
|
200
|
+
<li><p>It uses complex numbers in it’s Newton interval method.
|
201
|
+
We simply use Sage’s complex interval type avoiding the need of
|
202
|
+
converting n x n complex matrices into 2n x 2n real matrices as
|
203
|
+
described Section 3.4 of the HIKMOT paper.</p></li>
|
204
|
+
<li><p>We avoid automatic differentiation. We pick an independent set of
|
205
|
+
equations of the following form and try to solve them:</p>
|
206
|
+
<blockquote>
|
207
|
+
<div><p>log(LHS) = 0</p>
|
208
|
+
</div></blockquote>
|
209
|
+
<p>where</p>
|
210
|
+
<blockquote>
|
211
|
+
<div><p>LHS = c * z0^a0 * (1-z0)^b0 * z1^a1 * (1-z1)^b1 * …</p>
|
212
|
+
</div></blockquote>
|
213
|
+
<p>with a, b and c’s as returned by Manifold.gluing_equations(‘rect’).</p>
|
214
|
+
<p>The derivative of log (LHS) with respect to zj is simply given by</p>
|
215
|
+
<blockquote>
|
216
|
+
<div><p>aj/zj - bj/(1-zj)</p>
|
217
|
+
</div></blockquote>
|
218
|
+
<p>and thus no need for automatic differentiation.</p>
|
219
|
+
</li>
|
220
|
+
</ol>
|
221
|
+
<p>In contrast to HIKMOT, we use and return Sage’s native implementation of
|
222
|
+
(complex) interval arithmetic here, which allows for increased interoperability.
|
223
|
+
Another advantage is that Sage supports arbitrary precision. Unfortunately,
|
224
|
+
performance suffers and this implementation is 5-10 times slower than HIKMOT.</p>
|
225
|
+
<p>Here is an example how to explicitly invoke the IntervalNewtonShapesEngine:</p>
|
226
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: shapes = M.tetrahedra_shapes('rect', bits_prec = 80)
|
227
|
+
sage: C = IntervalNewtonShapesEngine(M, shapes, bits_prec = 80)
|
228
|
+
sage: C.expand_until_certified()
|
229
|
+
True
|
230
|
+
sage: C.certified_shapes # doctest: +ELLIPSIS
|
231
|
+
(0.662358978622373012981? + 0.562279512062301243...?*I, 0.66235897862237301298...? + 0.562279512062301243...?*I, 0.66235897862237301298...? + 0.562279512062301243...?*I)
|
232
|
+
</pre></div>
|
233
|
+
</div>
|
234
|
+
<dl class="py method">
|
235
|
+
<dt class="sig sig-object py" id="snappy.verify.IntervalNewtonShapesEngine.certified_newton_iteration">
|
236
|
+
<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">certified_newton_iteration</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">equations</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">shape_intervals</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">point_in_intervals</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">interval_value_at_point</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.IntervalNewtonShapesEngine.certified_newton_iteration" title="Link to this definition"></a></dt>
|
237
|
+
<dd><p>Given shape intervals z, performs a Newton interval iteration N(z)
|
238
|
+
as described in newton_iteration. Returns a pair (boolean, N(z)) where
|
239
|
+
the boolean is True if N(z) is contained in z.</p>
|
240
|
+
<p>If the boolean is True, it is certified that N(z) contains a true
|
241
|
+
solution, e.g., a point for which f is truly zero.</p>
|
242
|
+
<p>See newton_iteration for the other parameters.</p>
|
243
|
+
<p>This follows from Theorem 1 of <a class="reference external" href="http://ww2.ii.uj.edu.pl/~zgliczyn/cap07/krawczyk.pdf">Zgliczynski’s notes</a>.</p>
|
244
|
+
<p>Some examples:</p>
|
245
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="kn">from</span> <span class="nn">snappy</span> <span class="kn">import</span> <span class="n">Manifold</span>
|
246
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">"m019"</span><span class="p">)</span>
|
247
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">C</span> <span class="o">=</span> <span class="n">IntervalNewtonShapesEngine</span><span class="p">(</span><span class="n">M</span><span class="p">,</span> <span class="n">M</span><span class="o">.</span><span class="n">tetrahedra_shapes</span><span class="p">(</span><span class="s1">'rect'</span><span class="p">),</span>
|
248
|
+
<span class="o">...</span> <span class="n">bits_prec</span> <span class="o">=</span> <span class="mi">80</span><span class="p">)</span>
|
249
|
+
</pre></div>
|
250
|
+
</div>
|
251
|
+
<p>Intervals containing the true solution:</p>
|
252
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: from sage.all import vector
|
253
|
+
sage: good_shapes = vector([
|
254
|
+
... C.CIF(C.RIF(0.78055, 0.78056), C.RIF(0.91447, 0.91448)),
|
255
|
+
... C.CIF(C.RIF(0.78055, 0.78056), C.RIF(0.91447, 0.91448)),
|
256
|
+
... C.CIF(C.RIF(0.46002, 0.46003), C.RIF(0.63262, 0.63263))])
|
257
|
+
sage: is_certified, shapes = IntervalNewtonShapesEngine.certified_newton_iteration(C.equations, good_shapes)
|
258
|
+
|
259
|
+
sage: is_certified
|
260
|
+
True
|
261
|
+
sage: shapes # doctest: +ELLIPSIS
|
262
|
+
(0.78055253? + 0.91447366...?*I, 0.7805525...? + 0.9144736...?*I, 0.4600211...? + 0.632624...?*I)
|
263
|
+
</pre></div>
|
264
|
+
</div>
|
265
|
+
<p>This means that a true solution to the rectangular gluing equations is
|
266
|
+
contained in both the given intervals (good_shapes) and the returned
|
267
|
+
intervals (shapes) which are a refinement of the given intervals.</p>
|
268
|
+
<p>Intervals not containing a true solution:</p>
|
269
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="kn">from</span> <span class="nn">sage.all</span> <span class="kn">import</span> <span class="n">vector</span>
|
270
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">bad_shapes</span> <span class="o">=</span> <span class="n">vector</span><span class="p">([</span>
|
271
|
+
<span class="o">...</span> <span class="n">C</span><span class="o">.</span><span class="n">CIF</span><span class="p">(</span><span class="n">C</span><span class="o">.</span><span class="n">RIF</span><span class="p">(</span><span class="mf">0.78054</span><span class="p">,</span> <span class="mf">0.78055</span><span class="p">),</span> <span class="n">C</span><span class="o">.</span><span class="n">RIF</span><span class="p">(</span><span class="mf">0.91447</span><span class="p">,</span> <span class="mf">0.91448</span><span class="p">)),</span>
|
272
|
+
<span class="o">...</span> <span class="n">C</span><span class="o">.</span><span class="n">CIF</span><span class="p">(</span><span class="n">C</span><span class="o">.</span><span class="n">RIF</span><span class="p">(</span><span class="mf">0.78055</span><span class="p">,</span> <span class="mf">0.78056</span><span class="p">),</span> <span class="n">C</span><span class="o">.</span><span class="n">RIF</span><span class="p">(</span><span class="mf">0.91447</span><span class="p">,</span> <span class="mf">0.91448</span><span class="p">)),</span>
|
273
|
+
<span class="o">...</span> <span class="n">C</span><span class="o">.</span><span class="n">CIF</span><span class="p">(</span><span class="n">C</span><span class="o">.</span><span class="n">RIF</span><span class="p">(</span><span class="mf">0.46002</span><span class="p">,</span> <span class="mf">0.46003</span><span class="p">),</span> <span class="n">C</span><span class="o">.</span><span class="n">RIF</span><span class="p">(</span><span class="mf">0.63262</span><span class="p">,</span> <span class="mf">0.63263</span><span class="p">))])</span>
|
274
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">is_certified</span><span class="p">,</span> <span class="n">shapes</span> <span class="o">=</span> <span class="n">IntervalNewtonShapesEngine</span><span class="o">.</span><span class="n">certified_newton_iteration</span><span class="p">(</span><span class="n">C</span><span class="o">.</span><span class="n">equations</span><span class="p">,</span> <span class="n">bad_shapes</span><span class="p">)</span>
|
275
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">is_certified</span>
|
276
|
+
<span class="kc">False</span>
|
277
|
+
</pre></div>
|
278
|
+
</div>
|
279
|
+
</dd></dl>
|
280
|
+
|
281
|
+
<dl class="py method">
|
282
|
+
<dt class="sig sig-object py" id="snappy.verify.IntervalNewtonShapesEngine.expand_until_certified">
|
283
|
+
<span class="sig-name descname"><span class="pre">expand_until_certified</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.IntervalNewtonShapesEngine.expand_until_certified" title="Link to this definition"></a></dt>
|
284
|
+
<dd><p>Try Newton interval iterations, expanding the shape intervals
|
285
|
+
until we can certify they contain a true solution.
|
286
|
+
If succeeded, return True and write certified shapes to
|
287
|
+
certified_shapes.
|
288
|
+
Set verbose = True for printing additional information.</p>
|
289
|
+
</dd></dl>
|
290
|
+
|
291
|
+
<dl class="py method">
|
292
|
+
<dt class="sig sig-object py" id="snappy.verify.IntervalNewtonShapesEngine.interval_vector_is_contained_in">
|
293
|
+
<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">interval_vector_is_contained_in</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">vecA</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">vecB</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.IntervalNewtonShapesEngine.interval_vector_is_contained_in" title="Link to this definition"></a></dt>
|
294
|
+
<dd><p>Given two vectors of intervals, return whether the first one
|
295
|
+
is contained in the second one. Examples:</p>
|
296
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">RIF</span> <span class="o">=</span> <span class="n">RealIntervalField</span><span class="p">(</span><span class="mi">80</span><span class="p">)</span>
|
297
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">CIF</span> <span class="o">=</span> <span class="n">ComplexIntervalField</span><span class="p">(</span><span class="mi">80</span><span class="p">)</span>
|
298
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">box</span> <span class="o">=</span> <span class="n">CIF</span><span class="p">(</span><span class="n">RIF</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">),</span><span class="n">RIF</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">))</span>
|
299
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">a</span> <span class="o">=</span> <span class="p">[</span> <span class="n">CIF</span><span class="p">(</span><span class="mf">0.1</span><span class="p">),</span> <span class="n">CIF</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o">+</span> <span class="n">box</span> <span class="p">]</span>
|
300
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">b</span> <span class="o">=</span> <span class="p">[</span> <span class="n">CIF</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> <span class="o">+</span> <span class="n">box</span><span class="p">,</span> <span class="n">CIF</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o">+</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">box</span> <span class="p">]</span>
|
301
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">c</span> <span class="o">=</span> <span class="p">[</span> <span class="n">CIF</span><span class="p">(</span><span class="mi">0</span><span class="p">),</span> <span class="n">CIF</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o">+</span> <span class="mi">3</span> <span class="o">*</span> <span class="n">box</span> <span class="p">]</span>
|
302
|
+
|
303
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">IntervalNewtonShapesEngine</span><span class="o">.</span><span class="n">interval_vector_is_contained_in</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
|
304
|
+
<span class="kc">True</span>
|
305
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">IntervalNewtonShapesEngine</span><span class="o">.</span><span class="n">interval_vector_is_contained_in</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span>
|
306
|
+
<span class="kc">False</span>
|
307
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">IntervalNewtonShapesEngine</span><span class="o">.</span><span class="n">interval_vector_is_contained_in</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">a</span><span class="p">)</span>
|
308
|
+
<span class="kc">False</span>
|
309
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">IntervalNewtonShapesEngine</span><span class="o">.</span><span class="n">interval_vector_is_contained_in</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span>
|
310
|
+
<span class="kc">False</span>
|
311
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">IntervalNewtonShapesEngine</span><span class="o">.</span><span class="n">interval_vector_is_contained_in</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">a</span><span class="p">)</span>
|
312
|
+
<span class="kc">False</span>
|
313
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">IntervalNewtonShapesEngine</span><span class="o">.</span><span class="n">interval_vector_is_contained_in</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
|
314
|
+
<span class="kc">False</span>
|
315
|
+
</pre></div>
|
316
|
+
</div>
|
317
|
+
</dd></dl>
|
318
|
+
|
319
|
+
<dl class="py method">
|
320
|
+
<dt class="sig sig-object py" id="snappy.verify.IntervalNewtonShapesEngine.interval_vector_mid_points">
|
321
|
+
<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">interval_vector_mid_points</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">vec</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.IntervalNewtonShapesEngine.interval_vector_mid_points" title="Link to this definition"></a></dt>
|
322
|
+
<dd><p>Given a vector of complex intervals, return the midpoints (as 0-length
|
323
|
+
complex intervals) of them.</p>
|
324
|
+
</dd></dl>
|
325
|
+
|
326
|
+
<dl class="py method">
|
327
|
+
<dt class="sig sig-object py" id="snappy.verify.IntervalNewtonShapesEngine.interval_vector_union">
|
328
|
+
<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">interval_vector_union</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">vecA</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">vecB</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.IntervalNewtonShapesEngine.interval_vector_union" title="Link to this definition"></a></dt>
|
329
|
+
<dd><p>Given two vectors of intervals, return the vector of their unions,
|
330
|
+
i.e., the smallest interval containing both intervals.</p>
|
331
|
+
</dd></dl>
|
332
|
+
|
333
|
+
<dl class="py method">
|
334
|
+
<dt class="sig sig-object py" id="snappy.verify.IntervalNewtonShapesEngine.log_gluing_LHS_derivatives">
|
335
|
+
<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">log_gluing_LHS_derivatives</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">equations</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">shapes</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.IntervalNewtonShapesEngine.log_gluing_LHS_derivatives" title="Link to this definition"></a></dt>
|
336
|
+
<dd><p>Compute the Jacobian of the vector-valued function f
|
337
|
+
described in the above log_gluing_LHSs:</p>
|
338
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: from snappy import Manifold
|
339
|
+
sage: M = Manifold("m019")
|
340
|
+
sage: equations = M.gluing_equations('rect')
|
341
|
+
sage: RIF = RealIntervalField(80)
|
342
|
+
sage: CIF = ComplexIntervalField(80)
|
343
|
+
sage: shape1 = CIF(RIF(0.78055,0.78056), RIF(0.9144, 0.9145))
|
344
|
+
sage: shape2 = CIF(RIF(0.46002,0.46003), RIF(0.6326, 0.6327))
|
345
|
+
sage: shapes = [shape1, shape1, shape2]
|
346
|
+
sage: IntervalNewtonShapesEngine.log_gluing_LHS_derivatives(equations, shapes) # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE
|
347
|
+
[ 0.292? - 1.66...?*I 0.292? - 1.66...?*I 0.752? - 1.034...?*I]
|
348
|
+
[-0.5400? + 0.63...?*I -0.5400? + 0.63...?*I 1.561? + 1.829...?*I]
|
349
|
+
[ 0.2482? + 1.034...?*I 0.2482? + 1.034...?*I -2.313? - 0.795...?*I]
|
350
|
+
[ 0.5400? - 0.63...?*I -0.5400? + 0.63...?*I 0]
|
351
|
+
[...-0.4963? - 2.068?*I 1.0800? - 1.26...?*I 0.752? - 1.034...?*I]
|
352
|
+
</pre></div>
|
353
|
+
</div>
|
354
|
+
</dd></dl>
|
355
|
+
|
356
|
+
<dl class="py method">
|
357
|
+
<dt class="sig sig-object py" id="snappy.verify.IntervalNewtonShapesEngine.log_gluing_LHSs">
|
358
|
+
<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">log_gluing_LHSs</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">equations</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">shapes</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.IntervalNewtonShapesEngine.log_gluing_LHSs" title="Link to this definition"></a></dt>
|
359
|
+
<dd><p>Given the result of M.gluing_equations(‘rect’) or a
|
360
|
+
subset of rows of it and shapes, return a vector of
|
361
|
+
log(LHS) where</p>
|
362
|
+
<blockquote>
|
363
|
+
<div><p>LHS = c * z0 ** a0 * (1-z0) ** b0 * z1 ** a1 * …</p>
|
364
|
+
</div></blockquote>
|
365
|
+
<p>Let f: C^n -> C^n denote the function which takes
|
366
|
+
shapes and returns the vector of log(LHS).</p>
|
367
|
+
<p>The reason we take the logarithm of the rectangular
|
368
|
+
gluing equations is because the logarithmic derivative
|
369
|
+
is of a particular nice form:</p>
|
370
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="kn">from</span> <span class="nn">snappy</span> <span class="kn">import</span> <span class="n">Manifold</span>
|
371
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">"m019"</span><span class="p">)</span>
|
372
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">equations</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">gluing_equations</span><span class="p">(</span><span class="s1">'rect'</span><span class="p">)</span>
|
373
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">RIF</span> <span class="o">=</span> <span class="n">RealIntervalField</span><span class="p">(</span><span class="mi">80</span><span class="p">)</span>
|
374
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">CIF</span> <span class="o">=</span> <span class="n">ComplexIntervalField</span><span class="p">(</span><span class="mi">80</span><span class="p">)</span>
|
375
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">zero</span> <span class="o">=</span> <span class="n">CIF</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span><span class="o">.</span><span class="n">center</span><span class="p">()</span>
|
376
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">shape1</span> <span class="o">=</span> <span class="n">CIF</span><span class="p">(</span><span class="n">RIF</span><span class="p">(</span><span class="mf">0.78055</span><span class="p">,</span><span class="mf">0.78056</span><span class="p">),</span> <span class="n">RIF</span><span class="p">(</span><span class="mf">0.9144</span><span class="p">,</span> <span class="mf">0.9145</span><span class="p">))</span>
|
377
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">shape2</span> <span class="o">=</span> <span class="n">CIF</span><span class="p">(</span><span class="n">RIF</span><span class="p">(</span><span class="mf">0.46002</span><span class="p">,</span><span class="mf">0.46003</span><span class="p">),</span> <span class="n">RIF</span><span class="p">(</span><span class="mf">0.6326</span><span class="p">,</span> <span class="mf">0.6327</span><span class="p">))</span>
|
378
|
+
</pre></div>
|
379
|
+
</div>
|
380
|
+
<p>An interval solution containing the true solution. The log of each
|
381
|
+
rectangular equation should be 0 for the true solution, hence the interval
|
382
|
+
should contain zero:</p>
|
383
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: shapes = [shape1, shape1, shape2]
|
384
|
+
sage: LHSs = IntervalNewtonShapesEngine.log_gluing_LHSs(equations, shapes)
|
385
|
+
sage: LHSs # doctest: +ELLIPSIS
|
386
|
+
(0.000? + 0.000?*I, 0.000? + 0.000?*I, 0.000? + 0.000?*I, 0.000...? + 0.000...?*I, 0.000? + 0.000?*I)
|
387
|
+
sage: zero in LHSs[0]
|
388
|
+
True
|
389
|
+
</pre></div>
|
390
|
+
</div>
|
391
|
+
<p>An interval not containing the true solution:</p>
|
392
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: shapes = [shape1, shape1, shape1]
|
393
|
+
sage: LHSs = IntervalNewtonShapesEngine.log_gluing_LHSs(equations, shapes)
|
394
|
+
sage: LHSs # doctest: +ELLIPSIS
|
395
|
+
(0.430? - 0.078?*I, -0.2...? + 0.942?*I, -0.1...? - 0.8...?*I, 0.000...? + 0.000...?*I, 0.430? - 0.078?*I)
|
396
|
+
sage: zero in LHSs[0]
|
397
|
+
False
|
398
|
+
</pre></div>
|
399
|
+
</div>
|
400
|
+
</dd></dl>
|
401
|
+
|
402
|
+
<dl class="py method">
|
403
|
+
<dt class="sig sig-object py" id="snappy.verify.IntervalNewtonShapesEngine.newton_iteration">
|
404
|
+
<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">newton_iteration</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">equations</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">shape_intervals</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">point_in_intervals</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">interval_value_at_point</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.IntervalNewtonShapesEngine.newton_iteration" title="Link to this definition"></a></dt>
|
405
|
+
<dd><p>Perform a Newton interval method of iteration for
|
406
|
+
the function f described in log_gluing_LHSs.</p>
|
407
|
+
<p>Let z denote the shape intervals.
|
408
|
+
Let z_center be a point close to the center point of the shape
|
409
|
+
intervals (in the implementation, z_center is an interval of
|
410
|
+
again, of length zero).</p>
|
411
|
+
<p>The result returned will be</p>
|
412
|
+
<blockquote>
|
413
|
+
<div><p>N(z) = z_center - ((Df)(z))^-1 f(z_center)</p>
|
414
|
+
</div></blockquote>
|
415
|
+
<p>The user can overwrite the z_center to be used by providing
|
416
|
+
point_in_intervals (which have to be 0-length complex intervals).
|
417
|
+
The user can also give the interval value of f(z_center) by providing
|
418
|
+
interval_value_at_point to avoid re-evaluation of f(z_center).</p>
|
419
|
+
<p>A very approximate solution:</p>
|
420
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="kn">from</span> <span class="nn">snappy</span> <span class="kn">import</span> <span class="n">Manifold</span>
|
421
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">"m019"</span><span class="p">)</span>
|
422
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">shapes</span> <span class="o">=</span> <span class="p">[</span> <span class="mf">0.7</span><span class="o">+</span><span class="mi">1</span><span class="n">j</span><span class="p">,</span> <span class="mf">0.7</span><span class="o">+</span><span class="mi">1</span><span class="n">j</span><span class="p">,</span> <span class="mf">0.5</span><span class="o">+</span><span class="mf">0.5</span><span class="n">j</span> <span class="p">]</span>
|
423
|
+
</pre></div>
|
424
|
+
</div>
|
425
|
+
<p>Get the equations and initialize zero-length intervals from it:</p>
|
426
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: C = IntervalNewtonShapesEngine(M, shapes, bits_prec = 80)
|
427
|
+
sage: C.initial_shapes
|
428
|
+
(0.69999999999999995559107902? + 1*I, 0.69999999999999995559107902? + 1*I, 0.50000000000000000000000000? + 0.50000000000000000000000000?*I)
|
429
|
+
</pre></div>
|
430
|
+
</div>
|
431
|
+
<p>Do several Newton interval operations to get a better solution:</p>
|
432
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: shape_intervals = C.initial_shapes
|
433
|
+
sage: for i in range(4): # doctest: +ELLIPSIS
|
434
|
+
... shape_intervals = IntervalNewtonShapesEngine.newton_iteration(C.equations, shape_intervals)
|
435
|
+
... print(shape_intervals)
|
436
|
+
(0.78674683118381457770...? + 0.9208680745160821379529?*I, 0.786746831183814577703...? + 0.9208680745160821379529?*I, 0.459868058287098030934...? + 0.61940871855835167317...?*I)
|
437
|
+
(0.78056102517632648594...? + 0.9144962118446750482...?*I, 0.78056102517632648594...? + 0.9144962118446750482...?*I, 0.4599773577869384936554? + 0.63251940718694538695...?*I)
|
438
|
+
(0.78055253104531610049...? + 0.9144736621585220345231?*I, 0.780552531045316100497...? + 0.9144736621585220345231?*I, 0.460021167103732494700...? + 0.6326241909236695020810...?*I)
|
439
|
+
(0.78055252785072483256...? + 0.91447366296772644033...?*I, 0.7805525278507248325678? + 0.914473662967726440333...?*I, 0.4600211755737178641204...? + 0.6326241936052562241142...?*I)
|
440
|
+
</pre></div>
|
441
|
+
</div>
|
442
|
+
<p>For comparison:</p>
|
443
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">.</span><span class="n">tetrahedra_shapes</span><span class="p">(</span><span class="s1">'rect'</span><span class="p">)</span>
|
444
|
+
<span class="p">[</span><span class="mf">0.780552527850725</span> <span class="o">+</span> <span class="mf">0.914473662967726</span><span class="o">*</span><span class="n">I</span><span class="p">,</span> <span class="mf">0.780552527850725</span> <span class="o">+</span> <span class="mf">0.914473662967726</span><span class="o">*</span><span class="n">I</span><span class="p">,</span> <span class="mf">0.460021175573718</span> <span class="o">+</span> <span class="mf">0.632624193605256</span><span class="o">*</span><span class="n">I</span><span class="p">]</span>
|
445
|
+
</pre></div>
|
446
|
+
</div>
|
447
|
+
<p>Start with a rather big interval, note that the Newton interval method is
|
448
|
+
stable in the sense that the interval size decreases:</p>
|
449
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: box = C.CIF(C.RIF(-0.0001,0.0001),C.RIF(-0.0001,0.0001))
|
450
|
+
sage: shape_intervals = C.initial_shapes.apply_map(lambda shape: shape + box)
|
451
|
+
sage: shape_intervals
|
452
|
+
(0.700? + 1.000?*I, 0.700? + 1.000?*I, 0.500? + 0.500?*I)
|
453
|
+
sage: for i in range(7):
|
454
|
+
... shape_intervals = IntervalNewtonShapesEngine.newton_iteration(C.equations, shape_intervals)
|
455
|
+
sage: print(shape_intervals) # doctest: +ELLIPSIS
|
456
|
+
(0.78055252785072483798...? + 0.91447366296772645593...?*I, 0.7805525278507248379869? + 0.914473662967726455938...?*I, 0.460021175573717872891...? + 0.632624193605256171637...?*I)
|
457
|
+
</pre></div>
|
458
|
+
</div>
|
459
|
+
</dd></dl>
|
460
|
+
|
461
|
+
</dd></dl>
|
462
|
+
|
463
|
+
<dl class="py class">
|
464
|
+
<dt class="sig sig-object py" id="snappy.verify.KrawczykShapesEngine">
|
465
|
+
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.</span></span><span class="sig-name descname"><span class="pre">KrawczykShapesEngine</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">M</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">initial_shapes</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bits_prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">dec_prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.KrawczykShapesEngine" title="Link to this definition"></a></dt>
|
466
|
+
<dd><p>An engine that is initialized with an approximated candidate solution to
|
467
|
+
the rectangular gluing equations and produces intervals certified to
|
468
|
+
contain a true solution. After the engine is successfully run, the
|
469
|
+
resulting intervals are stored in certified_shapes which is a vector of
|
470
|
+
elements in a Sage’s ComplexIntervalField.</p>
|
471
|
+
<p>A simple example to obtain certified shape intervals that uses the
|
472
|
+
KrawczykShapesEngine or IntervalNewtonShapesEngine under the hood:</p>
|
473
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: from snappy import Manifold
|
474
|
+
sage: M = Manifold("m015")
|
475
|
+
sage: M.tetrahedra_shapes('rect', bits_prec = 80, intervals = True) # doctest: +NUMERIC15 +NORMALIZE_WHITESPACE
|
476
|
+
[0.6623589786223730129805? + 0.5622795120623012438992?*I,
|
477
|
+
0.6623589786223730129805? + 0.5622795120623012438992?*I,
|
478
|
+
0.6623589786223730129805? + 0.5622795120623012438992?*I]
|
479
|
+
</pre></div>
|
480
|
+
</div>
|
481
|
+
<p>Its objective is thus the same as HIKMOT and it is certainly HIKMOT
|
482
|
+
inspired. However, it conceptually differs in that:</p>
|
483
|
+
<ol class="arabic">
|
484
|
+
<li><p>It uses complex numbers in it’s computations.
|
485
|
+
We simply use Sage’s complex interval type avoiding the need of
|
486
|
+
converting n x n complex matrices into 2n x 2n real matrices as
|
487
|
+
described Section 3.4 of the HIKMOT paper.</p></li>
|
488
|
+
<li><p>We avoid automatic differentiation. We pick an independent set of
|
489
|
+
equations of the following form and try to solve them:</p>
|
490
|
+
<blockquote>
|
491
|
+
<div><p>log(LHS) = 0</p>
|
492
|
+
</div></blockquote>
|
493
|
+
<p>where</p>
|
494
|
+
<blockquote>
|
495
|
+
<div><p>LHS = c * z0^a0 * (1-z0)^b0 * z1^a1 * (1-z1)^b1 * …</p>
|
496
|
+
</div></blockquote>
|
497
|
+
<p>with a, b and c’s as returned by Manifold.gluing_equations(‘rect’).</p>
|
498
|
+
<p>The derivative of log (LHS) with respect to zj is simply given by</p>
|
499
|
+
<blockquote>
|
500
|
+
<div><p>aj/zj - bj/(1-zj)</p>
|
501
|
+
</div></blockquote>
|
502
|
+
<p>and thus no need for automatic differentiation.</p>
|
503
|
+
</li>
|
504
|
+
<li><p>For speed-up, the approximate inverse is always computed with
|
505
|
+
double’s. Some intermediate matrix computations are performed sparsely.</p></li>
|
506
|
+
</ol>
|
507
|
+
<p>In contrast to HIKMOT, we use and return Sage’s native implementation of
|
508
|
+
(complex) interval arithmetic here, which allows for increased interoperability.
|
509
|
+
Another advantage is that Sage supports arbitrary precision.</p>
|
510
|
+
<p>Here is an example how to explicitly invoke the KrawczykShapesEngine:</p>
|
511
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: shapes = M.tetrahedra_shapes('rect', bits_prec = 80)
|
512
|
+
sage: C = KrawczykShapesEngine(M, shapes, bits_prec = 80)
|
513
|
+
sage: C.expand_until_certified()
|
514
|
+
True
|
515
|
+
sage: C.certified_shapes # doctest: +NUMERIC12
|
516
|
+
(0.6623589786223730129805? + 0.5622795120623012438992?*I, 0.6623589786223730129805? + 0.5622795120623012438992?*I, 0.6623589786223730129805? + 0.5622795120623012438992?*I)
|
517
|
+
</pre></div>
|
518
|
+
</div>
|
519
|
+
<p>And here an example where the initial solution is somewhat off:</p>
|
520
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: M = Manifold("m019")
|
521
|
+
sage: shapes = [0.780559+0.91449j, 0.780559+0.9144j, 0.46009+0.639j]
|
522
|
+
sage: C = KrawczykShapesEngine(M, shapes, bits_prec = 100)
|
523
|
+
sage: C.expand_until_certified()
|
524
|
+
True
|
525
|
+
sage: C.certified_shapes # doctest: +ELLIPSIS
|
526
|
+
(0.7806? + 0.9145?*I, 0.7806? + 0.9145?*I, 0.460...? + 0.6326?*I)
|
527
|
+
</pre></div>
|
528
|
+
</div>
|
529
|
+
<dl class="py method">
|
530
|
+
<dt class="sig sig-object py" id="snappy.verify.KrawczykShapesEngine.expand_until_certified">
|
531
|
+
<span class="sig-name descname"><span class="pre">expand_until_certified</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.KrawczykShapesEngine.expand_until_certified" title="Link to this definition"></a></dt>
|
532
|
+
<dd><p>Try Krawczyk iterations (i.e., expanding the shape intervals [z]
|
533
|
+
by the Krawczyk interval K(z0, [z], f)) until we can certify they
|
534
|
+
contain a true solution.</p>
|
535
|
+
<p>If succeeded, return True and write certified shapes to
|
536
|
+
certified_shapes.
|
537
|
+
Set verbose = True for printing additional information.</p>
|
538
|
+
</dd></dl>
|
539
|
+
|
540
|
+
<dl class="py method">
|
541
|
+
<dt class="sig sig-object py" id="snappy.verify.KrawczykShapesEngine.interval_vector_is_contained_in">
|
542
|
+
<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">interval_vector_is_contained_in</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">vecA</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">vecB</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.KrawczykShapesEngine.interval_vector_is_contained_in" title="Link to this definition"></a></dt>
|
543
|
+
<dd><p>Given two vectors of intervals, return whether the first one
|
544
|
+
is contained in the second one. Examples:</p>
|
545
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">RIF</span> <span class="o">=</span> <span class="n">RealIntervalField</span><span class="p">(</span><span class="mi">80</span><span class="p">)</span>
|
546
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">CIF</span> <span class="o">=</span> <span class="n">ComplexIntervalField</span><span class="p">(</span><span class="mi">80</span><span class="p">)</span>
|
547
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">box</span> <span class="o">=</span> <span class="n">CIF</span><span class="p">(</span><span class="n">RIF</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">),</span><span class="n">RIF</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">))</span>
|
548
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">a</span> <span class="o">=</span> <span class="p">[</span> <span class="n">CIF</span><span class="p">(</span><span class="mf">0.1</span><span class="p">),</span> <span class="n">CIF</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o">+</span> <span class="n">box</span> <span class="p">]</span>
|
549
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">b</span> <span class="o">=</span> <span class="p">[</span> <span class="n">CIF</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> <span class="o">+</span> <span class="n">box</span><span class="p">,</span> <span class="n">CIF</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o">+</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">box</span> <span class="p">]</span>
|
550
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">c</span> <span class="o">=</span> <span class="p">[</span> <span class="n">CIF</span><span class="p">(</span><span class="mi">0</span><span class="p">),</span> <span class="n">CIF</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o">+</span> <span class="mi">3</span> <span class="o">*</span> <span class="n">box</span> <span class="p">]</span>
|
551
|
+
|
552
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">KrawczykShapesEngine</span><span class="o">.</span><span class="n">interval_vector_is_contained_in</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
|
553
|
+
<span class="kc">True</span>
|
554
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">KrawczykShapesEngine</span><span class="o">.</span><span class="n">interval_vector_is_contained_in</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span>
|
555
|
+
<span class="kc">False</span>
|
556
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">KrawczykShapesEngine</span><span class="o">.</span><span class="n">interval_vector_is_contained_in</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">a</span><span class="p">)</span>
|
557
|
+
<span class="kc">False</span>
|
558
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">KrawczykShapesEngine</span><span class="o">.</span><span class="n">interval_vector_is_contained_in</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span>
|
559
|
+
<span class="kc">False</span>
|
560
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">KrawczykShapesEngine</span><span class="o">.</span><span class="n">interval_vector_is_contained_in</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">a</span><span class="p">)</span>
|
561
|
+
<span class="kc">False</span>
|
562
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">KrawczykShapesEngine</span><span class="o">.</span><span class="n">interval_vector_is_contained_in</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
|
563
|
+
<span class="kc">False</span>
|
564
|
+
</pre></div>
|
565
|
+
</div>
|
566
|
+
</dd></dl>
|
567
|
+
|
568
|
+
<dl class="py method">
|
569
|
+
<dt class="sig sig-object py" id="snappy.verify.KrawczykShapesEngine.interval_vector_mid_points">
|
570
|
+
<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">interval_vector_mid_points</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">vec</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.KrawczykShapesEngine.interval_vector_mid_points" title="Link to this definition"></a></dt>
|
571
|
+
<dd><p>Given a vector of complex intervals, return the midpoints (as 0-length
|
572
|
+
complex intervals) of them.</p>
|
573
|
+
</dd></dl>
|
574
|
+
|
575
|
+
<dl class="py method">
|
576
|
+
<dt class="sig sig-object py" id="snappy.verify.KrawczykShapesEngine.interval_vector_union">
|
577
|
+
<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">interval_vector_union</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">vecA</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">vecB</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.KrawczykShapesEngine.interval_vector_union" title="Link to this definition"></a></dt>
|
578
|
+
<dd><p>Given two vectors of intervals, return the vector of their unions,
|
579
|
+
i.e., the smallest interval containing both intervals.</p>
|
580
|
+
</dd></dl>
|
581
|
+
|
582
|
+
<dl class="py method">
|
583
|
+
<dt class="sig sig-object py" id="snappy.verify.KrawczykShapesEngine.krawczyk_interval">
|
584
|
+
<span class="sig-name descname"><span class="pre">krawczyk_interval</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">shape_intervals</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.KrawczykShapesEngine.krawczyk_interval" title="Link to this definition"></a></dt>
|
585
|
+
<dd><p>Compute the interval in the Krawczyk test.</p>
|
586
|
+
<p>It is given as</p>
|
587
|
+
<blockquote>
|
588
|
+
<div><p>K(z0, [z], f) := z0 - c * f(z0) + (Id - c * df([z])) * ([z] - z0)</p>
|
589
|
+
</div></blockquote>
|
590
|
+
<dl class="simple">
|
591
|
+
<dt>where</dt><dd><ul class="simple">
|
592
|
+
<li><p>z0 is the approximate candidate solution,</p></li>
|
593
|
+
<li><p>[z] are the shape_intervals we try to verify,</p></li>
|
594
|
+
<li><p>f is the function taking the shapes to the errors of the logarithmic gluing equations</p></li>
|
595
|
+
<li><p>c is an approximate inverse of df</p></li>
|
596
|
+
<li><p>df([z]) is the derivative of f (interval-)evaluated for [z]</p></li>
|
597
|
+
</ul>
|
598
|
+
</dd>
|
599
|
+
</dl>
|
600
|
+
<p>Note that z0 in self.initial_shapes which are complex intervals
|
601
|
+
containing only one value (the candidate solution given initially).</p>
|
602
|
+
<p>If K is contained in [z], then we have proven that [z] contains a solution
|
603
|
+
to the gluing equations.</p>
|
604
|
+
<p>Do several Krawczyk operations to get a better solution:</p>
|
605
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: from sage.all import vector
|
606
|
+
sage: M = Manifold("m019")
|
607
|
+
sage: shapes = vector(ComplexIntervalField(53), [ 0.5+0.8j, 0.5+0.8j, 0.5+0.8j])
|
608
|
+
sage: for i in range(15):
|
609
|
+
... penultimateShapes = shapes
|
610
|
+
... centers = [ shape.center() for shape in shapes ]
|
611
|
+
... C = KrawczykShapesEngine(M, centers, bits_prec = 53)
|
612
|
+
... shapes = C.krawczyk_interval(shapes)
|
613
|
+
sage: shapes # doctest: +NUMERIC12
|
614
|
+
(0.78055252785073? + 0.91447366296773?*I, 0.780552527850725? + 0.91447366296773?*I, 0.460021175573718? + 0.632624193605256?*I)
|
615
|
+
</pre></div>
|
616
|
+
</div>
|
617
|
+
</dd></dl>
|
618
|
+
|
619
|
+
<dl class="py method">
|
620
|
+
<dt class="sig sig-object py" id="snappy.verify.KrawczykShapesEngine.log_gluing_LHS_derivatives">
|
621
|
+
<span class="sig-name descname"><span class="pre">log_gluing_LHS_derivatives</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">shapes</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.KrawczykShapesEngine.log_gluing_LHS_derivatives" title="Link to this definition"></a></dt>
|
622
|
+
<dd><p>Compute the Jacobian of the vector-valued function f
|
623
|
+
described in the above log_gluing_LHSs:</p>
|
624
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: from snappy import Manifold
|
625
|
+
sage: M = Manifold("m019")
|
626
|
+
sage: shapes = M.tetrahedra_shapes('rect', bits_prec = 80)
|
627
|
+
sage: C = KrawczykShapesEngine(M, shapes, bits_prec = 80)
|
628
|
+
sage: RIF = RealIntervalField(80)
|
629
|
+
sage: CIF = ComplexIntervalField(80)
|
630
|
+
sage: shape1 = CIF(RIF(0.78055,0.78056), RIF(0.9144, 0.9145))
|
631
|
+
sage: shape2 = CIF(RIF(0.46002,0.46003), RIF(0.6326, 0.6327))
|
632
|
+
sage: shapes = [shape1, shape1, shape2]
|
633
|
+
sage: C.log_gluing_LHS_derivatives(shapes) # doctest: +NUMERIC3
|
634
|
+
[ 0.292? - 1.6666?*I 0.292? - 1.6666?*I 0.752? - 1.0340?*I]
|
635
|
+
[ 0.5400? - 0.6327?*I 0.5400? - 0.6327?*I -1.561? - 1.8290?*I]
|
636
|
+
[ 0.5400? - 0.6327?*I -0.5400? + 0.6327?*I 0]
|
637
|
+
</pre></div>
|
638
|
+
</div>
|
639
|
+
</dd></dl>
|
640
|
+
|
641
|
+
<dl class="py method">
|
642
|
+
<dt class="sig sig-object py" id="snappy.verify.KrawczykShapesEngine.log_gluing_LHS_derivatives_sparse">
|
643
|
+
<span class="sig-name descname"><span class="pre">log_gluing_LHS_derivatives_sparse</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">shapes</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.KrawczykShapesEngine.log_gluing_LHS_derivatives_sparse" title="Link to this definition"></a></dt>
|
644
|
+
<dd><p>A column-sparse matrix version of log_gluing_LHS_derivatives_sparse.
|
645
|
+
The result is a list of list of pairs. Each list of pairs corresponds
|
646
|
+
to a column, a pair being (index of row, value) where the index is
|
647
|
+
increasing.</p>
|
648
|
+
</dd></dl>
|
649
|
+
|
650
|
+
<dl class="py method">
|
651
|
+
<dt class="sig sig-object py" id="snappy.verify.KrawczykShapesEngine.log_gluing_LHSs">
|
652
|
+
<span class="sig-name descname"><span class="pre">log_gluing_LHSs</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">shapes</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.KrawczykShapesEngine.log_gluing_LHSs" title="Link to this definition"></a></dt>
|
653
|
+
<dd><p>Given the result of M.gluing_equations(‘rect’) or a
|
654
|
+
subset of rows of it and shapes, return a vector of
|
655
|
+
log(LHS) where</p>
|
656
|
+
<blockquote>
|
657
|
+
<div><p>LHS = c * z0 ** a0 * (1-z0) ** b0 * z1 ** a1 * …</p>
|
658
|
+
</div></blockquote>
|
659
|
+
<p>Let f: C^n -> C^n denote the function which takes
|
660
|
+
shapes and returns the vector of log(LHS).</p>
|
661
|
+
<p>The reason we take the logarithm of the rectangular
|
662
|
+
gluing equations is because the logarithmic derivative
|
663
|
+
is of a particular nice form:</p>
|
664
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="kn">from</span> <span class="nn">snappy</span> <span class="kn">import</span> <span class="n">Manifold</span>
|
665
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">"m019"</span><span class="p">)</span>
|
666
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">equations</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">gluing_equations</span><span class="p">(</span><span class="s1">'rect'</span><span class="p">)</span>
|
667
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">RIF</span> <span class="o">=</span> <span class="n">RealIntervalField</span><span class="p">(</span><span class="mi">80</span><span class="p">)</span>
|
668
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">CIF</span> <span class="o">=</span> <span class="n">ComplexIntervalField</span><span class="p">(</span><span class="mi">80</span><span class="p">)</span>
|
669
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">zero</span> <span class="o">=</span> <span class="n">CIF</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span><span class="o">.</span><span class="n">center</span><span class="p">()</span>
|
670
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">shape1</span> <span class="o">=</span> <span class="n">CIF</span><span class="p">(</span><span class="n">RIF</span><span class="p">(</span><span class="mf">0.78055</span><span class="p">,</span><span class="mf">0.78056</span><span class="p">),</span> <span class="n">RIF</span><span class="p">(</span><span class="mf">0.9144</span><span class="p">,</span> <span class="mf">0.9145</span><span class="p">))</span>
|
671
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">shape2</span> <span class="o">=</span> <span class="n">CIF</span><span class="p">(</span><span class="n">RIF</span><span class="p">(</span><span class="mf">0.46002</span><span class="p">,</span><span class="mf">0.46003</span><span class="p">),</span> <span class="n">RIF</span><span class="p">(</span><span class="mf">0.6326</span><span class="p">,</span> <span class="mf">0.6327</span><span class="p">))</span>
|
672
|
+
</pre></div>
|
673
|
+
</div>
|
674
|
+
<p>An interval solution containing the true solution. The log of each
|
675
|
+
rectangular equation should be 0 for the true solution, hence the interval
|
676
|
+
should contain zero:</p>
|
677
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: shapes = [shape1, shape1, shape2]
|
678
|
+
sage: C = KrawczykShapesEngine(M, [shape.center() for shape in shapes], bits_prec = 53)
|
679
|
+
sage: LHSs = C.log_gluing_LHSs(shapes)
|
680
|
+
sage: LHSs # doctest: +NUMERIC6
|
681
|
+
(0.000? + 0.000?*I, 0.000? + 0.000?*I, 0.0000? + 0.0000?*I)
|
682
|
+
sage: zero in LHSs[0]
|
683
|
+
True
|
684
|
+
</pre></div>
|
685
|
+
</div>
|
686
|
+
<p>An interval not containing the true solution:</p>
|
687
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: shapes = [shape1, shape1, shape1]
|
688
|
+
sage: LHSs = C.log_gluing_LHSs(shapes)
|
689
|
+
sage: LHSs # doctest: +NUMERIC3
|
690
|
+
(0.430? - 0.078?*I, 0.246? - 0.942?*I, 0.0000? + 0.0000?*I)
|
691
|
+
sage: zero in LHSs[0]
|
692
|
+
False
|
693
|
+
</pre></div>
|
694
|
+
</div>
|
695
|
+
</dd></dl>
|
696
|
+
|
697
|
+
<dl class="py method">
|
698
|
+
<dt class="sig sig-object py" id="snappy.verify.KrawczykShapesEngine.matrix_times_sparse">
|
699
|
+
<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">matrix_times_sparse</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">m</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">sparse_m</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.KrawczykShapesEngine.matrix_times_sparse" title="Link to this definition"></a></dt>
|
700
|
+
<dd><p>Multiply a (dense) Sage matrix with a column-sparse matrix
|
701
|
+
(in the format described in log_gluing_LHS_derivatives_sparse).</p>
|
702
|
+
</dd></dl>
|
703
|
+
|
704
|
+
</dd></dl>
|
705
|
+
|
706
|
+
</section>
|
707
|
+
<section id="verification-of-hyperbolicity">
|
708
|
+
<h2>Verification of hyperbolicity<a class="headerlink" href="#verification-of-hyperbolicity" title="Link to this heading"></a></h2>
|
709
|
+
<p>Methods containing <code class="docutils literal notranslate"><span class="pre">check</span></code> will raise an exception if the desired property
|
710
|
+
cannot be certified. Methods containing <code class="docutils literal notranslate"><span class="pre">verify</span></code> or <code class="docutils literal notranslate"><span class="pre">verified</span></code> will fail
|
711
|
+
more gracefully returning <code class="docutils literal notranslate"><span class="pre">False</span></code> or <code class="docutils literal notranslate"><span class="pre">None</span></code> in such a case.</p>
|
712
|
+
<dl class="py function">
|
713
|
+
<dt class="sig sig-object py" id="snappy.verify.hyperbolicity.check_logarithmic_gluing_equations_and_positively_oriented_tets">
|
714
|
+
<span class="sig-prename descclassname"><span class="pre">snappy.verify.hyperbolicity.</span></span><span class="sig-name descname"><span class="pre">check_logarithmic_gluing_equations_and_positively_oriented_tets</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">manifold</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">shape_intervals</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.hyperbolicity.check_logarithmic_gluing_equations_and_positively_oriented_tets" title="Link to this definition"></a></dt>
|
715
|
+
<dd><p>Given a SnapPy manifold manifold and complex intervals for the shapes
|
716
|
+
shape_intervals that are certified to contain a solution to the
|
717
|
+
rectangular gluing equations, verify that the logarithmic gluing equations
|
718
|
+
are also fulfilled and that all shapes have positive imaginary part.
|
719
|
+
It will raise an exception if the verification fails.
|
720
|
+
This is sufficient to prove that the manifold is indeed hyperbolic.</p>
|
721
|
+
<p>Since the given interval are supposed to contain a true solution of
|
722
|
+
the rectangular gluing equations, the logarithmic gluing equations
|
723
|
+
are known to be fulfilled up to a multiple of 2 pi i. Thus it is enough
|
724
|
+
to certify that the absolute error of the logarithmic gluing
|
725
|
+
equations is < 0.1. Using interval arithmetic, this function certifies
|
726
|
+
this and positivity of the imaginary parts of the shapes:</p>
|
727
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="kn">from</span> <span class="nn">snappy</span> <span class="kn">import</span> <span class="n">Manifold</span>
|
728
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">"m019"</span><span class="p">)</span>
|
729
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">check_logarithmic_gluing_equations_and_positively_oriented_tets</span><span class="p">(</span>
|
730
|
+
<span class="o">...</span> <span class="n">M</span><span class="p">,</span> <span class="n">M</span><span class="o">.</span><span class="n">tetrahedra_shapes</span><span class="p">(</span><span class="s1">'rect'</span><span class="p">,</span> <span class="n">intervals</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
|
731
|
+
</pre></div>
|
732
|
+
</div>
|
733
|
+
<p>The SnapPy triangulation of the following hyperbolic manifold contains
|
734
|
+
actually negatively oriented tetrahedra:</p>
|
735
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: M = Manifold("t02774")
|
736
|
+
sage: check_logarithmic_gluing_equations_and_positively_oriented_tets(
|
737
|
+
... M, M.tetrahedra_shapes('rect', intervals=True)) # doctest: +IGNORE_EXCEPTION_DETAIL
|
738
|
+
Traceback (most recent call last):
|
739
|
+
...
|
740
|
+
ShapePositiveImaginaryPartNumericalVerifyError: Numerical verification that shape has positive imaginary part has failed: Im(0.4800996900657? - 0.0019533695046?*I) > 0
|
741
|
+
</pre></div>
|
742
|
+
</div>
|
743
|
+
</dd></dl>
|
744
|
+
|
745
|
+
</section>
|
746
|
+
<section id="verified-canonical-cell-decompositions">
|
747
|
+
<h2>Verified canonical cell decompositions<a class="headerlink" href="#verified-canonical-cell-decompositions" title="Link to this heading"></a></h2>
|
748
|
+
<dl class="py function">
|
749
|
+
<dt class="sig sig-object py" id="snappy.verify.canonical.interval_checked_canonical_triangulation">
|
750
|
+
<span class="sig-prename descclassname"><span class="pre">snappy.verify.canonical.</span></span><span class="sig-name descname"><span class="pre">interval_checked_canonical_triangulation</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">M</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bits_prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.canonical.interval_checked_canonical_triangulation" title="Link to this definition"></a></dt>
|
751
|
+
<dd><p>Given a canonical triangulation of a cusped (possibly non-orientable)
|
752
|
+
manifold M, return this triangulation if it has tetrahedral cells and can
|
753
|
+
be verified using interval arithmetics with the optional, given precision.
|
754
|
+
Otherwise, raises an Exception.</p>
|
755
|
+
<p>It fails when we call it on something which is not the canonical
|
756
|
+
triangulation:</p>
|
757
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: from snappy import Manifold
|
758
|
+
sage: M = Manifold("m015")
|
759
|
+
sage: interval_checked_canonical_triangulation(M) # doctest: +ELLIPSIS +IGNORE_EXCEPTION_DETAIL
|
760
|
+
Traceback (most recent call last):
|
761
|
+
...
|
762
|
+
TiltProvenPositiveNumericalVerifyError: Numerical verification that tilt is negative has failed, tilt is actually positive. This is provably not the proto-canonical triangulation: 0.164542163...? <= 0
|
763
|
+
</pre></div>
|
764
|
+
</div>
|
765
|
+
<p>It verifies the canonical triangulation:</p>
|
766
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">.</span><span class="n">canonize</span><span class="p">()</span>
|
767
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">K</span> <span class="o">=</span> <span class="n">interval_checked_canonical_triangulation</span><span class="p">(</span><span class="n">M</span><span class="p">)</span>
|
768
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">K</span>
|
769
|
+
<span class="n">m015</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span>
|
770
|
+
</pre></div>
|
771
|
+
</div>
|
772
|
+
<p>Has a non-tetrahedral canonical cell:</p>
|
773
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: M = Manifold("m137")
|
774
|
+
sage: M.canonize()
|
775
|
+
sage: interval_checked_canonical_triangulation(M) # doctest: +ELLIPSIS +IGNORE_EXCEPTION_DETAIL
|
776
|
+
Traceback (most recent call last):
|
777
|
+
...
|
778
|
+
TiltInequalityNumericalVerifyError: Numerical verification that tilt is negative has failed: 0.?e-1... < 0
|
779
|
+
</pre></div>
|
780
|
+
</div>
|
781
|
+
<p>Has a cubical canonical cell:</p>
|
782
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: M = Manifold("m412")
|
783
|
+
sage: M.canonize()
|
784
|
+
sage: interval_checked_canonical_triangulation(M) # doctest: +ELLIPSIS +IGNORE_EXCEPTION_DETAIL
|
785
|
+
Traceback (most recent call last):
|
786
|
+
...
|
787
|
+
TiltInequalityNumericalVerifyError: Numerical verification that tilt is negative has failed: 0.?e-1... < 0
|
788
|
+
</pre></div>
|
789
|
+
</div>
|
790
|
+
</dd></dl>
|
791
|
+
|
792
|
+
<dl class="py function">
|
793
|
+
<dt class="sig sig-object py" id="snappy.verify.canonical.exactly_checked_canonical_retriangulation">
|
794
|
+
<span class="sig-prename descclassname"><span class="pre">snappy.verify.canonical.</span></span><span class="sig-name descname"><span class="pre">exactly_checked_canonical_retriangulation</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">M</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bits_prec</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">degree</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.canonical.exactly_checked_canonical_retriangulation" title="Link to this definition"></a></dt>
|
795
|
+
<dd><p>Given a proto-canonical triangulation of a cusped (possibly non-orientable)
|
796
|
+
manifold M, return its canonical retriangulation which is computed from
|
797
|
+
exact shapes. The exact shapes are computed using snap (which uses the
|
798
|
+
LLL-algorithm). The precision (in bits) and the maximal degree need to be
|
799
|
+
specified (here 300 bits precision and polynomials of degree less than 4):</p>
|
800
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="kn">from</span> <span class="nn">snappy</span> <span class="kn">import</span> <span class="n">Manifold</span>
|
801
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">"m412"</span><span class="p">)</span>
|
802
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">.</span><span class="n">canonize</span><span class="p">()</span>
|
803
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">K</span> <span class="o">=</span> <span class="n">exactly_checked_canonical_retriangulation</span><span class="p">(</span><span class="n">M</span><span class="p">,</span> <span class="mi">300</span><span class="p">,</span> <span class="mi">4</span><span class="p">)</span>
|
804
|
+
</pre></div>
|
805
|
+
</div>
|
806
|
+
<p>M’s canonical cell decomposition has a cube, so non-tetrahedral:</p>
|
807
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">K</span><span class="o">.</span><span class="n">has_finite_vertices</span><span class="p">()</span>
|
808
|
+
<span class="kc">True</span>
|
809
|
+
</pre></div>
|
810
|
+
</div>
|
811
|
+
<p>Has 12 tetrahedra after the retrianglation:</p>
|
812
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">K</span><span class="o">.</span><span class="n">num_tetrahedra</span><span class="p">()</span>
|
813
|
+
<span class="mi">12</span>
|
814
|
+
</pre></div>
|
815
|
+
</div>
|
816
|
+
<p>Check that it fails on something which is not a proto-canonical
|
817
|
+
triangulation:</p>
|
818
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: from snappy import Manifold
|
819
|
+
sage: M = Manifold("m015")
|
820
|
+
sage: exactly_checked_canonical_retriangulation(M, 500, 6) # doctest: +IGNORE_EXCEPTION_DETAIL
|
821
|
+
Traceback (most recent call last):
|
822
|
+
...
|
823
|
+
TiltProvenPositiveNumericalVerifyError: Numerical verification that tilt is negative has failed, tilt is actually positive. This is provably not the proto-canonical triangulation: 0.1645421638874662848910671879? <= 0
|
824
|
+
</pre></div>
|
825
|
+
</div>
|
826
|
+
</dd></dl>
|
827
|
+
|
828
|
+
</section>
|
829
|
+
<section id="module-snappy.verify.square_extensions">
|
830
|
+
<span id="exact-computations-for-cusp-cross-sections"></span><h2>Exact computations for cusp cross sections<a class="headerlink" href="#module-snappy.verify.square_extensions" title="Link to this heading"></a></h2>
|
831
|
+
<p>The square_extensions module provides
|
832
|
+
two special classes to give exact representations of the values
|
833
|
+
involved when computing a cusp cross section.</p>
|
834
|
+
<p>The method find_shapes_as_complex_sqrt_lin_combinations returns a list of
|
835
|
+
shapes as ComplexSqrtLinCombination’s. This can be used as input to
|
836
|
+
CuspCrossSection. The outputs of CuspCrossSection, including the tilts, will
|
837
|
+
then be of type SqrtLinCombination.</p>
|
838
|
+
<p>Consider the real number field N generated by the real and imaginary part of
|
839
|
+
the shapes. The edge lengths and the factors used to normalize the cusp areas
|
840
|
+
will be square roots in N and thus the tilts will be N-linear combinations of
|
841
|
+
square roots in N. To avoid computing in a massive tower of square extensions
|
842
|
+
of N, we implement SqrtLinCombination here that provides a special
|
843
|
+
implementation of the == operator.</p>
|
844
|
+
<dl class="py function">
|
845
|
+
<dt class="sig sig-object py" id="snappy.verify.square_extensions.find_shapes_as_complex_sqrt_lin_combinations">
|
846
|
+
<span class="sig-prename descclassname"><span class="pre">snappy.verify.square_extensions.</span></span><span class="sig-name descname"><span class="pre">find_shapes_as_complex_sqrt_lin_combinations</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">M</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prec</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">degree</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.square_extensions.find_shapes_as_complex_sqrt_lin_combinations" title="Link to this definition"></a></dt>
|
847
|
+
<dd><p>Given a manifold M, use snap (which uses LLL-algorithm) with the given
|
848
|
+
decimal precision and maximal degree to find exact values for the shapes’
|
849
|
+
real and imaginary part. Return the shapes as list of
|
850
|
+
ComplexSqrtLinCombination’s. Return None on failure.</p>
|
851
|
+
<p>Example:</p>
|
852
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="kn">from</span> <span class="nn">snappy</span> <span class="kn">import</span> <span class="n">Manifold</span>
|
853
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">=</span><span class="n">Manifold</span><span class="p">(</span><span class="s2">"m412"</span><span class="p">)</span>
|
854
|
+
<span class="n">sage</span><span class="p">:</span> <span class="n">find_shapes_as_complex_sqrt_lin_combinations</span><span class="p">(</span><span class="n">M</span><span class="p">,</span> <span class="mi">200</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span>
|
855
|
+
<span class="p">[</span><span class="n">ComplexSqrtLinCombination</span><span class="p">((</span><span class="mi">1</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="n">x</span> <span class="o">-</span> <span class="mi">1</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="mi">1</span><span class="p">)),</span> <span class="n">ComplexSqrtLinCombination</span><span class="p">((</span><span class="mi">1</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="n">x</span> <span class="o">-</span> <span class="mi">1</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="mi">1</span><span class="p">)),</span> <span class="n">ComplexSqrtLinCombination</span><span class="p">((</span><span class="mi">1</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="n">x</span> <span class="o">-</span> <span class="mi">1</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="mi">1</span><span class="p">)),</span> <span class="n">ComplexSqrtLinCombination</span><span class="p">((</span><span class="mi">1</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="n">x</span> <span class="o">-</span> <span class="mi">1</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="mi">1</span><span class="p">)),</span> <span class="n">ComplexSqrtLinCombination</span><span class="p">((</span><span class="mi">1</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="n">x</span> <span class="o">-</span> <span class="mi">1</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="mi">1</span><span class="p">))]</span>
|
856
|
+
</pre></div>
|
857
|
+
</div>
|
858
|
+
</dd></dl>
|
859
|
+
|
860
|
+
<dl class="py class">
|
861
|
+
<dt class="sig sig-object py" id="snappy.verify.square_extensions.SqrtLinCombination">
|
862
|
+
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.square_extensions.</span></span><span class="sig-name descname"><span class="pre">SqrtLinCombination</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">d</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">{}</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">embed_cache</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.square_extensions.SqrtLinCombination" title="Link to this definition"></a></dt>
|
863
|
+
<dd><p>A class representing a linear combination</p>
|
864
|
+
<blockquote>
|
865
|
+
<div><p>c_1 * sqrt(r_1) + c_2 * sqrt(r_2) + … + c_n * sqrt(r_n)</p>
|
866
|
+
</div></blockquote>
|
867
|
+
<p>where c_i and r_i have to be of type Integer, Rational or elements
|
868
|
+
of the same Sage NumberField with a real embedding (Caution: this is
|
869
|
+
assumed but not checked!) such that all r_i are positive (Caution: this is
|
870
|
+
not checked during construction!).</p>
|
871
|
+
<p>It implements +, -, * where one of the operators is allowed to be an
|
872
|
+
integer or rational.</p>
|
873
|
+
<p>/ is only implemented when the denominator has only one term c_1 * sqrt(1).
|
874
|
+
sqrt is only implemented for c_1 * sqrt(1) and it is not checked that
|
875
|
+
c_1 is positive.</p>
|
876
|
+
<p>== is implemented, but the other comparison operators are not: casting to
|
877
|
+
a RealIntervalField is implemented instead and the user can compare the
|
878
|
+
intervals.</p>
|
879
|
+
<p>The == operator is implemented by first reducing A == B to D == 0 and then
|
880
|
+
converting to a different data type (_FactorizedSqrtLinCombination) that can
|
881
|
+
represent linear combinations:</p>
|
882
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">D</span> <span class="o">=</span> <span class="n">c_1</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="n">r_</span><span class="p">{</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">})</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="n">r_</span><span class="p">{</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">})</span> <span class="o">*</span> <span class="o">...</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="n">r_</span><span class="p">{</span><span class="mi">1</span><span class="p">,</span><span class="n">k_1</span><span class="p">})</span>
|
883
|
+
<span class="o">+</span> <span class="n">c_2</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="n">r_</span><span class="p">{</span><span class="mi">2</span><span class="p">,</span><span class="mi">1</span><span class="p">})</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="n">r_</span><span class="p">{</span><span class="mi">2</span><span class="p">,</span><span class="mi">2</span><span class="p">})</span> <span class="o">*</span> <span class="o">...</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="n">r_</span><span class="p">{</span><span class="mi">2</span><span class="p">,</span><span class="n">k_2</span><span class="p">})</span>
|
884
|
+
<span class="o">+</span> <span class="o">...</span>
|
885
|
+
<span class="o">+</span> <span class="n">c_n</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="n">r_</span><span class="p">{</span><span class="n">n</span><span class="p">,</span><span class="mi">1</span><span class="p">})</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="n">r_</span><span class="p">{</span><span class="n">n</span><span class="p">,</span><span class="mi">2</span><span class="p">})</span> <span class="o">*</span> <span class="o">...</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="n">r_</span><span class="p">{</span><span class="n">n</span><span class="p">,</span><span class="n">k_n</span><span class="p">})</span>
|
886
|
+
</pre></div>
|
887
|
+
</div>
|
888
|
+
<dl class="simple">
|
889
|
+
<dt>by just trivially setting</dt><dd><p>k_i = 0 when r_i = 1 and
|
890
|
+
r_{i,1} = r_i and k_1 = 1 otherwise.</p>
|
891
|
+
</dd>
|
892
|
+
</dl>
|
893
|
+
<p>For this data type, multiplying two sqrt(r_{i,j}) with equal r_{i,j} will
|
894
|
+
cancel the two sqrt’s and apply the common r_{i,j} to the c_i of the result
|
895
|
+
instead. Thus, the following procedure for determining whether D == 0 will
|
896
|
+
eventually terminate:</p>
|
897
|
+
<ul class="simple">
|
898
|
+
<li><p>if the number of terms n is 0, return True</p></li>
|
899
|
+
<li><p>if the number of terms n is 1, return c_1 == 0</p></li>
|
900
|
+
<li><p>if there is a r_{i,j} common to each summand, factor it out</p></li>
|
901
|
+
<li><p>pick one of the r_{i,j}, split the sum into two parts “left”,
|
902
|
+
respectively, “right” of all the terms containing sqrt(r_{i,j}),
|
903
|
+
respectively, not containing sqrt(r_{i,j}).</p></li>
|
904
|
+
<li><p>If left^2 - right^2 == 0 is False, return False.
|
905
|
+
(sqrt(r_{i,j})^2 simplifies to r_{i,j} and disappears, so the resulting
|
906
|
+
expression is easier and this recursion terminates eventually.)</p></li>
|
907
|
+
<li><p>If left == 0 (some comment applies), return True</p></li>
|
908
|
+
<li><p>Use interval arithmetic of increasing precision until it is high enough
|
909
|
+
to determine the signs of left and right.
|
910
|
+
Return True if and only if the signs differ, otherwise False.</p></li>
|
911
|
+
</ul>
|
912
|
+
<p>Examples:</p>
|
913
|
+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: from sage.rings.number_field.number_field import NumberField
|
914
|
+
sage: from sage.rings.integer import Integer
|
915
|
+
sage: from sage.rings.rational import Rational
|
916
|
+
sage: from sage.rings.real_mpfr import RealLiteral, RealField
|
917
|
+
sage: from sage.rings.real_mpfi import RealIntervalField
|
918
|
+
sage: from sage.calculus.var import var
|
919
|
+
sage: from sage.functions.other import sqrt
|
920
|
+
sage: x = var('x')
|
921
|
+
sage: poly = x ** 6 + Rational((3,2))*x**4 + Rational((9,16))*x**2 - Rational((23,64))
|
922
|
+
sage: nf = NumberField(poly, 'z', embedding = RealField()(0.56227951206))
|
923
|
+
sage: z = nf.gen()
|
924
|
+
|
925
|
+
sage: A = SqrtLinCombination(z)
|
926
|
+
sage: B = SqrtLinCombination(Rational((8,9))*z**4 + Rational((10,9))*z**2 + Rational((2,9)))
|
927
|
+
sage: C = SqrtLinCombination(3)
|
928
|
+
sage: D = SqrtLinCombination(Integer(5))
|
929
|
+
sage: E = SqrtLinCombination(Rational((6,7)))
|
930
|
+
|
931
|
+
sage: A + B
|
932
|
+
(8/9*z^4 + 10/9*z^2 + z + 2/9) * sqrt(1)
|
933
|
+
sage: B - E
|
934
|
+
(8/9*z^4 + 10/9*z^2 - 40/63) * sqrt(1)
|
935
|
+
sage: A + sqrt(B) * sqrt(B)
|
936
|
+
(8/9*z^4 + 10/9*z^2 + z + 2/9) * sqrt(1)
|
937
|
+
sage: A + sqrt(B) * sqrt(B) + C == A + B + C
|
938
|
+
True
|
939
|
+
sage: A / E
|
940
|
+
(7/6*z) * sqrt(1)
|
941
|
+
sage: B / A.sqrt()
|
942
|
+
(128/207*z^5 + 376/207*z^3 + 302/207*z) * sqrt(z)
|
943
|
+
sage: B / (D * A.sqrt())
|
944
|
+
(128/1035*z^5 + 376/1035*z^3 + 302/1035*z) * sqrt(z)
|
945
|
+
sage: RIF = RealIntervalField(100)
|
946
|
+
sage: RIF(B.sqrt() + E.sqrt())
|
947
|
+
1.73967449622339881238507307209?
|
948
|
+
sage: A - B == 0
|
949
|
+
False
|
950
|
+
sage: (A + B).sqrt()
|
951
|
+
(1) * sqrt(8/9*z^4 + 10/9*z^2 + z + 2/9)
|
952
|
+
sage: 3 * A.sqrt() + (4 * B).sqrt() + C + 8 == (9 * A).sqrt() + 2 * B.sqrt() + (C * C).sqrt() + 11 - 3
|
953
|
+
True
|
954
|
+
</pre></div>
|
955
|
+
</div>
|
956
|
+
<dl class="py method">
|
957
|
+
<dt class="sig sig-object py" id="snappy.verify.square_extensions.SqrtLinCombination.sign">
|
958
|
+
<span class="sig-name descname"><span class="pre">sign</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.square_extensions.SqrtLinCombination.sign" title="Link to this definition"></a></dt>
|
959
|
+
<dd><p>Returns the +1, 0, -1 depending on whether the value is positive,
|
960
|
+
zero or negative. For the zero case, exact arithmetic is used to
|
961
|
+
certify. Otherwise, interval arithmetic is used.</p>
|
962
|
+
</dd></dl>
|
963
|
+
|
964
|
+
<dl class="py method">
|
965
|
+
<dt class="sig sig-object py" id="snappy.verify.square_extensions.SqrtLinCombination.sign_with_interval">
|
966
|
+
<span class="sig-name descname"><span class="pre">sign_with_interval</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.square_extensions.SqrtLinCombination.sign_with_interval" title="Link to this definition"></a></dt>
|
967
|
+
<dd><p>Similar to sign, but for the non-zero case, also return the interval
|
968
|
+
certifying the sign - useful for debugging.</p>
|
969
|
+
</dd></dl>
|
970
|
+
|
971
|
+
</dd></dl>
|
972
|
+
|
973
|
+
<dl class="py class">
|
974
|
+
<dt class="sig sig-object py" id="snappy.verify.square_extensions.ComplexSqrtLinCombination">
|
975
|
+
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.square_extensions.</span></span><span class="sig-name descname"><span class="pre">ComplexSqrtLinCombination</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">real</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">imag</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">embed_cache</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.square_extensions.ComplexSqrtLinCombination" title="Link to this definition"></a></dt>
|
976
|
+
<dd><p>A pair (real, imag) of SqrtLinCombinations representing the complex number
|
977
|
+
real + imag * I. Supports <code class="docutils literal notranslate"><span class="pre">real()</span></code>, <code class="docutils literal notranslate"><span class="pre">imag()</span></code>, <code class="docutils literal notranslate"><span class="pre">+</span></code>, <code class="docutils literal notranslate"><span class="pre">-</span></code>, <code class="docutils literal notranslate"><span class="pre">*</span></code>, <code class="docutils literal notranslate"><span class="pre">/</span></code>,
|
978
|
+
<code class="docutils literal notranslate"><span class="pre">abs</span></code>, <code class="docutils literal notranslate"><span class="pre">conjugate()</span></code> and <code class="docutils literal notranslate"><span class="pre">==</span></code>.</p>
|
979
|
+
<dl class="py method">
|
980
|
+
<dt class="sig sig-object py" id="snappy.verify.square_extensions.ComplexSqrtLinCombination.imag">
|
981
|
+
<span class="sig-name descname"><span class="pre">imag</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.square_extensions.ComplexSqrtLinCombination.imag" title="Link to this definition"></a></dt>
|
982
|
+
<dd><p>Imaginary part.</p>
|
983
|
+
</dd></dl>
|
984
|
+
|
985
|
+
<dl class="py method">
|
986
|
+
<dt class="sig sig-object py" id="snappy.verify.square_extensions.ComplexSqrtLinCombination.real">
|
987
|
+
<span class="sig-name descname"><span class="pre">real</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.square_extensions.ComplexSqrtLinCombination.real" title="Link to this definition"></a></dt>
|
988
|
+
<dd><p>Real part.</p>
|
989
|
+
</dd></dl>
|
990
|
+
|
991
|
+
</dd></dl>
|
992
|
+
|
993
|
+
</section>
|
994
|
+
<section id="module-snappy.verify.exceptions">
|
995
|
+
<span id="exceptions"></span><h2>Exceptions<a class="headerlink" href="#module-snappy.verify.exceptions" title="Link to this heading"></a></h2>
|
996
|
+
<p>All final exceptions are deriving from two base classes:</p>
|
997
|
+
<ul class="simple">
|
998
|
+
<li><p>a subclass of VerifyErrorBase to indicate whether a numerical or exact
|
999
|
+
verification failed</p></li>
|
1000
|
+
<li><p>a subclass of EquationType to indicate the type of equation of
|
1001
|
+
inequality for which the verification failed.</p></li>
|
1002
|
+
</ul>
|
1003
|
+
<p>Intermediate subclasses (those without __init__) are not supposed to be
|
1004
|
+
raised.</p>
|
1005
|
+
<p>The hierarchy is as follows:</p>
|
1006
|
+
<ul class="simple">
|
1007
|
+
<li><p>VerifyErrorBase(RuntimeError)</p>
|
1008
|
+
<ul>
|
1009
|
+
<li><p>NumericalVerifyError</p>
|
1010
|
+
<ul>
|
1011
|
+
<li><p>InequalityNumericalVerifyError</p></li>
|
1012
|
+
<li><p>LogLiftNumericalVerifyError</p></li>
|
1013
|
+
</ul>
|
1014
|
+
</li>
|
1015
|
+
<li><p>ExactVerifyError</p>
|
1016
|
+
<ul>
|
1017
|
+
<li><p>IsZeroExactVerifyError</p></li>
|
1018
|
+
</ul>
|
1019
|
+
</li>
|
1020
|
+
</ul>
|
1021
|
+
</li>
|
1022
|
+
<li><p>EquationType</p>
|
1023
|
+
<ul>
|
1024
|
+
<li><p>EdgeEquationType</p>
|
1025
|
+
<ul>
|
1026
|
+
<li><p>EdgeEquationExactVerifyError</p></li>
|
1027
|
+
<li><p>EdgeEquationLogLiftNumericalVerifyError</p></li>
|
1028
|
+
</ul>
|
1029
|
+
</li>
|
1030
|
+
<li><p>CuspConsistencyType</p>
|
1031
|
+
<ul>
|
1032
|
+
<li><p>CuspEquationType</p>
|
1033
|
+
<ul>
|
1034
|
+
<li><p>CuspEquationExactVerifyError</p></li>
|
1035
|
+
<li><p>CuspEquationLogLiftNumericalVerifyError</p></li>
|
1036
|
+
</ul>
|
1037
|
+
</li>
|
1038
|
+
</ul>
|
1039
|
+
</li>
|
1040
|
+
<li><p>TiltType</p>
|
1041
|
+
<ul>
|
1042
|
+
<li><p>TiltInequalityNumericalVerifyError</p>
|
1043
|
+
<ul>
|
1044
|
+
<li><p>TiltProvenPositiveNumericalVerifyError</p></li>
|
1045
|
+
</ul>
|
1046
|
+
</li>
|
1047
|
+
<li><p>TiltIsZeroExactVerifyError</p></li>
|
1048
|
+
</ul>
|
1049
|
+
</li>
|
1050
|
+
<li><p>ShapeType</p>
|
1051
|
+
<ul>
|
1052
|
+
<li><p>ShapePositiveImaginaryPartNumericalVerifyError</p></li>
|
1053
|
+
</ul>
|
1054
|
+
</li>
|
1055
|
+
</ul>
|
1056
|
+
</li>
|
1057
|
+
</ul>
|
1058
|
+
<dl class="py class">
|
1059
|
+
<dt class="sig sig-object py" id="snappy.verify.exceptions.CuspConsistencyType">
|
1060
|
+
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">CuspConsistencyType</span></span><a class="headerlink" href="#snappy.verify.exceptions.CuspConsistencyType" title="Link to this definition"></a></dt>
|
1061
|
+
<dd><p>A base class indicating that verificatin of an equation involving a cusp
|
1062
|
+
failed.</p>
|
1063
|
+
</dd></dl>
|
1064
|
+
|
1065
|
+
<dl class="py exception">
|
1066
|
+
<dt class="sig sig-object py" id="snappy.verify.exceptions.CuspEquationExactVerifyError">
|
1067
|
+
<em class="property"><span class="pre">exception</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">CuspEquationExactVerifyError</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">expected_value</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.exceptions.CuspEquationExactVerifyError" title="Link to this definition"></a></dt>
|
1068
|
+
<dd><p>Exception for failed verification of a polynomial cusp gluing equation
|
1069
|
+
using exact arithmetics.</p>
|
1070
|
+
</dd></dl>
|
1071
|
+
|
1072
|
+
<dl class="py exception">
|
1073
|
+
<dt class="sig sig-object py" id="snappy.verify.exceptions.CuspEquationLogLiftNumericalVerifyError">
|
1074
|
+
<em class="property"><span class="pre">exception</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">CuspEquationLogLiftNumericalVerifyError</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">expected_value</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.exceptions.CuspEquationLogLiftNumericalVerifyError" title="Link to this definition"></a></dt>
|
1075
|
+
<dd><p>Exception for failed numerical verification that a logarithmic cusp
|
1076
|
+
equation has error bound by epsilon.</p>
|
1077
|
+
</dd></dl>
|
1078
|
+
|
1079
|
+
<dl class="py class">
|
1080
|
+
<dt class="sig sig-object py" id="snappy.verify.exceptions.CuspEquationType">
|
1081
|
+
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">CuspEquationType</span></span><a class="headerlink" href="#snappy.verify.exceptions.CuspEquationType" title="Link to this definition"></a></dt>
|
1082
|
+
<dd><p>A base class indicating that a cusp gluing equation (involving the
|
1083
|
+
shapes) failed.</p>
|
1084
|
+
</dd></dl>
|
1085
|
+
|
1086
|
+
<dl class="py exception">
|
1087
|
+
<dt class="sig sig-object py" id="snappy.verify.exceptions.EdgeEquationExactVerifyError">
|
1088
|
+
<em class="property"><span class="pre">exception</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">EdgeEquationExactVerifyError</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.exceptions.EdgeEquationExactVerifyError" title="Link to this definition"></a></dt>
|
1089
|
+
<dd><p>Exception for failed verification of a polynomial edge equation
|
1090
|
+
using exact arithmetics.</p>
|
1091
|
+
</dd></dl>
|
1092
|
+
|
1093
|
+
<dl class="py exception">
|
1094
|
+
<dt class="sig sig-object py" id="snappy.verify.exceptions.EdgeEquationLogLiftNumericalVerifyError">
|
1095
|
+
<em class="property"><span class="pre">exception</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">EdgeEquationLogLiftNumericalVerifyError</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.exceptions.EdgeEquationLogLiftNumericalVerifyError" title="Link to this definition"></a></dt>
|
1096
|
+
<dd><p>Exception for failed numerical verification that a logarithmic edge
|
1097
|
+
equation has error bound by epsilon.</p>
|
1098
|
+
</dd></dl>
|
1099
|
+
|
1100
|
+
<dl class="py class">
|
1101
|
+
<dt class="sig sig-object py" id="snappy.verify.exceptions.EdgeEquationType">
|
1102
|
+
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">EdgeEquationType</span></span><a class="headerlink" href="#snappy.verify.exceptions.EdgeEquationType" title="Link to this definition"></a></dt>
|
1103
|
+
<dd><p>A base class indicating that an edge equation could not be verified.</p>
|
1104
|
+
</dd></dl>
|
1105
|
+
|
1106
|
+
<dl class="py class">
|
1107
|
+
<dt class="sig sig-object py" id="snappy.verify.exceptions.EquationType">
|
1108
|
+
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">EquationType</span></span><a class="headerlink" href="#snappy.verify.exceptions.EquationType" title="Link to this definition"></a></dt>
|
1109
|
+
<dd><p>A base class to derive subclasses which indicate what kind of
|
1110
|
+
equation failed to be verified.</p>
|
1111
|
+
</dd></dl>
|
1112
|
+
|
1113
|
+
<dl class="py exception">
|
1114
|
+
<dt class="sig sig-object py" id="snappy.verify.exceptions.ExactVerifyError">
|
1115
|
+
<em class="property"><span class="pre">exception</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">ExactVerifyError</span></span><a class="headerlink" href="#snappy.verify.exceptions.ExactVerifyError" title="Link to this definition"></a></dt>
|
1116
|
+
<dd><p>The base for all exceptions resulting from a failed verification of an
|
1117
|
+
equation using exact arithmetics.</p>
|
1118
|
+
</dd></dl>
|
1119
|
+
|
1120
|
+
<dl class="py exception">
|
1121
|
+
<dt class="sig sig-object py" id="snappy.verify.exceptions.InequalityNumericalVerifyError">
|
1122
|
+
<em class="property"><span class="pre">exception</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">InequalityNumericalVerifyError</span></span><a class="headerlink" href="#snappy.verify.exceptions.InequalityNumericalVerifyError" title="Link to this definition"></a></dt>
|
1123
|
+
<dd><p>The base for all exceptions resulting from a failed numerical
|
1124
|
+
verification of an inequality (typically by interval arithmetics).</p>
|
1125
|
+
</dd></dl>
|
1126
|
+
|
1127
|
+
<dl class="py exception">
|
1128
|
+
<dt class="sig sig-object py" id="snappy.verify.exceptions.IsZeroExactVerifyError">
|
1129
|
+
<em class="property"><span class="pre">exception</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">IsZeroExactVerifyError</span></span><a class="headerlink" href="#snappy.verify.exceptions.IsZeroExactVerifyError" title="Link to this definition"></a></dt>
|
1130
|
+
<dd><p>The base for all exceptions resulting from verifying that a desired
|
1131
|
+
quantity is zero using exact arithmetics.</p>
|
1132
|
+
</dd></dl>
|
1133
|
+
|
1134
|
+
<dl class="py exception">
|
1135
|
+
<dt class="sig sig-object py" id="snappy.verify.exceptions.LogLiftNumericalVerifyError">
|
1136
|
+
<em class="property"><span class="pre">exception</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">LogLiftNumericalVerifyError</span></span><a class="headerlink" href="#snappy.verify.exceptions.LogLiftNumericalVerifyError" title="Link to this definition"></a></dt>
|
1137
|
+
<dd><p>To verify a logarithmic gluing equation, the verify module will usually
|
1138
|
+
first verify the corresponding polynomial gluing equation.
|
1139
|
+
This means that the logarithmic gluing equation will be fulfilled up
|
1140
|
+
to a multiple of 2 Pi I.
|
1141
|
+
It then computes the logarithms and numerically checks that the result
|
1142
|
+
is close (by some epsilon) to the right value. Because we already know
|
1143
|
+
that the difference is a multiple of 2 Pi I, checking closeness is enough.</p>
|
1144
|
+
<p>This exception is supposed to be raised if the polynomial gluing equations
|
1145
|
+
have passed but checking the logarithmic equation is epsilon-close has
|
1146
|
+
failed.</p>
|
1147
|
+
</dd></dl>
|
1148
|
+
|
1149
|
+
<dl class="py exception">
|
1150
|
+
<dt class="sig sig-object py" id="snappy.verify.exceptions.NumericalVerifyError">
|
1151
|
+
<em class="property"><span class="pre">exception</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">NumericalVerifyError</span></span><a class="headerlink" href="#snappy.verify.exceptions.NumericalVerifyError" title="Link to this definition"></a></dt>
|
1152
|
+
<dd><p>The base for all exceptions resulting from a failed numerical
|
1153
|
+
verification of an equality (using some epsilon) or inequality
|
1154
|
+
(typically by interval arithmetics).</p>
|
1155
|
+
</dd></dl>
|
1156
|
+
|
1157
|
+
<dl class="py exception">
|
1158
|
+
<dt class="sig sig-object py" id="snappy.verify.exceptions.ShapePositiveImaginaryPartNumericalVerifyError">
|
1159
|
+
<em class="property"><span class="pre">exception</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">ShapePositiveImaginaryPartNumericalVerifyError</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.exceptions.ShapePositiveImaginaryPartNumericalVerifyError" title="Link to this definition"></a></dt>
|
1160
|
+
<dd><p>Failed numerical verification of a shape having positive imaginary part.</p>
|
1161
|
+
</dd></dl>
|
1162
|
+
|
1163
|
+
<dl class="py class">
|
1164
|
+
<dt class="sig sig-object py" id="snappy.verify.exceptions.ShapeType">
|
1165
|
+
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">ShapeType</span></span><a class="headerlink" href="#snappy.verify.exceptions.ShapeType" title="Link to this definition"></a></dt>
|
1166
|
+
<dd><p>Base class for failed verification of legal shapes.</p>
|
1167
|
+
</dd></dl>
|
1168
|
+
|
1169
|
+
<dl class="py exception">
|
1170
|
+
<dt class="sig sig-object py" id="snappy.verify.exceptions.TiltInequalityNumericalVerifyError">
|
1171
|
+
<em class="property"><span class="pre">exception</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">TiltInequalityNumericalVerifyError</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.exceptions.TiltInequalityNumericalVerifyError" title="Link to this definition"></a></dt>
|
1172
|
+
<dd><p>Numerically verifying that a tilt is negative has failed.</p>
|
1173
|
+
</dd></dl>
|
1174
|
+
|
1175
|
+
<dl class="py exception">
|
1176
|
+
<dt class="sig sig-object py" id="snappy.verify.exceptions.TiltIsZeroExactVerifyError">
|
1177
|
+
<em class="property"><span class="pre">exception</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">TiltIsZeroExactVerifyError</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.exceptions.TiltIsZeroExactVerifyError" title="Link to this definition"></a></dt>
|
1178
|
+
<dd><p>Verifying that a tilt is zero has failed using exact arithmetic.</p>
|
1179
|
+
</dd></dl>
|
1180
|
+
|
1181
|
+
<dl class="py exception">
|
1182
|
+
<dt class="sig sig-object py" id="snappy.verify.exceptions.TiltProvenPositiveNumericalVerifyError">
|
1183
|
+
<em class="property"><span class="pre">exception</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">TiltProvenPositiveNumericalVerifyError</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.verify.exceptions.TiltProvenPositiveNumericalVerifyError" title="Link to this definition"></a></dt>
|
1184
|
+
<dd><p>Numerically verifying that a tilt is negative has not only failed, we
|
1185
|
+
proved that the tilt is positive and thus that this cannot be a
|
1186
|
+
proto-canonical triangulation.</p>
|
1187
|
+
</dd></dl>
|
1188
|
+
|
1189
|
+
<dl class="py class">
|
1190
|
+
<dt class="sig sig-object py" id="snappy.verify.exceptions.TiltType">
|
1191
|
+
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">TiltType</span></span><a class="headerlink" href="#snappy.verify.exceptions.TiltType" title="Link to this definition"></a></dt>
|
1192
|
+
<dd><p>A base class relating to tilts.</p>
|
1193
|
+
</dd></dl>
|
1194
|
+
|
1195
|
+
<dl class="py exception">
|
1196
|
+
<dt class="sig sig-object py" id="snappy.verify.exceptions.VerifyErrorBase">
|
1197
|
+
<em class="property"><span class="pre">exception</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.verify.exceptions.</span></span><span class="sig-name descname"><span class="pre">VerifyErrorBase</span></span><a class="headerlink" href="#snappy.verify.exceptions.VerifyErrorBase" title="Link to this definition"></a></dt>
|
1198
|
+
<dd><p>The base for all exceptions related to verification.</p>
|
1199
|
+
</dd></dl>
|
1200
|
+
|
1201
|
+
</section>
|
1202
|
+
</section>
|
1203
|
+
|
1204
|
+
|
1205
|
+
</div>
|
1206
|
+
</div>
|
1207
|
+
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
|
1208
|
+
<a href="verify.html" class="btn btn-neutral float-left" title="Verified computations" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
|
1209
|
+
<a href="other.html" class="btn btn-neutral float-right" title="Other components" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
|
1210
|
+
</div>
|
1211
|
+
|
1212
|
+
<hr/>
|
1213
|
+
|
1214
|
+
<div role="contentinfo">
|
1215
|
+
<p>© Copyright 2009-2025, by Marc Culler, Nathan Dunfield, Matthias Goerner, Jeffrey Weeks and others.</p>
|
1216
|
+
</div>
|
1217
|
+
|
1218
|
+
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
1219
|
+
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
1220
|
+
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
1221
|
+
|
1222
|
+
|
1223
|
+
</footer>
|
1224
|
+
</div>
|
1225
|
+
</div>
|
1226
|
+
</section>
|
1227
|
+
</div>
|
1228
|
+
<script>
|
1229
|
+
jQuery(function () {
|
1230
|
+
SphinxRtdTheme.Navigation.enable(true);
|
1231
|
+
});
|
1232
|
+
</script>
|
1233
|
+
|
1234
|
+
</body>
|
1692
1235
|
</html>
|