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
@@ -0,0 +1,29 @@
1
+ from snappy import testing
2
+ import snappy
3
+
4
+ from snappy import raytracing
5
+ import snappy.raytracing.geodesic_tube_info
6
+ import snappy.raytracing.geodesics
7
+ import snappy.raytracing.ideal_raytracing_data
8
+ import snappy.raytracing.upper_halfspace_utilities
9
+
10
+ modules = [
11
+ raytracing.cohomology_fractal,
12
+ raytracing.geodesic_tube_info,
13
+ raytracing.geodesics,
14
+ raytracing.ideal_raytracing_data,
15
+ raytracing.upper_halfspace_utilities
16
+ ]
17
+
18
+ def run_doctests(verbose=False, print_info=True):
19
+ globs = {'Manifold' : snappy.Manifold,
20
+ 'ManifoldHP': snappy.ManifoldHP}
21
+ return testing.doctest_modules(modules,
22
+ verbose=verbose,
23
+ print_info=print_info,
24
+ extraglobs=globs)
25
+
26
+ run_doctests.__name__ = raytracing.__name__
27
+
28
+ if __name__ == '__main__':
29
+ testing.run_doctests_as_main(run_doctests)
@@ -0,0 +1,146 @@
1
+ """
2
+ Module defining the ToolTip widget
3
+
4
+ From https://github.com/gnikit/tkinter-tooltip
5
+ """
6
+
7
+ import time
8
+ import tkinter as tk
9
+ from typing import Callable
10
+
11
+ # This code is based on Tucker Beck's implementation licensed under an MIT License
12
+ # Original code: http://code.activestate.com/recipes/576688-tooltip-for-tkinter/
13
+
14
+
15
+ class ToolTip(tk.Toplevel):
16
+ """
17
+ Creates a ToolTip (pop-up) widget for tkinter
18
+ """
19
+
20
+ def __init__(
21
+ self,
22
+ widget: tk.Widget,
23
+ msg = None, # : str | Callable
24
+ delay: float = 1.0,
25
+ follow: bool = True,
26
+ refresh: float = 1.0,
27
+ x_offset: int = +10,
28
+ y_offset: int = +10,
29
+ parent_kwargs: dict = {"bg": "black", "padx": 1, "pady": 1},
30
+ **message_kwargs,
31
+ ):
32
+ """Create a ToolTip. Allows for `**kwargs` to be passed on both
33
+ the parent frame and the ToolTip message
34
+
35
+ Parameters
36
+ ----------
37
+ widget : tk.Widget
38
+ The widget this ToolTip is assigned to
39
+ msg : `Union[str, Callable]`, optional
40
+ A string message (can be dynamic) assigned to the ToolTip.
41
+ Alternatively, it can be set to a function thatreturns a string,
42
+ by default None
43
+ delay : `float`, optional
44
+ Delay in seconds before the ToolTip appears, by default 0.0
45
+ follow : `bool`, optional
46
+ ToolTip follows motion, otherwise hides, by default True
47
+ refresh : `float`, optional
48
+ Refresh rate in seconds for strings and functions when mouse is
49
+ stationary and inside the widget, by default 1.0
50
+ x_offset : `int`, optional
51
+ x-coordinate offset for the ToolTip, by default +10
52
+ y_offset : `int`, optional
53
+ y-coordinate offset for the ToolTip, by default +10
54
+ parent_kwargs : `dict`, optional
55
+ Optional kwargs to be passed into the parent frame,
56
+ by default `{"bg": "black", "padx": 1, "pady": 1}`
57
+ **message_kwargs : tkinter `**kwargs` passed directly into the ToolTip
58
+ """
59
+ self.widget = widget
60
+ # ToolTip should have the same parent as the widget unless stated
61
+ # otherwise in the `parent_kwargs`
62
+ tk.Toplevel.__init__(self, **parent_kwargs)
63
+ self.withdraw() # Hide initially in case there is a delay
64
+ # Disable ToolTip's title bar
65
+ self.overrideredirect(True)
66
+
67
+ # StringVar instance for msg string|function
68
+ self.msgVar = tk.StringVar()
69
+ # This can be a string or a function
70
+ # Do not bother doing any sort of checks here since it sometimes results
71
+ # into multiple spawn-hide calls being made when swapping between tooltips
72
+ self.msg = msg
73
+ self.delay = delay
74
+ self.follow = follow
75
+ self.refresh = refresh
76
+ self.x_offset = x_offset
77
+ self.y_offset = y_offset
78
+ # visibility status of the ToolTip inside|outside|visible
79
+ self.status = "outside"
80
+ self.last_moved = 0
81
+ # use Message widget to host ToolTip
82
+ tk.Message(self, textvariable=self.msgVar, aspect=1000, **message_kwargs).grid()
83
+ # Add bindings to the widget without overriding the existing ones
84
+ self.widget.bind("<Enter>", self.on_enter, add="+")
85
+ self.widget.bind("<Leave>", self.on_leave, add="+")
86
+ self.widget.bind("<Motion>", self.on_enter, add="+")
87
+ self.widget.bind("<ButtonPress>", self.on_leave, add="+")
88
+
89
+ def on_enter(self, event) -> None:
90
+ """
91
+ Processes motion within the widget including entering and moving.
92
+ """
93
+ self.last_moved = time.time()
94
+
95
+ # Set the status as inside for the very first time
96
+ if self.status == "outside":
97
+ self.status = "inside"
98
+
99
+ # If the follow flag is not set, motion within the widget will
100
+ # make the ToolTip disappear
101
+ if not self.follow:
102
+ self.status = "inside"
103
+ self.withdraw()
104
+
105
+ # Offsets the ToolTip using the coordinates od an event as an origin
106
+ self.geometry(f"+{event.x_root + self.x_offset}+{event.y_root + self.y_offset}")
107
+
108
+ # Time is integer and in milliseconds
109
+ self.after(int(self.delay * 1000), self._show)
110
+
111
+ def on_leave(self, event=None) -> None:
112
+ """
113
+ Hides the ToolTip.
114
+ """
115
+ self.status = "outside"
116
+ self.withdraw()
117
+
118
+ def _show(self) -> None:
119
+ """
120
+ Displays the ToolTip.
121
+
122
+ Recursively queues `_show` in the scheduler every `self.refresh` seconds
123
+ """
124
+ if self.status == "inside" and time.time() - self.last_moved > self.delay:
125
+ self.status = "visible"
126
+
127
+ if self.status == "visible":
128
+ # Update the string with the latest function call
129
+ # Try and call self.msg as a function, if msg is not callable try and
130
+ # set it as a normal string if that fails throw an error
131
+ try:
132
+ self.msgVar.set(self.msg())
133
+ except TypeError:
134
+ # Intentionally do not check if msg is str, can be a list of str
135
+ self.msgVar.set(self.msg)
136
+ except:
137
+ raise (
138
+ "Error: ToolTip `msg` must be a string or string returning "
139
+ + f"function instead `msg` of type {type(self.msg)} was input"
140
+ )
141
+ self.deiconify()
142
+
143
+ # Recursively call _show to update ToolTip with the newest value of msg
144
+ # This is a race condition which only exits when upon a binding change
145
+ # that in turn changes the `status` to outside
146
+ self.after(int(self.refresh * 1000), self._show)
@@ -1,6 +1,9 @@
1
- from snappy.SnapPy import matrix
1
+ from ..matrix import make_matrix
2
2
  from ..upper_halfspace.ideal_point import Infinity
3
+ from ..upper_halfspace import pgl2c_to_o13, sl2c_inverse
3
4
 
5
+ from ..snap.t3mlite import simplex
6
+ from ..snap.t3mlite import Mcomplex
4
7
 
5
8
  def symmetric_vertices_for_tetrahedron(z):
6
9
  """
@@ -22,25 +25,25 @@ def pgl2_matrix_taking_0_1_inf_to_given_points(z0, z1, zinf):
22
25
  if z0 == Infinity:
23
26
  CF = z1.parent()
24
27
  m = zinf - z1
25
- return matrix([[ -zinf, m ],
26
- [ -1, 0 ]], ring=CF)
28
+ return make_matrix([[ -zinf, m ],
29
+ [ -1, 0 ]], ring=CF)
27
30
 
28
31
  if z1 == Infinity:
29
32
  CF = zinf.parent()
30
- return matrix([[ -zinf, z0 ],
31
- [ -1, 1 ]], ring=CF)
33
+ return make_matrix([[ -zinf, z0 ],
34
+ [ -1, 1 ]], ring=CF)
32
35
 
33
36
  if zinf == Infinity:
34
37
  CF = z0.parent()
35
38
  l = z0 - z1
36
- return matrix([[ -l, z0 ],
37
- [ 0, 1 ]], ring=CF)
39
+ return make_matrix([[ -l, z0 ],
40
+ [ 0, 1 ]], ring=CF)
38
41
 
39
42
  l = z0 - z1
40
43
  m = zinf - z1
41
44
 
42
- return matrix([[ -l * zinf, m * z0 ],
43
- [ -l, m ]])
45
+ return make_matrix([[ -l * zinf, m * z0 ],
46
+ [ -l, m ]])
44
47
 
45
48
 
46
49
  def are_sl_matrices_close(m1, m2, epsilon=1e-5):
@@ -63,3 +66,33 @@ def are_psl_matrices_close(m1, m2, epsilon=1e-5):
63
66
  return (
64
67
  are_sl_matrices_close(m1, m2, epsilon) or
65
68
  are_sl_matrices_close(m1, -m2, epsilon))
69
+
70
+ def o13_matrix_taking_ideal_vertices_to_ideal_vertices(verts0, verts1):
71
+ m1 = pgl2_matrix_taking_0_1_inf_to_given_points(*verts0)
72
+ m2 = pgl2_matrix_taking_0_1_inf_to_given_points(*verts1)
73
+
74
+ return pgl2c_to_o13(m2 * sl2c_inverse(m1))
75
+
76
+ def add_coordinate_transform_to_mcomplex(mcomplex : Mcomplex):
77
+ """
78
+ Most places in SnapPy/SnapPea kernel develop the tetrahedra
79
+ so that they form a fundamental domain - so that pairing
80
+ matrices are the identity for faces that are internal to the
81
+ fundamental domain.
82
+
83
+ However, for the raytracing shader, we pick the vertices of each
84
+ tetrahedron so that the center is at the origin.
85
+
86
+ Compute the matrix that can take structures in the coordinate
87
+ system native to SnapPy/SnapPea kernel to the coordinate system
88
+ used by the raytracing shader.
89
+
90
+ """
91
+ for tet in mcomplex.Tetrahedra:
92
+ z = tet.ShapeParameters[simplex.E01]
93
+ vert0 = [ tet.ideal_vertices[v]
94
+ for v in simplex.ZeroSubsimplices[:3]]
95
+ vert1 = symmetric_vertices_for_tetrahedron(z)[:3]
96
+ tet.to_coordinates_in_symmetric_tet = (
97
+ o13_matrix_taking_ideal_vertices_to_ideal_vertices(
98
+ vert0, vert1))
snappy/sage_helper.py CHANGED
@@ -9,45 +9,99 @@ than the usual ">>>".
9
9
  """
10
10
 
11
11
  try:
12
- import sage.all
12
+ import sage.structure.sage_object
13
13
  _within_sage = True
14
14
  except ImportError:
15
15
  _within_sage = False
16
- import decorator
17
-
18
- import sys
19
- import doctest
20
- import re
21
- import types
22
-
23
- from .numeric_output_checker import NumericOutputChecker
24
-
25
16
 
26
17
  class SageNotAvailable(Exception):
27
18
  pass
28
19
 
29
-
30
20
  if _within_sage:
31
21
  def sage_method(function):
32
22
  function._sage_method = True
33
23
  return function
34
24
 
25
+ try:
26
+ # Monolithic Sage library
27
+ from sage.all import RealField, RealDoubleElement, gcd, xgcd, prod, powerset
28
+ from sage.all import MatrixSpace, matrix, vector, ZZ
29
+ from sage.all import Integer, Rational, QQ, RR, CC
30
+ from sage.all import sqrt
31
+ from sage.all import I, Infinity
32
+ from sage.all import arccosh
33
+ from sage.all import RIF, CIF
34
+ from sage.all import (cached_method, real_part, imag_part, round, ceil, floor, log,
35
+ CDF, ComplexDoubleField, ComplexField, CyclotomicField, NumberField, PolynomialRing, identity_matrix)
36
+ from sage.all import FiniteField as GF
37
+ from sage.all import VectorSpace, ChainComplex
38
+ from sage.all import ComplexBallField, exp, sin, block_matrix, prime_range, det
39
+ from sage.all import LaurentPolynomialRing, AbelianGroup, GroupAlgebra
40
+ from sage.all import is_prime
41
+ except ImportError:
42
+ # Modularized Sage library
43
+ from sage.algebras.group_algebra import GroupAlgebra
44
+ from sage.arith.misc import gcd, xgcd, is_prime
45
+ from sage.combinat.subset import powerset
46
+ from sage.functions.hyperbolic import arccosh
47
+ from sage.functions.log import exp
48
+ from sage.functions.other import (real as real_part,
49
+ imag as imag_part,
50
+ ceil,
51
+ floor)
52
+ from sage.functions.trig import sin
53
+ from sage.groups.abelian_gps.abelian_group import AbelianGroup
54
+ from sage.homology.chain_complex import ChainComplex
55
+ from sage.matrix.constructor import Matrix as matrix
56
+ from sage.matrix.matrix_space import MatrixSpace
57
+ from sage.matrix.special import block_matrix, identity_matrix
58
+ from sage.misc.cachefunc import cached_method
59
+ from sage.misc.functional import det, log, round, sqrt
60
+ from sage.misc.misc_c import prod
61
+ from sage.modules.free_module import VectorSpace
62
+ from sage.modules.free_module_element import free_module_element as vector
63
+ from sage.rings.cc import CC
64
+ from sage.rings.cif import CIF
65
+ from sage.rings.complex_arb import ComplexBallField
66
+ from sage.rings.complex_double import CDF, ComplexDoubleField
67
+ from sage.rings.complex_mpfr import ComplexField
68
+ from sage.rings.fast_arith import prime_range
69
+ from sage.rings.finite_rings.finite_field_constructor import FiniteField as GF
70
+ from sage.rings.imaginary_unit import I
71
+ from sage.rings.infinity import Infinity
72
+ from sage.rings.integer import Integer
73
+ from sage.rings.integer_ring import ZZ
74
+ from sage.rings.polynomial.laurent_polynomial_ring import LaurentPolynomialRing
75
+ from sage.rings.number_field.number_field import CyclotomicField, NumberField
76
+ from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
77
+ from sage.rings.rational import Rational
78
+ from sage.rings.rational_field import QQ
79
+ from sage.rings.real_double import RealDoubleElement
80
+ from sage.rings.real_mpfi import RIF
81
+ from sage.rings.real_mpfr import RealField, RealNumber, RR
82
+
83
+ from sage.rings.complex_interval_field import ComplexIntervalField
84
+ from sage.rings.real_mpfi import is_RealIntervalFieldElement, RealIntervalField
85
+ from sage.rings.real_mpfr import RealNumber, RealField_class
86
+ from sage.structure.sage_object import SageObject
87
+
35
88
  try: # Sage >= 9.3, see https://trac.sagemath.org/ticket/24483
36
89
  from sage.rings.complex_mpfr import (ComplexField,
37
90
  ComplexField_class,
38
91
  create_ComplexNumber)
39
- except ModuleNotFoundError:
92
+ except ImportError:
40
93
  from sage.rings.complex_field import ComplexField, ComplexField_class
41
94
  from sage.rings.complex_number import create_ComplexNumber
42
95
 
43
96
  else:
97
+ import decorator
98
+
44
99
  def _sage_method(function, *args, **kw):
45
100
  raise SageNotAvailable('Sorry, this feature requires using SnapPy inside Sage.')
46
101
 
47
102
  def sage_method(function):
48
103
  return decorator.decorator(_sage_method, function)
49
104
 
50
-
51
105
  # Not currently used, but could be exploited by an interpreter to hide
52
106
  # sage_methods when in plain Python.
53
107
 
@@ -61,124 +115,3 @@ def sage_methods(obj):
61
115
  except AttributeError:
62
116
  pass
63
117
  return ans
64
-
65
-
66
- # Used for doctesting
67
- _gui_status = {}
68
-
69
- try:
70
- from snappy.gui import Tk_
71
- _gui_status['tk'] = True
72
- except ImportError:
73
- _gui_status['tk'] = False
74
- if _gui_status['tk']:
75
- try:
76
- import snappy.CyOpenGL
77
- _gui_status['cyopengl'] = True
78
- except:
79
- _gui_status['cyopengl'] = False
80
- else:
81
- _gui_status['cyopengl'] = False
82
- _gui_status['fake_root'] = False
83
-
84
-
85
- def cyopengl_works():
86
- if not _gui_status['cyopengl']:
87
- return False
88
- # if we are running the tests from the snappy app the default root will
89
- # already exist -- it will be the tkterminal window. Otherwise, we open
90
- # a root window here to serve as the master of all of the GUI windows
91
- # which get created during testing.
92
- if _gui_status['tk'] and not Tk_._default_root:
93
- try:
94
- root = Tk_.Tk()
95
- if sys.platform not in ('linux', 'linux2'):
96
- root.withdraw()
97
- except:
98
- # tkinter loads OK but is not able to get a display.
99
- _gui_status['tk'] = _gui_status['cyopengl'] = False
100
- return _gui_status['cyopengl']
101
-
102
-
103
- def tk_root():
104
- if _gui_status['tk']:
105
- return Tk_._default_root
106
- else:
107
- return None
108
-
109
-
110
- def root_is_fake():
111
- return _gui_status['fake_root']
112
-
113
-
114
- class DocTestParser(doctest.DocTestParser):
115
- _use_cyopengl_initialized = False
116
- _use_cyopengl = False
117
- use_modernopengl = True
118
- use_sage = False
119
-
120
- def parse(self, string, name='<string>'):
121
- string = re.subn(
122
- r'#doctest: \+CYOPENGL',
123
- '' if DocTestParser._use_cyopengl else '#doctest: +SKIP',
124
- string)[0]
125
-
126
- string = re.subn(
127
- r'#doctest: \+CYMODERNOPENGL',
128
- (''
129
- if (DocTestParser._use_cyopengl and
130
- DocTestParser.use_modernopengl)
131
- else '#doctest: +SKIP'),
132
- string)[0]
133
-
134
- if DocTestParser.use_sage:
135
- string = re.subn(r'(\n\s*)sage:|(\A\s*)sage:',
136
- r'\g<1>>>>',
137
- string)[0]
138
- return doctest.DocTestParser.parse(self, string, name)
139
-
140
-
141
- DocTestParser.use_sage = _within_sage
142
-
143
- if _within_sage:
144
- globs = {'PSL': sage.all.PSL, 'BraidGroup': sage.all.BraidGroup}
145
- else:
146
- globs = {}
147
-
148
-
149
- def print_results(module, results):
150
- root = tk_root()
151
- # Platform specific hacks to make running the tests work.
152
- if root and not root_is_fake():
153
- if sys.platform in ('linux', 'linux2'):
154
- root.deiconify()
155
- root.update_idletasks()
156
- else:
157
- root.update()
158
- print(module.__name__ + ':')
159
- print(' %s failures out of %s tests.' % (results.failed,
160
- results.attempted))
161
-
162
-
163
- def doctest_modules(modules, verbose=False, print_info=True, extraglobs=dict()):
164
- finder = doctest.DocTestFinder(parser=DocTestParser())
165
- # full_extraglobals = dict(globs.items() + extraglobs.items())
166
- full_extraglobals = globs.copy()
167
- full_extraglobals.update(extraglobs)
168
- failed, attempted = 0, 0
169
- for module in modules:
170
- if isinstance(module, types.ModuleType):
171
- runner = doctest.DocTestRunner(checker=NumericOutputChecker(), verbose=verbose)
172
- for test in finder.find(module, extraglobs=full_extraglobals):
173
- runner.run(test)
174
- result = runner.summarize()
175
- else:
176
- result = module(verbose=verbose)
177
- failed += result.failed
178
- attempted += result.attempted
179
- if print_info:
180
- print_results(module, result)
181
-
182
- if print_info:
183
- print('\nAll doctests:\n %s failures out of %s tests.' % (failed, attempted))
184
- return doctest.TestResults(failed, attempted)