snappy 3.2__cp310-cp310-macosx_10_12_x86_64.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-310-darwin.so +0 -0
  2. snappy/SnapPy.cpython-310-darwin.so +0 -0
  3. snappy/SnapPy.ico +0 -0
  4. snappy/SnapPy.png +0 -0
  5. snappy/SnapPyHP.cpython-310-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-310-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,177 @@
1
+ from .gimbalLoopFinder import GimbalLoopFinder
2
+ from .truncatedComplex import TruncatedComplex
3
+ from .hyperbolicStructure import HyperbolicStructure
4
+ from .verificationError import *
5
+
6
+ from sage.all import matrix, prod, RealDoubleField, pi
7
+
8
+ __all__ = [ 'VerifyHyperbolicStructureEngine']
9
+
10
+
11
+ class VerifyHyperbolicStructureEngine:
12
+ def __init__(self, hyperbolic_structure):
13
+ self.hyperbolic_structure = hyperbolic_structure
14
+ self.mcomplex = self.hyperbolic_structure.mcomplex
15
+
16
+ if not hyperbolic_structure.exact_edges:
17
+ raise RuntimeError(
18
+ 'Need to specify "exact edges", i.e., edges for which we '
19
+ 'already know by, e.g., the Krawczyk test that their edge '
20
+ 'equations are fullfilled')
21
+
22
+ num_edges = len(self.mcomplex.Edges)
23
+ exact_edges = set(hyperbolic_structure.exact_edges)
24
+
25
+ self.approx_edges = [i for i in range(num_edges)
26
+ if i not in exact_edges]
27
+
28
+ self.truncated_complex = TruncatedComplex(self.mcomplex)
29
+
30
+ self.gimbal_loops = [
31
+ GimbalLoopFinder(self.truncated_complex,
32
+ vertex,
33
+ self.approx_edges).compute_grouped_loop()
34
+ for vertex in self.mcomplex.Vertices ]
35
+
36
+ self.rotations_and_derivatives_for_approx_edges = {
37
+ e : HyperbolicStructure.so3_matrix_and_derivative_for_z_rotation(
38
+ self.hyperbolic_structure.angle_sums[e])
39
+ for e in self.approx_edges
40
+ }
41
+
42
+ def gimbal_derivative(self):
43
+
44
+ self.edge_index_to_column_index = {
45
+ e : i for i, e in enumerate(self.approx_edges)
46
+ }
47
+
48
+ RIF = self.hyperbolic_structure.vertex_gram_matrices[0].base_ring()
49
+ num_rows = 3 * len(self.mcomplex.Vertices)
50
+ num_cols = len(self.approx_edges)
51
+ result = matrix(RIF, num_rows, num_cols)
52
+
53
+ for i, gimbal_loop in enumerate(self.gimbal_loops):
54
+ path_matrices = [
55
+ self.hyperbolic_structure.so3_matrix_for_path(edgePath)
56
+ for edgeLoop, edgePath in gimbal_loop ]
57
+
58
+ for j, (edgeLoop, edgePath) in enumerate(gimbal_loop):
59
+ col = self.edge_index_to_column_index[edgeLoop.edge_index]
60
+ m = self._gimbal_derivative_matrix(
61
+ gimbal_loop, path_matrices, j)
62
+ result[3 * i , col] += m[0,1]
63
+ result[3 * i + 1, col] += m[0,2]
64
+ result[3 * i + 2, col] += m[1,2]
65
+
66
+ return result
67
+
68
+ def assert_avoiding_gimbal_lock(self):
69
+ d = self.gimbal_derivative()
70
+ if not VerifyHyperbolicStructureEngine.is_invertible(d):
71
+ raise GimbalDerivativeNotInvertibleError(d, d.determinant())
72
+
73
+ def assert_two_pi_in_ange_sum_intervals(self):
74
+ RIF = self.hyperbolic_structure.angle_sums[0].parent()
75
+ two_pi = RIF(2 * pi)
76
+
77
+ for angle in self.hyperbolic_structure.angle_sums:
78
+ if two_pi not in angle:
79
+ raise AngleSumIntervalNotContainingTwoPiError()
80
+
81
+ def assert_vertex_gram_matrices_valid(self):
82
+ for G_adj in self.hyperbolic_structure.vertex_gram_adjoints:
83
+ _assert_vertex_gram_adjoint_valid(G_adj)
84
+ for G in self.hyperbolic_structure.vertex_gram_matrices:
85
+ _assert_vertex_gram_matrix_valid (G )
86
+
87
+ def assert_verified_hyperbolic(self):
88
+ self.assert_vertex_gram_matrices_valid()
89
+ self.assert_avoiding_gimbal_lock()
90
+ self.assert_two_pi_in_ange_sum_intervals()
91
+
92
+ @staticmethod
93
+ def is_invertible(m):
94
+ r, c = m.dimensions()
95
+ if r != c:
96
+ raise AssertionError("Not a square matrix in invertible check "
97
+ "of VerifyHyperbolicStructureEngine.")
98
+
99
+ RIF = m.base_ring()
100
+ max_entry = RIF(1) / (r * c)
101
+
102
+ real_m = matrix(RealDoubleField(), m)
103
+ try:
104
+ real_approx_inv = real_m.inverse()
105
+ except ZeroDivisionError:
106
+ return False
107
+
108
+ approx_inv = real_approx_inv.change_ring(RIF)
109
+ idMatrix = matrix.identity(RIF, r)
110
+ t = approx_inv * m - idMatrix
111
+
112
+ for row in t:
113
+ for entry in row:
114
+ if not (entry < max_entry):
115
+ return False
116
+ return True
117
+
118
+ def _gimbal_derivative_matrix(self, gimbal_loop, path_matrices, j):
119
+
120
+ def term(i):
121
+ edgeLoop, path = gimbal_loop[i]
122
+ rotation_and_derivative = (
123
+ self.rotations_and_derivatives_for_approx_edges[
124
+ edgeLoop.edge_index])
125
+
126
+ if i == j:
127
+ return path_matrices[i] * rotation_and_derivative[1]
128
+ else:
129
+ return path_matrices[i] * rotation_and_derivative[0]
130
+
131
+ return prod([term(i) for i in range(len(gimbal_loop) - 1, -1, -1)])
132
+
133
+ def _assert_vertex_gram_adjoint_valid(G_adj):
134
+ for i in range(4):
135
+ if not (G_adj[i, i] < 0):
136
+ raise BadVertexGramMatrixError(
137
+ "Failed to verify diagonal %d cofactor < 0" % i)
138
+ for j in range(4):
139
+ if i != j:
140
+ if not (G_adj[i, j] ** 2 < G_adj[i, i] * G_adj[j, j]):
141
+ raise BadVertexGramMatrixError(
142
+ "Failed to verify cofactor inequality for (%d,%d)" % (i,j))
143
+
144
+ def _assert_vertex_gram_matrix_valid(G):
145
+ for i in range(4):
146
+ for j in range(4):
147
+ if not (G[i,j] <= -1):
148
+ raise BadVertexGramMatrixError(
149
+ "Failed to verify entry (%d,%d) <= - 1" % (i, j))
150
+
151
+ p = G.characteristic_polynomial()
152
+
153
+ # Budan-Fourier theorem (see e.g.,
154
+ # Saugata Basu, Richard Pollack, Marie-Francoise Roy
155
+ # Algorithms in Real Algebraic Geometry)
156
+ # it is sufficient to verify that a_0 < 0, a_1 > 0, a_2 < 0.
157
+ # for the characteristic polynomial
158
+ # p_G(x) = det(xI-G) = x^4 + 4x^3 + a_2 x^2 + a_1x + a_0.
159
+ #
160
+ a0, a1, a2, a3, a4 = p.coefficients(sparse = False)
161
+
162
+ if not a3 == 4:
163
+ raise BadVertexGramMatrixError(
164
+ "Failed to verify a3 = 4 for characteristic polynomial")
165
+ if not a4 == 1:
166
+ raise BadVertexGramMatrixError(
167
+ "Failed to verify a4 = 1 for characteristic polynomial")
168
+
169
+ if not (a0 < 0):
170
+ raise BadVertexGramMatrixError(
171
+ "Failed to verify a0 < 0 for characteristic polynomial")
172
+ if not (a1 > 0):
173
+ raise BadVertexGramMatrixError(
174
+ "Failed to verify a1 > 0 for characteristic polynomial")
175
+ if not (a2 < 0):
176
+ raise BadVertexGramMatrixError(
177
+ "Failed to verify a2 < 0 for characteristic polynomial")
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,40 @@
1
+ ==================
2
+ Additional Classes
3
+ ==================
4
+
5
+ .. automodule:: snappy
6
+
7
+ AbelianGroup
8
+ ============
9
+
10
+
11
+ .. autoclass:: AbelianGroup
12
+ :members:
13
+ :inherited-members:
14
+ :exclude-members: coefficients
15
+
16
+ FundamentalGroup
17
+ ================
18
+
19
+ .. autoclass:: HolonomyGroup
20
+ :members:
21
+ :inherited-members:
22
+
23
+ SymmetryGroup
24
+ =============
25
+ .. autoclass:: SymmetryGroup
26
+ :members:
27
+ :inherited-members:
28
+
29
+ DirichletDomain
30
+ ===============
31
+ .. autoclass:: DirichletDomain
32
+ :members:
33
+ :inherited-members:
34
+
35
+ CuspNeighborhood
36
+ ================
37
+
38
+ .. autoclass:: CuspNeighborhood
39
+ :members:
40
+ :inherited-members:
@@ -0,0 +1,14 @@
1
+ .. Reporting bugs and other problems
2
+
3
+ Reporting bugs and other problems
4
+ =================================
5
+
6
+ We very much welcome reports of any difficulties you encounter
7
+ installing or using SnapPy. While we do significant testing before
8
+ each release, with so many supported platforms/configurations and only
9
+ three core developers, we need your help to keep things running
10
+ smoothly. To report a problem, you may either `open a formal issue
11
+ ticket <https://github.com/3-manifolds/SnapPy/issues>`_ or `write to the
12
+ developers <snappy-help@computop.org>`_. As always, it is most helpful
13
+ if you include the details of your computer's configuration as well as
14
+ verbatim copies of any error messages.
@@ -0,0 +1,51 @@
1
+ Census manifolds
2
+ ================
3
+
4
+ Snappy comes with a large library of manifolds, which can be accessed
5
+ individually through the Manifold and Triangulation constructors but
6
+ can also be iterated through using the objects described on this
7
+ page.
8
+
9
+ SnapPy's iterators support several flexible methods for accessing
10
+ manifolds. They can be sliced (i.e. restricted to subranges) either
11
+ by index or by volume. Calling the iterator with keyword arguments
12
+ such as num_tets=1, betti=2 or num_cusps=3 returns an iterator which
13
+ is filtered by the specified conditions. In addition these iterators
14
+ can determine whether they contain a given manifold. They support
15
+ python's "A in B" syntax, and also provide an identify method which
16
+ will return a copy of the census manifold which is isometric to the
17
+ manifold passed as an argument.
18
+
19
+ .. currentmodule:: snappy
20
+ .. autodata:: OrientableCuspedCensus
21
+ .. autodata:: OrientableClosedCensus
22
+ .. autodata:: CensusKnots
23
+ .. autodata:: LinkExteriors
24
+ .. autodata:: HTLinkExteriors
25
+ .. autodata:: NonorientableCuspedCensus
26
+ .. autodata:: NonorientableClosedCensus
27
+
28
+ There are also:
29
+
30
+ .. toctree::
31
+ :maxdepth: 1
32
+
33
+ platonic_census
34
+
35
+ As instances of subclasses of ManifoldTable, the objects above
36
+ support the following methods.
37
+
38
+ .. autoclass:: snappy.database.ManifoldTable
39
+ :members:
40
+ :inherited-members:
41
+
42
+ Because of the large size of their datasets, the classes below
43
+ can only iterate through slices by index, and do not provide
44
+ the identification methods.
45
+
46
+ .. autoclass:: AlternatingKnotExteriors
47
+ :members:
48
+ :inherited-members:
49
+ .. autoclass:: NonalternatingKnotExteriors
50
+ :members:
51
+ :inherited-members:
@@ -0,0 +1,75 @@
1
+ Credits
2
+ =======
3
+
4
+ Primary development and maintenance:
5
+
6
+ * `Marc Culler <http://www.math.uic.edu/~culler>`_
7
+ * `Nathan Dunfield <http://dunfield.info>`_
8
+ * `Matthias Goerner <http://www.unhyperbolic.org/>`_
9
+ * `Jeff Weeks <http://www.geometrygames.org>`_
10
+
11
+ Additional contributions:
12
+
13
+ * Mark Bell, Tracy Hall, Saul Schleimer, `Twister <https://github.com/MarkCBell/twister>`_.
14
+
15
+ * Jim Hoste and Morwen Thistlethwaite, manifold and link censuses.
16
+
17
+ * Ben Burton, manifold censuses and isosig code.
18
+
19
+ * Abhijit Champanerkar and Ilya Kofman, knot censuses.
20
+
21
+ * Robert Lipschitz and Jennet Dickinson, improvements to Spherogram.
22
+
23
+ * Malik Obeidin, improvements to Spherogram and the manifold
24
+ databases.
25
+
26
+ * Malik Obeidin and Cameron Rudd, exterior to link diagram code.
27
+
28
+ * Jose Sanchez, 3D printing code.
29
+
30
+ * Jean-Philippe Burelle, SL(2, C) character variety code.
31
+
32
+ * David Bachman, Henry Segerman and Saul Schleimer, initial code the
33
+ raytraced inside view is based on.
34
+
35
+ * Zoltán Szabó, computing Knot Floer homology.
36
+
37
+ * `PARI library <http://pari.math.u-bordeaux.fr/>`_.
38
+
39
+ * `QD quad-double library
40
+ <http://crd-legacy.lbl.gov/~dhbailey/mpdist/>`_.
41
+
42
+ * Frédéric Chapoton, code cleanup and linting.
43
+
44
+ * Others, please let Marc or Nathan know if we've forgotten you.
45
+
46
+ Citing SnapPy
47
+ -------------
48
+
49
+ Please cite as:
50
+
51
+ M. Culler, N. M. Dunfield, M. Goerner, and J. R. Weeks, SnapPy, a computer program
52
+ for studying the geometry and topology of 3-manifolds, http://snappy.computop.org
53
+
54
+ or in BibTeX format ::
55
+
56
+ @misc{SnapPy,
57
+ author={Culler, Marc and Dunfield, Nathan M. and Goerner,
58
+ Matthias and Weeks, Jeffrey R.},
59
+ title={Snap{P}y, a computer program for studying the geometry and topology of $3$-manifolds},
60
+ howpublished={Available at \url{http://snappy.computop.org} (DD/MM/YYYY)},
61
+ }
62
+
63
+ or as an AMSRef::
64
+
65
+ \bib{SnapPy}{misc}{
66
+ author={Culler, Marc},
67
+ author={Dunfield, Nathan M.},
68
+ author={Goerner, Matthias},
69
+ author={Weeks, Jeffrey R.},
70
+ title={Snap{P}y, a computer program for studying the geometry and topology of $3$-manifolds},
71
+ note={Available at \url{http://snappy.computop.org} (DD/MM/YYYY)}
72
+ }
73
+
74
+ where DD/MM/YYYY should be replaced by the date when you downloaded your
75
+ copy of SnapPy.
@@ -0,0 +1,259 @@
1
+ Development Basics
2
+ ==================
3
+
4
+ Submitting patches
5
+ ------------------
6
+
7
+ The source code for SnapPy and its various parts are `hosted on GitHub
8
+ <https://github.com/3-manifolds>`_ as `Git repositories
9
+ <https://git-scm.com/>`_. To contribute a patch, create a free
10
+ GitHub account, fork the appropriate repository, and then send us a
11
+ pull request, as described in `here
12
+ <https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request>`_.
13
+
14
+
15
+ macOS
16
+ -----
17
+
18
+ Here is how to get a clean development setup under macOS.
19
+
20
+ - Install the latest Python 3.13 from Python.org using the `Mac
21
+ Installer Disk Image <http://www.python.org/download/>`_. Set your
22
+ path so that "python3" is::
23
+
24
+ /Library/Frameworks/Python.framework/Versions/3.13/bin/python3
25
+
26
+ - Use `pip <https://pip.pypa.io/en/latest/index.html>`_ to install the
27
+ following packages::
28
+
29
+ python3 -m pip install --upgrade setuptools virtualenv wheel pip
30
+ python3 -m pip install cython # Used for Python-C interfacing
31
+ python3 -m pip install sphinx # For building the documentation
32
+ python3 -m pip install ipython # Improved Python shell
33
+ python3 -m pip install py2app # For making app bundles
34
+ python3 -m pip install pyx FXrays low_index
35
+
36
+ - Get the source code from the repository, using Git. For
37
+ example you can install Git via its `package installer
38
+ <https://www.git-scm.org/>`_. Now do::
39
+
40
+ git clone https://github.com/3-manifolds/plink.git
41
+ git clone https://github.com/3-manifolds/spherogram.git
42
+ git clone https://github.com/3-manifolds/snappy.git
43
+
44
+ - Test the stand-alone link editor::
45
+
46
+ cd plink
47
+ python3 setup.py pip_install
48
+ python3 -m plink.app # Link editor appears!
49
+
50
+ This last command runs the script ``plink/app.py``; the real code for
51
+ the link editor is in ``plink/__init__.py``.
52
+
53
+ - Build and install Spherogram::
54
+
55
+ cd ../spherogram
56
+ python3 setup.py pip_install
57
+ python3 setup.py test
58
+
59
+ - Now build SnapPy itself. One builds it twice to generate the
60
+ documentation, much of which is extracted from the installed module::
61
+
62
+ cd ../snappy
63
+ python3 setup.py pip_install
64
+ python3 setup.py test # Run the tests; pretty picture should appear.
65
+ python3 -m snappy.app #SnapPy starts!
66
+
67
+ To build the clickable app, just do the following::
68
+
69
+ cd mac_osx_app
70
+ python3 release.py --manual
71
+
72
+ though for general development purposes ``python3 -m snappy.app`` is
73
+ usually the way to go.
74
+
75
+ Some major parts of the SnapPy codebase are:
76
+
77
+ - ``SnapPy.pyx``, ``SnapPycore.pxi``, ``SnapPy.pxi``: The Cython interface
78
+ to the SnapPea kernel
79
+ - ``opengl/CyOpenGL*.pyx``: The Cython interface to OpenGL*
80
+ - ``snappy/app.py``: The core GUI code
81
+ - ``snappy/polyviewer.py``: The GUI code for Dirichlet domains
82
+ - ``snappy/horoviewer.py``: The GUI code for horoball pictures
83
+ - ``snappy/database.py``: Interacts with the sqlite3 manifold database
84
+
85
+
86
+ Windows
87
+ -------
88
+
89
+ These instructions have been tested on Windows 10, and describe
90
+ setting up a development environment using the (free) MSVC
91
+ compiler. To build the CyPari subcomponent, which few will want or
92
+ need to do, one must install additional tools.
93
+
94
+ - Install `Python 3.13.1
95
+ <https://www.python.org/downloads/windows/>`_, specifically the
96
+ default 64-bit version (the file name will end in ``amd64.exe``).
97
+ These instructions assume it has been installed in the directory
98
+ ``C:\Python313`` which is not the default.
99
+
100
+ - With Python 3.13.1, you need the MSVC command line tools. You can
101
+ get them by using Microsoft's free `Build Tools for Visual Studio 2019
102
+ <https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=16>`_
103
+ installer and selecting the "C++ command line tools" and installing
104
+ the following subpackages: "MSVC v142 - VS 2019 C++ build tools",
105
+ "Testing tools core features", "C++/CLI support for v142", and
106
+ "Windows 10 SDK (most recent version)".
107
+
108
+ If you would like to make your own installer you will also need
109
+ `Inno Setup <http://www.jrsoftware.org/isdl.php>`_, specifically the
110
+ unicode version; tested with version 5.5.9.
111
+
112
+ - Install `MSYS2 <http://msys2.github.io>`_ as appropriate for your
113
+ version Windows. Follow the instructions on the webpage to update
114
+ everything to the very latest MSYS2 (``pacman -Sy pacman; pacman
115
+ -Syu; pacman -Su`` etc.). You should also install the ucrt toolchain::
116
+
117
+ pacman -S mingw-w64-ucrt-x86_64-toolchain
118
+
119
+ - Make a shortcut to ``c:\msys64\msys2.exe`` as you will be using it all
120
+ the time; alternatively, pin ``mys2.exe`` to your taskbar.
121
+
122
+ - Install some additional packages::
123
+
124
+ pacman -S git make nano openssh perl tar unzip wget winpty patch
125
+
126
+ - Install your favorite text editor, for example you can install Emacs
127
+ via::
128
+
129
+ pacman -S mingw-w64-x86_64-emacs
130
+
131
+ - Make it so that MinGW, Python, and Inno Setup are all in your PATH,
132
+ as well as work around some stupid bug, by making the end of your
133
+ "~/.bash_profile" file to read::
134
+
135
+ PATH=/c/Python313:/c/Python313/Scripts:$PATH
136
+ PATH=$PATH:'/c/Program Files (x86)/Inno Setup 5'
137
+ export PATH
138
+ alias emacs="/mingw64/bin/emacs"
139
+ winpty bash; exit
140
+
141
+ For example, do::
142
+
143
+ nano ~/.bash_profile
144
+
145
+ - Make sure you have the right version of Python in your path by
146
+ typing::
147
+
148
+ python --version
149
+
150
+ You should see something like ``Python 3.13.1``.
151
+
152
+ - Use pip to install some basic tools::
153
+
154
+ python -m pip install --upgrade pip setuptools wheel # Upgrades pip to the current version.
155
+ python -m pip install pyreadline sphinx cython cypari pyx FXrays low_index
156
+
157
+ - Fetch the latest development versions of the source straight from
158
+ the t3m repository::
159
+
160
+ git clone https://github.com/3-manifolds/plink.git
161
+ git clone https://github.com/3-manifolds/spherogram.git
162
+ git clone https://github.com/3-manifolds/snappy.git
163
+
164
+ - Build the components, from easiest to hardest, and then test::
165
+
166
+ cd plink
167
+ python setup.py pip_install
168
+ cd ../Spherogram
169
+ python setup.py pip_install
170
+ cd ../SnapPy
171
+ python setup.py pip_install
172
+ cd ..
173
+ python -m SnapPy.test
174
+
175
+ - To run the app, you can just do::
176
+
177
+ python -m snappy.app
178
+
179
+ - To build the binary installer, you need PyInstaller::
180
+
181
+ python -m pip install pyinstaller
182
+
183
+ To build the binary installer do::
184
+
185
+ cd windows_exe
186
+ python make.py
187
+
188
+ You will need to close the SnapPy window that pops up here to
189
+ complete the build process.
190
+
191
+ - Useful tips for those coming from Unix. In MSYS2, your home
192
+ directory is really something like::
193
+
194
+ c:\msys2\home\Nathan Dunfield
195
+
196
+ whereas your Windows 10 home directory is::
197
+
198
+ c:\Users\Nathan Dunfield
199
+
200
+ It is handy to have symbolic links from your MSYS2 home directory to
201
+ the Downloads and Desktop folders on the Windows side. `See this
202
+ discussion <http://www.howtogeek.com/howto/16226/>`_, but basically
203
+ you start a "Command Prompt" as Administrator and do::
204
+
205
+ cd "C:\msys64\home\Nathan Dunfield"
206
+ mklink /D Desktop "C:\Users\Nathan Dunfield\Desktop"
207
+ mklink /D Downloads "C:\Users\Nathan Dunfield\Downloads"
208
+
209
+
210
+ Linux
211
+ -----
212
+
213
+ Things you'll need:
214
+
215
+ - Python 3 with Tkinter: You'll need to have `Python
216
+ <http://python.org>`_ (version 3.9 or newer) and `Tk
217
+ <http://tcl.tk>`_ (at least version 8.5) with `Tkinter
218
+ <http://wiki.python.org/moin/TkInter>`_ to connect them, including
219
+ the header files. For instance, on Debian or Ubuntu, install the
220
+ packages "python3-tk", "python3-pip", and "python3-dev". On Fedora,
221
+ you'll want e.g. "python3-tkinter", "python3-pip", and
222
+ "python3-devel", and "python3-wheel".
223
+
224
+ - Test that Python is in order by installing PLink from source::
225
+
226
+ python3 -m pip install --user plink
227
+ python3 -m plink.app # Should start the link editor!
228
+
229
+ .. _openglmesa:
230
+
231
+ - Support for OpenGL (3D graphics): This is built in on OS X and the
232
+ most installations of Fedora and Ubuntu. But you'll need the `MESA
233
+ <http://www.mesa3d.org/>`_ header files "gl.h" and "glu.h" to compile
234
+ SnapPy. On Debian and Ubuntu, install "libglu1-mesa-dev"; On Fedora install
235
+ "mesa-libGLU-devel".
236
+
237
+ - `Cython <http://cython.org>`_, which you can install via::
238
+
239
+ python3 -m pip install --user cython
240
+
241
+ - The gcc C++ compiler, g++.
242
+
243
+ - Fetch the latest development versions of the source straight from
244
+ the repository::
245
+
246
+ git clone https://github.com/3-manifolds/PLink.git
247
+ git clone https://github.com/3-manifolds/Spherogram.git
248
+ git clone https://github.com/3-manifolds/Snappy.git
249
+
250
+ - Build the components, from easiest to hardest, and then test::
251
+
252
+ cd PLink
253
+ python setup.py pip_install
254
+ cd ../Spherogram
255
+ python setup.py pip_install
256
+ cd ../SnapPy
257
+ python setup.py pip_install
258
+ cd ..
259
+ python -m SnapPy.test