snappy 3.1.1__cp38-cp38-win_amd64.whl → 3.2__cp38-cp38-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (476) hide show
  1. snappy/CyOpenGL.cp38-win_amd64.pyd +0 -0
  2. snappy/SnapPy.cp38-win_amd64.pyd +0 -0
  3. snappy/SnapPyHP.cp38-win_amd64.pyd +0 -0
  4. snappy/__init__.py +299 -402
  5. snappy/app.py +70 -20
  6. snappy/browser.py +18 -17
  7. snappy/canonical.py +249 -0
  8. snappy/{verify/cusp_shapes.py → cusps/__init__.py} +8 -18
  9. snappy/cusps/cusp_area_matrix.py +101 -0
  10. snappy/{verify/cusp_areas.py → cusps/cusp_areas_from_matrix.py} +23 -39
  11. snappy/cusps/maximal_cusp_area_matrix.py +136 -0
  12. snappy/cusps/test.py +21 -0
  13. snappy/cusps/trig_cusp_area_matrix.py +63 -0
  14. snappy/database.py +10 -9
  15. snappy/decorated_isosig.py +337 -114
  16. snappy/dev/extended_ptolemy/complexVolumesClosed.py +40 -7
  17. snappy/dev/extended_ptolemy/extended.py +3 -3
  18. snappy/dev/extended_ptolemy/phc_wrapper.py +10 -10
  19. snappy/dev/vericlosed/oneVertexTruncatedComplex.py +1 -1
  20. snappy/doc/_images/m004_paper_plane_on_systole.jpg +0 -0
  21. snappy/doc/_images/m125_paper_plane.jpg +0 -0
  22. snappy/doc/_images/o9_00000_systole_paper_plane.jpg +0 -0
  23. snappy/doc/_images/o9_00000_systole_paper_plane_closer.jpg +0 -0
  24. snappy/doc/_sources/additional_classes.rst.txt +40 -40
  25. snappy/doc/_sources/bugs.rst.txt +14 -14
  26. snappy/doc/_sources/censuses.rst.txt +51 -51
  27. snappy/doc/_sources/credits.rst.txt +75 -75
  28. snappy/doc/_sources/development.rst.txt +259 -239
  29. snappy/doc/_sources/index.rst.txt +182 -115
  30. snappy/doc/_sources/installing.rst.txt +247 -264
  31. snappy/doc/_sources/manifold.rst.txt +6 -6
  32. snappy/doc/_sources/manifoldhp.rst.txt +46 -46
  33. snappy/doc/_sources/news.rst.txt +355 -283
  34. snappy/doc/_sources/other.rst.txt +25 -25
  35. snappy/doc/_sources/platonic_census.rst.txt +20 -20
  36. snappy/doc/_sources/plink.rst.txt +102 -102
  37. snappy/doc/_sources/ptolemy.rst.txt +66 -66
  38. snappy/doc/_sources/ptolemy_classes.rst.txt +42 -42
  39. snappy/doc/_sources/ptolemy_examples1.rst.txt +298 -297
  40. snappy/doc/_sources/ptolemy_examples2.rst.txt +363 -363
  41. snappy/doc/_sources/ptolemy_examples3.rst.txt +301 -301
  42. snappy/doc/_sources/ptolemy_examples4.rst.txt +61 -61
  43. snappy/doc/_sources/ptolemy_prelim.rst.txt +105 -105
  44. snappy/doc/_sources/screenshots.rst.txt +21 -21
  45. snappy/doc/_sources/snap.rst.txt +87 -87
  46. snappy/doc/_sources/snappy.rst.txt +28 -28
  47. snappy/doc/_sources/spherogram.rst.txt +103 -103
  48. snappy/doc/_sources/todo.rst.txt +47 -47
  49. snappy/doc/_sources/triangulation.rst.txt +11 -11
  50. snappy/doc/_sources/tutorial.rst.txt +49 -49
  51. snappy/doc/_sources/verify.rst.txt +210 -150
  52. snappy/doc/_sources/verify_internals.rst.txt +79 -90
  53. snappy/doc/_static/basic.css +924 -902
  54. snappy/doc/_static/css/badge_only.css +1 -1
  55. snappy/doc/_static/css/theme.css +1 -1
  56. snappy/doc/_static/doctools.js +1 -1
  57. snappy/doc/_static/documentation_options.js +12 -13
  58. snappy/doc/_static/fonts/Lato/lato-bold.eot +0 -0
  59. snappy/doc/_static/fonts/Lato/lato-bold.ttf +0 -0
  60. snappy/doc/_static/fonts/Lato/lato-bold.woff +0 -0
  61. snappy/doc/_static/fonts/Lato/lato-bold.woff2 +0 -0
  62. snappy/doc/_static/fonts/Lato/lato-bolditalic.eot +0 -0
  63. snappy/doc/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
  64. snappy/doc/_static/fonts/Lato/lato-bolditalic.woff +0 -0
  65. snappy/doc/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
  66. snappy/doc/_static/fonts/Lato/lato-italic.eot +0 -0
  67. snappy/doc/_static/fonts/Lato/lato-italic.ttf +0 -0
  68. snappy/doc/_static/fonts/Lato/lato-italic.woff +0 -0
  69. snappy/doc/_static/fonts/Lato/lato-italic.woff2 +0 -0
  70. snappy/doc/_static/fonts/Lato/lato-regular.eot +0 -0
  71. snappy/doc/_static/fonts/Lato/lato-regular.ttf +0 -0
  72. snappy/doc/_static/fonts/Lato/lato-regular.woff +0 -0
  73. snappy/doc/_static/fonts/Lato/lato-regular.woff2 +0 -0
  74. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
  75. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
  76. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
  77. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
  78. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
  79. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
  80. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
  81. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
  82. snappy/doc/_static/js/versions.js +228 -0
  83. snappy/doc/_static/language_data.js +199 -199
  84. snappy/doc/_static/pygments.css +74 -73
  85. snappy/doc/_static/searchtools.js +125 -71
  86. snappy/doc/_static/snappy_furo.css +33 -33
  87. snappy/doc/_static/snappy_sphinx_rtd_theme.css +42 -42
  88. snappy/doc/_static/sphinx_highlight.js +13 -3
  89. snappy/doc/additional_classes.html +1499 -1330
  90. snappy/doc/bugs.html +131 -134
  91. snappy/doc/censuses.html +426 -445
  92. snappy/doc/credits.html +180 -183
  93. snappy/doc/development.html +383 -363
  94. snappy/doc/genindex.html +1330 -1409
  95. snappy/doc/index.html +261 -206
  96. snappy/doc/installing.html +345 -363
  97. snappy/doc/manifold.html +3451 -2839
  98. snappy/doc/manifoldhp.html +179 -182
  99. snappy/doc/news.html +387 -329
  100. snappy/doc/objects.inv +0 -0
  101. snappy/doc/other.html +160 -162
  102. snappy/doc/platonic_census.html +374 -377
  103. snappy/doc/plink.html +209 -212
  104. snappy/doc/ptolemy.html +253 -255
  105. snappy/doc/ptolemy_classes.html +1143 -1146
  106. snappy/doc/ptolemy_examples1.html +408 -410
  107. snappy/doc/ptolemy_examples2.html +470 -473
  108. snappy/doc/ptolemy_examples3.html +413 -416
  109. snappy/doc/ptolemy_examples4.html +194 -197
  110. snappy/doc/ptolemy_prelim.html +247 -250
  111. snappy/doc/py-modindex.html +164 -167
  112. snappy/doc/screenshots.html +140 -142
  113. snappy/doc/search.html +134 -137
  114. snappy/doc/searchindex.js +1 -1
  115. snappy/doc/snap.html +201 -204
  116. snappy/doc/snappy.html +180 -182
  117. snappy/doc/spherogram.html +1210 -1213
  118. snappy/doc/todo.html +165 -168
  119. snappy/doc/triangulation.html +1583 -1474
  120. snappy/doc/tutorial.html +158 -161
  121. snappy/doc/verify.html +329 -275
  122. snappy/doc/verify_internals.html +1234 -1691
  123. snappy/drilling/__init__.py +153 -235
  124. snappy/drilling/barycentric.py +103 -0
  125. snappy/drilling/constants.py +0 -2
  126. snappy/drilling/crush.py +56 -130
  127. snappy/drilling/cusps.py +12 -6
  128. snappy/drilling/debug.py +2 -1
  129. snappy/drilling/exceptions.py +7 -40
  130. snappy/drilling/moves.py +302 -243
  131. snappy/drilling/perturb.py +63 -37
  132. snappy/drilling/shorten.py +36 -0
  133. snappy/drilling/subdivide.py +0 -5
  134. snappy/drilling/test.py +23 -0
  135. snappy/drilling/test_cases.py +126 -0
  136. snappy/drilling/tracing.py +9 -37
  137. snappy/exceptions.py +18 -5
  138. snappy/exterior_to_link/barycentric_geometry.py +2 -4
  139. snappy/exterior_to_link/main.py +8 -7
  140. snappy/exterior_to_link/mcomplex_with_link.py +2 -2
  141. snappy/exterior_to_link/rational_linear_algebra.py +1 -1
  142. snappy/exterior_to_link/rational_linear_algebra_wrapped.py +1 -1
  143. snappy/exterior_to_link/test.py +21 -33
  144. snappy/geometric_structure/__init__.py +212 -0
  145. snappy/geometric_structure/cusp_neighborhood/__init__.py +3 -0
  146. snappy/geometric_structure/cusp_neighborhood/complex_cusp_cross_section.py +697 -0
  147. snappy/geometric_structure/cusp_neighborhood/cusp_cross_section_base.py +484 -0
  148. snappy/geometric_structure/cusp_neighborhood/exceptions.py +42 -0
  149. snappy/geometric_structure/cusp_neighborhood/real_cusp_cross_section.py +298 -0
  150. snappy/geometric_structure/cusp_neighborhood/tiles_for_cusp_neighborhood.py +159 -0
  151. snappy/geometric_structure/cusp_neighborhood/vertices.py +32 -0
  152. snappy/geometric_structure/geodesic/__init__.py +0 -0
  153. snappy/geometric_structure/geodesic/add_core_curves.py +152 -0
  154. snappy/geometric_structure/geodesic/avoid_core_curves.py +369 -0
  155. snappy/geometric_structure/geodesic/canonical_keys.py +52 -0
  156. snappy/geometric_structure/geodesic/check_away_from_core_curve.py +60 -0
  157. snappy/geometric_structure/geodesic/constants.py +6 -0
  158. snappy/geometric_structure/geodesic/exceptions.py +22 -0
  159. snappy/{drilling → geometric_structure/geodesic}/fixed_points.py +34 -9
  160. snappy/{drilling/geodesic_info.py → geometric_structure/geodesic/geodesic_start_point_info.py} +139 -180
  161. snappy/geometric_structure/geodesic/graph_trace_helper.py +67 -0
  162. snappy/geometric_structure/geodesic/line.py +30 -0
  163. snappy/geometric_structure/geodesic/multiplicity.py +127 -0
  164. snappy/geometric_structure/geodesic/tiles_for_geodesic.py +101 -0
  165. snappy/geometric_structure/test.py +22 -0
  166. snappy/gui.py +23 -13
  167. snappy/horoviewer.py +7 -7
  168. snappy/hyperboloid/__init__.py +96 -31
  169. snappy/hyperboloid/distances.py +245 -0
  170. snappy/hyperboloid/horoball.py +19 -0
  171. snappy/hyperboloid/line.py +35 -0
  172. snappy/hyperboloid/point.py +9 -0
  173. snappy/hyperboloid/triangle.py +29 -0
  174. snappy/isometry_signature.py +382 -0
  175. snappy/len_spec/__init__.py +596 -0
  176. snappy/len_spec/geodesic_info.py +110 -0
  177. snappy/len_spec/geodesic_key_info_dict.py +117 -0
  178. snappy/len_spec/geodesic_piece.py +143 -0
  179. snappy/len_spec/geometric_structure.py +182 -0
  180. snappy/len_spec/geometry.py +80 -0
  181. snappy/len_spec/length_spectrum_geodesic_info.py +170 -0
  182. snappy/len_spec/spine.py +206 -0
  183. snappy/len_spec/test.py +24 -0
  184. snappy/len_spec/test_cases.py +69 -0
  185. snappy/len_spec/tile.py +275 -0
  186. snappy/len_spec/word.py +86 -0
  187. snappy/math_basics.py +39 -13
  188. snappy/matrix.py +52 -9
  189. snappy/number.py +12 -6
  190. snappy/numeric_output_checker.py +2 -3
  191. snappy/pari.py +8 -4
  192. snappy/phone_home.py +2 -1
  193. snappy/polyviewer.py +8 -8
  194. snappy/ptolemy/__init__.py +1 -1
  195. snappy/ptolemy/component.py +2 -2
  196. snappy/ptolemy/coordinates.py +25 -25
  197. snappy/ptolemy/findLoops.py +9 -9
  198. snappy/ptolemy/manifoldMethods.py +27 -29
  199. snappy/ptolemy/polynomial.py +50 -57
  200. snappy/ptolemy/processFileBase.py +60 -0
  201. snappy/ptolemy/ptolemyVariety.py +109 -41
  202. snappy/ptolemy/reginaWrapper.py +4 -4
  203. snappy/ptolemy/rur.py +1 -1
  204. snappy/ptolemy/solutionsToPrimeIdealGroebnerBasis.py +9 -9
  205. snappy/ptolemy/test.py +99 -54
  206. snappy/ptolemy/utilities.py +1 -1
  207. snappy/raytracing/__init__.py +64 -0
  208. snappy/raytracing/additional_horospheres.py +64 -0
  209. snappy/raytracing/additional_len_spec_choices.py +63 -0
  210. snappy/raytracing/cohomology_fractal.py +0 -3
  211. snappy/raytracing/eyeball.py +123 -0
  212. snappy/raytracing/finite_raytracing_data.py +17 -17
  213. snappy/raytracing/finite_viewer.py +15 -15
  214. snappy/raytracing/geodesic_tube_info.py +93 -63
  215. snappy/raytracing/geodesics.py +94 -64
  216. snappy/raytracing/geodesics_window.py +56 -34
  217. snappy/raytracing/gui_utilities.py +21 -6
  218. snappy/raytracing/hyperboloid_navigation.py +29 -4
  219. snappy/raytracing/hyperboloid_utilities.py +73 -73
  220. snappy/raytracing/ideal_raytracing_data.py +121 -91
  221. snappy/raytracing/inside_viewer.py +199 -66
  222. snappy/raytracing/pack.py +22 -0
  223. snappy/raytracing/raytracing_data.py +37 -25
  224. snappy/raytracing/raytracing_view.py +70 -65
  225. snappy/raytracing/shaders/Eye.png +0 -0
  226. snappy/raytracing/shaders/NonGeometric.png +0 -0
  227. snappy/raytracing/shaders/__init__.py +39 -3
  228. snappy/raytracing/shaders/fragment.glsl +451 -133
  229. snappy/raytracing/test.py +29 -0
  230. snappy/raytracing/tooltip.py +146 -0
  231. snappy/raytracing/upper_halfspace_utilities.py +42 -9
  232. snappy/sage_helper.py +67 -134
  233. snappy/settings.py +90 -77
  234. snappy/shell.py +2 -0
  235. snappy/snap/character_varieties.py +2 -2
  236. snappy/snap/find_field.py +4 -3
  237. snappy/snap/fundamental_polyhedron.py +2 -2
  238. snappy/snap/kernel_structures.py +5 -1
  239. snappy/snap/nsagetools.py +9 -8
  240. snappy/snap/peripheral/dual_cellulation.py +4 -3
  241. snappy/snap/peripheral/peripheral.py +2 -2
  242. snappy/snap/peripheral/surface.py +5 -5
  243. snappy/snap/peripheral/test.py +1 -1
  244. snappy/snap/polished_reps.py +8 -8
  245. snappy/snap/slice_obs_HKL.py +16 -14
  246. snappy/snap/t3mlite/arrow.py +3 -3
  247. snappy/snap/t3mlite/edge.py +3 -3
  248. snappy/snap/t3mlite/homology.py +2 -2
  249. snappy/snap/t3mlite/mcomplex.py +3 -3
  250. snappy/snap/t3mlite/simplex.py +12 -0
  251. snappy/snap/t3mlite/spun.py +18 -17
  252. snappy/snap/t3mlite/test_vs_regina.py +4 -4
  253. snappy/snap/test.py +37 -53
  254. snappy/snap/utilities.py +4 -5
  255. snappy/test.py +121 -138
  256. snappy/test_cases.py +263 -0
  257. snappy/testing.py +131 -0
  258. snappy/tiling/__init__.py +2 -0
  259. snappy/tiling/canonical_key_dict.py +59 -0
  260. snappy/tiling/dict_based_set.py +79 -0
  261. snappy/tiling/floor.py +49 -0
  262. snappy/tiling/hyperboloid_dict.py +54 -0
  263. snappy/tiling/iter_utils.py +78 -0
  264. snappy/tiling/lifted_tetrahedron.py +22 -0
  265. snappy/tiling/lifted_tetrahedron_set.py +54 -0
  266. snappy/tiling/real_hash_dict.py +164 -0
  267. snappy/tiling/test.py +23 -0
  268. snappy/tiling/tile.py +215 -0
  269. snappy/tiling/triangle.py +33 -0
  270. snappy/tkterminal.py +113 -84
  271. snappy/twister/main.py +1 -7
  272. snappy/twister/twister_core.cp38-win_amd64.pyd +0 -0
  273. snappy/upper_halfspace/__init__.py +78 -17
  274. snappy/verify/__init__.py +3 -7
  275. snappy/verify/{verifyCanonical.py → canonical.py} +78 -70
  276. snappy/verify/complex_volume/adjust_torsion.py +1 -2
  277. snappy/verify/complex_volume/closed.py +13 -13
  278. snappy/verify/complex_volume/cusped.py +6 -6
  279. snappy/verify/complex_volume/extended_bloch.py +5 -8
  280. snappy/verify/{cuspTranslations.py → cusp_translations.py} +1 -1
  281. snappy/verify/edge_equations.py +80 -0
  282. snappy/verify/exceptions.py +0 -55
  283. snappy/verify/{verifyHyperbolicity.py → hyperbolicity.py} +3 -3
  284. snappy/verify/interval_newton_shapes_engine.py +7 -5
  285. snappy/verify/interval_tree.py +5 -5
  286. snappy/verify/krawczyk_shapes_engine.py +17 -18
  287. snappy/verify/maximal_cusp_area_matrix/__init__.py +7 -74
  288. snappy/verify/maximal_cusp_area_matrix/cusp_tiling_engine.py +3 -4
  289. snappy/verify/maximal_cusp_area_matrix/cusp_translate_engine.py +1 -1
  290. snappy/verify/{realAlgebra.py → real_algebra.py} +1 -1
  291. snappy/verify/shapes.py +5 -3
  292. snappy/verify/short_slopes.py +39 -41
  293. snappy/verify/{squareExtensions.py → square_extensions.py} +14 -11
  294. snappy/verify/test.py +57 -60
  295. snappy/verify/upper_halfspace/extended_matrix.py +1 -1
  296. snappy/verify/upper_halfspace/finite_point.py +3 -4
  297. snappy/verify/upper_halfspace/ideal_point.py +9 -9
  298. snappy/verify/volume.py +2 -2
  299. snappy/version.py +2 -2
  300. {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/METADATA +14 -10
  301. snappy-3.2.dist-info/RECORD +503 -0
  302. {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/WHEEL +1 -1
  303. {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/top_level.txt +6 -1
  304. snappy/__pycache__/__init__.cpython-38.pyc +0 -0
  305. snappy/__pycache__/browser.cpython-38.pyc +0 -0
  306. snappy/__pycache__/cache.cpython-38.pyc +0 -0
  307. snappy/__pycache__/database.cpython-38.pyc +0 -0
  308. snappy/__pycache__/db_utilities.cpython-38.pyc +0 -0
  309. snappy/__pycache__/decorated_isosig.cpython-38.pyc +0 -0
  310. snappy/__pycache__/exceptions.cpython-38.pyc +0 -0
  311. snappy/__pycache__/export_stl.cpython-38.pyc +0 -0
  312. snappy/__pycache__/filedialog.cpython-38.pyc +0 -0
  313. snappy/__pycache__/gui.cpython-38.pyc +0 -0
  314. snappy/__pycache__/horoviewer.cpython-38.pyc +0 -0
  315. snappy/__pycache__/math_basics.cpython-38.pyc +0 -0
  316. snappy/__pycache__/matrix.cpython-38.pyc +0 -0
  317. snappy/__pycache__/number.cpython-38.pyc +0 -0
  318. snappy/__pycache__/numeric_output_checker.cpython-38.pyc +0 -0
  319. snappy/__pycache__/pari.cpython-38.pyc +0 -0
  320. snappy/__pycache__/polyviewer.cpython-38.pyc +0 -0
  321. snappy/__pycache__/sage_helper.cpython-38.pyc +0 -0
  322. snappy/__pycache__/version.cpython-38.pyc +0 -0
  323. snappy/doc/_sources/verify_canon.rst.txt +0 -90
  324. snappy/doc/_static/jquery-3.6.0.js +0 -10881
  325. snappy/doc/_static/js/html5shiv-printshiv.min.js +0 -4
  326. snappy/doc/_static/js/html5shiv.min.js +0 -4
  327. snappy/doc/_static/underscore-1.13.1.js +0 -2042
  328. snappy/doc/_static/underscore.js +0 -6
  329. snappy/doc/verify_canon.html +0 -304
  330. snappy/drilling/__pycache__/__init__.cpython-38.pyc +0 -0
  331. snappy/drilling/__pycache__/constants.cpython-38.pyc +0 -0
  332. snappy/drilling/__pycache__/crush.cpython-38.pyc +0 -0
  333. snappy/drilling/__pycache__/cusps.cpython-38.pyc +0 -0
  334. snappy/drilling/__pycache__/debug.cpython-38.pyc +0 -0
  335. snappy/drilling/__pycache__/epsilons.cpython-38.pyc +0 -0
  336. snappy/drilling/__pycache__/exceptions.cpython-38.pyc +0 -0
  337. snappy/drilling/__pycache__/fixed_points.cpython-38.pyc +0 -0
  338. snappy/drilling/__pycache__/geodesic_info.cpython-38.pyc +0 -0
  339. snappy/drilling/__pycache__/geodesic_tube.cpython-38.pyc +0 -0
  340. snappy/drilling/__pycache__/geometric_structure.cpython-38.pyc +0 -0
  341. snappy/drilling/__pycache__/line.cpython-38.pyc +0 -0
  342. snappy/drilling/__pycache__/moves.cpython-38.pyc +0 -0
  343. snappy/drilling/__pycache__/peripheral_curves.cpython-38.pyc +0 -0
  344. snappy/drilling/__pycache__/perturb.cpython-38.pyc +0 -0
  345. snappy/drilling/__pycache__/quotient_space.cpython-38.pyc +0 -0
  346. snappy/drilling/__pycache__/spatial_dict.cpython-38.pyc +0 -0
  347. snappy/drilling/__pycache__/subdivide.cpython-38.pyc +0 -0
  348. snappy/drilling/__pycache__/tracing.cpython-38.pyc +0 -0
  349. snappy/drilling/geodesic_tube.py +0 -441
  350. snappy/drilling/geometric_structure.py +0 -366
  351. snappy/drilling/line.py +0 -122
  352. snappy/drilling/quotient_space.py +0 -94
  353. snappy/drilling/spatial_dict.py +0 -128
  354. snappy/exterior_to_link/__pycache__/__init__.cpython-38.pyc +0 -0
  355. snappy/exterior_to_link/__pycache__/barycentric_geometry.cpython-38.pyc +0 -0
  356. snappy/exterior_to_link/__pycache__/exceptions.cpython-38.pyc +0 -0
  357. snappy/exterior_to_link/__pycache__/hyp_utils.cpython-38.pyc +0 -0
  358. snappy/exterior_to_link/__pycache__/link_projection.cpython-38.pyc +0 -0
  359. snappy/exterior_to_link/__pycache__/main.cpython-38.pyc +0 -0
  360. snappy/exterior_to_link/__pycache__/mcomplex_with_expansion.cpython-38.pyc +0 -0
  361. snappy/exterior_to_link/__pycache__/mcomplex_with_link.cpython-38.pyc +0 -0
  362. snappy/exterior_to_link/__pycache__/mcomplex_with_memory.cpython-38.pyc +0 -0
  363. snappy/exterior_to_link/__pycache__/pl_utils.cpython-38.pyc +0 -0
  364. snappy/exterior_to_link/__pycache__/put_in_S3.cpython-38.pyc +0 -0
  365. snappy/exterior_to_link/__pycache__/rational_linear_algebra.cpython-38.pyc +0 -0
  366. snappy/exterior_to_link/__pycache__/simplify_to_base_tri.cpython-38.pyc +0 -0
  367. snappy/exterior_to_link/__pycache__/stored_moves.cpython-38.pyc +0 -0
  368. snappy/hyperboloid/__pycache__/__init__.cpython-38.pyc +0 -0
  369. snappy/manifolds/__pycache__/__init__.cpython-38.pyc +0 -0
  370. snappy/ptolemy/__pycache__/__init__.cpython-38.pyc +0 -0
  371. snappy/ptolemy/__pycache__/component.cpython-38.pyc +0 -0
  372. snappy/ptolemy/__pycache__/coordinates.cpython-38.pyc +0 -0
  373. snappy/ptolemy/__pycache__/fieldExtensions.cpython-38.pyc +0 -0
  374. snappy/ptolemy/__pycache__/findLoops.cpython-38.pyc +0 -0
  375. snappy/ptolemy/__pycache__/homology.cpython-38.pyc +0 -0
  376. snappy/ptolemy/__pycache__/manifoldMethods.cpython-38.pyc +0 -0
  377. snappy/ptolemy/__pycache__/matrix.cpython-38.pyc +0 -0
  378. snappy/ptolemy/__pycache__/numericalSolutionsToGroebnerBasis.cpython-38.pyc +0 -0
  379. snappy/ptolemy/__pycache__/polynomial.cpython-38.pyc +0 -0
  380. snappy/ptolemy/__pycache__/processComponents.cpython-38.pyc +0 -0
  381. snappy/ptolemy/__pycache__/processFileBase.cpython-38.pyc +0 -0
  382. snappy/ptolemy/__pycache__/processFileDispatch.cpython-38.pyc +0 -0
  383. snappy/ptolemy/__pycache__/processMagmaFile.cpython-38.pyc +0 -0
  384. snappy/ptolemy/__pycache__/processRurFile.cpython-38.pyc +0 -0
  385. snappy/ptolemy/__pycache__/ptolemyGeneralizedObstructionClass.cpython-38.pyc +0 -0
  386. snappy/ptolemy/__pycache__/ptolemyObstructionClass.cpython-38.pyc +0 -0
  387. snappy/ptolemy/__pycache__/ptolemyVariety.cpython-38.pyc +0 -0
  388. snappy/ptolemy/__pycache__/ptolemyVarietyPrimeIdealGroebnerBasis.cpython-38.pyc +0 -0
  389. snappy/ptolemy/__pycache__/rur.cpython-38.pyc +0 -0
  390. snappy/ptolemy/__pycache__/solutionsToPrimeIdealGroebnerBasis.cpython-38.pyc +0 -0
  391. snappy/ptolemy/__pycache__/utilities.cpython-38.pyc +0 -0
  392. snappy/snap/__pycache__/__init__.cpython-38.pyc +0 -0
  393. snappy/snap/__pycache__/character_varieties.cpython-38.pyc +0 -0
  394. snappy/snap/__pycache__/fundamental_polyhedron.cpython-38.pyc +0 -0
  395. snappy/snap/__pycache__/interval_reps.cpython-38.pyc +0 -0
  396. snappy/snap/__pycache__/kernel_structures.cpython-38.pyc +0 -0
  397. snappy/snap/__pycache__/mcomplex_base.cpython-38.pyc +0 -0
  398. snappy/snap/__pycache__/nsagetools.cpython-38.pyc +0 -0
  399. snappy/snap/__pycache__/polished_reps.cpython-38.pyc +0 -0
  400. snappy/snap/__pycache__/shapes.cpython-38.pyc +0 -0
  401. snappy/snap/__pycache__/slice_obs_HKL.cpython-38.pyc +0 -0
  402. snappy/snap/__pycache__/utilities.cpython-38.pyc +0 -0
  403. snappy/snap/peripheral/__pycache__/__init__.cpython-38.pyc +0 -0
  404. snappy/snap/peripheral/__pycache__/dual_cellulation.cpython-38.pyc +0 -0
  405. snappy/snap/peripheral/__pycache__/link.cpython-38.pyc +0 -0
  406. snappy/snap/peripheral/__pycache__/peripheral.cpython-38.pyc +0 -0
  407. snappy/snap/peripheral/__pycache__/surface.cpython-38.pyc +0 -0
  408. snappy/snap/t3mlite/__pycache__/__init__.cpython-38.pyc +0 -0
  409. snappy/snap/t3mlite/__pycache__/arrow.cpython-38.pyc +0 -0
  410. snappy/snap/t3mlite/__pycache__/corner.cpython-38.pyc +0 -0
  411. snappy/snap/t3mlite/__pycache__/edge.cpython-38.pyc +0 -0
  412. snappy/snap/t3mlite/__pycache__/face.cpython-38.pyc +0 -0
  413. snappy/snap/t3mlite/__pycache__/files.cpython-38.pyc +0 -0
  414. snappy/snap/t3mlite/__pycache__/homology.cpython-38.pyc +0 -0
  415. snappy/snap/t3mlite/__pycache__/linalg.cpython-38.pyc +0 -0
  416. snappy/snap/t3mlite/__pycache__/mcomplex.cpython-38.pyc +0 -0
  417. snappy/snap/t3mlite/__pycache__/perm4.cpython-38.pyc +0 -0
  418. snappy/snap/t3mlite/__pycache__/simplex.cpython-38.pyc +0 -0
  419. snappy/snap/t3mlite/__pycache__/spun.cpython-38.pyc +0 -0
  420. snappy/snap/t3mlite/__pycache__/surface.cpython-38.pyc +0 -0
  421. snappy/snap/t3mlite/__pycache__/tetrahedron.cpython-38.pyc +0 -0
  422. snappy/snap/t3mlite/__pycache__/vertex.cpython-38.pyc +0 -0
  423. snappy/togl/__init__.py +0 -3
  424. snappy/togl/darwin-tk8.6/Togl2.1/LICENSE +0 -28
  425. snappy/togl/darwin-tk8.6/Togl2.1/libTogl2.1.dylib +0 -0
  426. snappy/togl/darwin-tk8.6/Togl2.1/pkgIndex.tcl +0 -5
  427. snappy/togl/darwin-tk8.7/Togl2.1/LICENSE +0 -28
  428. snappy/togl/darwin-tk8.7/Togl2.1/libTogl2.1.dylib +0 -0
  429. snappy/togl/darwin-tk8.7/Togl2.1/pkgIndex.tcl +0 -5
  430. snappy/togl/linux2-x86_64-tk8.6/Togl2.1/LICENSE +0 -28
  431. snappy/togl/linux2-x86_64-tk8.6/Togl2.1/libTogl2.1.so +0 -0
  432. snappy/togl/linux2-x86_64-tk8.6/Togl2.1/pkgIndex.tcl +0 -5
  433. snappy/togl/win32VC-tk8.6/Togl2.1/LICENSE +0 -28
  434. snappy/togl/win32VC-tk8.6/Togl2.1/Togl21.dll +0 -0
  435. snappy/togl/win32VC-tk8.6/Togl2.1/Togl21.lib +0 -0
  436. snappy/togl/win32VC-tk8.6/Togl2.1/pkgIndex.tcl +0 -6
  437. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/LICENSE +0 -28
  438. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/Togl21.dll +0 -0
  439. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/Togl21.lib +0 -0
  440. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/pkgIndex.tcl +0 -6
  441. snappy/twister/__pycache__/__init__.cpython-38.pyc +0 -0
  442. snappy/twister/__pycache__/main.cpython-38.pyc +0 -0
  443. snappy/upper_halfspace/__pycache__/__init__.cpython-38.pyc +0 -0
  444. snappy/upper_halfspace/__pycache__/ideal_point.cpython-38.pyc +0 -0
  445. snappy/verify/__pycache__/__init__.cpython-38.pyc +0 -0
  446. snappy/verify/__pycache__/cuspCrossSection.cpython-38.pyc +0 -0
  447. snappy/verify/__pycache__/cuspTranslations.cpython-38.pyc +0 -0
  448. snappy/verify/__pycache__/cusp_areas.cpython-38.pyc +0 -0
  449. snappy/verify/__pycache__/cusp_shapes.cpython-38.pyc +0 -0
  450. snappy/verify/__pycache__/exceptions.cpython-38.pyc +0 -0
  451. snappy/verify/__pycache__/interval_newton_shapes_engine.cpython-38.pyc +0 -0
  452. snappy/verify/__pycache__/interval_tree.cpython-38.pyc +0 -0
  453. snappy/verify/__pycache__/krawczyk_shapes_engine.cpython-38.pyc +0 -0
  454. snappy/verify/__pycache__/realAlgebra.cpython-38.pyc +0 -0
  455. snappy/verify/__pycache__/shapes.cpython-38.pyc +0 -0
  456. snappy/verify/__pycache__/short_slopes.cpython-38.pyc +0 -0
  457. snappy/verify/__pycache__/squareExtensions.cpython-38.pyc +0 -0
  458. snappy/verify/__pycache__/verifyCanonical.cpython-38.pyc +0 -0
  459. snappy/verify/__pycache__/verifyHyperbolicity.cpython-38.pyc +0 -0
  460. snappy/verify/__pycache__/volume.cpython-38.pyc +0 -0
  461. snappy/verify/complex_volume/__pycache__/__init__.cpython-38.pyc +0 -0
  462. snappy/verify/complex_volume/__pycache__/adjust_torsion.cpython-38.pyc +0 -0
  463. snappy/verify/complex_volume/__pycache__/closed.cpython-38.pyc +0 -0
  464. snappy/verify/complex_volume/__pycache__/compute_ptolemys.cpython-38.pyc +0 -0
  465. snappy/verify/complex_volume/__pycache__/cusped.cpython-38.pyc +0 -0
  466. snappy/verify/complex_volume/__pycache__/extended_bloch.cpython-38.pyc +0 -0
  467. snappy/verify/cuspCrossSection.py +0 -1422
  468. snappy/verify/maximal_cusp_area_matrix/__pycache__/__init__.cpython-38.pyc +0 -0
  469. snappy/verify/maximal_cusp_area_matrix/__pycache__/cusp_tiling_engine.cpython-38.pyc +0 -0
  470. snappy/verify/maximal_cusp_area_matrix/__pycache__/cusp_translate_engine.cpython-38.pyc +0 -0
  471. snappy/verify/upper_halfspace/__pycache__/__init__.cpython-38.pyc +0 -0
  472. snappy/verify/upper_halfspace/__pycache__/extended_matrix.cpython-38.pyc +0 -0
  473. snappy/verify/upper_halfspace/__pycache__/finite_point.cpython-38.pyc +0 -0
  474. snappy/verify/upper_halfspace/__pycache__/ideal_point.cpython-38.pyc +0 -0
  475. snappy-3.1.1.dist-info/RECORD +0 -575
  476. {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/entry_points.txt +0 -0
snappy/test.py CHANGED
@@ -1,26 +1,31 @@
1
+ import os
1
2
  import sys
2
- import getopt
3
+ import glob
4
+ import argparse
3
5
  import snappy
4
6
  import snappy.snap.test
5
7
  import spherogram.test
6
8
  import snappy.matrix
7
9
  import snappy.verify.test
10
+ import snappy.geometric_structure.test
8
11
  import snappy.ptolemy.test
9
- import snappy.raytracing.cohomology_fractal
10
- import snappy.raytracing.geodesic_tube_info
11
- import snappy.raytracing.geodesics
12
- import snappy.raytracing.ideal_raytracing_data
13
- import snappy.raytracing.upper_halfspace_utilities
14
- import snappy.drilling
12
+ import snappy.tiling.test
13
+ import snappy.cusps.test
14
+ import snappy.raytracing.test
15
+ import snappy.len_spec.test
16
+ import snappy.drilling.test
17
+ import snappy.canonical
18
+ import snappy.cusps.cusp_area_matrix
19
+ import snappy.cusps.cusp_areas_from_matrix
20
+ import snappy.isometry_signature
15
21
  import snappy.exterior_to_link.test
16
22
  import snappy.pari
23
+ import snappy.test_cases
24
+ import snappy.numeric_output_checker
17
25
 
18
- from snappy.sage_helper import (_within_sage, doctest_modules, cyopengl_works,
19
- tk_root, root_is_fake, DocTestParser)
20
- from snappy import numeric_output_checker
21
- modules = []
22
-
23
- snappy.database.Manifold = snappy.SnapPy.Manifold
26
+ from snappy.sage_helper import _within_sage
27
+ from snappy.testing import (doctest_modules, cyopengl_works,
28
+ tk_root, root_is_fake, DocTestParser)
24
29
 
25
30
  # Augment tests for SnapPy with those that Cython missed
26
31
 
@@ -43,91 +48,55 @@ browser_tests = [x for x in snappy.SnapPyHP.__test__
43
48
  for key in identify_tests + triangulation_tests + browser_tests:
44
49
  snappy.SnapPyHP.__test__.pop(key)
45
50
 
51
+ def additional_doctests(verbose=False, print_info=True):
52
+ """
53
+ I noticed that some of my changes to move code from here into
54
+ its own files caused some loss of test coverage.
46
55
 
47
- def snap_doctester(verbose):
48
- return snappy.snap.test.run_doctests(verbose, print_info=False)
49
-
50
-
51
- snap_doctester.__name__ = 'snappy.snap'
52
-
53
-
54
- def snappy_database_doctester(verbose):
55
- # snappy_manifolds's tests is still relying on
56
- # SnapPy Number's _accuracy_for_testing.
57
- #
58
- # Switch to snappy conversion until snappy_manifolds is
59
- # is updated.
60
- snappy.number.use_field_conversion('snappy')
61
- snappy.number.Number._accuracy_for_testing = 8
62
- ans = doctest_modules([snappy.database], verbose)
63
- snappy.number.Number._accuracy_for_testing = None
64
- if _within_sage:
65
- snappy.number.use_field_conversion('sage')
66
-
67
- return ans
68
-
69
-
70
- snappy_database_doctester.__name__ = 'snappy.database'
71
-
72
-
73
- def spherogram_doctester(verbose):
74
- ans = spherogram.test.run_doctests(verbose, print_info=False)
75
-
76
- # Spherogram's testing is switching to SnapPy numbers and
77
- # setting their accuracy.
78
- # Switch back to Sage types until Spherogram has been updated.
79
- snappy.number.Number._accuracy_for_testing = None
80
- if _within_sage:
81
- snappy.number.use_field_conversion('sage')
82
-
83
- return ans
84
-
85
-
86
- spherogram_doctester.__name__ = 'spherogram'
87
-
88
-
89
- def ptolemy_doctester(verbose):
90
- return snappy.ptolemy.test.run_doctests(verbose, print_info=False)
91
-
92
-
93
- ptolemy_doctester.__name__ = 'snappy.ptolemy'
94
-
95
- modules += [numeric_output_checker.run_doctests]
96
-
97
- if not _within_sage:
98
- modules.append(snappy.number)
99
-
100
- modules += [snappy.SnapPy,
101
- snappy.SnapPyHP,
102
- snappy_database_doctester,
103
- snappy,
104
- snap_doctester,
105
- snappy.matrix,
106
- snappy.raytracing.cohomology_fractal,
107
- snappy.raytracing.geodesic_tube_info,
108
- snappy.raytracing.geodesics,
109
- snappy.raytracing.ideal_raytracing_data,
110
- snappy.raytracing.upper_halfspace_utilities,
111
- snappy.drilling,
112
- ptolemy_doctester,
113
- spherogram_doctester]
56
+ In a panic, adding them explicitly here.
114
57
 
58
+ There ought to be a better way to do this...
59
+ """
115
60
 
116
- def snappy_verify_doctester(verbose):
117
- return snappy.verify.test.run_doctests(verbose, print_info=False)
118
-
119
-
120
- snappy_verify_doctester.__name__ = 'snappy.verify'
121
- modules.append(snappy_verify_doctester)
122
-
123
-
124
- def snappy_exterior_to_link_doctester(verbose):
125
- return snappy.exterior_to_link.test.run_doctests(verbose, print_info=False)
126
-
127
-
128
- snappy_exterior_to_link_doctester.__name__ = 'snappy.exterior_to_link'
129
- modules.insert(0, snappy_exterior_to_link_doctester)
130
-
61
+ globs = {'Manifold' : snappy.Manifold,
62
+ 'ManifoldHP' : snappy.ManifoldHP}
63
+ return doctest_modules(
64
+ [ snappy.isometry_signature,
65
+ snappy.canonical,
66
+ snappy.cusps.cusp_area_matrix,
67
+ snappy.cusps.cusp_areas_from_matrix
68
+ ],
69
+ verbose=verbose,
70
+ print_info=print_info,
71
+ extraglobs = globs)
72
+ additional_doctests.__name__ = 'snappy.<HARD TO REACH>'
73
+
74
+ modules = [
75
+ snappy.exterior_to_link.test.run_doctests,
76
+ snappy.numeric_output_checker.run_doctests,
77
+ snappy.number,
78
+ snappy.SnapPy,
79
+ snappy.SnapPyHP,
80
+ snappy.database,
81
+ additional_doctests,
82
+ snappy,
83
+ snappy.snap.test.run_doctests,
84
+ snappy.matrix,
85
+ snappy.geometric_structure.test.run_doctests,
86
+ snappy.tiling.test.run_doctests,
87
+ snappy.cusps.test.run_doctests,
88
+ snappy.raytracing.test.run_doctests,
89
+ snappy.len_spec.test.run_doctests,
90
+ snappy.drilling.test.run_doctests,
91
+ snappy.ptolemy.test.run_doctests,
92
+ spherogram.test.run_doctests,
93
+ snappy.verify.test.run_doctests,
94
+ snappy.test_cases
95
+ ]
96
+
97
+ slow_modules = [
98
+ snappy.ptolemy.test.run_ptolemy_tests
99
+ ]
131
100
 
132
101
  def graphics_failures(verbose, windows, use_modernopengl):
133
102
  if cyopengl_works():
@@ -138,7 +107,7 @@ def graphics_failures(verbose, windows, use_modernopengl):
138
107
  snappy.Manifold('m125').cusp_neighborhood().view().test()
139
108
  if use_modernopengl:
140
109
  snappy.Manifold('m004').inside_view().test()
141
- snappy.Manifold('4_1').browse().test()
110
+ snappy.Manifold('4_1').browse().test(use_modernopengl=use_modernopengl)
142
111
  snappy.ManifoldHP('m004').dirichlet_domain().view().test()
143
112
  snappy.ManifoldHP('m125').cusp_neighborhood().view().test()
144
113
  if use_modernopengl:
@@ -150,77 +119,91 @@ def graphics_failures(verbose, windows, use_modernopengl):
150
119
  print('Close the root window to finish.')
151
120
  else:
152
121
  print('The windows will close in a few seconds.\n'
153
- 'Specify -w or --windows to avoid this.')
122
+ 'Specify -w or --windows to avoid this.')
154
123
  root.after(7000, root.destroy)
155
124
  root.mainloop()
156
125
  else:
157
- print("***Warning***: CyOpenGL not installed, so not tested")
126
+ print("***Warning***: Could not test CyOpenGL.")
127
+ try:
128
+ import snappy.CyOpenGL
129
+ print("Reason: Unsuitable Tk configuration for CyOpenGL")
130
+ except ImportError as e:
131
+ print("Reason: CyOpenGL could not be imported, %r" % e)
158
132
  result = 0
159
133
  return result
160
134
 
161
135
 
136
+ def check_for_docs():
137
+ path = os.path.dirname(snappy.__file__)
138
+ match = os.path.join(path, 'doc', '*.html')
139
+ html_files = [os.path.basename(file) for file in glob.glob(match)]
140
+ if len(html_files) > 20 and 'index.html' in html_files:
141
+ print('HTML docs are included.')
142
+ else:
143
+ print('WARNING: HTML docs are missing!')
144
+
145
+
162
146
  def runtests(verbose=False,
163
147
  quick=False,
164
148
  windows=False,
165
- use_modernopengl=True):
149
+ use_modernopengl=True,
150
+ graphics=True):
166
151
 
167
152
  # The default PARI stacksize can (slightly) overflow, causing
168
153
  # doctests to fail.
169
154
  snappy.pari.allocatemem(2**24, 2**25, silent=True)
170
155
 
171
- DocTestParser.use_modernopengl = use_modernopengl
156
+ DocTestParser.use_cymodernopengl = use_modernopengl
157
+
158
+ all_modules = modules
159
+ if not quick:
160
+ all_modules += slow_modules
161
+
162
+ result = doctest_modules(
163
+ all_modules, verbose=verbose, print_info=True)
172
164
 
173
- result = doctest_modules(modules, verbose=verbose)
174
165
  if not quick:
175
- print()
176
- # No idea why we mess and set snappy.database.Manifold
177
- # to SnapPy.Manifold above... But to make ptolemy work,
178
- # temporarily setting it to what it should be.
179
- original_db_manifold = snappy.database.Manifold
180
- snappy.database.Manifold = snappy.Manifold
181
- snappy.ptolemy.test.main(verbose=verbose, doctest=False)
182
- snappy.database.Manifold = original_db_manifold
183
166
  print()
184
167
  spherogram.links.test.run()
185
168
  print('\nAll doctests:\n %s failures out of %s tests.' % result)
186
169
 
187
- num_graphics_failures = graphics_failures(
188
- verbose=verbose,
189
- windows=windows,
190
- use_modernopengl=use_modernopengl)
170
+ if graphics:
171
+ num_graphics_failures = graphics_failures(
172
+ verbose=verbose,
173
+ windows=windows,
174
+ use_modernopengl=use_modernopengl)
175
+ else:
176
+ num_graphics_failures = 0
191
177
 
192
178
  print('Pari stacksize', snappy.pari.stacksize(),
193
179
  'max stack size', snappy.pari.stacksizemax())
180
+
181
+ check_for_docs()
194
182
  return result.failed + num_graphics_failures
195
183
 
196
184
 
197
185
  if __name__ == '__main__':
198
-
199
186
  verbose = False
200
187
  quick = False
201
188
  windows = False
202
189
  use_modernopengl = True
203
-
204
- try:
205
- useful_args = [arg for arg in sys.argv[1:] if not arg.startswith('-psn_')]
206
- optlist, args = getopt.getopt(
207
- useful_args,
208
- 'ivqws',
209
- ['ignore', 'verbose', 'quick', 'windows', 'skip-modern-opengl'])
210
- opts = [o[0] for o in optlist]
211
- if '-v' in opts or '--verbose' in opts:
212
- verbose = True
213
- if '-q' in opts or '--quick' in opts:
214
- quick = True
215
- if '-w' in opts or '--windows' in opts:
216
- windows = True
217
- if '-s' in opts or '--skip-modern-opengl' in opts:
218
- use_modernopengl = False
219
-
220
- except getopt.GetoptError:
221
- print("Could not parse arguments")
222
-
223
- sys.exit(runtests(verbose=verbose,
224
- quick=quick,
225
- windows=windows,
226
- use_modernopengl=use_modernopengl))
190
+ graphics = True
191
+
192
+ useful_args = [arg for arg in sys.argv[1:] if not arg.startswith('-psn_')]
193
+
194
+ parser = argparse.ArgumentParser()
195
+ parser.add_argument('-v', '--verbose', action='store_true',
196
+ help='show additional information')
197
+ parser.add_argument('-q', '--quick', action='store_true',
198
+ help='skip ptolemy and spherogram.links tests.')
199
+ parser.add_argument('-w', '--windows', action='store_true',
200
+ help='keep windows open until user closes root window.')
201
+ parser.add_argument('-s', '--skip-modern-opengl', action='store_false',
202
+ dest='use_modernopengl',
203
+ help='skip tests requiring OpenGL 3.2 or later.')
204
+ parser.add_argument('-g', '--skip-gui', action='store_false',
205
+ dest='graphics',
206
+ help='skip tests bringing up GUI windows.')
207
+ args = parser.parse_args(useful_args)
208
+
209
+ sys.exit(runtests(**vars(args)))
snappy/test_cases.py ADDED
@@ -0,0 +1,263 @@
1
+ """
2
+ IMPORTANT: Python only recognises this as a doc string if there is
3
+ nothing before it. In particular, add any includes after the doc string.
4
+
5
+ Doc tests that we do not want to show up in the documentation.
6
+
7
+ Decorated isomorphism signature
8
+ -------------------------------
9
+
10
+ An example where the isosig doesn't pick up the identity perm
11
+ because the lexicographic order of the perm interacts with the
12
+ matrices.
13
+
14
+ >>> T = Triangulation("L6n1(0,0)(0,0)(0,0)")
15
+ >>> T.triangulation_isosig()
16
+ 'gLMzQbcdefffaelaaai_acbBaabCbbabbBC'
17
+
18
+ Test that slopes are computed correctly.
19
+
20
+ >>> M=Manifold("L14n63023(-5,1)(5,1)(10,1)")
21
+ >>> M.triangulation_isosig(decorated=False, ignore_orientation=False)
22
+ 'vLLvvLLMALQQzQQceillmnppqrlmrqtruututiivimllaelaqxrvdoxqltt'
23
+
24
+ The canonical orientation (used to compute the unoriented isosig)
25
+ is the reverse of the actual orientation:
26
+
27
+ >>> M.triangulation_isosig(decorated=False)
28
+ 'vLLvLLPwPQLAMPQcefikkmnplkopqrsttutuuiixvimqlippawidlabavth'
29
+ >>> Mop = M.copy()
30
+ >>> Mop.reverse_orientation()
31
+ >>> Mop.triangulation_isosig(decorated=False, ignore_orientation=False)
32
+ 'vLLvLLPwPQLAMPQcefikkmnplkopqrsttutuuiixvimqlippawidlabavth'
33
+
34
+ So we expect the oriented isometry signature to flip when neither the isomorphism
35
+ signature nor its decoration capture the orientation.
36
+
37
+ The following is a baked version of snappy.decorated_isosig.test_slope_transformations().
38
+ The 32 calls to ManifoldHP.isometry_signature are just too expensive for the test suite.
39
+
40
+ >>> for ignore_cusp_ordering in [False, True]:
41
+ ... for ignore_curves in [False, True]:
42
+ ... for ignore_curve_orientations in [False, True]:
43
+ ... for ignore_filling_orientations in [False, True]:
44
+ ... for ignore_orientation in [False, True]:
45
+ ... isosig = M.triangulation_isosig(
46
+ ... ignore_cusp_ordering = ignore_cusp_ordering,
47
+ ... ignore_curves = ignore_curves,
48
+ ... ignore_curve_orientations = ignore_curve_orientations,
49
+ ... ignore_filling_orientations = ignore_filling_orientations,
50
+ ... ignore_orientation = ignore_orientation)
51
+ ... print(isosig)
52
+ vLLvvLLMALQQzQQceillmnppqrlmrqtruututiivimllaelaqxrvdoxqltt_dcbaabBBBbBaBbCbBbCb(-5,1)(5,1)(10,1)(0,0)
53
+ vLLvLLPwPQLAMPQcefikkmnplkopqrsttutuuiixvimqlippawidlabavth_cabdBacbbBCbaBBBbabB(-5,1)(5,1)(10,1)(0,0)
54
+ vLLvvLLMALQQzQQceillmnppqrlmrqtruututiivimllaelaqxrvdoxqltt_dcbaabBBBbBaBbCbBbCb(-5,1)(5,1)(10,1)(0,0)
55
+ vLLvLLPwPQLAMPQcefikkmnplkopqrsttutuuiixvimqlippawidlabavth_cabdBacbbBCbaBBBbabB(-5,1)(5,1)(10,1)(0,0)
56
+ vLLvvLLMALQQzQQceillmnppqrlmrqtruututiivimllaelaqxrvdoxqltt_dcbaabBBbBbabBcBbBcB(-5,1)(-5,-1)(-10,-1)(0,0)
57
+ vLLvLLPwPQLAMPQcefikkmnplkopqrsttutuuiixvimqlippawidlabavth_cabdbacbbBcBabBBbaBb(5,1)(5,-1)(-10,1)(0,0)
58
+ vLLvvLLMALQQzQQceillmnppqrlmrqtruututiivimllaelaqxrvdoxqltt_dcbaabBBbBbabBcBbBcB(-5,1)(5,1)(10,1)(0,0)
59
+ vLLvLLPwPQLAMPQcefikkmnplkopqrsttutuuiixvimqlippawidlabavth_cabdbacbbBcBabBBbaBb(5,1)(-5,1)(-10,1)(0,0)
60
+ vLLvvLLMALQQzQQceillmnppqrlmrqtruututiivimllaelaqxrvdoxqltt_dcba(-1,-6)(-6,5)(-12,11)(0,0)
61
+ vLLvLLPwPQLAMPQcefikkmnplkopqrsttutuuiixvimqlippawidlabavth_cabd(7,1)(3,-4)(-1,-11)(0,0)
62
+ vLLvvLLMALQQzQQceillmnppqrlmrqtruututiivimllaelaqxrvdoxqltt_dcba(1,6)(-6,5)(-12,11)(0,0)
63
+ vLLvLLPwPQLAMPQcefikkmnplkopqrsttutuuiixvimqlippawidlabavth_cabd(7,1)(-3,4)(1,11)(0,0)
64
+ vLLvvLLMALQQzQQceillmnppqrlmrqtruututiivimllaelaqxrvdoxqltt_dcba(-1,-6)(-6,5)(-12,11)(0,0)
65
+ vLLvLLPwPQLAMPQcefikkmnplkopqrsttutuuiixvimqlippawidlabavth_cabd(7,1)(3,-4)(-1,-11)(0,0)
66
+ vLLvvLLMALQQzQQceillmnppqrlmrqtruututiivimllaelaqxrvdoxqltt_dcba(1,6)(-6,5)(-12,11)(0,0)
67
+ vLLvLLPwPQLAMPQcefikkmnplkopqrsttutuuiixvimqlippawidlabavth_cabd(7,1)(-3,4)(1,11)(0,0)
68
+ vLLvvLLMALQQzQQceillmnppqrlmrqtruututiivimllaelaqxrvdoxqltt_BbCbBbCbBbBaabBB(0,0)(10,1)(5,1)(-5,1)
69
+ vLLvLLPwPQLAMPQcefikkmnplkopqrsttutuuiixvimqlippawidlabavth_aBBBBacbbBCbbabB(10,1)(-5,1)(5,1)(0,0)
70
+ vLLvvLLMALQQzQQceillmnppqrlmrqtruututiivimllaelaqxrvdoxqltt_BbCbBbCbBbBaabBB(0,0)(10,1)(5,1)(-5,1)
71
+ vLLvLLPwPQLAMPQcefikkmnplkopqrsttutuuiixvimqlippawidlabavth_aBBBBacbbBCbbabB(10,1)(-5,1)(5,1)(0,0)
72
+ vLLvvLLMALQQzQQceillmnppqrlmrqtruututiivimllaelaqxrvdoxqltt_bBcBbBcBbBbaabBB(0,0)(-10,-1)(-5,-1)(-5,1)
73
+ vLLvLLPwPQLAMPQcefikkmnplkopqrsttutuuiixvimqlippawidlabavth_abBBbacbbBcBbaBb(-10,1)(5,1)(5,-1)(0,0)
74
+ vLLvvLLMALQQzQQceillmnppqrlmrqtruututiivimllaelaqxrvdoxqltt_bBcBbBcBbBbaabBB(0,0)(10,1)(5,1)(-5,1)
75
+ vLLvLLPwPQLAMPQcefikkmnplkopqrsttutuuiixvimqlippawidlabavth_abBBbacbbBcBbaBb(-10,1)(5,1)(-5,1)(0,0)
76
+ vLLvvLLMALQQzQQceillmnppqrlmrqtruututiivimllaelaqxrvdoxqltt(0,0)(-12,11)(-6,5)(6,-1)
77
+ vLLvLLPwPQLAMPQcefikkmnplkopqrsttutuuiixvimqlippawidlabavth(-1,-11)(7,1)(3,-4)(0,0)
78
+ vLLvvLLMALQQzQQceillmnppqrlmrqtruututiivimllaelaqxrvdoxqltt(0,0)(-12,11)(-6,5)(-6,1)
79
+ vLLvLLPwPQLAMPQcefikkmnplkopqrsttutuuiixvimqlippawidlabavth(1,11)(7,1)(-3,4)(0,0)
80
+ vLLvvLLMALQQzQQceillmnppqrlmrqtruututiivimllaelaqxrvdoxqltt(0,0)(-12,11)(-6,5)(6,-1)
81
+ vLLvLLPwPQLAMPQcefikkmnplkopqrsttutuuiixvimqlippawidlabavth(-1,-11)(7,1)(3,-4)(0,0)
82
+ vLLvvLLMALQQzQQceillmnppqrlmrqtruututiivimllaelaqxrvdoxqltt(0,0)(-12,11)(-6,5)(-6,1)
83
+ vLLvLLPwPQLAMPQcefikkmnplkopqrsttutuuiixvimqlippawidlabavth(1,11)(7,1)(-3,4)(0,0)
84
+
85
+ The special case where we do not encode the matrices and have the identity perm
86
+ and need it:
87
+
88
+ >>> T = Triangulation('ovLMvvPQQQccddlmnijklmnmnlgvfamtvfblhaumx_BBbacBbacBbaBCaB(312,241)(332,441)(3322,1441)(726,541)')
89
+ >>> T.homology()
90
+ Z/4684873938228
91
+ >>> isosig = T.triangulation_isosig(ignore_curves=True, ignore_cusp_ordering=False)
92
+ >>> isosig
93
+ 'ovLMvvPQQQccddlmnijklmnmnlgvfamtvfblhaumx_abcd(71,312)(-1105,332)(-8085,3322)(726,1993)'
94
+ >>> Triangulation(isosig).homology()
95
+ Z/4684873938228
96
+
97
+
98
+ isometry_signature
99
+ ------------------
100
+
101
+ >>> M = Manifold('m004(1,2)')
102
+ >>> M.isometry_signature()
103
+ 'cPcbbbiht(3,2)'
104
+
105
+ sage: M.isometry_signature(verified=True)
106
+ 'cPcbbbiht(3,2)'
107
+
108
+ >>> M = ManifoldHP('m004(1,2)')
109
+ >>> M.isometry_signature()
110
+ 'cPcbbbiht(3,2)'
111
+
112
+ sage: M.isometry_signature(verified=True) # Test bug reported by Nathan
113
+ 'cPcbbbiht(3,2)'
114
+
115
+ # Cases where the drilled manifold had a canonical cell decomposition
116
+ # with non-tetrahedral cells.
117
+
118
+ >>> M = Manifold('m137(3,2)')
119
+ >>> M.isometry_signature()
120
+ 'sLLvwzvQPAQPQccghmiljkpmqnoorqrrqfafaoaqoofaoooqqaf(3,2)'
121
+
122
+ sage: M.isometry_signature(verified=True)
123
+ 'sLLvwzvQPAQPQccghmiljkpmqnoorqrrqfafaoaqoofaoooqqaf(3,2)'
124
+
125
+ >>> M = ManifoldHP('m137(3,2)')
126
+ >>> M.isometry_signature()
127
+ 'sLLvwzvQPAQPQccghmiljkpmqnoorqrrqfafaoaqoofaoooqqaf(3,2)'
128
+
129
+ sage: M.isometry_signature(verified=True)
130
+ 'sLLvwzvQPAQPQccghmiljkpmqnoorqrrqfafaoaqoofaoooqqaf(3,2)'
131
+
132
+ sage: M.isometry_signature(verified=True, exact_bits_prec_and_degrees=[]) # doctest: +ELLIPSIS +IGNORE_EXCEPTION_DETAIL
133
+ Traceback (most recent call last):
134
+ ...
135
+ RuntimeError: Could not compute or verify canonical retriangulation of drilled manifold. Geodesic was: abCDaDAd.
136
+
137
+ Test isometry_signature's ignore_orientation
138
+
139
+ >>> M = Manifold("m006")
140
+ >>> M.isometry_signature(ignore_orientation=False)
141
+ 'eLMkaccddjgbaj'
142
+ >>> M.isometry_signature(ignore_orientation=True)
143
+ 'eLAkaccddngbak'
144
+ >>> M.isometry_signature() # default value
145
+ 'eLAkaccddngbak'
146
+ >>> M.dehn_fill((3,4))
147
+ >>> M.isometry_signature(ignore_orientation=False)
148
+ 'eLMkaccddjgbaj(-1,4)'
149
+ >>> M.isometry_signature(ignore_orientation=True)
150
+ 'eLAkaccddngbak(-3,4)'
151
+
152
+ Test isometry_signature's of_link and filling.
153
+
154
+ >>> Manifold("o9_44206(2,3)").isometry_signature(of_link=True)
155
+ 'jLLvMQQacggfiihhijkkjkehhtb_abBabBbabaab'
156
+
157
+ Class hierarchy
158
+ ---------------
159
+
160
+ >>> isinstance(Manifold("m004"), Triangulation)
161
+ True
162
+
163
+ >>> isinstance(ManifoldHP("m004"), TriangulationHP)
164
+ True
165
+
166
+ Low precision and high precision comparisons
167
+ --------------------------------------------
168
+ >>> M = Manifold("m004")
169
+ >>> Mhp = Manifold("m004")
170
+ >>> N = Manifold("m003")
171
+ >>> Nhp = Manifold("m003")
172
+ >>> M.is_isometric_to(M)
173
+ True
174
+ >>> M.is_isometric_to(Mhp)
175
+ True
176
+ >>> Mhp.is_isometric_to(M)
177
+ True
178
+ >>> Mhp.is_isometric_to(Mhp)
179
+ True
180
+ >>> M.is_isometric_to(N)
181
+ False
182
+ >>> M.is_isometric_to(Nhp)
183
+ False
184
+ >>> Mhp.is_isometric_to(N)
185
+ False
186
+ >>> Mhp.is_isometric_to(Nhp)
187
+ False
188
+
189
+ >>> O = Triangulation("mvvLALQQQhfghjjlilkjklaaaaaffffffff",
190
+ ... remove_finite_vertices = False)
191
+ >>> O.has_finite_vertices()
192
+ True
193
+ >>> Ohp = TriangulationHP("mvvLALQQQhfghjjlilkjklaaaaaffffffff",
194
+ ... remove_finite_vertices = False)
195
+ >>> Ohp.has_finite_vertices()
196
+ True
197
+
198
+ >>> len(O.isomorphisms_to(O))
199
+ 8
200
+ >>> len(O.isomorphisms_to(Ohp))
201
+ 8
202
+ >>> len(Ohp.isomorphisms_to(O))
203
+ 8
204
+ >>> len(Ohp.isomorphisms_to(Ohp))
205
+ 8
206
+ >>> len(M.isomorphisms_to(O))
207
+ 0
208
+ >>> len(M.isomorphisms_to(Ohp))
209
+ 0
210
+ >>> len(Mhp.isomorphisms_to(O))
211
+ 0
212
+ >>> len(Mhp.isomorphisms_to(Ohp))
213
+ 0
214
+
215
+ Canonical retriangulation
216
+ -------------------------
217
+
218
+ Some cases that should be rejected
219
+
220
+ >>> M = Manifold("m004(3,4)")
221
+ >>> M.canonical_retriangulation() # doctest: +ELLIPSIS
222
+ Traceback (most recent call last):
223
+ ...
224
+ ValueError: Canonical retriangulation needs all cusps to be complete.
225
+
226
+ sage: M.canonical_retriangulation(verified=True) # doctest: +ELLIPSIS
227
+ Traceback (most recent call last):
228
+ ...
229
+ ValueError: Canonical retriangulation needs all cusps to be complete.
230
+
231
+ Cusp areas
232
+ ----------
233
+
234
+ >>> M = Manifold('o9_44210')
235
+ >>> M.cusp_areas(policy='greedy') # doctest: +NUMERIC9
236
+ [7.053940530873898, 3.2712450270, 2.7091590087]
237
+ >>> M.cusp_areas(policy='greedy', first_cusps=[]) # doctest: +NUMERIC9
238
+ [7.053940530873898, 3.2712450270, 2.7091590087]
239
+ >>> M.cusp_areas(policy='greedy', first_cusps=[0,]) # doctest: +NUMERIC9
240
+ [7.053940530873898, 3.2712450270, 2.7091590087]
241
+ >>> M.cusp_areas(policy='greedy', first_cusps=[0,1]) # doctest: +NUMERIC9
242
+ [7.053940530873898, 3.2712450270, 2.7091590087]
243
+ >>> M.cusp_areas(policy='greedy', first_cusps=[0,1,2]) # doctest: +NUMERIC9
244
+ [7.053940530873898, 3.2712450270, 2.7091590087]
245
+ >>> M.cusp_areas(policy='greedy', first_cusps=[0,2,1]) # doctest: +NUMERIC9
246
+ [7.053940530873898, 2.3513135103, 3.7690945490]
247
+ >>> M.cusp_areas(policy='greedy', first_cusps=[1,]) # doctest: +NUMERIC9
248
+ [2.30025338030798, 10.0315765558665, 0.883442685721903]
249
+
250
+ Cusp translations
251
+ -----------------
252
+
253
+ >>> M = Manifold("s776")
254
+ >>> M.cusp_translations(policy = 'greedy', first_cusps = [], bits_prec = 100) # doctest: +NUMERIC21
255
+ [(0.70710678118654752440084436210 + 1.8708286933869706927918743662*I, 2.8284271247461900976033774484), (0.35355339059327376220042218105 + 0.93541434669348534639593718308*I, 1.4142135623730950488016887242), (0.35355339059327376220042218105 + 0.93541434669348534639593718308*I, 1.4142135623730950488016887242)]
256
+
257
+
258
+ """
259
+
260
+ if not __doc__:
261
+ raise Exception("doc string with tests was not recognized.")
262
+
263
+ from . import Manifold, ManifoldHP, Triangulation, TriangulationHP