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.
Files changed (476) hide show
  1. snappy/CyOpenGL.cp38-win_amd64.pyd +0 -0
  2. snappy/SnapPy.cp38-win_amd64.pyd +0 -0
  3. snappy/SnapPyHP.cp38-win_amd64.pyd +0 -0
  4. snappy/__init__.py +299 -402
  5. snappy/app.py +70 -20
  6. snappy/browser.py +18 -17
  7. snappy/canonical.py +249 -0
  8. snappy/{verify/cusp_shapes.py → cusps/__init__.py} +8 -18
  9. snappy/cusps/cusp_area_matrix.py +101 -0
  10. snappy/{verify/cusp_areas.py → cusps/cusp_areas_from_matrix.py} +23 -39
  11. snappy/cusps/maximal_cusp_area_matrix.py +136 -0
  12. snappy/cusps/test.py +21 -0
  13. snappy/cusps/trig_cusp_area_matrix.py +63 -0
  14. snappy/database.py +10 -9
  15. snappy/decorated_isosig.py +337 -114
  16. snappy/dev/extended_ptolemy/complexVolumesClosed.py +40 -7
  17. snappy/dev/extended_ptolemy/extended.py +3 -3
  18. snappy/dev/extended_ptolemy/phc_wrapper.py +10 -10
  19. snappy/dev/vericlosed/oneVertexTruncatedComplex.py +1 -1
  20. snappy/doc/_images/m004_paper_plane_on_systole.jpg +0 -0
  21. snappy/doc/_images/m125_paper_plane.jpg +0 -0
  22. snappy/doc/_images/o9_00000_systole_paper_plane.jpg +0 -0
  23. snappy/doc/_images/o9_00000_systole_paper_plane_closer.jpg +0 -0
  24. snappy/doc/_sources/additional_classes.rst.txt +40 -40
  25. snappy/doc/_sources/bugs.rst.txt +14 -14
  26. snappy/doc/_sources/censuses.rst.txt +51 -51
  27. snappy/doc/_sources/credits.rst.txt +75 -75
  28. snappy/doc/_sources/development.rst.txt +259 -239
  29. snappy/doc/_sources/index.rst.txt +182 -115
  30. snappy/doc/_sources/installing.rst.txt +247 -264
  31. snappy/doc/_sources/manifold.rst.txt +6 -6
  32. snappy/doc/_sources/manifoldhp.rst.txt +46 -46
  33. snappy/doc/_sources/news.rst.txt +355 -283
  34. snappy/doc/_sources/other.rst.txt +25 -25
  35. snappy/doc/_sources/platonic_census.rst.txt +20 -20
  36. snappy/doc/_sources/plink.rst.txt +102 -102
  37. snappy/doc/_sources/ptolemy.rst.txt +66 -66
  38. snappy/doc/_sources/ptolemy_classes.rst.txt +42 -42
  39. snappy/doc/_sources/ptolemy_examples1.rst.txt +298 -297
  40. snappy/doc/_sources/ptolemy_examples2.rst.txt +363 -363
  41. snappy/doc/_sources/ptolemy_examples3.rst.txt +301 -301
  42. snappy/doc/_sources/ptolemy_examples4.rst.txt +61 -61
  43. snappy/doc/_sources/ptolemy_prelim.rst.txt +105 -105
  44. snappy/doc/_sources/screenshots.rst.txt +21 -21
  45. snappy/doc/_sources/snap.rst.txt +87 -87
  46. snappy/doc/_sources/snappy.rst.txt +28 -28
  47. snappy/doc/_sources/spherogram.rst.txt +103 -103
  48. snappy/doc/_sources/todo.rst.txt +47 -47
  49. snappy/doc/_sources/triangulation.rst.txt +11 -11
  50. snappy/doc/_sources/tutorial.rst.txt +49 -49
  51. snappy/doc/_sources/verify.rst.txt +210 -150
  52. snappy/doc/_sources/verify_internals.rst.txt +79 -90
  53. snappy/doc/_static/basic.css +924 -902
  54. snappy/doc/_static/css/badge_only.css +1 -1
  55. snappy/doc/_static/css/theme.css +1 -1
  56. snappy/doc/_static/doctools.js +1 -1
  57. snappy/doc/_static/documentation_options.js +12 -13
  58. snappy/doc/_static/fonts/Lato/lato-bold.eot +0 -0
  59. snappy/doc/_static/fonts/Lato/lato-bold.ttf +0 -0
  60. snappy/doc/_static/fonts/Lato/lato-bold.woff +0 -0
  61. snappy/doc/_static/fonts/Lato/lato-bold.woff2 +0 -0
  62. snappy/doc/_static/fonts/Lato/lato-bolditalic.eot +0 -0
  63. snappy/doc/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
  64. snappy/doc/_static/fonts/Lato/lato-bolditalic.woff +0 -0
  65. snappy/doc/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
  66. snappy/doc/_static/fonts/Lato/lato-italic.eot +0 -0
  67. snappy/doc/_static/fonts/Lato/lato-italic.ttf +0 -0
  68. snappy/doc/_static/fonts/Lato/lato-italic.woff +0 -0
  69. snappy/doc/_static/fonts/Lato/lato-italic.woff2 +0 -0
  70. snappy/doc/_static/fonts/Lato/lato-regular.eot +0 -0
  71. snappy/doc/_static/fonts/Lato/lato-regular.ttf +0 -0
  72. snappy/doc/_static/fonts/Lato/lato-regular.woff +0 -0
  73. snappy/doc/_static/fonts/Lato/lato-regular.woff2 +0 -0
  74. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
  75. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
  76. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
  77. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
  78. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
  79. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
  80. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
  81. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
  82. snappy/doc/_static/js/versions.js +228 -0
  83. snappy/doc/_static/language_data.js +199 -199
  84. snappy/doc/_static/pygments.css +74 -73
  85. snappy/doc/_static/searchtools.js +125 -71
  86. snappy/doc/_static/snappy_furo.css +33 -33
  87. snappy/doc/_static/snappy_sphinx_rtd_theme.css +42 -42
  88. snappy/doc/_static/sphinx_highlight.js +13 -3
  89. snappy/doc/additional_classes.html +1499 -1330
  90. snappy/doc/bugs.html +131 -134
  91. snappy/doc/censuses.html +426 -445
  92. snappy/doc/credits.html +180 -183
  93. snappy/doc/development.html +383 -363
  94. snappy/doc/genindex.html +1330 -1409
  95. snappy/doc/index.html +261 -206
  96. snappy/doc/installing.html +345 -363
  97. snappy/doc/manifold.html +3451 -2839
  98. snappy/doc/manifoldhp.html +179 -182
  99. snappy/doc/news.html +387 -329
  100. snappy/doc/objects.inv +0 -0
  101. snappy/doc/other.html +160 -162
  102. snappy/doc/platonic_census.html +374 -377
  103. snappy/doc/plink.html +209 -212
  104. snappy/doc/ptolemy.html +253 -255
  105. snappy/doc/ptolemy_classes.html +1143 -1146
  106. snappy/doc/ptolemy_examples1.html +408 -410
  107. snappy/doc/ptolemy_examples2.html +470 -473
  108. snappy/doc/ptolemy_examples3.html +413 -416
  109. snappy/doc/ptolemy_examples4.html +194 -197
  110. snappy/doc/ptolemy_prelim.html +247 -250
  111. snappy/doc/py-modindex.html +164 -167
  112. snappy/doc/screenshots.html +140 -142
  113. snappy/doc/search.html +134 -137
  114. snappy/doc/searchindex.js +1 -1
  115. snappy/doc/snap.html +201 -204
  116. snappy/doc/snappy.html +180 -182
  117. snappy/doc/spherogram.html +1210 -1213
  118. snappy/doc/todo.html +165 -168
  119. snappy/doc/triangulation.html +1583 -1474
  120. snappy/doc/tutorial.html +158 -161
  121. snappy/doc/verify.html +329 -275
  122. snappy/doc/verify_internals.html +1234 -1691
  123. snappy/drilling/__init__.py +153 -235
  124. snappy/drilling/barycentric.py +103 -0
  125. snappy/drilling/constants.py +0 -2
  126. snappy/drilling/crush.py +56 -130
  127. snappy/drilling/cusps.py +12 -6
  128. snappy/drilling/debug.py +2 -1
  129. snappy/drilling/exceptions.py +7 -40
  130. snappy/drilling/moves.py +302 -243
  131. snappy/drilling/perturb.py +63 -37
  132. snappy/drilling/shorten.py +36 -0
  133. snappy/drilling/subdivide.py +0 -5
  134. snappy/drilling/test.py +23 -0
  135. snappy/drilling/test_cases.py +126 -0
  136. snappy/drilling/tracing.py +9 -37
  137. snappy/exceptions.py +18 -5
  138. snappy/exterior_to_link/barycentric_geometry.py +2 -4
  139. snappy/exterior_to_link/main.py +8 -7
  140. snappy/exterior_to_link/mcomplex_with_link.py +2 -2
  141. snappy/exterior_to_link/rational_linear_algebra.py +1 -1
  142. snappy/exterior_to_link/rational_linear_algebra_wrapped.py +1 -1
  143. snappy/exterior_to_link/test.py +21 -33
  144. snappy/geometric_structure/__init__.py +212 -0
  145. snappy/geometric_structure/cusp_neighborhood/__init__.py +3 -0
  146. snappy/geometric_structure/cusp_neighborhood/complex_cusp_cross_section.py +697 -0
  147. snappy/geometric_structure/cusp_neighborhood/cusp_cross_section_base.py +484 -0
  148. snappy/geometric_structure/cusp_neighborhood/exceptions.py +42 -0
  149. snappy/geometric_structure/cusp_neighborhood/real_cusp_cross_section.py +298 -0
  150. snappy/geometric_structure/cusp_neighborhood/tiles_for_cusp_neighborhood.py +159 -0
  151. snappy/geometric_structure/cusp_neighborhood/vertices.py +32 -0
  152. snappy/geometric_structure/geodesic/__init__.py +0 -0
  153. snappy/geometric_structure/geodesic/add_core_curves.py +152 -0
  154. snappy/geometric_structure/geodesic/avoid_core_curves.py +369 -0
  155. snappy/geometric_structure/geodesic/canonical_keys.py +52 -0
  156. snappy/geometric_structure/geodesic/check_away_from_core_curve.py +60 -0
  157. snappy/geometric_structure/geodesic/constants.py +6 -0
  158. snappy/geometric_structure/geodesic/exceptions.py +22 -0
  159. snappy/{drilling → geometric_structure/geodesic}/fixed_points.py +34 -9
  160. snappy/{drilling/geodesic_info.py → geometric_structure/geodesic/geodesic_start_point_info.py} +139 -180
  161. snappy/geometric_structure/geodesic/graph_trace_helper.py +67 -0
  162. snappy/geometric_structure/geodesic/line.py +30 -0
  163. snappy/geometric_structure/geodesic/multiplicity.py +127 -0
  164. snappy/geometric_structure/geodesic/tiles_for_geodesic.py +101 -0
  165. snappy/geometric_structure/test.py +22 -0
  166. snappy/gui.py +23 -13
  167. snappy/horoviewer.py +7 -7
  168. snappy/hyperboloid/__init__.py +96 -31
  169. snappy/hyperboloid/distances.py +245 -0
  170. snappy/hyperboloid/horoball.py +19 -0
  171. snappy/hyperboloid/line.py +35 -0
  172. snappy/hyperboloid/point.py +9 -0
  173. snappy/hyperboloid/triangle.py +29 -0
  174. snappy/isometry_signature.py +382 -0
  175. snappy/len_spec/__init__.py +596 -0
  176. snappy/len_spec/geodesic_info.py +110 -0
  177. snappy/len_spec/geodesic_key_info_dict.py +117 -0
  178. snappy/len_spec/geodesic_piece.py +143 -0
  179. snappy/len_spec/geometric_structure.py +182 -0
  180. snappy/len_spec/geometry.py +80 -0
  181. snappy/len_spec/length_spectrum_geodesic_info.py +170 -0
  182. snappy/len_spec/spine.py +206 -0
  183. snappy/len_spec/test.py +24 -0
  184. snappy/len_spec/test_cases.py +69 -0
  185. snappy/len_spec/tile.py +275 -0
  186. snappy/len_spec/word.py +86 -0
  187. snappy/math_basics.py +39 -13
  188. snappy/matrix.py +52 -9
  189. snappy/number.py +12 -6
  190. snappy/numeric_output_checker.py +2 -3
  191. snappy/pari.py +8 -4
  192. snappy/phone_home.py +2 -1
  193. snappy/polyviewer.py +8 -8
  194. snappy/ptolemy/__init__.py +1 -1
  195. snappy/ptolemy/component.py +2 -2
  196. snappy/ptolemy/coordinates.py +25 -25
  197. snappy/ptolemy/findLoops.py +9 -9
  198. snappy/ptolemy/manifoldMethods.py +27 -29
  199. snappy/ptolemy/polynomial.py +50 -57
  200. snappy/ptolemy/processFileBase.py +60 -0
  201. snappy/ptolemy/ptolemyVariety.py +109 -41
  202. snappy/ptolemy/reginaWrapper.py +4 -4
  203. snappy/ptolemy/rur.py +1 -1
  204. snappy/ptolemy/solutionsToPrimeIdealGroebnerBasis.py +9 -9
  205. snappy/ptolemy/test.py +99 -54
  206. snappy/ptolemy/utilities.py +1 -1
  207. snappy/raytracing/__init__.py +64 -0
  208. snappy/raytracing/additional_horospheres.py +64 -0
  209. snappy/raytracing/additional_len_spec_choices.py +63 -0
  210. snappy/raytracing/cohomology_fractal.py +0 -3
  211. snappy/raytracing/eyeball.py +123 -0
  212. snappy/raytracing/finite_raytracing_data.py +17 -17
  213. snappy/raytracing/finite_viewer.py +15 -15
  214. snappy/raytracing/geodesic_tube_info.py +93 -63
  215. snappy/raytracing/geodesics.py +94 -64
  216. snappy/raytracing/geodesics_window.py +56 -34
  217. snappy/raytracing/gui_utilities.py +21 -6
  218. snappy/raytracing/hyperboloid_navigation.py +29 -4
  219. snappy/raytracing/hyperboloid_utilities.py +73 -73
  220. snappy/raytracing/ideal_raytracing_data.py +121 -91
  221. snappy/raytracing/inside_viewer.py +199 -66
  222. snappy/raytracing/pack.py +22 -0
  223. snappy/raytracing/raytracing_data.py +37 -25
  224. snappy/raytracing/raytracing_view.py +70 -65
  225. snappy/raytracing/shaders/Eye.png +0 -0
  226. snappy/raytracing/shaders/NonGeometric.png +0 -0
  227. snappy/raytracing/shaders/__init__.py +39 -3
  228. snappy/raytracing/shaders/fragment.glsl +451 -133
  229. snappy/raytracing/test.py +29 -0
  230. snappy/raytracing/tooltip.py +146 -0
  231. snappy/raytracing/upper_halfspace_utilities.py +42 -9
  232. snappy/sage_helper.py +67 -134
  233. snappy/settings.py +90 -77
  234. snappy/shell.py +2 -0
  235. snappy/snap/character_varieties.py +2 -2
  236. snappy/snap/find_field.py +4 -3
  237. snappy/snap/fundamental_polyhedron.py +2 -2
  238. snappy/snap/kernel_structures.py +5 -1
  239. snappy/snap/nsagetools.py +9 -8
  240. snappy/snap/peripheral/dual_cellulation.py +4 -3
  241. snappy/snap/peripheral/peripheral.py +2 -2
  242. snappy/snap/peripheral/surface.py +5 -5
  243. snappy/snap/peripheral/test.py +1 -1
  244. snappy/snap/polished_reps.py +8 -8
  245. snappy/snap/slice_obs_HKL.py +16 -14
  246. snappy/snap/t3mlite/arrow.py +3 -3
  247. snappy/snap/t3mlite/edge.py +3 -3
  248. snappy/snap/t3mlite/homology.py +2 -2
  249. snappy/snap/t3mlite/mcomplex.py +3 -3
  250. snappy/snap/t3mlite/simplex.py +12 -0
  251. snappy/snap/t3mlite/spun.py +18 -17
  252. snappy/snap/t3mlite/test_vs_regina.py +4 -4
  253. snappy/snap/test.py +37 -53
  254. snappy/snap/utilities.py +4 -5
  255. snappy/test.py +121 -138
  256. snappy/test_cases.py +263 -0
  257. snappy/testing.py +131 -0
  258. snappy/tiling/__init__.py +2 -0
  259. snappy/tiling/canonical_key_dict.py +59 -0
  260. snappy/tiling/dict_based_set.py +79 -0
  261. snappy/tiling/floor.py +49 -0
  262. snappy/tiling/hyperboloid_dict.py +54 -0
  263. snappy/tiling/iter_utils.py +78 -0
  264. snappy/tiling/lifted_tetrahedron.py +22 -0
  265. snappy/tiling/lifted_tetrahedron_set.py +54 -0
  266. snappy/tiling/real_hash_dict.py +164 -0
  267. snappy/tiling/test.py +23 -0
  268. snappy/tiling/tile.py +215 -0
  269. snappy/tiling/triangle.py +33 -0
  270. snappy/tkterminal.py +113 -84
  271. snappy/twister/main.py +1 -7
  272. snappy/twister/twister_core.cp38-win_amd64.pyd +0 -0
  273. snappy/upper_halfspace/__init__.py +78 -17
  274. snappy/verify/__init__.py +3 -7
  275. snappy/verify/{verifyCanonical.py → canonical.py} +78 -70
  276. snappy/verify/complex_volume/adjust_torsion.py +1 -2
  277. snappy/verify/complex_volume/closed.py +13 -13
  278. snappy/verify/complex_volume/cusped.py +6 -6
  279. snappy/verify/complex_volume/extended_bloch.py +5 -8
  280. snappy/verify/{cuspTranslations.py → cusp_translations.py} +1 -1
  281. snappy/verify/edge_equations.py +80 -0
  282. snappy/verify/exceptions.py +0 -55
  283. snappy/verify/{verifyHyperbolicity.py → hyperbolicity.py} +3 -3
  284. snappy/verify/interval_newton_shapes_engine.py +7 -5
  285. snappy/verify/interval_tree.py +5 -5
  286. snappy/verify/krawczyk_shapes_engine.py +17 -18
  287. snappy/verify/maximal_cusp_area_matrix/__init__.py +7 -74
  288. snappy/verify/maximal_cusp_area_matrix/cusp_tiling_engine.py +3 -4
  289. snappy/verify/maximal_cusp_area_matrix/cusp_translate_engine.py +1 -1
  290. snappy/verify/{realAlgebra.py → real_algebra.py} +1 -1
  291. snappy/verify/shapes.py +5 -3
  292. snappy/verify/short_slopes.py +39 -41
  293. snappy/verify/{squareExtensions.py → square_extensions.py} +14 -11
  294. snappy/verify/test.py +57 -60
  295. snappy/verify/upper_halfspace/extended_matrix.py +1 -1
  296. snappy/verify/upper_halfspace/finite_point.py +3 -4
  297. snappy/verify/upper_halfspace/ideal_point.py +9 -9
  298. snappy/verify/volume.py +2 -2
  299. snappy/version.py +2 -2
  300. {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/METADATA +14 -10
  301. snappy-3.2.dist-info/RECORD +503 -0
  302. {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/WHEEL +1 -1
  303. {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/top_level.txt +6 -1
  304. snappy/__pycache__/__init__.cpython-38.pyc +0 -0
  305. snappy/__pycache__/browser.cpython-38.pyc +0 -0
  306. snappy/__pycache__/cache.cpython-38.pyc +0 -0
  307. snappy/__pycache__/database.cpython-38.pyc +0 -0
  308. snappy/__pycache__/db_utilities.cpython-38.pyc +0 -0
  309. snappy/__pycache__/decorated_isosig.cpython-38.pyc +0 -0
  310. snappy/__pycache__/exceptions.cpython-38.pyc +0 -0
  311. snappy/__pycache__/export_stl.cpython-38.pyc +0 -0
  312. snappy/__pycache__/filedialog.cpython-38.pyc +0 -0
  313. snappy/__pycache__/gui.cpython-38.pyc +0 -0
  314. snappy/__pycache__/horoviewer.cpython-38.pyc +0 -0
  315. snappy/__pycache__/math_basics.cpython-38.pyc +0 -0
  316. snappy/__pycache__/matrix.cpython-38.pyc +0 -0
  317. snappy/__pycache__/number.cpython-38.pyc +0 -0
  318. snappy/__pycache__/numeric_output_checker.cpython-38.pyc +0 -0
  319. snappy/__pycache__/pari.cpython-38.pyc +0 -0
  320. snappy/__pycache__/polyviewer.cpython-38.pyc +0 -0
  321. snappy/__pycache__/sage_helper.cpython-38.pyc +0 -0
  322. snappy/__pycache__/version.cpython-38.pyc +0 -0
  323. snappy/doc/_sources/verify_canon.rst.txt +0 -90
  324. snappy/doc/_static/jquery-3.6.0.js +0 -10881
  325. snappy/doc/_static/js/html5shiv-printshiv.min.js +0 -4
  326. snappy/doc/_static/js/html5shiv.min.js +0 -4
  327. snappy/doc/_static/underscore-1.13.1.js +0 -2042
  328. snappy/doc/_static/underscore.js +0 -6
  329. snappy/doc/verify_canon.html +0 -304
  330. snappy/drilling/__pycache__/__init__.cpython-38.pyc +0 -0
  331. snappy/drilling/__pycache__/constants.cpython-38.pyc +0 -0
  332. snappy/drilling/__pycache__/crush.cpython-38.pyc +0 -0
  333. snappy/drilling/__pycache__/cusps.cpython-38.pyc +0 -0
  334. snappy/drilling/__pycache__/debug.cpython-38.pyc +0 -0
  335. snappy/drilling/__pycache__/epsilons.cpython-38.pyc +0 -0
  336. snappy/drilling/__pycache__/exceptions.cpython-38.pyc +0 -0
  337. snappy/drilling/__pycache__/fixed_points.cpython-38.pyc +0 -0
  338. snappy/drilling/__pycache__/geodesic_info.cpython-38.pyc +0 -0
  339. snappy/drilling/__pycache__/geodesic_tube.cpython-38.pyc +0 -0
  340. snappy/drilling/__pycache__/geometric_structure.cpython-38.pyc +0 -0
  341. snappy/drilling/__pycache__/line.cpython-38.pyc +0 -0
  342. snappy/drilling/__pycache__/moves.cpython-38.pyc +0 -0
  343. snappy/drilling/__pycache__/peripheral_curves.cpython-38.pyc +0 -0
  344. snappy/drilling/__pycache__/perturb.cpython-38.pyc +0 -0
  345. snappy/drilling/__pycache__/quotient_space.cpython-38.pyc +0 -0
  346. snappy/drilling/__pycache__/spatial_dict.cpython-38.pyc +0 -0
  347. snappy/drilling/__pycache__/subdivide.cpython-38.pyc +0 -0
  348. snappy/drilling/__pycache__/tracing.cpython-38.pyc +0 -0
  349. snappy/drilling/geodesic_tube.py +0 -441
  350. snappy/drilling/geometric_structure.py +0 -366
  351. snappy/drilling/line.py +0 -122
  352. snappy/drilling/quotient_space.py +0 -94
  353. snappy/drilling/spatial_dict.py +0 -128
  354. snappy/exterior_to_link/__pycache__/__init__.cpython-38.pyc +0 -0
  355. snappy/exterior_to_link/__pycache__/barycentric_geometry.cpython-38.pyc +0 -0
  356. snappy/exterior_to_link/__pycache__/exceptions.cpython-38.pyc +0 -0
  357. snappy/exterior_to_link/__pycache__/hyp_utils.cpython-38.pyc +0 -0
  358. snappy/exterior_to_link/__pycache__/link_projection.cpython-38.pyc +0 -0
  359. snappy/exterior_to_link/__pycache__/main.cpython-38.pyc +0 -0
  360. snappy/exterior_to_link/__pycache__/mcomplex_with_expansion.cpython-38.pyc +0 -0
  361. snappy/exterior_to_link/__pycache__/mcomplex_with_link.cpython-38.pyc +0 -0
  362. snappy/exterior_to_link/__pycache__/mcomplex_with_memory.cpython-38.pyc +0 -0
  363. snappy/exterior_to_link/__pycache__/pl_utils.cpython-38.pyc +0 -0
  364. snappy/exterior_to_link/__pycache__/put_in_S3.cpython-38.pyc +0 -0
  365. snappy/exterior_to_link/__pycache__/rational_linear_algebra.cpython-38.pyc +0 -0
  366. snappy/exterior_to_link/__pycache__/simplify_to_base_tri.cpython-38.pyc +0 -0
  367. snappy/exterior_to_link/__pycache__/stored_moves.cpython-38.pyc +0 -0
  368. snappy/hyperboloid/__pycache__/__init__.cpython-38.pyc +0 -0
  369. snappy/manifolds/__pycache__/__init__.cpython-38.pyc +0 -0
  370. snappy/ptolemy/__pycache__/__init__.cpython-38.pyc +0 -0
  371. snappy/ptolemy/__pycache__/component.cpython-38.pyc +0 -0
  372. snappy/ptolemy/__pycache__/coordinates.cpython-38.pyc +0 -0
  373. snappy/ptolemy/__pycache__/fieldExtensions.cpython-38.pyc +0 -0
  374. snappy/ptolemy/__pycache__/findLoops.cpython-38.pyc +0 -0
  375. snappy/ptolemy/__pycache__/homology.cpython-38.pyc +0 -0
  376. snappy/ptolemy/__pycache__/manifoldMethods.cpython-38.pyc +0 -0
  377. snappy/ptolemy/__pycache__/matrix.cpython-38.pyc +0 -0
  378. snappy/ptolemy/__pycache__/numericalSolutionsToGroebnerBasis.cpython-38.pyc +0 -0
  379. snappy/ptolemy/__pycache__/polynomial.cpython-38.pyc +0 -0
  380. snappy/ptolemy/__pycache__/processComponents.cpython-38.pyc +0 -0
  381. snappy/ptolemy/__pycache__/processFileBase.cpython-38.pyc +0 -0
  382. snappy/ptolemy/__pycache__/processFileDispatch.cpython-38.pyc +0 -0
  383. snappy/ptolemy/__pycache__/processMagmaFile.cpython-38.pyc +0 -0
  384. snappy/ptolemy/__pycache__/processRurFile.cpython-38.pyc +0 -0
  385. snappy/ptolemy/__pycache__/ptolemyGeneralizedObstructionClass.cpython-38.pyc +0 -0
  386. snappy/ptolemy/__pycache__/ptolemyObstructionClass.cpython-38.pyc +0 -0
  387. snappy/ptolemy/__pycache__/ptolemyVariety.cpython-38.pyc +0 -0
  388. snappy/ptolemy/__pycache__/ptolemyVarietyPrimeIdealGroebnerBasis.cpython-38.pyc +0 -0
  389. snappy/ptolemy/__pycache__/rur.cpython-38.pyc +0 -0
  390. snappy/ptolemy/__pycache__/solutionsToPrimeIdealGroebnerBasis.cpython-38.pyc +0 -0
  391. snappy/ptolemy/__pycache__/utilities.cpython-38.pyc +0 -0
  392. snappy/snap/__pycache__/__init__.cpython-38.pyc +0 -0
  393. snappy/snap/__pycache__/character_varieties.cpython-38.pyc +0 -0
  394. snappy/snap/__pycache__/fundamental_polyhedron.cpython-38.pyc +0 -0
  395. snappy/snap/__pycache__/interval_reps.cpython-38.pyc +0 -0
  396. snappy/snap/__pycache__/kernel_structures.cpython-38.pyc +0 -0
  397. snappy/snap/__pycache__/mcomplex_base.cpython-38.pyc +0 -0
  398. snappy/snap/__pycache__/nsagetools.cpython-38.pyc +0 -0
  399. snappy/snap/__pycache__/polished_reps.cpython-38.pyc +0 -0
  400. snappy/snap/__pycache__/shapes.cpython-38.pyc +0 -0
  401. snappy/snap/__pycache__/slice_obs_HKL.cpython-38.pyc +0 -0
  402. snappy/snap/__pycache__/utilities.cpython-38.pyc +0 -0
  403. snappy/snap/peripheral/__pycache__/__init__.cpython-38.pyc +0 -0
  404. snappy/snap/peripheral/__pycache__/dual_cellulation.cpython-38.pyc +0 -0
  405. snappy/snap/peripheral/__pycache__/link.cpython-38.pyc +0 -0
  406. snappy/snap/peripheral/__pycache__/peripheral.cpython-38.pyc +0 -0
  407. snappy/snap/peripheral/__pycache__/surface.cpython-38.pyc +0 -0
  408. snappy/snap/t3mlite/__pycache__/__init__.cpython-38.pyc +0 -0
  409. snappy/snap/t3mlite/__pycache__/arrow.cpython-38.pyc +0 -0
  410. snappy/snap/t3mlite/__pycache__/corner.cpython-38.pyc +0 -0
  411. snappy/snap/t3mlite/__pycache__/edge.cpython-38.pyc +0 -0
  412. snappy/snap/t3mlite/__pycache__/face.cpython-38.pyc +0 -0
  413. snappy/snap/t3mlite/__pycache__/files.cpython-38.pyc +0 -0
  414. snappy/snap/t3mlite/__pycache__/homology.cpython-38.pyc +0 -0
  415. snappy/snap/t3mlite/__pycache__/linalg.cpython-38.pyc +0 -0
  416. snappy/snap/t3mlite/__pycache__/mcomplex.cpython-38.pyc +0 -0
  417. snappy/snap/t3mlite/__pycache__/perm4.cpython-38.pyc +0 -0
  418. snappy/snap/t3mlite/__pycache__/simplex.cpython-38.pyc +0 -0
  419. snappy/snap/t3mlite/__pycache__/spun.cpython-38.pyc +0 -0
  420. snappy/snap/t3mlite/__pycache__/surface.cpython-38.pyc +0 -0
  421. snappy/snap/t3mlite/__pycache__/tetrahedron.cpython-38.pyc +0 -0
  422. snappy/snap/t3mlite/__pycache__/vertex.cpython-38.pyc +0 -0
  423. snappy/togl/__init__.py +0 -3
  424. snappy/togl/darwin-tk8.6/Togl2.1/LICENSE +0 -28
  425. snappy/togl/darwin-tk8.6/Togl2.1/libTogl2.1.dylib +0 -0
  426. snappy/togl/darwin-tk8.6/Togl2.1/pkgIndex.tcl +0 -5
  427. snappy/togl/darwin-tk8.7/Togl2.1/LICENSE +0 -28
  428. snappy/togl/darwin-tk8.7/Togl2.1/libTogl2.1.dylib +0 -0
  429. snappy/togl/darwin-tk8.7/Togl2.1/pkgIndex.tcl +0 -5
  430. snappy/togl/linux2-x86_64-tk8.6/Togl2.1/LICENSE +0 -28
  431. snappy/togl/linux2-x86_64-tk8.6/Togl2.1/libTogl2.1.so +0 -0
  432. snappy/togl/linux2-x86_64-tk8.6/Togl2.1/pkgIndex.tcl +0 -5
  433. snappy/togl/win32VC-tk8.6/Togl2.1/LICENSE +0 -28
  434. snappy/togl/win32VC-tk8.6/Togl2.1/Togl21.dll +0 -0
  435. snappy/togl/win32VC-tk8.6/Togl2.1/Togl21.lib +0 -0
  436. snappy/togl/win32VC-tk8.6/Togl2.1/pkgIndex.tcl +0 -6
  437. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/LICENSE +0 -28
  438. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/Togl21.dll +0 -0
  439. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/Togl21.lib +0 -0
  440. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/pkgIndex.tcl +0 -6
  441. snappy/twister/__pycache__/__init__.cpython-38.pyc +0 -0
  442. snappy/twister/__pycache__/main.cpython-38.pyc +0 -0
  443. snappy/upper_halfspace/__pycache__/__init__.cpython-38.pyc +0 -0
  444. snappy/upper_halfspace/__pycache__/ideal_point.cpython-38.pyc +0 -0
  445. snappy/verify/__pycache__/__init__.cpython-38.pyc +0 -0
  446. snappy/verify/__pycache__/cuspCrossSection.cpython-38.pyc +0 -0
  447. snappy/verify/__pycache__/cuspTranslations.cpython-38.pyc +0 -0
  448. snappy/verify/__pycache__/cusp_areas.cpython-38.pyc +0 -0
  449. snappy/verify/__pycache__/cusp_shapes.cpython-38.pyc +0 -0
  450. snappy/verify/__pycache__/exceptions.cpython-38.pyc +0 -0
  451. snappy/verify/__pycache__/interval_newton_shapes_engine.cpython-38.pyc +0 -0
  452. snappy/verify/__pycache__/interval_tree.cpython-38.pyc +0 -0
  453. snappy/verify/__pycache__/krawczyk_shapes_engine.cpython-38.pyc +0 -0
  454. snappy/verify/__pycache__/realAlgebra.cpython-38.pyc +0 -0
  455. snappy/verify/__pycache__/shapes.cpython-38.pyc +0 -0
  456. snappy/verify/__pycache__/short_slopes.cpython-38.pyc +0 -0
  457. snappy/verify/__pycache__/squareExtensions.cpython-38.pyc +0 -0
  458. snappy/verify/__pycache__/verifyCanonical.cpython-38.pyc +0 -0
  459. snappy/verify/__pycache__/verifyHyperbolicity.cpython-38.pyc +0 -0
  460. snappy/verify/__pycache__/volume.cpython-38.pyc +0 -0
  461. snappy/verify/complex_volume/__pycache__/__init__.cpython-38.pyc +0 -0
  462. snappy/verify/complex_volume/__pycache__/adjust_torsion.cpython-38.pyc +0 -0
  463. snappy/verify/complex_volume/__pycache__/closed.cpython-38.pyc +0 -0
  464. snappy/verify/complex_volume/__pycache__/compute_ptolemys.cpython-38.pyc +0 -0
  465. snappy/verify/complex_volume/__pycache__/cusped.cpython-38.pyc +0 -0
  466. snappy/verify/complex_volume/__pycache__/extended_bloch.cpython-38.pyc +0 -0
  467. snappy/verify/cuspCrossSection.py +0 -1422
  468. snappy/verify/maximal_cusp_area_matrix/__pycache__/__init__.cpython-38.pyc +0 -0
  469. snappy/verify/maximal_cusp_area_matrix/__pycache__/cusp_tiling_engine.cpython-38.pyc +0 -0
  470. snappy/verify/maximal_cusp_area_matrix/__pycache__/cusp_translate_engine.cpython-38.pyc +0 -0
  471. snappy/verify/upper_halfspace/__pycache__/__init__.cpython-38.pyc +0 -0
  472. snappy/verify/upper_halfspace/__pycache__/extended_matrix.cpython-38.pyc +0 -0
  473. snappy/verify/upper_halfspace/__pycache__/finite_point.cpython-38.pyc +0 -0
  474. snappy/verify/upper_halfspace/__pycache__/ideal_point.cpython-38.pyc +0 -0
  475. snappy-3.1.1.dist-info/RECORD +0 -575
  476. {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
- try:
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, text_widget):
12
- self.text_widget = text_widget
20
+ def __init__(self):
13
21
  self.setting_dict = {
14
22
  'autocall' : False,
15
- 'automagic' : False,
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' : True,
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 current_font_dict(self):
45
- font_string = self.text_widget.cget('font')
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
- # plistlib screws up tuples
79
- self.setting_dict['font'] = tuple(self.setting_dict['font'])
80
- except IOError:
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(self.setting_dict, setting_file)
94
+ plistlib.dump(setting_dict, setting_file)
88
95
  else:
89
- plistlib.writePlist(self.setting_dict, self.setting_file)
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, master):
176
- current_font = self.settings.current_font_dict()
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(master)
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
- command=self.set_font_sample,
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['size'] )
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['size']
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['weight'])
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['slant'])
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
- self.sample = sample = Tk_.Text(self.font_frame,
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=6, columnspan=4, padx=10, pady=10, sticky=Tk_.E+Tk_.W)
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
- style = '%s %s' % (self.font_weight.get(), self.font_slant.get())
257
- return (family, size, style.strip())
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, master):
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(master)
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 set_automagic(self):
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(master)
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, master):
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(master)
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
- text_widget = Tk_.Text(parent)
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 sage.all import PolynomialRing, QQ
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.sage_helper import _within_sage, doctest_modules
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 sage.all import matrix
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 simplfied by M.fundamental_group(...)
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
 
@@ -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(TransferKernelStructuresEngine, self).__init__(mcomplex)
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 sage
9
- from sage.all import (ZZ, vector, matrix, block_matrix, identity_matrix,
10
- gcd, prod, det, MatrixSpace, AbelianGroup, GroupAlgebra,
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 fundamental_group and
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 fundamental group")
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 sage.all import (ZZ, matrix, vector, ChainComplex, Graph)
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 = dict()
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 = [v.index for v in edge.vertices]
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 sage.all import matrix, vector, ZZ
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 = [link.TruncatedSimplexCorners[V][v] for v in side.vertices]
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 sage.all import (ZZ, matrix, vector, ChainComplex,
6
- cached_method, line, arrow, text)
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 ( [S for S in self.sides], [-S for S in self.sides] ):
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 = dict()
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 = dict([( (C.triangle, C.vertex), V) for V in vertices for C in V.corners])
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
  """
@@ -19,7 +19,7 @@ def verbose():
19
19
  def doctest_globals(module):
20
20
  if hasattr(module, 'doctest_globals'):
21
21
  return module.doctest_globals()
22
- return dict()
22
+ return {}
23
23
 
24
24
 
25
25
  if __name__ == '__main__':
@@ -10,10 +10,10 @@ from ..pari import pari
10
10
  from .fundamental_polyhedron import *
11
11
 
12
12
  if _within_sage:
13
- import sage
14
- from sage.all import RealField, ComplexField, gcd, prod, powerset
15
- from sage.all import MatrixSpace, matrix, vector, ZZ
16
- Object = sage.structure.sage_object.SageObject
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 = [self.SL2C(w) for w in self.peripheral_curves()[cusp_num]]
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 = [ make_trace_2( C**(-1)*A*C ) for A in [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 equipt with a high-precision version of the
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()