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
@@ -0,0 +1,101 @@
1
+ from .canonical_keys import canonical_keys_function_for_line
2
+ from .geodesic_start_point_info import GeodesicStartPointInfo
3
+ from .avoid_core_curves import replace_piece_in_core_curve_tube
4
+
5
+ from ...tiling.tile import Tile, compute_tiles
6
+ from ...tiling.lifted_tetrahedron_set import (LiftedTetrahedronSet,
7
+ get_lifted_tetrahedron_set)
8
+
9
+ from ...snap.t3mlite import Mcomplex # type: ignore
10
+
11
+ from typing import Sequence
12
+
13
+ def compute_tiles_for_geodesic(mcomplex : Mcomplex,
14
+ geodesic : GeodesicStartPointInfo,
15
+ avoid_core_curves : bool = False,
16
+ for_raytracing : bool = False
17
+ ) -> Sequence[Tile]:
18
+ """
19
+ Computes all GeodesicPiece's needed to cover a tube about the
20
+ given closed geodesic in the given manifold. The geodesic cannot be
21
+ a core curve of a filled cusp.
22
+
23
+ A GeodesicTube is constructed from a triangulation with a suitable
24
+ geometric structure and a suitable GeodesicStartPointInfo object.
25
+
26
+ To add the necessary geometric structure to a triangulation, call
27
+ add_r13_geometry and add_r13_planes_to_tetrahedra.
28
+
29
+ The GeodesicStartPointInfo object needs to be constructed with a line and
30
+ GeodesicStartPointInfo.find_tet_or_core_curve be called on it.
31
+
32
+ Calling GeodesicStartPointInfo.add_pieces_for_radius will then add the
33
+ necessary pieces to GeodesicStartPointInfo.pieces to cover the tube of the
34
+ given radius.
35
+ """
36
+
37
+ if geodesic.core_curve_cusp is not None:
38
+ raise ValueError(
39
+ "Cannot tile a tube about a geodesic that is a core curve.")
40
+
41
+ if geodesic.line is None:
42
+ raise ValueError(
43
+ "Tiling a tube about a geodesic expected GeodesicStartPointInfo with valid "
44
+ "line.")
45
+
46
+ if not geodesic.lifted_tetrahedra:
47
+ raise ValueError(
48
+ "Tiling a tube about a geodesic expected GeodesicStartPointInfo with valid "
49
+ "lifted_tetrahedra.")
50
+
51
+ min_neg_prod_distinct = (mcomplex.baseTetInRadius/2).cosh()
52
+
53
+ if mcomplex.verified:
54
+ max_neg_prod_equal = min_neg_prod_distinct
55
+ else:
56
+ max_neg_prod_equal = min(
57
+ min_neg_prod_distinct, 1 + _compute_prod_epsilon(mcomplex.RF))
58
+ if for_raytracing:
59
+ min_neg_prod_distinct = max_neg_prod_equal
60
+
61
+ lifted_tetrahedron_set : LiftedTetrahedronSet = (
62
+ get_lifted_tetrahedron_set(
63
+ base_point=mcomplex.R13_baseTetInCenter,
64
+ canonical_keys_function=(
65
+ canonical_keys_function_for_line(geodesic.line)),
66
+ act_on_base_point_by_inverse=False,
67
+ max_neg_prod_equal=max_neg_prod_equal,
68
+ min_neg_prod_distinct=min_neg_prod_distinct,
69
+ verified=mcomplex.verified))
70
+
71
+ if avoid_core_curves:
72
+ replace_lifted_tetrahedron_function = replace_piece_in_core_curve_tube
73
+ else:
74
+ replace_lifted_tetrahedron_function = None
75
+
76
+ return compute_tiles(
77
+ geometric_object=geodesic.line.r13_line,
78
+ visited_lifted_tetrahedra=lifted_tetrahedron_set,
79
+ initial_lifted_tetrahedra=geodesic.lifted_tetrahedra,
80
+ replace_lifted_tetrahedron_function=replace_lifted_tetrahedron_function,
81
+ verified=mcomplex.verified)
82
+
83
+ def _compute_prod_epsilon(RF):
84
+ p = RF.precision()
85
+
86
+ # We try to be a factor of at least several magnitudes smaller than
87
+ # 1/_compute_epsilon_inverse(RF) in hyperboloid_dict.py.
88
+ #
89
+ # This factor will even grow larger as the precision increases.
90
+ #
91
+ # That way, we will hopefully fail in _equality_predicate
92
+ # in hyperboloid_dict rather than failing by not hashing together
93
+ # lifted tetrahedra that should be the same but are not recognised
94
+ # as such because of numerical error.
95
+
96
+ result = RF(1e-6)
97
+ if p > 53:
98
+ result *= RF(0.5) ** ((p - 53) / 2)
99
+
100
+ return result
101
+
@@ -0,0 +1,22 @@
1
+ from snappy import testing
2
+ import snappy
3
+
4
+ from snappy import geometric_structure
5
+
6
+ modules = [
7
+ geometric_structure.cusp_neighborhood.cusp_cross_section_base,
8
+ geometric_structure.cusp_neighborhood.real_cusp_cross_section,
9
+ geometric_structure.cusp_neighborhood.complex_cusp_cross_section
10
+ ]
11
+
12
+ def run_doctests(verbose=False, print_info=True):
13
+ globs = {'Manifold': snappy.Manifold}
14
+ return testing.doctest_modules(modules,
15
+ verbose=verbose,
16
+ print_info=print_info,
17
+ extraglobs=globs)
18
+
19
+ run_doctests.__name__ = geometric_structure.__name__
20
+
21
+ if __name__ == '__main__':
22
+ testing.run_doctests_as_main(run_doctests)
snappy/gui.py CHANGED
@@ -1,25 +1,24 @@
1
1
  # -*- coding: utf-8 -*-
2
- from __future__ import unicode_literals
3
- import os, sys, time, tempfile, png
2
+ import os
3
+ import sys
4
+ import time
5
+ import tempfile
4
6
  import tkinter as Tk_
5
- from tkinter import ttk as ttk
7
+ from tkinter import ttk
8
+ from tkinter.ttk import Spinbox
6
9
  from tkinter.font import Font, families as font_families
7
10
  from tkinter.simpledialog import Dialog, SimpleDialog
8
- from tkinter.messagebox import askyesno
9
-
10
11
  from plink.ipython_tools import IPythonTkRoot
11
12
  from . import filedialog
12
- from .ppm_to_png import convert_ppm_to_png
13
13
 
14
- if sys.version_info.major < 3 or sys.version_info.minor < 7:
15
- class Spinbox(ttk.Entry):
16
- def __init__(self, master=None, **kw):
17
- ttk.Entry.__init__(self, master, "ttk::spinbox", **kw)
14
+
15
+ def nominal_font_dict(tk_font):
16
+ """
17
+ Like Font.actual() but not messed up by GNOME scaling factors on
18
+ Linux.
19
+ """
20
+ return {key:tk_font.cget(key) for key in tk_font.actual()}
18
21
 
19
- def set(self, value):
20
- self.tk.call(self._w, "set", value)
21
- else:
22
- Spinbox = ttk.Spinbox
23
22
 
24
23
  class SnapPyStyle:
25
24
  def __init__(self):
@@ -41,15 +40,27 @@ class SnapPyStyle:
41
40
  else:
42
41
  self.windowBG = ttk_style.lookup('TLabelframe', 'background')
43
42
  self.groupBG = self.subgroupBG = self.windowBG
43
+
44
44
  self.font = ttk_style.lookup('TLabel', 'font')
45
- self.font_info = fi = Font(font=self.font).actual()
46
- fi['size'] = abs(fi['size']) # Why would the size be negative???
45
+ if self.font == '':
46
+ self.font = 'TkDefaultFont'
47
+ # TLabel.font and TLabelframe.Label.font differ in Tk 9.0 (at
48
+ # least on macOS). We restore the Tk 8.6 behavior.
49
+ self.ttk_style.configure('TLabelframe.Label',
50
+ font=self.font)
51
+ self.font_info = fi = nominal_font_dict(Font(font=self.font))
52
+ fi['size'] = int(str(fi['size']))
53
+ # On linux the treeview rows are too small, at least with hi-dpi displays.
54
+ if sys.platform == 'linux':
55
+ default_font = Font(name='TkDefaultFont', exists=True)
56
+ line_height = default_font.metrics()['linespace']
57
+ self.ttk_style.configure('Treeview', rowheight=line_height)
47
58
 
48
59
  class ViewerWindow(Tk_.Toplevel):
49
60
  def __init__(self, view_class, *args, **kwargs):
50
61
  window_type = kwargs.pop('window_type', 'untyped')
51
62
  self.root = kwargs.pop('root', self._get_root(window_type))
52
- Tk_.Toplevel.__init__(self, master=self.root, class_='snappy')
63
+ Tk_.Toplevel.__init__(self, self.root, class_='snappy')
53
64
  self.protocol("WM_DELETE_WINDOW", self.close)
54
65
  self.title(string=kwargs.pop('title', ''))
55
66
  self.view = view_class(self, *args, **kwargs)
@@ -57,19 +68,19 @@ class ViewerWindow(Tk_.Toplevel):
57
68
  self.update_idletasks()
58
69
 
59
70
  def __repr__(self):
60
- return 'New window: %s\n'%self.title()
71
+ return 'New window: %s\n' % self.title()
61
72
 
62
73
  def _get_root(self, window_type):
63
74
  if Tk_._default_root:
64
75
  return Tk_._default_root
65
- root = IPythonTkRoot(window_type = window_type)
76
+ root = IPythonTkRoot(window_type=window_type)
66
77
  root.withdraw()
67
78
  return root
68
79
 
69
- def _togl_save_image(self):
80
+ def save_image(self):
70
81
  """
71
82
  Helper for the save_image menu command of a ViewerWindow.
72
- It expects to be passed the view Frame (not the master Toplevel)
83
+ It expects to be passed the view Frame (not the parent Toplevel)
73
84
  and it saves a PNG image of the current state of the view.
74
85
  """
75
86
  view = self.view
@@ -77,20 +88,12 @@ class ViewerWindow(Tk_.Toplevel):
77
88
  parent=self,
78
89
  mode='wb',
79
90
  title='Save Image As PNG Image File',
80
- defaultextension = '.png',
81
- filetypes = [
91
+ defaultextension='.png',
92
+ filetypes=[
82
93
  ("PNG image files", "*.png *.PNG", ""),
83
94
  ("All files", "")])
84
- view.widget.redraw_if_initialized()
85
95
  if savefile:
86
- _, ppm_file_name = tempfile.mkstemp(suffix='.ppm')
87
- PI = Tk_.PhotoImage()
88
- view.widget.tk.call(view.widget._w, 'takephoto', PI.name)
89
- PI.write(ppm_file_name, format='ppm')
90
- with open(ppm_file_name, 'rb') as ppm_file:
91
- convert_ppm_to_png(ppm_file, savefile)
92
- savefile.close()
93
- os.remove(ppm_file_name)
96
+ view.widget.save_image_window_resolution(savefile)
94
97
 
95
98
  def close(self, event=None):
96
99
  if hasattr(self.view, 'delete_resource'):
@@ -98,9 +101,6 @@ class ViewerWindow(Tk_.Toplevel):
98
101
  self.view = None
99
102
  self.destroy()
100
103
 
101
- def save_image(self):
102
- self._togl_save_image()
103
-
104
104
  def add_help(self):
105
105
  pass
106
106
 
@@ -108,7 +108,7 @@ class ViewerWindow(Tk_.Toplevel):
108
108
  return {}
109
109
 
110
110
  def test(self):
111
- print('Testing viewer for %s'%self.title())
111
+ print('Testing viewer for %s' % self.title())
112
112
  time.sleep(0.5)
113
113
  if hasattr(self.view, 'test'):
114
114
  if not self.view.winfo_ismapped():
snappy/horoviewer.py CHANGED
@@ -1,24 +1,26 @@
1
1
  #!/usr/bin/env python
2
- from builtins import range
3
2
  from .gui import *
4
3
  from .CyOpenGL import (HoroballScene, OpenGLOrthoWidget,
5
4
  GetColor, cyglSetStandardLighting)
6
5
  from plink.ipython_tools import IPythonTkRoot
7
- import os, sys
6
+ import os
7
+ import sys
8
+
8
9
 
9
10
  class HoroballViewer(ttk.Frame):
10
- def __init__(self, master, nbhd=None, which_cusp=0, cutoff=None,
11
+ def __init__(self, parent, nbhd=None, which_cusp=0, cutoff=None,
11
12
  title='Horoball Viewer',
12
- prefs={'cusp_horoballs' : True,
13
- 'cusp_triangulation' : True,
14
- 'cusp_ford_domain' : True,
15
- 'cusp_labels' : True,
16
- 'cusp_parallelogram' : True,
17
- 'cusp_cutoff' : '0.1000'},
13
+ settings={'cusp_horoballs' : True,
14
+ 'cusp_triangulation' : True,
15
+ 'cusp_ford_domain' : True,
16
+ 'cusp_labels' : True,
17
+ 'cusp_parallelogram' : True,
18
+ 'cusp_cutoff' : '0.1000'},
18
19
  bgcolor=None,
19
20
  main_window=None):
20
- self.prefs = prefs
21
- ttk.Frame.__init__(self, master)
21
+ self.settings = settings
22
+ ttk.Frame.__init__(self, parent)
23
+ self.parent = parent
22
24
  self.nbhd = nbhd
23
25
  self.empty = (self.nbhd is None)
24
26
  self.mouse_x = 0
@@ -26,7 +28,7 @@ class HoroballViewer(ttk.Frame):
26
28
  self.menubar = None
27
29
  self.main_window = main_window
28
30
  if cutoff is None:
29
- self.cutoff = float(prefs['cusp_cutoff'])
31
+ self.cutoff = float(settings['cusp_cutoff'])
30
32
  else:
31
33
  self.cutoff = float(cutoff)
32
34
  self.which_cusp = which_cusp
@@ -38,15 +40,15 @@ class HoroballViewer(ttk.Frame):
38
40
  self.style = style = SnapPyStyle()
39
41
  self.bgcolor = bgcolor if bgcolor else style.groupBG
40
42
  self.pgram_var = pgram_var = Tk_.IntVar(self,
41
- value=prefs['cusp_parallelogram'])
43
+ value=settings['cusp_parallelogram'])
42
44
  self.Ford_var = Ford_var = Tk_.IntVar(self,
43
- value=prefs['cusp_ford_domain'])
45
+ value=settings['cusp_ford_domain'])
44
46
  self.tri_var = tri_var = Tk_.IntVar(self,
45
- value=prefs['cusp_triangulation'])
47
+ value=settings['cusp_triangulation'])
46
48
  self.horo_var = horo_var = Tk_.IntVar(self,
47
- value=prefs['cusp_horoballs'])
49
+ value=settings['cusp_horoballs'])
48
50
  self.label_var = label_var = Tk_.IntVar(self,
49
- value=prefs['cusp_labels'])
51
+ value=settings['cusp_labels'])
50
52
  self.flip_var = flip_var = Tk_.BooleanVar(self)
51
53
  self.columnconfigure(0, weight=1)
52
54
  self.rowconfigure(1, weight=1)
@@ -55,7 +57,7 @@ class HoroballViewer(ttk.Frame):
55
57
  self.bottomframe = bottomframe = ttk.Frame(self)
56
58
  self.widget = widget = OpenGLOrthoWidget(master=bottomframe,
57
59
  width=600, height=500, fovy=3.0, depth=1, double=True, swapinterval=0,
58
- help = """
60
+ help="""
59
61
  Use the mouse to drag the scene relative to the fundamental parallelogram.
60
62
 
61
63
  Use the sliders to adjust the sizes of the horoballs. Color coding indicates who bumps whom.
@@ -76,7 +78,7 @@ Use the View Options to select which components of the scene are drawn.
76
78
  widget.set_background(1.0,1.0,1.0)
77
79
  widget.autospin_allowed = 0
78
80
  cyglSetStandardLighting()
79
- option_frame= ttk.Frame(top_frame)
81
+ option_frame = ttk.Frame(top_frame)
80
82
  view_button = ttk.Menubutton(option_frame, text='View Options')
81
83
  self.view_menu = view_menu = Tk_.Menu(view_button, tearoff=0)
82
84
  view_menu.add_checkbutton(label='parallelogram', command=self.view_check,
@@ -92,13 +94,13 @@ Use the View Options to select which components of the scene are drawn.
92
94
  view_button.config(menu=view_menu)
93
95
  view_button.grid(row=0, column=0, columnspan=2, sticky=Tk_.W, padx=0, pady=0)
94
96
  flip_button = ttk.Checkbutton(option_frame, text='Flip',
95
- variable = self.flip_var,
97
+ variable=self.flip_var,
96
98
  takefocus=False,
97
99
  command=self.flip)
98
100
  flip_button.grid(row=1, column=0, sticky=Tk_.W, padx=0, pady=0)
99
101
  self.cutoff_label = ttk.Label(option_frame, text='Cutoff: ')
100
102
  self.cutoff_var = cutoff_var = Tk_.StringVar(self,
101
- value='%.4f'%self.cutoff)
103
+ value='%.4f' % self.cutoff)
102
104
  self.cutoff_entry = ttk.Entry(option_frame, width=6, takefocus=False,
103
105
  textvariable=cutoff_var)
104
106
  self.cutoff_entry.bind('<Return>', self.set_cutoff)
@@ -144,27 +146,27 @@ Use the View Options to select which components of the scene are drawn.
144
146
  self.scene = HoroballScene(nbhd, pgram_var, Ford_var, tri_var,
145
147
  horo_var, label_var, flipped=self.flip_var.get(), cutoff=self.cutoff,
146
148
  which_cusp=self.which_cusp,togl_widget=self.widget)
147
- self.widget.redraw_impl = self.scene.draw
148
- if isinstance(master, Tk_.Toplevel):
149
- master.config(menu=self.menubar)
149
+ self.widget.draw_projection_impl = self.scene.draw
150
+ if isinstance(parent, Tk_.Toplevel):
151
+ parent.config(menu=self.menubar)
150
152
  # hacks needed on Sierra
151
153
  self.after(20, self.configure_sliders)
152
154
  self.after(50, self.rebuild)
153
155
  else:
154
156
  self.configure_sliders()
155
157
 
156
- def apply_prefs(self, prefs):
157
- for key in self.prefs:
158
- value = prefs.get(key, 'missing')
158
+ def apply_settings(self, settings):
159
+ for key in self.settings:
160
+ value = settings.get(key, 'missing')
159
161
  if value != 'missing':
160
- self.prefs[key] = value
161
- self.pgram_var.set(prefs['cusp_parallelogram'])
162
- self.Ford_var.set(prefs['cusp_ford_domain'])
163
- self.tri_var.set(prefs['cusp_triangulation'])
164
- self.horo_var.set(prefs['cusp_horoballs'])
165
- self.label_var.set(prefs['cusp_labels'])
166
- self.cutoff = float(prefs['cusp_cutoff'])
167
- self.cutoff_var.set('%.4f'%self.cutoff)
162
+ self.settings[key] = value
163
+ self.pgram_var.set(settings['cusp_parallelogram'])
164
+ self.Ford_var.set(settings['cusp_ford_domain'])
165
+ self.tri_var.set(settings['cusp_triangulation'])
166
+ self.horo_var.set(settings['cusp_horoballs'])
167
+ self.label_var.set(settings['cusp_labels'])
168
+ self.cutoff = float(settings['cusp_cutoff'])
169
+ self.cutoff_var.set('%.4f' % self.cutoff)
168
170
  self.rebuild()
169
171
 
170
172
  def view_check(self):
@@ -172,7 +174,7 @@ Use the View Options to select which components of the scene are drawn.
172
174
  self.widget.set_background(0.3, 0.3, 0.4)
173
175
  else:
174
176
  self.widget.set_background(1.0, 1.0, 1.0)
175
- self.widget.redraw_if_initialized()
177
+ self.widget.redraw()
176
178
 
177
179
  def build_sliders(self):
178
180
  nbhd = self.nbhd
@@ -206,7 +208,7 @@ Use the View Options to select which components of the scene are drawn.
206
208
  tie_button.grid(row=n+1, column=1)
207
209
  self.tie_buttons.append(tie_button)
208
210
  R, G, B, A = GetColor(nbhd.original_index(n))
209
- self.cusp_colors.append('#%.3x%.3x%.3x'%(
211
+ self.cusp_colors.append('#%.3x%.3x%.3x' % (
210
212
  int(R*4095), int(G*4095), int(B*4095)))
211
213
  self.cusp_vars.append(Tk_.IntVar(self))
212
214
  self.slider_frames.append(Tk_.Frame(self.slider_frame, borderwidth=0))
@@ -229,7 +231,7 @@ Use the View Options to select which components of the scene are drawn.
229
231
  volume_label.grid(row=n+1, column=3, sticky=Tk_.W)
230
232
  self.volume_labels.append(volume_label)
231
233
 
232
- def new_scene (self, new_nbhd):
234
+ def new_scene(self, new_nbhd):
233
235
  self.nbhd = new_nbhd
234
236
  self.empty = (self.nbhd is None)
235
237
  self.set_ties()
@@ -262,7 +264,7 @@ Use the View Options to select which components of the scene are drawn.
262
264
  flipped=self.flip_var.get(), cutoff=self.cutoff,
263
265
  which_cusp=self.which_cusp, togl_widget=self.widget)
264
266
  assert(self.scene is not None)
265
- self.widget.redraw_impl = self.scene.draw
267
+ self.widget.draw_projection_impl = self.scene.draw
266
268
  self.configure_sliders()
267
269
  self.rebuild()
268
270
 
@@ -276,7 +278,7 @@ Use the View Options to select which components of the scene are drawn.
276
278
  flipped = self.flip_var.get()
277
279
  self.scene.flip(flipped)
278
280
  self.widget.flipped = flipped
279
- self.widget.redraw_if_initialized()
281
+ self.widget.redraw()
280
282
 
281
283
  def configure_sliders(self):
282
284
  nbhd = self.nbhd
@@ -294,7 +296,7 @@ Use the View Options to select which components of the scene are drawn.
294
296
  # print stop, length, disp position
295
297
  self.cusp_sliders[n].set(position)
296
298
  self.slider_frames[n].config(background=stopper_color)
297
- self.volume_labels[n].config(text='%.4f'%nbhd.volume(n))
299
+ self.volume_labels[n].config(text='%.4f' % nbhd.volume(n))
298
300
  self.cusp_sliders[n].config(length=length,
299
301
  command=self.update_radius)
300
302
  self.update_idletasks()
@@ -311,17 +313,17 @@ Use the View Options to select which components of the scene are drawn.
311
313
 
312
314
  # Subclasses may override this, e.g. if they use a help menu.
313
315
  def add_help(self):
314
- help = Button(self.top_frame, text = 'Help', width = 4,
316
+ help = Button(self.top_frame, text='Help', width=4,
315
317
  borderwidth=0, highlightthickness=0,
316
- background=self.bgcolor, command = self.widget.help)
318
+ background=self.bgcolor, command=self.widget.help)
317
319
  help.grid(row=0, column=5, sticky=E, pady=3)
318
320
  self.top_frame.columnconfigure(5, weight=1)
319
321
 
320
- # Subclasses may override this to provide menus.
322
+ # Subclasses may override this to provide menus.
321
323
  def build_menus(self):
322
324
  pass
323
325
 
324
- # Subclasses may override this to update menus, e.g. when embedded in a larger window.
326
+ # Subclasses may override this to update menus, e.g. when embedded in a larger window.
325
327
  def update_menus(self, menubar):
326
328
  pass
327
329
 
@@ -329,7 +331,7 @@ Use the View Options to select which components of the scene are drawn.
329
331
  self.destroy()
330
332
 
331
333
  def redraw(self):
332
- self.widget.redraw_if_initialized()
334
+ self.widget.redraw()
333
335
 
334
336
  def set_zoom(self, x):
335
337
  fovy = 1.0 + (100.0-float(x))/15.0
@@ -340,14 +342,14 @@ Use the View Options to select which components of the scene are drawn.
340
342
  else:
341
343
  self.update_idletasks()
342
344
  self.after(50, self.set_zoom, x)
343
- self.widget.redraw_if_initialized()
345
+ self.widget.redraw()
344
346
 
345
347
  def rebuild(self, full_list=True):
346
348
  self.set_ties()
347
349
  self.configure_sliders()
348
350
  self.widget.make_current()
349
351
  self.scene.build_scene(which_cusp=self.which_cusp, full_list=full_list)
350
- self.widget.redraw_if_initialized()
352
+ self.widget.redraw()
351
353
 
352
354
  def start_radius(self, event):
353
355
  self.cusp_moving = True