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,254 @@
1
+ """
2
+ All final exceptions are deriving from two base classes:
3
+
4
+ - a subclass of VerifyErrorBase to indicate whether a numerical or exact
5
+ verification failed
6
+ - a subclass of EquationType to indicate the type of equation of
7
+ inequality for which the verification failed.
8
+
9
+ Intermediate subclasses (those without __init__) are not supposed to be
10
+ raised.
11
+
12
+ The hierarchy is as follows:
13
+
14
+ - VerifyErrorBase(RuntimeError)
15
+
16
+ - NumericalVerifyError
17
+
18
+ - InequalityNumericalVerifyError
19
+ - LogLiftNumericalVerifyError
20
+
21
+ - ExactVerifyError
22
+
23
+ - IsZeroExactVerifyError
24
+
25
+ - EquationType
26
+
27
+ - EdgeEquationType
28
+
29
+ - EdgeEquationExactVerifyError
30
+ - EdgeEquationLogLiftNumericalVerifyError
31
+ - CuspConsistencyType
32
+
33
+ - CuspEquationType
34
+
35
+ - CuspEquationExactVerifyError
36
+ - CuspEquationLogLiftNumericalVerifyError
37
+
38
+ - TiltType
39
+
40
+ - TiltInequalityNumericalVerifyError
41
+
42
+ - TiltProvenPositiveNumericalVerifyError
43
+ - TiltIsZeroExactVerifyError
44
+ - ShapeType
45
+
46
+ - ShapePositiveImaginaryPartNumericalVerifyError
47
+ """
48
+
49
+
50
+ class VerifyErrorBase(RuntimeError):
51
+ """
52
+ The base for all exceptions related to verification.
53
+ """
54
+
55
+
56
+ class NumericalVerifyError(VerifyErrorBase):
57
+ """
58
+ The base for all exceptions resulting from a failed numerical
59
+ verification of an equality (using some epsilon) or inequality
60
+ (typically by interval arithmetics).
61
+ """
62
+
63
+
64
+ class InequalityNumericalVerifyError(NumericalVerifyError):
65
+ """
66
+ The base for all exceptions resulting from a failed numerical
67
+ verification of an inequality (typically by interval arithmetics).
68
+ """
69
+
70
+
71
+ class LogLiftNumericalVerifyError(NumericalVerifyError):
72
+ """
73
+ To verify a logarithmic gluing equation, the verify module will usually
74
+ first verify the corresponding polynomial gluing equation.
75
+ This means that the logarithmic gluing equation will be fulfilled up
76
+ to a multiple of 2 Pi I.
77
+ It then computes the logarithms and numerically checks that the result
78
+ is close (by some epsilon) to the right value. Because we already know
79
+ that the difference is a multiple of 2 Pi I, checking closeness is enough.
80
+
81
+ This exception is supposed to be raised if the polynomial gluing equations
82
+ have passed but checking the logarithmic equation is epsilon-close has
83
+ failed.
84
+ """
85
+
86
+
87
+ class ExactVerifyError(VerifyErrorBase):
88
+ """
89
+ The base for all exceptions resulting from a failed verification of an
90
+ equation using exact arithmetics.
91
+ """
92
+
93
+
94
+ class IsZeroExactVerifyError(VerifyErrorBase):
95
+ """
96
+ The base for all exceptions resulting from verifying that a desired
97
+ quantity is zero using exact arithmetics.
98
+ """
99
+
100
+
101
+ class EquationType():
102
+ """
103
+ A base class to derive subclasses which indicate what kind of
104
+ equation failed to be verified.
105
+ """
106
+
107
+
108
+ class EdgeEquationType(EquationType):
109
+ """
110
+ A base class indicating that an edge equation could not be verified.
111
+ """
112
+
113
+
114
+ class EdgeEquationExactVerifyError(ExactVerifyError,
115
+ EdgeEquationType):
116
+ """
117
+ Exception for failed verification of a polynomial edge equation
118
+ using exact arithmetics.
119
+ """
120
+
121
+ def __init__(self, value):
122
+ self.value = value
123
+
124
+ def __str__(self):
125
+ return ('Verification of a polynomial edge equation using exact '
126
+ 'arithmetic failed: %r == 1' % self.value)
127
+
128
+
129
+ class EdgeEquationLogLiftNumericalVerifyError(LogLiftNumericalVerifyError,
130
+ EdgeEquationType):
131
+ """
132
+ Exception for failed numerical verification that a logarithmic edge
133
+ equation has error bound by epsilon.
134
+ """
135
+ def __init__(self, value):
136
+ self.value = value
137
+
138
+ def __str__(self):
139
+ return ('Numerical verification that logarthmic edge equation has '
140
+ 'small error failed: %r == 2 Pi I' % self.value)
141
+
142
+
143
+ class CuspConsistencyType(EquationType):
144
+ """
145
+ A base class indicating that verificatin of an equation involving a cusp
146
+ failed.
147
+ """
148
+
149
+
150
+ class CuspEquationType(CuspConsistencyType):
151
+ """
152
+ A base class indicating that a cusp gluing equation (involving the
153
+ shapes) failed.
154
+ """
155
+
156
+
157
+ class CuspEquationExactVerifyError(ExactVerifyError,
158
+ CuspEquationType):
159
+ """
160
+ Exception for failed verification of a polynomial cusp gluing equation
161
+ using exact arithmetics.
162
+ """
163
+
164
+ def __init__(self, value, expected_value):
165
+ self.value = value
166
+
167
+ def __str__(self):
168
+ return ('Verification of a polynomial cusp equation using exact '
169
+ 'arithmetic failed: %r == 1' % self.value)
170
+
171
+
172
+ class CuspEquationLogLiftNumericalVerifyError(LogLiftNumericalVerifyError,
173
+ CuspEquationType):
174
+ """
175
+ Exception for failed numerical verification that a logarithmic cusp
176
+ equation has error bound by epsilon.
177
+ """
178
+ def __init__(self, value, expected_value):
179
+ self.value = value
180
+ self.expected_value = expected_value
181
+
182
+ def __str__(self):
183
+ return ('Numerical verification that logarthmic cusp equation has '
184
+ 'small error failed: '
185
+ '%r == %r' % (self.value, self.expected_value))
186
+
187
+
188
+ class TiltType(EquationType):
189
+ """
190
+ A base class relating to tilts.
191
+ """
192
+
193
+
194
+ class TiltInequalityNumericalVerifyError(InequalityNumericalVerifyError,
195
+ TiltType):
196
+ """
197
+ Numerically verifying that a tilt is negative has failed.
198
+ """
199
+ def __init__(self, value):
200
+ self.value = value
201
+
202
+ def __str__(self):
203
+ return ('Numerical verification that tilt is negative has '
204
+ 'failed: %r < 0' % self.value)
205
+
206
+
207
+ class TiltProvenPositiveNumericalVerifyError(
208
+ TiltInequalityNumericalVerifyError):
209
+ """
210
+ Numerically verifying that a tilt is negative has not only failed, we
211
+ proved that the tilt is positive and thus that this cannot be a
212
+ proto-canonical triangulation.
213
+ """
214
+ def __init__(self, value):
215
+ self.value = value
216
+
217
+ def __str__(self):
218
+ return ('Numerical verification that tilt is negative has '
219
+ 'failed, tilt is actually positive. This is provably '
220
+ 'not the proto-canonical triangulation: %r <= 0' % self.value)
221
+
222
+
223
+ class TiltIsZeroExactVerifyError(IsZeroExactVerifyError,
224
+ TiltType):
225
+ """
226
+ Verifying that a tilt is zero has failed using exact arithmetic.
227
+ """
228
+ def __init__(self, value):
229
+ self.value = value
230
+
231
+ def __str__(self):
232
+ return ('Verification that tilt is zero has failed using exact '
233
+ 'arithmetic: %r == 0' % self.value)
234
+
235
+
236
+ class ShapeType(EquationType):
237
+ """
238
+ Base class for failed verification of legal shapes.
239
+ """
240
+
241
+
242
+ class ShapePositiveImaginaryPartNumericalVerifyError(
243
+ InequalityNumericalVerifyError,
244
+ ShapeType):
245
+ """
246
+ Failed numerical verification of a shape having positive imaginary part.
247
+ """
248
+ def __init__(self, value):
249
+ self.value = value
250
+
251
+ def __str__(self):
252
+ return ('Numerical verification that shape has positive imaginary '
253
+ 'part has failed: Im(%r) > 0' % self.value)
254
+
@@ -0,0 +1,224 @@
1
+ from ..sage_helper import _within_sage, sage_method
2
+ from .. import snap
3
+ from . import exceptions
4
+
5
+ __all__ = [
6
+ 'check_logarithmic_gluing_equations_and_positively_oriented_tets',
7
+ 'verify_hyperbolicity' ]
8
+
9
+ if _within_sage:
10
+ from sage.symbolic.constants import pi
11
+ from ..sage_helper import I
12
+
13
+
14
+ class FalseTuple(tuple):
15
+ def __nonzero__(self):
16
+ return False
17
+
18
+
19
+ class NonIntegralFillingsError(RuntimeError):
20
+ """
21
+ Exception raised when Manifold has non-integral fillings, e.g.,
22
+ for m004(1.1,1).
23
+ """
24
+ def __init__(self, manifold):
25
+ self.manifold = manifold
26
+
27
+ def __str__(self):
28
+ return ('Manifold has non-integral Dehn-filings: %s') % self.manifold
29
+
30
+
31
+ @sage_method
32
+ def check_logarithmic_gluing_equations_and_positively_oriented_tets(
33
+ manifold, shape_intervals):
34
+ """
35
+ Given a SnapPy manifold manifold and complex intervals for the shapes
36
+ shape_intervals that are certified to contain a solution to the
37
+ rectangular gluing equations, verify that the logarithmic gluing equations
38
+ are also fulfilled and that all shapes have positive imaginary part.
39
+ It will raise an exception if the verification fails.
40
+ This is sufficient to prove that the manifold is indeed hyperbolic.
41
+
42
+ Since the given interval are supposed to contain a true solution of
43
+ the rectangular gluing equations, the logarithmic gluing equations
44
+ are known to be fulfilled up to a multiple of 2 pi i. Thus it is enough
45
+ to certify that the absolute error of the logarithmic gluing
46
+ equations is < 0.1. Using interval arithmetic, this function certifies
47
+ this and positivity of the imaginary parts of the shapes::
48
+
49
+ sage: from snappy import Manifold
50
+ sage: M = Manifold("m019")
51
+ sage: check_logarithmic_gluing_equations_and_positively_oriented_tets(
52
+ ... M, M.tetrahedra_shapes('rect', intervals=True))
53
+
54
+
55
+ The SnapPy triangulation of the following hyperbolic manifold contains
56
+ actually negatively oriented tetrahedra::
57
+
58
+ sage: M = Manifold("t02774")
59
+ sage: check_logarithmic_gluing_equations_and_positively_oriented_tets(
60
+ ... M, M.tetrahedra_shapes('rect', intervals=True)) # doctest: +IGNORE_EXCEPTION_DETAIL
61
+ Traceback (most recent call last):
62
+ ...
63
+ ShapePositiveImaginaryPartNumericalVerifyError: Numerical verification that shape has positive imaginary part has failed: Im(0.4800996900657? - 0.0019533695046?*I) > 0
64
+
65
+
66
+ """
67
+
68
+ for d in manifold.cusp_info():
69
+ m, l = d['filling']
70
+ if not (m.is_integer() and l.is_integer()):
71
+ raise NonIntegralFillingsError(manifold)
72
+
73
+ # Check that the shapes have positive imaginary part.
74
+ for shape in shape_intervals:
75
+ if not shape.imag() > 0:
76
+ raise exceptions.ShapePositiveImaginaryPartNumericalVerifyError(
77
+ shape)
78
+
79
+ # Compute the logarithms of z, z', z''
80
+ logZ = [ z.log() for z in shape_intervals ]
81
+ logZp = [ (1 / (1 - z)).log() for z in shape_intervals ]
82
+ logZpp = [ ((z - 1) / z).log() for z in shape_intervals ]
83
+
84
+ # A list
85
+ # log(z_0) log(z'_0) log(z''_0) log(z_1) log(z'_1) log (z''_1) ...
86
+ logs = [ z for triple in zip(logZ, logZp, logZpp) for z in triple ]
87
+
88
+ # Number of tetrahedra and cusps
89
+ n_tet = manifold.num_tetrahedra()
90
+ n_cusps = manifold.num_cusps()
91
+
92
+ # The gluing equations in logarithmic form
93
+ equations = manifold.gluing_equations()
94
+
95
+ # Compute the LHS of the gluing equations
96
+ # a_0 * log(z_0) + b_0 * log(z'_0) + c_0 * log(z''_0) + ...
97
+ # Also, see manifold.gluing_equations
98
+ LHSs = [
99
+ sum([l * expo for l, expo in zip(logs, equation)])
100
+ for equation in equations ]
101
+
102
+ # Get the ComplexIntervalField of the shape intervals
103
+ CIF = shape_intervals[0].parent()
104
+ RIF = CIF.real_field()
105
+ # 2 pi i in that field
106
+ two_pi_i = CIF(2 * pi * I)
107
+
108
+ # Index of the next gluing equation to check
109
+ LHS_index = 0
110
+
111
+ # The first n_tet gluing equations are edge equations
112
+ for edge_index in range(n_tet):
113
+ # An edge equation should sum up to 2 pi i
114
+ if not abs(LHSs[LHS_index] - two_pi_i) < RIF(0.1):
115
+ raise exceptions.EdgeEquationLogLiftNumericalVerifyError(
116
+ LHSs[LHS_index])
117
+ LHS_index += 1
118
+
119
+ # Then there are one, respectively, two equations per cusp
120
+ for cusp_index in range(n_cusps):
121
+
122
+ # For a complete cusp, we have two equations (meridian
123
+ # and longitude), for both of them the log's add up to 0
124
+
125
+ # For a filled cusp, we have only one equation (for the
126
+ # curve we fill), the log's add up to 2 pi i.
127
+ num_LHSs, value = (
128
+ (2, 0) if manifold.cusp_info(cusp_index)['complete?'] else
129
+ (1, two_pi_i))
130
+
131
+ # Check the one or two equations
132
+ for j in range(num_LHSs):
133
+ if not abs(LHSs[LHS_index] - value) < RIF(0.1):
134
+ raise exceptions.CuspEquationLogLiftNumericalVerifyError(
135
+ LHSs[LHS_index], value)
136
+ # Advance to the next gluing equation
137
+ LHS_index += 1
138
+
139
+
140
+ @sage_method
141
+ def verify_hyperbolicity(manifold, verbose=False, bits_prec=None,
142
+ holonomy=False, fundamental_group_args=[], lift_to_SL=True):
143
+ """
144
+ Given an orientable SnapPy Manifold, verifies its hyperbolicity.
145
+
146
+ Similar to HIKMOT's :py:meth:`verify_hyperbolicity`, the result is either
147
+ ``(True, listOfShapeIntervals)`` or ``(False, [])`` if verification failed.
148
+ ``listOfShapesIntervals`` is a list of complex intervals (elements in
149
+ sage's ``ComplexIntervalField``) certified to contain the true shapes
150
+ for the hyperbolic manifold.
151
+
152
+ Higher precision intervals can be obtained by setting ``bits_prec``::
153
+
154
+ sage: from snappy import Manifold
155
+ sage: M = Manifold("m019")
156
+ sage: M.verify_hyperbolicity() # doctest: +NUMERIC12
157
+ (True, [0.780552527850? + 0.914473662967?*I, 0.780552527850? + 0.91447366296773?*I, 0.4600211755737? + 0.6326241936052?*I])
158
+
159
+ sage: M = Manifold("t02333(3,4)")
160
+ sage: M.verify_hyperbolicity() # doctest: +NUMERIC9
161
+ (True, [2.152188153612? + 0.284940667895?*I, 1.92308491369? + 1.10360701507?*I, 0.014388591584? + 0.143084469681?*I, -2.5493670288? + 3.7453498408?*I, 0.142120333822? + 0.176540027036?*I, 0.504866865874? + 0.82829881681?*I, 0.50479249917? + 0.98036162786?*I, -0.589495705074? + 0.81267480427?*I])
162
+
163
+ One can instead get a holonomy representation associated to the
164
+ verified hyperbolic structure. This representation takes values
165
+ in 2x2 matrices with entries in the ``ComplexIntervalField``::
166
+
167
+ sage: M = Manifold("m004(1,2)")
168
+ sage: success, rho = M.verify_hyperbolicity(holonomy=True)
169
+ sage: success
170
+ True
171
+ sage: trace = rho('aaB').trace(); trace # doctest: +NUMERIC9
172
+ -0.1118628555? + 3.8536121048?*I
173
+ sage: (trace - 2).contains_zero()
174
+ False
175
+ sage: (rho('aBAbaabAB').trace() - 2).contains_zero()
176
+ True
177
+
178
+ Here, there is **provably** a fixed holonomy representation rho0
179
+ from the fundamental group G of M to SL(2, C) so that for each
180
+ element g of G the matrix rho0(g) is contained in rho(g). In
181
+ particular, the above constitutes a proof that the word 'aaB' is
182
+ non-trivial in G. In contrast, the final computation is
183
+ consistent with 'aBAbaabAB' being trivial in G, but *does not prove
184
+ this*.
185
+
186
+ A non-hyperbolic manifold (``False`` indicates that the manifold
187
+ might not be hyperbolic but does **not** certify
188
+ non-hyperbolicity. Sometimes, hyperbolicity can only be verified
189
+ after increasing the precision)::
190
+
191
+ sage: M = Manifold("4_1(1,0)")
192
+ sage: M.verify_hyperbolicity()
193
+ (False, [])
194
+
195
+ Under the hood, the function will call the ``CertifiedShapesEngine`` to produce
196
+ intervals certified to contain a solution to the rectangular gluing equations.
197
+ It then calls ``check_logarithmic_gluing_equations_and_positively_oriented_tets``
198
+ to verify that the logarithmic gluing equations are fulfilled and that all
199
+ tetrahedra are positively oriented.
200
+ """
201
+
202
+ try:
203
+ shape_intervals = manifold.tetrahedra_shapes(
204
+ 'rect', bits_prec=bits_prec, intervals=True)
205
+ except (ValueError, RuntimeError):
206
+ if verbose:
207
+ print("Could not certify solution to rectangular gluing equations")
208
+ return FalseTuple((False, []))
209
+
210
+ try:
211
+ check_logarithmic_gluing_equations_and_positively_oriented_tets(
212
+ manifold, shape_intervals)
213
+ except exceptions.NumericalVerifyError as e:
214
+ if verbose:
215
+ print(e)
216
+ return FalseTuple((False, []))
217
+
218
+ if holonomy:
219
+ hol_rep = snap.interval_reps.holonomy_from_shape_intervals(
220
+ manifold, shape_intervals, fundamental_group_args, lift_to_SL)
221
+ hol_rep.shapes = shape_intervals
222
+ return True, hol_rep
223
+ else:
224
+ return True, shape_intervals