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
@@ -0,0 +1,29 @@
|
|
1
|
+
from snappy import testing
|
2
|
+
import snappy
|
3
|
+
|
4
|
+
from snappy import raytracing
|
5
|
+
import snappy.raytracing.geodesic_tube_info
|
6
|
+
import snappy.raytracing.geodesics
|
7
|
+
import snappy.raytracing.ideal_raytracing_data
|
8
|
+
import snappy.raytracing.upper_halfspace_utilities
|
9
|
+
|
10
|
+
modules = [
|
11
|
+
raytracing.cohomology_fractal,
|
12
|
+
raytracing.geodesic_tube_info,
|
13
|
+
raytracing.geodesics,
|
14
|
+
raytracing.ideal_raytracing_data,
|
15
|
+
raytracing.upper_halfspace_utilities
|
16
|
+
]
|
17
|
+
|
18
|
+
def run_doctests(verbose=False, print_info=True):
|
19
|
+
globs = {'Manifold' : snappy.Manifold,
|
20
|
+
'ManifoldHP': snappy.ManifoldHP}
|
21
|
+
return testing.doctest_modules(modules,
|
22
|
+
verbose=verbose,
|
23
|
+
print_info=print_info,
|
24
|
+
extraglobs=globs)
|
25
|
+
|
26
|
+
run_doctests.__name__ = raytracing.__name__
|
27
|
+
|
28
|
+
if __name__ == '__main__':
|
29
|
+
testing.run_doctests_as_main(run_doctests)
|
@@ -0,0 +1,146 @@
|
|
1
|
+
"""
|
2
|
+
Module defining the ToolTip widget
|
3
|
+
|
4
|
+
From https://github.com/gnikit/tkinter-tooltip
|
5
|
+
"""
|
6
|
+
|
7
|
+
import time
|
8
|
+
import tkinter as tk
|
9
|
+
from typing import Callable
|
10
|
+
|
11
|
+
# This code is based on Tucker Beck's implementation licensed under an MIT License
|
12
|
+
# Original code: http://code.activestate.com/recipes/576688-tooltip-for-tkinter/
|
13
|
+
|
14
|
+
|
15
|
+
class ToolTip(tk.Toplevel):
|
16
|
+
"""
|
17
|
+
Creates a ToolTip (pop-up) widget for tkinter
|
18
|
+
"""
|
19
|
+
|
20
|
+
def __init__(
|
21
|
+
self,
|
22
|
+
widget: tk.Widget,
|
23
|
+
msg = None, # : str | Callable
|
24
|
+
delay: float = 1.0,
|
25
|
+
follow: bool = True,
|
26
|
+
refresh: float = 1.0,
|
27
|
+
x_offset: int = +10,
|
28
|
+
y_offset: int = +10,
|
29
|
+
parent_kwargs: dict = {"bg": "black", "padx": 1, "pady": 1},
|
30
|
+
**message_kwargs,
|
31
|
+
):
|
32
|
+
"""Create a ToolTip. Allows for `**kwargs` to be passed on both
|
33
|
+
the parent frame and the ToolTip message
|
34
|
+
|
35
|
+
Parameters
|
36
|
+
----------
|
37
|
+
widget : tk.Widget
|
38
|
+
The widget this ToolTip is assigned to
|
39
|
+
msg : `Union[str, Callable]`, optional
|
40
|
+
A string message (can be dynamic) assigned to the ToolTip.
|
41
|
+
Alternatively, it can be set to a function thatreturns a string,
|
42
|
+
by default None
|
43
|
+
delay : `float`, optional
|
44
|
+
Delay in seconds before the ToolTip appears, by default 0.0
|
45
|
+
follow : `bool`, optional
|
46
|
+
ToolTip follows motion, otherwise hides, by default True
|
47
|
+
refresh : `float`, optional
|
48
|
+
Refresh rate in seconds for strings and functions when mouse is
|
49
|
+
stationary and inside the widget, by default 1.0
|
50
|
+
x_offset : `int`, optional
|
51
|
+
x-coordinate offset for the ToolTip, by default +10
|
52
|
+
y_offset : `int`, optional
|
53
|
+
y-coordinate offset for the ToolTip, by default +10
|
54
|
+
parent_kwargs : `dict`, optional
|
55
|
+
Optional kwargs to be passed into the parent frame,
|
56
|
+
by default `{"bg": "black", "padx": 1, "pady": 1}`
|
57
|
+
**message_kwargs : tkinter `**kwargs` passed directly into the ToolTip
|
58
|
+
"""
|
59
|
+
self.widget = widget
|
60
|
+
# ToolTip should have the same parent as the widget unless stated
|
61
|
+
# otherwise in the `parent_kwargs`
|
62
|
+
tk.Toplevel.__init__(self, **parent_kwargs)
|
63
|
+
self.withdraw() # Hide initially in case there is a delay
|
64
|
+
# Disable ToolTip's title bar
|
65
|
+
self.overrideredirect(True)
|
66
|
+
|
67
|
+
# StringVar instance for msg string|function
|
68
|
+
self.msgVar = tk.StringVar()
|
69
|
+
# This can be a string or a function
|
70
|
+
# Do not bother doing any sort of checks here since it sometimes results
|
71
|
+
# into multiple spawn-hide calls being made when swapping between tooltips
|
72
|
+
self.msg = msg
|
73
|
+
self.delay = delay
|
74
|
+
self.follow = follow
|
75
|
+
self.refresh = refresh
|
76
|
+
self.x_offset = x_offset
|
77
|
+
self.y_offset = y_offset
|
78
|
+
# visibility status of the ToolTip inside|outside|visible
|
79
|
+
self.status = "outside"
|
80
|
+
self.last_moved = 0
|
81
|
+
# use Message widget to host ToolTip
|
82
|
+
tk.Message(self, textvariable=self.msgVar, aspect=1000, **message_kwargs).grid()
|
83
|
+
# Add bindings to the widget without overriding the existing ones
|
84
|
+
self.widget.bind("<Enter>", self.on_enter, add="+")
|
85
|
+
self.widget.bind("<Leave>", self.on_leave, add="+")
|
86
|
+
self.widget.bind("<Motion>", self.on_enter, add="+")
|
87
|
+
self.widget.bind("<ButtonPress>", self.on_leave, add="+")
|
88
|
+
|
89
|
+
def on_enter(self, event) -> None:
|
90
|
+
"""
|
91
|
+
Processes motion within the widget including entering and moving.
|
92
|
+
"""
|
93
|
+
self.last_moved = time.time()
|
94
|
+
|
95
|
+
# Set the status as inside for the very first time
|
96
|
+
if self.status == "outside":
|
97
|
+
self.status = "inside"
|
98
|
+
|
99
|
+
# If the follow flag is not set, motion within the widget will
|
100
|
+
# make the ToolTip disappear
|
101
|
+
if not self.follow:
|
102
|
+
self.status = "inside"
|
103
|
+
self.withdraw()
|
104
|
+
|
105
|
+
# Offsets the ToolTip using the coordinates od an event as an origin
|
106
|
+
self.geometry(f"+{event.x_root + self.x_offset}+{event.y_root + self.y_offset}")
|
107
|
+
|
108
|
+
# Time is integer and in milliseconds
|
109
|
+
self.after(int(self.delay * 1000), self._show)
|
110
|
+
|
111
|
+
def on_leave(self, event=None) -> None:
|
112
|
+
"""
|
113
|
+
Hides the ToolTip.
|
114
|
+
"""
|
115
|
+
self.status = "outside"
|
116
|
+
self.withdraw()
|
117
|
+
|
118
|
+
def _show(self) -> None:
|
119
|
+
"""
|
120
|
+
Displays the ToolTip.
|
121
|
+
|
122
|
+
Recursively queues `_show` in the scheduler every `self.refresh` seconds
|
123
|
+
"""
|
124
|
+
if self.status == "inside" and time.time() - self.last_moved > self.delay:
|
125
|
+
self.status = "visible"
|
126
|
+
|
127
|
+
if self.status == "visible":
|
128
|
+
# Update the string with the latest function call
|
129
|
+
# Try and call self.msg as a function, if msg is not callable try and
|
130
|
+
# set it as a normal string if that fails throw an error
|
131
|
+
try:
|
132
|
+
self.msgVar.set(self.msg())
|
133
|
+
except TypeError:
|
134
|
+
# Intentionally do not check if msg is str, can be a list of str
|
135
|
+
self.msgVar.set(self.msg)
|
136
|
+
except:
|
137
|
+
raise (
|
138
|
+
"Error: ToolTip `msg` must be a string or string returning "
|
139
|
+
+ f"function instead `msg` of type {type(self.msg)} was input"
|
140
|
+
)
|
141
|
+
self.deiconify()
|
142
|
+
|
143
|
+
# Recursively call _show to update ToolTip with the newest value of msg
|
144
|
+
# This is a race condition which only exits when upon a binding change
|
145
|
+
# that in turn changes the `status` to outside
|
146
|
+
self.after(int(self.refresh * 1000), self._show)
|
@@ -1,6 +1,9 @@
|
|
1
|
-
from
|
1
|
+
from ..matrix import make_matrix
|
2
2
|
from ..upper_halfspace.ideal_point import Infinity
|
3
|
+
from ..upper_halfspace import pgl2c_to_o13, sl2c_inverse
|
3
4
|
|
5
|
+
from ..snap.t3mlite import simplex
|
6
|
+
from ..snap.t3mlite import Mcomplex
|
4
7
|
|
5
8
|
def symmetric_vertices_for_tetrahedron(z):
|
6
9
|
"""
|
@@ -22,25 +25,25 @@ def pgl2_matrix_taking_0_1_inf_to_given_points(z0, z1, zinf):
|
|
22
25
|
if z0 == Infinity:
|
23
26
|
CF = z1.parent()
|
24
27
|
m = zinf - z1
|
25
|
-
return
|
26
|
-
|
28
|
+
return make_matrix([[ -zinf, m ],
|
29
|
+
[ -1, 0 ]], ring=CF)
|
27
30
|
|
28
31
|
if z1 == Infinity:
|
29
32
|
CF = zinf.parent()
|
30
|
-
return
|
31
|
-
|
33
|
+
return make_matrix([[ -zinf, z0 ],
|
34
|
+
[ -1, 1 ]], ring=CF)
|
32
35
|
|
33
36
|
if zinf == Infinity:
|
34
37
|
CF = z0.parent()
|
35
38
|
l = z0 - z1
|
36
|
-
return
|
37
|
-
|
39
|
+
return make_matrix([[ -l, z0 ],
|
40
|
+
[ 0, 1 ]], ring=CF)
|
38
41
|
|
39
42
|
l = z0 - z1
|
40
43
|
m = zinf - z1
|
41
44
|
|
42
|
-
return
|
43
|
-
|
45
|
+
return make_matrix([[ -l * zinf, m * z0 ],
|
46
|
+
[ -l, m ]])
|
44
47
|
|
45
48
|
|
46
49
|
def are_sl_matrices_close(m1, m2, epsilon=1e-5):
|
@@ -63,3 +66,33 @@ def are_psl_matrices_close(m1, m2, epsilon=1e-5):
|
|
63
66
|
return (
|
64
67
|
are_sl_matrices_close(m1, m2, epsilon) or
|
65
68
|
are_sl_matrices_close(m1, -m2, epsilon))
|
69
|
+
|
70
|
+
def o13_matrix_taking_ideal_vertices_to_ideal_vertices(verts0, verts1):
|
71
|
+
m1 = pgl2_matrix_taking_0_1_inf_to_given_points(*verts0)
|
72
|
+
m2 = pgl2_matrix_taking_0_1_inf_to_given_points(*verts1)
|
73
|
+
|
74
|
+
return pgl2c_to_o13(m2 * sl2c_inverse(m1))
|
75
|
+
|
76
|
+
def add_coordinate_transform_to_mcomplex(mcomplex : Mcomplex):
|
77
|
+
"""
|
78
|
+
Most places in SnapPy/SnapPea kernel develop the tetrahedra
|
79
|
+
so that they form a fundamental domain - so that pairing
|
80
|
+
matrices are the identity for faces that are internal to the
|
81
|
+
fundamental domain.
|
82
|
+
|
83
|
+
However, for the raytracing shader, we pick the vertices of each
|
84
|
+
tetrahedron so that the center is at the origin.
|
85
|
+
|
86
|
+
Compute the matrix that can take structures in the coordinate
|
87
|
+
system native to SnapPy/SnapPea kernel to the coordinate system
|
88
|
+
used by the raytracing shader.
|
89
|
+
|
90
|
+
"""
|
91
|
+
for tet in mcomplex.Tetrahedra:
|
92
|
+
z = tet.ShapeParameters[simplex.E01]
|
93
|
+
vert0 = [ tet.ideal_vertices[v]
|
94
|
+
for v in simplex.ZeroSubsimplices[:3]]
|
95
|
+
vert1 = symmetric_vertices_for_tetrahedron(z)[:3]
|
96
|
+
tet.to_coordinates_in_symmetric_tet = (
|
97
|
+
o13_matrix_taking_ideal_vertices_to_ideal_vertices(
|
98
|
+
vert0, vert1))
|
snappy/sage_helper.py
CHANGED
@@ -9,45 +9,99 @@ than the usual ">>>".
|
|
9
9
|
"""
|
10
10
|
|
11
11
|
try:
|
12
|
-
import sage.
|
12
|
+
import sage.structure.sage_object
|
13
13
|
_within_sage = True
|
14
14
|
except ImportError:
|
15
15
|
_within_sage = False
|
16
|
-
import decorator
|
17
|
-
|
18
|
-
import sys
|
19
|
-
import doctest
|
20
|
-
import re
|
21
|
-
import types
|
22
|
-
|
23
|
-
from .numeric_output_checker import NumericOutputChecker
|
24
|
-
|
25
16
|
|
26
17
|
class SageNotAvailable(Exception):
|
27
18
|
pass
|
28
19
|
|
29
|
-
|
30
20
|
if _within_sage:
|
31
21
|
def sage_method(function):
|
32
22
|
function._sage_method = True
|
33
23
|
return function
|
34
24
|
|
25
|
+
try:
|
26
|
+
# Monolithic Sage library
|
27
|
+
from sage.all import RealField, RealDoubleElement, gcd, xgcd, prod, powerset
|
28
|
+
from sage.all import MatrixSpace, matrix, vector, ZZ
|
29
|
+
from sage.all import Integer, Rational, QQ, RR, CC
|
30
|
+
from sage.all import sqrt
|
31
|
+
from sage.all import I, Infinity
|
32
|
+
from sage.all import arccosh
|
33
|
+
from sage.all import RIF, CIF
|
34
|
+
from sage.all import (cached_method, real_part, imag_part, round, ceil, floor, log,
|
35
|
+
CDF, ComplexDoubleField, ComplexField, CyclotomicField, NumberField, PolynomialRing, identity_matrix)
|
36
|
+
from sage.all import FiniteField as GF
|
37
|
+
from sage.all import VectorSpace, ChainComplex
|
38
|
+
from sage.all import ComplexBallField, exp, sin, block_matrix, prime_range, det
|
39
|
+
from sage.all import LaurentPolynomialRing, AbelianGroup, GroupAlgebra
|
40
|
+
from sage.all import is_prime
|
41
|
+
except ImportError:
|
42
|
+
# Modularized Sage library
|
43
|
+
from sage.algebras.group_algebra import GroupAlgebra
|
44
|
+
from sage.arith.misc import gcd, xgcd, is_prime
|
45
|
+
from sage.combinat.subset import powerset
|
46
|
+
from sage.functions.hyperbolic import arccosh
|
47
|
+
from sage.functions.log import exp
|
48
|
+
from sage.functions.other import (real as real_part,
|
49
|
+
imag as imag_part,
|
50
|
+
ceil,
|
51
|
+
floor)
|
52
|
+
from sage.functions.trig import sin
|
53
|
+
from sage.groups.abelian_gps.abelian_group import AbelianGroup
|
54
|
+
from sage.homology.chain_complex import ChainComplex
|
55
|
+
from sage.matrix.constructor import Matrix as matrix
|
56
|
+
from sage.matrix.matrix_space import MatrixSpace
|
57
|
+
from sage.matrix.special import block_matrix, identity_matrix
|
58
|
+
from sage.misc.cachefunc import cached_method
|
59
|
+
from sage.misc.functional import det, log, round, sqrt
|
60
|
+
from sage.misc.misc_c import prod
|
61
|
+
from sage.modules.free_module import VectorSpace
|
62
|
+
from sage.modules.free_module_element import free_module_element as vector
|
63
|
+
from sage.rings.cc import CC
|
64
|
+
from sage.rings.cif import CIF
|
65
|
+
from sage.rings.complex_arb import ComplexBallField
|
66
|
+
from sage.rings.complex_double import CDF, ComplexDoubleField
|
67
|
+
from sage.rings.complex_mpfr import ComplexField
|
68
|
+
from sage.rings.fast_arith import prime_range
|
69
|
+
from sage.rings.finite_rings.finite_field_constructor import FiniteField as GF
|
70
|
+
from sage.rings.imaginary_unit import I
|
71
|
+
from sage.rings.infinity import Infinity
|
72
|
+
from sage.rings.integer import Integer
|
73
|
+
from sage.rings.integer_ring import ZZ
|
74
|
+
from sage.rings.polynomial.laurent_polynomial_ring import LaurentPolynomialRing
|
75
|
+
from sage.rings.number_field.number_field import CyclotomicField, NumberField
|
76
|
+
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
|
77
|
+
from sage.rings.rational import Rational
|
78
|
+
from sage.rings.rational_field import QQ
|
79
|
+
from sage.rings.real_double import RealDoubleElement
|
80
|
+
from sage.rings.real_mpfi import RIF
|
81
|
+
from sage.rings.real_mpfr import RealField, RealNumber, RR
|
82
|
+
|
83
|
+
from sage.rings.complex_interval_field import ComplexIntervalField
|
84
|
+
from sage.rings.real_mpfi import is_RealIntervalFieldElement, RealIntervalField
|
85
|
+
from sage.rings.real_mpfr import RealNumber, RealField_class
|
86
|
+
from sage.structure.sage_object import SageObject
|
87
|
+
|
35
88
|
try: # Sage >= 9.3, see https://trac.sagemath.org/ticket/24483
|
36
89
|
from sage.rings.complex_mpfr import (ComplexField,
|
37
90
|
ComplexField_class,
|
38
91
|
create_ComplexNumber)
|
39
|
-
except
|
92
|
+
except ImportError:
|
40
93
|
from sage.rings.complex_field import ComplexField, ComplexField_class
|
41
94
|
from sage.rings.complex_number import create_ComplexNumber
|
42
95
|
|
43
96
|
else:
|
97
|
+
import decorator
|
98
|
+
|
44
99
|
def _sage_method(function, *args, **kw):
|
45
100
|
raise SageNotAvailable('Sorry, this feature requires using SnapPy inside Sage.')
|
46
101
|
|
47
102
|
def sage_method(function):
|
48
103
|
return decorator.decorator(_sage_method, function)
|
49
104
|
|
50
|
-
|
51
105
|
# Not currently used, but could be exploited by an interpreter to hide
|
52
106
|
# sage_methods when in plain Python.
|
53
107
|
|
@@ -61,124 +115,3 @@ def sage_methods(obj):
|
|
61
115
|
except AttributeError:
|
62
116
|
pass
|
63
117
|
return ans
|
64
|
-
|
65
|
-
|
66
|
-
# Used for doctesting
|
67
|
-
_gui_status = {}
|
68
|
-
|
69
|
-
try:
|
70
|
-
from snappy.gui import Tk_
|
71
|
-
_gui_status['tk'] = True
|
72
|
-
except ImportError:
|
73
|
-
_gui_status['tk'] = False
|
74
|
-
if _gui_status['tk']:
|
75
|
-
try:
|
76
|
-
import snappy.CyOpenGL
|
77
|
-
_gui_status['cyopengl'] = True
|
78
|
-
except:
|
79
|
-
_gui_status['cyopengl'] = False
|
80
|
-
else:
|
81
|
-
_gui_status['cyopengl'] = False
|
82
|
-
_gui_status['fake_root'] = False
|
83
|
-
|
84
|
-
|
85
|
-
def cyopengl_works():
|
86
|
-
if not _gui_status['cyopengl']:
|
87
|
-
return False
|
88
|
-
# if we are running the tests from the snappy app the default root will
|
89
|
-
# already exist -- it will be the tkterminal window. Otherwise, we open
|
90
|
-
# a root window here to serve as the master of all of the GUI windows
|
91
|
-
# which get created during testing.
|
92
|
-
if _gui_status['tk'] and not Tk_._default_root:
|
93
|
-
try:
|
94
|
-
root = Tk_.Tk()
|
95
|
-
if sys.platform not in ('linux', 'linux2'):
|
96
|
-
root.withdraw()
|
97
|
-
except:
|
98
|
-
# tkinter loads OK but is not able to get a display.
|
99
|
-
_gui_status['tk'] = _gui_status['cyopengl'] = False
|
100
|
-
return _gui_status['cyopengl']
|
101
|
-
|
102
|
-
|
103
|
-
def tk_root():
|
104
|
-
if _gui_status['tk']:
|
105
|
-
return Tk_._default_root
|
106
|
-
else:
|
107
|
-
return None
|
108
|
-
|
109
|
-
|
110
|
-
def root_is_fake():
|
111
|
-
return _gui_status['fake_root']
|
112
|
-
|
113
|
-
|
114
|
-
class DocTestParser(doctest.DocTestParser):
|
115
|
-
_use_cyopengl_initialized = False
|
116
|
-
_use_cyopengl = False
|
117
|
-
use_modernopengl = True
|
118
|
-
use_sage = False
|
119
|
-
|
120
|
-
def parse(self, string, name='<string>'):
|
121
|
-
string = re.subn(
|
122
|
-
r'#doctest: \+CYOPENGL',
|
123
|
-
'' if DocTestParser._use_cyopengl else '#doctest: +SKIP',
|
124
|
-
string)[0]
|
125
|
-
|
126
|
-
string = re.subn(
|
127
|
-
r'#doctest: \+CYMODERNOPENGL',
|
128
|
-
(''
|
129
|
-
if (DocTestParser._use_cyopengl and
|
130
|
-
DocTestParser.use_modernopengl)
|
131
|
-
else '#doctest: +SKIP'),
|
132
|
-
string)[0]
|
133
|
-
|
134
|
-
if DocTestParser.use_sage:
|
135
|
-
string = re.subn(r'(\n\s*)sage:|(\A\s*)sage:',
|
136
|
-
r'\g<1>>>>',
|
137
|
-
string)[0]
|
138
|
-
return doctest.DocTestParser.parse(self, string, name)
|
139
|
-
|
140
|
-
|
141
|
-
DocTestParser.use_sage = _within_sage
|
142
|
-
|
143
|
-
if _within_sage:
|
144
|
-
globs = {'PSL': sage.all.PSL, 'BraidGroup': sage.all.BraidGroup}
|
145
|
-
else:
|
146
|
-
globs = {}
|
147
|
-
|
148
|
-
|
149
|
-
def print_results(module, results):
|
150
|
-
root = tk_root()
|
151
|
-
# Platform specific hacks to make running the tests work.
|
152
|
-
if root and not root_is_fake():
|
153
|
-
if sys.platform in ('linux', 'linux2'):
|
154
|
-
root.deiconify()
|
155
|
-
root.update_idletasks()
|
156
|
-
else:
|
157
|
-
root.update()
|
158
|
-
print(module.__name__ + ':')
|
159
|
-
print(' %s failures out of %s tests.' % (results.failed,
|
160
|
-
results.attempted))
|
161
|
-
|
162
|
-
|
163
|
-
def doctest_modules(modules, verbose=False, print_info=True, extraglobs=dict()):
|
164
|
-
finder = doctest.DocTestFinder(parser=DocTestParser())
|
165
|
-
# full_extraglobals = dict(globs.items() + extraglobs.items())
|
166
|
-
full_extraglobals = globs.copy()
|
167
|
-
full_extraglobals.update(extraglobs)
|
168
|
-
failed, attempted = 0, 0
|
169
|
-
for module in modules:
|
170
|
-
if isinstance(module, types.ModuleType):
|
171
|
-
runner = doctest.DocTestRunner(checker=NumericOutputChecker(), verbose=verbose)
|
172
|
-
for test in finder.find(module, extraglobs=full_extraglobals):
|
173
|
-
runner.run(test)
|
174
|
-
result = runner.summarize()
|
175
|
-
else:
|
176
|
-
result = module(verbose=verbose)
|
177
|
-
failed += result.failed
|
178
|
-
attempted += result.attempted
|
179
|
-
if print_info:
|
180
|
-
print_results(module, result)
|
181
|
-
|
182
|
-
if print_info:
|
183
|
-
print('\nAll doctests:\n %s failures out of %s tests.' % (failed, attempted))
|
184
|
-
return doctest.TestResults(failed, attempted)
|