snappy 3.3__cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (541) hide show
  1. snappy/CyOpenGL.cpython-310-aarch64-linux-gnu.so +0 -0
  2. snappy/SnapPy.cpython-310-aarch64-linux-gnu.so +0 -0
  3. snappy/SnapPy.ico +0 -0
  4. snappy/SnapPy.png +0 -0
  5. snappy/SnapPyHP.cpython-310-aarch64-linux-gnu.so +0 -0
  6. snappy/__init__.py +534 -0
  7. snappy/app.py +604 -0
  8. snappy/app_menus.py +372 -0
  9. snappy/browser.py +998 -0
  10. snappy/cache.py +25 -0
  11. snappy/canonical.py +249 -0
  12. snappy/cusps/__init__.py +280 -0
  13. snappy/cusps/cusp_area_matrix.py +98 -0
  14. snappy/cusps/cusp_areas_from_matrix.py +96 -0
  15. snappy/cusps/maximal_cusp_area_matrix.py +136 -0
  16. snappy/cusps/short_slopes_for_cusp.py +217 -0
  17. snappy/cusps/test.py +22 -0
  18. snappy/cusps/trig_cusp_area_matrix.py +63 -0
  19. snappy/database.py +454 -0
  20. snappy/db_utilities.py +79 -0
  21. snappy/decorated_isosig.py +717 -0
  22. snappy/dev/__init__.py +0 -0
  23. snappy/dev/extended_ptolemy/__init__.py +8 -0
  24. snappy/dev/extended_ptolemy/closed.py +106 -0
  25. snappy/dev/extended_ptolemy/complexVolumesClosed.py +149 -0
  26. snappy/dev/extended_ptolemy/direct.py +42 -0
  27. snappy/dev/extended_ptolemy/extended.py +406 -0
  28. snappy/dev/extended_ptolemy/giac_helper.py +43 -0
  29. snappy/dev/extended_ptolemy/giac_rur.py +129 -0
  30. snappy/dev/extended_ptolemy/gluing.py +46 -0
  31. snappy/dev/extended_ptolemy/phc_wrapper.py +220 -0
  32. snappy/dev/extended_ptolemy/printMatrices.py +70 -0
  33. snappy/dev/vericlosed/__init__.py +1 -0
  34. snappy/dev/vericlosed/computeApproxHyperbolicStructureNew.py +159 -0
  35. snappy/dev/vericlosed/computeApproxHyperbolicStructureOrb.py +90 -0
  36. snappy/dev/vericlosed/computeVerifiedHyperbolicStructure.py +111 -0
  37. snappy/dev/vericlosed/gimbalLoopFinder.py +130 -0
  38. snappy/dev/vericlosed/hyperbolicStructure.py +313 -0
  39. snappy/dev/vericlosed/krawczykCertifiedEdgeLengthsEngine.py +165 -0
  40. snappy/dev/vericlosed/oneVertexTruncatedComplex.py +122 -0
  41. snappy/dev/vericlosed/orb/__init__.py +1 -0
  42. snappy/dev/vericlosed/orb/orb_solution_for_snappea_finite_triangulation_mac +0 -0
  43. snappy/dev/vericlosed/parseVertexGramMatrixFile.py +47 -0
  44. snappy/dev/vericlosed/polishApproxHyperbolicStructure.py +61 -0
  45. snappy/dev/vericlosed/test.py +54 -0
  46. snappy/dev/vericlosed/truncatedComplex.py +176 -0
  47. snappy/dev/vericlosed/verificationError.py +58 -0
  48. snappy/dev/vericlosed/verifyHyperbolicStructureEngine.py +177 -0
  49. snappy/doc/_images/SnapPy-196.png +0 -0
  50. snappy/doc/_images/m004_paper_plane_on_systole.jpg +0 -0
  51. snappy/doc/_images/m125_paper_plane.jpg +0 -0
  52. snappy/doc/_images/mac.png +0 -0
  53. snappy/doc/_images/o9_00000_systole_paper_plane.jpg +0 -0
  54. snappy/doc/_images/o9_00000_systole_paper_plane_closer.jpg +0 -0
  55. snappy/doc/_images/plink-action.png +0 -0
  56. snappy/doc/_images/ubuntu.png +0 -0
  57. snappy/doc/_images/win7.png +0 -0
  58. snappy/doc/_sources/additional_classes.rst.txt +40 -0
  59. snappy/doc/_sources/bugs.rst.txt +14 -0
  60. snappy/doc/_sources/censuses.rst.txt +52 -0
  61. snappy/doc/_sources/credits.rst.txt +81 -0
  62. snappy/doc/_sources/development.rst.txt +261 -0
  63. snappy/doc/_sources/index.rst.txt +215 -0
  64. snappy/doc/_sources/installing.rst.txt +249 -0
  65. snappy/doc/_sources/manifold.rst.txt +6 -0
  66. snappy/doc/_sources/manifoldhp.rst.txt +46 -0
  67. snappy/doc/_sources/news.rst.txt +425 -0
  68. snappy/doc/_sources/other.rst.txt +25 -0
  69. snappy/doc/_sources/platonic_census.rst.txt +20 -0
  70. snappy/doc/_sources/plink.rst.txt +102 -0
  71. snappy/doc/_sources/ptolemy.rst.txt +66 -0
  72. snappy/doc/_sources/ptolemy_classes.rst.txt +42 -0
  73. snappy/doc/_sources/ptolemy_examples1.rst.txt +298 -0
  74. snappy/doc/_sources/ptolemy_examples2.rst.txt +363 -0
  75. snappy/doc/_sources/ptolemy_examples3.rst.txt +301 -0
  76. snappy/doc/_sources/ptolemy_examples4.rst.txt +61 -0
  77. snappy/doc/_sources/ptolemy_prelim.rst.txt +105 -0
  78. snappy/doc/_sources/screenshots.rst.txt +21 -0
  79. snappy/doc/_sources/snap.rst.txt +87 -0
  80. snappy/doc/_sources/snappy.rst.txt +28 -0
  81. snappy/doc/_sources/spherogram.rst.txt +103 -0
  82. snappy/doc/_sources/todo.rst.txt +47 -0
  83. snappy/doc/_sources/triangulation.rst.txt +11 -0
  84. snappy/doc/_sources/tutorial.rst.txt +49 -0
  85. snappy/doc/_sources/verify.rst.txt +210 -0
  86. snappy/doc/_sources/verify_internals.rst.txt +79 -0
  87. snappy/doc/_static/SnapPy-horizontal-128.png +0 -0
  88. snappy/doc/_static/SnapPy.ico +0 -0
  89. snappy/doc/_static/_sphinx_javascript_frameworks_compat.js +123 -0
  90. snappy/doc/_static/basic.css +906 -0
  91. snappy/doc/_static/css/badge_only.css +1 -0
  92. snappy/doc/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
  93. snappy/doc/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
  94. snappy/doc/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
  95. snappy/doc/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
  96. snappy/doc/_static/css/fonts/fontawesome-webfont.eot +0 -0
  97. snappy/doc/_static/css/fonts/fontawesome-webfont.svg +2671 -0
  98. snappy/doc/_static/css/fonts/fontawesome-webfont.ttf +0 -0
  99. snappy/doc/_static/css/fonts/fontawesome-webfont.woff +0 -0
  100. snappy/doc/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
  101. snappy/doc/_static/css/fonts/lato-bold-italic.woff +0 -0
  102. snappy/doc/_static/css/fonts/lato-bold-italic.woff2 +0 -0
  103. snappy/doc/_static/css/fonts/lato-bold.woff +0 -0
  104. snappy/doc/_static/css/fonts/lato-bold.woff2 +0 -0
  105. snappy/doc/_static/css/fonts/lato-normal-italic.woff +0 -0
  106. snappy/doc/_static/css/fonts/lato-normal-italic.woff2 +0 -0
  107. snappy/doc/_static/css/fonts/lato-normal.woff +0 -0
  108. snappy/doc/_static/css/fonts/lato-normal.woff2 +0 -0
  109. snappy/doc/_static/css/theme.css +4 -0
  110. snappy/doc/_static/doctools.js +149 -0
  111. snappy/doc/_static/documentation_options.js +13 -0
  112. snappy/doc/_static/file.png +0 -0
  113. snappy/doc/_static/fonts/Lato/lato-bold.eot +0 -0
  114. snappy/doc/_static/fonts/Lato/lato-bold.ttf +0 -0
  115. snappy/doc/_static/fonts/Lato/lato-bold.woff +0 -0
  116. snappy/doc/_static/fonts/Lato/lato-bold.woff2 +0 -0
  117. snappy/doc/_static/fonts/Lato/lato-bolditalic.eot +0 -0
  118. snappy/doc/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
  119. snappy/doc/_static/fonts/Lato/lato-bolditalic.woff +0 -0
  120. snappy/doc/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
  121. snappy/doc/_static/fonts/Lato/lato-italic.eot +0 -0
  122. snappy/doc/_static/fonts/Lato/lato-italic.ttf +0 -0
  123. snappy/doc/_static/fonts/Lato/lato-italic.woff +0 -0
  124. snappy/doc/_static/fonts/Lato/lato-italic.woff2 +0 -0
  125. snappy/doc/_static/fonts/Lato/lato-regular.eot +0 -0
  126. snappy/doc/_static/fonts/Lato/lato-regular.ttf +0 -0
  127. snappy/doc/_static/fonts/Lato/lato-regular.woff +0 -0
  128. snappy/doc/_static/fonts/Lato/lato-regular.woff2 +0 -0
  129. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
  130. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
  131. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
  132. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
  133. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
  134. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
  135. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
  136. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
  137. snappy/doc/_static/jquery.js +2 -0
  138. snappy/doc/_static/js/badge_only.js +1 -0
  139. snappy/doc/_static/js/theme.js +1 -0
  140. snappy/doc/_static/js/versions.js +228 -0
  141. snappy/doc/_static/language_data.js +192 -0
  142. snappy/doc/_static/minus.png +0 -0
  143. snappy/doc/_static/plus.png +0 -0
  144. snappy/doc/_static/pygments.css +75 -0
  145. snappy/doc/_static/searchtools.js +635 -0
  146. snappy/doc/_static/snappy_furo.css +33 -0
  147. snappy/doc/_static/snappy_sphinx_rtd_theme.css +42 -0
  148. snappy/doc/_static/sphinx_highlight.js +154 -0
  149. snappy/doc/additional_classes.html +1500 -0
  150. snappy/doc/bugs.html +132 -0
  151. snappy/doc/censuses.html +453 -0
  152. snappy/doc/credits.html +184 -0
  153. snappy/doc/development.html +385 -0
  154. snappy/doc/doc-latest/additional_classes.html +1500 -0
  155. snappy/doc/doc-latest/bugs.html +132 -0
  156. snappy/doc/doc-latest/censuses.html +453 -0
  157. snappy/doc/doc-latest/credits.html +184 -0
  158. snappy/doc/doc-latest/development.html +385 -0
  159. snappy/doc/doc-latest/genindex.html +1349 -0
  160. snappy/doc/doc-latest/index.html +287 -0
  161. snappy/doc/doc-latest/installing.html +346 -0
  162. snappy/doc/doc-latest/manifold.html +3632 -0
  163. snappy/doc/doc-latest/manifoldhp.html +180 -0
  164. snappy/doc/doc-latest/news.html +438 -0
  165. snappy/doc/doc-latest/objects.inv +0 -0
  166. snappy/doc/doc-latest/other.html +160 -0
  167. snappy/doc/doc-latest/platonic_census.html +376 -0
  168. snappy/doc/doc-latest/plink.html +210 -0
  169. snappy/doc/doc-latest/ptolemy.html +253 -0
  170. snappy/doc/doc-latest/ptolemy_classes.html +1144 -0
  171. snappy/doc/doc-latest/ptolemy_examples1.html +409 -0
  172. snappy/doc/doc-latest/ptolemy_examples2.html +471 -0
  173. snappy/doc/doc-latest/ptolemy_examples3.html +414 -0
  174. snappy/doc/doc-latest/ptolemy_examples4.html +195 -0
  175. snappy/doc/doc-latest/ptolemy_prelim.html +248 -0
  176. snappy/doc/doc-latest/py-modindex.html +165 -0
  177. snappy/doc/doc-latest/screenshots.html +141 -0
  178. snappy/doc/doc-latest/search.html +135 -0
  179. snappy/doc/doc-latest/searchindex.js +1 -0
  180. snappy/doc/doc-latest/snap.html +202 -0
  181. snappy/doc/doc-latest/snappy.html +181 -0
  182. snappy/doc/doc-latest/spherogram.html +1346 -0
  183. snappy/doc/doc-latest/todo.html +166 -0
  184. snappy/doc/doc-latest/triangulation.html +1676 -0
  185. snappy/doc/doc-latest/tutorial.html +159 -0
  186. snappy/doc/doc-latest/verify.html +330 -0
  187. snappy/doc/doc-latest/verify_internals.html +1235 -0
  188. snappy/doc/genindex.html +1349 -0
  189. snappy/doc/index.html +287 -0
  190. snappy/doc/installing.html +346 -0
  191. snappy/doc/manifold.html +3632 -0
  192. snappy/doc/manifoldhp.html +180 -0
  193. snappy/doc/news.html +438 -0
  194. snappy/doc/objects.inv +0 -0
  195. snappy/doc/other.html +160 -0
  196. snappy/doc/platonic_census.html +376 -0
  197. snappy/doc/plink.html +210 -0
  198. snappy/doc/ptolemy.html +253 -0
  199. snappy/doc/ptolemy_classes.html +1144 -0
  200. snappy/doc/ptolemy_examples1.html +409 -0
  201. snappy/doc/ptolemy_examples2.html +471 -0
  202. snappy/doc/ptolemy_examples3.html +414 -0
  203. snappy/doc/ptolemy_examples4.html +195 -0
  204. snappy/doc/ptolemy_prelim.html +248 -0
  205. snappy/doc/py-modindex.html +165 -0
  206. snappy/doc/screenshots.html +141 -0
  207. snappy/doc/search.html +135 -0
  208. snappy/doc/searchindex.js +1 -0
  209. snappy/doc/snap.html +202 -0
  210. snappy/doc/snappy.html +181 -0
  211. snappy/doc/spherogram.html +1346 -0
  212. snappy/doc/todo.html +166 -0
  213. snappy/doc/triangulation.html +1676 -0
  214. snappy/doc/tutorial.html +159 -0
  215. snappy/doc/verify.html +330 -0
  216. snappy/doc/verify_internals.html +1235 -0
  217. snappy/drilling/__init__.py +456 -0
  218. snappy/drilling/barycentric.py +103 -0
  219. snappy/drilling/constants.py +5 -0
  220. snappy/drilling/crush.py +270 -0
  221. snappy/drilling/cusps.py +125 -0
  222. snappy/drilling/debug.py +242 -0
  223. snappy/drilling/epsilons.py +6 -0
  224. snappy/drilling/exceptions.py +55 -0
  225. snappy/drilling/moves.py +620 -0
  226. snappy/drilling/peripheral_curves.py +210 -0
  227. snappy/drilling/perturb.py +188 -0
  228. snappy/drilling/shorten.py +36 -0
  229. snappy/drilling/subdivide.py +274 -0
  230. snappy/drilling/test.py +23 -0
  231. snappy/drilling/test_cases.py +132 -0
  232. snappy/drilling/tracing.py +351 -0
  233. snappy/exceptions.py +26 -0
  234. snappy/export_stl.py +120 -0
  235. snappy/exterior_to_link/__init__.py +2 -0
  236. snappy/exterior_to_link/barycentric_geometry.py +463 -0
  237. snappy/exterior_to_link/exceptions.py +6 -0
  238. snappy/exterior_to_link/geodesic_map.json +14408 -0
  239. snappy/exterior_to_link/hyp_utils.py +112 -0
  240. snappy/exterior_to_link/link_projection.py +323 -0
  241. snappy/exterior_to_link/main.py +198 -0
  242. snappy/exterior_to_link/mcomplex_with_expansion.py +261 -0
  243. snappy/exterior_to_link/mcomplex_with_link.py +687 -0
  244. snappy/exterior_to_link/mcomplex_with_memory.py +162 -0
  245. snappy/exterior_to_link/pl_utils.py +491 -0
  246. snappy/exterior_to_link/put_in_S3.py +156 -0
  247. snappy/exterior_to_link/rational_linear_algebra.py +130 -0
  248. snappy/exterior_to_link/rational_linear_algebra_wrapped.py +135 -0
  249. snappy/exterior_to_link/simplify_to_base_tri.py +114 -0
  250. snappy/exterior_to_link/stored_moves.py +475 -0
  251. snappy/exterior_to_link/test.py +31 -0
  252. snappy/filedialog.py +28 -0
  253. snappy/geometric_structure/__init__.py +212 -0
  254. snappy/geometric_structure/cusp_neighborhood/__init__.py +3 -0
  255. snappy/geometric_structure/cusp_neighborhood/complex_cusp_cross_section.py +691 -0
  256. snappy/geometric_structure/cusp_neighborhood/cusp_cross_section_base.py +480 -0
  257. snappy/geometric_structure/cusp_neighborhood/exceptions.py +41 -0
  258. snappy/geometric_structure/cusp_neighborhood/real_cusp_cross_section.py +294 -0
  259. snappy/geometric_structure/cusp_neighborhood/tiles_for_cusp_neighborhood.py +156 -0
  260. snappy/geometric_structure/cusp_neighborhood/vertices.py +35 -0
  261. snappy/geometric_structure/geodesic/__init__.py +0 -0
  262. snappy/geometric_structure/geodesic/add_core_curves.py +152 -0
  263. snappy/geometric_structure/geodesic/avoid_core_curves.py +369 -0
  264. snappy/geometric_structure/geodesic/canonical_representatives.py +52 -0
  265. snappy/geometric_structure/geodesic/check_away_from_core_curve.py +60 -0
  266. snappy/geometric_structure/geodesic/constants.py +6 -0
  267. snappy/geometric_structure/geodesic/exceptions.py +22 -0
  268. snappy/geometric_structure/geodesic/fixed_points.py +106 -0
  269. snappy/geometric_structure/geodesic/geodesic_start_point_info.py +435 -0
  270. snappy/geometric_structure/geodesic/graph_trace_helper.py +67 -0
  271. snappy/geometric_structure/geodesic/line.py +30 -0
  272. snappy/geometric_structure/geodesic/multiplicity.py +127 -0
  273. snappy/geometric_structure/geodesic/tiles_for_geodesic.py +128 -0
  274. snappy/geometric_structure/test.py +22 -0
  275. snappy/gui.py +121 -0
  276. snappy/horoviewer.py +443 -0
  277. snappy/hyperboloid/__init__.py +212 -0
  278. snappy/hyperboloid/distances.py +259 -0
  279. snappy/hyperboloid/horoball.py +19 -0
  280. snappy/hyperboloid/line.py +35 -0
  281. snappy/hyperboloid/point.py +9 -0
  282. snappy/hyperboloid/triangle.py +29 -0
  283. snappy/info_icon.gif +0 -0
  284. snappy/infowindow.py +65 -0
  285. snappy/isometry_signature.py +389 -0
  286. snappy/len_spec/__init__.py +609 -0
  287. snappy/len_spec/geodesic_info.py +129 -0
  288. snappy/len_spec/geodesic_key_info_dict.py +116 -0
  289. snappy/len_spec/geodesic_piece.py +146 -0
  290. snappy/len_spec/geometric_structure.py +182 -0
  291. snappy/len_spec/geometry.py +136 -0
  292. snappy/len_spec/length_spectrum_geodesic_info.py +185 -0
  293. snappy/len_spec/spine.py +128 -0
  294. snappy/len_spec/test.py +24 -0
  295. snappy/len_spec/test_cases.py +69 -0
  296. snappy/len_spec/tile.py +276 -0
  297. snappy/len_spec/word.py +86 -0
  298. snappy/manifolds/HTWKnots/alternating.gz +0 -0
  299. snappy/manifolds/HTWKnots/nonalternating.gz +0 -0
  300. snappy/manifolds/__init__.py +3 -0
  301. snappy/margulis/__init__.py +332 -0
  302. snappy/margulis/cusp_neighborhood_neighborhood.py +66 -0
  303. snappy/margulis/geodesic_neighborhood.py +152 -0
  304. snappy/margulis/margulis_info.py +21 -0
  305. snappy/margulis/mu_from_neighborhood_pair.py +175 -0
  306. snappy/margulis/neighborhood.py +29 -0
  307. snappy/margulis/test.py +22 -0
  308. snappy/math_basics.py +187 -0
  309. snappy/matrix.py +525 -0
  310. snappy/number.py +657 -0
  311. snappy/numeric_output_checker.py +345 -0
  312. snappy/pari.py +41 -0
  313. snappy/phone_home.py +57 -0
  314. snappy/polyviewer.py +259 -0
  315. snappy/ptolemy/__init__.py +17 -0
  316. snappy/ptolemy/component.py +103 -0
  317. snappy/ptolemy/coordinates.py +2290 -0
  318. snappy/ptolemy/fieldExtensions.py +153 -0
  319. snappy/ptolemy/findLoops.py +473 -0
  320. snappy/ptolemy/geometricRep.py +59 -0
  321. snappy/ptolemy/homology.py +165 -0
  322. snappy/ptolemy/magma/default.magma_template +229 -0
  323. snappy/ptolemy/magma/radicalsOfPrimaryDecomposition.magma_template +79 -0
  324. snappy/ptolemy/manifoldMethods.py +395 -0
  325. snappy/ptolemy/matrix.py +350 -0
  326. snappy/ptolemy/numericalSolutionsToGroebnerBasis.py +113 -0
  327. snappy/ptolemy/polynomial.py +856 -0
  328. snappy/ptolemy/processComponents.py +173 -0
  329. snappy/ptolemy/processFileBase.py +247 -0
  330. snappy/ptolemy/processFileDispatch.py +46 -0
  331. snappy/ptolemy/processMagmaFile.py +392 -0
  332. snappy/ptolemy/processRurFile.py +150 -0
  333. snappy/ptolemy/ptolemyGeneralizedObstructionClass.py +102 -0
  334. snappy/ptolemy/ptolemyObstructionClass.py +64 -0
  335. snappy/ptolemy/ptolemyVariety.py +995 -0
  336. snappy/ptolemy/ptolemyVarietyPrimeIdealGroebnerBasis.py +140 -0
  337. snappy/ptolemy/reginaWrapper.py +698 -0
  338. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c0.magma_out.bz2 +0 -0
  339. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c1.magma_out.bz2 +0 -0
  340. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c2.magma_out.bz2 +0 -0
  341. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c3.magma_out.bz2 +0 -0
  342. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c4.magma_out.bz2 +0 -0
  343. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c5.magma_out.bz2 +0 -0
  344. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c6.magma_out.bz2 +0 -0
  345. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c7.magma_out.bz2 +0 -0
  346. snappy/ptolemy/regina_testing_files_generalized/m003__sl3_c0.magma_out.bz2 +0 -0
  347. snappy/ptolemy/regina_testing_files_generalized/m003__sl3_c1.magma_out.bz2 +0 -0
  348. snappy/ptolemy/regina_testing_files_generalized/m015__sl2_c0.magma_out.bz2 +0 -0
  349. snappy/ptolemy/regina_testing_files_generalized/m015__sl2_c1.magma_out.bz2 +0 -0
  350. snappy/ptolemy/regina_testing_files_generalized/m015__sl3_c0.magma_out.bz2 +0 -0
  351. snappy/ptolemy/regina_testing_files_generalized/m015__sl3_c1.magma_out.bz2 +0 -0
  352. snappy/ptolemy/rur.py +545 -0
  353. snappy/ptolemy/solutionsToPrimeIdealGroebnerBasis.py +277 -0
  354. snappy/ptolemy/test.py +1126 -0
  355. snappy/ptolemy/testing_files/3_1__sl2_c0.magma_out.bz2 +0 -0
  356. snappy/ptolemy/testing_files/3_1__sl2_c1.magma_out.bz2 +0 -0
  357. snappy/ptolemy/testing_files/4_1__sl2_c0.magma_out.bz2 +0 -0
  358. snappy/ptolemy/testing_files/4_1__sl2_c1.magma_out.bz2 +0 -0
  359. snappy/ptolemy/testing_files/4_1__sl3_c0.magma_out.bz2 +0 -0
  360. snappy/ptolemy/testing_files/4_1__sl4_c0.magma_out.bz2 +0 -0
  361. snappy/ptolemy/testing_files/4_1__sl4_c1.magma_out.bz2 +0 -0
  362. snappy/ptolemy/testing_files/5_2__sl2_c0.magma_out.bz2 +0 -0
  363. snappy/ptolemy/testing_files/5_2__sl2_c1.magma_out.bz2 +0 -0
  364. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c0.magma_out.bz2 +0 -0
  365. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c1.magma_out.bz2 +0 -0
  366. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c2.magma_out.bz2 +0 -0
  367. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c3.magma_out.bz2 +0 -0
  368. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c4.magma_out.bz2 +0 -0
  369. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c5.magma_out.bz2 +0 -0
  370. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c6.magma_out.bz2 +0 -0
  371. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c7.magma_out.bz2 +0 -0
  372. snappy/ptolemy/testing_files/data/pgl2/OrientableCuspedCensus/03_tetrahedra/m019__sl2_c0.magma_out +95 -0
  373. snappy/ptolemy/testing_files/data/pgl2/OrientableCuspedCensus/03_tetrahedra/m019__sl2_c1.magma_out +95 -0
  374. snappy/ptolemy/testing_files/m015__sl3_c0.magma_out.bz2 +0 -0
  375. snappy/ptolemy/testing_files/m135__sl2_c0.magma_out.bz2 +0 -0
  376. snappy/ptolemy/testing_files/m135__sl2_c1.magma_out.bz2 +0 -0
  377. snappy/ptolemy/testing_files/m135__sl2_c2.magma_out.bz2 +0 -0
  378. snappy/ptolemy/testing_files/m135__sl2_c3.magma_out.bz2 +0 -0
  379. snappy/ptolemy/testing_files/m135__sl2_c4.magma_out.bz2 +0 -0
  380. snappy/ptolemy/testing_files/m135__sl2_c5.magma_out.bz2 +0 -0
  381. snappy/ptolemy/testing_files/m135__sl2_c6.magma_out.bz2 +0 -0
  382. snappy/ptolemy/testing_files/m135__sl2_c7.magma_out.bz2 +0 -0
  383. snappy/ptolemy/testing_files/s000__sl2_c0.magma_out.bz2 +0 -0
  384. snappy/ptolemy/testing_files/s000__sl2_c1.magma_out.bz2 +0 -0
  385. snappy/ptolemy/testing_files/t00000__sl2_c0.magma_out.bz2 +0 -0
  386. snappy/ptolemy/testing_files/t00000__sl2_c1.magma_out.bz2 +0 -0
  387. snappy/ptolemy/testing_files/v0000__sl2_c0.magma_out.bz2 +0 -0
  388. snappy/ptolemy/testing_files/v0000__sl2_c1.magma_out.bz2 +0 -0
  389. snappy/ptolemy/testing_files/v0000__sl2_c2.magma_out.bz2 +0 -0
  390. snappy/ptolemy/testing_files/v0000__sl2_c3.magma_out.bz2 +0 -0
  391. snappy/ptolemy/testing_files_generalized/m003__sl2_c0.magma_out.bz2 +0 -0
  392. snappy/ptolemy/testing_files_generalized/m003__sl2_c1.magma_out.bz2 +0 -0
  393. snappy/ptolemy/testing_files_generalized/m003__sl3_c0.magma_out.bz2 +0 -0
  394. snappy/ptolemy/testing_files_generalized/m003__sl3_c1.magma_out.bz2 +0 -0
  395. snappy/ptolemy/testing_files_generalized/m004__sl2_c0.magma_out.bz2 +0 -0
  396. snappy/ptolemy/testing_files_generalized/m004__sl2_c1.magma_out.bz2 +0 -0
  397. snappy/ptolemy/testing_files_generalized/m015__sl2_c1.magma_out.bz2 +0 -0
  398. snappy/ptolemy/testing_files_generalized/m015__sl3_c0.magma_out.bz2 +0 -0
  399. snappy/ptolemy/testing_files_rur/m052__sl3_c0.rur.bz2 +0 -0
  400. snappy/ptolemy/utilities.py +236 -0
  401. snappy/raytracing/__init__.py +64 -0
  402. snappy/raytracing/additional_horospheres.py +64 -0
  403. snappy/raytracing/additional_len_spec_choices.py +63 -0
  404. snappy/raytracing/cohomology_fractal.py +197 -0
  405. snappy/raytracing/eyeball.py +124 -0
  406. snappy/raytracing/finite_raytracing_data.py +237 -0
  407. snappy/raytracing/finite_viewer.py +590 -0
  408. snappy/raytracing/geodesic_tube_info.py +174 -0
  409. snappy/raytracing/geodesics.py +246 -0
  410. snappy/raytracing/geodesics_window.py +258 -0
  411. snappy/raytracing/gui_utilities.py +293 -0
  412. snappy/raytracing/hyperboloid_navigation.py +556 -0
  413. snappy/raytracing/hyperboloid_utilities.py +234 -0
  414. snappy/raytracing/ideal_raytracing_data.py +592 -0
  415. snappy/raytracing/inside_viewer.py +974 -0
  416. snappy/raytracing/pack.py +22 -0
  417. snappy/raytracing/raytracing_data.py +126 -0
  418. snappy/raytracing/raytracing_view.py +454 -0
  419. snappy/raytracing/shaders/Eye.png +0 -0
  420. snappy/raytracing/shaders/NonGeometric.png +0 -0
  421. snappy/raytracing/shaders/__init__.py +101 -0
  422. snappy/raytracing/shaders/fragment.glsl +1744 -0
  423. snappy/raytracing/test.py +29 -0
  424. snappy/raytracing/tooltip.py +146 -0
  425. snappy/raytracing/upper_halfspace_utilities.py +98 -0
  426. snappy/raytracing/view_scale_controller.py +98 -0
  427. snappy/raytracing/zoom_slider/__init__.py +263 -0
  428. snappy/raytracing/zoom_slider/inward.png +0 -0
  429. snappy/raytracing/zoom_slider/inward18.png +0 -0
  430. snappy/raytracing/zoom_slider/outward.png +0 -0
  431. snappy/raytracing/zoom_slider/outward18.png +0 -0
  432. snappy/raytracing/zoom_slider/test.py +20 -0
  433. snappy/sage_helper.py +119 -0
  434. snappy/settings.py +407 -0
  435. snappy/shell.py +53 -0
  436. snappy/snap/__init__.py +117 -0
  437. snappy/snap/character_varieties.py +375 -0
  438. snappy/snap/find_field.py +372 -0
  439. snappy/snap/fox_milnor.py +271 -0
  440. snappy/snap/fundamental_polyhedron.py +569 -0
  441. snappy/snap/generators.py +39 -0
  442. snappy/snap/interval_reps.py +81 -0
  443. snappy/snap/kernel_structures.py +128 -0
  444. snappy/snap/mcomplex_base.py +18 -0
  445. snappy/snap/nsagetools.py +716 -0
  446. snappy/snap/peripheral/__init__.py +1 -0
  447. snappy/snap/peripheral/dual_cellulation.py +219 -0
  448. snappy/snap/peripheral/link.py +127 -0
  449. snappy/snap/peripheral/peripheral.py +159 -0
  450. snappy/snap/peripheral/surface.py +522 -0
  451. snappy/snap/peripheral/test.py +35 -0
  452. snappy/snap/polished_reps.py +335 -0
  453. snappy/snap/shapes.py +152 -0
  454. snappy/snap/slice_obs_HKL/__init__.py +194 -0
  455. snappy/snap/slice_obs_HKL/basics.py +236 -0
  456. snappy/snap/slice_obs_HKL/direct.py +217 -0
  457. snappy/snap/slice_obs_HKL/poly_norm.py +212 -0
  458. snappy/snap/slice_obs_HKL/rep_theory.py +424 -0
  459. snappy/snap/t3mlite/__init__.py +2 -0
  460. snappy/snap/t3mlite/arrow.py +243 -0
  461. snappy/snap/t3mlite/corner.py +22 -0
  462. snappy/snap/t3mlite/edge.py +172 -0
  463. snappy/snap/t3mlite/face.py +37 -0
  464. snappy/snap/t3mlite/files.py +211 -0
  465. snappy/snap/t3mlite/homology.py +53 -0
  466. snappy/snap/t3mlite/linalg.py +419 -0
  467. snappy/snap/t3mlite/mcomplex.py +1499 -0
  468. snappy/snap/t3mlite/perm4.py +320 -0
  469. snappy/snap/t3mlite/setup.py +12 -0
  470. snappy/snap/t3mlite/simplex.py +199 -0
  471. snappy/snap/t3mlite/spun.py +297 -0
  472. snappy/snap/t3mlite/surface.py +519 -0
  473. snappy/snap/t3mlite/test.py +20 -0
  474. snappy/snap/t3mlite/test_vs_regina.py +86 -0
  475. snappy/snap/t3mlite/tetrahedron.py +109 -0
  476. snappy/snap/t3mlite/vertex.py +42 -0
  477. snappy/snap/test.py +139 -0
  478. snappy/snap/utilities.py +288 -0
  479. snappy/test.py +213 -0
  480. snappy/test_cases.py +263 -0
  481. snappy/testing.py +131 -0
  482. snappy/tiling/__init__.py +2 -0
  483. snappy/tiling/dict_based_set.py +79 -0
  484. snappy/tiling/floor.py +49 -0
  485. snappy/tiling/hyperboloid_dict.py +54 -0
  486. snappy/tiling/iter_utils.py +78 -0
  487. snappy/tiling/lifted_tetrahedron.py +22 -0
  488. snappy/tiling/lifted_tetrahedron_set.py +54 -0
  489. snappy/tiling/quotient_dict.py +70 -0
  490. snappy/tiling/real_hash_dict.py +164 -0
  491. snappy/tiling/test.py +23 -0
  492. snappy/tiling/tile.py +224 -0
  493. snappy/tiling/triangle.py +33 -0
  494. snappy/tkterminal.py +920 -0
  495. snappy/twister/__init__.py +20 -0
  496. snappy/twister/main.py +646 -0
  497. snappy/twister/surfaces/S_0_1 +3 -0
  498. snappy/twister/surfaces/S_0_2 +3 -0
  499. snappy/twister/surfaces/S_0_4 +7 -0
  500. snappy/twister/surfaces/S_0_4_Lantern +8 -0
  501. snappy/twister/surfaces/S_1 +3 -0
  502. snappy/twister/surfaces/S_1_1 +4 -0
  503. snappy/twister/surfaces/S_1_2 +5 -0
  504. snappy/twister/surfaces/S_1_2_5 +6 -0
  505. snappy/twister/surfaces/S_2 +6 -0
  506. snappy/twister/surfaces/S_2_1 +8 -0
  507. snappy/twister/surfaces/S_2_heeg +10 -0
  508. snappy/twister/surfaces/S_3 +8 -0
  509. snappy/twister/surfaces/S_3_1 +10 -0
  510. snappy/twister/surfaces/S_4_1 +12 -0
  511. snappy/twister/surfaces/S_5_1 +14 -0
  512. snappy/twister/surfaces/heeg_fig8 +9 -0
  513. snappy/twister/twister_core.cpython-310-aarch64-linux-gnu.so +0 -0
  514. snappy/upper_halfspace/__init__.py +146 -0
  515. snappy/upper_halfspace/ideal_point.py +29 -0
  516. snappy/verify/__init__.py +13 -0
  517. snappy/verify/canonical.py +542 -0
  518. snappy/verify/complex_volume/__init__.py +18 -0
  519. snappy/verify/complex_volume/adjust_torsion.py +86 -0
  520. snappy/verify/complex_volume/closed.py +168 -0
  521. snappy/verify/complex_volume/compute_ptolemys.py +90 -0
  522. snappy/verify/complex_volume/cusped.py +56 -0
  523. snappy/verify/complex_volume/extended_bloch.py +201 -0
  524. snappy/verify/cusp_translations.py +85 -0
  525. snappy/verify/edge_equations.py +80 -0
  526. snappy/verify/exceptions.py +254 -0
  527. snappy/verify/hyperbolicity.py +224 -0
  528. snappy/verify/interval_newton_shapes_engine.py +523 -0
  529. snappy/verify/interval_tree.py +400 -0
  530. snappy/verify/krawczyk_shapes_engine.py +518 -0
  531. snappy/verify/real_algebra.py +286 -0
  532. snappy/verify/shapes.py +25 -0
  533. snappy/verify/square_extensions.py +1005 -0
  534. snappy/verify/test.py +72 -0
  535. snappy/verify/volume.py +128 -0
  536. snappy/version.py +2 -0
  537. snappy-3.3.dist-info/METADATA +58 -0
  538. snappy-3.3.dist-info/RECORD +541 -0
  539. snappy-3.3.dist-info/WHEEL +6 -0
  540. snappy-3.3.dist-info/entry_points.txt +2 -0
  541. snappy-3.3.dist-info/top_level.txt +28 -0
@@ -0,0 +1,103 @@
1
+ .. Documentation of the Spherogram part of SnapPy
2
+
3
+ .. automodule:: spherogram
4
+
5
+ Links: planar diagrams and invariants
6
+ =======================================
7
+
8
+
9
+
10
+ Tutorial
11
+ --------
12
+
13
+ SnapPy includes the `Spherogram
14
+ <https://github.com/3-manifolds/Spherogram>`_ module which allows one to
15
+ create links programmatically. The graphical conventions used are
16
+ `summarized here
17
+ <https://github.com/3-manifolds/Spherogram/raw/master/spherogram_src/links/doc.pdf>`_.
18
+
19
+ First, here is the figure-8 knot assembled manually from four crossings, with conventions similar to those used by `KnotTheory <http://katlas.org/wiki/Planar_Diagrams>`_::
20
+
21
+ >>> a, b, c, d = [Crossing(x) for x in 'abcd']
22
+ >>> a[0], a[1], a[2], a[3] = c[1], d[0], b[1], b[0]
23
+ >>> b[2], b[3] = d[3], c[2]
24
+ >>> c[3], c[0] = d[2], d[1]
25
+ >>> L = Link([a,b,c,d])
26
+ >>> E = L.exterior()
27
+ >>> E.volume()
28
+ 2.029883212819
29
+ >>> Manifold('4_1').is_isometric_to(E)
30
+ True
31
+
32
+ We can also give the same knot as a rational tangle::
33
+
34
+ >>> L = RationalTangle(3,5).denominator_closure()
35
+ >>> L.PD_code()
36
+ [[6, 3, 7, 4], [4, 2, 5, 1], [0, 6, 1, 5], [2, 7, 3, 0]]
37
+ >>> L.DT_code(True)
38
+ 'DT[dadCDAB]'
39
+
40
+ The natural algebra of tangles `shown here
41
+ <https://github.com/3-manifolds/Spherogram/raw/master/spherogram_src/links/doc.pdf>`_
42
+ all works. For instance, we can build the (-2, 3, 7) pretzel knot by
43
+ adding together three rational tangles::
44
+
45
+ >>> T = RationalTangle(-1, 2) + RationalTangle(1, 3) + RationalTangle(1, 7)
46
+ >>> L = T.numerator_closure()
47
+ >>> Manifold('m016').is_isometric_to(L.exterior())
48
+ True
49
+
50
+ To create the figure-8 knot as a closed braid, we first mash tangles
51
+ together horizontally using "|" to make the standard braid generators;
52
+ then multiplication in the braid group is just tangle multiplication::
53
+
54
+ >>> C, Id = RationalTangle(1), IdentityBraid(1)
55
+ >>> x = sigma_1 = C | Id
56
+ >>> y = sigma_2_inverse = Id | -C
57
+ >>> L = (x*y*x*y).denominator_closure()
58
+ >>> E = L.exterior()
59
+ >>> Manifold('4_1').is_isometric_to(E)
60
+ True
61
+
62
+ Here's the minimally-twisted five chain from Figure 2 of `this paper
63
+ <http://arxiv.org/abs/math.GT/0209214>`_::
64
+
65
+ def twisted_chain(n, k):
66
+ T = RationalTangle(1, 2)
67
+ m = (n+1)//2
68
+ base = (m*[T, -T])[:n]
69
+ tangles = base + [RationalTangle(k)]
70
+ return sum(tangles, RationalTangle(0) ).bridge_closure()
71
+
72
+ >>> L = twisted_chain(5, -1)
73
+ >>> L.exterior().volume()
74
+ 10.14941606410
75
+
76
+ Spherogram includes ways to create very large random links, see below.
77
+ When used inside `Sage <http://sagemath.org>`_, one can compute many
78
+ basic link invariants, including the Jones polynomial. See the
79
+ complete list of Link methods below.
80
+
81
+
82
+ Random Links
83
+ ------------
84
+
85
+ .. autofunction:: spherogram.random_link
86
+
87
+
88
+ The Link class
89
+ --------------
90
+
91
+ .. autoclass:: spherogram.Link
92
+ :members:
93
+ :inherited-members:
94
+ :undoc-members:
95
+
96
+ The ClosedBraid class
97
+ ---------------------
98
+
99
+ The ClosedBraid class provides an alternative way to construct links
100
+ as closed braids. It is a subclass of Link, and currently defines
101
+ the same methods and attributes.
102
+
103
+ .. autoclass:: spherogram.ClosedBraid
@@ -0,0 +1,47 @@
1
+ To Do List
2
+ ==========
3
+
4
+ - For a more current list, see the GitHub `issues list
5
+ <https://github.com/3-manifolds/SnapPy/issues>`_.
6
+
7
+ - GUI
8
+
9
+ - Allow you to get the info (position, radius) of a horoball by clicking it.
10
+
11
+ - Documentation
12
+
13
+ - More hyperlinks
14
+
15
+ - Expand tutorial
16
+
17
+ - Make more screencasts
18
+
19
+ - snappy
20
+
21
+ - Kernel
22
+
23
+ - Minor
24
+
25
+ - dual_curves should really cache its result and have this used by
26
+ drill
27
+
28
+ - One should be able to convert a SymmetryGroup to a Sage permutation group.
29
+
30
+ - Also, the SymmetryGroup presentation function should be wrapped.
31
+ There is code for this in the old SnapPeaPython.
32
+
33
+ - Ambitious
34
+
35
+ - A new basic (sub)class: S3Knot (and/or S3Link).
36
+
37
+ - Consider adding a HeegaardSplitting class
38
+
39
+ - Consider merging our t3m project and normal surface code into
40
+ SnapPy.
41
+
42
+ - Redo much of Snap in the context of Sage/SnapPy.
43
+
44
+ - Add a method for computing tetrahedron shapes to arbitrary precision.
45
+
46
+ - Add methods for computing invariant trace fields and related number
47
+ fields.
@@ -0,0 +1,11 @@
1
+ .. Documentation of the Python part of SnapPy
2
+
3
+ Triangulation
4
+ =================
5
+
6
+ The main snappy class, namely Manifold, is derived from the more
7
+ basic class below.
8
+
9
+ .. autoclass:: snappy.Triangulation
10
+ :members:
11
+ :inherited-members:
@@ -0,0 +1,49 @@
1
+ ========
2
+ Tutorial
3
+ ========
4
+
5
+ The easiest way to learn to use SnapPy is to watch the screencasts
6
+ available on `YouTube <http://youtube.com/user/NathanDunfield>`_:
7
+
8
+ - Intro and quickstart: an 11 minute video with the basics: `Part I
9
+ <http://www.youtube.com/watch?v=ezo19L-JTTI>`_ and `Part II
10
+ <http://www.youtube.com/watch?v=Js4qwyIs-Oo>`_.
11
+
12
+ - An hour-long demo `Practical computation with hyperbolic
13
+ 3-manifolds <http://youtu.be/j8enbAkAvdY>`_, recorded at the Thurston Memorial
14
+ Conference.
15
+
16
+ - The SnapPy 2.0 `new feature demo <http://youtu.be/bCYe_a48viA>`_.
17
+
18
+ - `SnapPy, SageMath, and Docker are friends
19
+ <https://icerm.brown.edu/video_archive/?play=1992>`_ with associated
20
+ `materials (4 pages), including homework
21
+ <https://icerm.brown.edu/materials/Abstracts/tw19-3-pods/Computation_Demonstration_2_]_Nathan_Dunfield,_University_of_Illinois,_Urbana-Champaign.pdf>`_.
22
+
23
+ - `Notes, problem sheets, and references
24
+ <http://dunfield.info/warwick2017/>`_ from the LMS-CMI Research
25
+ School in Warwick in 2017.
26
+
27
+ - Another hour-long demo `Practical computations with hyperbolic
28
+ 3-manifolds <https://icerm.brown.edu/video_archive/?play=1856>`_
29
+ given at ICERM in 2019.
30
+
31
+ The **key** thing to remember when using the SnapPy command shell window is
32
+ that you can explore objects using introspection and tab-completion::
33
+
34
+ In [1]: Manifold? <hit return-key>
35
+ ...instructions for creating a manifold...
36
+
37
+ So now we create a manifold::
38
+
39
+ In [2]: M = Manifold("m004")
40
+
41
+ But what can we do with it? ::
42
+
43
+ In [3]: M.<hit tab-key>
44
+ ...list of methods...
45
+
46
+ What does the "cover" method do? ::
47
+
48
+ In [4]: M.cover? <hit return-key>
49
+ ...description of cover method..
@@ -0,0 +1,210 @@
1
+ Verified computations
2
+ ========================================
3
+
4
+ .. _verify-primer:
5
+
6
+ Introduction
7
+ ------------
8
+
9
+ Several SnapPy methods use numerical computations with floating point
10
+ approximations and can potentially result in incorrect results. This even
11
+ applies to methods whose output is purely combinatorial such as
12
+ :meth:`~snappy.Manifold.canonical_retriangulation`.
13
+
14
+ Many of these SnapPy methods can be supplied with a :attr:`verified` flag to
15
+ ensure that the result is provably correct. Note that verified computations are
16
+ only available when using SnapPy inside `SageMath <http://sagemath.org>`_.
17
+ If the flag :attr:`verified=True` is specified, an incorrect result is
18
+ never returned. Instead the method clearly indicates a failure, usually through
19
+ an exception::
20
+
21
+ sage: M=Manifold("m004")
22
+ sage: M.drill_word('abc', verified=True, bits_prec = 40)
23
+ ...
24
+ InsufficientPrecisionError: When re-tracing the geodesic, the intersection with the next tetrahedron face was too close to the previous to tell them apart. Increasing the precision will probably avoid this problem.
25
+
26
+ Often, such a failure can be advoided by increasing the precision. In
27
+ particular, this applies if the exception is a (subclass of)
28
+ :class:`InsufficientPrecisionError`::
29
+
30
+ sage: M.drill_word('abc', verified=True, bits_prec = 60)
31
+ m004_drilled(0,0)(0,0)
32
+
33
+ Note that, :meth:`~snappy.Manifold.verify_hyperbolicity` is different though
34
+ and does not throw an exception. Instead, it returns a bool indicating success
35
+ as part of its output. This is for compatibility with
36
+ `HIKMOT <http://www.oishi.info.waseda.ac.jp/~takayasu/hikmot/>`_'s
37
+ ``verify_hyperbolicty``::
38
+
39
+ sage: M.verify_hyperbolicity(bits_prec=10)
40
+ (False, [])
41
+ sage: M.verify_hyperbolicity()
42
+ (True,
43
+ [0.50000000000000? + 0.86602540378444?*I,
44
+ 0.50000000000000? + 0.86602540378444?*I])
45
+
46
+ As illustrated above, the result consists of intervals
47
+ (of type SageMath's ``RealIntervalField`` or
48
+ ``ComplexIntervalField``) if the output of a computation is numerical
49
+ and :attr:`verified=True` is specified. These intervals contain the true
50
+ value.
51
+
52
+ Overview
53
+ --------
54
+
55
+ Some examples of verified computations are:
56
+
57
+ * Verify the hyperbolicity
58
+ of an orientable 3-manifold giving complex intervals for the
59
+ shapes corresponding to a hyperbolic structure or holonomy representation with
60
+ :meth:`~snappy.Manifold.verify_hyperbolicity`::
61
+
62
+ sage: M = Manifold("m015")
63
+ sage: M.verify_hyperbolicity()
64
+ (True,
65
+ [0.6623589786224? + 0.5622795120623?*I,
66
+ 0.6623589786224? + 0.5622795120623?*I,
67
+ 0.6623589786224? + 0.5622795120623?*I])
68
+ sage: M.verify_hyperbolicity(holonomy=True)[1].SL2C('a')
69
+ [-0.324717957? - 1.124559024?*I -0.704807293? + 0.398888830?*I]
70
+ [ 1.409614585? - 0.797777659?*I -1.000000000? + 0.?e-9*I]
71
+
72
+ * Intervals for the volume and complex volume of a hyperbolic orientable 3-manifold::
73
+
74
+ sage: M = Manifold("m003(-3,1)")
75
+ sage: M.volume(verified=True, bits_prec = 100)
76
+ 0.942707362776927720921299603?
77
+ sage: M = Manifold("m015")
78
+ sage: M.complex_volume(verified_modulo_2_torsion=True)
79
+ 2.8281220883? + 1.9106738240?*I
80
+
81
+ (Note that when using verified computation, the Chern-Simons invariant is only computed
82
+ modulo pi^2/2 even though it is defined modulo pi^2.)
83
+
84
+ * Give the (a close relative to the canonical cell decomposition) of a cusped
85
+ hyperbolic manifold using intervals or exact arithmetic if necessary with
86
+ :meth:`~snappy.Manifold.canonical_retriangulation`::
87
+
88
+ sage: M = Manifold("m412")
89
+ sage: K = M.canonical_retriangulation(verified = True)
90
+ sage: len(K.isomorphisms_to(K)) # Certified size of isometry group
91
+ 8
92
+
93
+ **Remark:** For the case of non-tetrahedral canonical cell, exact values
94
+ are used which are found
95
+ using the `LLL-algorithm
96
+ <http://en.wikipedia.org/wiki/Lenstra%E2%80%93Lenstra%E2%80%93Lov%C3%A1sz_lattice_basis_reduction_algorithm>`_
97
+ and then verified using exact computations. These computations can be slow. A massive speed-up was achieved by
98
+ recent improvements so that the computation of the isometry signature of any manifold in ``OrientableCuspedCensus``
99
+ takes at most a couple of seconds, typically, far less. Manifolds with more simplices might require setting
100
+ a higher value for
101
+ :attr:`exact_bits_prec_and_degrees`.
102
+
103
+ * The isometry signature which is a complete invariant of the isometry type
104
+ of a cusped hyperbolic manifold (i.e., two manifolds are isometric if and only
105
+ if they have the same isometry signature)::
106
+
107
+ sage: M = Manifold("m412")
108
+ sage: M.isometry_signature(verified = True)
109
+ 'mvvLALQQQhfghjjlilkjklaaaaaffffffff'
110
+
111
+ The isometry signature can be strengthened to include the peripheral curves
112
+ such that it is a complete invariant of a hyperbolic link::
113
+
114
+ sage: M = Manifold("L5a1")
115
+ sage: M.isometry_signature(of_link = True, verified = True)
116
+ 'eLPkbdcddhgggb_baCbbaCb'
117
+
118
+ See :meth:`~snappy.Manifold.isometry_signature` for details.
119
+
120
+ **Remark:** The isometry signature is based on the canonical
121
+ retriangulation so the same warning applies.
122
+
123
+ * The maximal cusp area matrix which characterizes the configuration
124
+ space of disjoint cusp neighborhoods with
125
+ :meth:`~snappy.Manifold.cusp_area_matrix`::
126
+
127
+ sage: M=Manifold("m203")
128
+ sage: M.cusp_area_matrix(method='maximal', verified=True)
129
+ [ 27.000000? 9.0000000000?]
130
+ [9.0000000000? 27.0000000?]
131
+
132
+ In this example, the cusp neighborhood about cusp 0 or 1 is only
133
+ embedded if and only if its area is less than sqrt(27). The cusp
134
+ neighborhood about cusp 0 is only disjoint from the one about cusp 1
135
+ if and only if the product of their areas is less than 9.
136
+
137
+ * Compute areas for disjoint cusp neighborhoods with
138
+ :meth:`~snappy.Manifold.cusp_areas`::
139
+
140
+ sage: M=Manifold("m203")
141
+ sage: M.cusp_areas(policy = 'unbiased', method='maximal', verified = True)
142
+ [3.00000000000?, 3.00000000000?]
143
+
144
+ With the above parameters, the result is intrinsic to the hyperbolic
145
+ manifold with labeled cusped.
146
+
147
+ * Find all slopes of length less or equal to 6 when measured on the boundary
148
+ of disjoint cusp neighborhoods::
149
+
150
+ sage: M=Manifold("m203")
151
+ sage: M.short_slopes(policy = 'unbiased', method='maximal', verified = True)
152
+ [[(1, 0), ..., (1, 2)], [(1, 0), ..., (1, 2)]]
153
+
154
+ First block has all short slopes for first cusp, ..., see
155
+ :meth:`~snappy.Manifold.short_slopes` for details.
156
+
157
+ By `Agol's <http://arxiv.org/abs/math/9906183>`_ and `Lackenby's
158
+ <http://arxiv.org/abs/math/9808120>`_ 6-Theorem any Dehn-filling
159
+ resulting in a non-hyperbolic manifold must contain one of the above
160
+ slopes. Thus, :meth:`~snappy.Manifold.short_slopes` can be used
161
+ to implement the techniques to find exceptional Dehn surgeries
162
+ (`arXiv:1109.0903 <https://arxiv.org/abs/1109.0903>`_ and
163
+ `arXiv:1310.3472 <https://arxiv.org/abs/1310.3472>`_).
164
+
165
+ * An example of finding all geodesics up to length 1::
166
+
167
+ sage: from sage.all import RIF
168
+ sage: L = RIF(1)
169
+ sage: M = Manifold("m003")
170
+ sage: spec = M.length_spectrum_alt_gen(verified=True)
171
+ sage: n = 0
172
+ sage: for g in spec:
173
+ ... if g.length.real() > L:
174
+ ... break # Done! All subsequent geodesics will be longer.
175
+ ... if g.length.real() < L:
176
+ ... n += 1
177
+ ... continue
178
+ ... raise Exception("Interval too large. Increase precision.")
179
+ sage: n
180
+ 4
181
+
182
+ Additionally, we can compute complex intervals for the shapes that are
183
+ guaranteed to contain a true solution to the rectangular gluing equations
184
+ that is not necessarily a geometric solution (specify :attr:`bits_prec`
185
+ or :attr:`dec_prec` for higher precision intervals.)::
186
+
187
+ sage: M = Manifold("m015(3,1)")
188
+ sage: M.tetrahedra_shapes('rect', intervals=True)
189
+ [0.625222762246? + 3.177940133813?*I,
190
+ -0.0075523593782? + 0.5131157955971?*I,
191
+ 0.6515818912107? - 0.1955023488930?*I]
192
+
193
+ This is all based on a reimplementation of `HIKMOT
194
+ <http://www.oishi.info.waseda.ac.jp/~takayasu/hikmot/>`_ which
195
+ pioneered the use of interval methods for hyperbolic manifolds (also see
196
+ `Zgliczynski's notes <http://ww2.ii.uj.edu.pl/~zgliczyn/cap07/krawczyk.pdf>`_). It
197
+ can be used in a way very similar to HIKMOT, but uses Sage's complex
198
+ interval types for certification. It furthermore makes use of code by
199
+ `Dunfield, Hoffman, Licata <http://arxiv.org/abs/1407.7827/>`_.
200
+
201
+ This verification code was contributed by Matthias Goerner.
202
+
203
+
204
+ Verified computation topics
205
+ ---------------------------
206
+
207
+ .. toctree::
208
+ :maxdepth: 1
209
+
210
+ verify_internals
@@ -0,0 +1,79 @@
1
+ Internals of verified computations
2
+ ==================================
3
+
4
+
5
+
6
+ Naming
7
+ ------
8
+
9
+ The names of methods containing ``check`` will raise an exception if
10
+ the desired property cannot be certified. There are different types of
11
+ Exceptions to indicate how the certification failed. This type can be
12
+ used by other methods to perform some action such as changing the
13
+ triangulation or increasing precision or to give up.
14
+
15
+ The user-facing methods have names starting with ``verify`` or
16
+ ``verified`` and will fail more gracefully returning ``False`` or
17
+ ``None`` in such a case.
18
+
19
+
20
+
21
+ Generating certified shape intervals
22
+ ------------------------------------
23
+
24
+ The recommended way to obtain certified intervals for the shapes is via
25
+ ``manifold.tetrahedra_shapes(intervals=True)`` as :doc:`described
26
+ earlier <verify>`. Here we document the ``KrawczykShapesEngine`` and
27
+ ``IntervalNewtonShapesEngine`` which is implemented internally to
28
+ generate the intervals. It is of interest for those users who want to
29
+ understand the underlying interval math and experiment with the Newton
30
+ interval method or the Krawczyk test. ``CertifiedShapesEngine`` is an
31
+ alias of either ``KrawczykShapesEngine`` or
32
+ ``IntervalNewtonShapesEngine`` to determine the default method used by
33
+ verify.
34
+
35
+ .. automodule:: snappy.verify
36
+ .. autoclass:: CertifiedShapesEngine
37
+ :members:
38
+ :inherited-members:
39
+
40
+ .. autoclass:: IntervalNewtonShapesEngine
41
+ :members:
42
+ :inherited-members:
43
+
44
+ .. autoclass:: KrawczykShapesEngine
45
+ :members:
46
+ :inherited-members:
47
+
48
+
49
+ Verification of hyperbolicity
50
+ -----------------------------
51
+
52
+ Methods containing ``check`` will raise an exception if the desired property
53
+ cannot be certified. Methods containing ``verify`` or ``verified`` will fail
54
+ more gracefully returning ``False`` or ``None`` in such a case.
55
+
56
+ .. autofunction:: snappy.verify.hyperbolicity.check_logarithmic_gluing_equations_and_positively_oriented_tets
57
+
58
+ Verified canonical cell decompositions
59
+ --------------------------------------
60
+
61
+ .. autofunction:: snappy.verify.canonical.interval_checked_canonical_triangulation
62
+ .. autofunction:: snappy.verify.canonical.exactly_checked_canonical_retriangulation
63
+
64
+ Exact computations for cusp cross sections
65
+ ------------------------------------------
66
+
67
+ .. automodule:: snappy.verify.square_extensions
68
+
69
+ .. autofunction:: snappy.verify.square_extensions.find_shapes_as_complex_sqrt_lin_combinations
70
+ .. autoclass:: SqrtLinCombination
71
+ :members:
72
+ .. autoclass:: ComplexSqrtLinCombination
73
+ :members:
74
+
75
+ Exceptions
76
+ ----------
77
+
78
+ .. automodule:: snappy.verify.exceptions
79
+ :members:
Binary file
@@ -0,0 +1,123 @@
1
+ /* Compatability shim for jQuery and underscores.js.
2
+ *
3
+ * Copyright Sphinx contributors
4
+ * Released under the two clause BSD licence
5
+ */
6
+
7
+ /**
8
+ * small helper function to urldecode strings
9
+ *
10
+ * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
11
+ */
12
+ jQuery.urldecode = function(x) {
13
+ if (!x) {
14
+ return x
15
+ }
16
+ return decodeURIComponent(x.replace(/\+/g, ' '));
17
+ };
18
+
19
+ /**
20
+ * small helper function to urlencode strings
21
+ */
22
+ jQuery.urlencode = encodeURIComponent;
23
+
24
+ /**
25
+ * This function returns the parsed url parameters of the
26
+ * current request. Multiple values per key are supported,
27
+ * it will always return arrays of strings for the value parts.
28
+ */
29
+ jQuery.getQueryParameters = function(s) {
30
+ if (typeof s === 'undefined')
31
+ s = document.location.search;
32
+ var parts = s.substr(s.indexOf('?') + 1).split('&');
33
+ var result = {};
34
+ for (var i = 0; i < parts.length; i++) {
35
+ var tmp = parts[i].split('=', 2);
36
+ var key = jQuery.urldecode(tmp[0]);
37
+ var value = jQuery.urldecode(tmp[1]);
38
+ if (key in result)
39
+ result[key].push(value);
40
+ else
41
+ result[key] = [value];
42
+ }
43
+ return result;
44
+ };
45
+
46
+ /**
47
+ * highlight a given string on a jquery object by wrapping it in
48
+ * span elements with the given class name.
49
+ */
50
+ jQuery.fn.highlightText = function(text, className) {
51
+ function highlight(node, addItems) {
52
+ if (node.nodeType === 3) {
53
+ var val = node.nodeValue;
54
+ var pos = val.toLowerCase().indexOf(text);
55
+ if (pos >= 0 &&
56
+ !jQuery(node.parentNode).hasClass(className) &&
57
+ !jQuery(node.parentNode).hasClass("nohighlight")) {
58
+ var span;
59
+ var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
60
+ if (isInSVG) {
61
+ span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
62
+ } else {
63
+ span = document.createElement("span");
64
+ span.className = className;
65
+ }
66
+ span.appendChild(document.createTextNode(val.substr(pos, text.length)));
67
+ node.parentNode.insertBefore(span, node.parentNode.insertBefore(
68
+ document.createTextNode(val.substr(pos + text.length)),
69
+ node.nextSibling));
70
+ node.nodeValue = val.substr(0, pos);
71
+ if (isInSVG) {
72
+ var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
73
+ var bbox = node.parentElement.getBBox();
74
+ rect.x.baseVal.value = bbox.x;
75
+ rect.y.baseVal.value = bbox.y;
76
+ rect.width.baseVal.value = bbox.width;
77
+ rect.height.baseVal.value = bbox.height;
78
+ rect.setAttribute('class', className);
79
+ addItems.push({
80
+ "parent": node.parentNode,
81
+ "target": rect});
82
+ }
83
+ }
84
+ }
85
+ else if (!jQuery(node).is("button, select, textarea")) {
86
+ jQuery.each(node.childNodes, function() {
87
+ highlight(this, addItems);
88
+ });
89
+ }
90
+ }
91
+ var addItems = [];
92
+ var result = this.each(function() {
93
+ highlight(this, addItems);
94
+ });
95
+ for (var i = 0; i < addItems.length; ++i) {
96
+ jQuery(addItems[i].parent).before(addItems[i].target);
97
+ }
98
+ return result;
99
+ };
100
+
101
+ /*
102
+ * backward compatibility for jQuery.browser
103
+ * This will be supported until firefox bug is fixed.
104
+ */
105
+ if (!jQuery.browser) {
106
+ jQuery.uaMatch = function(ua) {
107
+ ua = ua.toLowerCase();
108
+
109
+ var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
110
+ /(webkit)[ \/]([\w.]+)/.exec(ua) ||
111
+ /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
112
+ /(msie) ([\w.]+)/.exec(ua) ||
113
+ ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
114
+ [];
115
+
116
+ return {
117
+ browser: match[ 1 ] || "",
118
+ version: match[ 2 ] || "0"
119
+ };
120
+ };
121
+ jQuery.browser = {};
122
+ jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
123
+ }