snappy 3.3__cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (541) hide show
  1. snappy/CyOpenGL.cpython-310-aarch64-linux-gnu.so +0 -0
  2. snappy/SnapPy.cpython-310-aarch64-linux-gnu.so +0 -0
  3. snappy/SnapPy.ico +0 -0
  4. snappy/SnapPy.png +0 -0
  5. snappy/SnapPyHP.cpython-310-aarch64-linux-gnu.so +0 -0
  6. snappy/__init__.py +534 -0
  7. snappy/app.py +604 -0
  8. snappy/app_menus.py +372 -0
  9. snappy/browser.py +998 -0
  10. snappy/cache.py +25 -0
  11. snappy/canonical.py +249 -0
  12. snappy/cusps/__init__.py +280 -0
  13. snappy/cusps/cusp_area_matrix.py +98 -0
  14. snappy/cusps/cusp_areas_from_matrix.py +96 -0
  15. snappy/cusps/maximal_cusp_area_matrix.py +136 -0
  16. snappy/cusps/short_slopes_for_cusp.py +217 -0
  17. snappy/cusps/test.py +22 -0
  18. snappy/cusps/trig_cusp_area_matrix.py +63 -0
  19. snappy/database.py +454 -0
  20. snappy/db_utilities.py +79 -0
  21. snappy/decorated_isosig.py +717 -0
  22. snappy/dev/__init__.py +0 -0
  23. snappy/dev/extended_ptolemy/__init__.py +8 -0
  24. snappy/dev/extended_ptolemy/closed.py +106 -0
  25. snappy/dev/extended_ptolemy/complexVolumesClosed.py +149 -0
  26. snappy/dev/extended_ptolemy/direct.py +42 -0
  27. snappy/dev/extended_ptolemy/extended.py +406 -0
  28. snappy/dev/extended_ptolemy/giac_helper.py +43 -0
  29. snappy/dev/extended_ptolemy/giac_rur.py +129 -0
  30. snappy/dev/extended_ptolemy/gluing.py +46 -0
  31. snappy/dev/extended_ptolemy/phc_wrapper.py +220 -0
  32. snappy/dev/extended_ptolemy/printMatrices.py +70 -0
  33. snappy/dev/vericlosed/__init__.py +1 -0
  34. snappy/dev/vericlosed/computeApproxHyperbolicStructureNew.py +159 -0
  35. snappy/dev/vericlosed/computeApproxHyperbolicStructureOrb.py +90 -0
  36. snappy/dev/vericlosed/computeVerifiedHyperbolicStructure.py +111 -0
  37. snappy/dev/vericlosed/gimbalLoopFinder.py +130 -0
  38. snappy/dev/vericlosed/hyperbolicStructure.py +313 -0
  39. snappy/dev/vericlosed/krawczykCertifiedEdgeLengthsEngine.py +165 -0
  40. snappy/dev/vericlosed/oneVertexTruncatedComplex.py +122 -0
  41. snappy/dev/vericlosed/orb/__init__.py +1 -0
  42. snappy/dev/vericlosed/orb/orb_solution_for_snappea_finite_triangulation_mac +0 -0
  43. snappy/dev/vericlosed/parseVertexGramMatrixFile.py +47 -0
  44. snappy/dev/vericlosed/polishApproxHyperbolicStructure.py +61 -0
  45. snappy/dev/vericlosed/test.py +54 -0
  46. snappy/dev/vericlosed/truncatedComplex.py +176 -0
  47. snappy/dev/vericlosed/verificationError.py +58 -0
  48. snappy/dev/vericlosed/verifyHyperbolicStructureEngine.py +177 -0
  49. snappy/doc/_images/SnapPy-196.png +0 -0
  50. snappy/doc/_images/m004_paper_plane_on_systole.jpg +0 -0
  51. snappy/doc/_images/m125_paper_plane.jpg +0 -0
  52. snappy/doc/_images/mac.png +0 -0
  53. snappy/doc/_images/o9_00000_systole_paper_plane.jpg +0 -0
  54. snappy/doc/_images/o9_00000_systole_paper_plane_closer.jpg +0 -0
  55. snappy/doc/_images/plink-action.png +0 -0
  56. snappy/doc/_images/ubuntu.png +0 -0
  57. snappy/doc/_images/win7.png +0 -0
  58. snappy/doc/_sources/additional_classes.rst.txt +40 -0
  59. snappy/doc/_sources/bugs.rst.txt +14 -0
  60. snappy/doc/_sources/censuses.rst.txt +52 -0
  61. snappy/doc/_sources/credits.rst.txt +81 -0
  62. snappy/doc/_sources/development.rst.txt +261 -0
  63. snappy/doc/_sources/index.rst.txt +215 -0
  64. snappy/doc/_sources/installing.rst.txt +249 -0
  65. snappy/doc/_sources/manifold.rst.txt +6 -0
  66. snappy/doc/_sources/manifoldhp.rst.txt +46 -0
  67. snappy/doc/_sources/news.rst.txt +425 -0
  68. snappy/doc/_sources/other.rst.txt +25 -0
  69. snappy/doc/_sources/platonic_census.rst.txt +20 -0
  70. snappy/doc/_sources/plink.rst.txt +102 -0
  71. snappy/doc/_sources/ptolemy.rst.txt +66 -0
  72. snappy/doc/_sources/ptolemy_classes.rst.txt +42 -0
  73. snappy/doc/_sources/ptolemy_examples1.rst.txt +298 -0
  74. snappy/doc/_sources/ptolemy_examples2.rst.txt +363 -0
  75. snappy/doc/_sources/ptolemy_examples3.rst.txt +301 -0
  76. snappy/doc/_sources/ptolemy_examples4.rst.txt +61 -0
  77. snappy/doc/_sources/ptolemy_prelim.rst.txt +105 -0
  78. snappy/doc/_sources/screenshots.rst.txt +21 -0
  79. snappy/doc/_sources/snap.rst.txt +87 -0
  80. snappy/doc/_sources/snappy.rst.txt +28 -0
  81. snappy/doc/_sources/spherogram.rst.txt +103 -0
  82. snappy/doc/_sources/todo.rst.txt +47 -0
  83. snappy/doc/_sources/triangulation.rst.txt +11 -0
  84. snappy/doc/_sources/tutorial.rst.txt +49 -0
  85. snappy/doc/_sources/verify.rst.txt +210 -0
  86. snappy/doc/_sources/verify_internals.rst.txt +79 -0
  87. snappy/doc/_static/SnapPy-horizontal-128.png +0 -0
  88. snappy/doc/_static/SnapPy.ico +0 -0
  89. snappy/doc/_static/_sphinx_javascript_frameworks_compat.js +123 -0
  90. snappy/doc/_static/basic.css +906 -0
  91. snappy/doc/_static/css/badge_only.css +1 -0
  92. snappy/doc/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
  93. snappy/doc/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
  94. snappy/doc/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
  95. snappy/doc/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
  96. snappy/doc/_static/css/fonts/fontawesome-webfont.eot +0 -0
  97. snappy/doc/_static/css/fonts/fontawesome-webfont.svg +2671 -0
  98. snappy/doc/_static/css/fonts/fontawesome-webfont.ttf +0 -0
  99. snappy/doc/_static/css/fonts/fontawesome-webfont.woff +0 -0
  100. snappy/doc/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
  101. snappy/doc/_static/css/fonts/lato-bold-italic.woff +0 -0
  102. snappy/doc/_static/css/fonts/lato-bold-italic.woff2 +0 -0
  103. snappy/doc/_static/css/fonts/lato-bold.woff +0 -0
  104. snappy/doc/_static/css/fonts/lato-bold.woff2 +0 -0
  105. snappy/doc/_static/css/fonts/lato-normal-italic.woff +0 -0
  106. snappy/doc/_static/css/fonts/lato-normal-italic.woff2 +0 -0
  107. snappy/doc/_static/css/fonts/lato-normal.woff +0 -0
  108. snappy/doc/_static/css/fonts/lato-normal.woff2 +0 -0
  109. snappy/doc/_static/css/theme.css +4 -0
  110. snappy/doc/_static/doctools.js +149 -0
  111. snappy/doc/_static/documentation_options.js +13 -0
  112. snappy/doc/_static/file.png +0 -0
  113. snappy/doc/_static/fonts/Lato/lato-bold.eot +0 -0
  114. snappy/doc/_static/fonts/Lato/lato-bold.ttf +0 -0
  115. snappy/doc/_static/fonts/Lato/lato-bold.woff +0 -0
  116. snappy/doc/_static/fonts/Lato/lato-bold.woff2 +0 -0
  117. snappy/doc/_static/fonts/Lato/lato-bolditalic.eot +0 -0
  118. snappy/doc/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
  119. snappy/doc/_static/fonts/Lato/lato-bolditalic.woff +0 -0
  120. snappy/doc/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
  121. snappy/doc/_static/fonts/Lato/lato-italic.eot +0 -0
  122. snappy/doc/_static/fonts/Lato/lato-italic.ttf +0 -0
  123. snappy/doc/_static/fonts/Lato/lato-italic.woff +0 -0
  124. snappy/doc/_static/fonts/Lato/lato-italic.woff2 +0 -0
  125. snappy/doc/_static/fonts/Lato/lato-regular.eot +0 -0
  126. snappy/doc/_static/fonts/Lato/lato-regular.ttf +0 -0
  127. snappy/doc/_static/fonts/Lato/lato-regular.woff +0 -0
  128. snappy/doc/_static/fonts/Lato/lato-regular.woff2 +0 -0
  129. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
  130. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
  131. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
  132. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
  133. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
  134. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
  135. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
  136. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
  137. snappy/doc/_static/jquery.js +2 -0
  138. snappy/doc/_static/js/badge_only.js +1 -0
  139. snappy/doc/_static/js/theme.js +1 -0
  140. snappy/doc/_static/js/versions.js +228 -0
  141. snappy/doc/_static/language_data.js +192 -0
  142. snappy/doc/_static/minus.png +0 -0
  143. snappy/doc/_static/plus.png +0 -0
  144. snappy/doc/_static/pygments.css +75 -0
  145. snappy/doc/_static/searchtools.js +635 -0
  146. snappy/doc/_static/snappy_furo.css +33 -0
  147. snappy/doc/_static/snappy_sphinx_rtd_theme.css +42 -0
  148. snappy/doc/_static/sphinx_highlight.js +154 -0
  149. snappy/doc/additional_classes.html +1500 -0
  150. snappy/doc/bugs.html +132 -0
  151. snappy/doc/censuses.html +453 -0
  152. snappy/doc/credits.html +184 -0
  153. snappy/doc/development.html +385 -0
  154. snappy/doc/doc-latest/additional_classes.html +1500 -0
  155. snappy/doc/doc-latest/bugs.html +132 -0
  156. snappy/doc/doc-latest/censuses.html +453 -0
  157. snappy/doc/doc-latest/credits.html +184 -0
  158. snappy/doc/doc-latest/development.html +385 -0
  159. snappy/doc/doc-latest/genindex.html +1349 -0
  160. snappy/doc/doc-latest/index.html +287 -0
  161. snappy/doc/doc-latest/installing.html +346 -0
  162. snappy/doc/doc-latest/manifold.html +3632 -0
  163. snappy/doc/doc-latest/manifoldhp.html +180 -0
  164. snappy/doc/doc-latest/news.html +438 -0
  165. snappy/doc/doc-latest/objects.inv +0 -0
  166. snappy/doc/doc-latest/other.html +160 -0
  167. snappy/doc/doc-latest/platonic_census.html +376 -0
  168. snappy/doc/doc-latest/plink.html +210 -0
  169. snappy/doc/doc-latest/ptolemy.html +253 -0
  170. snappy/doc/doc-latest/ptolemy_classes.html +1144 -0
  171. snappy/doc/doc-latest/ptolemy_examples1.html +409 -0
  172. snappy/doc/doc-latest/ptolemy_examples2.html +471 -0
  173. snappy/doc/doc-latest/ptolemy_examples3.html +414 -0
  174. snappy/doc/doc-latest/ptolemy_examples4.html +195 -0
  175. snappy/doc/doc-latest/ptolemy_prelim.html +248 -0
  176. snappy/doc/doc-latest/py-modindex.html +165 -0
  177. snappy/doc/doc-latest/screenshots.html +141 -0
  178. snappy/doc/doc-latest/search.html +135 -0
  179. snappy/doc/doc-latest/searchindex.js +1 -0
  180. snappy/doc/doc-latest/snap.html +202 -0
  181. snappy/doc/doc-latest/snappy.html +181 -0
  182. snappy/doc/doc-latest/spherogram.html +1346 -0
  183. snappy/doc/doc-latest/todo.html +166 -0
  184. snappy/doc/doc-latest/triangulation.html +1676 -0
  185. snappy/doc/doc-latest/tutorial.html +159 -0
  186. snappy/doc/doc-latest/verify.html +330 -0
  187. snappy/doc/doc-latest/verify_internals.html +1235 -0
  188. snappy/doc/genindex.html +1349 -0
  189. snappy/doc/index.html +287 -0
  190. snappy/doc/installing.html +346 -0
  191. snappy/doc/manifold.html +3632 -0
  192. snappy/doc/manifoldhp.html +180 -0
  193. snappy/doc/news.html +438 -0
  194. snappy/doc/objects.inv +0 -0
  195. snappy/doc/other.html +160 -0
  196. snappy/doc/platonic_census.html +376 -0
  197. snappy/doc/plink.html +210 -0
  198. snappy/doc/ptolemy.html +253 -0
  199. snappy/doc/ptolemy_classes.html +1144 -0
  200. snappy/doc/ptolemy_examples1.html +409 -0
  201. snappy/doc/ptolemy_examples2.html +471 -0
  202. snappy/doc/ptolemy_examples3.html +414 -0
  203. snappy/doc/ptolemy_examples4.html +195 -0
  204. snappy/doc/ptolemy_prelim.html +248 -0
  205. snappy/doc/py-modindex.html +165 -0
  206. snappy/doc/screenshots.html +141 -0
  207. snappy/doc/search.html +135 -0
  208. snappy/doc/searchindex.js +1 -0
  209. snappy/doc/snap.html +202 -0
  210. snappy/doc/snappy.html +181 -0
  211. snappy/doc/spherogram.html +1346 -0
  212. snappy/doc/todo.html +166 -0
  213. snappy/doc/triangulation.html +1676 -0
  214. snappy/doc/tutorial.html +159 -0
  215. snappy/doc/verify.html +330 -0
  216. snappy/doc/verify_internals.html +1235 -0
  217. snappy/drilling/__init__.py +456 -0
  218. snappy/drilling/barycentric.py +103 -0
  219. snappy/drilling/constants.py +5 -0
  220. snappy/drilling/crush.py +270 -0
  221. snappy/drilling/cusps.py +125 -0
  222. snappy/drilling/debug.py +242 -0
  223. snappy/drilling/epsilons.py +6 -0
  224. snappy/drilling/exceptions.py +55 -0
  225. snappy/drilling/moves.py +620 -0
  226. snappy/drilling/peripheral_curves.py +210 -0
  227. snappy/drilling/perturb.py +188 -0
  228. snappy/drilling/shorten.py +36 -0
  229. snappy/drilling/subdivide.py +274 -0
  230. snappy/drilling/test.py +23 -0
  231. snappy/drilling/test_cases.py +132 -0
  232. snappy/drilling/tracing.py +351 -0
  233. snappy/exceptions.py +26 -0
  234. snappy/export_stl.py +120 -0
  235. snappy/exterior_to_link/__init__.py +2 -0
  236. snappy/exterior_to_link/barycentric_geometry.py +463 -0
  237. snappy/exterior_to_link/exceptions.py +6 -0
  238. snappy/exterior_to_link/geodesic_map.json +14408 -0
  239. snappy/exterior_to_link/hyp_utils.py +112 -0
  240. snappy/exterior_to_link/link_projection.py +323 -0
  241. snappy/exterior_to_link/main.py +198 -0
  242. snappy/exterior_to_link/mcomplex_with_expansion.py +261 -0
  243. snappy/exterior_to_link/mcomplex_with_link.py +687 -0
  244. snappy/exterior_to_link/mcomplex_with_memory.py +162 -0
  245. snappy/exterior_to_link/pl_utils.py +491 -0
  246. snappy/exterior_to_link/put_in_S3.py +156 -0
  247. snappy/exterior_to_link/rational_linear_algebra.py +130 -0
  248. snappy/exterior_to_link/rational_linear_algebra_wrapped.py +135 -0
  249. snappy/exterior_to_link/simplify_to_base_tri.py +114 -0
  250. snappy/exterior_to_link/stored_moves.py +475 -0
  251. snappy/exterior_to_link/test.py +31 -0
  252. snappy/filedialog.py +28 -0
  253. snappy/geometric_structure/__init__.py +212 -0
  254. snappy/geometric_structure/cusp_neighborhood/__init__.py +3 -0
  255. snappy/geometric_structure/cusp_neighborhood/complex_cusp_cross_section.py +691 -0
  256. snappy/geometric_structure/cusp_neighborhood/cusp_cross_section_base.py +480 -0
  257. snappy/geometric_structure/cusp_neighborhood/exceptions.py +41 -0
  258. snappy/geometric_structure/cusp_neighborhood/real_cusp_cross_section.py +294 -0
  259. snappy/geometric_structure/cusp_neighborhood/tiles_for_cusp_neighborhood.py +156 -0
  260. snappy/geometric_structure/cusp_neighborhood/vertices.py +35 -0
  261. snappy/geometric_structure/geodesic/__init__.py +0 -0
  262. snappy/geometric_structure/geodesic/add_core_curves.py +152 -0
  263. snappy/geometric_structure/geodesic/avoid_core_curves.py +369 -0
  264. snappy/geometric_structure/geodesic/canonical_representatives.py +52 -0
  265. snappy/geometric_structure/geodesic/check_away_from_core_curve.py +60 -0
  266. snappy/geometric_structure/geodesic/constants.py +6 -0
  267. snappy/geometric_structure/geodesic/exceptions.py +22 -0
  268. snappy/geometric_structure/geodesic/fixed_points.py +106 -0
  269. snappy/geometric_structure/geodesic/geodesic_start_point_info.py +435 -0
  270. snappy/geometric_structure/geodesic/graph_trace_helper.py +67 -0
  271. snappy/geometric_structure/geodesic/line.py +30 -0
  272. snappy/geometric_structure/geodesic/multiplicity.py +127 -0
  273. snappy/geometric_structure/geodesic/tiles_for_geodesic.py +128 -0
  274. snappy/geometric_structure/test.py +22 -0
  275. snappy/gui.py +121 -0
  276. snappy/horoviewer.py +443 -0
  277. snappy/hyperboloid/__init__.py +212 -0
  278. snappy/hyperboloid/distances.py +259 -0
  279. snappy/hyperboloid/horoball.py +19 -0
  280. snappy/hyperboloid/line.py +35 -0
  281. snappy/hyperboloid/point.py +9 -0
  282. snappy/hyperboloid/triangle.py +29 -0
  283. snappy/info_icon.gif +0 -0
  284. snappy/infowindow.py +65 -0
  285. snappy/isometry_signature.py +389 -0
  286. snappy/len_spec/__init__.py +609 -0
  287. snappy/len_spec/geodesic_info.py +129 -0
  288. snappy/len_spec/geodesic_key_info_dict.py +116 -0
  289. snappy/len_spec/geodesic_piece.py +146 -0
  290. snappy/len_spec/geometric_structure.py +182 -0
  291. snappy/len_spec/geometry.py +136 -0
  292. snappy/len_spec/length_spectrum_geodesic_info.py +185 -0
  293. snappy/len_spec/spine.py +128 -0
  294. snappy/len_spec/test.py +24 -0
  295. snappy/len_spec/test_cases.py +69 -0
  296. snappy/len_spec/tile.py +276 -0
  297. snappy/len_spec/word.py +86 -0
  298. snappy/manifolds/HTWKnots/alternating.gz +0 -0
  299. snappy/manifolds/HTWKnots/nonalternating.gz +0 -0
  300. snappy/manifolds/__init__.py +3 -0
  301. snappy/margulis/__init__.py +332 -0
  302. snappy/margulis/cusp_neighborhood_neighborhood.py +66 -0
  303. snappy/margulis/geodesic_neighborhood.py +152 -0
  304. snappy/margulis/margulis_info.py +21 -0
  305. snappy/margulis/mu_from_neighborhood_pair.py +175 -0
  306. snappy/margulis/neighborhood.py +29 -0
  307. snappy/margulis/test.py +22 -0
  308. snappy/math_basics.py +187 -0
  309. snappy/matrix.py +525 -0
  310. snappy/number.py +657 -0
  311. snappy/numeric_output_checker.py +345 -0
  312. snappy/pari.py +41 -0
  313. snappy/phone_home.py +57 -0
  314. snappy/polyviewer.py +259 -0
  315. snappy/ptolemy/__init__.py +17 -0
  316. snappy/ptolemy/component.py +103 -0
  317. snappy/ptolemy/coordinates.py +2290 -0
  318. snappy/ptolemy/fieldExtensions.py +153 -0
  319. snappy/ptolemy/findLoops.py +473 -0
  320. snappy/ptolemy/geometricRep.py +59 -0
  321. snappy/ptolemy/homology.py +165 -0
  322. snappy/ptolemy/magma/default.magma_template +229 -0
  323. snappy/ptolemy/magma/radicalsOfPrimaryDecomposition.magma_template +79 -0
  324. snappy/ptolemy/manifoldMethods.py +395 -0
  325. snappy/ptolemy/matrix.py +350 -0
  326. snappy/ptolemy/numericalSolutionsToGroebnerBasis.py +113 -0
  327. snappy/ptolemy/polynomial.py +856 -0
  328. snappy/ptolemy/processComponents.py +173 -0
  329. snappy/ptolemy/processFileBase.py +247 -0
  330. snappy/ptolemy/processFileDispatch.py +46 -0
  331. snappy/ptolemy/processMagmaFile.py +392 -0
  332. snappy/ptolemy/processRurFile.py +150 -0
  333. snappy/ptolemy/ptolemyGeneralizedObstructionClass.py +102 -0
  334. snappy/ptolemy/ptolemyObstructionClass.py +64 -0
  335. snappy/ptolemy/ptolemyVariety.py +995 -0
  336. snappy/ptolemy/ptolemyVarietyPrimeIdealGroebnerBasis.py +140 -0
  337. snappy/ptolemy/reginaWrapper.py +698 -0
  338. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c0.magma_out.bz2 +0 -0
  339. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c1.magma_out.bz2 +0 -0
  340. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c2.magma_out.bz2 +0 -0
  341. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c3.magma_out.bz2 +0 -0
  342. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c4.magma_out.bz2 +0 -0
  343. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c5.magma_out.bz2 +0 -0
  344. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c6.magma_out.bz2 +0 -0
  345. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c7.magma_out.bz2 +0 -0
  346. snappy/ptolemy/regina_testing_files_generalized/m003__sl3_c0.magma_out.bz2 +0 -0
  347. snappy/ptolemy/regina_testing_files_generalized/m003__sl3_c1.magma_out.bz2 +0 -0
  348. snappy/ptolemy/regina_testing_files_generalized/m015__sl2_c0.magma_out.bz2 +0 -0
  349. snappy/ptolemy/regina_testing_files_generalized/m015__sl2_c1.magma_out.bz2 +0 -0
  350. snappy/ptolemy/regina_testing_files_generalized/m015__sl3_c0.magma_out.bz2 +0 -0
  351. snappy/ptolemy/regina_testing_files_generalized/m015__sl3_c1.magma_out.bz2 +0 -0
  352. snappy/ptolemy/rur.py +545 -0
  353. snappy/ptolemy/solutionsToPrimeIdealGroebnerBasis.py +277 -0
  354. snappy/ptolemy/test.py +1126 -0
  355. snappy/ptolemy/testing_files/3_1__sl2_c0.magma_out.bz2 +0 -0
  356. snappy/ptolemy/testing_files/3_1__sl2_c1.magma_out.bz2 +0 -0
  357. snappy/ptolemy/testing_files/4_1__sl2_c0.magma_out.bz2 +0 -0
  358. snappy/ptolemy/testing_files/4_1__sl2_c1.magma_out.bz2 +0 -0
  359. snappy/ptolemy/testing_files/4_1__sl3_c0.magma_out.bz2 +0 -0
  360. snappy/ptolemy/testing_files/4_1__sl4_c0.magma_out.bz2 +0 -0
  361. snappy/ptolemy/testing_files/4_1__sl4_c1.magma_out.bz2 +0 -0
  362. snappy/ptolemy/testing_files/5_2__sl2_c0.magma_out.bz2 +0 -0
  363. snappy/ptolemy/testing_files/5_2__sl2_c1.magma_out.bz2 +0 -0
  364. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c0.magma_out.bz2 +0 -0
  365. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c1.magma_out.bz2 +0 -0
  366. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c2.magma_out.bz2 +0 -0
  367. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c3.magma_out.bz2 +0 -0
  368. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c4.magma_out.bz2 +0 -0
  369. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c5.magma_out.bz2 +0 -0
  370. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c6.magma_out.bz2 +0 -0
  371. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c7.magma_out.bz2 +0 -0
  372. snappy/ptolemy/testing_files/data/pgl2/OrientableCuspedCensus/03_tetrahedra/m019__sl2_c0.magma_out +95 -0
  373. snappy/ptolemy/testing_files/data/pgl2/OrientableCuspedCensus/03_tetrahedra/m019__sl2_c1.magma_out +95 -0
  374. snappy/ptolemy/testing_files/m015__sl3_c0.magma_out.bz2 +0 -0
  375. snappy/ptolemy/testing_files/m135__sl2_c0.magma_out.bz2 +0 -0
  376. snappy/ptolemy/testing_files/m135__sl2_c1.magma_out.bz2 +0 -0
  377. snappy/ptolemy/testing_files/m135__sl2_c2.magma_out.bz2 +0 -0
  378. snappy/ptolemy/testing_files/m135__sl2_c3.magma_out.bz2 +0 -0
  379. snappy/ptolemy/testing_files/m135__sl2_c4.magma_out.bz2 +0 -0
  380. snappy/ptolemy/testing_files/m135__sl2_c5.magma_out.bz2 +0 -0
  381. snappy/ptolemy/testing_files/m135__sl2_c6.magma_out.bz2 +0 -0
  382. snappy/ptolemy/testing_files/m135__sl2_c7.magma_out.bz2 +0 -0
  383. snappy/ptolemy/testing_files/s000__sl2_c0.magma_out.bz2 +0 -0
  384. snappy/ptolemy/testing_files/s000__sl2_c1.magma_out.bz2 +0 -0
  385. snappy/ptolemy/testing_files/t00000__sl2_c0.magma_out.bz2 +0 -0
  386. snappy/ptolemy/testing_files/t00000__sl2_c1.magma_out.bz2 +0 -0
  387. snappy/ptolemy/testing_files/v0000__sl2_c0.magma_out.bz2 +0 -0
  388. snappy/ptolemy/testing_files/v0000__sl2_c1.magma_out.bz2 +0 -0
  389. snappy/ptolemy/testing_files/v0000__sl2_c2.magma_out.bz2 +0 -0
  390. snappy/ptolemy/testing_files/v0000__sl2_c3.magma_out.bz2 +0 -0
  391. snappy/ptolemy/testing_files_generalized/m003__sl2_c0.magma_out.bz2 +0 -0
  392. snappy/ptolemy/testing_files_generalized/m003__sl2_c1.magma_out.bz2 +0 -0
  393. snappy/ptolemy/testing_files_generalized/m003__sl3_c0.magma_out.bz2 +0 -0
  394. snappy/ptolemy/testing_files_generalized/m003__sl3_c1.magma_out.bz2 +0 -0
  395. snappy/ptolemy/testing_files_generalized/m004__sl2_c0.magma_out.bz2 +0 -0
  396. snappy/ptolemy/testing_files_generalized/m004__sl2_c1.magma_out.bz2 +0 -0
  397. snappy/ptolemy/testing_files_generalized/m015__sl2_c1.magma_out.bz2 +0 -0
  398. snappy/ptolemy/testing_files_generalized/m015__sl3_c0.magma_out.bz2 +0 -0
  399. snappy/ptolemy/testing_files_rur/m052__sl3_c0.rur.bz2 +0 -0
  400. snappy/ptolemy/utilities.py +236 -0
  401. snappy/raytracing/__init__.py +64 -0
  402. snappy/raytracing/additional_horospheres.py +64 -0
  403. snappy/raytracing/additional_len_spec_choices.py +63 -0
  404. snappy/raytracing/cohomology_fractal.py +197 -0
  405. snappy/raytracing/eyeball.py +124 -0
  406. snappy/raytracing/finite_raytracing_data.py +237 -0
  407. snappy/raytracing/finite_viewer.py +590 -0
  408. snappy/raytracing/geodesic_tube_info.py +174 -0
  409. snappy/raytracing/geodesics.py +246 -0
  410. snappy/raytracing/geodesics_window.py +258 -0
  411. snappy/raytracing/gui_utilities.py +293 -0
  412. snappy/raytracing/hyperboloid_navigation.py +556 -0
  413. snappy/raytracing/hyperboloid_utilities.py +234 -0
  414. snappy/raytracing/ideal_raytracing_data.py +592 -0
  415. snappy/raytracing/inside_viewer.py +974 -0
  416. snappy/raytracing/pack.py +22 -0
  417. snappy/raytracing/raytracing_data.py +126 -0
  418. snappy/raytracing/raytracing_view.py +454 -0
  419. snappy/raytracing/shaders/Eye.png +0 -0
  420. snappy/raytracing/shaders/NonGeometric.png +0 -0
  421. snappy/raytracing/shaders/__init__.py +101 -0
  422. snappy/raytracing/shaders/fragment.glsl +1744 -0
  423. snappy/raytracing/test.py +29 -0
  424. snappy/raytracing/tooltip.py +146 -0
  425. snappy/raytracing/upper_halfspace_utilities.py +98 -0
  426. snappy/raytracing/view_scale_controller.py +98 -0
  427. snappy/raytracing/zoom_slider/__init__.py +263 -0
  428. snappy/raytracing/zoom_slider/inward.png +0 -0
  429. snappy/raytracing/zoom_slider/inward18.png +0 -0
  430. snappy/raytracing/zoom_slider/outward.png +0 -0
  431. snappy/raytracing/zoom_slider/outward18.png +0 -0
  432. snappy/raytracing/zoom_slider/test.py +20 -0
  433. snappy/sage_helper.py +119 -0
  434. snappy/settings.py +407 -0
  435. snappy/shell.py +53 -0
  436. snappy/snap/__init__.py +117 -0
  437. snappy/snap/character_varieties.py +375 -0
  438. snappy/snap/find_field.py +372 -0
  439. snappy/snap/fox_milnor.py +271 -0
  440. snappy/snap/fundamental_polyhedron.py +569 -0
  441. snappy/snap/generators.py +39 -0
  442. snappy/snap/interval_reps.py +81 -0
  443. snappy/snap/kernel_structures.py +128 -0
  444. snappy/snap/mcomplex_base.py +18 -0
  445. snappy/snap/nsagetools.py +716 -0
  446. snappy/snap/peripheral/__init__.py +1 -0
  447. snappy/snap/peripheral/dual_cellulation.py +219 -0
  448. snappy/snap/peripheral/link.py +127 -0
  449. snappy/snap/peripheral/peripheral.py +159 -0
  450. snappy/snap/peripheral/surface.py +522 -0
  451. snappy/snap/peripheral/test.py +35 -0
  452. snappy/snap/polished_reps.py +335 -0
  453. snappy/snap/shapes.py +152 -0
  454. snappy/snap/slice_obs_HKL/__init__.py +194 -0
  455. snappy/snap/slice_obs_HKL/basics.py +236 -0
  456. snappy/snap/slice_obs_HKL/direct.py +217 -0
  457. snappy/snap/slice_obs_HKL/poly_norm.py +212 -0
  458. snappy/snap/slice_obs_HKL/rep_theory.py +424 -0
  459. snappy/snap/t3mlite/__init__.py +2 -0
  460. snappy/snap/t3mlite/arrow.py +243 -0
  461. snappy/snap/t3mlite/corner.py +22 -0
  462. snappy/snap/t3mlite/edge.py +172 -0
  463. snappy/snap/t3mlite/face.py +37 -0
  464. snappy/snap/t3mlite/files.py +211 -0
  465. snappy/snap/t3mlite/homology.py +53 -0
  466. snappy/snap/t3mlite/linalg.py +419 -0
  467. snappy/snap/t3mlite/mcomplex.py +1499 -0
  468. snappy/snap/t3mlite/perm4.py +320 -0
  469. snappy/snap/t3mlite/setup.py +12 -0
  470. snappy/snap/t3mlite/simplex.py +199 -0
  471. snappy/snap/t3mlite/spun.py +297 -0
  472. snappy/snap/t3mlite/surface.py +519 -0
  473. snappy/snap/t3mlite/test.py +20 -0
  474. snappy/snap/t3mlite/test_vs_regina.py +86 -0
  475. snappy/snap/t3mlite/tetrahedron.py +109 -0
  476. snappy/snap/t3mlite/vertex.py +42 -0
  477. snappy/snap/test.py +139 -0
  478. snappy/snap/utilities.py +288 -0
  479. snappy/test.py +213 -0
  480. snappy/test_cases.py +263 -0
  481. snappy/testing.py +131 -0
  482. snappy/tiling/__init__.py +2 -0
  483. snappy/tiling/dict_based_set.py +79 -0
  484. snappy/tiling/floor.py +49 -0
  485. snappy/tiling/hyperboloid_dict.py +54 -0
  486. snappy/tiling/iter_utils.py +78 -0
  487. snappy/tiling/lifted_tetrahedron.py +22 -0
  488. snappy/tiling/lifted_tetrahedron_set.py +54 -0
  489. snappy/tiling/quotient_dict.py +70 -0
  490. snappy/tiling/real_hash_dict.py +164 -0
  491. snappy/tiling/test.py +23 -0
  492. snappy/tiling/tile.py +224 -0
  493. snappy/tiling/triangle.py +33 -0
  494. snappy/tkterminal.py +920 -0
  495. snappy/twister/__init__.py +20 -0
  496. snappy/twister/main.py +646 -0
  497. snappy/twister/surfaces/S_0_1 +3 -0
  498. snappy/twister/surfaces/S_0_2 +3 -0
  499. snappy/twister/surfaces/S_0_4 +7 -0
  500. snappy/twister/surfaces/S_0_4_Lantern +8 -0
  501. snappy/twister/surfaces/S_1 +3 -0
  502. snappy/twister/surfaces/S_1_1 +4 -0
  503. snappy/twister/surfaces/S_1_2 +5 -0
  504. snappy/twister/surfaces/S_1_2_5 +6 -0
  505. snappy/twister/surfaces/S_2 +6 -0
  506. snappy/twister/surfaces/S_2_1 +8 -0
  507. snappy/twister/surfaces/S_2_heeg +10 -0
  508. snappy/twister/surfaces/S_3 +8 -0
  509. snappy/twister/surfaces/S_3_1 +10 -0
  510. snappy/twister/surfaces/S_4_1 +12 -0
  511. snappy/twister/surfaces/S_5_1 +14 -0
  512. snappy/twister/surfaces/heeg_fig8 +9 -0
  513. snappy/twister/twister_core.cpython-310-aarch64-linux-gnu.so +0 -0
  514. snappy/upper_halfspace/__init__.py +146 -0
  515. snappy/upper_halfspace/ideal_point.py +29 -0
  516. snappy/verify/__init__.py +13 -0
  517. snappy/verify/canonical.py +542 -0
  518. snappy/verify/complex_volume/__init__.py +18 -0
  519. snappy/verify/complex_volume/adjust_torsion.py +86 -0
  520. snappy/verify/complex_volume/closed.py +168 -0
  521. snappy/verify/complex_volume/compute_ptolemys.py +90 -0
  522. snappy/verify/complex_volume/cusped.py +56 -0
  523. snappy/verify/complex_volume/extended_bloch.py +201 -0
  524. snappy/verify/cusp_translations.py +85 -0
  525. snappy/verify/edge_equations.py +80 -0
  526. snappy/verify/exceptions.py +254 -0
  527. snappy/verify/hyperbolicity.py +224 -0
  528. snappy/verify/interval_newton_shapes_engine.py +523 -0
  529. snappy/verify/interval_tree.py +400 -0
  530. snappy/verify/krawczyk_shapes_engine.py +518 -0
  531. snappy/verify/real_algebra.py +286 -0
  532. snappy/verify/shapes.py +25 -0
  533. snappy/verify/square_extensions.py +1005 -0
  534. snappy/verify/test.py +72 -0
  535. snappy/verify/volume.py +128 -0
  536. snappy/version.py +2 -0
  537. snappy-3.3.dist-info/METADATA +58 -0
  538. snappy-3.3.dist-info/RECORD +541 -0
  539. snappy-3.3.dist-info/WHEEL +6 -0
  540. snappy-3.3.dist-info/entry_points.txt +2 -0
  541. snappy-3.3.dist-info/top_level.txt +28 -0
snappy/SnapPy.ico ADDED
Binary file
snappy/SnapPy.png ADDED
Binary file
snappy/__init__.py ADDED
@@ -0,0 +1,534 @@
1
+ # import the SnapPy bindings
2
+ # import logging
3
+ # logging.basicConfig(filename='example.log',level=logging.DEBUG)
4
+ # logging.debug('This message should go to the log file')
5
+ import sys
6
+ from .SnapPy import (AbelianGroup,
7
+ FundamentalGroup,
8
+ SymmetryGroup,
9
+ Isometry,
10
+ AlternatingKnotExteriors,
11
+ NonalternatingKnotExteriors,
12
+ pari)
13
+ from .SnapPy import DirichletDomain
14
+ from .SnapPyHP import DirichletDomain as DirichletDomainHP
15
+ from .SnapPy import CuspNeighborhood
16
+ from .SnapPyHP import CuspNeighborhood as CuspNeighborhoodHP
17
+ from .SnapPy import HolonomyGroup
18
+ from .SnapPyHP import HolonomyGroup as HolonomyGroupHP
19
+
20
+ # seed the kernel's random number generator.
21
+ import time
22
+ from .SnapPy import set_rand_seed
23
+ set_rand_seed(int(time.time()))
24
+
25
+ from .exceptions import (SnapPeaFatalError,
26
+ InsufficientPrecisionError,
27
+ NonorientableManifoldError)
28
+
29
+ from typing import Union, Tuple, List, Optional
30
+
31
+ # Subclass to be able to monkey-patch
32
+ class Triangulation(SnapPy.Triangulation):
33
+ __doc__ = SnapPy.Triangulation.__doc__
34
+
35
+ # Subclass to be able to monkey-patch
36
+ class TriangulationHP(SnapPyHP.Triangulation):
37
+ __doc__ = SnapPyHP.Triangulation.__doc__
38
+
39
+ # We want Manifold to be a subclass of Triangulation.
40
+ # Unfortunately, that introduces a diamond pattern here.
41
+ # Luckily, the python resolves methods and bases classes
42
+ # in the presence of a diamond pattern seem to work just
43
+ # fine. In particular, we do not double allocate the underlying
44
+ # C structures.
45
+ class Manifold(SnapPy.Manifold, Triangulation):
46
+ __doc__ = SnapPy.Manifold.__doc__
47
+
48
+ def identify(self, extends_to_link=False):
49
+ """
50
+ Looks for the manifold in all of the SnapPy databases.
51
+ For hyperbolic manifolds this is done by searching for isometries:
52
+
53
+ >>> M = Manifold('m125')
54
+ >>> M.identify()
55
+ [m125(0,0)(0,0), L13n5885(0,0)(0,0), ooct01_00000(0,0)(0,0)]
56
+
57
+ By default, there is no restriction on the isometries. One can
58
+ require that the isometry take meridians to meridians. This
59
+ might return fewer results:
60
+
61
+ >>> M.identify(extends_to_link=True)
62
+ [m125(0,0)(0,0), ooct01_00000(0,0)(0,0)]
63
+
64
+ For closed manifolds, extends_to_link doesn't make sense
65
+ because of how the kernel code works:
66
+
67
+ >>> C = Manifold("m015(1,2)")
68
+ >>> C.identify()
69
+ [m006(-5,2)]
70
+ >>> C.identify(True)
71
+ []
72
+ """
73
+ return self._identify(extends_to_link)
74
+
75
+ def high_precision(self):
76
+ """
77
+ Return a high precision version of this manifold.
78
+
79
+ >>> M = Manifold('m004')
80
+ >>> type(M.high_precision())
81
+ <class 'snappy.ManifoldHP'>
82
+ """
83
+ HP = ManifoldHP('empty')
84
+ HP._from_string(self._to_string(), initialize_structure=False)
85
+ fillings = [self.cusp_info(n).filling for n in range(self.num_cusps())]
86
+ filled = self._get_tetrahedra_shapes('filled')
87
+ complete = self._get_tetrahedra_shapes('complete')
88
+ HP.set_tetrahedra_shapes(filled, complete, fillings)
89
+ HP._polish_hyperbolic_structures()
90
+ HP.set_name(self.name())
91
+ DT = self.DT_code(flips=True)
92
+ if DT:
93
+ HP._set_DTcode(DTcodec(*DT))
94
+ return HP
95
+
96
+ def low_precision(self):
97
+ return self.copy()
98
+
99
+ # We want ManifoldHP to be a subclass of TriangulationHP.
100
+ # See comment about Manifold and the diamond pattern.
101
+ class ManifoldHP(SnapPyHP.Manifold, TriangulationHP):
102
+ __doc__ = SnapPyHP.Manifold.__doc__
103
+
104
+ def low_precision(self):
105
+ """
106
+ Return a low precision version of this high precision manifold.
107
+
108
+ >>> M = ManifoldHP('m004')
109
+ >>> type(M.low_precision())
110
+ <class 'snappy.Manifold'>
111
+
112
+ """
113
+ LP = Manifold('empty')
114
+ LP._from_string(self._to_string(), initialize_structure=False)
115
+ fillings = [self.cusp_info(n).filling for n in range(self.num_cusps())]
116
+ filled = [complex(z) for z in self._get_tetrahedra_shapes('filled')]
117
+ complete = [complex(z) for z in self._get_tetrahedra_shapes('complete')]
118
+ LP.set_tetrahedra_shapes(filled, complete, fillings)
119
+ LP._polish_hyperbolic_structures()
120
+ LP.set_name(self.name())
121
+ DT = self.DT_code(flips=True)
122
+ if DT:
123
+ LP._set_DTcode(DTcodec(*DT))
124
+ return LP
125
+
126
+ def high_precision(self):
127
+ return self.copy()
128
+
129
+ def identify(self, extends_to_link=False):
130
+ """
131
+ Looks for the manifold in all of the SnapPy databases.
132
+ For hyperbolic manifolds this is done by searching for isometries:
133
+
134
+ >>> M = ManifoldHP('m125')
135
+ >>> M.identify()
136
+ [m125(0,0)(0,0), L13n5885(0,0)(0,0), ooct01_00000(0,0)(0,0)]
137
+
138
+ By default, there is no restriction on the isometries. One can require
139
+ that the isometry take meridians to meridians. This might return
140
+ fewer results:
141
+
142
+ >>> M.identify(extends_to_link=True)
143
+ [m125(0,0)(0,0), ooct01_00000(0,0)(0,0)]
144
+
145
+ For closed manifolds, extends_to_link doesn't make sense because
146
+ of how the kernel code works:
147
+
148
+ >>> C = Manifold("m015(1,2)")
149
+ >>> C.identify()
150
+ [m006(-5,2)]
151
+ >>> C.identify(True)
152
+ []
153
+
154
+ """
155
+ return self.low_precision()._identify(extends_to_link)
156
+
157
+ SnapPy._manifold_class = Manifold
158
+ SnapPy._triangulation_class = Triangulation
159
+ SnapPyHP._triangulation_class = TriangulationHP
160
+ SnapPyHP._manifold_class = ManifoldHP
161
+
162
+ __all__ = ['Triangulation', 'Manifold', 'ManifoldHP', 'AbelianGroup',
163
+ 'FundamentalGroup', 'HolonomyGroup', 'HolonomyGroupHP',
164
+ 'DirichletDomain', 'DirichletDomainHP', 'CuspNeighborhood',
165
+ 'CuspNeighborhoodHP', 'SymmetryGroup', 'AlternatingKnotExteriors',
166
+ 'NonalternatingKnotExteriors', 'SnapPeaFatalError',
167
+ 'InsufficientPrecisionError',
168
+ 'pari', 'twister', ]
169
+
170
+ def _symmetrize_high_precision_manifold(
171
+ mfd1 : Union[Manifold, ManifoldHP],
172
+ mfd2 : Union[Manifold, ManifoldHP]
173
+ ) -> Union[Tuple[Manifold, Manifold],
174
+ Tuple[ManifoldHP, ManifoldHP]]:
175
+ """
176
+ Given a (potential) mix of two Manifold and ManifoldHP,
177
+ promote one to high precision if necessary and return
178
+ the result as pair.
179
+ """
180
+ resolved_mfd1 = mfd1
181
+ resolved_mfd2 = mfd2
182
+ high1 = isinstance(mfd1, ManifoldHP)
183
+ high2 = isinstance(mfd2, ManifoldHP)
184
+ if high1 and not high2:
185
+ resolved_mfd2 = ManifoldHP(mfd2)
186
+ if high2 and not high1:
187
+ resolved_mfd1 = ManifoldHP(mfd1)
188
+ return (resolved_mfd1, resolved_mfd2)
189
+
190
+ def _symmetrize_low_precision_triangulation(
191
+ tri1 : Union[Triangulation, TriangulationHP],
192
+ tri2 : Union[Triangulation, TriangulationHP]
193
+ ) -> Union[Tuple[Triangulation, Triangulation],
194
+ Tuple[TriangulationHP, TriangulationHP]]:
195
+ """
196
+ Given a (potential) mix of two Triangulation and TriangulationHP,
197
+ demote one to low precision if necessary and return
198
+ the result as pair.
199
+ """
200
+ resolved_tri1 = tri1
201
+ resolved_tri2 = tri2
202
+ low1 = isinstance(tri1, Triangulation)
203
+ low2 = isinstance(tri2, Triangulation)
204
+ if low1 and not low2:
205
+ resolved_tri2 = Triangulation(tri2, remove_finite_vertices=False)
206
+ if low2 and not low1:
207
+ resolved_tri1 = Triangulation(tri1, remove_finite_vertices=False)
208
+ return (resolved_tri1, resolved_tri2)
209
+
210
+ def is_isometric_to(self,
211
+ other : Union[Manifold, ManifoldHP],
212
+ return_isometries : bool = False
213
+ ) -> Union[bool, List[Isometry]]:
214
+ resolved_self, resolved_other = (
215
+ _symmetrize_high_precision_manifold(
216
+ self, other))
217
+
218
+ return resolved_self._is_isometric_to(
219
+ resolved_other,
220
+ return_isometries=return_isometries)
221
+
222
+ is_isometric_to.__doc__ = SnapPy.Manifold._is_isometric_to.__doc__
223
+ Manifold.is_isometric_to = is_isometric_to
224
+ ManifoldHP.is_isometric_to = is_isometric_to
225
+
226
+ def isomorphisms_to(self,
227
+ other : Union[Triangulation, TriangulationHP]
228
+ ) -> List[Isometry]:
229
+ resolved_self, resolved_other = (
230
+ _symmetrize_low_precision_triangulation(
231
+ self, other))
232
+
233
+ return resolved_self._isomorphisms_to(
234
+ resolved_other)
235
+
236
+ isomorphisms_to.__doc__ = SnapPy.Triangulation._isomorphisms_to.__doc__
237
+ Triangulation.isomorphisms_to = isomorphisms_to
238
+ TriangulationHP.isomorphisms_to = isomorphisms_to
239
+
240
+ from . import snap
241
+ snap.add_methods(Manifold)
242
+ snap.add_methods(ManifoldHP)
243
+ snap.add_methods(Triangulation, hyperbolic=False)
244
+ snap.add_methods(TriangulationHP, hyperbolic=False)
245
+
246
+ from . import exterior_to_link
247
+ Triangulation.exterior_to_link = exterior_to_link.exterior_to_link
248
+ TriangulationHP.exterior_to_link = exterior_to_link.exterior_to_link
249
+
250
+ from . import verify
251
+ Manifold.verify_hyperbolicity = verify.verify_hyperbolicity
252
+ ManifoldHP.verify_hyperbolicity = verify.verify_hyperbolicity
253
+
254
+ from . import margulis
255
+ Manifold.margulis = margulis.margulis
256
+ ManifoldHP.margulis = margulis.margulis
257
+
258
+ from . import len_spec
259
+ Manifold.length_spectrum_alt_gen = len_spec.length_spectrum_alt_gen
260
+ ManifoldHP.length_spectrum_alt_gen = len_spec.length_spectrum_alt_gen
261
+ Manifold.length_spectrum_alt = len_spec.length_spectrum_alt
262
+ ManifoldHP.length_spectrum_alt = len_spec.length_spectrum_alt
263
+
264
+ from . import canonical
265
+ Manifold.canonical_retriangulation = canonical.canonical_retriangulation
266
+ ManifoldHP.canonical_retriangulation = canonical.canonical_retriangulation_hp
267
+
268
+ from . import isometry_signature
269
+
270
+ Manifold.isometry_signature = isometry_signature.isometry_signature
271
+ ManifoldHP.isometry_signature = isometry_signature.isometry_signature
272
+
273
+ from .cusps import cusp_area_matrix
274
+
275
+ Manifold.cusp_area_matrix = cusp_area_matrix.cusp_area_matrix
276
+ ManifoldHP.cusp_area_matrix = cusp_area_matrix.cusp_area_matrix
277
+
278
+ from . import cusps
279
+
280
+ Manifold.cusp_areas = cusps.cusp_areas
281
+ ManifoldHP.cusp_areas = cusps.cusp_areas
282
+ Manifold.short_slopes = cusps.short_slopes
283
+ ManifoldHP.short_slopes = cusps.short_slopes
284
+ Manifold.cusp_translations = cusps.cusp_translations
285
+ ManifoldHP.cusp_translations = cusps.cusp_translations
286
+
287
+ def complex_volume(manifold, verified_modulo_2_torsion=False,
288
+ bits_prec=None):
289
+ """
290
+ Returns the complex volume modulo :math:`i \\pi^2` which is given by
291
+
292
+ .. math::
293
+ \\text{vol} + i \\text{CS}
294
+
295
+ where :math:`\\text{CS}` is the (unnormalized) Chern-Simons invariant.
296
+
297
+ >>> M = Manifold('5_2')
298
+ >>> M.complex_volume() # doctest: +NUMERIC6
299
+ 2.82812209 - 3.02412838*I
300
+
301
+ Note that :meth:`chern_simons <snappy.Manifold.chern_simons>`
302
+ normalizes the Chern-Simons invariant by dividing it by
303
+ :math:`2 \\pi^2 = 19.7392...` ::
304
+
305
+ >>> M.chern_simons() # doctest: +NUMERIC6
306
+ -0.153204133297152
307
+
308
+ More examples::
309
+
310
+ >>> M.dehn_fill((1,2))
311
+ >>> M.complex_volume() # doctest: +NUMERIC6
312
+ 2.22671790 + 1.52619361*I
313
+ >>> M = Manifold("3_1") # A non-hyperbolic example.
314
+ >>> cvol = M.complex_volume()
315
+ >>> cvol.real() # doctest: +NUMERIC6
316
+ 0
317
+ >>> cvol.imag() # doctest: +NUMERIC6
318
+ -1.64493407
319
+
320
+ If no cusp is filled or there is only one cusped (filled or
321
+ unfilled), the complex volume can be verified up to multiples
322
+ of :math:`i \\pi^2 /2` by passing ``verified_modulo_2_torsion = True``
323
+ when inside SageMath. Higher precision can be requested
324
+ with ``bits_prec``::
325
+
326
+ sage: M = Manifold("m015")
327
+ sage: M.complex_volume(verified_modulo_2_torsion=True, bits_prec = 93) # doctest: +NUMERIC21
328
+ 2.828122088330783162764? + 1.910673824035377649698?*I
329
+ sage: M = Manifold("m015(3,4)")
330
+ sage: M.complex_volume(verified_modulo_2_torsion=True) # doctest: +NUMERIC6
331
+ 2.625051576? - 0.537092383?*I
332
+
333
+ """
334
+ if verified_modulo_2_torsion:
335
+ return verify.verified_complex_volume_torsion(
336
+ manifold, bits_prec=bits_prec)
337
+
338
+ if bits_prec:
339
+ raise Exception("Arbitrary precision for complex volume only "
340
+ "supported for verified computations and cusped "
341
+ "manifolds.")
342
+
343
+ return manifold._complex_volume()
344
+
345
+ Manifold.complex_volume = complex_volume
346
+ ManifoldHP.complex_volume = complex_volume
347
+
348
+ from . import drilling
349
+ drilling._add_methods(Manifold)
350
+ drilling._add_methods(ManifoldHP, high_precision=True)
351
+
352
+ from . import raytracing
353
+
354
+ Manifold.inside_view = raytracing.inside_view
355
+ ManifoldHP.inside_view = raytracing.inside_view
356
+
357
+
358
+ def all_translations(self, verified=False, bits_prec=None):
359
+ """
360
+ Returns the (complex) Euclidean translations of the meridian
361
+ and longitude for each cusp measured with respect to the cusp neighborhood.
362
+
363
+ The result is a list of pairs, the second entry corresponding to a
364
+ longitude is always real::
365
+
366
+ >>> M = Manifold("v3227")
367
+ >>> N = M.cusp_neighborhood()
368
+ >>> N.all_translations() # doctest: +NUMERIC9
369
+ [(-0.152977162509284 + 0.747697694854404*I, 0.868692062725708), (-0.152977162509284 + 0.747697694854404*I, 0.868692062725708), (0.0961611977895952 + 0.725536253181650*I, 0.895226186134782)]
370
+
371
+ Often, one is interested in making the cusp neighborhoods as large as possible first::
372
+
373
+ >>> N.set_displacement(100,0)
374
+ >>> N.set_displacement(100,1)
375
+ >>> N.set_displacement(100,2)
376
+ >>> N.all_translations() # doctest: +NUMERIC9
377
+ [(-0.477656250512815 + 2.33461303362557*I, 2.71240613125259), (-0.259696455247511 + 1.26930345526993*I, 1.47470541152065), (0.131389112265699 + 0.991330873713731*I, 1.22318540718077)]
378
+
379
+ This can also be achieved by :py:meth:`Manifold.cusp_translations` which
380
+ would have made a different choice of disjoint cusp neighborhoods though::
381
+
382
+ >>> M.cusp_translations() # doctest: +NUMERIC6
383
+ [(-0.315973594129651 + 1.54436599614183*I, 1.79427928161946), (-0.315973594129649 + 1.54436599614182*I, 1.79427928161946), (0.198620491993677 + 1.49859164484929*I, 1.84908538602825)]
384
+
385
+ This method supports arbitrary precision ::
386
+
387
+ >>> from snappy.number import Number
388
+ >>> N.set_displacement(1.125, 0)
389
+ >>> N.set_displacement(0.515625, 1)
390
+ >>> N.set_displacement(0.3125, 2)
391
+ >>> N.all_translations(bits_prec = 120) # doctest: +NUMERIC30
392
+ [(-0.47120283346076781167174343474008914 + 2.3030710375877078211095122873223488*I, 2.6757599281290843845710310925394911), (-0.25618853688042434043044508297577899 + 1.2521580040549576537090841783446072*I, 1.4547854392045669515377748986943560), (0.13143677360753666862808198126761923 + 0.99169047854575721271560179767750893*I, 1.2236291171413362101960100623801910)]
393
+
394
+ and can return verified intervals ::
395
+
396
+ sage: N.all_translations(verified = True) # doctest: +NUMERIC9
397
+ [(-0.47120283346? + 2.30307103759?*I, 2.67575992813?), (-0.256188536881? + 1.252158004055?*I, 1.454785439205?), (0.131436773608? + 0.991690478546?*I, 1.2236291171413?)]
398
+ sage: N.all_translations(verified = True, bits_prec = 120) # doctest: +NUMERIC30
399
+ [(-0.4712028334607678116717434347401? + 2.3030710375877078211095122873224?*I, 2.6757599281290843845710310925395?), (-0.25618853688042434043044508297578? + 1.25215800405495765370908417834461?*I, 1.454785439204566951537774898694356?), (0.131436773607536668628081981267619? + 0.991690478545757212715601797677509?*I, 1.223629117141336210196010062380191?)]
400
+
401
+ that are guaranteed to contain the true translations of disjoint cusp
402
+ neighborhoods (the element corresponding to a longitude is always
403
+ in a ``RealIntervalField``). The verified translations might correspond
404
+ to cusp neighborhoods smaller than the given ones to be able to verify
405
+ that they are disjoint.
406
+
407
+ **Remark:** Since the code is (potentially) non-deterministic, the result of ::
408
+
409
+ [ N.all_translations(verified = True)[i] for i in range(M.num_cusps()) ]
410
+
411
+ is not verified to correspond to disjoint cusp neighborhoods.
412
+ """
413
+
414
+ if verified or bits_prec:
415
+ # Use the implementation in verify.cusp_translations that uses
416
+ # tetrahedra_shapes and ComplexCuspNeighborhood
417
+ return verify.cusp_translations_for_neighborhood(
418
+ self, verified=verified, bits_prec=bits_prec)
419
+
420
+ # Use the implementation in the SnapPea kernel
421
+ return [ self.translations(i) for i in range(self.num_cusps()) ]
422
+
423
+
424
+ CuspNeighborhood.all_translations = all_translations
425
+ CuspNeighborhoodHP.all_translations = all_translations
426
+
427
+ from . import twister
428
+
429
+ # Pass our manifold class down to database and then import the
430
+ # manifold tables themselves from the snappy_manifold package.
431
+
432
+ from . import database
433
+ database.Manifold = Manifold
434
+ database.Triangulation = Triangulation
435
+ snappy_module = sys.modules[__name__]
436
+ database_objects = []
437
+ known_manifold_packages = [('snappy_manifolds', True),
438
+ ('snappy_15_knots', False),
439
+ ('nonexistent_manifolds', False)]
440
+
441
+ for manifold_package, required in known_manifold_packages:
442
+ table_dict = database.add_tables_from_package(manifold_package, required)
443
+ for name, table in table_dict.items():
444
+ setattr(snappy_module, name, table)
445
+ if name not in database_objects:
446
+ database_objects.append(name)
447
+
448
+ __all__ += database_objects
449
+
450
+ # Monkey patch the link_exterior method into Spherogram.
451
+
452
+ from spherogram.codecs import DTcodec
453
+
454
+
455
+ def _link_exterior(self, with_hyperbolic_structure=True,
456
+ remove_finite_vertices=True):
457
+ """
458
+ The exterior or complement of the link L, that is, S^3 minus L.
459
+
460
+ >>> K = Link('4_1')
461
+ >>> M = K.exterior()
462
+ >>> M.volume() # doctest: +NUMERIC6
463
+ 2.02988321
464
+
465
+ By default, SnapPy will try to find a hyperbolic structure on the
466
+ exterior. To return a Triangulation instead of a Manifold, set the
467
+ flag with_hyperbolic_structure to False. If you want to get the
468
+ intermediate triangulation with extra vertices above and below the
469
+ projection plane, set the flag remove_finite_vertices to False.
470
+
471
+ >>> M = K.exterior(False, False)
472
+ >>> (M.num_cusps(), M._num_fake_cusps())
473
+ (1, 2)
474
+
475
+ """
476
+ M = Triangulation('empty')
477
+ M._get_from_link_data(self.KLPProjection(), remove_finite_vertices)
478
+ if with_hyperbolic_structure:
479
+ M = M.with_hyperbolic_structure()
480
+ dt = DTcodec(*self.DT_code(flips=True))
481
+ M._set_DTcode(dt)
482
+ if self.name:
483
+ M.set_name(self.name)
484
+ return M
485
+
486
+
487
+ link_objects = []
488
+
489
+ from spherogram.links import (Crossing, Strand, Link, Tangle,
490
+ RationalTangle, ZeroTangle, InfinityTangle, IdentityBraid, random_link)
491
+
492
+ # Monkey-patch the Link class
493
+ Link.exterior = _link_exterior
494
+ link_objects += [
495
+ 'Crossing', 'Strand', 'Link', 'Tangle', 'RationalTangle', 'ZeroTangle', 'InfinityTangle',
496
+ 'IdentityBraid', 'random_link',
497
+ ]
498
+
499
+ # Monkey-patch the DTcodec class
500
+ DTcodec.exterior = _link_exterior
501
+ link_objects += ['DTcodec']
502
+
503
+ __all__ += link_objects
504
+
505
+ # Add spun-normal surface features via FXrays
506
+ import FXrays
507
+ from .snap.t3mlite import spun as _spun
508
+ for mfld_class in [Triangulation, Manifold, ManifoldHP]:
509
+ for method in ['_normal_surface_equations', 'normal_surfaces',
510
+ 'normal_boundary_slopes']:
511
+ setattr(mfld_class, method, getattr(_spun, method))
512
+
513
+ import textwrap
514
+
515
+ # Documentation for the module:
516
+ __doc__ = """
517
+ SnapPy is a Cython wrapping of Jeff Weeks' SnapPea kernel.
518
+
519
+ The module defines the following classes:
520
+ %s""" % textwrap.fill(
521
+ ', '.join(__all__) + '.',
522
+ width=78,
523
+ initial_indent=' ',
524
+ subsequent_indent=' ')
525
+
526
+ # Add easy way to get the version info
527
+ from .version import version as version_str
528
+
529
+
530
+ def version():
531
+ return version_str
532
+
533
+
534
+ __version__ = version()