snappy 3.0.3__cp38-cp38-macosx_11_0_arm64.whl → 3.2__cp38-cp38-macosx_11_0_arm64.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (401) hide show
  1. snappy/CyOpenGL.cpython-38-darwin.so +0 -0
  2. snappy/SnapPy.cpython-38-darwin.so +0 -0
  3. snappy/SnapPyHP.cpython-38-darwin.so +0 -0
  4. snappy/__init__.py +373 -426
  5. snappy/app.py +240 -75
  6. snappy/app_menus.py +93 -78
  7. snappy/browser.py +87 -63
  8. snappy/cache.py +5 -8
  9. snappy/canonical.py +249 -0
  10. snappy/{verify/cusp_shapes.py → cusps/__init__.py} +11 -19
  11. snappy/cusps/cusp_area_matrix.py +101 -0
  12. snappy/{verify/cusp_areas.py → cusps/cusp_areas_from_matrix.py} +39 -54
  13. snappy/cusps/maximal_cusp_area_matrix.py +136 -0
  14. snappy/cusps/test.py +21 -0
  15. snappy/cusps/trig_cusp_area_matrix.py +63 -0
  16. snappy/database.py +40 -31
  17. snappy/db_utilities.py +13 -14
  18. snappy/decorated_isosig.py +377 -133
  19. snappy/dev/extended_ptolemy/complexVolumesClosed.py +42 -9
  20. snappy/dev/extended_ptolemy/extended.py +32 -25
  21. snappy/dev/extended_ptolemy/giac_rur.py +23 -8
  22. snappy/dev/extended_ptolemy/phc_wrapper.py +10 -10
  23. snappy/dev/vericlosed/computeApproxHyperbolicStructureOrb.py +2 -1
  24. snappy/dev/vericlosed/gimbalLoopFinder.py +5 -5
  25. snappy/dev/vericlosed/hyperbolicStructure.py +3 -3
  26. snappy/dev/vericlosed/oneVertexTruncatedComplex.py +2 -2
  27. snappy/dev/vericlosed/truncatedComplex.py +3 -2
  28. snappy/dev/vericlosed/verifyHyperbolicStructureEngine.py +4 -3
  29. snappy/doc/_images/geodesics.jpg +0 -0
  30. snappy/doc/_images/m004_paper_plane_on_systole.jpg +0 -0
  31. snappy/doc/_images/m125_paper_plane.jpg +0 -0
  32. snappy/doc/_images/o9_00000_systole_paper_plane.jpg +0 -0
  33. snappy/doc/_images/o9_00000_systole_paper_plane_closer.jpg +0 -0
  34. snappy/doc/_sources/additional_classes.rst.txt +1 -0
  35. snappy/doc/_sources/credits.rst.txt +6 -1
  36. snappy/doc/_sources/development.rst.txt +69 -50
  37. snappy/doc/_sources/index.rst.txt +101 -66
  38. snappy/doc/_sources/installing.rst.txt +148 -165
  39. snappy/doc/_sources/news.rst.txt +136 -32
  40. snappy/doc/_sources/ptolemy.rst.txt +1 -1
  41. snappy/doc/_sources/ptolemy_examples1.rst.txt +9 -8
  42. snappy/doc/_sources/ptolemy_examples2.rst.txt +3 -3
  43. snappy/doc/_sources/ptolemy_examples3.rst.txt +14 -14
  44. snappy/doc/_sources/ptolemy_prelim.rst.txt +1 -1
  45. snappy/doc/_sources/snap.rst.txt +2 -2
  46. snappy/doc/_sources/snappy.rst.txt +1 -1
  47. snappy/doc/_sources/triangulation.rst.txt +3 -2
  48. snappy/doc/_sources/verify.rst.txt +89 -29
  49. snappy/doc/_sources/verify_internals.rst.txt +5 -16
  50. snappy/doc/_static/SnapPy-horizontal-128.png +0 -0
  51. snappy/doc/_static/SnapPy.ico +0 -0
  52. snappy/doc/_static/_sphinx_javascript_frameworks_compat.js +123 -0
  53. snappy/doc/_static/basic.css +47 -27
  54. snappy/doc/_static/css/badge_only.css +1 -0
  55. snappy/doc/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
  56. snappy/doc/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
  57. snappy/doc/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
  58. snappy/doc/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
  59. snappy/doc/_static/css/fonts/fontawesome-webfont.eot +0 -0
  60. snappy/doc/_static/css/fonts/fontawesome-webfont.svg +2671 -0
  61. snappy/doc/_static/css/fonts/fontawesome-webfont.ttf +0 -0
  62. snappy/doc/_static/css/fonts/fontawesome-webfont.woff +0 -0
  63. snappy/doc/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
  64. snappy/doc/_static/css/fonts/lato-bold-italic.woff +0 -0
  65. snappy/doc/_static/css/fonts/lato-bold-italic.woff2 +0 -0
  66. snappy/doc/_static/css/fonts/lato-bold.woff +0 -0
  67. snappy/doc/_static/css/fonts/lato-bold.woff2 +0 -0
  68. snappy/doc/_static/css/fonts/lato-normal-italic.woff +0 -0
  69. snappy/doc/_static/css/fonts/lato-normal-italic.woff2 +0 -0
  70. snappy/doc/_static/css/fonts/lato-normal.woff +0 -0
  71. snappy/doc/_static/css/fonts/lato-normal.woff2 +0 -0
  72. snappy/doc/_static/css/theme.css +4 -0
  73. snappy/doc/_static/doctools.js +107 -274
  74. snappy/doc/_static/documentation_options.js +6 -5
  75. snappy/doc/_static/fonts/Lato/lato-bold.eot +0 -0
  76. snappy/doc/_static/fonts/Lato/lato-bold.ttf +0 -0
  77. snappy/doc/_static/fonts/Lato/lato-bold.woff +0 -0
  78. snappy/doc/_static/fonts/Lato/lato-bold.woff2 +0 -0
  79. snappy/doc/_static/fonts/Lato/lato-bolditalic.eot +0 -0
  80. snappy/doc/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
  81. snappy/doc/_static/fonts/Lato/lato-bolditalic.woff +0 -0
  82. snappy/doc/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
  83. snappy/doc/_static/fonts/Lato/lato-italic.eot +0 -0
  84. snappy/doc/_static/fonts/Lato/lato-italic.ttf +0 -0
  85. snappy/doc/_static/fonts/Lato/lato-italic.woff +0 -0
  86. snappy/doc/_static/fonts/Lato/lato-italic.woff2 +0 -0
  87. snappy/doc/_static/fonts/Lato/lato-regular.eot +0 -0
  88. snappy/doc/_static/fonts/Lato/lato-regular.ttf +0 -0
  89. snappy/doc/_static/fonts/Lato/lato-regular.woff +0 -0
  90. snappy/doc/_static/fonts/Lato/lato-regular.woff2 +0 -0
  91. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
  92. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
  93. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
  94. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
  95. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
  96. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
  97. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
  98. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
  99. snappy/doc/_static/jquery.js +2 -2
  100. snappy/doc/_static/js/badge_only.js +1 -0
  101. snappy/doc/_static/js/theme.js +1 -0
  102. snappy/doc/_static/js/versions.js +228 -0
  103. snappy/doc/_static/language_data.js +3 -101
  104. snappy/doc/_static/pygments.css +1 -0
  105. snappy/doc/_static/searchtools.js +489 -398
  106. snappy/doc/_static/snappy_furo.css +33 -0
  107. snappy/doc/_static/snappy_sphinx_rtd_theme.css +42 -0
  108. snappy/doc/_static/sphinx_highlight.js +154 -0
  109. snappy/doc/additional_classes.html +688 -263
  110. snappy/doc/bugs.html +107 -94
  111. snappy/doc/censuses.html +155 -127
  112. snappy/doc/credits.html +115 -104
  113. snappy/doc/development.html +184 -146
  114. snappy/doc/genindex.html +287 -204
  115. snappy/doc/index.html +189 -150
  116. snappy/doc/installing.html +259 -266
  117. snappy/doc/manifold.html +1626 -592
  118. snappy/doc/manifoldhp.html +119 -105
  119. snappy/doc/news.html +198 -104
  120. snappy/doc/objects.inv +0 -0
  121. snappy/doc/other.html +117 -105
  122. snappy/doc/platonic_census.html +161 -114
  123. snappy/doc/plink.html +113 -105
  124. snappy/doc/ptolemy.html +131 -108
  125. snappy/doc/ptolemy_classes.html +242 -223
  126. snappy/doc/ptolemy_examples1.html +144 -130
  127. snappy/doc/ptolemy_examples2.html +141 -129
  128. snappy/doc/ptolemy_examples3.html +148 -132
  129. snappy/doc/ptolemy_examples4.html +131 -111
  130. snappy/doc/ptolemy_prelim.html +162 -138
  131. snappy/doc/py-modindex.html +104 -69
  132. snappy/doc/screenshots.html +117 -108
  133. snappy/doc/search.html +115 -84
  134. snappy/doc/searchindex.js +1 -1
  135. snappy/doc/snap.html +109 -96
  136. snappy/doc/snappy.html +134 -97
  137. snappy/doc/spherogram.html +259 -187
  138. snappy/doc/todo.html +107 -94
  139. snappy/doc/triangulation.html +1380 -111
  140. snappy/doc/tutorial.html +107 -94
  141. snappy/doc/verify.html +194 -125
  142. snappy/doc/verify_internals.html +248 -686
  143. snappy/drilling/__init__.py +456 -0
  144. snappy/drilling/barycentric.py +103 -0
  145. snappy/drilling/constants.py +5 -0
  146. snappy/drilling/crush.py +270 -0
  147. snappy/drilling/cusps.py +125 -0
  148. snappy/drilling/debug.py +242 -0
  149. snappy/drilling/epsilons.py +6 -0
  150. snappy/drilling/exceptions.py +55 -0
  151. snappy/drilling/moves.py +620 -0
  152. snappy/drilling/peripheral_curves.py +210 -0
  153. snappy/drilling/perturb.py +188 -0
  154. snappy/drilling/shorten.py +36 -0
  155. snappy/drilling/subdivide.py +274 -0
  156. snappy/drilling/test.py +23 -0
  157. snappy/drilling/test_cases.py +126 -0
  158. snappy/drilling/tracing.py +351 -0
  159. snappy/exceptions.py +23 -3
  160. snappy/export_stl.py +20 -14
  161. snappy/exterior_to_link/__init__.py +2 -0
  162. snappy/exterior_to_link/barycentric_geometry.py +463 -0
  163. snappy/exterior_to_link/exceptions.py +6 -0
  164. snappy/exterior_to_link/geodesic_map.json +14408 -0
  165. snappy/exterior_to_link/hyp_utils.py +112 -0
  166. snappy/exterior_to_link/link_projection.py +323 -0
  167. snappy/exterior_to_link/main.py +197 -0
  168. snappy/exterior_to_link/mcomplex_with_expansion.py +261 -0
  169. snappy/exterior_to_link/mcomplex_with_link.py +687 -0
  170. snappy/exterior_to_link/mcomplex_with_memory.py +162 -0
  171. snappy/exterior_to_link/pl_utils.py +491 -0
  172. snappy/exterior_to_link/put_in_S3.py +156 -0
  173. snappy/exterior_to_link/rational_linear_algebra.py +123 -0
  174. snappy/exterior_to_link/rational_linear_algebra_wrapped.py +135 -0
  175. snappy/exterior_to_link/simplify_to_base_tri.py +114 -0
  176. snappy/exterior_to_link/stored_moves.py +475 -0
  177. snappy/exterior_to_link/test.py +31 -0
  178. snappy/geometric_structure/__init__.py +212 -0
  179. snappy/geometric_structure/cusp_neighborhood/__init__.py +3 -0
  180. snappy/geometric_structure/cusp_neighborhood/complex_cusp_cross_section.py +697 -0
  181. snappy/geometric_structure/cusp_neighborhood/cusp_cross_section_base.py +484 -0
  182. snappy/geometric_structure/cusp_neighborhood/exceptions.py +42 -0
  183. snappy/geometric_structure/cusp_neighborhood/real_cusp_cross_section.py +298 -0
  184. snappy/geometric_structure/cusp_neighborhood/tiles_for_cusp_neighborhood.py +159 -0
  185. snappy/geometric_structure/cusp_neighborhood/vertices.py +32 -0
  186. snappy/geometric_structure/geodesic/__init__.py +0 -0
  187. snappy/geometric_structure/geodesic/add_core_curves.py +152 -0
  188. snappy/geometric_structure/geodesic/avoid_core_curves.py +369 -0
  189. snappy/geometric_structure/geodesic/canonical_keys.py +52 -0
  190. snappy/geometric_structure/geodesic/check_away_from_core_curve.py +60 -0
  191. snappy/geometric_structure/geodesic/constants.py +6 -0
  192. snappy/geometric_structure/geodesic/exceptions.py +22 -0
  193. snappy/geometric_structure/geodesic/fixed_points.py +93 -0
  194. snappy/geometric_structure/geodesic/geodesic_start_point_info.py +435 -0
  195. snappy/geometric_structure/geodesic/graph_trace_helper.py +67 -0
  196. snappy/geometric_structure/geodesic/line.py +30 -0
  197. snappy/geometric_structure/geodesic/multiplicity.py +127 -0
  198. snappy/geometric_structure/geodesic/tiles_for_geodesic.py +101 -0
  199. snappy/geometric_structure/test.py +22 -0
  200. snappy/gui.py +36 -36
  201. snappy/horoviewer.py +50 -48
  202. snappy/hyperboloid/__init__.py +212 -0
  203. snappy/hyperboloid/distances.py +245 -0
  204. snappy/hyperboloid/horoball.py +19 -0
  205. snappy/hyperboloid/line.py +35 -0
  206. snappy/hyperboloid/point.py +9 -0
  207. snappy/hyperboloid/triangle.py +29 -0
  208. snappy/{infodialog.py → infowindow.py} +32 -33
  209. snappy/isometry_signature.py +382 -0
  210. snappy/len_spec/__init__.py +596 -0
  211. snappy/len_spec/geodesic_info.py +110 -0
  212. snappy/len_spec/geodesic_key_info_dict.py +117 -0
  213. snappy/len_spec/geodesic_piece.py +143 -0
  214. snappy/len_spec/geometric_structure.py +182 -0
  215. snappy/len_spec/geometry.py +80 -0
  216. snappy/len_spec/length_spectrum_geodesic_info.py +170 -0
  217. snappy/len_spec/spine.py +206 -0
  218. snappy/len_spec/test.py +24 -0
  219. snappy/len_spec/test_cases.py +69 -0
  220. snappy/len_spec/tile.py +275 -0
  221. snappy/len_spec/word.py +86 -0
  222. snappy/manifolds/__init__.py +1 -1
  223. snappy/math_basics.py +176 -0
  224. snappy/matrix.py +525 -0
  225. snappy/number.py +97 -21
  226. snappy/numeric_output_checker.py +37 -27
  227. snappy/pari.py +30 -69
  228. snappy/phone_home.py +25 -20
  229. snappy/polyviewer.py +39 -37
  230. snappy/ptolemy/__init__.py +4 -6
  231. snappy/ptolemy/component.py +14 -12
  232. snappy/ptolemy/coordinates.py +312 -295
  233. snappy/ptolemy/fieldExtensions.py +14 -12
  234. snappy/ptolemy/findLoops.py +43 -31
  235. snappy/ptolemy/geometricRep.py +24 -26
  236. snappy/ptolemy/homology.py +12 -7
  237. snappy/ptolemy/manifoldMethods.py +69 -70
  238. snappy/ptolemy/matrix.py +65 -26
  239. snappy/ptolemy/numericalSolutionsToGroebnerBasis.py +18 -14
  240. snappy/ptolemy/polynomial.py +125 -119
  241. snappy/ptolemy/processComponents.py +36 -30
  242. snappy/ptolemy/processFileBase.py +79 -18
  243. snappy/ptolemy/processFileDispatch.py +13 -14
  244. snappy/ptolemy/processMagmaFile.py +44 -39
  245. snappy/ptolemy/processRurFile.py +18 -11
  246. snappy/ptolemy/ptolemyGeneralizedObstructionClass.py +20 -17
  247. snappy/ptolemy/ptolemyObstructionClass.py +13 -17
  248. snappy/ptolemy/ptolemyVariety.py +190 -121
  249. snappy/ptolemy/ptolemyVarietyPrimeIdealGroebnerBasis.py +20 -19
  250. snappy/ptolemy/reginaWrapper.py +25 -29
  251. snappy/ptolemy/rur.py +6 -14
  252. snappy/ptolemy/solutionsToPrimeIdealGroebnerBasis.py +27 -22
  253. snappy/ptolemy/test.py +247 -188
  254. snappy/ptolemy/utilities.py +41 -43
  255. snappy/raytracing/__init__.py +64 -0
  256. snappy/raytracing/additional_horospheres.py +64 -0
  257. snappy/raytracing/additional_len_spec_choices.py +63 -0
  258. snappy/raytracing/cohomology_fractal.py +10 -6
  259. snappy/raytracing/eyeball.py +123 -0
  260. snappy/raytracing/finite_raytracing_data.py +48 -38
  261. snappy/raytracing/finite_viewer.py +218 -210
  262. snappy/raytracing/geodesic_tube_info.py +174 -0
  263. snappy/raytracing/geodesics.py +246 -0
  264. snappy/raytracing/geodesics_window.py +258 -0
  265. snappy/raytracing/gui_utilities.py +152 -40
  266. snappy/raytracing/hyperboloid_navigation.py +102 -52
  267. snappy/raytracing/hyperboloid_utilities.py +114 -261
  268. snappy/raytracing/ideal_raytracing_data.py +256 -179
  269. snappy/raytracing/inside_viewer.py +522 -253
  270. snappy/raytracing/pack.py +22 -0
  271. snappy/raytracing/raytracing_data.py +46 -34
  272. snappy/raytracing/raytracing_view.py +190 -109
  273. snappy/raytracing/shaders/Eye.png +0 -0
  274. snappy/raytracing/shaders/NonGeometric.png +0 -0
  275. snappy/raytracing/shaders/__init__.py +60 -4
  276. snappy/raytracing/shaders/fragment.glsl +575 -148
  277. snappy/raytracing/test.py +29 -0
  278. snappy/raytracing/tooltip.py +146 -0
  279. snappy/raytracing/upper_halfspace_utilities.py +98 -0
  280. snappy/raytracing/view_scale_controller.py +98 -0
  281. snappy/raytracing/zoom_slider/__init__.py +32 -29
  282. snappy/raytracing/zoom_slider/test.py +2 -0
  283. snappy/sage_helper.py +69 -123
  284. snappy/{preferences.py → settings.py} +167 -145
  285. snappy/shell.py +4 -0
  286. snappy/snap/__init__.py +12 -8
  287. snappy/snap/character_varieties.py +24 -18
  288. snappy/snap/find_field.py +35 -34
  289. snappy/snap/fundamental_polyhedron.py +99 -85
  290. snappy/snap/generators.py +6 -8
  291. snappy/snap/interval_reps.py +18 -6
  292. snappy/snap/kernel_structures.py +8 -3
  293. snappy/snap/mcomplex_base.py +1 -2
  294. snappy/snap/nsagetools.py +107 -53
  295. snappy/snap/peripheral/__init__.py +1 -1
  296. snappy/snap/peripheral/dual_cellulation.py +15 -7
  297. snappy/snap/peripheral/link.py +20 -16
  298. snappy/snap/peripheral/peripheral.py +22 -14
  299. snappy/snap/peripheral/surface.py +47 -50
  300. snappy/snap/peripheral/test.py +8 -8
  301. snappy/snap/polished_reps.py +65 -40
  302. snappy/snap/shapes.py +41 -22
  303. snappy/snap/slice_obs_HKL.py +64 -25
  304. snappy/snap/t3mlite/arrow.py +88 -51
  305. snappy/snap/t3mlite/corner.py +5 -6
  306. snappy/snap/t3mlite/edge.py +32 -21
  307. snappy/snap/t3mlite/face.py +7 -9
  308. snappy/snap/t3mlite/files.py +31 -23
  309. snappy/snap/t3mlite/homology.py +14 -10
  310. snappy/snap/t3mlite/linalg.py +158 -56
  311. snappy/snap/t3mlite/mcomplex.py +739 -291
  312. snappy/snap/t3mlite/perm4.py +236 -84
  313. snappy/snap/t3mlite/setup.py +9 -10
  314. snappy/snap/t3mlite/simplex.py +65 -48
  315. snappy/snap/t3mlite/spun.py +42 -30
  316. snappy/snap/t3mlite/surface.py +45 -45
  317. snappy/snap/t3mlite/test.py +3 -0
  318. snappy/snap/t3mlite/test_vs_regina.py +17 -13
  319. snappy/snap/t3mlite/tetrahedron.py +25 -24
  320. snappy/snap/t3mlite/vertex.py +8 -13
  321. snappy/snap/test.py +45 -52
  322. snappy/snap/utilities.py +66 -65
  323. snappy/test.py +155 -158
  324. snappy/test_cases.py +263 -0
  325. snappy/testing.py +131 -0
  326. snappy/tiling/__init__.py +2 -0
  327. snappy/tiling/canonical_key_dict.py +59 -0
  328. snappy/tiling/dict_based_set.py +79 -0
  329. snappy/tiling/floor.py +49 -0
  330. snappy/tiling/hyperboloid_dict.py +54 -0
  331. snappy/tiling/iter_utils.py +78 -0
  332. snappy/tiling/lifted_tetrahedron.py +22 -0
  333. snappy/tiling/lifted_tetrahedron_set.py +54 -0
  334. snappy/tiling/real_hash_dict.py +164 -0
  335. snappy/tiling/test.py +23 -0
  336. snappy/tiling/tile.py +215 -0
  337. snappy/tiling/triangle.py +33 -0
  338. snappy/tkterminal.py +313 -203
  339. snappy/twister/main.py +1 -8
  340. snappy/twister/twister_core.cpython-38-darwin.so +0 -0
  341. snappy/upper_halfspace/__init__.py +146 -0
  342. snappy/upper_halfspace/ideal_point.py +26 -0
  343. snappy/verify/__init__.py +4 -8
  344. snappy/verify/{verifyCanonical.py → canonical.py} +114 -97
  345. snappy/verify/complex_volume/__init__.py +3 -2
  346. snappy/verify/complex_volume/adjust_torsion.py +13 -11
  347. snappy/verify/complex_volume/closed.py +29 -24
  348. snappy/verify/complex_volume/compute_ptolemys.py +8 -6
  349. snappy/verify/complex_volume/cusped.py +10 -9
  350. snappy/verify/complex_volume/extended_bloch.py +14 -12
  351. snappy/verify/{cuspTranslations.py → cusp_translations.py} +15 -14
  352. snappy/verify/edge_equations.py +80 -0
  353. snappy/verify/exceptions.py +23 -56
  354. snappy/verify/{verifyHyperbolicity.py → hyperbolicity.py} +19 -15
  355. snappy/verify/interval_newton_shapes_engine.py +51 -211
  356. snappy/verify/interval_tree.py +27 -25
  357. snappy/verify/krawczyk_shapes_engine.py +47 -50
  358. snappy/verify/maximal_cusp_area_matrix/__init__.py +17 -86
  359. snappy/verify/maximal_cusp_area_matrix/cusp_tiling_engine.py +58 -48
  360. snappy/verify/maximal_cusp_area_matrix/cusp_translate_engine.py +53 -57
  361. snappy/verify/{realAlgebra.py → real_algebra.py} +26 -20
  362. snappy/verify/shapes.py +10 -7
  363. snappy/verify/short_slopes.py +41 -42
  364. snappy/verify/{squareExtensions.py → square_extensions.py} +96 -92
  365. snappy/verify/test.py +59 -57
  366. snappy/verify/upper_halfspace/extended_matrix.py +5 -5
  367. snappy/verify/upper_halfspace/finite_point.py +44 -31
  368. snappy/verify/upper_halfspace/ideal_point.py +69 -57
  369. snappy/verify/volume.py +15 -12
  370. snappy/version.py +2 -3
  371. {snappy-3.0.3.dist-info → snappy-3.2.dist-info}/METADATA +14 -12
  372. snappy-3.2.dist-info/RECORD +503 -0
  373. {snappy-3.0.3.dist-info → snappy-3.2.dist-info}/WHEEL +1 -1
  374. {snappy-3.0.3.dist-info → snappy-3.2.dist-info}/entry_points.txt +0 -1
  375. {snappy-3.0.3.dist-info → snappy-3.2.dist-info}/top_level.txt +10 -1
  376. snappy/doc/_sources/verify_canon.rst.txt +0 -90
  377. snappy/doc/_static/classic.css +0 -266
  378. snappy/doc/_static/jquery-3.5.1.js +0 -10872
  379. snappy/doc/_static/sidebar.js +0 -159
  380. snappy/doc/_static/underscore-1.13.1.js +0 -2042
  381. snappy/doc/_static/underscore.js +0 -6
  382. snappy/doc/verify_canon.html +0 -283
  383. snappy/ppm_to_png.py +0 -243
  384. snappy/togl/__init__.py +0 -3
  385. snappy/togl/darwin-tk8.6/Togl2.1/LICENSE +0 -28
  386. snappy/togl/darwin-tk8.6/Togl2.1/libTogl2.1.dylib +0 -0
  387. snappy/togl/darwin-tk8.6/Togl2.1/pkgIndex.tcl +0 -5
  388. snappy/togl/linux2-x86_64-tk8.6/Togl2.1/LICENSE +0 -28
  389. snappy/togl/linux2-x86_64-tk8.6/Togl2.1/libTogl2.1.so +0 -0
  390. snappy/togl/linux2-x86_64-tk8.6/Togl2.1/pkgIndex.tcl +0 -5
  391. snappy/togl/win32VC-tk8.6/Togl2.1/LICENSE +0 -28
  392. snappy/togl/win32VC-tk8.6/Togl2.1/Togl21.dll +0 -0
  393. snappy/togl/win32VC-tk8.6/Togl2.1/Togl21.lib +0 -0
  394. snappy/togl/win32VC-tk8.6/Togl2.1/pkgIndex.tcl +0 -6
  395. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/LICENSE +0 -28
  396. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/Togl21.dll +0 -0
  397. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/Togl21.lib +0 -0
  398. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/pkgIndex.tcl +0 -6
  399. snappy/verify/cuspCrossSection.py +0 -1413
  400. snappy/verify/mathHelpers.py +0 -64
  401. snappy-3.0.3.dist-info/RECORD +0 -360
snappy/app_menus.py CHANGED
@@ -1,11 +1,13 @@
1
1
  # -*- coding: utf-8 -*-
2
- from __future__ import unicode_literals
3
- from builtins import range
4
- import sys, os, webbrowser
2
+ import sys
3
+ import os
4
+ import webbrowser
5
5
  from urllib.request import pathname2url
6
6
  from .gui import *
7
7
  from . import __file__ as snappy_dir
8
- from .infodialog import about_snappy, InfoDialog
8
+ from .infowindow import about_snappy, InfoWindow
9
+ from .version import version
10
+ import shutil
9
11
 
10
12
  OSX_shortcuts = {'Open...' : 'Command-o',
11
13
  'Save' : 'Command-s',
@@ -61,6 +63,42 @@ else: # fall back choice
61
63
  scut = Linux_shortcuts
62
64
  scut_events = Linux_shortcut_events
63
65
 
66
+
67
+ def open_html_docs(page):
68
+ # In some Linux distros that package their webrowsers via snaps
69
+ # (e.g. Ubuntu 22.04 LTS), it is not possible to open a local HTML
70
+ # file if it is either (a) outside of $HOME or (b) in a hidden
71
+ # subdirectory of $HOME. As Python's default user-site directory
72
+ # on Linux is in $HOME/.local, this makes it impossible to access
73
+ # the local copy of the docs.
74
+ #
75
+ # For details, see: https://bugs.launchpad.net/snapd/+bug/1979060
76
+
77
+ doc_dir = os.path.join(os.path.dirname(snappy_dir), 'doc')
78
+
79
+ if sys.platform.startswith('linux'):
80
+ safe_doc_dir = os.path.join(os.environ['HOME'], 'Downloads',
81
+ f'SnapPy_{version}_help_f8205a5')
82
+ if os.path.exists(safe_doc_dir):
83
+ shutil.rmtree(safe_doc_dir)
84
+ shutil.copytree(doc_dir, safe_doc_dir)
85
+ else:
86
+ safe_doc_dir = doc_dir
87
+
88
+ path = os.path.join(safe_doc_dir, page)
89
+ if os.path.exists(path):
90
+ url = 'file:' + pathname2url(path)
91
+ try:
92
+ webbrowser.open_new_tab(url)
93
+ except webbrowser.Error:
94
+ from tkinter import messagebox
95
+ messagebox.showwarning('Error', 'Failed to open the documentation file.')
96
+ else:
97
+ from tkinter import messagebox
98
+ messagebox.showwarning('Not found!',
99
+ 'The file %s does not exist.' % path)
100
+
101
+
64
102
  def add_menu(root, menu, label, command, state='active'):
65
103
  accelerator = scut.get(label, '')
66
104
  menu.add_command(label=label, accelerator=accelerator,
@@ -68,6 +106,7 @@ def add_menu(root, menu, label, command, state='active'):
68
106
  if scut_events.get(label, None) and state != 'disabled':
69
107
  root.bind(scut_events[label], command)
70
108
 
109
+
71
110
  class EditMenu(Tk_.Menu):
72
111
  """Edit Menu cascade containing Cut, Copy, Paste and Delete. To use,
73
112
  provide a callback function which returns a dict specifying which
@@ -102,6 +141,7 @@ class EditMenu(Tk_.Menu):
102
141
  else:
103
142
  self.entryconfig(entry, state='disabled')
104
143
 
144
+
105
145
  class HelpMenu(Tk_.Menu):
106
146
  """Help Menu cascade. Always contains the main SnapPy help entry.
107
147
  Additional help entries for specific tools, such as a Dirichlet
@@ -112,30 +152,16 @@ class HelpMenu(Tk_.Menu):
112
152
  # on OS X setting name='help' makes this a system help menu.
113
153
  Tk_.Menu.__init__(self, menubar, name='help')
114
154
  if sys.platform != 'darwin':
115
- self.add_command(label = 'SnapPy Help ...', command=self.show_SnapPy_help)
116
- self.add_command(label = help_report_bugs_label,
155
+ self.add_command(label='SnapPy Help ...', command=self.show_SnapPy_help)
156
+ self.add_command(label=help_report_bugs_label,
117
157
  command=self.show_bugs_page)
118
158
  self.extra_commands = {}
119
159
 
120
160
  def show_SnapPy_help(self):
121
- self.show_page('index.html')
161
+ open_html_docs('index.html')
122
162
 
123
163
  def show_bugs_page(self):
124
- self.show_page('bugs.html')
125
-
126
- def show_page(self, page):
127
- path = os.path.join(os.path.dirname(snappy_dir), 'doc', page)
128
- if os.path.exists(path):
129
- url = 'file:' + pathname2url(path)
130
- try:
131
- webbrowser.open_new_tab(url)
132
- except webbrowser.Error:
133
- from tkinter import messagebox
134
- messagebox.showwarning('Error', 'Failed to open the documentation file.')
135
- else:
136
- from tkinter import messagebox
137
- messagebox.showwarning('Not found!',
138
- 'The file %s does not exist.'%path)
164
+ open_html_docs('bugs.html')
139
165
 
140
166
  def extra_command(self, label, command):
141
167
  self.extra_commands[label] = command
@@ -153,6 +179,7 @@ class HelpMenu(Tk_.Menu):
153
179
  if label in self.extra_commands:
154
180
  self.add_command(label=label, command=self.extra_commands[label])
155
181
 
182
+
156
183
  class ListedWindow():
157
184
  """
158
185
  Mixin class that allows emulation of the Apple Window menu. Windows
@@ -160,16 +187,16 @@ class ListedWindow():
160
187
  call unregister_window when they close. The class maintains a list of all
161
188
  openwindows.Participating windows should be subclasses of ListedWindow, as
162
189
  should objects which need access to its list of all windows in the app, such
163
- as the Preferences object.
190
+ as the Settings object.
164
191
  """
165
192
  window_list = []
166
- prefs = {}
193
+ settings = {}
167
194
 
168
195
  @classmethod
169
196
  def register_window(cls, window):
170
197
  assert isinstance(window, ListedWindow)
171
198
  cls.window_list.append(window)
172
- window.apply_prefs()
199
+ window.apply_settings()
173
200
 
174
201
  @classmethod
175
202
  def unregister_window(cls, window):
@@ -183,10 +210,11 @@ class ListedWindow():
183
210
  self.lift()
184
211
  self.focus_force()
185
212
 
186
- def apply_prefs(self):
187
- # Subclasses should override this if they use preferences.
213
+ def apply_settings(self):
214
+ # Subclasses should override this if they use settings.
188
215
  pass
189
216
 
217
+
190
218
  class WindowMenu(Tk_.Menu, ListedWindow):
191
219
  """
192
220
  Menu with a postcommand which shows all listed windows.
@@ -201,19 +229,18 @@ class WindowMenu(Tk_.Menu, ListedWindow):
201
229
  for object in self.window_list:
202
230
  self.add_command(label=object.menu_title, command=object.bring_to_front)
203
231
 
232
+
204
233
  def browser_menus(self):
205
234
  """
206
235
  Menus for the browser window. Used as Browser.build_menus.
207
236
  Creates a menubar attribute for the browser.
208
237
  """
209
238
  self.menubar = menubar = Tk_.Menu(self)
210
- Python_menu = Tk_.Menu(menubar, name="apple")
211
- Python_menu.add_command(label='About SnapPy ...',
212
- command=lambda : about_snappy(self))
213
- Python_menu.add_separator()
214
- if sys.platform in ('linux2', 'linux') and self.main_window is not None:
215
- Python_menu.add_command(label='Quit SnapPy', command=self.main_window.close)
216
- menubar.add_cascade(label='SnapPy', menu=Python_menu)
239
+ if sys.platform == 'darwin' and self.main_window is not None:
240
+ Python_menu = Tk_.Menu(menubar, name='apple')
241
+ Python_menu.add_command(label='About SnapPy...',
242
+ command=self.main_window.about_window)
243
+ menubar.add_cascade(label='SnapPy', menu=Python_menu)
217
244
  File_menu = Tk_.Menu(menubar, name='file')
218
245
  add_menu(self, File_menu, 'Open...', None, 'disabled')
219
246
  add_menu(self, File_menu, 'Save as...', self.save)
@@ -225,25 +252,21 @@ def browser_menus(self):
225
252
  menubar.add_cascade(label='View', menu=Tk_.Menu(menubar, name='view'))
226
253
  menubar.add_cascade(label='Window', menu=WindowMenu(menubar))
227
254
  help_menu = HelpMenu(menubar)
228
-
229
- def dirichlet_help():
230
- InfoDialog(self, 'Viewer Help', self.dirichlet_viewer.widget.help_text)
231
- help_menu.extra_command(label=help_polyhedron_viewer_label, command=dirichlet_help)
232
-
233
- def horoball_help():
234
- InfoDialog(self, 'Viewer Help', self.horoball_viewer.widget.help_text)
235
- help_menu.extra_command(label=help_horoball_viewer_label, command=horoball_help)
255
+ help_menu.extra_command(label=help_polyhedron_viewer_label,
256
+ command=self.dirichlet_help)
257
+ help_menu.extra_command(label=help_horoball_viewer_label,
258
+ command=self.horoball_help)
236
259
  menubar.add_cascade(label='Help', menu=help_menu)
237
260
 
261
+
238
262
  def plink_menus(self):
239
263
  """Menus for the SnapPyLinkEditor."""
240
264
  self.menubar = menubar = Tk_.Menu(self.window)
241
- Python_menu = Tk_.Menu(menubar, name="apple")
242
- Python_menu.add_command(label='About PLink...', command=self.about)
243
- Python_menu.add_separator()
244
- if sys.platform in ('linux2', 'linux') and self.main_window is not None:
245
- Python_menu.add_command(label='Quit SnapPy', command=self.main_window.close)
246
- menubar.add_cascade(label='SnapPy', menu=Python_menu)
265
+ if sys.platform == 'darwin':
266
+ Python_menu = Tk_.Menu(menubar, name='apple')
267
+ Python_menu.add_command(label='About SnapPy...',
268
+ command=self.main_window.about_window)
269
+ menubar.add_cascade(label='SnapPy', menu=Python_menu)
247
270
  File_menu = Tk_.Menu(menubar, name='file')
248
271
  add_menu(self.window, File_menu, 'Open...', self.load)
249
272
  add_menu(self.window, File_menu, 'Save as...', self.save)
@@ -269,20 +292,18 @@ def plink_menus(self):
269
292
  Help_menu.add_command(label='PLink Help ...', command=self.howto)
270
293
  self.window.config(menu=menubar)
271
294
 
295
+
272
296
  def dirichlet_menus(self):
273
297
  """
274
298
  Menus for the standalone Dirichlet viewer. Called by the view Frame, not the
275
- master Toplevel.
299
+ parent Toplevel.
276
300
  """
277
- self.menubar = menubar = Tk_.Menu(self.master)
278
- Python_menu = Tk_.Menu(menubar, name="apple")
279
- Python_menu.add_command(label='About SnapPy ...',
280
- command=lambda : about_snappy(self.master))
281
- Python_menu.add_separator()
282
- if sys.platform in ('linux2', 'linux') and self.main_window is not None:
283
- Python_menu.add_command(label='Quit SnapPy', command=
284
- self.main_window.close)
285
- menubar.add_cascade(label='SnapPy', menu=Python_menu)
301
+ self.menubar = menubar = Tk_.Menu(self.parent)
302
+ if sys.platform == 'darwin':
303
+ Python_menu = Tk_.Menu(menubar, name='apple')
304
+ Python_menu.add_command(label='About SnapPy...',
305
+ command=self.main_window.about_window)
306
+ menubar.add_cascade(label='SnapPy', menu=Python_menu)
286
307
  File_menu = Tk_.Menu(menubar, name='file')
287
308
  add_menu(self.master, File_menu, 'Open...', None, 'disabled')
288
309
  add_menu(self.master, File_menu, 'Save as...', None, 'disabled')
@@ -297,24 +318,22 @@ def dirichlet_menus(self):
297
318
  menubar.add_cascade(label='Edit ', menu=EditMenu(menubar, self.master.edit_actions))
298
319
  menubar.add_cascade(label='Window', menu=WindowMenu(menubar))
299
320
  help_menu = HelpMenu(menubar)
300
- help_menu.extra_command(label=help_polyhedron_viewer_label, command=self.widget.help)
321
+ help_menu.extra_command(label=help_polyhedron_viewer_label, command=self.help_window)
301
322
  help_menu.activate([help_polyhedron_viewer_label, help_report_bugs_label])
302
323
  self.menubar.add_cascade(label='Help', menu=help_menu)
303
324
 
325
+
304
326
  def horoball_menus(self):
305
327
  """
306
328
  Menus for the standalone Horoball viewer. Called by the view Frame, not the
307
329
  master Toplevel.
308
330
  """
309
331
  self.menubar = menubar = Tk_.Menu(self.master)
310
- Python_menu = Tk_.Menu(menubar, name="apple")
311
- Python_menu.add_command(label='About SnapPy ...',
312
- command=lambda : about_snappy(self.master))
313
- Python_menu.add_separator()
314
- if sys.platform in ('linux2', 'linux') and self.main_window is not None:
315
- Python_menu.add_command(label='Quit SnapPy',
316
- command=self.main_window.close)
317
- menubar.add_cascade(label='SnapPy', menu=Python_menu)
332
+ if sys.platform == 'darwin':
333
+ Python_menu = Tk_.Menu(menubar, name='apple')
334
+ Python_menu.add_command(label='About SnapPy...',
335
+ command=self.main_window.about_window)
336
+ menubar.add_cascade(label='SnapPy', menu=Python_menu)
318
337
  File_menu = Tk_.Menu(menubar, name='file')
319
338
  add_menu(self.master, File_menu, 'Open...', None, 'disabled')
320
339
  add_menu(self.master, File_menu, 'Save as...', None, 'disabled')
@@ -325,22 +344,20 @@ def horoball_menus(self):
325
344
  menubar.add_cascade(label='Edit ', menu=EditMenu(menubar, self.master.edit_actions))
326
345
  menubar.add_cascade(label='Window', menu=WindowMenu(menubar))
327
346
  help_menu = HelpMenu(menubar)
328
- help_menu.extra_command(label=help_horoball_viewer_label, command=self.widget.help)
347
+ help_menu.extra_command(label=help_horoball_viewer_label, command=self.help_window)
329
348
  help_menu.activate([help_horoball_viewer_label, help_report_bugs_label])
330
349
  self.menubar.add_cascade(label='Help', menu=help_menu)
331
350
 
351
+
332
352
  def inside_view_menus(self):
333
353
  """Menus for the standalone Inside viewer. Called by the view Frame, not the
334
354
  master Toplevel."""
335
355
  self.menubar = menubar = Tk_.Menu(self.master)
336
- Python_menu = Tk_.Menu(menubar, name="apple")
337
- Python_menu.add_command(label='About SnapPy ...',
338
- command=lambda : about_snappy(self.master))
339
- Python_menu.add_separator()
340
- if sys.platform in ('linux2', 'linux') and self.main_window is not None:
341
- Python_menu.add_command(label='Quit SnapPy', command=
342
- self.main_window.close)
343
- menubar.add_cascade(label='SnapPy', menu=Python_menu)
356
+ if sys.platform == 'darwin':
357
+ Python_menu = Tk_.Menu(menubar, name='apple')
358
+ Python_menu.add_command(label='About SnapPy...',
359
+ command=self.main_window.about_window)
360
+ menubar.add_cascade(label='SnapPy', menu=Python_menu)
344
361
  File_menu = Tk_.Menu(menubar, name='file')
345
362
  add_menu(self.master, File_menu, 'Open...', None, 'disabled')
346
363
  add_menu(self.master, File_menu, 'Save as...', None, 'disabled')
@@ -351,7 +368,5 @@ def inside_view_menus(self):
351
368
  menubar.add_cascade(label='Edit ', menu=EditMenu(menubar, self.master.edit_actions))
352
369
  menubar.add_cascade(label='Window', menu=WindowMenu(menubar))
353
370
  help_menu = HelpMenu(menubar)
354
- #help_menu.extra_command(label=help_polyhedron_viewer_label, command=self.widget.help)
355
- #help_menu.activate([help_polyhedron_viewer_label, help_report_bugs_label])
356
371
  help_menu.activate([help_report_bugs_label])
357
372
  self.menubar.add_cascade(label='Help', menu=help_menu)