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/settings.py
CHANGED
@@ -1,24 +1,31 @@
|
|
1
1
|
import os
|
2
2
|
import sys
|
3
|
-
|
4
|
-
import plistlib
|
5
|
-
except ImportError:
|
6
|
-
from . import plistlib
|
3
|
+
import plistlib
|
7
4
|
from .gui import *
|
8
5
|
from .app_menus import ListedWindow
|
6
|
+
from .tkterminal import FontChoice, default_terminal_font
|
7
|
+
|
8
|
+
def clip_font_size(size):
|
9
|
+
try:
|
10
|
+
value = int(size)
|
11
|
+
except:
|
12
|
+
return 13 if sys.platform == 'darwin' else 11
|
13
|
+
if value < 10:
|
14
|
+
return 10
|
15
|
+
if value > 36:
|
16
|
+
return 36
|
17
|
+
return size
|
9
18
|
|
10
19
|
class Settings:
|
11
|
-
def __init__(self
|
12
|
-
self.text_widget = text_widget
|
20
|
+
def __init__(self):
|
13
21
|
self.setting_dict = {
|
14
22
|
'autocall' : False,
|
15
|
-
'
|
16
|
-
'font' : self.current_font_tuple(),
|
23
|
+
'font' : self.default_font(),
|
17
24
|
'cusp_horoballs' : True,
|
18
25
|
'cusp_triangulation' : True,
|
19
26
|
'cusp_ford_domain' : True,
|
20
27
|
'cusp_parallelogram' : True,
|
21
|
-
'cusp_labels' :
|
28
|
+
'cusp_labels' : False,
|
22
29
|
'cusp_cutoff' : '0.1000',
|
23
30
|
'keyboard' : 'QWERTY'}
|
24
31
|
self.cache = {}
|
@@ -41,14 +48,8 @@ class Settings:
|
|
41
48
|
def get(self, key, default):
|
42
49
|
return self.setting_dict.get(key, default)
|
43
50
|
|
44
|
-
def
|
45
|
-
|
46
|
-
return Font(font=font_string).actual()
|
47
|
-
|
48
|
-
def current_font_tuple(self):
|
49
|
-
font = self.current_font_dict()
|
50
|
-
style = '%s %s' % (font['weight'], font['slant'])
|
51
|
-
return (font['family'], font['size'], style)
|
51
|
+
def default_font(self):
|
52
|
+
return default_terminal_font()
|
52
53
|
|
53
54
|
def find_settings(self):
|
54
55
|
if sys.platform == 'darwin':
|
@@ -66,7 +67,7 @@ class Settings:
|
|
66
67
|
self.setting_file = os.path.join(home, '.SnapPy.plist')
|
67
68
|
else:
|
68
69
|
self.setting_file = None
|
69
|
-
|
70
|
+
|
70
71
|
def read_settings(self):
|
71
72
|
if self.setting_file:
|
72
73
|
try:
|
@@ -75,18 +76,24 @@ class Settings:
|
|
75
76
|
self.setting_dict.update(plistlib.load(setting_file))
|
76
77
|
else:
|
77
78
|
self.setting_dict.update(plistlib.readPlist(self.setting_file))
|
78
|
-
|
79
|
-
|
80
|
-
|
79
|
+
family, size, info = self.setting_dict['font']
|
80
|
+
# Guard against crazy values in the settings plist file.
|
81
|
+
size = clip_font_size(size)
|
82
|
+
weight, slant = info.split()
|
83
|
+
self.setting_dict['font'] = FontChoice(family, size, weight, slant)
|
84
|
+
except OSError:
|
81
85
|
pass
|
82
86
|
|
83
87
|
def write_settings(self):
|
84
88
|
if self.setting_file:
|
89
|
+
setting_dict = self.setting_dict.copy()
|
90
|
+
font = self.setting_dict['font']
|
91
|
+
setting_dict['font'] = (font.family, font.size, font.rest)
|
85
92
|
if hasattr(plistlib, 'dump'):
|
86
93
|
with open(self.setting_file, 'wb') as setting_file:
|
87
|
-
plistlib.dump(
|
94
|
+
plistlib.dump(setting_dict, setting_file)
|
88
95
|
else:
|
89
|
-
plistlib.writePlist(
|
96
|
+
plistlib.writePlist(setting_dict, self.setting_file)
|
90
97
|
|
91
98
|
def cache_settings(self):
|
92
99
|
self.cache.update(self.setting_dict)
|
@@ -101,7 +108,6 @@ class Settings:
|
|
101
108
|
|
102
109
|
# Override this in a subclass.
|
103
110
|
def apply_settings(self):
|
104
|
-
self.text_widget.config(font=self.setting_dict['font'])
|
105
111
|
print(self.setting_dict)
|
106
112
|
|
107
113
|
|
@@ -134,7 +140,7 @@ class SettingsDialog(Dialog):
|
|
134
140
|
|
135
141
|
def run(self):
|
136
142
|
self.wait_window(self)
|
137
|
-
|
143
|
+
|
138
144
|
def validate(self):
|
139
145
|
cutoff = self.cutoff.get()
|
140
146
|
try:
|
@@ -172,23 +178,15 @@ class SettingsDialog(Dialog):
|
|
172
178
|
sticky=Tk_.N + Tk_.S + Tk_.W + Tk_.E)
|
173
179
|
self.body_frame.focus_set()
|
174
180
|
|
175
|
-
def build_font_pane(self,
|
176
|
-
current_font = self.settings
|
181
|
+
def build_font_pane(self, parent):
|
182
|
+
current_font = self.settings['font']
|
177
183
|
groupBG = self.style.groupBG
|
178
|
-
self.font_frame = font_frame = ttk.Frame(
|
184
|
+
self.font_frame = font_frame = ttk.Frame(parent)
|
179
185
|
font_frame.columnconfigure(2, weight=1)
|
180
186
|
font_frame.columnconfigure(0, weight=1)
|
181
187
|
self.list_frame = list_frame = ttk.Frame(font_frame)
|
182
188
|
self.font_list = font_list = Tk_.Listbox(list_frame,
|
183
189
|
selectmode=Tk_.SINGLE)
|
184
|
-
self.families = families = [f for f in font_families()
|
185
|
-
if f[0] != '@'] # omit vertical fonts
|
186
|
-
families.sort()
|
187
|
-
for family in families:
|
188
|
-
font_list.insert(Tk_.END, family)
|
189
|
-
self.current_family = families.index(current_font['family'])
|
190
|
-
font_list.selection_set(self.current_family)
|
191
|
-
font_list.see(self.current_family)
|
192
190
|
font_list.grid(row=0, column=0, pady=(20,30))
|
193
191
|
font_scroller = ttk.Scrollbar(list_frame,
|
194
192
|
command=font_list.yview)
|
@@ -199,17 +197,31 @@ class SettingsDialog(Dialog):
|
|
199
197
|
label = ttk.Label(self.font_frame, text='Size: ')
|
200
198
|
label.grid(row=0, column=1, sticky=Tk_.E, pady=(20,0))
|
201
199
|
self.font_sizer = sizer = Spinbox(font_frame, from_=10, to_=36, width=4,
|
202
|
-
|
203
|
-
|
200
|
+
command=self.set_font_sample)
|
201
|
+
def check_font_size(size):
|
202
|
+
try:
|
203
|
+
value = int(size)
|
204
|
+
except:
|
205
|
+
sizer.set(13 if sys.platform == 'darwin' else 11)
|
206
|
+
return False
|
207
|
+
if value < 10:
|
208
|
+
sizer.set(10)
|
209
|
+
return False
|
210
|
+
if value > 36:
|
211
|
+
sizer.set(36)
|
212
|
+
return False
|
213
|
+
return True
|
214
|
+
validator = parent.register(check_font_size)
|
215
|
+
sizer.config(validate ="key", validatecommand =(validator, '%P'))
|
204
216
|
sizer.delete(0,2)
|
205
|
-
sizer.insert(0, current_font
|
217
|
+
sizer.insert(0, clip_font_size(current_font.size))
|
206
218
|
sizer.bind('<Return>', self.set_font_sample)
|
207
219
|
sizer.bind('<Tab>', self.set_font_sample)
|
208
|
-
self.current_size = current_font
|
220
|
+
self.current_size = current_font.size
|
209
221
|
sizer.grid(row=0, column=2, sticky=Tk_.W, pady=(20,0))
|
210
222
|
label = ttk.Label(font_frame, text='Weight: ')
|
211
223
|
label.grid(row=1, column=1, sticky=Tk_.E)
|
212
|
-
self.font_weight = weight = Tk_.StringVar(value=current_font
|
224
|
+
self.font_weight = weight = Tk_.StringVar(value=current_font.weight)
|
213
225
|
radio = ttk.Radiobutton(font_frame, text='normal', variable=weight,
|
214
226
|
value='normal', command=self.set_font_sample)
|
215
227
|
radio.grid(row=1, column=2, sticky=Tk_.W)
|
@@ -218,25 +230,47 @@ class SettingsDialog(Dialog):
|
|
218
230
|
radio.grid(row=2, column=2, sticky=Tk_.W)
|
219
231
|
label = ttk.Label(font_frame, text='Slant: ')
|
220
232
|
label.grid(row=3, column=1, sticky=Tk_.E)
|
221
|
-
self.font_slant = slant = Tk_.StringVar(value=current_font
|
233
|
+
self.font_slant = slant = Tk_.StringVar(value=current_font.slant)
|
222
234
|
radio = ttk.Radiobutton(font_frame, text='roman', variable=slant,
|
223
235
|
value='roman', command=self.set_font_sample)
|
224
236
|
radio.grid(row=3, column=2, sticky=Tk_.W)
|
225
237
|
radio = ttk.Radiobutton(font_frame, text='italic', variable=slant,
|
226
238
|
value='italic', command=self.set_font_sample)
|
227
239
|
radio.grid(row=4, column=2, sticky=Tk_.W)
|
228
|
-
|
240
|
+
|
241
|
+
self.fixed_only = Tk_.BooleanVar(value=True)
|
242
|
+
self.check_fixed = ttk.Checkbutton(font_frame, variable=self.fixed_only,
|
243
|
+
text='Fixed-width fonts only',
|
244
|
+
command=self.set_font_families)
|
245
|
+
self.check_fixed.grid(row=6, column=0, pady=(0, 10), sticky=Tk_.N)
|
246
|
+
self.sample = sample = Tk_.Text(font_frame,
|
229
247
|
width=40, height=6,
|
230
248
|
highlightthickness=0,
|
231
249
|
relief=Tk_.FLAT,
|
232
|
-
font=self.settings['font'])
|
250
|
+
font=self.settings['font'].as_tuple())
|
233
251
|
self.sample.bind('<Button-1>', lambda event: 'break')
|
234
252
|
self.sample.insert(Tk_.INSERT, '\nABCDEFGHIJKLMNOPQRSTUVWXYZ\n'
|
235
253
|
'abcdefghijklmnopqrstuvwxyz')
|
236
254
|
sample.tag_add('all', '1.0', Tk_.END)
|
237
|
-
self.set_font_sample()
|
238
255
|
font_list.bind('<ButtonRelease-1>', self.set_font_sample)
|
239
|
-
self.sample.grid(row=
|
256
|
+
self.sample.grid(row=7, columnspan=4, padx=10, pady=10, sticky=Tk_.E+Tk_.W)
|
257
|
+
self.set_font_families()
|
258
|
+
self.set_font_sample()
|
259
|
+
|
260
|
+
def set_font_families(self):
|
261
|
+
families = {f for f in font_families()
|
262
|
+
if f[0] != '@' and f.lower().find('emoji') < 0} # omit vertical fonts, emojis
|
263
|
+
if self.fixed_only.get():
|
264
|
+
families = {f for f in families if Font(family=f).metrics('fixed')}
|
265
|
+
families.add(self.settings['font'].family)
|
266
|
+
self.families = families = sorted(families)
|
267
|
+
if self.font_list.size() > 0:
|
268
|
+
self.font_list.delete(0, self.font_list.size() - 1)
|
269
|
+
for family in families:
|
270
|
+
self.font_list.insert(Tk_.END, family)
|
271
|
+
self.current_family = families.index(self.settings['font'].family)
|
272
|
+
self.font_list.selection_set(self.current_family)
|
273
|
+
self.font_list.see(self.current_family)
|
240
274
|
|
241
275
|
def get_font(self):
|
242
276
|
selection = self.font_list.curselection()
|
@@ -253,21 +287,20 @@ class SettingsDialog(Dialog):
|
|
253
287
|
self.font_sizer.delete(0, Tk_.END)
|
254
288
|
self.font_sizer.insert(0, str(size))
|
255
289
|
self.font_list.selection_set(self.current_family)
|
256
|
-
|
257
|
-
|
290
|
+
return FontChoice(family, size,
|
291
|
+
self.font_weight.get(), self.font_slant.get())
|
258
292
|
|
259
293
|
def set_font_sample(self, event=None):
|
260
294
|
new_font = self.get_font()
|
261
295
|
self.settings['font'] = new_font
|
262
296
|
self.sample.tag_config('all', justify=Tk_.CENTER,
|
263
|
-
font=new_font)
|
297
|
+
font=new_font.as_tuple())
|
264
298
|
|
265
|
-
def build_shell_pane(self,
|
299
|
+
def build_shell_pane(self, parent):
|
266
300
|
groupBG = self.style.groupBG
|
267
301
|
self.autocall = Tk_.BooleanVar(value=self.settings['autocall'])
|
268
|
-
self.automagic = Tk_.BooleanVar(value=self.settings['automagic'])
|
269
302
|
self.update_idletasks()
|
270
|
-
self.shell_frame = shell_frame = ttk.Frame(
|
303
|
+
self.shell_frame = shell_frame = ttk.Frame(parent)
|
271
304
|
shell_frame.rowconfigure(3, weight=1)
|
272
305
|
shell_frame.columnconfigure(0, weight=1)
|
273
306
|
shell_frame.columnconfigure(3, weight=1)
|
@@ -281,20 +314,14 @@ class SettingsDialog(Dialog):
|
|
281
314
|
text='IPython autocall',
|
282
315
|
command=self.set_autocall)
|
283
316
|
next_check.grid(row=1, column=1, sticky=Tk_.W, pady=(10,0))
|
284
|
-
next_check = ttk.Checkbutton(shell_frame, variable=self.automagic,
|
285
|
-
text='IPython automagic',
|
286
|
-
command=self.set_automagic)
|
287
317
|
next_check.grid(row=2, column=1, sticky=Tk_.W, pady=(5,0))
|
288
318
|
|
289
319
|
def set_autocall(self):
|
290
320
|
self.settings['autocall'] = self.autocall.get()
|
291
321
|
|
292
|
-
def
|
293
|
-
self.settings['automagic'] = self.automagic.get()
|
294
|
-
|
295
|
-
def build_cusp_pane(self, master):
|
322
|
+
def build_cusp_pane(self, parent):
|
296
323
|
groupBG = self.style.groupBG
|
297
|
-
self.cusp_frame = cusp_frame = ttk.Frame(
|
324
|
+
self.cusp_frame = cusp_frame = ttk.Frame(parent)
|
298
325
|
self.horoballs = Tk_.BooleanVar(value=self.settings['cusp_horoballs'])
|
299
326
|
self.triangulation = Tk_.BooleanVar(value=self.settings['cusp_triangulation'])
|
300
327
|
self.ford = Tk_.BooleanVar(value=self.settings['cusp_ford_domain'])
|
@@ -353,10 +380,10 @@ class SettingsDialog(Dialog):
|
|
353
380
|
def set_parallelogram(self):
|
354
381
|
self.settings['cusp_parallelogram'] = self.parallelogram.get()
|
355
382
|
|
356
|
-
def build_inside_pane(self,
|
383
|
+
def build_inside_pane(self, parent):
|
357
384
|
groupBG = self.style.groupBG
|
358
385
|
self.keyboard = Tk_.Variable(value=self.settings['keyboard'])
|
359
|
-
self.inside_frame = frame = ttk.Frame(
|
386
|
+
self.inside_frame = frame = ttk.Frame(parent)
|
360
387
|
frame.rowconfigure(3, weight=1)
|
361
388
|
frame.columnconfigure(0, weight=1)
|
362
389
|
frame.columnconfigure(3, weight=1)
|
@@ -376,21 +403,7 @@ class SettingsDialog(Dialog):
|
|
376
403
|
|
377
404
|
if __name__ == '__main__':
|
378
405
|
parent = Tk_.Tk(className='snappy')
|
379
|
-
|
380
|
-
text_widget.insert(Tk_.INSERT, """
|
381
|
-
Lorem ipsum dolor sit amet, consectetur adipisicing
|
382
|
-
elit, sed do eiusmod tempor incididunt ut labore et
|
383
|
-
dolore magna aliqua. Ut enim ad minim veniam, quis
|
384
|
-
nostrud exercitation ullamco laboris nisi ut aliquip
|
385
|
-
ex ea commodo consequat. Duis aute irure dolor in
|
386
|
-
reprehenderit in voluptate velit esse cillum dolore
|
387
|
-
eu fugiat nulla pariatur. Excepteur sint occaecat
|
388
|
-
cupidatat non proident, sunt in culpa qui officia
|
389
|
-
deserunt mollit anim id est laborum.""")
|
390
|
-
text_widget.tag_add('all', '1.0', Tk_.END)
|
391
|
-
text_widget.tag_config('all', lmargin1=20, lmargin2=20)
|
392
|
-
text_widget.pack()
|
393
|
-
settings = Settings(text_widget)
|
406
|
+
settings = Settings()
|
394
407
|
settings.apply_settings()
|
395
408
|
SettingsDialog(parent, settings)
|
396
409
|
parent.mainloop()
|
snappy/shell.py
CHANGED
@@ -40,6 +40,8 @@ class SnapPyInteractiveShellEmbed(InteractiveShellEmbed):
|
|
40
40
|
colors_force = True
|
41
41
|
separate_out = '\n'
|
42
42
|
separate_in = ''
|
43
|
+
show_rewritten_input = False
|
44
|
+
pt_app = None
|
43
45
|
|
44
46
|
def __init__(self, *args, **kwargs):
|
45
47
|
super(InteractiveShellEmbed, self).__init__(*args, **kwargs)
|
@@ -359,7 +359,7 @@ def character_variety_ideal(gens, rels=None):
|
|
359
359
|
2
|
360
360
|
"""
|
361
361
|
presentation = character_variety(gens, rels)
|
362
|
-
from
|
362
|
+
from ..sage_helper import PolynomialRing, QQ
|
363
363
|
R = PolynomialRing(QQ, [repr(v) for v in presentation.gens])
|
364
364
|
return R.ideal([R(p) for p in presentation.rels])
|
365
365
|
|
@@ -369,7 +369,7 @@ def total_answer_length(I):
|
|
369
369
|
|
370
370
|
|
371
371
|
if __name__ == "__main__":
|
372
|
-
from snappy.
|
372
|
+
from snappy.testing import doctest_modules
|
373
373
|
import sys
|
374
374
|
current_module = sys.modules[__name__]
|
375
375
|
doctest_modules([current_module])
|
snappy/snap/find_field.py
CHANGED
@@ -1,8 +1,9 @@
|
|
1
|
-
from sage.all import (cached_method, real_part, imag_part, round, ceil, floor, log,
|
2
|
-
ZZ, QQ, CDF, ComplexField, NumberField, PolynomialRing,
|
3
|
-
matrix, identity_matrix)
|
4
1
|
import itertools
|
5
2
|
|
3
|
+
from ..sage_helper import (cached_method, real_part, imag_part, round, ceil, floor, log,
|
4
|
+
ZZ, QQ, CDF, ComplexField, NumberField, PolynomialRing,
|
5
|
+
matrix, identity_matrix)
|
6
|
+
|
6
7
|
|
7
8
|
def error(poly, z, a=ZZ(0)):
|
8
9
|
"""
|
@@ -11,7 +11,7 @@ __all__ = ['FundamentalPolyhedronEngine']
|
|
11
11
|
|
12
12
|
from ..sage_helper import _within_sage
|
13
13
|
if _within_sage:
|
14
|
-
from
|
14
|
+
from ..sage_helper import matrix
|
15
15
|
else:
|
16
16
|
from .utilities import Matrix2x2 as matrix
|
17
17
|
|
@@ -342,7 +342,7 @@ class FundamentalPolyhedronEngine(McomplexEngine):
|
|
342
342
|
|
343
343
|
The GeneratorMatrices computed here are for the face-pairing
|
344
344
|
presentation with respect to the fundamental polyhedron.
|
345
|
-
That presentation can be
|
345
|
+
That presentation can be simplified by M.fundamental_group(...)
|
346
346
|
and this function will compute the matrices for the simplified
|
347
347
|
presentation from the GeneratorMatrices.
|
348
348
|
|
snappy/snap/kernel_structures.py
CHANGED
@@ -17,7 +17,7 @@ def _clean_ideal_vertices(vertices):
|
|
17
17
|
|
18
18
|
class TransferKernelStructuresEngine(McomplexEngine):
|
19
19
|
def __init__(self, mcomplex, snappyTriangulation):
|
20
|
-
super(
|
20
|
+
super().__init__(mcomplex)
|
21
21
|
self.snappyTriangulation = snappyTriangulation
|
22
22
|
|
23
23
|
def add_shapes(self, shapes):
|
@@ -122,3 +122,7 @@ class TransferKernelStructuresEngine(McomplexEngine):
|
|
122
122
|
def reindex_cusps_and_transfer_peripheral_curves(self):
|
123
123
|
self.reindex_cusps_and_add_peripheral_curves(
|
124
124
|
self.snappyTriangulation._get_cusp_indices_and_peripheral_curve_data())
|
125
|
+
|
126
|
+
for cusp, cusp_info in zip(self.mcomplex.Vertices,
|
127
|
+
self.snappyTriangulation.cusp_info()):
|
128
|
+
cusp.is_complete = cusp_info['complete?']
|
snappy/snap/nsagetools.py
CHANGED
@@ -5,11 +5,9 @@ import string
|
|
5
5
|
from ..sage_helper import _within_sage, sage_method
|
6
6
|
|
7
7
|
if _within_sage:
|
8
|
-
import
|
9
|
-
from
|
10
|
-
|
11
|
-
SageObject, PolynomialRing, LaurentPolynomialRing)
|
12
|
-
|
8
|
+
from ..sage_helper import ZZ, vector, matrix, block_matrix, identity_matrix, gcd, prod, det
|
9
|
+
from ..sage_helper import MatrixSpace, PolynomialRing, LaurentPolynomialRing
|
10
|
+
from ..sage_helper import SageObject, AbelianGroup, GroupAlgebra
|
13
11
|
from .polished_reps import polished_holonomy, MatrixRepresentation
|
14
12
|
Id2 = MatrixSpace(ZZ, 2)(1)
|
15
13
|
else:
|
@@ -332,13 +330,14 @@ def alexander_polynomial(manifold, **kwargs):
|
|
332
330
|
sage: N.alexander_polynomial()
|
333
331
|
a^2*b + a*b^2 + a*b + a + b
|
334
332
|
|
335
|
-
Any provided keyword arguments are passed to
|
333
|
+
Any provided keyword arguments are passed to
|
334
|
+
:meth:`fundamental_group <snappy.Triangulation.fundamental_group>` and
|
336
335
|
so affect the group presentation used in the computation.
|
337
336
|
"""
|
338
337
|
if manifold.homology().order() != 'infinite':
|
339
338
|
raise ValueError(
|
340
339
|
"Alexander polynomial only defined for manifolds with "
|
341
|
-
"infinite
|
340
|
+
"infinite homology.")
|
342
341
|
|
343
342
|
ans = alexander_polynomial_group(manifold.fundamental_group(**kwargs))
|
344
343
|
coeffs = ans.coefficients()
|
@@ -474,8 +473,10 @@ def fast_determinant_of_laurent_poly_matrix(A):
|
|
474
473
|
polynomial entries.
|
475
474
|
"""
|
476
475
|
R = A.base_ring()
|
477
|
-
minexp = minimum_exponents(A.list())
|
478
476
|
P = R.polynomial_ring()
|
477
|
+
if A == 0:
|
478
|
+
return P(0)
|
479
|
+
minexp = minimum_exponents(A.list())
|
479
480
|
MS = A.parent().change_ring(P)
|
480
481
|
Ap = MS([convert_laurent_to_poly(p, minexp, P) for p in A.list()])
|
481
482
|
return Ap.det()
|
@@ -6,7 +6,8 @@ from ... import sage_helper
|
|
6
6
|
from .. import t3mlite as t3m
|
7
7
|
|
8
8
|
if sage_helper._within_sage:
|
9
|
-
from
|
9
|
+
from ...sage_helper import ZZ, matrix, vector, ChainComplex
|
10
|
+
from sage.graphs.graph import Graph
|
10
11
|
|
11
12
|
|
12
13
|
class DualCell():
|
@@ -57,7 +58,7 @@ class DualCellulation():
|
|
57
58
|
"""
|
58
59
|
def __init__(self, triangulation):
|
59
60
|
self.dual_triangulation = triangulation
|
60
|
-
self.from_original =
|
61
|
+
self.from_original = {}
|
61
62
|
self.vertices = []
|
62
63
|
self.edges = []
|
63
64
|
self.faces = []
|
@@ -179,7 +180,7 @@ class OneCycle():
|
|
179
180
|
G = Graph(multiedges=True)
|
180
181
|
for edge in D.edges:
|
181
182
|
if self.weights[edge.index] != 0:
|
182
|
-
i, j =
|
183
|
+
i, j = (v.index for v in edge.vertices)
|
183
184
|
G.add_edge(i, j, edge.index)
|
184
185
|
|
185
186
|
assert G.num_verts() == G.num_edges()
|
@@ -3,7 +3,7 @@ from .. import t3mlite as t3m
|
|
3
3
|
from . import link, dual_cellulation
|
4
4
|
|
5
5
|
if sage_helper._within_sage:
|
6
|
-
from
|
6
|
+
from ...sage_helper import matrix, vector, ZZ
|
7
7
|
|
8
8
|
|
9
9
|
def peripheral_curve_from_snappy(dual_cell, snappy_data):
|
@@ -105,7 +105,7 @@ class PeripheralOneCocycle():
|
|
105
105
|
tet = self.mcomplex.Tetrahedra[tet_num]
|
106
106
|
triangle = tet.CuspCorners[V]
|
107
107
|
for side in triangle.oriented_sides():
|
108
|
-
E0, E1 =
|
108
|
+
E0, E1 = (link.TruncatedSimplexCorners[V][v] for v in side.vertices)
|
109
109
|
if E0 | E1 == F:
|
110
110
|
break
|
111
111
|
assert E0 | E1 == F
|
@@ -2,8 +2,8 @@ from collections import OrderedDict
|
|
2
2
|
from ... import sage_helper
|
3
3
|
|
4
4
|
if sage_helper._within_sage:
|
5
|
-
from
|
6
|
-
|
5
|
+
from ...sage_helper import ZZ, matrix, vector, cached_method, ChainComplex
|
6
|
+
from sage.plot.all import line, arrow, text
|
7
7
|
else:
|
8
8
|
def cached_method(func):
|
9
9
|
return func
|
@@ -50,7 +50,7 @@ class Edge():
|
|
50
50
|
self.index = None
|
51
51
|
|
52
52
|
def glued_to(self, side):
|
53
|
-
for sides in (
|
53
|
+
for sides in ( list(self.sides), [-S for S in self.sides] ):
|
54
54
|
if side in sides:
|
55
55
|
sides.remove(side)
|
56
56
|
return sides[0]
|
@@ -83,7 +83,7 @@ class EdgeList():
|
|
83
83
|
vertex.
|
84
84
|
"""
|
85
85
|
def __init__(self, items):
|
86
|
-
self.data =
|
86
|
+
self.data = {}
|
87
87
|
for i, x in enumerate(items):
|
88
88
|
self[i] = x
|
89
89
|
|
@@ -237,7 +237,7 @@ class Surface():
|
|
237
237
|
vertices.append(V)
|
238
238
|
|
239
239
|
self.vertices = vertices
|
240
|
-
self._vertex_containing_corner =
|
240
|
+
self._vertex_containing_corner = {(C.triangle, C.vertex): V for V in vertices for C in V.corners}
|
241
241
|
|
242
242
|
def build(self):
|
243
243
|
"""
|
snappy/snap/peripheral/test.py
CHANGED
snappy/snap/polished_reps.py
CHANGED
@@ -10,10 +10,10 @@ from ..pari import pari
|
|
10
10
|
from .fundamental_polyhedron import *
|
11
11
|
|
12
12
|
if _within_sage:
|
13
|
-
import
|
14
|
-
from
|
15
|
-
from
|
16
|
-
|
13
|
+
from ..sage_helper import RealField, ComplexField, gcd, prod, powerset
|
14
|
+
from ..sage_helper import MatrixSpace, matrix, vector, ZZ
|
15
|
+
from ..sage_helper import SageObject as Object
|
16
|
+
|
17
17
|
identity = lambda A: MatrixSpace(A.base_ring(), A.nrows())(1)
|
18
18
|
abelian_group_elt = lambda v: vector(ZZ, v)
|
19
19
|
else:
|
@@ -256,9 +256,9 @@ class ManifoldGroup(MatrixRepresentation):
|
|
256
256
|
-0.49024466750661447990098220731 + 2.9794470664789769463726817144*I
|
257
257
|
|
258
258
|
"""
|
259
|
-
M, L =
|
259
|
+
M, L = (self.SL2C(w) for w in self.peripheral_curves()[cusp_num])
|
260
260
|
C = extend_to_basis(parabolic_eigenvector(M))
|
261
|
-
M, L =
|
261
|
+
M, L = ( make_trace_2( C**(-1)*A*C ) for A in [M, L] )
|
262
262
|
z = L[0][1]/M[0][1]
|
263
263
|
return z.conjugate()
|
264
264
|
|
@@ -303,8 +303,8 @@ def polished_holonomy(manifold,
|
|
303
303
|
dec_prec=None,
|
304
304
|
match_kernel=True):
|
305
305
|
"""
|
306
|
-
Return the fundamental group of M
|
307
|
-
holonomy representation::
|
306
|
+
Return the fundamental group of M equipped with a high-precision version of
|
307
|
+
the holonomy representation::
|
308
308
|
|
309
309
|
sage: M = Manifold('m004')
|
310
310
|
sage: G = M.polished_holonomy()
|