snappy 3.3__cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.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 (541) hide show
  1. snappy/CyOpenGL.cpython-310-aarch64-linux-gnu.so +0 -0
  2. snappy/SnapPy.cpython-310-aarch64-linux-gnu.so +0 -0
  3. snappy/SnapPy.ico +0 -0
  4. snappy/SnapPy.png +0 -0
  5. snappy/SnapPyHP.cpython-310-aarch64-linux-gnu.so +0 -0
  6. snappy/__init__.py +534 -0
  7. snappy/app.py +604 -0
  8. snappy/app_menus.py +372 -0
  9. snappy/browser.py +998 -0
  10. snappy/cache.py +25 -0
  11. snappy/canonical.py +249 -0
  12. snappy/cusps/__init__.py +280 -0
  13. snappy/cusps/cusp_area_matrix.py +98 -0
  14. snappy/cusps/cusp_areas_from_matrix.py +96 -0
  15. snappy/cusps/maximal_cusp_area_matrix.py +136 -0
  16. snappy/cusps/short_slopes_for_cusp.py +217 -0
  17. snappy/cusps/test.py +22 -0
  18. snappy/cusps/trig_cusp_area_matrix.py +63 -0
  19. snappy/database.py +454 -0
  20. snappy/db_utilities.py +79 -0
  21. snappy/decorated_isosig.py +717 -0
  22. snappy/dev/__init__.py +0 -0
  23. snappy/dev/extended_ptolemy/__init__.py +8 -0
  24. snappy/dev/extended_ptolemy/closed.py +106 -0
  25. snappy/dev/extended_ptolemy/complexVolumesClosed.py +149 -0
  26. snappy/dev/extended_ptolemy/direct.py +42 -0
  27. snappy/dev/extended_ptolemy/extended.py +406 -0
  28. snappy/dev/extended_ptolemy/giac_helper.py +43 -0
  29. snappy/dev/extended_ptolemy/giac_rur.py +129 -0
  30. snappy/dev/extended_ptolemy/gluing.py +46 -0
  31. snappy/dev/extended_ptolemy/phc_wrapper.py +220 -0
  32. snappy/dev/extended_ptolemy/printMatrices.py +70 -0
  33. snappy/dev/vericlosed/__init__.py +1 -0
  34. snappy/dev/vericlosed/computeApproxHyperbolicStructureNew.py +159 -0
  35. snappy/dev/vericlosed/computeApproxHyperbolicStructureOrb.py +90 -0
  36. snappy/dev/vericlosed/computeVerifiedHyperbolicStructure.py +111 -0
  37. snappy/dev/vericlosed/gimbalLoopFinder.py +130 -0
  38. snappy/dev/vericlosed/hyperbolicStructure.py +313 -0
  39. snappy/dev/vericlosed/krawczykCertifiedEdgeLengthsEngine.py +165 -0
  40. snappy/dev/vericlosed/oneVertexTruncatedComplex.py +122 -0
  41. snappy/dev/vericlosed/orb/__init__.py +1 -0
  42. snappy/dev/vericlosed/orb/orb_solution_for_snappea_finite_triangulation_mac +0 -0
  43. snappy/dev/vericlosed/parseVertexGramMatrixFile.py +47 -0
  44. snappy/dev/vericlosed/polishApproxHyperbolicStructure.py +61 -0
  45. snappy/dev/vericlosed/test.py +54 -0
  46. snappy/dev/vericlosed/truncatedComplex.py +176 -0
  47. snappy/dev/vericlosed/verificationError.py +58 -0
  48. snappy/dev/vericlosed/verifyHyperbolicStructureEngine.py +177 -0
  49. snappy/doc/_images/SnapPy-196.png +0 -0
  50. snappy/doc/_images/m004_paper_plane_on_systole.jpg +0 -0
  51. snappy/doc/_images/m125_paper_plane.jpg +0 -0
  52. snappy/doc/_images/mac.png +0 -0
  53. snappy/doc/_images/o9_00000_systole_paper_plane.jpg +0 -0
  54. snappy/doc/_images/o9_00000_systole_paper_plane_closer.jpg +0 -0
  55. snappy/doc/_images/plink-action.png +0 -0
  56. snappy/doc/_images/ubuntu.png +0 -0
  57. snappy/doc/_images/win7.png +0 -0
  58. snappy/doc/_sources/additional_classes.rst.txt +40 -0
  59. snappy/doc/_sources/bugs.rst.txt +14 -0
  60. snappy/doc/_sources/censuses.rst.txt +52 -0
  61. snappy/doc/_sources/credits.rst.txt +81 -0
  62. snappy/doc/_sources/development.rst.txt +261 -0
  63. snappy/doc/_sources/index.rst.txt +215 -0
  64. snappy/doc/_sources/installing.rst.txt +249 -0
  65. snappy/doc/_sources/manifold.rst.txt +6 -0
  66. snappy/doc/_sources/manifoldhp.rst.txt +46 -0
  67. snappy/doc/_sources/news.rst.txt +425 -0
  68. snappy/doc/_sources/other.rst.txt +25 -0
  69. snappy/doc/_sources/platonic_census.rst.txt +20 -0
  70. snappy/doc/_sources/plink.rst.txt +102 -0
  71. snappy/doc/_sources/ptolemy.rst.txt +66 -0
  72. snappy/doc/_sources/ptolemy_classes.rst.txt +42 -0
  73. snappy/doc/_sources/ptolemy_examples1.rst.txt +298 -0
  74. snappy/doc/_sources/ptolemy_examples2.rst.txt +363 -0
  75. snappy/doc/_sources/ptolemy_examples3.rst.txt +301 -0
  76. snappy/doc/_sources/ptolemy_examples4.rst.txt +61 -0
  77. snappy/doc/_sources/ptolemy_prelim.rst.txt +105 -0
  78. snappy/doc/_sources/screenshots.rst.txt +21 -0
  79. snappy/doc/_sources/snap.rst.txt +87 -0
  80. snappy/doc/_sources/snappy.rst.txt +28 -0
  81. snappy/doc/_sources/spherogram.rst.txt +103 -0
  82. snappy/doc/_sources/todo.rst.txt +47 -0
  83. snappy/doc/_sources/triangulation.rst.txt +11 -0
  84. snappy/doc/_sources/tutorial.rst.txt +49 -0
  85. snappy/doc/_sources/verify.rst.txt +210 -0
  86. snappy/doc/_sources/verify_internals.rst.txt +79 -0
  87. snappy/doc/_static/SnapPy-horizontal-128.png +0 -0
  88. snappy/doc/_static/SnapPy.ico +0 -0
  89. snappy/doc/_static/_sphinx_javascript_frameworks_compat.js +123 -0
  90. snappy/doc/_static/basic.css +906 -0
  91. snappy/doc/_static/css/badge_only.css +1 -0
  92. snappy/doc/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
  93. snappy/doc/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
  94. snappy/doc/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
  95. snappy/doc/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
  96. snappy/doc/_static/css/fonts/fontawesome-webfont.eot +0 -0
  97. snappy/doc/_static/css/fonts/fontawesome-webfont.svg +2671 -0
  98. snappy/doc/_static/css/fonts/fontawesome-webfont.ttf +0 -0
  99. snappy/doc/_static/css/fonts/fontawesome-webfont.woff +0 -0
  100. snappy/doc/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
  101. snappy/doc/_static/css/fonts/lato-bold-italic.woff +0 -0
  102. snappy/doc/_static/css/fonts/lato-bold-italic.woff2 +0 -0
  103. snappy/doc/_static/css/fonts/lato-bold.woff +0 -0
  104. snappy/doc/_static/css/fonts/lato-bold.woff2 +0 -0
  105. snappy/doc/_static/css/fonts/lato-normal-italic.woff +0 -0
  106. snappy/doc/_static/css/fonts/lato-normal-italic.woff2 +0 -0
  107. snappy/doc/_static/css/fonts/lato-normal.woff +0 -0
  108. snappy/doc/_static/css/fonts/lato-normal.woff2 +0 -0
  109. snappy/doc/_static/css/theme.css +4 -0
  110. snappy/doc/_static/doctools.js +149 -0
  111. snappy/doc/_static/documentation_options.js +13 -0
  112. snappy/doc/_static/file.png +0 -0
  113. snappy/doc/_static/fonts/Lato/lato-bold.eot +0 -0
  114. snappy/doc/_static/fonts/Lato/lato-bold.ttf +0 -0
  115. snappy/doc/_static/fonts/Lato/lato-bold.woff +0 -0
  116. snappy/doc/_static/fonts/Lato/lato-bold.woff2 +0 -0
  117. snappy/doc/_static/fonts/Lato/lato-bolditalic.eot +0 -0
  118. snappy/doc/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
  119. snappy/doc/_static/fonts/Lato/lato-bolditalic.woff +0 -0
  120. snappy/doc/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
  121. snappy/doc/_static/fonts/Lato/lato-italic.eot +0 -0
  122. snappy/doc/_static/fonts/Lato/lato-italic.ttf +0 -0
  123. snappy/doc/_static/fonts/Lato/lato-italic.woff +0 -0
  124. snappy/doc/_static/fonts/Lato/lato-italic.woff2 +0 -0
  125. snappy/doc/_static/fonts/Lato/lato-regular.eot +0 -0
  126. snappy/doc/_static/fonts/Lato/lato-regular.ttf +0 -0
  127. snappy/doc/_static/fonts/Lato/lato-regular.woff +0 -0
  128. snappy/doc/_static/fonts/Lato/lato-regular.woff2 +0 -0
  129. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
  130. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
  131. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
  132. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
  133. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
  134. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
  135. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
  136. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
  137. snappy/doc/_static/jquery.js +2 -0
  138. snappy/doc/_static/js/badge_only.js +1 -0
  139. snappy/doc/_static/js/theme.js +1 -0
  140. snappy/doc/_static/js/versions.js +228 -0
  141. snappy/doc/_static/language_data.js +192 -0
  142. snappy/doc/_static/minus.png +0 -0
  143. snappy/doc/_static/plus.png +0 -0
  144. snappy/doc/_static/pygments.css +75 -0
  145. snappy/doc/_static/searchtools.js +635 -0
  146. snappy/doc/_static/snappy_furo.css +33 -0
  147. snappy/doc/_static/snappy_sphinx_rtd_theme.css +42 -0
  148. snappy/doc/_static/sphinx_highlight.js +154 -0
  149. snappy/doc/additional_classes.html +1500 -0
  150. snappy/doc/bugs.html +132 -0
  151. snappy/doc/censuses.html +453 -0
  152. snappy/doc/credits.html +184 -0
  153. snappy/doc/development.html +385 -0
  154. snappy/doc/doc-latest/additional_classes.html +1500 -0
  155. snappy/doc/doc-latest/bugs.html +132 -0
  156. snappy/doc/doc-latest/censuses.html +453 -0
  157. snappy/doc/doc-latest/credits.html +184 -0
  158. snappy/doc/doc-latest/development.html +385 -0
  159. snappy/doc/doc-latest/genindex.html +1349 -0
  160. snappy/doc/doc-latest/index.html +287 -0
  161. snappy/doc/doc-latest/installing.html +346 -0
  162. snappy/doc/doc-latest/manifold.html +3632 -0
  163. snappy/doc/doc-latest/manifoldhp.html +180 -0
  164. snappy/doc/doc-latest/news.html +438 -0
  165. snappy/doc/doc-latest/objects.inv +0 -0
  166. snappy/doc/doc-latest/other.html +160 -0
  167. snappy/doc/doc-latest/platonic_census.html +376 -0
  168. snappy/doc/doc-latest/plink.html +210 -0
  169. snappy/doc/doc-latest/ptolemy.html +253 -0
  170. snappy/doc/doc-latest/ptolemy_classes.html +1144 -0
  171. snappy/doc/doc-latest/ptolemy_examples1.html +409 -0
  172. snappy/doc/doc-latest/ptolemy_examples2.html +471 -0
  173. snappy/doc/doc-latest/ptolemy_examples3.html +414 -0
  174. snappy/doc/doc-latest/ptolemy_examples4.html +195 -0
  175. snappy/doc/doc-latest/ptolemy_prelim.html +248 -0
  176. snappy/doc/doc-latest/py-modindex.html +165 -0
  177. snappy/doc/doc-latest/screenshots.html +141 -0
  178. snappy/doc/doc-latest/search.html +135 -0
  179. snappy/doc/doc-latest/searchindex.js +1 -0
  180. snappy/doc/doc-latest/snap.html +202 -0
  181. snappy/doc/doc-latest/snappy.html +181 -0
  182. snappy/doc/doc-latest/spherogram.html +1346 -0
  183. snappy/doc/doc-latest/todo.html +166 -0
  184. snappy/doc/doc-latest/triangulation.html +1676 -0
  185. snappy/doc/doc-latest/tutorial.html +159 -0
  186. snappy/doc/doc-latest/verify.html +330 -0
  187. snappy/doc/doc-latest/verify_internals.html +1235 -0
  188. snappy/doc/genindex.html +1349 -0
  189. snappy/doc/index.html +287 -0
  190. snappy/doc/installing.html +346 -0
  191. snappy/doc/manifold.html +3632 -0
  192. snappy/doc/manifoldhp.html +180 -0
  193. snappy/doc/news.html +438 -0
  194. snappy/doc/objects.inv +0 -0
  195. snappy/doc/other.html +160 -0
  196. snappy/doc/platonic_census.html +376 -0
  197. snappy/doc/plink.html +210 -0
  198. snappy/doc/ptolemy.html +253 -0
  199. snappy/doc/ptolemy_classes.html +1144 -0
  200. snappy/doc/ptolemy_examples1.html +409 -0
  201. snappy/doc/ptolemy_examples2.html +471 -0
  202. snappy/doc/ptolemy_examples3.html +414 -0
  203. snappy/doc/ptolemy_examples4.html +195 -0
  204. snappy/doc/ptolemy_prelim.html +248 -0
  205. snappy/doc/py-modindex.html +165 -0
  206. snappy/doc/screenshots.html +141 -0
  207. snappy/doc/search.html +135 -0
  208. snappy/doc/searchindex.js +1 -0
  209. snappy/doc/snap.html +202 -0
  210. snappy/doc/snappy.html +181 -0
  211. snappy/doc/spherogram.html +1346 -0
  212. snappy/doc/todo.html +166 -0
  213. snappy/doc/triangulation.html +1676 -0
  214. snappy/doc/tutorial.html +159 -0
  215. snappy/doc/verify.html +330 -0
  216. snappy/doc/verify_internals.html +1235 -0
  217. snappy/drilling/__init__.py +456 -0
  218. snappy/drilling/barycentric.py +103 -0
  219. snappy/drilling/constants.py +5 -0
  220. snappy/drilling/crush.py +270 -0
  221. snappy/drilling/cusps.py +125 -0
  222. snappy/drilling/debug.py +242 -0
  223. snappy/drilling/epsilons.py +6 -0
  224. snappy/drilling/exceptions.py +55 -0
  225. snappy/drilling/moves.py +620 -0
  226. snappy/drilling/peripheral_curves.py +210 -0
  227. snappy/drilling/perturb.py +188 -0
  228. snappy/drilling/shorten.py +36 -0
  229. snappy/drilling/subdivide.py +274 -0
  230. snappy/drilling/test.py +23 -0
  231. snappy/drilling/test_cases.py +132 -0
  232. snappy/drilling/tracing.py +351 -0
  233. snappy/exceptions.py +26 -0
  234. snappy/export_stl.py +120 -0
  235. snappy/exterior_to_link/__init__.py +2 -0
  236. snappy/exterior_to_link/barycentric_geometry.py +463 -0
  237. snappy/exterior_to_link/exceptions.py +6 -0
  238. snappy/exterior_to_link/geodesic_map.json +14408 -0
  239. snappy/exterior_to_link/hyp_utils.py +112 -0
  240. snappy/exterior_to_link/link_projection.py +323 -0
  241. snappy/exterior_to_link/main.py +198 -0
  242. snappy/exterior_to_link/mcomplex_with_expansion.py +261 -0
  243. snappy/exterior_to_link/mcomplex_with_link.py +687 -0
  244. snappy/exterior_to_link/mcomplex_with_memory.py +162 -0
  245. snappy/exterior_to_link/pl_utils.py +491 -0
  246. snappy/exterior_to_link/put_in_S3.py +156 -0
  247. snappy/exterior_to_link/rational_linear_algebra.py +130 -0
  248. snappy/exterior_to_link/rational_linear_algebra_wrapped.py +135 -0
  249. snappy/exterior_to_link/simplify_to_base_tri.py +114 -0
  250. snappy/exterior_to_link/stored_moves.py +475 -0
  251. snappy/exterior_to_link/test.py +31 -0
  252. snappy/filedialog.py +28 -0
  253. snappy/geometric_structure/__init__.py +212 -0
  254. snappy/geometric_structure/cusp_neighborhood/__init__.py +3 -0
  255. snappy/geometric_structure/cusp_neighborhood/complex_cusp_cross_section.py +691 -0
  256. snappy/geometric_structure/cusp_neighborhood/cusp_cross_section_base.py +480 -0
  257. snappy/geometric_structure/cusp_neighborhood/exceptions.py +41 -0
  258. snappy/geometric_structure/cusp_neighborhood/real_cusp_cross_section.py +294 -0
  259. snappy/geometric_structure/cusp_neighborhood/tiles_for_cusp_neighborhood.py +156 -0
  260. snappy/geometric_structure/cusp_neighborhood/vertices.py +35 -0
  261. snappy/geometric_structure/geodesic/__init__.py +0 -0
  262. snappy/geometric_structure/geodesic/add_core_curves.py +152 -0
  263. snappy/geometric_structure/geodesic/avoid_core_curves.py +369 -0
  264. snappy/geometric_structure/geodesic/canonical_representatives.py +52 -0
  265. snappy/geometric_structure/geodesic/check_away_from_core_curve.py +60 -0
  266. snappy/geometric_structure/geodesic/constants.py +6 -0
  267. snappy/geometric_structure/geodesic/exceptions.py +22 -0
  268. snappy/geometric_structure/geodesic/fixed_points.py +106 -0
  269. snappy/geometric_structure/geodesic/geodesic_start_point_info.py +435 -0
  270. snappy/geometric_structure/geodesic/graph_trace_helper.py +67 -0
  271. snappy/geometric_structure/geodesic/line.py +30 -0
  272. snappy/geometric_structure/geodesic/multiplicity.py +127 -0
  273. snappy/geometric_structure/geodesic/tiles_for_geodesic.py +128 -0
  274. snappy/geometric_structure/test.py +22 -0
  275. snappy/gui.py +121 -0
  276. snappy/horoviewer.py +443 -0
  277. snappy/hyperboloid/__init__.py +212 -0
  278. snappy/hyperboloid/distances.py +259 -0
  279. snappy/hyperboloid/horoball.py +19 -0
  280. snappy/hyperboloid/line.py +35 -0
  281. snappy/hyperboloid/point.py +9 -0
  282. snappy/hyperboloid/triangle.py +29 -0
  283. snappy/info_icon.gif +0 -0
  284. snappy/infowindow.py +65 -0
  285. snappy/isometry_signature.py +389 -0
  286. snappy/len_spec/__init__.py +609 -0
  287. snappy/len_spec/geodesic_info.py +129 -0
  288. snappy/len_spec/geodesic_key_info_dict.py +116 -0
  289. snappy/len_spec/geodesic_piece.py +146 -0
  290. snappy/len_spec/geometric_structure.py +182 -0
  291. snappy/len_spec/geometry.py +136 -0
  292. snappy/len_spec/length_spectrum_geodesic_info.py +185 -0
  293. snappy/len_spec/spine.py +128 -0
  294. snappy/len_spec/test.py +24 -0
  295. snappy/len_spec/test_cases.py +69 -0
  296. snappy/len_spec/tile.py +276 -0
  297. snappy/len_spec/word.py +86 -0
  298. snappy/manifolds/HTWKnots/alternating.gz +0 -0
  299. snappy/manifolds/HTWKnots/nonalternating.gz +0 -0
  300. snappy/manifolds/__init__.py +3 -0
  301. snappy/margulis/__init__.py +332 -0
  302. snappy/margulis/cusp_neighborhood_neighborhood.py +66 -0
  303. snappy/margulis/geodesic_neighborhood.py +152 -0
  304. snappy/margulis/margulis_info.py +21 -0
  305. snappy/margulis/mu_from_neighborhood_pair.py +175 -0
  306. snappy/margulis/neighborhood.py +29 -0
  307. snappy/margulis/test.py +22 -0
  308. snappy/math_basics.py +187 -0
  309. snappy/matrix.py +525 -0
  310. snappy/number.py +657 -0
  311. snappy/numeric_output_checker.py +345 -0
  312. snappy/pari.py +41 -0
  313. snappy/phone_home.py +57 -0
  314. snappy/polyviewer.py +259 -0
  315. snappy/ptolemy/__init__.py +17 -0
  316. snappy/ptolemy/component.py +103 -0
  317. snappy/ptolemy/coordinates.py +2290 -0
  318. snappy/ptolemy/fieldExtensions.py +153 -0
  319. snappy/ptolemy/findLoops.py +473 -0
  320. snappy/ptolemy/geometricRep.py +59 -0
  321. snappy/ptolemy/homology.py +165 -0
  322. snappy/ptolemy/magma/default.magma_template +229 -0
  323. snappy/ptolemy/magma/radicalsOfPrimaryDecomposition.magma_template +79 -0
  324. snappy/ptolemy/manifoldMethods.py +395 -0
  325. snappy/ptolemy/matrix.py +350 -0
  326. snappy/ptolemy/numericalSolutionsToGroebnerBasis.py +113 -0
  327. snappy/ptolemy/polynomial.py +856 -0
  328. snappy/ptolemy/processComponents.py +173 -0
  329. snappy/ptolemy/processFileBase.py +247 -0
  330. snappy/ptolemy/processFileDispatch.py +46 -0
  331. snappy/ptolemy/processMagmaFile.py +392 -0
  332. snappy/ptolemy/processRurFile.py +150 -0
  333. snappy/ptolemy/ptolemyGeneralizedObstructionClass.py +102 -0
  334. snappy/ptolemy/ptolemyObstructionClass.py +64 -0
  335. snappy/ptolemy/ptolemyVariety.py +995 -0
  336. snappy/ptolemy/ptolemyVarietyPrimeIdealGroebnerBasis.py +140 -0
  337. snappy/ptolemy/reginaWrapper.py +698 -0
  338. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c0.magma_out.bz2 +0 -0
  339. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c1.magma_out.bz2 +0 -0
  340. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c2.magma_out.bz2 +0 -0
  341. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c3.magma_out.bz2 +0 -0
  342. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c4.magma_out.bz2 +0 -0
  343. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c5.magma_out.bz2 +0 -0
  344. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c6.magma_out.bz2 +0 -0
  345. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c7.magma_out.bz2 +0 -0
  346. snappy/ptolemy/regina_testing_files_generalized/m003__sl3_c0.magma_out.bz2 +0 -0
  347. snappy/ptolemy/regina_testing_files_generalized/m003__sl3_c1.magma_out.bz2 +0 -0
  348. snappy/ptolemy/regina_testing_files_generalized/m015__sl2_c0.magma_out.bz2 +0 -0
  349. snappy/ptolemy/regina_testing_files_generalized/m015__sl2_c1.magma_out.bz2 +0 -0
  350. snappy/ptolemy/regina_testing_files_generalized/m015__sl3_c0.magma_out.bz2 +0 -0
  351. snappy/ptolemy/regina_testing_files_generalized/m015__sl3_c1.magma_out.bz2 +0 -0
  352. snappy/ptolemy/rur.py +545 -0
  353. snappy/ptolemy/solutionsToPrimeIdealGroebnerBasis.py +277 -0
  354. snappy/ptolemy/test.py +1126 -0
  355. snappy/ptolemy/testing_files/3_1__sl2_c0.magma_out.bz2 +0 -0
  356. snappy/ptolemy/testing_files/3_1__sl2_c1.magma_out.bz2 +0 -0
  357. snappy/ptolemy/testing_files/4_1__sl2_c0.magma_out.bz2 +0 -0
  358. snappy/ptolemy/testing_files/4_1__sl2_c1.magma_out.bz2 +0 -0
  359. snappy/ptolemy/testing_files/4_1__sl3_c0.magma_out.bz2 +0 -0
  360. snappy/ptolemy/testing_files/4_1__sl4_c0.magma_out.bz2 +0 -0
  361. snappy/ptolemy/testing_files/4_1__sl4_c1.magma_out.bz2 +0 -0
  362. snappy/ptolemy/testing_files/5_2__sl2_c0.magma_out.bz2 +0 -0
  363. snappy/ptolemy/testing_files/5_2__sl2_c1.magma_out.bz2 +0 -0
  364. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c0.magma_out.bz2 +0 -0
  365. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c1.magma_out.bz2 +0 -0
  366. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c2.magma_out.bz2 +0 -0
  367. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c3.magma_out.bz2 +0 -0
  368. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c4.magma_out.bz2 +0 -0
  369. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c5.magma_out.bz2 +0 -0
  370. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c6.magma_out.bz2 +0 -0
  371. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c7.magma_out.bz2 +0 -0
  372. snappy/ptolemy/testing_files/data/pgl2/OrientableCuspedCensus/03_tetrahedra/m019__sl2_c0.magma_out +95 -0
  373. snappy/ptolemy/testing_files/data/pgl2/OrientableCuspedCensus/03_tetrahedra/m019__sl2_c1.magma_out +95 -0
  374. snappy/ptolemy/testing_files/m015__sl3_c0.magma_out.bz2 +0 -0
  375. snappy/ptolemy/testing_files/m135__sl2_c0.magma_out.bz2 +0 -0
  376. snappy/ptolemy/testing_files/m135__sl2_c1.magma_out.bz2 +0 -0
  377. snappy/ptolemy/testing_files/m135__sl2_c2.magma_out.bz2 +0 -0
  378. snappy/ptolemy/testing_files/m135__sl2_c3.magma_out.bz2 +0 -0
  379. snappy/ptolemy/testing_files/m135__sl2_c4.magma_out.bz2 +0 -0
  380. snappy/ptolemy/testing_files/m135__sl2_c5.magma_out.bz2 +0 -0
  381. snappy/ptolemy/testing_files/m135__sl2_c6.magma_out.bz2 +0 -0
  382. snappy/ptolemy/testing_files/m135__sl2_c7.magma_out.bz2 +0 -0
  383. snappy/ptolemy/testing_files/s000__sl2_c0.magma_out.bz2 +0 -0
  384. snappy/ptolemy/testing_files/s000__sl2_c1.magma_out.bz2 +0 -0
  385. snappy/ptolemy/testing_files/t00000__sl2_c0.magma_out.bz2 +0 -0
  386. snappy/ptolemy/testing_files/t00000__sl2_c1.magma_out.bz2 +0 -0
  387. snappy/ptolemy/testing_files/v0000__sl2_c0.magma_out.bz2 +0 -0
  388. snappy/ptolemy/testing_files/v0000__sl2_c1.magma_out.bz2 +0 -0
  389. snappy/ptolemy/testing_files/v0000__sl2_c2.magma_out.bz2 +0 -0
  390. snappy/ptolemy/testing_files/v0000__sl2_c3.magma_out.bz2 +0 -0
  391. snappy/ptolemy/testing_files_generalized/m003__sl2_c0.magma_out.bz2 +0 -0
  392. snappy/ptolemy/testing_files_generalized/m003__sl2_c1.magma_out.bz2 +0 -0
  393. snappy/ptolemy/testing_files_generalized/m003__sl3_c0.magma_out.bz2 +0 -0
  394. snappy/ptolemy/testing_files_generalized/m003__sl3_c1.magma_out.bz2 +0 -0
  395. snappy/ptolemy/testing_files_generalized/m004__sl2_c0.magma_out.bz2 +0 -0
  396. snappy/ptolemy/testing_files_generalized/m004__sl2_c1.magma_out.bz2 +0 -0
  397. snappy/ptolemy/testing_files_generalized/m015__sl2_c1.magma_out.bz2 +0 -0
  398. snappy/ptolemy/testing_files_generalized/m015__sl3_c0.magma_out.bz2 +0 -0
  399. snappy/ptolemy/testing_files_rur/m052__sl3_c0.rur.bz2 +0 -0
  400. snappy/ptolemy/utilities.py +236 -0
  401. snappy/raytracing/__init__.py +64 -0
  402. snappy/raytracing/additional_horospheres.py +64 -0
  403. snappy/raytracing/additional_len_spec_choices.py +63 -0
  404. snappy/raytracing/cohomology_fractal.py +197 -0
  405. snappy/raytracing/eyeball.py +124 -0
  406. snappy/raytracing/finite_raytracing_data.py +237 -0
  407. snappy/raytracing/finite_viewer.py +590 -0
  408. snappy/raytracing/geodesic_tube_info.py +174 -0
  409. snappy/raytracing/geodesics.py +246 -0
  410. snappy/raytracing/geodesics_window.py +258 -0
  411. snappy/raytracing/gui_utilities.py +293 -0
  412. snappy/raytracing/hyperboloid_navigation.py +556 -0
  413. snappy/raytracing/hyperboloid_utilities.py +234 -0
  414. snappy/raytracing/ideal_raytracing_data.py +592 -0
  415. snappy/raytracing/inside_viewer.py +974 -0
  416. snappy/raytracing/pack.py +22 -0
  417. snappy/raytracing/raytracing_data.py +126 -0
  418. snappy/raytracing/raytracing_view.py +454 -0
  419. snappy/raytracing/shaders/Eye.png +0 -0
  420. snappy/raytracing/shaders/NonGeometric.png +0 -0
  421. snappy/raytracing/shaders/__init__.py +101 -0
  422. snappy/raytracing/shaders/fragment.glsl +1744 -0
  423. snappy/raytracing/test.py +29 -0
  424. snappy/raytracing/tooltip.py +146 -0
  425. snappy/raytracing/upper_halfspace_utilities.py +98 -0
  426. snappy/raytracing/view_scale_controller.py +98 -0
  427. snappy/raytracing/zoom_slider/__init__.py +263 -0
  428. snappy/raytracing/zoom_slider/inward.png +0 -0
  429. snappy/raytracing/zoom_slider/inward18.png +0 -0
  430. snappy/raytracing/zoom_slider/outward.png +0 -0
  431. snappy/raytracing/zoom_slider/outward18.png +0 -0
  432. snappy/raytracing/zoom_slider/test.py +20 -0
  433. snappy/sage_helper.py +119 -0
  434. snappy/settings.py +407 -0
  435. snappy/shell.py +53 -0
  436. snappy/snap/__init__.py +117 -0
  437. snappy/snap/character_varieties.py +375 -0
  438. snappy/snap/find_field.py +372 -0
  439. snappy/snap/fox_milnor.py +271 -0
  440. snappy/snap/fundamental_polyhedron.py +569 -0
  441. snappy/snap/generators.py +39 -0
  442. snappy/snap/interval_reps.py +81 -0
  443. snappy/snap/kernel_structures.py +128 -0
  444. snappy/snap/mcomplex_base.py +18 -0
  445. snappy/snap/nsagetools.py +716 -0
  446. snappy/snap/peripheral/__init__.py +1 -0
  447. snappy/snap/peripheral/dual_cellulation.py +219 -0
  448. snappy/snap/peripheral/link.py +127 -0
  449. snappy/snap/peripheral/peripheral.py +159 -0
  450. snappy/snap/peripheral/surface.py +522 -0
  451. snappy/snap/peripheral/test.py +35 -0
  452. snappy/snap/polished_reps.py +335 -0
  453. snappy/snap/shapes.py +152 -0
  454. snappy/snap/slice_obs_HKL/__init__.py +194 -0
  455. snappy/snap/slice_obs_HKL/basics.py +236 -0
  456. snappy/snap/slice_obs_HKL/direct.py +217 -0
  457. snappy/snap/slice_obs_HKL/poly_norm.py +212 -0
  458. snappy/snap/slice_obs_HKL/rep_theory.py +424 -0
  459. snappy/snap/t3mlite/__init__.py +2 -0
  460. snappy/snap/t3mlite/arrow.py +243 -0
  461. snappy/snap/t3mlite/corner.py +22 -0
  462. snappy/snap/t3mlite/edge.py +172 -0
  463. snappy/snap/t3mlite/face.py +37 -0
  464. snappy/snap/t3mlite/files.py +211 -0
  465. snappy/snap/t3mlite/homology.py +53 -0
  466. snappy/snap/t3mlite/linalg.py +419 -0
  467. snappy/snap/t3mlite/mcomplex.py +1499 -0
  468. snappy/snap/t3mlite/perm4.py +320 -0
  469. snappy/snap/t3mlite/setup.py +12 -0
  470. snappy/snap/t3mlite/simplex.py +199 -0
  471. snappy/snap/t3mlite/spun.py +297 -0
  472. snappy/snap/t3mlite/surface.py +519 -0
  473. snappy/snap/t3mlite/test.py +20 -0
  474. snappy/snap/t3mlite/test_vs_regina.py +86 -0
  475. snappy/snap/t3mlite/tetrahedron.py +109 -0
  476. snappy/snap/t3mlite/vertex.py +42 -0
  477. snappy/snap/test.py +139 -0
  478. snappy/snap/utilities.py +288 -0
  479. snappy/test.py +213 -0
  480. snappy/test_cases.py +263 -0
  481. snappy/testing.py +131 -0
  482. snappy/tiling/__init__.py +2 -0
  483. snappy/tiling/dict_based_set.py +79 -0
  484. snappy/tiling/floor.py +49 -0
  485. snappy/tiling/hyperboloid_dict.py +54 -0
  486. snappy/tiling/iter_utils.py +78 -0
  487. snappy/tiling/lifted_tetrahedron.py +22 -0
  488. snappy/tiling/lifted_tetrahedron_set.py +54 -0
  489. snappy/tiling/quotient_dict.py +70 -0
  490. snappy/tiling/real_hash_dict.py +164 -0
  491. snappy/tiling/test.py +23 -0
  492. snappy/tiling/tile.py +224 -0
  493. snappy/tiling/triangle.py +33 -0
  494. snappy/tkterminal.py +920 -0
  495. snappy/twister/__init__.py +20 -0
  496. snappy/twister/main.py +646 -0
  497. snappy/twister/surfaces/S_0_1 +3 -0
  498. snappy/twister/surfaces/S_0_2 +3 -0
  499. snappy/twister/surfaces/S_0_4 +7 -0
  500. snappy/twister/surfaces/S_0_4_Lantern +8 -0
  501. snappy/twister/surfaces/S_1 +3 -0
  502. snappy/twister/surfaces/S_1_1 +4 -0
  503. snappy/twister/surfaces/S_1_2 +5 -0
  504. snappy/twister/surfaces/S_1_2_5 +6 -0
  505. snappy/twister/surfaces/S_2 +6 -0
  506. snappy/twister/surfaces/S_2_1 +8 -0
  507. snappy/twister/surfaces/S_2_heeg +10 -0
  508. snappy/twister/surfaces/S_3 +8 -0
  509. snappy/twister/surfaces/S_3_1 +10 -0
  510. snappy/twister/surfaces/S_4_1 +12 -0
  511. snappy/twister/surfaces/S_5_1 +14 -0
  512. snappy/twister/surfaces/heeg_fig8 +9 -0
  513. snappy/twister/twister_core.cpython-310-aarch64-linux-gnu.so +0 -0
  514. snappy/upper_halfspace/__init__.py +146 -0
  515. snappy/upper_halfspace/ideal_point.py +29 -0
  516. snappy/verify/__init__.py +13 -0
  517. snappy/verify/canonical.py +542 -0
  518. snappy/verify/complex_volume/__init__.py +18 -0
  519. snappy/verify/complex_volume/adjust_torsion.py +86 -0
  520. snappy/verify/complex_volume/closed.py +168 -0
  521. snappy/verify/complex_volume/compute_ptolemys.py +90 -0
  522. snappy/verify/complex_volume/cusped.py +56 -0
  523. snappy/verify/complex_volume/extended_bloch.py +201 -0
  524. snappy/verify/cusp_translations.py +85 -0
  525. snappy/verify/edge_equations.py +80 -0
  526. snappy/verify/exceptions.py +254 -0
  527. snappy/verify/hyperbolicity.py +224 -0
  528. snappy/verify/interval_newton_shapes_engine.py +523 -0
  529. snappy/verify/interval_tree.py +400 -0
  530. snappy/verify/krawczyk_shapes_engine.py +518 -0
  531. snappy/verify/real_algebra.py +286 -0
  532. snappy/verify/shapes.py +25 -0
  533. snappy/verify/square_extensions.py +1005 -0
  534. snappy/verify/test.py +72 -0
  535. snappy/verify/volume.py +128 -0
  536. snappy/version.py +2 -0
  537. snappy-3.3.dist-info/METADATA +58 -0
  538. snappy-3.3.dist-info/RECORD +541 -0
  539. snappy-3.3.dist-info/WHEEL +6 -0
  540. snappy-3.3.dist-info/entry_points.txt +2 -0
  541. snappy-3.3.dist-info/top_level.txt +28 -0
@@ -0,0 +1,215 @@
1
+ .. SnapPy documentation master file
2
+ You can adapt this file completely to your liking, but it should at least
3
+ contain the root `toctree` directive.
4
+
5
+ ======
6
+ SnapPy
7
+ ======
8
+
9
+ What is SnapPy?
10
+ ===============
11
+
12
+ .. image:: images/SnapPy-196.png
13
+ :align: right
14
+ :alt: SnapPy logo
15
+
16
+
17
+ SnapPy is a program for studying the topology and geometry of
18
+ 3-manifolds, with a focus on hyperbolic structures. It runs on Mac OS
19
+ X, Linux, and Windows, and combines a link editor and 3D-graphics for
20
+ Dirichlet domains and cusp neighborhoods with a powerful command-line
21
+ interface based on the Python_ programming language. You can see it
22
+ :doc:`in action<screenshots>`, learn how to :doc:`install<installing>`
23
+ it, and watch the :doc:`tutorial<tutorial>`.
24
+
25
+ .. _Python: http://python.org
26
+
27
+ News
28
+ ====
29
+
30
+ * Version 3.3 (January 2026):
31
+
32
+ - :class:`Link <spherogram.Link>` now supports band moves and can
33
+ search for ribbon disks and ribbon concordances. See
34
+ :meth:`ribbon_concordant_links
35
+ <spherogram.Link.ribbon_concordant_links>` and :meth:`add_band
36
+ <spherogram.Link.add_band>`. From `[DG]
37
+ <https://arXiv.org/abs/2512.21825>`_.
38
+
39
+ - New census :class:`RibbonLinks <snappy.RibbonLinks>`. From `[DG]
40
+ <https://arXiv.org/abs/2512.21825>`_.
41
+
42
+ - Additional slice obstructions added to
43
+ :meth:`slice_obstruction_HKL
44
+ <snappy.Triangulation.slice_obstruction_HKL>`.
45
+ From `[DG] <https://arXiv.org/abs/2512.21825>`_.
46
+
47
+ - The Fox-Milnor slice obstruction is now available as
48
+ :meth:`fox_milnor_test <snappy.Triangulation.fox_milnor_test>`.
49
+ From `[DG] <https://arXiv.org/abs/2512.21825>`_.
50
+
51
+
52
+ - The census :class:`OrientableCuspedCensus
53
+ <snappy.OrientableCuspedCensus>` has been extended to 10 ideal
54
+ tetrahedra by `[Li] <https://arXiv.org/abs/2512.02142>`_,
55
+ adding 150,000 new manifolds.
56
+
57
+ - Margulis number can now be computed with
58
+ :meth:`margulis <snappy.Manifold.margulis>`.
59
+
60
+ - The upper bounds on the bridge number of a link from `[BKVV2020]
61
+ <https://dx.doi.org/10.4310/CAG.2020.v28.n2.a2>`_ and `[BKP2025]
62
+ <https://arxiv.org/abs/2504.10517>`_ are available as
63
+ :meth:`bridge_upper_bound <spherogram.Link.bridge_upper_bound>`.
64
+
65
+ - :meth:`triangulation_isosig <snappy.Manifold.triangulation_isosig>` now
66
+ preserves the orientation of the core curve rather than the Dehn-filling
67
+ curve - thus, preserving the (unoriented) spun-triangulation structure.
68
+ This only changes the result when ``ignore_curves=True`` (and
69
+ ``ignore_orientation`` and ``ignore_filling_orientations`` have their
70
+ default values).
71
+
72
+ - Fixing a bug in
73
+ :meth:`length_spectrum_alt <snappy.Manifold.length_spectrum_alt>`
74
+ and
75
+ :meth:`length_spectrum_alt_gen <snappy.Manifold.length_spectrum_alt_gen>`.
76
+ The estimate for the upper bound of the global spine radius was not
77
+ correct in all cases. Note that we expect this bug to be very hard to hit
78
+ and do not have a single example where the result of these methods was
79
+ wrong.
80
+
81
+ - :meth:`length_spectrum_alt <snappy.Manifold.length_spectrum_alt>` can be
82
+ given ``count`` and ``max_len`` at the same time. In that case, it stops
83
+ when enough geodesics have been listed to ensure that they include the
84
+ ``count`` shortest geodesics or that they include all geodesics shorter
85
+ than ``max_len``.
86
+
87
+ - Acceleration to
88
+ :meth:`length_spectrum_alt <snappy.Manifold.length_spectrum_alt>` when
89
+ the next geodesic has large gap to the last geodesic in the result.
90
+ It uses the new ``include_intermediates=True`` flag of
91
+ :meth:`length_spectrum_alt_gen <snappy.Manifold.length_spectrum_alt_gen>`.
92
+
93
+ - Computing maximal cusp areas in an unbiased way uses a simpler algorithm
94
+ which also returns tighter intervals for verified computations.
95
+ This affects :meth:`cusp_areas <snappy.Manifold.cusp_areas>` and related
96
+ methods.
97
+
98
+ - Support for Python 3.14 and SageMath 10.8.
99
+
100
+
101
+
102
+ * Version 3.2 (January 2025):
103
+
104
+ - An alternative implementation of the length spectrum. It supports verified
105
+ computations and is significantly faster in some cases. See
106
+ :meth:`length_spectrum_alt <snappy.Manifold.length_spectrum_alt>`
107
+ and
108
+ :meth:`length_spectrum_alt_gen <snappy.Manifold.length_spectrum_alt_gen>`.
109
+
110
+ - :meth:`isometry_signature <snappy.Manifold.isometry_signature>` now also
111
+ works for closed manifolds.
112
+
113
+ - A paper plane or eye ball in the
114
+ :meth:`inside_view <snappy.Manifold.inside_view>` showing the position
115
+ and bearing of the user in the hyperbolic manifold. By default, we now show
116
+ the paper plane instead of the edges of the triangulation so that the view
117
+ is intrinsic to the manifold. The geodesics window now also features a
118
+ button to put the camera onto a geodesic. Here are some examples:
119
+
120
+ .. list-table::
121
+ :width: 100%
122
+ :class: borderless
123
+
124
+ * - .. image:: images/o9_00000_systole_paper_plane.jpg
125
+ :width: 90%
126
+ :align: center
127
+ :alt: Paper plane near shortest geodesic of o9_00000
128
+ - .. image:: images/o9_00000_systole_paper_plane_closer.jpg
129
+ :width: 90%
130
+ :align: center
131
+ :alt: Paper plane very near shortest geodesic of o9_00000
132
+ - .. image:: images/m004_paper_plane_on_systole.jpg
133
+ :width: 90%
134
+ :align: center
135
+ :alt: Paper plane on shortest geodesic of m004
136
+ - .. image:: images/m125_paper_plane.jpg
137
+ :width: 90%
138
+ :align: center
139
+ :alt: Paper plane coming out of a cusp of m125
140
+
141
+ - A faster and more robust algorithm to the compute maximal cusp area matrix.
142
+ The new algorithm is now the default for
143
+ :meth:`~snappy.Manifold.cusp_area_matrix`,
144
+ :meth:`~snappy.Manifold.cusp_areas`,
145
+ :meth:`~snappy.Manifold.short_slopes` and
146
+ :meth:`~snappy.Manifold.cusp_translations`.
147
+
148
+ - New options ``ignore_curves`` and ``ignore_filling_orientations``
149
+ for :meth:`~snappy.Triangulation.triangulation_isosig`. Also
150
+ fixing a subtle bug where the filling coefficients returned by
151
+ :meth:`triangulation_isosig <snappy.Triangulation.triangulation_isosig>` were
152
+ not canonical when ``ignore_curve_orientations = True``.
153
+
154
+ - :meth:`~snappy.Manifold.canonical_retriangulation`
155
+ and
156
+ :meth:`~snappy.Manifold.isometry_signature` fail with
157
+ exceptions rather than silently returning ``None``. In particular, it now
158
+ safe to compare isometry signatures (without further checks) to determine
159
+ whether M and N are isometric hyperbolic manifolds::
160
+
161
+ >>> M.isometry_signature(verified=True) == N.isometry_signature(verified=True)
162
+
163
+ - Bug fix to :meth:`slice_obstruction_HKL
164
+ <snappy.Manifold.slice_obstruction_HKL>`: earlier versions
165
+ incorrectly allowed looking at mod 2 homology of the branched
166
+ cover, where the theory does not directly apply.
167
+
168
+ - New self-contained SnapPy application for Linux.
169
+
170
+ - Support for Python 3.13 and SageMath 10.5.
171
+
172
+ * :doc:`Complete version history <news>`.
173
+
174
+ Documentation
175
+ =============
176
+
177
+ .. toctree::
178
+ :maxdepth: 1
179
+
180
+ installing
181
+ screenshots
182
+ tutorial
183
+ snappy
184
+ plink
185
+ spherogram
186
+ snap
187
+ verify
188
+ other
189
+ news
190
+ credits
191
+ bugs
192
+ todo
193
+ development
194
+
195
+ Credits
196
+ =======
197
+
198
+ Written by `Marc Culler <http://www.math.uic.edu/~culler>`_, `Nathan
199
+ Dunfield <http://dunfield.info>`_, and `Matthias Goerner
200
+ <http://www.unhyperbolic.org/>`_ using the SnapPea kernel written by
201
+ `Jeff Weeks <http://www.geometrygames.org>`_, with contributions from
202
+ :doc:`many others <credits>`. If you use SnapPy in your work, please
203
+ :ref:`cite it as described here <credits:Citing SnapPy>`. If you
204
+ encounter problems with SnapPy, :doc:`please report them <bugs>`.
205
+
206
+ Released under the terms of the `GNU General Public License
207
+ <http://www.gnu.org/licenses/gpl-2.0.txt>`_, version 2 or later.
208
+
209
+ The development of SnapPy was partially supported by grants from the
210
+ National Science Foundation, including DMS-0707136, DMS-0906155,
211
+ DMS-1105476, DMS-1510204, DMS-1811156, and DMS-2303572, and the
212
+ Institute for Computational and Experimental Research in
213
+ Mathematics. Any opinions, findings, and conclusions or
214
+ recommendations expressed on this site are those of the authors and do
215
+ not necessarily reflect the views of the National Science Foundation.
@@ -0,0 +1,249 @@
1
+ .. Installing SnapPy
2
+
3
+ Installing SnapPy
4
+ =================
5
+
6
+ Here are detailed instructions on how to get SnapPy working on a
7
+ variety of platforms. The current version is |release| which was released
8
+ on |release_date|. If you encounter any problems installing SnapPy,
9
+ :doc:`please let us know <bugs>`.
10
+
11
+ macOS
12
+ -----
13
+
14
+ Simply download `SnapPy.dmg
15
+ <https://github.com/3-manifolds/SnapPy/releases/latest/download/SnapPy.dmg>`_
16
+ and copy SnapPy.app to the Applications folder. Double-click to start
17
+ it, just like any other application. The current version works with macOS 10.15 and
18
+ newer and earlier releases `can be found here
19
+ <https://github.com/3-manifolds/SnapPy/releases/>`_.
20
+
21
+ Windows
22
+ -------
23
+
24
+ Simply download and run `InstallSnapPy.exe
25
+ <https://github.com/3-manifolds/SnapPy/releases/latest/download/InstallSnapPy.exe>`_.
26
+ Earlier releases `can be found here
27
+ <https://github.com/3-manifolds/SnapPy/releases/>`_.
28
+
29
+
30
+ Linux app
31
+ ---------
32
+
33
+ Starting with SnapPy 3.2, you can install snappy on Linux by downloading
34
+ `SnapPy-x86_64.AppImage
35
+ <https://github.com/3-manifolds/SnapPy/releases/latest/download/SnapPy-x86_64.AppImage>`_, which is a completely self-contained SnapPy `AppImage
36
+ <https://docs.appimage.org/introduction/quickstart.html#ref-quickstart>`_
37
+ that should work on any Linux system from the last 5 years.
38
+
39
+ After downloading the AppImage, follow the recipe below::
40
+
41
+ mkdir -p ~/bin
42
+ mv ~/Downloads/SnapPy-x86_64.AppImage ~/bin
43
+ chmod +x ~/bin/SnapPy-x86_64.AppImage
44
+ ln -s -f ~/bin/SnapPy-x86_64.AppImage ~/bin/SnapPy
45
+ ~/bin/SnapPy-x86_64.AppImage --install
46
+
47
+ The last command registers the SnapPy app with your desktop system and
48
+ starts it. Next time, you can start SnapPy by using the desktop
49
+ search tool with GNOME or the main menu with KDE. You can pin also the icon
50
+ to your dash or task bar for easy access. From a terminal window, you
51
+ can also start the app by typing ``SnapPy`` provided ``~/bin`` is in
52
+ your `$PATH <https://opensource.com/article/17/6/set-path-linux>`_.
53
+
54
+ The AppImage contains its own private copy of Python, so if
55
+ you plan to use SnapPy in your own Python programs, skip ahead to
56
+ `Python Modules for Linux`_.
57
+
58
+
59
+ Python Modules for macOS or Windows
60
+ -----------------------------------
61
+
62
+ If you write Python programs on macOS or Windows, you may wish to
63
+ install SnapPy as a Python module into your own copy of Python. We
64
+ support Python 3.9 and up. (On macOS, use a Python downloaded from
65
+ `Python.org <http://python.org>`_ and not the one provided by Apple.)
66
+ After installing Python, you may install a SnapPy module from your
67
+ Terminal application or Command Prompt with the command::
68
+
69
+ python3 -m pip install --upgrade --user snappy snappy_15_knots
70
+
71
+ If you do not want the larger version of HTLinkExteriors that includes
72
+ the 15 crossing knots (it uses 110M of disk space), omit
73
+ ``snappy_15_knots`` from the command.
74
+
75
+
76
+ Python Modules for Linux
77
+ ------------------------
78
+
79
+ You can also use SnapPy with your Linux system's version of Python,
80
+ for example if you want to incorporate SnapPy in your own Python
81
+ scripts. These instructions assume you have system administrator
82
+ (superuser) privileges to install software packages from your Linux
83
+ distribution. (If you're not a superuser, use either the
84
+ `Linux app`_ or `conda`_.)
85
+
86
+ The first step is to install Python and other requirements; here's how
87
+ to do that on the most popular Linux distributions:
88
+
89
+ + **Ubuntu/Debian/Mint/MX Linux/Elementary:** Tested on Ubuntu 24.04::
90
+
91
+ sudo apt install python3-pip python3-tk
92
+
93
+ + **Fedora**: Tested on Fedora 41::
94
+
95
+ sudo dnf install python3-pip python3-tkinter
96
+
97
+ + **Arch/Manjaro/EndeavourOS**: Install via::
98
+
99
+ sudo pacman -Sy python-pip tk
100
+
101
+ + **openSUSE**: For Tumbleweed::
102
+
103
+ sudo zypper install python3-pip python3-tk
104
+
105
+ For Leap, as of version 15.6 you need to ask for a recent version of
106
+ Python or it will give you Python 3.6 which is too old for SnapPy::
107
+
108
+ sudo zypper install python312-pip python312-tk
109
+
110
+ You will need to replace ``python3`` by ``python3.12`` in subsequent
111
+ steps.
112
+
113
+ + **Red Hat Enterprise Linux/CentOS/Rocky Linux/AlmaLinux:**: These instructions
114
+ are for version 8 or later; tested on AlmaLinux 8 and 9::
115
+
116
+ sudo dnf install python3.11-pip python3.11-tkinter
117
+
118
+ You will also need to replace ``python3`` by ``python3.11`` in subsequent
119
+ steps.
120
+
121
+
122
+ Next, you need to install the SnapPy Python modules. For this, you can
123
+ either use a *virtual environment* (``python -m venv``) or do a *user
124
+ install* (``pip install --user``). The former will work on any
125
+ version of Linux, whereas the latter is now strongly discouraged on
126
+ many systems (e.g. Ubuntu 24.04). If you have not previously
127
+ installed SnapPy on this computer, we recommend using a virtual
128
+ environment, but suggest a user install if you are upgrading an
129
+ existing version of SnapPy that was installed in that manner.
130
+
131
+ Virtual environment
132
+ Here is the `official tutorial
133
+ <https://docs.python.org/3/tutorial/venv.html>`_ on using virtual
134
+ environments in Python and an `in-depth article
135
+ <https://realpython.com/python-virtual-environments-a-primer/>`_. A
136
+ recipe is::
137
+
138
+ python3 -m venv snappy_venv
139
+ # Switch to snappy_venv's Python
140
+ source snappy_venv/bin/activate
141
+ pip install snappy snappy_15_knots
142
+ # Start the SnapPy app!
143
+ SnapPy
144
+ # Return to system Python
145
+ deactivate
146
+
147
+ If you always want to use the ``snappy_venv`` Python, adjust your
148
+ `$PATH <https://opensource.com/article/17/6/set-path-linux>`_ to
149
+ **start** with ``snappy_venv/bin``.
150
+
151
+ User install
152
+ To do a user install with pip, try::
153
+
154
+ # Note no "sudo" below!
155
+ python3 -m pip install --upgrade --user snappy snappy_15_knots
156
+
157
+ If you get a long error message that starts::
158
+
159
+ error: externally-managed-environment
160
+
161
+ you should probably use a virtual environment; however,
162
+ you can force pip to do a user install via::
163
+
164
+ # Note no "sudo" below!
165
+ python3 -m pip install --upgrade --user --break-system-packages snappy snappy_15_knots
166
+
167
+ Despite the scary name, provided you don't use ``sudo``, this will
168
+ not actually modify the system packages, but rather install
169
+ ``snappy`` into the subdirectory
170
+ ``~/.local/share/python3.*/site-packages`` of your home directory.
171
+
172
+ After a user install, you run the following command to start
173
+ the app::
174
+
175
+ ~/.local/bin/SnapPy
176
+
177
+ So that you can start SnapPy with just the command ``SnapPy``, make
178
+ sure ``~/.local/bin`` is in `in your path
179
+ <https://opensource.com/article/17/6/set-path-linux>`_.
180
+
181
+
182
+ SageMath
183
+ --------
184
+
185
+ SnapPy has some special features when used within `SageMath
186
+ <http://sagemath.org>`_, the universal mathematics software based on
187
+ Python. This section describes how to install SnapPy into your
188
+ existing copy of SageMath::
189
+
190
+ sage -pip install --upgrade snappy snappy_15_knots
191
+
192
+ Alternatively, SageMath on `CoCalc <https://cocalc.com/>`_ (formerly
193
+ the SageMathCloud) also has SnapPy preinstalled, and the graphics
194
+ features even work via the `X11 interface
195
+ <http://blog.sagemath.com/cocalc/2018/11/05/x11.html>`_, see the
196
+ bottom of that page for more.
197
+
198
+ The graphical features may or may not work, depending on how Tkinter
199
+ was configured within Sage. (There is no problem on macOS if you use
200
+ this `SageMath binary
201
+ <https://github.com/3-manifolds/Sage_macOS/releases>`_.) If the
202
+ graphical features seem to "hang" when you try to start them, type
203
+ ``%gui tk`` at the Sage prompt; please note that doing so may break
204
+ Sage's "attach" feature.
205
+
206
+
207
+ Kitchen sink
208
+ ------------
209
+
210
+ SnapPy gains extra features when used in `SageMath`_ and one can use
211
+ Sage's Python to interact not just with SnapPy but a range of other
212
+ computational tools in low-dimensional topology including
213
+ `Regina <http://regina-normal.github.io/>`_,
214
+ `snap <http://snap-pari.sourceforge.net>`_,
215
+ `heegaard <https://github.com/3-manifolds/heegaard>`_,
216
+ `gridlink <https://github.com/3-manifolds/gridlink>`_,
217
+ and `flipper <http://flipper.readthedocs.io>`_.
218
+ We offer a `prepackaged Docker image
219
+ <https://hub.docker.com/r/computop/sage/>`_ with all of the above tools
220
+ and many more; using this is sometimes the easiest way to get a
221
+ working setup for such multifaceted computations, especially on Windows. For more, watch
222
+ `this demonstration <https://icerm.brown.edu/video_archive/?play=1992>`_.
223
+
224
+
225
+ Conda
226
+ -----
227
+
228
+ Conda can be used to install Python on all platforms and is a
229
+ particularly good choice to use SnapPy on the older Linux systems
230
+ often found on high-performance clusters. Here is a recipe for
231
+ installing SnapPy into a new conda environment on macOS or Linux::
232
+
233
+ source ~/miniforge3/bin/activate
234
+ mamba create --name snappy_env python=3.12
235
+ conda activate snappy_env
236
+ pip install snappy
237
+ python -m snappy.app
238
+
239
+
240
+ Source code
241
+ -----------
242
+
243
+ The complete source code for all platforms: |tarball|_
244
+
245
+ You can also browse our `source code repository
246
+ <https://github.com/3-manifolds/SnapPy>`_ or clone it using `git
247
+ <https://git-scm.com/>`_ via::
248
+
249
+ git clone https://github.com/3-manifolds/SnapPy.git
@@ -0,0 +1,6 @@
1
+ Manifold: the main class
2
+ ========================
3
+
4
+ .. autoclass:: snappy.Manifold
5
+ :members:
6
+ :inherited-members:
@@ -0,0 +1,46 @@
1
+ ManifoldHP: High-precision variant
2
+ ==================================================
3
+
4
+ A ManifoldHP is a variant of :class:`Manifold <snappy.Manifold>` which
5
+ does all floating-point calculations in `quad-double precision
6
+ <http://web.mit.edu/tabbott/Public/quaddouble-debian/qd-2.3.4-old/docs/qd.pdf>`_,
7
+ which has four times as many significant digits as the ordinary
8
+ `double precision numbers
9
+ <http://en.wikipedia.org/wiki/Double_precision_floating-point_format>`_
10
+ used by Manifold. More precisely, numbers used in ManifoldHP have 212
11
+ bits for the mantissa/significand (roughly 63 decimal digits) versus
12
+ 53 bits with Manifold.
13
+
14
+ To the user, the only difference between Manifold and ManifoldHP is the extra precision::
15
+
16
+ >>> L = Manifold('m004')
17
+ >>> L.volume()
18
+ 2.02988321282
19
+ >>> H = ManifoldHP('m004')
20
+ >>> H.volume()
21
+ 2.029883212819307250042405108549040571883378615060599584034978214
22
+
23
+ and it is easy to go back and forth between the two types::
24
+
25
+ >>> D = H.low_precision()
26
+ >>> D.volume(), type(D)
27
+ (2.02988321282, <class 'snappy.Manifold'>)
28
+ >>> U = L.high_precision()
29
+ >>> type(U)
30
+ <class 'snappy.ManifoldHP'>
31
+
32
+ FAQ
33
+ ---
34
+
35
+ Q. How does this differ from the program `Snap <http://snap-pari.sourceforge.net/>`_ or the :doc:`corresponding features <snap>` of SnapPy?
36
+
37
+ A. Snap computes hyperbolic structures to whatever precision you specify, not just 212 bits. However, only some aspects of that structure can be accessed at the higher precision. In contrast, with ManifoldHP every part of the SnapPea kernel uses the high-precision structure. Eventually, we hope to add a ManifoldAP which allows for arbitrary precision throughout the kernel.
38
+
39
+ Q. Are there any negatives to using ManifoldHP over Manifold?
40
+
41
+ A. Yes, ManifoldHP is generally slower by a factor of 10 to 100. Multiplying two quad-double numbers requires at least 10 ordinary double multiplications, so some of this is inevitable.
42
+
43
+ Q. What is one place where the extra precision really helps?
44
+
45
+ A. Computing Dirichlet domains and subsidiary things like the length spectrum. A ManifoldHP can find the Dirichlet domain of a typically 15 crossing knot exterior but Manifold can't.
46
+