snappy 3.1.1__cp311-cp311-win_amd64.whl → 3.2__cp311-cp311-win_amd64.whl
Sign up to get free protection for your applications and to get access to all the features.
- snappy/CyOpenGL.cp311-win_amd64.pyd +0 -0
- snappy/SnapPy.cp311-win_amd64.pyd +0 -0
- snappy/SnapPyHP.cp311-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.cp311-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 +26 -11
- 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-311.pyc +0 -0
- snappy/__pycache__/browser.cpython-311.pyc +0 -0
- snappy/__pycache__/cache.cpython-311.pyc +0 -0
- snappy/__pycache__/database.cpython-311.pyc +0 -0
- snappy/__pycache__/db_utilities.cpython-311.pyc +0 -0
- snappy/__pycache__/decorated_isosig.cpython-311.pyc +0 -0
- snappy/__pycache__/exceptions.cpython-311.pyc +0 -0
- snappy/__pycache__/export_stl.cpython-311.pyc +0 -0
- snappy/__pycache__/filedialog.cpython-311.pyc +0 -0
- snappy/__pycache__/gui.cpython-311.pyc +0 -0
- snappy/__pycache__/horoviewer.cpython-311.pyc +0 -0
- snappy/__pycache__/math_basics.cpython-311.pyc +0 -0
- snappy/__pycache__/matrix.cpython-311.pyc +0 -0
- snappy/__pycache__/number.cpython-311.pyc +0 -0
- snappy/__pycache__/numeric_output_checker.cpython-311.pyc +0 -0
- snappy/__pycache__/pari.cpython-311.pyc +0 -0
- snappy/__pycache__/polyviewer.cpython-311.pyc +0 -0
- snappy/__pycache__/sage_helper.cpython-311.pyc +0 -0
- snappy/__pycache__/version.cpython-311.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-311.pyc +0 -0
- snappy/drilling/__pycache__/constants.cpython-311.pyc +0 -0
- snappy/drilling/__pycache__/crush.cpython-311.pyc +0 -0
- snappy/drilling/__pycache__/cusps.cpython-311.pyc +0 -0
- snappy/drilling/__pycache__/debug.cpython-311.pyc +0 -0
- snappy/drilling/__pycache__/epsilons.cpython-311.pyc +0 -0
- snappy/drilling/__pycache__/exceptions.cpython-311.pyc +0 -0
- snappy/drilling/__pycache__/fixed_points.cpython-311.pyc +0 -0
- snappy/drilling/__pycache__/geodesic_info.cpython-311.pyc +0 -0
- snappy/drilling/__pycache__/geodesic_tube.cpython-311.pyc +0 -0
- snappy/drilling/__pycache__/geometric_structure.cpython-311.pyc +0 -0
- snappy/drilling/__pycache__/line.cpython-311.pyc +0 -0
- snappy/drilling/__pycache__/moves.cpython-311.pyc +0 -0
- snappy/drilling/__pycache__/peripheral_curves.cpython-311.pyc +0 -0
- snappy/drilling/__pycache__/perturb.cpython-311.pyc +0 -0
- snappy/drilling/__pycache__/quotient_space.cpython-311.pyc +0 -0
- snappy/drilling/__pycache__/spatial_dict.cpython-311.pyc +0 -0
- snappy/drilling/__pycache__/subdivide.cpython-311.pyc +0 -0
- snappy/drilling/__pycache__/tracing.cpython-311.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-311.pyc +0 -0
- snappy/exterior_to_link/__pycache__/barycentric_geometry.cpython-311.pyc +0 -0
- snappy/exterior_to_link/__pycache__/exceptions.cpython-311.pyc +0 -0
- snappy/exterior_to_link/__pycache__/hyp_utils.cpython-311.pyc +0 -0
- snappy/exterior_to_link/__pycache__/link_projection.cpython-311.pyc +0 -0
- snappy/exterior_to_link/__pycache__/main.cpython-311.pyc +0 -0
- snappy/exterior_to_link/__pycache__/mcomplex_with_expansion.cpython-311.pyc +0 -0
- snappy/exterior_to_link/__pycache__/mcomplex_with_link.cpython-311.pyc +0 -0
- snappy/exterior_to_link/__pycache__/mcomplex_with_memory.cpython-311.pyc +0 -0
- snappy/exterior_to_link/__pycache__/pl_utils.cpython-311.pyc +0 -0
- snappy/exterior_to_link/__pycache__/put_in_S3.cpython-311.pyc +0 -0
- snappy/exterior_to_link/__pycache__/rational_linear_algebra.cpython-311.pyc +0 -0
- snappy/exterior_to_link/__pycache__/simplify_to_base_tri.cpython-311.pyc +0 -0
- snappy/exterior_to_link/__pycache__/stored_moves.cpython-311.pyc +0 -0
- snappy/hyperboloid/__pycache__/__init__.cpython-311.pyc +0 -0
- snappy/manifolds/__pycache__/__init__.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/__init__.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/component.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/coordinates.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/fieldExtensions.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/findLoops.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/homology.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/manifoldMethods.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/matrix.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/numericalSolutionsToGroebnerBasis.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/polynomial.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/processComponents.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/processFileBase.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/processFileDispatch.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/processMagmaFile.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/processRurFile.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/ptolemyGeneralizedObstructionClass.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/ptolemyObstructionClass.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/ptolemyVariety.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/ptolemyVarietyPrimeIdealGroebnerBasis.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/rur.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/solutionsToPrimeIdealGroebnerBasis.cpython-311.pyc +0 -0
- snappy/ptolemy/__pycache__/utilities.cpython-311.pyc +0 -0
- snappy/snap/__pycache__/__init__.cpython-311.pyc +0 -0
- snappy/snap/__pycache__/character_varieties.cpython-311.pyc +0 -0
- snappy/snap/__pycache__/fundamental_polyhedron.cpython-311.pyc +0 -0
- snappy/snap/__pycache__/interval_reps.cpython-311.pyc +0 -0
- snappy/snap/__pycache__/kernel_structures.cpython-311.pyc +0 -0
- snappy/snap/__pycache__/mcomplex_base.cpython-311.pyc +0 -0
- snappy/snap/__pycache__/nsagetools.cpython-311.pyc +0 -0
- snappy/snap/__pycache__/polished_reps.cpython-311.pyc +0 -0
- snappy/snap/__pycache__/shapes.cpython-311.pyc +0 -0
- snappy/snap/__pycache__/slice_obs_HKL.cpython-311.pyc +0 -0
- snappy/snap/__pycache__/utilities.cpython-311.pyc +0 -0
- snappy/snap/peripheral/__pycache__/__init__.cpython-311.pyc +0 -0
- snappy/snap/peripheral/__pycache__/dual_cellulation.cpython-311.pyc +0 -0
- snappy/snap/peripheral/__pycache__/link.cpython-311.pyc +0 -0
- snappy/snap/peripheral/__pycache__/peripheral.cpython-311.pyc +0 -0
- snappy/snap/peripheral/__pycache__/surface.cpython-311.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/__init__.cpython-311.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/arrow.cpython-311.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/corner.cpython-311.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/edge.cpython-311.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/face.cpython-311.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/files.cpython-311.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/homology.cpython-311.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/linalg.cpython-311.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/mcomplex.cpython-311.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/perm4.cpython-311.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/simplex.cpython-311.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/spun.cpython-311.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/surface.cpython-311.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/tetrahedron.cpython-311.pyc +0 -0
- snappy/snap/t3mlite/__pycache__/vertex.cpython-311.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-311.pyc +0 -0
- snappy/twister/__pycache__/main.cpython-311.pyc +0 -0
- snappy/upper_halfspace/__pycache__/__init__.cpython-311.pyc +0 -0
- snappy/upper_halfspace/__pycache__/ideal_point.cpython-311.pyc +0 -0
- snappy/verify/__pycache__/__init__.cpython-311.pyc +0 -0
- snappy/verify/__pycache__/cuspCrossSection.cpython-311.pyc +0 -0
- snappy/verify/__pycache__/cuspTranslations.cpython-311.pyc +0 -0
- snappy/verify/__pycache__/cusp_areas.cpython-311.pyc +0 -0
- snappy/verify/__pycache__/cusp_shapes.cpython-311.pyc +0 -0
- snappy/verify/__pycache__/exceptions.cpython-311.pyc +0 -0
- snappy/verify/__pycache__/interval_newton_shapes_engine.cpython-311.pyc +0 -0
- snappy/verify/__pycache__/interval_tree.cpython-311.pyc +0 -0
- snappy/verify/__pycache__/krawczyk_shapes_engine.cpython-311.pyc +0 -0
- snappy/verify/__pycache__/realAlgebra.cpython-311.pyc +0 -0
- snappy/verify/__pycache__/shapes.cpython-311.pyc +0 -0
- snappy/verify/__pycache__/short_slopes.cpython-311.pyc +0 -0
- snappy/verify/__pycache__/squareExtensions.cpython-311.pyc +0 -0
- snappy/verify/__pycache__/verifyCanonical.cpython-311.pyc +0 -0
- snappy/verify/__pycache__/verifyHyperbolicity.cpython-311.pyc +0 -0
- snappy/verify/__pycache__/volume.cpython-311.pyc +0 -0
- snappy/verify/complex_volume/__pycache__/__init__.cpython-311.pyc +0 -0
- snappy/verify/complex_volume/__pycache__/adjust_torsion.cpython-311.pyc +0 -0
- snappy/verify/complex_volume/__pycache__/closed.cpython-311.pyc +0 -0
- snappy/verify/complex_volume/__pycache__/compute_ptolemys.cpython-311.pyc +0 -0
- snappy/verify/complex_volume/__pycache__/cusped.cpython-311.pyc +0 -0
- snappy/verify/complex_volume/__pycache__/extended_bloch.cpython-311.pyc +0 -0
- snappy/verify/cuspCrossSection.py +0 -1422
- snappy/verify/maximal_cusp_area_matrix/__pycache__/__init__.cpython-311.pyc +0 -0
- snappy/verify/maximal_cusp_area_matrix/__pycache__/cusp_tiling_engine.cpython-311.pyc +0 -0
- snappy/verify/maximal_cusp_area_matrix/__pycache__/cusp_translate_engine.cpython-311.pyc +0 -0
- snappy/verify/upper_halfspace/__pycache__/__init__.cpython-311.pyc +0 -0
- snappy/verify/upper_halfspace/__pycache__/extended_matrix.cpython-311.pyc +0 -0
- snappy/verify/upper_halfspace/__pycache__/finite_point.cpython-311.pyc +0 -0
- snappy/verify/upper_halfspace/__pycache__/ideal_point.cpython-311.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()
|