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
@@ -9,7 +9,9 @@ from .view_scale_controller import ViewScaleController
9
9
  from .raytracing_view import *
10
10
  from .geodesics_window import GeodesicsWindow
11
11
  from .hyperboloid_utilities import unit_3_vector_and_distance_to_O13_hyperbolic_translation
12
+ from .tooltip import ToolTip
12
13
  from .zoom_slider import Slider, ZoomSlider
14
+ from .eyeball import eyeball_type_none, eyeball_type_paper_plane, eyeball_type_eyeball
13
15
 
14
16
  try:
15
17
  from math import gcd as _gcd
@@ -51,6 +53,9 @@ class InsideViewer(ttk.Frame):
51
53
  self.notebook.add(self.create_cohomology_class_frame(self),
52
54
  text='Cohomology class')
53
55
 
56
+ self.notebook.add(self.create_eyeball_frame(self),
57
+ text='Camera')
58
+
54
59
  self.notebook.add(self.create_cusps_frame(self),
55
60
  text='Cusps/Geodesics')
56
61
 
@@ -85,10 +90,11 @@ class InsideViewer(ttk.Frame):
85
90
  self.view_scale_slider,
86
91
  self.view_scale_label,
87
92
  self.view_scale_value_label,
88
- update_function=self.widget.redraw_if_initialized)
93
+ update_function=self.widget.draw)
89
94
 
90
- self.widget.report_time_callback = FpsLabelUpdater(
95
+ self.widget.fps_label_updater = FpsLabelUpdater(
91
96
  self.fps_label)
97
+ self.widget.report_time_callback = self.widget.fps_label_updater
92
98
 
93
99
  self.update_volume_label()
94
100
 
@@ -182,17 +188,20 @@ class InsideViewer(ttk.Frame):
182
188
 
183
189
  cusp_area_maximum = 1.05 * _maximal_cusp_area(self.widget.manifold)
184
190
 
191
+ self.cusp_scales = []
192
+
185
193
  for i in range(self.widget.manifold.num_cusps()):
186
- UniformDictController.create_horizontal_scale(
187
- frame,
188
- uniform_dict=self.widget.ui_parameter_dict,
189
- key='cuspAreas',
190
- title='Cusp %d' % i,
191
- left_end=0.0,
192
- right_end=cusp_area_maximum,
193
- row=row,
194
- update_function=self.widget.recompute_raytracing_data_and_redraw,
195
- index=i)
194
+ self.cusp_scales.append(
195
+ UniformDictController.create_horizontal_scale(
196
+ frame,
197
+ uniform_dict=self.widget.ui_parameter_dict,
198
+ key='cuspAreas',
199
+ title='Cusp %d' % i,
200
+ left_end=0.0,
201
+ right_end=cusp_area_maximum,
202
+ row=row,
203
+ update_function=self.widget.recompute_raytracing_data_and_redraw,
204
+ index=i))
196
205
  cusp_button = ttk.Button(
197
206
  frame,
198
207
  text='View',
@@ -200,39 +209,19 @@ class InsideViewer(ttk.Frame):
200
209
  command=(
201
210
  lambda which_cusp=i:
202
211
  self.set_camera_cusp_view(which_cusp)))
212
+ ToolTip(cusp_button,
213
+ msg="Move camera into cusp neighborhood and look out")
203
214
  cusp_button.grid(row=row, column=3)
204
215
  row += 1
205
216
 
206
217
  frame.rowconfigure(row, weight=1)
207
218
 
208
- view_frame = ttk.Frame(frame)
209
- view_frame.grid(row=row, column=1)
210
-
211
- view_label = ttk.Label(view_frame, text="View:")
212
- view_label.grid(row=0, column=0)
213
-
214
- radio_buttons = []
215
- for i, text in enumerate(["Material", "Ideal", "Hyperideal"]):
216
- button = ttk.Radiobutton(view_frame,
217
- value=i,
218
- text=text,
219
- takefocus=0)
220
- button.grid(row=0, column=i + 1)
221
- radio_buttons.append(button)
222
-
223
- self.perspective_type_controller = UniformDictController(
224
- self.widget.ui_uniform_dict,
225
- key='perspectiveType',
226
- radio_buttons=radio_buttons,
227
- update_function=self.perspective_type_changed)
228
-
229
219
  self.geodesics_button = ttk.Button(
230
220
  frame,
231
221
  text="Geodesics ...",
232
222
  takefocus=0,
233
223
  command=self.show_geodesics_window)
234
224
  self.geodesics_button.grid(row=row, column=3)
235
-
236
225
  row += 1
237
226
 
238
227
  self.geodesics_status_label = ttk.Label(frame, text="")
@@ -242,24 +231,29 @@ class InsideViewer(ttk.Frame):
242
231
 
243
232
  def perspective_type_changed(self):
244
233
  self.view_scale_controller.update()
245
- self.widget.redraw_if_initialized()
234
+ self.widget.draw()
235
+
236
+ def set_perspective_type_and_view_scale(self, perspective_type, view_scale):
237
+ self.widget.ui_uniform_dict['perspectiveType'][1] = perspective_type
238
+ self.widget.ui_uniform_dict['viewScale'][1] = float(view_scale)
239
+ self.perspective_type_controller.update()
240
+ self.perspective_type_changed()
246
241
 
247
242
  def set_camera_cusp_view(self, which_cusp):
243
+ if self.widget.ui_parameter_dict['cuspAreas'][1][which_cusp] < 0.05:
244
+ self.widget.ui_parameter_dict['cuspAreas'][1][which_cusp] = 0.05
245
+ self.widget.recompute_raytracing_data_and_redraw()
246
+ self.cusp_scales[which_cusp].update()
247
+
248
248
  self.widget.view_state, view_scale = (
249
249
  self.widget.raytracing_data.cusp_view_state_and_scale(
250
250
  which_cusp))
251
251
 
252
252
  extra_scale = 1.1
253
-
254
- self.widget.ui_uniform_dict['perspectiveType'][1] = 1
255
- self.widget.ui_uniform_dict['viewScale'][1] = float(
256
- extra_scale * view_scale)
257
-
258
- self.perspective_type_controller.update()
259
- self.perspective_type_changed()
253
+ self.set_perspective_type_and_view_scale(1, extra_scale * view_scale)
260
254
 
261
255
  def checkbox_update(self):
262
- self.widget.redraw_if_initialized()
256
+ self.widget.draw()
263
257
  self.focus_viewer()
264
258
 
265
259
  def create_fillings_frame(self, parent):
@@ -320,15 +314,134 @@ class InsideViewer(ttk.Frame):
320
314
  orb_button = ttk.Button(
321
315
  subframe, text="Make orbifold", takefocus=0,
322
316
  command=self.make_orbifold)
317
+ ToolTip(orb_button,
318
+ msg="Make filling coefficients integers")
323
319
  orb_button.grid(row=0, column=2)
324
320
 
325
321
  mfd_button = ttk.Button(
326
322
  subframe, text="Make manifold", takefocus=0,
327
323
  command=self.make_manifold)
324
+ ToolTip(mfd_button,
325
+ msg="Make filling coefficients co-prime integers")
328
326
  mfd_button.grid(row=0, column=3)
329
327
 
330
328
  return frame
331
329
 
330
+ def create_eyeball_frame(self, parent):
331
+ frame = ttk.Frame(parent)
332
+
333
+ frame.columnconfigure(0, weight=0)
334
+ frame.columnconfigure(4, weight=1)
335
+
336
+ row = 0
337
+
338
+ view_label = ttk.Label(frame, text="View")
339
+ view_label.grid(row=row, column=0)
340
+
341
+ radio_buttons = []
342
+ for i, text, tooltip in [
343
+ (0,
344
+ "Material",
345
+ "Camera rays leave from the same point"),
346
+ (1,
347
+ "Ideal",
348
+ "Camera rays leave orthogonally from a horosphere"),
349
+ (2,
350
+ "Hyperideal",
351
+ "Camera rays leave orthogonally from a (hyperbolic) plane")]:
352
+ button = ttk.Radiobutton(frame,
353
+ value=i,
354
+ text=text,
355
+ takefocus=0)
356
+ button.grid(row=row, column=i + 1, padx=8, sticky=tkinter.NW)
357
+ ToolTip(button, msg=tooltip)
358
+ radio_buttons.append(button)
359
+
360
+ self.perspective_type_controller = UniformDictController(
361
+ self.widget.ui_uniform_dict,
362
+ key='perspectiveType',
363
+ radio_buttons=radio_buttons,
364
+ update_function=self.perspective_type_changed)
365
+
366
+ row += 1
367
+
368
+ self_type_label = ttk.Label(frame, text="Camera body")
369
+ self_type_label.grid(row=row, column=0)
370
+
371
+ ToolTip(self_type_label,
372
+ msg="Shows your position and orientation in the manifold")
373
+
374
+ radio_buttons = []
375
+ for i, (eyeball_type, text, tooltip) in enumerate([
376
+ (eyeball_type_none,
377
+ "None",
378
+ ""),
379
+ (eyeball_type_paper_plane,
380
+ "Paper plane",
381
+ "Paper plane shows your position and orientation in the manifold"),
382
+ (eyeball_type_eyeball,
383
+ "Eyeball",
384
+ "Eyeball shows your position and orientation in the manifold")]):
385
+ button = ttk.Radiobutton(frame,
386
+ value=eyeball_type,
387
+ text=text,
388
+ takefocus=0)
389
+ button.grid(row=row, column=1 + i, padx=8, sticky=tkinter.NW)
390
+ if tooltip:
391
+ ToolTip(button, msg=tooltip)
392
+ radio_buttons.append(button)
393
+ self.self_type_controller = UniformDictController(
394
+ self.widget.ui_parameter_dict,
395
+ key='eyeballType',
396
+ radio_buttons=radio_buttons,
397
+ update_function=self.widget.update_shader_and_redraw)
398
+
399
+ row += 1
400
+
401
+ UniformDictController.create_horizontal_scale(
402
+ frame,
403
+ self.widget.ui_parameter_dict,
404
+ key='eyeballSize',
405
+ title='Camera body size',
406
+ row=row,
407
+ columnspan=4,
408
+ left_end=0.0,
409
+ right_end=1.5,
410
+ update_function=self.widget.update_shader_and_redraw,
411
+ format_string='%.3f')
412
+ row += 1
413
+
414
+ misc_frame = ttk.Frame(frame)
415
+ misc_frame.grid(row=row, column=1, columnspan=3)
416
+
417
+ freeze_checkbox = UniformDictController.create_checkbox(
418
+ misc_frame,
419
+ self.widget.ui_parameter_dict,
420
+ key='freezeEyeball',
421
+ text='Freeze camera body',
422
+ row=row,
423
+ column=0,
424
+ update_function=self.widget.draw,
425
+ gridargs = {'padx' : 8}).checkbox
426
+ ToolTip(freeze_checkbox,
427
+ msg=("Keep paper plane/eyeball at the same position "
428
+ "and attitude even when you are moving through the "
429
+ "manifold"))
430
+
431
+ UniformDictController.create_checkbox(
432
+ misc_frame,
433
+ self.widget.ui_uniform_dict,
434
+ key='crosshairs',
435
+ text='Crosshairs',
436
+ row=row,
437
+ column=1,
438
+ update_function=self.widget.draw,
439
+ gridargs = {'padx' : 8})
440
+
441
+ row += 1
442
+
443
+ return frame
444
+
332
445
  def create_skeleton_frame(self, parent):
333
446
  frame = ttk.Frame(parent)
334
447
 
@@ -338,16 +451,18 @@ class InsideViewer(ttk.Frame):
338
451
 
339
452
  row = 0
340
453
 
341
- UniformDictController.create_horizontal_scale(
454
+ scale = UniformDictController.create_horizontal_scale(
342
455
  frame,
343
- self.widget.ui_uniform_dict,
456
+ self.widget.ui_parameter_dict,
344
457
  key='edgeThickness',
345
458
  title='Face boundary thickness',
346
459
  row=row,
347
460
  left_end=0.0,
348
- right_end=0.35,
349
- update_function=self.widget.redraw_if_initialized,
350
- format_string='%.3f')
461
+ right_end=0.65,
462
+ update_function=self.widget.draw,
463
+ format_string='%.3f').scale
464
+ ToolTip(scale,
465
+ msg=("Partially show faces of the tetrahedra."))
351
466
  row += 1
352
467
 
353
468
  self.insphereScaleController = (
@@ -360,7 +475,7 @@ class InsideViewer(ttk.Frame):
360
475
  left_end=0.0,
361
476
  right_end=1.25,
362
477
  update_function=self.widget.recompute_raytracing_data_and_redraw,
363
- format_string='%.2f'))
478
+ format_string='%.3f'))
364
479
  row += 1
365
480
 
366
481
  self.edgeTubeRadiusController = (
@@ -372,7 +487,8 @@ class InsideViewer(ttk.Frame):
372
487
  row=row,
373
488
  left_end=0.0,
374
489
  right_end=0.2,
375
- update_function=self.widget.redraw_if_initialized))
490
+ update_function=self.widget.draw,
491
+ format_string='%.3f'))
376
492
  row += 1
377
493
 
378
494
  label = ttk.Label(frame, text="Edge colors", padding=gui_utilities.label_pad)
@@ -384,7 +500,7 @@ class InsideViewer(ttk.Frame):
384
500
  text='desaturate',
385
501
  row=row,
386
502
  column=1,
387
- update_function=self.widget.redraw_if_initialized)
503
+ update_function=self.widget.draw)
388
504
  row += 1
389
505
 
390
506
  return frame
@@ -404,8 +520,8 @@ class InsideViewer(ttk.Frame):
404
520
  title='Max Steps',
405
521
  row=row,
406
522
  left_end=1,
407
- right_end=100,
408
- update_function=self.widget.redraw_if_initialized)
523
+ right_end=150,
524
+ update_function=self.widget.draw)
409
525
 
410
526
  row += 1
411
527
  UniformDictController.create_horizontal_scale(
@@ -416,7 +532,7 @@ class InsideViewer(ttk.Frame):
416
532
  row=row,
417
533
  left_end=1.0,
418
534
  right_end=28.0,
419
- update_function=self.widget.redraw_if_initialized)
535
+ update_function=self.widget.draw)
420
536
 
421
537
  row += 1
422
538
  UniformDictController.create_horizontal_scale(
@@ -427,7 +543,20 @@ class InsideViewer(ttk.Frame):
427
543
  row=row,
428
544
  left_end=1.0,
429
545
  right_end=4.25,
430
- update_function=self.widget.redraw_if_initialized)
546
+ update_function=self.widget.draw)
547
+ row += 1
548
+
549
+ misc_frame = ttk.Frame(frame)
550
+ misc_frame.grid(row=row, column=1, columnspan=3)
551
+
552
+ self.fps_box_var = tkinter.BooleanVar()
553
+ self.fps_box_var.set(False)
554
+ fps_box = ttk.Checkbutton(misc_frame, takefocus=0)
555
+ fps_box.grid(row=0, column=0)
556
+ fps_box.configure(
557
+ variable = self.fps_box_var,
558
+ text='Show fps',
559
+ command=self.show_fps)
431
560
 
432
561
  return frame
433
562
 
@@ -449,7 +578,7 @@ class InsideViewer(ttk.Frame):
449
578
  row=row,
450
579
  left_end=0.0,
451
580
  right_end=0.25,
452
- update_function=self.widget.redraw_if_initialized,
581
+ update_function=self.widget.draw,
453
582
  format_string='%.3f')
454
583
  row += 1
455
584
 
@@ -461,7 +590,7 @@ class InsideViewer(ttk.Frame):
461
590
  row=row,
462
591
  left_end=0.3,
463
592
  right_end=4.0,
464
- update_function=self.widget.redraw_if_initialized)
593
+ update_function=self.widget.draw)
465
594
 
466
595
  row += 1
467
596
  UniformDictController.create_horizontal_scale(
@@ -472,7 +601,7 @@ class InsideViewer(ttk.Frame):
472
601
  row=row,
473
602
  left_end=0.1,
474
603
  right_end=2.0,
475
- update_function=self.widget.redraw_if_initialized)
604
+ update_function=self.widget.draw)
476
605
 
477
606
  row += 1
478
607
  UniformDictController.create_horizontal_scale(
@@ -483,7 +612,7 @@ class InsideViewer(ttk.Frame):
483
612
  row=row,
484
613
  left_end=0.3,
485
614
  right_end=3.0,
486
- update_function=self.widget.redraw_if_initialized)
615
+ update_function=self.widget.draw)
487
616
 
488
617
  return frame
489
618
 
@@ -654,7 +783,7 @@ class InsideViewer(ttk.Frame):
654
783
  self.widget.manifold.dehn_fill(
655
784
  self.filling_dict['fillings'][1])
656
785
 
657
- self.widget.recompute_raytracing_data_and_redraw()
786
+ self.widget.recompute_raytracing_data_update_shader_and_redraw()
658
787
  self.update_volume_label()
659
788
  self.reset_geodesics()
660
789
 
@@ -664,7 +793,7 @@ class InsideViewer(ttk.Frame):
664
793
  def recompute_hyperbolic_structure(self):
665
794
  self.widget.manifold.init_hyperbolic_structure(
666
795
  force_recompute=True)
667
- self.widget.recompute_raytracing_data_and_redraw()
796
+ self.widget.recompute_raytracing_data_update_shader_and_redraw()
668
797
 
669
798
  # Should we reset the view state since it might
670
799
  # be corrupted?
@@ -715,6 +844,10 @@ class InsideViewer(ttk.Frame):
715
844
  def build_menus(self):
716
845
  pass
717
846
 
847
+ def show_fps(self):
848
+ self.widget.fps_label_updater.set_visible(
849
+ self.fps_box_var.get())
850
+
718
851
  def test(self):
719
852
  X = 100
720
853
  self.widget.event_generate('<Button-1>', x=X, y=300, warp=True)
@@ -778,7 +911,7 @@ def _maximal_cusp_area(mfd):
778
911
 
779
912
  def _mouse_gestures_text():
780
913
  if sys.platform == 'darwin':
781
- return u"Move: Click & Drag Rotate: Shift-Click & Drag Orbit: \u2318-Click & Drag"
914
+ return "Move: Click & Drag Rotate: Shift-Click & Drag Orbit: \u2318-Click & Drag"
782
915
  else:
783
916
  return "Move: Click & Drag Rotate: Shift-Click & Drag Orbit: Alt-Click & Drag"
784
917
 
@@ -790,9 +923,9 @@ _translate_key_labels = {
790
923
  }
791
924
 
792
925
  _rotate_key_labels = {
793
- 'QWERTY': u"Keys: \u2190\u2191\u2192\u2193xz",
794
- 'AZERTY': u"Keys: \u2190\u2191\u2192\u2193xw",
795
- 'QWERTZ': u"Keys: \u2190\u2191\u2192\u2193xy"
926
+ 'QWERTY': "Keys: \u2190\u2191\u2192\u2193xz",
927
+ 'AZERTY': "Keys: \u2190\u2191\u2192\u2193xw",
928
+ 'QWERTZ': "Keys: \u2190\u2191\u2192\u2193xy"
796
929
  }
797
930
 
798
931
  ###############################################################################
@@ -829,7 +962,7 @@ class PerfTest:
829
962
  self.widget.view_state = self.widget.raytracing_data.update_view_state(
830
963
  self.widget.view_state, self.m)
831
964
 
832
- self.widget.redraw_if_initialized()
965
+ self.widget.draw()
833
966
  self.widget.after(250, self.redraw)
834
967
 
835
968
 
@@ -0,0 +1,22 @@
1
+ def pack_tet_data(prefix, tets_to_data):
2
+ result = {}
3
+
4
+ offset = 0
5
+ offsets = [ offset ]
6
+
7
+ for data in tets_to_data:
8
+ for datum in data:
9
+ if result:
10
+ for k, (t, v) in datum.items():
11
+ result[prefix + k][1].append(v)
12
+ else:
13
+ for k, (t, v) in datum.items():
14
+ result[prefix + k] = (t + '[]', [ v ])
15
+ offset += len(data)
16
+ offsets.append(offset)
17
+
18
+ result[prefix + 'Offsets'] = ('int[]', offsets)
19
+
20
+ return result, offset
21
+
22
+
@@ -1,13 +1,17 @@
1
1
  from snappy.snap import t3mlite as t3m
2
2
  from snappy.snap.mcomplex_base import *
3
- from snappy.SnapPy import matrix
4
3
 
5
4
  from .hyperboloid_utilities import *
6
5
 
6
+ from ..matrix import make_matrix
7
+
7
8
  __all__ = ['RaytracingData']
8
9
 
9
10
 
10
11
  class RaytracingData(McomplexEngine):
12
+ def is_valid(self):
13
+ return True
14
+
11
15
  def add_weights(self, weights):
12
16
  for tet in self.mcomplex.Tetrahedra:
13
17
  tet.Weights = {
@@ -79,36 +83,44 @@ class RaytracingData(McomplexEngine):
79
83
  d[b'##num_edges##'] = len(self.mcomplex.Edges)
80
84
  return d
81
85
 
82
- def update_view_state(self, boost_tet_num_and_weight,
83
- m=matrix([[1.0, 0.0, 0.0, 0.0],
84
- [0.0, 1.0, 0.0, 0.0],
85
- [0.0, 0.0, 1.0, 0.0],
86
- [0.0, 0.0, 0.0, 1.0]])):
86
+ def update_view_state(self,
87
+ boost_tet_num_and_weight,
88
+ m=make_matrix([[1.0, 0.0, 0.0, 0.0],
89
+ [0.0, 1.0, 0.0, 0.0],
90
+ [0.0, 0.0, 1.0, 0.0],
91
+ [0.0, 0.0, 0.0, 1.0]])):
87
92
  boost, tet_num, weight = boost_tet_num_and_weight
88
93
 
89
- boost = matrix(boost, ring=self.RF)
90
- m = matrix(m, ring=self.RF)
94
+ boost = make_matrix(boost, ring=self.RF)
95
+ m = make_matrix(m, ring=self.RF)
96
+
97
+ boost, tet, weight = _graph_trace(
98
+ boost * m, self.mcomplex.Tetrahedra[tet_num], weight)
99
+
100
+ return boost, tet.Index, weight
101
+
102
+ def _graph_trace(boost, tet, weight):
103
+
104
+ boost = O13_orthonormalise(boost)
91
105
 
92
- boost = O13_orthonormalize(boost * m)
106
+ entry_face = 0
93
107
 
94
- entry_F = -1
108
+ for i in range(100):
109
+ pos = boost.transpose()[0]
95
110
 
96
- for i in range(100):
97
- pos = boost.transpose()[0]
98
- tet = self.mcomplex.Tetrahedra[tet_num]
111
+ signed_dist, face = max(
112
+ [ (r13_dot(pos, tet.R13_planes[face]), face)
113
+ for face in t3m.TwoSubsimplices ])
99
114
 
100
- amount, F = max(
101
- [ (r13_dot(pos, tet.R13_planes[F]), F)
102
- for F in t3m.TwoSubsimplices ])
115
+ if face == entry_face:
116
+ break
117
+ if signed_dist < 0.0000001:
118
+ break
103
119
 
104
- if F == entry_F:
105
- break
106
- if amount < 0.0000001:
107
- break
120
+ boost = O13_orthonormalise(tet.O13_matrices[face] * boost)
121
+ weight += tet.Weights[face]
122
+ entry_face = tet.Gluing[face].image(face)
123
+ tet = tet.Neighbor[face]
108
124
 
109
- boost = O13_orthonormalize(tet.O13_matrices[F] * boost)
110
- tet_num = tet.Neighbor[F].Index
111
- entry_F = tet.Gluing[F].image(F)
112
- weight += tet.Weights[F]
125
+ return boost, tet, weight
113
126
 
114
- return boost, tet_num, weight