snappy 3.2__cp313-cp313-macosx_11_0_arm64.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (503) hide show
  1. snappy/CyOpenGL.cpython-313-darwin.so +0 -0
  2. snappy/SnapPy.cpython-313-darwin.so +0 -0
  3. snappy/SnapPy.ico +0 -0
  4. snappy/SnapPy.png +0 -0
  5. snappy/SnapPyHP.cpython-313-darwin.so +0 -0
  6. snappy/__init__.py +760 -0
  7. snappy/app.py +605 -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 +38 -0
  13. snappy/cusps/cusp_area_matrix.py +101 -0
  14. snappy/cusps/cusp_areas_from_matrix.py +173 -0
  15. snappy/cusps/maximal_cusp_area_matrix.py +136 -0
  16. snappy/cusps/test.py +21 -0
  17. snappy/cusps/trig_cusp_area_matrix.py +63 -0
  18. snappy/database.py +454 -0
  19. snappy/db_utilities.py +79 -0
  20. snappy/decorated_isosig.py +710 -0
  21. snappy/dev/__init__.py +0 -0
  22. snappy/dev/extended_ptolemy/__init__.py +8 -0
  23. snappy/dev/extended_ptolemy/closed.py +106 -0
  24. snappy/dev/extended_ptolemy/complexVolumesClosed.py +149 -0
  25. snappy/dev/extended_ptolemy/direct.py +42 -0
  26. snappy/dev/extended_ptolemy/extended.py +406 -0
  27. snappy/dev/extended_ptolemy/giac_helper.py +43 -0
  28. snappy/dev/extended_ptolemy/giac_rur.py +129 -0
  29. snappy/dev/extended_ptolemy/gluing.py +46 -0
  30. snappy/dev/extended_ptolemy/phc_wrapper.py +220 -0
  31. snappy/dev/extended_ptolemy/printMatrices.py +70 -0
  32. snappy/dev/vericlosed/__init__.py +1 -0
  33. snappy/dev/vericlosed/computeApproxHyperbolicStructureNew.py +159 -0
  34. snappy/dev/vericlosed/computeApproxHyperbolicStructureOrb.py +90 -0
  35. snappy/dev/vericlosed/computeVerifiedHyperbolicStructure.py +111 -0
  36. snappy/dev/vericlosed/gimbalLoopFinder.py +130 -0
  37. snappy/dev/vericlosed/hyperbolicStructure.py +313 -0
  38. snappy/dev/vericlosed/krawczykCertifiedEdgeLengthsEngine.py +165 -0
  39. snappy/dev/vericlosed/oneVertexTruncatedComplex.py +122 -0
  40. snappy/dev/vericlosed/orb/__init__.py +1 -0
  41. snappy/dev/vericlosed/orb/orb_solution_for_snappea_finite_triangulation_mac +0 -0
  42. snappy/dev/vericlosed/parseVertexGramMatrixFile.py +47 -0
  43. snappy/dev/vericlosed/polishApproxHyperbolicStructure.py +61 -0
  44. snappy/dev/vericlosed/test.py +54 -0
  45. snappy/dev/vericlosed/truncatedComplex.py +176 -0
  46. snappy/dev/vericlosed/verificationError.py +58 -0
  47. snappy/dev/vericlosed/verifyHyperbolicStructureEngine.py +177 -0
  48. snappy/doc/_images/SnapPy-196.png +0 -0
  49. snappy/doc/_images/geodesics.jpg +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 +51 -0
  61. snappy/doc/_sources/credits.rst.txt +75 -0
  62. snappy/doc/_sources/development.rst.txt +259 -0
  63. snappy/doc/_sources/index.rst.txt +182 -0
  64. snappy/doc/_sources/installing.rst.txt +247 -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 +355 -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 +925 -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 +156 -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 +199 -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 +620 -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 +427 -0
  152. snappy/doc/credits.html +181 -0
  153. snappy/doc/development.html +384 -0
  154. snappy/doc/genindex.html +1331 -0
  155. snappy/doc/index.html +262 -0
  156. snappy/doc/installing.html +346 -0
  157. snappy/doc/manifold.html +3452 -0
  158. snappy/doc/manifoldhp.html +180 -0
  159. snappy/doc/news.html +388 -0
  160. snappy/doc/objects.inv +0 -0
  161. snappy/doc/other.html +161 -0
  162. snappy/doc/platonic_census.html +375 -0
  163. snappy/doc/plink.html +210 -0
  164. snappy/doc/ptolemy.html +254 -0
  165. snappy/doc/ptolemy_classes.html +1144 -0
  166. snappy/doc/ptolemy_examples1.html +409 -0
  167. snappy/doc/ptolemy_examples2.html +471 -0
  168. snappy/doc/ptolemy_examples3.html +414 -0
  169. snappy/doc/ptolemy_examples4.html +195 -0
  170. snappy/doc/ptolemy_prelim.html +248 -0
  171. snappy/doc/py-modindex.html +165 -0
  172. snappy/doc/screenshots.html +141 -0
  173. snappy/doc/search.html +135 -0
  174. snappy/doc/searchindex.js +1 -0
  175. snappy/doc/snap.html +202 -0
  176. snappy/doc/snappy.html +181 -0
  177. snappy/doc/spherogram.html +1211 -0
  178. snappy/doc/todo.html +166 -0
  179. snappy/doc/triangulation.html +1584 -0
  180. snappy/doc/tutorial.html +159 -0
  181. snappy/doc/verify.html +330 -0
  182. snappy/doc/verify_internals.html +1235 -0
  183. snappy/drilling/__init__.py +456 -0
  184. snappy/drilling/barycentric.py +103 -0
  185. snappy/drilling/constants.py +5 -0
  186. snappy/drilling/crush.py +270 -0
  187. snappy/drilling/cusps.py +125 -0
  188. snappy/drilling/debug.py +242 -0
  189. snappy/drilling/epsilons.py +6 -0
  190. snappy/drilling/exceptions.py +55 -0
  191. snappy/drilling/moves.py +620 -0
  192. snappy/drilling/peripheral_curves.py +210 -0
  193. snappy/drilling/perturb.py +188 -0
  194. snappy/drilling/shorten.py +36 -0
  195. snappy/drilling/subdivide.py +274 -0
  196. snappy/drilling/test.py +23 -0
  197. snappy/drilling/test_cases.py +126 -0
  198. snappy/drilling/tracing.py +351 -0
  199. snappy/exceptions.py +26 -0
  200. snappy/export_stl.py +120 -0
  201. snappy/exterior_to_link/__init__.py +2 -0
  202. snappy/exterior_to_link/barycentric_geometry.py +463 -0
  203. snappy/exterior_to_link/exceptions.py +6 -0
  204. snappy/exterior_to_link/geodesic_map.json +14408 -0
  205. snappy/exterior_to_link/hyp_utils.py +112 -0
  206. snappy/exterior_to_link/link_projection.py +323 -0
  207. snappy/exterior_to_link/main.py +197 -0
  208. snappy/exterior_to_link/mcomplex_with_expansion.py +261 -0
  209. snappy/exterior_to_link/mcomplex_with_link.py +687 -0
  210. snappy/exterior_to_link/mcomplex_with_memory.py +162 -0
  211. snappy/exterior_to_link/pl_utils.py +491 -0
  212. snappy/exterior_to_link/put_in_S3.py +156 -0
  213. snappy/exterior_to_link/rational_linear_algebra.py +123 -0
  214. snappy/exterior_to_link/rational_linear_algebra_wrapped.py +135 -0
  215. snappy/exterior_to_link/simplify_to_base_tri.py +114 -0
  216. snappy/exterior_to_link/stored_moves.py +475 -0
  217. snappy/exterior_to_link/test.py +31 -0
  218. snappy/filedialog.py +28 -0
  219. snappy/geometric_structure/__init__.py +212 -0
  220. snappy/geometric_structure/cusp_neighborhood/__init__.py +3 -0
  221. snappy/geometric_structure/cusp_neighborhood/complex_cusp_cross_section.py +697 -0
  222. snappy/geometric_structure/cusp_neighborhood/cusp_cross_section_base.py +484 -0
  223. snappy/geometric_structure/cusp_neighborhood/exceptions.py +42 -0
  224. snappy/geometric_structure/cusp_neighborhood/real_cusp_cross_section.py +298 -0
  225. snappy/geometric_structure/cusp_neighborhood/tiles_for_cusp_neighborhood.py +159 -0
  226. snappy/geometric_structure/cusp_neighborhood/vertices.py +32 -0
  227. snappy/geometric_structure/geodesic/__init__.py +0 -0
  228. snappy/geometric_structure/geodesic/add_core_curves.py +152 -0
  229. snappy/geometric_structure/geodesic/avoid_core_curves.py +369 -0
  230. snappy/geometric_structure/geodesic/canonical_keys.py +52 -0
  231. snappy/geometric_structure/geodesic/check_away_from_core_curve.py +60 -0
  232. snappy/geometric_structure/geodesic/constants.py +6 -0
  233. snappy/geometric_structure/geodesic/exceptions.py +22 -0
  234. snappy/geometric_structure/geodesic/fixed_points.py +93 -0
  235. snappy/geometric_structure/geodesic/geodesic_start_point_info.py +435 -0
  236. snappy/geometric_structure/geodesic/graph_trace_helper.py +67 -0
  237. snappy/geometric_structure/geodesic/line.py +30 -0
  238. snappy/geometric_structure/geodesic/multiplicity.py +127 -0
  239. snappy/geometric_structure/geodesic/tiles_for_geodesic.py +101 -0
  240. snappy/geometric_structure/test.py +22 -0
  241. snappy/gui.py +121 -0
  242. snappy/horoviewer.py +443 -0
  243. snappy/hyperboloid/__init__.py +212 -0
  244. snappy/hyperboloid/distances.py +245 -0
  245. snappy/hyperboloid/horoball.py +19 -0
  246. snappy/hyperboloid/line.py +35 -0
  247. snappy/hyperboloid/point.py +9 -0
  248. snappy/hyperboloid/triangle.py +29 -0
  249. snappy/info_icon.gif +0 -0
  250. snappy/infowindow.py +65 -0
  251. snappy/isometry_signature.py +382 -0
  252. snappy/len_spec/__init__.py +596 -0
  253. snappy/len_spec/geodesic_info.py +110 -0
  254. snappy/len_spec/geodesic_key_info_dict.py +117 -0
  255. snappy/len_spec/geodesic_piece.py +143 -0
  256. snappy/len_spec/geometric_structure.py +182 -0
  257. snappy/len_spec/geometry.py +80 -0
  258. snappy/len_spec/length_spectrum_geodesic_info.py +170 -0
  259. snappy/len_spec/spine.py +206 -0
  260. snappy/len_spec/test.py +24 -0
  261. snappy/len_spec/test_cases.py +69 -0
  262. snappy/len_spec/tile.py +275 -0
  263. snappy/len_spec/word.py +86 -0
  264. snappy/manifolds/HTWKnots/alternating.gz +0 -0
  265. snappy/manifolds/HTWKnots/nonalternating.gz +0 -0
  266. snappy/manifolds/__init__.py +3 -0
  267. snappy/math_basics.py +176 -0
  268. snappy/matrix.py +525 -0
  269. snappy/number.py +657 -0
  270. snappy/numeric_output_checker.py +345 -0
  271. snappy/pari.py +41 -0
  272. snappy/phone_home.py +57 -0
  273. snappy/polyviewer.py +259 -0
  274. snappy/ptolemy/__init__.py +17 -0
  275. snappy/ptolemy/component.py +103 -0
  276. snappy/ptolemy/coordinates.py +2290 -0
  277. snappy/ptolemy/fieldExtensions.py +153 -0
  278. snappy/ptolemy/findLoops.py +473 -0
  279. snappy/ptolemy/geometricRep.py +59 -0
  280. snappy/ptolemy/homology.py +165 -0
  281. snappy/ptolemy/magma/default.magma_template +229 -0
  282. snappy/ptolemy/magma/radicalsOfPrimaryDecomposition.magma_template +79 -0
  283. snappy/ptolemy/manifoldMethods.py +395 -0
  284. snappy/ptolemy/matrix.py +350 -0
  285. snappy/ptolemy/numericalSolutionsToGroebnerBasis.py +113 -0
  286. snappy/ptolemy/polynomial.py +857 -0
  287. snappy/ptolemy/processComponents.py +173 -0
  288. snappy/ptolemy/processFileBase.py +247 -0
  289. snappy/ptolemy/processFileDispatch.py +46 -0
  290. snappy/ptolemy/processMagmaFile.py +392 -0
  291. snappy/ptolemy/processRurFile.py +150 -0
  292. snappy/ptolemy/ptolemyGeneralizedObstructionClass.py +102 -0
  293. snappy/ptolemy/ptolemyObstructionClass.py +64 -0
  294. snappy/ptolemy/ptolemyVariety.py +1029 -0
  295. snappy/ptolemy/ptolemyVarietyPrimeIdealGroebnerBasis.py +140 -0
  296. snappy/ptolemy/reginaWrapper.py +698 -0
  297. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c0.magma_out.bz2 +0 -0
  298. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c1.magma_out.bz2 +0 -0
  299. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c2.magma_out.bz2 +0 -0
  300. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c3.magma_out.bz2 +0 -0
  301. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c4.magma_out.bz2 +0 -0
  302. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c5.magma_out.bz2 +0 -0
  303. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c6.magma_out.bz2 +0 -0
  304. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c7.magma_out.bz2 +0 -0
  305. snappy/ptolemy/regina_testing_files_generalized/m003__sl3_c0.magma_out.bz2 +0 -0
  306. snappy/ptolemy/regina_testing_files_generalized/m003__sl3_c1.magma_out.bz2 +0 -0
  307. snappy/ptolemy/regina_testing_files_generalized/m015__sl2_c0.magma_out.bz2 +0 -0
  308. snappy/ptolemy/regina_testing_files_generalized/m015__sl2_c1.magma_out.bz2 +0 -0
  309. snappy/ptolemy/regina_testing_files_generalized/m015__sl3_c0.magma_out.bz2 +0 -0
  310. snappy/ptolemy/regina_testing_files_generalized/m015__sl3_c1.magma_out.bz2 +0 -0
  311. snappy/ptolemy/rur.py +545 -0
  312. snappy/ptolemy/solutionsToPrimeIdealGroebnerBasis.py +277 -0
  313. snappy/ptolemy/test.py +1126 -0
  314. snappy/ptolemy/testing_files/3_1__sl2_c0.magma_out.bz2 +0 -0
  315. snappy/ptolemy/testing_files/3_1__sl2_c1.magma_out.bz2 +0 -0
  316. snappy/ptolemy/testing_files/4_1__sl2_c0.magma_out.bz2 +0 -0
  317. snappy/ptolemy/testing_files/4_1__sl2_c1.magma_out.bz2 +0 -0
  318. snappy/ptolemy/testing_files/4_1__sl3_c0.magma_out.bz2 +0 -0
  319. snappy/ptolemy/testing_files/4_1__sl4_c0.magma_out.bz2 +0 -0
  320. snappy/ptolemy/testing_files/4_1__sl4_c1.magma_out.bz2 +0 -0
  321. snappy/ptolemy/testing_files/5_2__sl2_c0.magma_out.bz2 +0 -0
  322. snappy/ptolemy/testing_files/5_2__sl2_c1.magma_out.bz2 +0 -0
  323. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c0.magma_out.bz2 +0 -0
  324. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c1.magma_out.bz2 +0 -0
  325. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c2.magma_out.bz2 +0 -0
  326. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c3.magma_out.bz2 +0 -0
  327. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c4.magma_out.bz2 +0 -0
  328. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c5.magma_out.bz2 +0 -0
  329. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c6.magma_out.bz2 +0 -0
  330. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c7.magma_out.bz2 +0 -0
  331. snappy/ptolemy/testing_files/data/pgl2/OrientableCuspedCensus/03_tetrahedra/m019__sl2_c0.magma_out +95 -0
  332. snappy/ptolemy/testing_files/data/pgl2/OrientableCuspedCensus/03_tetrahedra/m019__sl2_c1.magma_out +95 -0
  333. snappy/ptolemy/testing_files/m015__sl3_c0.magma_out.bz2 +0 -0
  334. snappy/ptolemy/testing_files/m135__sl2_c0.magma_out.bz2 +0 -0
  335. snappy/ptolemy/testing_files/m135__sl2_c1.magma_out.bz2 +0 -0
  336. snappy/ptolemy/testing_files/m135__sl2_c2.magma_out.bz2 +0 -0
  337. snappy/ptolemy/testing_files/m135__sl2_c3.magma_out.bz2 +0 -0
  338. snappy/ptolemy/testing_files/m135__sl2_c4.magma_out.bz2 +0 -0
  339. snappy/ptolemy/testing_files/m135__sl2_c5.magma_out.bz2 +0 -0
  340. snappy/ptolemy/testing_files/m135__sl2_c6.magma_out.bz2 +0 -0
  341. snappy/ptolemy/testing_files/m135__sl2_c7.magma_out.bz2 +0 -0
  342. snappy/ptolemy/testing_files/s000__sl2_c0.magma_out.bz2 +0 -0
  343. snappy/ptolemy/testing_files/s000__sl2_c1.magma_out.bz2 +0 -0
  344. snappy/ptolemy/testing_files/t00000__sl2_c0.magma_out.bz2 +0 -0
  345. snappy/ptolemy/testing_files/t00000__sl2_c1.magma_out.bz2 +0 -0
  346. snappy/ptolemy/testing_files/v0000__sl2_c0.magma_out.bz2 +0 -0
  347. snappy/ptolemy/testing_files/v0000__sl2_c1.magma_out.bz2 +0 -0
  348. snappy/ptolemy/testing_files/v0000__sl2_c2.magma_out.bz2 +0 -0
  349. snappy/ptolemy/testing_files/v0000__sl2_c3.magma_out.bz2 +0 -0
  350. snappy/ptolemy/testing_files_generalized/m003__sl2_c0.magma_out.bz2 +0 -0
  351. snappy/ptolemy/testing_files_generalized/m003__sl2_c1.magma_out.bz2 +0 -0
  352. snappy/ptolemy/testing_files_generalized/m003__sl3_c0.magma_out.bz2 +0 -0
  353. snappy/ptolemy/testing_files_generalized/m003__sl3_c1.magma_out.bz2 +0 -0
  354. snappy/ptolemy/testing_files_generalized/m004__sl2_c0.magma_out.bz2 +0 -0
  355. snappy/ptolemy/testing_files_generalized/m004__sl2_c1.magma_out.bz2 +0 -0
  356. snappy/ptolemy/testing_files_generalized/m015__sl2_c1.magma_out.bz2 +0 -0
  357. snappy/ptolemy/testing_files_generalized/m015__sl3_c0.magma_out.bz2 +0 -0
  358. snappy/ptolemy/testing_files_rur/m052__sl3_c0.rur.bz2 +0 -0
  359. snappy/ptolemy/utilities.py +236 -0
  360. snappy/raytracing/__init__.py +64 -0
  361. snappy/raytracing/additional_horospheres.py +64 -0
  362. snappy/raytracing/additional_len_spec_choices.py +63 -0
  363. snappy/raytracing/cohomology_fractal.py +197 -0
  364. snappy/raytracing/eyeball.py +123 -0
  365. snappy/raytracing/finite_raytracing_data.py +237 -0
  366. snappy/raytracing/finite_viewer.py +590 -0
  367. snappy/raytracing/geodesic_tube_info.py +174 -0
  368. snappy/raytracing/geodesics.py +246 -0
  369. snappy/raytracing/geodesics_window.py +258 -0
  370. snappy/raytracing/gui_utilities.py +293 -0
  371. snappy/raytracing/hyperboloid_navigation.py +556 -0
  372. snappy/raytracing/hyperboloid_utilities.py +234 -0
  373. snappy/raytracing/ideal_raytracing_data.py +592 -0
  374. snappy/raytracing/inside_viewer.py +974 -0
  375. snappy/raytracing/pack.py +22 -0
  376. snappy/raytracing/raytracing_data.py +126 -0
  377. snappy/raytracing/raytracing_view.py +454 -0
  378. snappy/raytracing/shaders/Eye.png +0 -0
  379. snappy/raytracing/shaders/NonGeometric.png +0 -0
  380. snappy/raytracing/shaders/__init__.py +101 -0
  381. snappy/raytracing/shaders/fragment.glsl +1744 -0
  382. snappy/raytracing/test.py +29 -0
  383. snappy/raytracing/tooltip.py +146 -0
  384. snappy/raytracing/upper_halfspace_utilities.py +98 -0
  385. snappy/raytracing/view_scale_controller.py +98 -0
  386. snappy/raytracing/zoom_slider/__init__.py +263 -0
  387. snappy/raytracing/zoom_slider/inward.png +0 -0
  388. snappy/raytracing/zoom_slider/inward18.png +0 -0
  389. snappy/raytracing/zoom_slider/outward.png +0 -0
  390. snappy/raytracing/zoom_slider/outward18.png +0 -0
  391. snappy/raytracing/zoom_slider/test.py +20 -0
  392. snappy/sage_helper.py +117 -0
  393. snappy/settings.py +409 -0
  394. snappy/shell.py +53 -0
  395. snappy/snap/__init__.py +114 -0
  396. snappy/snap/character_varieties.py +375 -0
  397. snappy/snap/find_field.py +372 -0
  398. snappy/snap/fundamental_polyhedron.py +569 -0
  399. snappy/snap/generators.py +39 -0
  400. snappy/snap/interval_reps.py +81 -0
  401. snappy/snap/kernel_structures.py +128 -0
  402. snappy/snap/mcomplex_base.py +18 -0
  403. snappy/snap/nsagetools.py +702 -0
  404. snappy/snap/peripheral/__init__.py +1 -0
  405. snappy/snap/peripheral/dual_cellulation.py +219 -0
  406. snappy/snap/peripheral/link.py +127 -0
  407. snappy/snap/peripheral/peripheral.py +159 -0
  408. snappy/snap/peripheral/surface.py +522 -0
  409. snappy/snap/peripheral/test.py +35 -0
  410. snappy/snap/polished_reps.py +335 -0
  411. snappy/snap/shapes.py +152 -0
  412. snappy/snap/slice_obs_HKL.py +668 -0
  413. snappy/snap/t3mlite/__init__.py +2 -0
  414. snappy/snap/t3mlite/arrow.py +243 -0
  415. snappy/snap/t3mlite/corner.py +22 -0
  416. snappy/snap/t3mlite/edge.py +172 -0
  417. snappy/snap/t3mlite/face.py +37 -0
  418. snappy/snap/t3mlite/files.py +211 -0
  419. snappy/snap/t3mlite/homology.py +53 -0
  420. snappy/snap/t3mlite/linalg.py +419 -0
  421. snappy/snap/t3mlite/mcomplex.py +1499 -0
  422. snappy/snap/t3mlite/perm4.py +320 -0
  423. snappy/snap/t3mlite/setup.py +12 -0
  424. snappy/snap/t3mlite/simplex.py +199 -0
  425. snappy/snap/t3mlite/spun.py +297 -0
  426. snappy/snap/t3mlite/surface.py +519 -0
  427. snappy/snap/t3mlite/test.py +20 -0
  428. snappy/snap/t3mlite/test_vs_regina.py +86 -0
  429. snappy/snap/t3mlite/tetrahedron.py +109 -0
  430. snappy/snap/t3mlite/vertex.py +42 -0
  431. snappy/snap/test.py +134 -0
  432. snappy/snap/utilities.py +288 -0
  433. snappy/test.py +209 -0
  434. snappy/test_cases.py +263 -0
  435. snappy/testing.py +131 -0
  436. snappy/tiling/__init__.py +2 -0
  437. snappy/tiling/canonical_key_dict.py +59 -0
  438. snappy/tiling/dict_based_set.py +79 -0
  439. snappy/tiling/floor.py +49 -0
  440. snappy/tiling/hyperboloid_dict.py +54 -0
  441. snappy/tiling/iter_utils.py +78 -0
  442. snappy/tiling/lifted_tetrahedron.py +22 -0
  443. snappy/tiling/lifted_tetrahedron_set.py +54 -0
  444. snappy/tiling/real_hash_dict.py +164 -0
  445. snappy/tiling/test.py +23 -0
  446. snappy/tiling/tile.py +215 -0
  447. snappy/tiling/triangle.py +33 -0
  448. snappy/tkterminal.py +920 -0
  449. snappy/twister/__init__.py +20 -0
  450. snappy/twister/main.py +646 -0
  451. snappy/twister/surfaces/S_0_1 +3 -0
  452. snappy/twister/surfaces/S_0_2 +3 -0
  453. snappy/twister/surfaces/S_0_4 +7 -0
  454. snappy/twister/surfaces/S_0_4_Lantern +8 -0
  455. snappy/twister/surfaces/S_1 +3 -0
  456. snappy/twister/surfaces/S_1_1 +4 -0
  457. snappy/twister/surfaces/S_1_2 +5 -0
  458. snappy/twister/surfaces/S_1_2_5 +6 -0
  459. snappy/twister/surfaces/S_2 +6 -0
  460. snappy/twister/surfaces/S_2_1 +8 -0
  461. snappy/twister/surfaces/S_2_heeg +10 -0
  462. snappy/twister/surfaces/S_3 +8 -0
  463. snappy/twister/surfaces/S_3_1 +10 -0
  464. snappy/twister/surfaces/S_4_1 +12 -0
  465. snappy/twister/surfaces/S_5_1 +14 -0
  466. snappy/twister/surfaces/heeg_fig8 +9 -0
  467. snappy/twister/twister_core.cpython-313-darwin.so +0 -0
  468. snappy/upper_halfspace/__init__.py +146 -0
  469. snappy/upper_halfspace/ideal_point.py +26 -0
  470. snappy/verify/__init__.py +13 -0
  471. snappy/verify/canonical.py +542 -0
  472. snappy/verify/complex_volume/__init__.py +18 -0
  473. snappy/verify/complex_volume/adjust_torsion.py +86 -0
  474. snappy/verify/complex_volume/closed.py +168 -0
  475. snappy/verify/complex_volume/compute_ptolemys.py +90 -0
  476. snappy/verify/complex_volume/cusped.py +56 -0
  477. snappy/verify/complex_volume/extended_bloch.py +201 -0
  478. snappy/verify/cusp_translations.py +85 -0
  479. snappy/verify/edge_equations.py +80 -0
  480. snappy/verify/exceptions.py +254 -0
  481. snappy/verify/hyperbolicity.py +224 -0
  482. snappy/verify/interval_newton_shapes_engine.py +523 -0
  483. snappy/verify/interval_tree.py +400 -0
  484. snappy/verify/krawczyk_shapes_engine.py +518 -0
  485. snappy/verify/maximal_cusp_area_matrix/__init__.py +46 -0
  486. snappy/verify/maximal_cusp_area_matrix/cusp_tiling_engine.py +419 -0
  487. snappy/verify/maximal_cusp_area_matrix/cusp_translate_engine.py +153 -0
  488. snappy/verify/real_algebra.py +286 -0
  489. snappy/verify/shapes.py +25 -0
  490. snappy/verify/short_slopes.py +200 -0
  491. snappy/verify/square_extensions.py +1005 -0
  492. snappy/verify/test.py +78 -0
  493. snappy/verify/upper_halfspace/__init__.py +9 -0
  494. snappy/verify/upper_halfspace/extended_matrix.py +100 -0
  495. snappy/verify/upper_halfspace/finite_point.py +283 -0
  496. snappy/verify/upper_halfspace/ideal_point.py +426 -0
  497. snappy/verify/volume.py +128 -0
  498. snappy/version.py +2 -0
  499. snappy-3.2.dist-info/METADATA +58 -0
  500. snappy-3.2.dist-info/RECORD +503 -0
  501. snappy-3.2.dist-info/WHEEL +5 -0
  502. snappy-3.2.dist-info/entry_points.txt +2 -0
  503. snappy-3.2.dist-info/top_level.txt +28 -0
@@ -0,0 +1,182 @@
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.2 (January 2025):
31
+
32
+ - An alternative implementation of the length spectrum. It supports verified
33
+ computations and is significantly faster in some cases. See
34
+ :meth:`length_spectrum_alt <snappy.Manifold.length_spectrum_alt>`
35
+ and
36
+ :meth:`length_spectrum_alt_gen <snappy.Manifold.length_spectrum_alt_gen>`.
37
+
38
+ - :meth:`isometry_signature <snappy.Manifold.isometry_signature>` now also
39
+ works for closed manifolds.
40
+
41
+ - A paper plane or eye ball in the
42
+ :meth:`inside_view <snappy.Manifold.inside_view>` showing the position
43
+ and bearing of the user in the hyperbolic manifold. By default, we now show
44
+ the paper plane instead of the edges of the triangulation so that the view
45
+ is intrinsic to the manifold. The geodesics window now also features a
46
+ button to put the camera onto a geodesic. Here are some examples:
47
+
48
+ .. list-table::
49
+ :width: 100%
50
+ :class: borderless
51
+
52
+ * - .. image:: images/o9_00000_systole_paper_plane.jpg
53
+ :width: 90%
54
+ :align: center
55
+ :alt: Paper plane near shortest geodesic of o9_00000
56
+ - .. image:: images/o9_00000_systole_paper_plane_closer.jpg
57
+ :width: 90%
58
+ :align: center
59
+ :alt: Paper plane very near shortest geodesic of o9_00000
60
+ - .. image:: images/m004_paper_plane_on_systole.jpg
61
+ :width: 90%
62
+ :align: center
63
+ :alt: Paper plane on shortest geodesic of m004
64
+ - .. image:: images/m125_paper_plane.jpg
65
+ :width: 90%
66
+ :align: center
67
+ :alt: Paper plane coming out of a cusp of m125
68
+
69
+ - A faster and more robust algorithm to the compute maximal cusp area matrix.
70
+ The new algorithm is now the default for
71
+ :meth:`~snappy.Manifold.cusp_area_matrix`,
72
+ :meth:`~snappy.Manifold.cusp_areas`,
73
+ :meth:`~snappy.Manifold.short_slopes` and
74
+ :meth:`~snappy.Manifold.cusp_translations`.
75
+
76
+ - New options ``ignore_curves`` and ``ignore_filling_orientations``
77
+ for :meth:`~snappy.Triangulation.triangulation_isosig`. Also
78
+ fixing a subtle bug where the filling coefficients returned by
79
+ :meth:`triangulation_isosig <snappy.Triangulation.triangulation_isosig>` were
80
+ not canonical when ``ignore_curve_orientations = True``.
81
+
82
+ - :meth:`~snappy.Manifold.canonical_retriangulation`
83
+ and
84
+ :meth:`~snappy.Manifold.isometry_signature` fail with
85
+ exceptions rather than silently returning ``None``. In particular, it now
86
+ safe to compare isometry signatures (without further checks) to determine
87
+ whether M and N are isometric hyperbolic manifolds::
88
+
89
+ >>> M.isometry_signature(verified=True) == N.isometry_signature(verified=True)
90
+
91
+ - Bug fix to :meth:`slice_obstruction_HKL
92
+ <snappy.Manifold.slice_obstruction_HKL>`: earlier versions
93
+ incorrectly allowed looking at mod 2 homology of the branched
94
+ cover, where the theory does not directly apply.
95
+
96
+ - New self-contained SnapPy application for Linux.
97
+
98
+ - Support for Python 3.13 and SageMath 10.5.
99
+
100
+
101
+ * Versions 3.1 (May 2023) and 3.1.1 (June 2023):
102
+
103
+ - A method :meth:`exterior_to_link <snappy.Manifold.exterior_to_link>`
104
+ for going from a link exterior to a link diagram taken from
105
+ `Dunfield-Obeidin-Rudd <https://arxiv.org/abs/2112.03251>`_.
106
+
107
+ - Covers now computed by the stand-alone `low_index
108
+ <https://pypi.org/project/low-index/>`_ module, which uses
109
+ multiple processor cores and is typically much faster than the old
110
+ code. In some cases, it is dramatically faster than even GAP or
111
+ Magma.
112
+
113
+ - Added geodesics to the :meth:`inside_view
114
+ <snappy.Manifold.inside_view>`. Here are some intersecting tubes
115
+ about closed geodesics in the manifold ``v3539(5,1)``:
116
+
117
+ .. image:: images/geodesics.jpg
118
+ :width: 50%
119
+ :align: center
120
+ :alt: Geodesic tubes for v3539(5,1)
121
+
122
+ - Added drilling any simple geodesic with :meth:`drill_word
123
+ <snappy.Manifold.drill_word>` and :meth:`drill_words
124
+ <snappy.Manifold.drill_words>`, not just those that are
125
+ :meth:`combinatorially simple <snappy.Manifold.dual_curves>`.
126
+
127
+ - Added `ignore_orientation` flag to :meth:`triangulation_isosig
128
+ <snappy.Triangulation.triangulation_isosig>`.
129
+
130
+ - Added `include_words` flag to :meth:`length_spectrum
131
+ <snappy.Manifold.length_spectrum>` for getting the word
132
+ corresponding to a geodesic which can be given to
133
+ :meth:`drill_word <snappy.Manifold.drill_word>`.
134
+
135
+ - Support for Python 3.11 and SageMath 10.0.
136
+
137
+ - Modernized styling of the documentation.
138
+
139
+ * :doc:`Complete version history <news>`.
140
+
141
+ Documentation
142
+ =============
143
+
144
+ .. toctree::
145
+ :maxdepth: 1
146
+
147
+ installing
148
+ screenshots
149
+ tutorial
150
+ snappy
151
+ plink
152
+ spherogram
153
+ snap
154
+ verify
155
+ other
156
+ news
157
+ credits
158
+ bugs
159
+ todo
160
+ development
161
+
162
+ Credits
163
+ =======
164
+
165
+ Written by `Marc Culler <http://www.math.uic.edu/~culler>`_, `Nathan
166
+ Dunfield <http://dunfield.info>`_, and `Matthias Goerner
167
+ <http://www.unhyperbolic.org/>`_ using the SnapPea kernel written by
168
+ `Jeff Weeks <http://www.geometrygames.org>`_, with contributions from
169
+ :doc:`many others <credits>`. If you use SnapPy in your work, please
170
+ :ref:`cite it as described here <credits:Citing SnapPy>`. If you
171
+ encounter problems with SnapPy, :doc:`please report them <bugs>`.
172
+
173
+ Released under the terms of the `GNU General Public License
174
+ <http://www.gnu.org/licenses/gpl-2.0.txt>`_, version 2 or later.
175
+
176
+ The development of SnapPy was partially supported by grants from the
177
+ National Science Foundation, including DMS-0707136, DMS-0906155,
178
+ DMS-1105476, DMS-1510204, DMS-1811156, and the Institute for
179
+ Computational and Experimental Research in Mathematics. Any opinions,
180
+ findings, and conclusions or recommendations expressed on this site
181
+ are those of the authors and do not necessarily reflect the views of
182
+ the National Science Foundation.
@@ -0,0 +1,247 @@
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.14 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, a completely self-contained SnapPy `AppImage
34
+ <https://docs.appimage.org/introduction/quickstart.html#ref-quickstart>`_
35
+ is available that should work on any Linux system from the last 5
36
+ years. This AppImage contains its own private copy of Python, so if
37
+ you plan to use SnapPy in your own Python programs, skip ahead to
38
+ `Python Modules for Linux`_. Here is the recipe for installing the
39
+ AppImage in ``~/bin`` after you have downloaded the file
40
+ `SnapPy-x86_64.AppImage
41
+ <https://github.com/3-manifolds/SnapPy/releases/latest/download/SnapPy-x86_64.AppImage.>`_::
42
+
43
+ mkdir -p ~/bin
44
+ mv ~/Downloads/SnapPy-x86_64.AppImage ~/bin
45
+ chmod +x ~/bin/SnapPy-x86_64.AppImage
46
+ ln -s -f ~/bin/SnapPy-x86_64.AppImage ~/bin/SnapPy
47
+ ~/bin/SnapPy-x86_64.AppImage --install
48
+
49
+ The last command registers the SnapPy app with your desktop system and
50
+ starts it. Next time, you can start SnapPy by using the desktop
51
+ search tool with GNOME or the main menu with KDE. You can pin also the icon
52
+ to your dash or task bar for easy access. From a terminal window, you
53
+ can also start the app by typing ``SnapPy`` provided ``~/bin`` is in
54
+ your `$PATH <https://opensource.com/article/17/6/set-path-linux>`_.
55
+
56
+
57
+ Python Modules for macOS or Windows
58
+ -----------------------------------
59
+
60
+ If you write Python programs on macOS or Windows, you may wish to
61
+ install SnapPy as a Python module into your own copy of Python. We
62
+ support Python 3.9 and up. (On macOS, use a Python downloaded from
63
+ `Python.org <http://python.org>`_ and not the one provided by Apple.)
64
+ After installing Python, you may install a SnapPy module from your
65
+ Terminal application or Command Prompt with the command::
66
+
67
+ python3 -m pip install --upgrade --user snappy snappy_15_knots
68
+
69
+ If you do not want the larger version of HTLinkExteriors that includes
70
+ the 15 crossing knots (it uses 110M of disk space), omit
71
+ ``snappy_15_knots`` from the command.
72
+
73
+
74
+ Python Modules for Linux
75
+ ------------------------
76
+
77
+ You can also use SnapPy with your Linux system's version of Python,
78
+ for example if you want to incorporate SnapPy in your own Python
79
+ scripts. These instructions assume you have system administrator
80
+ (superuser) privileges to install software packages from your Linux
81
+ distribution. (If you're not a superuser, use either the
82
+ `Linux app`_ or `conda`_.)
83
+
84
+ The first step is to install Python and other requirements; here's how
85
+ to do that on the most popular Linux distributions:
86
+
87
+ + **Ubuntu/Debian/Mint/MX Linux/Elementary:** Tested on Ubuntu 24.04::
88
+
89
+ sudo apt install python3-pip python3-tk
90
+
91
+ + **Fedora**: Tested on Fedora 41::
92
+
93
+ sudo dnf install python3-pip python3-tkinter
94
+
95
+ + **Arch/Manjaro/EndeavourOS**: Install via::
96
+
97
+ sudo pacman -Sy python-pip tk
98
+
99
+ + **openSUSE**: For Tumbleweed::
100
+
101
+ sudo zypper install python3-pip python3-tk
102
+
103
+ For Leap, as of version 15.6 you need to ask for a recent version of
104
+ Python or it will give you Python 3.6 which is too old for SnapPy::
105
+
106
+ sudo zypper install python312-pip python312-tk
107
+
108
+ You will need to replace ``python3`` by ``python3.12`` in subsequent
109
+ steps.
110
+
111
+ + **Red Hat Enterprise Linux/CentOS/Rocky Linux/AlmaLinux:**: These instructions
112
+ are for version 8 or later; tested on AlmaLinux 8 and 9::
113
+
114
+ sudo dnf install python3.11-pip python3.11-tkinter
115
+
116
+ You will also need to replace ``python3`` by ``python3.11`` in subsequent
117
+ steps.
118
+
119
+
120
+ Next, you need to install the SnapPy Python modules. For this, you can
121
+ either use a *virtual environment* (``python -m venv``) or do a *user
122
+ install* (``pip install --user``). The former will work on any
123
+ version of Linux, whereas the latter is now strongly discouraged on
124
+ many systems (e.g. Ubuntu 24.04). If you have not previously
125
+ installed SnapPy on this computer, we recommend using a virtual
126
+ environment, but suggest a user install if you are upgrading an
127
+ existing version of SnapPy that was installed in that manner.
128
+
129
+ Virtual environment
130
+ Here is the `official tutorial
131
+ <https://docs.python.org/3/tutorial/venv.html>`_ on using virtual
132
+ environments in Python and an `in-depth article
133
+ <https://realpython.com/python-virtual-environments-a-primer/>`_. A
134
+ recipe is::
135
+
136
+ python3 -m venv snappy_venv
137
+ # Switch to snappy_venv's Python
138
+ source snappy_venv/bin/activate
139
+ pip install snappy snappy_15_knots
140
+ # Start the SnapPy app!
141
+ SnapPy
142
+ # Return to system Python
143
+ deactivate
144
+
145
+ If you always want to use the ``snappy_venv`` Python, adjust your
146
+ `$PATH <https://opensource.com/article/17/6/set-path-linux>`_ to
147
+ **start** with ``snappy_venv/bin``.
148
+
149
+ User install
150
+ To do a user install with pip, try::
151
+
152
+ # Note no "sudo" below!
153
+ python3 -m pip install --upgrade --user snappy snappy_15_knots
154
+
155
+ If you get a long error message that starts::
156
+
157
+ error: externally-managed-environment
158
+
159
+ you should probably use a virtual environment; however,
160
+ you can force pip to do a user install via::
161
+
162
+ # Note no "sudo" below!
163
+ python3 -m pip install --upgrade --user --break-system-packages snappy snappy_15_knots
164
+
165
+ Despite the scary name, provided you don't use ``sudo``, this will
166
+ not actually modify the system packages, but rather install
167
+ ``snappy`` into the subdirectory
168
+ ``~/.local/share/python3.*/site-packages`` of your home directory.
169
+
170
+ After a user install, you run the following command to start
171
+ the app::
172
+
173
+ ~/.local/bin/SnapPy
174
+
175
+ So that you can start SnapPy with just the command ``SnapPy``, make
176
+ sure ``~/.local/bin`` is in `in your path
177
+ <https://opensource.com/article/17/6/set-path-linux>`_.
178
+
179
+
180
+ SageMath
181
+ --------
182
+
183
+ SnapPy has some special features when used within `SageMath
184
+ <http://sagemath.org>`_, the universal mathematics software based on
185
+ Python. This section describes how to install SnapPy into your
186
+ existing copy of SageMath::
187
+
188
+ sage -pip install --upgrade snappy snappy_15_knots
189
+
190
+ Alternatively, SageMath on `CoCalc <https://cocalc.com/>`_ (formerly
191
+ the SageMathCloud) also has SnapPy preinstalled, and the graphics
192
+ features even work via the `X11 interface
193
+ <http://blog.sagemath.com/cocalc/2018/11/05/x11.html>`_, see the
194
+ bottom of that page for more.
195
+
196
+ The graphical features may or may not work, depending on how Tkinter
197
+ was configured within Sage. (There is no problem on macOS if you use
198
+ this `SageMath binary
199
+ <https://github.com/3-manifolds/Sage_macOS/releases>`_.) If the
200
+ graphical features seem to "hang" when you try to start them, type
201
+ ``%gui tk`` at the Sage prompt; please note that doing so may break
202
+ Sage's "attach" feature.
203
+
204
+
205
+ Kitchen sink
206
+ ------------
207
+
208
+ SnapPy gains extra features when used in `SageMath`_ and one can use
209
+ Sage's Python to interact not just with SnapPy but a range of other
210
+ computational tools in low-dimensional topology including
211
+ `Regina <http://regina-normal.github.io/>`_,
212
+ `snap <http://snap-pari.sourceforge.net>`_,
213
+ `heegaard <https://github.com/3-manifolds/heegaard>`_,
214
+ `gridlink <https://github.com/3-manifolds/gridlink>`_,
215
+ and `flipper <http://flipper.readthedocs.io>`_.
216
+ We offer a `prepackaged Docker image
217
+ <https://hub.docker.com/r/computop/sage/>`_ with all of the above tools
218
+ and many more; using this is sometimes the easiest way to get a
219
+ working setup for such multifaceted computations, especially on Windows. For more, watch
220
+ `this demonstration <https://icerm.brown.edu/video_archive/?play=1992>`_.
221
+
222
+
223
+ Conda
224
+ -----
225
+
226
+ Conda can be used to install Python on all platforms and is a
227
+ particularly good choice to use SnapPy on the older Linux systems
228
+ often found on high-performance clusters. Here is a recipe for
229
+ installing SnapPy into a new conda environment on macOS or Linux::
230
+
231
+ source ~/miniforge3/bin/activate
232
+ mamba create --name snappy_env python=3.12
233
+ conda activate snappy_env
234
+ pip install snappy
235
+ python -m snappy.app
236
+
237
+
238
+ Source code
239
+ -----------
240
+
241
+ The complete source code for all platforms: |tarball|_
242
+
243
+ You can also browse our `source code repository
244
+ <https://github.com/3-manifolds/SnapPy>`_ or clone it using `git
245
+ <https://git-scm.com/>`_ via::
246
+
247
+ 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
+