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
@@ -18,12 +18,12 @@ from ..pari import pari
18
18
 
19
19
  # This is broken down in three steps.
20
20
 
21
- # Step 1: Split into extensions and assingments
21
+ # Step 1: Split into extensions and assignments
22
22
  # extensions, assignments = extensions_and_assignments(polys)
23
23
 
24
24
  # Split the list of polynomials into two lists, the first list
25
25
  # contains triples (poly, var, degree) forming a tower of
26
- # field extensons and the second group is a dictionary assigning
26
+ # field extensions and the second group is a dictionary assigning
27
27
  # all remaining variables polynomials in the variables in the tower.
28
28
 
29
29
  # Example:
@@ -151,12 +151,12 @@ def update_assignments_and_merge(assignments, d):
151
151
  variables = sorted(set(
152
152
  sum([poly.variables() for poly in assignments.values()], [])))
153
153
 
154
- monomial_to_value = { (): pari(1) }
154
+ monomial_to_value = {(): pari(1)}
155
155
 
156
156
  for var in variables:
157
157
  max_degree = max([poly.degree(var) for poly in assignments.values()])
158
158
 
159
- old_keys = list(monomial_to_value.keys())
159
+ old_keys = list(monomial_to_value)
160
160
 
161
161
  v = d[var]
162
162
  power_of_v = pari(1)
@@ -180,8 +180,8 @@ def update_assignments_and_merge(assignments, d):
180
180
  [eval_monomial(m) for m in poly.get_monomials()],
181
181
  pari(0))
182
182
 
183
- new_assignments = dict([(key, substitute(poly))
184
- for key, poly in assignments.items()])
183
+ new_assignments = {key: substitute(poly)
184
+ for key, poly in assignments.items()}
185
185
 
186
186
  # Merge all the assignments of variables
187
187
  new_assignments.update(d)
@@ -227,9 +227,9 @@ def _process_extensions(extensions):
227
227
  # The new number field is again in x but the assignments
228
228
  # are assigning polynomials in the old x.
229
229
  # Need to update.
230
- ext_assignments = dict(
231
- [(key, poly.substitute({'x' : old_x_in_new_x}))
232
- for key, poly in ext_assignments.items()])
230
+ ext_assignments = {
231
+ key: poly.substitute({'x' : old_x_in_new_x})
232
+ for key, poly in ext_assignments.items()}
233
233
 
234
234
  # And compute what the root of the last polynomial was
235
235
  # to assign it.
snappy/ptolemy/test.py CHANGED
@@ -13,20 +13,25 @@
13
13
  # python test.py --compute
14
14
 
15
15
  from snappy import Manifold, pari, ptolemy
16
+ from snappy import ptolemy
16
17
  from snappy.ptolemy import solutions_from_magma, Flattenings, parse_solutions
17
18
  from snappy.ptolemy.processFileBase import get_manifold
18
19
  from snappy.ptolemy import __path__ as ptolemy_paths
19
20
  from snappy.ptolemy.coordinates import PtolemyCannotBeCheckedError
20
- from snappy.sage_helper import _within_sage, doctest_modules
21
+ from snappy.sage_helper import _within_sage
22
+ from snappy.testing import doctest_modules
21
23
  from snappy.pari import pari
22
24
  import bz2
23
25
  import os
24
26
  import sys
27
+ import doctest
28
+ import traceback
25
29
 
26
30
  if _within_sage:
27
31
  from sage.misc.sage_eval import sage_eval
28
32
 
29
33
  test_regina = '--regina' in sys.argv
34
+ compute_solutions = '--compute' in sys.argv
30
35
 
31
36
  base_path = ptolemy_paths[0]
32
37
  if test_regina:
@@ -208,7 +213,8 @@ def testSolutionsForManifold(M, N, solutions, baseline_cvolumes=None,
208
213
  def testComputeSolutionsForManifold(manifold, N,
209
214
  compute_solutions=False,
210
215
  baseline_cvolumes=None,
211
- expect_non_zero_dimensional=None):
216
+ expect_non_zero_dimensional=None,
217
+ print_info=True):
212
218
 
213
219
  varieties = manifold.ptolemy_variety(N, obstruction_class="all_original")
214
220
 
@@ -226,10 +232,10 @@ def testComputeSolutionsForManifold(manifold, N,
226
232
  baseline_cvolumes, expect_non_zero_dimensional)
227
233
 
228
234
  if manifold.name() == 't00000':
229
- testMatrixMethods(manifold, solutions)
235
+ testMatrixMethods(manifold, solutions, print_info=print_info)
230
236
 
231
237
 
232
- def testMatrixMethods(manifold, solutions):
238
+ def testMatrixMethods(manifold, solutions, print_info=True):
233
239
 
234
240
  def matrix_is_diagonal(m):
235
241
  return (
@@ -241,7 +247,8 @@ def testMatrixMethods(manifold, solutions):
241
247
  return matrix_is_diagonal(m) and (
242
248
  m[0][0] + 1 == 0 or m[0][0] - 1 == 0)
243
249
 
244
- print("Testing matrix methods...")
250
+ if print_info:
251
+ print("Testing matrix methods...")
245
252
 
246
253
  G = manifold.fundamental_group(simplify_presentation=True)
247
254
  Graw = manifold.fundamental_group(simplify_presentation=False)
@@ -302,9 +309,14 @@ def test_flattenings_from_tetrahedra_shapes_of_manifold():
302
309
 
303
310
  from snappy import OrientableCuspedCensus
304
311
 
305
- for M in (list(OrientableCuspedCensus()[0:10]) +
306
- list(OrientableCuspedCensus()[10000:10010])):
312
+ for M_database in (list(OrientableCuspedCensus()[0:10]) +
313
+ list(OrientableCuspedCensus()[10000:10010])):
307
314
 
315
+ # The manifold returned by OrientableCuspedCensus is
316
+ # a SnapPy.Manifold, not a snappy.Manifold (as is overridden
317
+ # in python/test.py).
318
+ M = Manifold(M_database)
319
+
308
320
  flattening = Flattenings.from_tetrahedra_shapes_of_manifold(M)
309
321
  flattening.check_against_manifold(M, epsilon=1e-80)
310
322
 
@@ -447,7 +459,7 @@ def testComputeSolutionsForManifoldGeneralizedObstructionClass(
447
459
  manifold, N, baseline_volumes, baseline_dimensions)
448
460
 
449
461
 
450
- def testGeneralizedObstructionClass(compute_solutions):
462
+ def testGeneralizedObstructionClass(compute_solutions, print_info = True):
451
463
 
452
464
  vols = [
453
465
  pari('0'),
@@ -484,7 +496,8 @@ def testGeneralizedObstructionClass(compute_solutions):
484
496
 
485
497
  for manifold, N, vols, dims in test_cases:
486
498
 
487
- print("Checking for", manifold.name(), "N = %d" % N)
499
+ if print_info:
500
+ print("Checking for", manifold.name(), "N = %d" % N)
488
501
 
489
502
  testComputeSolutionsForManifoldGeneralizedObstructionClass(
490
503
  manifold, N, compute_solutions, vols, dims)
@@ -647,7 +660,7 @@ def testNumericalSolutions():
647
660
  check_volumes(allCVolumes, expected_cvolumes)
648
661
 
649
662
 
650
- def testGeometricRep(compute_solutions):
663
+ def testGeometricRep(compute_solutions, print_info=False):
651
664
 
652
665
  from snappy.ptolemy import geometricRep
653
666
 
@@ -657,13 +670,14 @@ def testGeometricRep(compute_solutions):
657
670
  else:
658
671
  from urllib.request import pathname2url
659
672
  url = pathname2url(os.path.abspath(testing_files_directory))
660
- sol = geometricRep.retrieve_geometric_solution(M, data_url=url)
673
+ sol = geometricRep.retrieve_geometric_solution(
674
+ M, data_url=url, verbose = print_info)
661
675
 
662
676
  # Make sure this is of type Ptolemy
663
677
  sol['c_0011_2']
664
678
 
665
679
  assert any(
666
- [ abs(vol - 2.9441064867) < 1e-9 for vol in sol.volume_numerical()])
680
+ abs(vol - 2.9441064867) < 1e-9 for vol in sol.volume_numerical())
667
681
 
668
682
 
669
683
  def testSageCommandLine():
@@ -809,79 +823,66 @@ def test_num_obstruction_class_match():
809
823
  for i in range(2,6):
810
824
  assert len(M.ptolemy_generalized_obstruction_classes(i)) == len(N.ptolemy_generalized_obstruction_classes(i))
811
825
 
826
+ def run_ptolemy_tests_raising_exceptions(print_info=True):
827
+ if print_info:
828
+ print("Testing in sage:", _within_sage)
812
829
 
813
- modules = [ptolemy.component, ptolemy.coordinates, ptolemy.manifoldMethods,
814
- ptolemy.matrix, ptolemy.polynomial, ptolemy.processMagmaFile,
815
- ptolemy.ptolemyObstructionClass, ptolemy.ptolemyVariety,
816
- ptolemy.ptolemyVariety, ptolemy.processFileBase, ptolemy.processRurFile,
817
- ptolemy.rur, ptolemy.utilities]
818
- if test_regina:
819
- modules.append(ptolemy.reginaWrapper)
820
-
821
-
822
- def run_doctests(verbose=False, print_info=True):
823
- return doctest_modules(modules, verbose, print_info)
824
-
825
-
826
- def main(verbose=False, doctest=True):
827
- print("Testing in sage:", _within_sage)
828
-
829
- print("Testing in regina:", test_regina)
830
-
831
- if doctest:
832
- print("Running doctests...")
833
- run_doctests(verbose)
834
- print()
830
+ print("Testing in regina:", test_regina)
835
831
 
836
832
  if test_regina:
837
- print("Testing that regina agrees with snappy obstruction classes")
833
+ if print_info:
834
+ print("Testing that regina agrees with snappy obstruction classes")
838
835
  test_num_obstruction_class_match()
839
836
 
840
837
  if not test_regina:
841
- print("Testing Flattenings.from_tetrahedra_shapes_of_manifold...")
838
+ if print_info:
839
+ print("Testing Flattenings.from_tetrahedra_shapes_of_manifold...")
842
840
 
843
841
  test_flattenings_from_tetrahedra_shapes_of_manifold()
844
842
 
845
- compute_solutions = False
846
-
847
- if '--compute' in sys.argv:
848
- compute_solutions = True
849
-
850
843
  if test_regina and not compute_solutions:
851
844
  print("regina testing requires --compute")
852
845
  sys.exit(1)
853
846
 
854
847
  old_precision = pari.set_real_precision(100)
855
848
 
856
- print("Testing induced representation...")
849
+ if print_info:
850
+ print("Testing induced representation...")
857
851
 
858
852
  test_induced_representation()
859
853
 
860
- print("Testing induced SL(4,C) representation...")
854
+ if print_info:
855
+ print("Testing induced SL(4,C) representation...")
861
856
 
862
857
  test_induced_sl4_representation()
863
858
 
864
- print("Running manifold tests for generalized obstruction class...")
859
+ if print_info:
860
+ print("Running manifold tests for generalized obstruction class...")
865
861
 
866
- testGeneralizedObstructionClass(compute_solutions)
862
+ testGeneralizedObstructionClass(compute_solutions, print_info=print_info)
867
863
 
868
864
  if not test_regina:
869
- print("Testing RUR for m052__sl3_c0.rur")
865
+ if print_info:
866
+ print("Testing RUR for m052__sl3_c0.rur")
870
867
 
871
868
  testMapleLikeRur()
872
869
 
873
- print("Testing numerical solution retrieval method...")
870
+ if print_info:
871
+ print("Testing numerical solution retrieval method...")
874
872
 
875
873
  testNumericalSolutions()
876
874
 
877
- print("Testing geometricRep...")
878
- testGeometricRep(compute_solutions)
875
+ if print_info:
876
+ print("Testing geometricRep...")
877
+ testGeometricRep(compute_solutions, print_info=print_info)
879
878
 
880
879
  if _within_sage:
881
- print("Testing in sage command line...")
880
+ if print_info:
881
+ print("Testing in sage command line...")
882
882
  testSageCommandLine()
883
883
 
884
- print("Running manifold tests...")
884
+ if print_info:
885
+ print("Running manifold tests...")
885
886
 
886
887
  # Test for a non-hyperbolic manifold
887
888
 
@@ -1068,14 +1069,58 @@ def main(verbose=False, doctest=True):
1068
1069
 
1069
1070
  for manifold, N, cvols, expect_non_zero_dim in test_cases:
1070
1071
 
1071
- print("Checking for", manifold.name(), "N = %d" % N)
1072
+ if print_info:
1073
+ print("Checking for", manifold.name(), "N = %d" % N)
1072
1074
 
1073
1075
  testComputeSolutionsForManifold(
1074
1076
  manifold, N,
1075
1077
  compute_solutions=compute_solutions,
1076
1078
  baseline_cvolumes=cvols,
1077
- expect_non_zero_dimensional=expect_non_zero_dim)
1079
+ expect_non_zero_dimensional=expect_non_zero_dim,
1080
+ print_info=print_info)
1078
1081
 
1082
+ def run_ptolemy_tests(verbose=False, print_info=True):
1083
+ try:
1084
+ run_ptolemy_tests_raising_exceptions(
1085
+ print_info=print_info)
1086
+ return doctest.TestResults(failed=0, attempted=1)
1087
+ except Exception as e:
1088
+ print()
1089
+ print("FAILED TEST in Ptolemy. Exception is:")
1090
+ traceback.print_exc()
1091
+ print()
1092
+ return doctest.TestResults(failed=1, attempted=1)
1093
+
1094
+ run_ptolemy_tests.__name__ = ptolemy.__name__ + ' (non-doc tests)'
1095
+
1096
+ modules = [ptolemy.component,
1097
+ ptolemy.coordinates,
1098
+ ptolemy.manifoldMethods,
1099
+ ptolemy.matrix,
1100
+ ptolemy.polynomial,
1101
+ ptolemy.processFileBase,
1102
+ ptolemy.processMagmaFile,
1103
+ ptolemy.processRurFile,
1104
+ ptolemy.ptolemyObstructionClass,
1105
+ ptolemy.ptolemyVariety,
1106
+ ptolemy.rur,
1107
+ ptolemy.utilities]
1108
+ if test_regina:
1109
+ modules.append(ptolemy.reginaWrapper)
1110
+
1111
+ def run_doctests(verbose=False, print_info=True):
1112
+ return doctest_modules(
1113
+ modules,
1114
+ verbose=verbose, print_info=print_info)
1115
+
1116
+ run_doctests.__name__ = ptolemy.__name__
1079
1117
 
1080
1118
  if __name__ == '__main__':
1081
- main()
1119
+ verbose = '-v' in sys.argv[1:] or '--verbose' in sys.argv[1:]
1120
+
1121
+ result = run_doctests(verbose=verbose, print_info=True)
1122
+ if result.failed:
1123
+ sys.exit(result.failed)
1124
+
1125
+ result = run_ptolemy_tests(verbose=verbose, print_info=True)
1126
+ sys.exit(result.failed)
@@ -212,7 +212,7 @@ class MethodMappingList(list):
212
212
  """
213
213
 
214
214
  def __init__(self, l=[], p=None):
215
- super(MethodMappingList, self).__init__(l)
215
+ super().__init__(l)
216
216
 
217
217
  def __call__(self, *args, **kwargs):
218
218
  return type(self)([elt(*args, **kwargs) for elt in self],
@@ -0,0 +1,64 @@
1
+ from ..exceptions import NonorientableManifoldError
2
+ from . import cohomology_fractal
3
+
4
+ try:
5
+ from ..gui import ViewerWindow
6
+ from .inside_viewer import InsideViewer
7
+ except ImportError as e:
8
+ InsideViewer = None
9
+ _importErrorRaytracing = str(e)
10
+
11
+ from typing import Sequence
12
+
13
+ def inside_view(self, cohomology_class=None, geodesics : Sequence[str]=[]):
14
+ r"""
15
+ Show raytraced inside view of hyperbolic manifold. See
16
+ `images <https://im.icerm.brown.edu/portfolio/snappy-views/>`_
17
+ and `demo video <https://youtu.be/CAERhmUCkRs>`_.
18
+
19
+ >>> M = Manifold("m004")
20
+ >>> M.inside_view() #doctest: +CYMODERNOPENGL
21
+
22
+ Or show the cohomology fractal:
23
+
24
+ >>> M = Manifold("m004")
25
+ >>> M.inside_view(cohomology_class = 0) #doctest: +CYMODERNOPENGL
26
+
27
+ The cohomology class in :math:`H^2(M, \partial M; \mathbb{R})` producing the
28
+ cohomology fractal can be specified as a cocycle or using an automatically
29
+ computed basis (of, say, length ``n``). Thus, ``cohomology_class`` can be
30
+ one of the following.
31
+
32
+ - An integer ``i`` between 0 and ``n`` - 1 to pick the ``i``-th basis
33
+ vector.
34
+ - An array of length ``n`` specifying the cohomology class as linear
35
+ combination of basis vectors.
36
+ - A weight for each face of each tetrahedron.
37
+
38
+ Geodesics can be specified as words in the unsimplified fundamental group:
39
+
40
+ >>> M = Manifold("m004")
41
+ >>> M.inside_view(geodesics=['a', 'bC']) #doctest: +CYMODERNOPENGL
42
+
43
+ """
44
+
45
+ if InsideViewer is None:
46
+ raise RuntimeError("Raytraced inside view not imported; "
47
+ "Tk or CyOpenGL is probably missing "
48
+ "(original error : %s)" % _importErrorRaytracing)
49
+
50
+ if not self.is_orientable():
51
+ raise NonorientableManifoldError("Manifold.inside_view", self)
52
+
53
+ weights, cohomology_basis, cohomology_class = (
54
+ cohomology_fractal.compute_weights_basis_class(
55
+ self, cohomology_class))
56
+
57
+ return ViewerWindow(
58
+ InsideViewer,
59
+ self,
60
+ title="Inside view of %s" % self.name(),
61
+ weights=weights,
62
+ cohomology_basis=cohomology_basis,
63
+ cohomology_class=cohomology_class,
64
+ geodesics=geodesics)
@@ -0,0 +1,64 @@
1
+ """
2
+ from snappy import *; from snappy.raytracing.additional_horospheres import *
3
+
4
+ M=Manifold("t10879")
5
+ M=CubicalOrientableCuspedCensus[0]
6
+ v = M.inside_view()
7
+ a=AdditionalHorospheres(M)
8
+ v.view.widget.additional_structures['horospheres'] = a; v.view.widget._update_shader()
9
+
10
+ """
11
+
12
+ from ..geometric_structure.cusp_neighborhood.tiles_for_cusp_neighborhood import mcomplex_for_tiling_cusp_neighborhoods
13
+ from .pack import pack_tet_data
14
+ from .upper_halfspace_utilities import add_coordinate_transform_to_mcomplex
15
+
16
+ class AdditionalHorospheres:
17
+ def __init__(self, manifold):
18
+
19
+ self.mcomplex = mcomplex_for_tiling_cusp_neighborhoods(
20
+ manifold, bits_prec = 53, verified = False)
21
+ add_coordinate_transform_to_mcomplex(self.mcomplex)
22
+
23
+ self.num_tetrahedra = manifold.num_tetrahedra()
24
+ self.RF = manifold.tetrahedra_shapes('rect')[0].real().parent()
25
+ self.cusp_areas = [ 1.0 for v in self.mcomplex.Vertices ]
26
+
27
+ self._num = 0
28
+
29
+ self.compute_bindings()
30
+
31
+ def get_compile_time_defs(self):
32
+ if self._num > 0:
33
+ num = max(100, self._num)
34
+ else:
35
+ num = 0
36
+
37
+ return { 'num_additional_horospheres' : num }
38
+
39
+ def get_uniform_bindings(self):
40
+ return self._uniform_bindings
41
+
42
+ def compute_bindings(self):
43
+
44
+ tets_to_data = [ [] for i in range(self.num_tetrahedra) ]
45
+
46
+ for cusp_index, v in enumerate(self.mcomplex.Vertices):
47
+ scale = (self.RF(self.cusp_areas[cusp_index]) / v.cusp_area).sqrt()
48
+
49
+ d = scale.log()
50
+
51
+ for tile in v.tiles():
52
+ if tile.lower_bound_distance > d:
53
+ break
54
+
55
+ tet = tile.lifted_tetrahedron.tet
56
+
57
+ s = (
58
+ tet.to_coordinates_in_symmetric_tet * tile.inverse_lifted_geometric_object.defining_vec) / scale
59
+
60
+ tets_to_data[tet.Index].append(
61
+ { 'Vec' : ('vec4', s),
62
+ 'CuspIndex' : ('int', cusp_index) })
63
+
64
+ self._uniform_bindings, self._num = pack_tet_data('additionalHorospheres.horosphere', tets_to_data)
@@ -0,0 +1,63 @@
1
+ """
2
+ from snappy import *; from snappy.raytracing.additional_len_spec_choices import *
3
+
4
+ M=Manifold("t10879")
5
+ M=CubicalOrientableCuspedCensus[0]
6
+ v = M.inside_view()
7
+ a=AdditionalLenSpecChoices(M)
8
+ v.view.widget.additional_structures['lenSpec'] = a; v.view.widget._update_shader()
9
+
10
+ """
11
+
12
+ from ..len_spec import mcomplex_for_len_spec
13
+
14
+ from .pack import pack_tet_data
15
+ from .upper_halfspace_utilities import add_coordinate_transform_to_mcomplex
16
+ from ..snap.t3mlite import simplex
17
+
18
+ class AdditionalLenSpecChoices:
19
+ def __init__(self, manifold):
20
+
21
+ self.mcomplex = mcomplex_for_len_spec(
22
+ manifold, bits_prec = 53, verified = False)
23
+ add_coordinate_transform_to_mcomplex(self.mcomplex)
24
+
25
+ self._num = 0
26
+
27
+ self.compute_bindings()
28
+
29
+ def get_compile_time_defs(self):
30
+ if self._num > 0:
31
+ num = max(100, self._num)
32
+ else:
33
+ num = 0
34
+
35
+ return { 'num_additional_horospheres' : num,
36
+ 'has_edge_midpoints' : 1}
37
+
38
+ def get_uniform_bindings(self):
39
+ return self._uniform_bindings
40
+
41
+ def compute_bindings(self):
42
+ self._uniform_bindings, self._num = pack_tet_data(
43
+ 'additionalHorospheres.horosphere',
44
+ self._get_data())
45
+ self._uniform_bindings['edgeMidpoints.edgeMidpointVec'] = (
46
+ 'vec4[]', [ tet.to_coordinates_in_symmetric_tet * tet.spine_points[e]
47
+ for tet in self.mcomplex.Tetrahedra
48
+ for e in simplex.OneSubsimplices ])
49
+ self._uniform_bindings['edgeMidpointRadiusParam'] = (
50
+ 'float', 1.002)
51
+
52
+ def _get_data(self):
53
+ return [ [ _data_for_vert(tet, v) for v in simplex.ZeroSubsimplices ]
54
+ for tet in self.mcomplex.Tetrahedra ]
55
+
56
+ def _data_for_vert(tet, v):
57
+ return {
58
+ 'Vec' :(
59
+ 'vec4',
60
+ tet.to_coordinates_in_symmetric_tet * tet.R13_vertices[v]),
61
+ 'CuspIndex' : (
62
+ 'int',
63
+ tet.Class[v].Index) }
@@ -55,7 +55,6 @@ def check_weights_valid(trig, weights):
55
55
  Given a SnapPy triangulation and weights per face per tetrahedron,
56
56
  check they are consistent across glued faces and form a 2-cocycle.
57
57
 
58
- >>> from snappy import Manifold
59
58
  >>> check_weights_valid(Manifold("m015"), [1, 0, 0, 0, -1, 0, 0, 1, -1, 0, 0, 0])
60
59
  >>> check_weights_valid(Manifold("m004"), [0, 1, 0, 1, 0, 0, -1, -2])
61
60
  Traceback (most recent call last):
@@ -111,7 +110,6 @@ def rational_cohomology_basis(trig):
111
110
  per face per tetrahedron that generate the second rational cohomology
112
111
  group.
113
112
 
114
- >>> from snappy import Manifold
115
113
  >>> rational_cohomology_basis(Manifold("m125"))
116
114
  [[-1, -4, -2, 0, 1, 0, 0, 0, 0, 4, 1, 2, -1, 0, 0, 0], [0, 5, 2, 0, 0, 0, 0, 1, 0, -5, 0, -2, 0, 0, 0, -1]]
117
115
 
@@ -147,7 +145,6 @@ def compute_weights_basis_class(trig, cohomology_class):
147
145
  Convenience method to quickly access cohomology classes for
148
146
  M.inside_view().
149
147
 
150
- >>> from snappy import Manifold
151
148
  >>> compute_weights_basis_class(Manifold("m004"), None)
152
149
  (None, None, None)
153
150
  >>> compute_weights_basis_class(Manifold("m003"), [1, 0, 0, 1, -1, 0, 0, -1])
@@ -0,0 +1,123 @@
1
+ from ..hyperboloid import o13_inverse
2
+ from ..hyperboloid.point import R13Point
3
+
4
+ from ..tiling.tile import compute_tiles
5
+ from ..tiling.lifted_tetrahedron import LiftedTetrahedron
6
+ from ..tiling.lifted_tetrahedron_set import (LiftedTetrahedronSet,
7
+ get_lifted_tetrahedron_set)
8
+ from ..tiling.triangle import add_triangles_to_tetrahedra
9
+
10
+ from ..matrix import make_matrix, make_vector
11
+
12
+ from ..matrix import matrix
13
+
14
+ import math
15
+
16
+ eyeball_type_none = 0
17
+ eyeball_type_paper_plane = 1
18
+ eyeball_type_eyeball = 2
19
+
20
+ _max_num_eyeballs = 40
21
+
22
+ class Eyeball:
23
+ def __init__(self, raytracing_view):
24
+ self.raytracing_view = raytracing_view
25
+
26
+ self.mcomplex = self.raytracing_view.raytracing_data.mcomplex
27
+ self.num_tetrahedra = len(self.mcomplex.Tetrahedra)
28
+
29
+ self._added_triangles = False
30
+
31
+ self.view_state = None
32
+
33
+ def _enabled(self):
34
+ return (
35
+ self.raytracing_view.ui_parameter_dict['eyeballSize'][1] > 0 and
36
+ self.raytracing_view.ui_parameter_dict['eyeballType'][1] > eyeball_type_none)
37
+
38
+ def get_compile_time_defs(self):
39
+ if not self._enabled():
40
+ return {}
41
+
42
+ d = { 'num_eyeballs' : _max_num_eyeballs,
43
+ 'eyeball_type' : self.raytracing_view.ui_parameter_dict['eyeballType'][1]}
44
+
45
+ return d
46
+
47
+ def get_uniform_bindings(self):
48
+ if not self._enabled():
49
+ return {}
50
+
51
+ if not self._added_triangles:
52
+ add_triangles_to_tetrahedra(self.mcomplex)
53
+ self._added_triangles = True
54
+
55
+ if self.view_state is None or (
56
+ not self.raytracing_view.ui_parameter_dict['freezeEyeball'][1]):
57
+ self.view_state = self.raytracing_view.view_state
58
+
59
+ boost, tet_num, current_weight = self.view_state
60
+
61
+ RF = self.raytracing_view.raytracing_data.RF
62
+
63
+ boost = make_matrix(boost, ring=RF)
64
+
65
+ base_point = make_vector([b[0] for b in boost])
66
+
67
+ eyeballRadius = self.raytracing_view.ui_parameter_dict['eyeballSize'][1]
68
+ if self.raytracing_view.ui_parameter_dict['eyeballType'][1] == eyeball_type_eyeball:
69
+ eyeballRadius = eyeballRadius / 2.0
70
+ tets_to_data = [ [] for i in range(self.num_tetrahedra) ]
71
+
72
+ initial_lifted_tetrahedron = LiftedTetrahedron(
73
+ self.mcomplex.Tetrahedra[tet_num], matrix.identity(RF, 4))
74
+
75
+ cut_off = RF(1.0 + 1e-5)
76
+
77
+ lifted_tetrahedron_set : LiftedTetrahedronSet = (
78
+ get_lifted_tetrahedron_set(
79
+ base_point=base_point,
80
+ act_on_base_point_by_inverse=True,
81
+ max_neg_prod_equal=cut_off,
82
+ min_neg_prod_distinct=cut_off,
83
+ canonical_keys_function=None,
84
+ verified=False))
85
+
86
+ for i, tile in enumerate(
87
+ compute_tiles(
88
+ geometric_object=R13Point(base_point),
89
+ visited_lifted_tetrahedra=lifted_tetrahedron_set,
90
+ initial_lifted_tetrahedra=[ initial_lifted_tetrahedron ],
91
+ verified=False)):
92
+
93
+ if i == _max_num_eyeballs:
94
+ break
95
+ if tile.lower_bound_distance > eyeballRadius:
96
+ break
97
+
98
+ m = o13_inverse(boost) * tile.lifted_tetrahedron.o13_matrix
99
+
100
+ tets_to_data[tile.lifted_tetrahedron.tet.Index].append((
101
+ tile.inverse_lifted_geometric_object.point,
102
+ m,
103
+ o13_inverse(m)))
104
+
105
+ eyeballPositions = []
106
+ eyeballInvEmbeddings = []
107
+ eyeballEmbeddings = []
108
+ eyeballOffsets = []
109
+
110
+ for data in tets_to_data:
111
+ eyeballOffsets.append(len(eyeballPositions))
112
+ for eyeballPosition, eyeballInvEmbedding, eyeballEmbedding in data:
113
+ eyeballPositions.append(eyeballPosition)
114
+ eyeballInvEmbeddings.append(eyeballInvEmbedding)
115
+ eyeballEmbeddings.append(eyeballEmbedding)
116
+ eyeballOffsets.append(len(eyeballPositions))
117
+
118
+ return {
119
+ 'eyeballRadius' : ('float', eyeballRadius),
120
+ 'eyeballs.eyeballPositions' : ('vec4[]', eyeballPositions),
121
+ 'eyeballs.eyeballInvEmbeddings' : ('mat4[]', eyeballInvEmbeddings),
122
+ 'eyeballs.eyeballEmbeddings' : ('mat4[]', eyeballEmbeddings),
123
+ 'eyeballs.eyeballOffsets' : ('int[]', eyeballOffsets) }