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,122 @@
1
+ from snappy.snap import t3mlite as t3m
2
+
3
+ from truncatedComplex import *
4
+
5
+ class OneVertexTruncatedComplex(TruncatedComplex):
6
+
7
+ def __init__(self, hyperbolic_structure):
8
+ super().__init__(
9
+ hyperbolic_structure.mcomplex)
10
+
11
+ self.hyperbolic_structure = hyperbolic_structure
12
+
13
+ if len(hyperbolic_structure.mcomplex.Vertices) != 1:
14
+ raise Exception("Expected one vertex triangulation")
15
+
16
+ self._compute_shortest_paths()
17
+ self._compute_loops()
18
+ self._check_consistency()
19
+ self._compute_matrices_for_loops()
20
+ self._compute_fixed_pts()
21
+
22
+ def _compute_shortest_paths(self):
23
+
24
+ base_tet_and_perm = (0, t3m.Perm4([0,1,2,3]))
25
+
26
+ self.tet_and_perm_to_edge = {
27
+ self.get_key(base_tet_and_perm) : None
28
+ }
29
+
30
+ pending = [ base_tet_and_perm ]
31
+
32
+ self.alpha_edges = [ None for edge in self.mcomplex.Edges ]
33
+
34
+ while pending:
35
+ tet_and_perm = pending.pop()
36
+
37
+ edge_index, edge_end = (
38
+ self.get_edge_index_and_end_from_tet_and_perm(
39
+ tet_and_perm))
40
+
41
+ if edge_end == 0 and self.alpha_edges[edge_index] is None:
42
+ self.alpha_edges[edge_index] = TruncatedComplex.Edge(
43
+ 'alpha', tet_and_perm)
44
+
45
+ for edge in self.get_edges_for_tet_and_perm(tet_and_perm):
46
+
47
+ if edge.subcomplex_type != 'alpha':
48
+
49
+ tet_and_perm_of_end = edge.tet_and_perm_of_end()
50
+
51
+ key = self.get_key(tet_and_perm_of_end)
52
+
53
+ if key not in self.tet_and_perm_to_edge:
54
+ self.tet_and_perm_to_edge[key] = edge
55
+ pending.append(tet_and_perm_of_end)
56
+
57
+ def _compute_shortest_path(self, tet_and_perm):
58
+
59
+ result = []
60
+
61
+ while True:
62
+ key = self.get_key(tet_and_perm)
63
+
64
+ edge = self.tet_and_perm_to_edge[key]
65
+ if edge is None:
66
+ return result[::-1]
67
+
68
+ result.append(edge)
69
+ tet_and_perm = edge.tet_and_perm
70
+
71
+ @staticmethod
72
+ def _reverse_path(path):
73
+ return [ edge.reverse() for edge in path[::-1] ]
74
+
75
+ def _compute_loop(self, alpha_edge):
76
+
77
+ s = alpha_edge.tet_and_perm
78
+ path_to_s = self._compute_shortest_path(s)
79
+
80
+ e = alpha_edge.tet_and_perm_of_end()
81
+ path_to_e = self._compute_shortest_path(e)
82
+ path_from_e = OneVertexTruncatedComplex._reverse_path(path_to_e)
83
+
84
+ return path_to_s + [ alpha_edge ] + path_from_e
85
+
86
+ def _compute_loops(self):
87
+ self.loops = [ self._compute_loop(alpha_edge)
88
+ for alpha_edge in self.alpha_edges ]
89
+
90
+ def _check_consistency(self):
91
+
92
+ for loop in self.loops:
93
+ self.check_loop(loop)
94
+
95
+ def _compute_matrices_for_loops(self):
96
+ def _to_psl(m):
97
+ return m / m.determinant().sqrt()
98
+
99
+ self.matrix_for_loops = [
100
+ _to_psl(self.hyperbolic_structure.pgl2_matrix_for_path(loop))
101
+ for loop in self.loops ]
102
+
103
+ def _compute_fixed_pts(self):
104
+ self.fixed_pts_for_loops = [
105
+ _fixed_points(m) for m in self.matrix_for_loops ]
106
+
107
+ def _fixed_points(m):
108
+ # (a * z + b) = z * (c * z + d)
109
+ # z^2 + (d - a) / c * z - b / c = 0
110
+
111
+ # p' = (a - d) / 2 * c
112
+ # q = - b / c
113
+
114
+ # p' +/- sqrt( p'^2 - q ) = -p' +/- sqrt(p'^2 + b / c)
115
+
116
+ cinv = 1 / m[1, 0]
117
+
118
+ p = (m[0,0] - m[1,1]) * cinv / 2
119
+ d = p ** 2 + m[0,1] * cinv
120
+
121
+ s = d.sqrt()
122
+ return [p - s, p + s]
@@ -0,0 +1 @@
1
+ # Directory to find orb binary
@@ -0,0 +1,47 @@
1
+ from .hyperbolicStructure import HyperbolicStructure
2
+
3
+ from .verificationError import *
4
+
5
+ from sage.all import vector, RealDoubleField, sqrt
6
+
7
+ __all__ = ['compute_approx_hyperbolic_structure_from_vertex_gram_matrix_file']
8
+
9
+ def normalize_gram_matrix(m):
10
+ for i in range(4):
11
+ if not (m[i][i] < 0):
12
+ raise OrbVertexGramMatrixError(
13
+ "Non-negative entry in vertex gram matrix")
14
+
15
+ return [[ -1 if i == j else m[i][j] / sqrt(m[i][i] * m[j][j])
16
+ for j in range(4) ] for i in range(4) ]
17
+
18
+ def normalize_gram_matrices(ms):
19
+ return [ normalize_gram_matrix(m) for m in ms ]
20
+
21
+ def edge_parameter_from_normalized_gram_matrices(edge, gram_matrices):
22
+ corner = edge.Corners[0]
23
+
24
+ s = corner.Subsimplex
25
+ i, j = [ k for k in range(4) if s & (1 << k) ]
26
+ return gram_matrices[corner.Tetrahedron.Index][i][j]
27
+
28
+ def edge_parameters_from_normalized_gram_matrices(mcomplex, gram_matrices):
29
+ return [ edge_parameter_from_normalized_gram_matrices(e, gram_matrices)
30
+ for e in mcomplex.Edges ]
31
+
32
+ def edge_parameters_from_gram_matrices(mcomplex, gram_matrices):
33
+ return vector(
34
+ RealDoubleField(),
35
+ edge_parameters_from_normalized_gram_matrices(
36
+ mcomplex,
37
+ normalize_gram_matrices(gram_matrices)))
38
+
39
+ def edge_parameters_from_vertex_gram_matrix_file(mcomplex, filename):
40
+ return edge_parameters_from_gram_matrices(
41
+ mcomplex, eval(open(filename).read()))
42
+
43
+ def compute_approx_hyperbolic_structure_from_vertex_gram_matrix_file(
44
+ mcomplex, filename):
45
+ return HyperbolicStructure(
46
+ mcomplex,
47
+ edge_parameters_from_vertex_gram_matrix_file(mcomplex, filename))
@@ -0,0 +1,61 @@
1
+ from .hyperbolicStructure import *
2
+ from .verificationError import *
3
+
4
+ from sage.all import RealField, vector
5
+
6
+ __all__ = ['polish_approx_hyperbolic_structure']
7
+
8
+ def polish_approx_hyperbolic_structure(
9
+ approx_hyperbolic_structure, bits_prec = 53,
10
+ verbose = False):
11
+
12
+ RF = RealField(bits_prec + 20)
13
+
14
+ twoPi = 2 * RF.pi()
15
+
16
+ edge_parameters = vector(RF, approx_hyperbolic_structure.edge_lengths)
17
+
18
+ epsilon = RF(0.5) ** bits_prec
19
+
20
+ if not (approx_hyperbolic_structure.exact_edges and
21
+ approx_hyperbolic_structure.var_edges):
22
+ raise Exception("Did not pick exact/var edges")
23
+
24
+ for i in range(100):
25
+ try:
26
+ result = HyperbolicStructure(
27
+ approx_hyperbolic_structure.mcomplex,
28
+ edge_parameters,
29
+ approx_hyperbolic_structure.exact_edges,
30
+ approx_hyperbolic_structure.var_edges)
31
+ except BadDihedralAngleError as e:
32
+ raise PolishingFailedWithBadDihedralAngleError("When polishing", e)
33
+
34
+
35
+ errs = vector(
36
+ [result.angle_sums[e] - twoPi for e in result.exact_edges])
37
+
38
+ max_err = max([abs(err) for err in errs])
39
+
40
+ if verbose:
41
+ print("Iteration %d: error = %s" % (i, RealField(53)(max_err)))
42
+
43
+ if max_err < epsilon:
44
+ return result
45
+
46
+ j = result.full_rank_jacobian_submatrix()
47
+ try:
48
+ jinv = j.inverse()
49
+ except ZeroDivisionError:
50
+ raise PolishingError("Singular matrix")
51
+
52
+ delta = jinv * errs
53
+
54
+ for e, d in zip(result.var_edges, delta):
55
+ edge_parameters[e] -= d
56
+
57
+ print("Max error", max_err)
58
+ print(approx_hyperbolic_structure.full_rank_jacobian_submatrix().SVD()[1].diagonal())
59
+
60
+ raise PolishingError("Newton method did not produce a result")
61
+
@@ -0,0 +1,54 @@
1
+ import branchedDoubleCover
2
+ import veriClosed
3
+ from veriClosed import *
4
+ from veriClosed.verifyHyperbolicStructureEngine import *
5
+ from veriClosed.testing.cocycleTester import *
6
+
7
+ from veriClosed.testing import __path__ as testPaths
8
+ testPath = testPaths[0]
9
+
10
+ from snappy import Triangulation
11
+ from snappy.sage_helper import doctest_modules
12
+
13
+ import os
14
+ import sys
15
+
16
+ def testCocycles(isoSig):
17
+ """
18
+ Testing.
19
+
20
+ >>> testCocycles("kLLLvQQkccfgighjijjlnannwnashp")
21
+ True
22
+ >>> testCocycles("qLLvLAzMAQAkcdjifjhlnkmlnnopphsksskcimafjwovqw")
23
+ True
24
+
25
+ """
26
+
27
+
28
+ T = Triangulation(isoSig, remove_finite_vertices = False)
29
+ hyperbolic_structure = compute_verified_hyperbolic_structure(T, source = 'new', bits_prec = 106)
30
+ engine = VerifyHyperbolicStructureEngine(hyperbolic_structure)
31
+ tester = CocycleTester(engine)
32
+ tester.test()
33
+
34
+ return True
35
+
36
+ def testVerifyFromVertexGramMatrixFile():
37
+ """
38
+ Testing.
39
+
40
+ >>> f = os.path.join(testPath, "m004_1_2.tri")
41
+ >>> T = Triangulation(f, remove_finite_vertices = False)
42
+ >>> bool(compute_verified_hyperbolic_structure(T, source = f + '.vgm'))
43
+ True
44
+ """
45
+
46
+ def _doctest():
47
+ doctest_modules(
48
+ [ sys.modules[__name__],
49
+ veriClosed.computeVerifiedHyperbolicStructure,
50
+ branchedDoubleCover])
51
+
52
+ if __name__ == '__main__':
53
+ _doctest()
54
+
@@ -0,0 +1,176 @@
1
+ from snappy.snap import t3mlite as t3m
2
+
3
+ __all__ = ['TruncatedComplex']
4
+
5
+
6
+ class TruncatedComplex():
7
+
8
+ class SubcomplexBase():
9
+ def __init__(self, subcomplex_type, tet_and_perm):
10
+ self.subcomplex_type = subcomplex_type
11
+ self.tet_and_perm = tet_and_perm
12
+
13
+ class Edge(SubcomplexBase):
14
+ """
15
+ tet_and_perm is a pair (index of tet, perm) parametrizing a vertex in
16
+ the truncated complex. This vertex is where the directed edge starts.
17
+
18
+ """
19
+
20
+ def tet_and_perm_of_end(self):
21
+ """
22
+ Get the pair (index of tet, perm) parametrizing the vertex of the
23
+ truncated complex where the directed edge ends.
24
+ """
25
+
26
+ tet_index, p = self.tet_and_perm
27
+ if self.subcomplex_type == 'alpha':
28
+ return (tet_index, p * t3m.Perm4([1,0,2,3]))
29
+ if self.subcomplex_type == 'beta':
30
+ return (tet_index, p * t3m.Perm4([0,2,1,3]))
31
+ if self.subcomplex_type == 'gamma':
32
+ return (tet_index, p * t3m.Perm4([0,1,3,2]))
33
+
34
+ raise Exception("Unknown subcomplex_type for Edge")
35
+
36
+ def reverse(self):
37
+ """
38
+ Reverse the direction of the edge.
39
+ """
40
+
41
+ return TruncatedComplex.Edge(
42
+ self.subcomplex_type, self.tet_and_perm_of_end())
43
+
44
+ def __repr__(self):
45
+ return 'TruncatedComplex.Edge(%r, %r)' % (
46
+ self.subcomplex_type, self.tet_and_perm)
47
+
48
+ class EdgeLoop(SubcomplexBase):
49
+ def __init__(self, tet_and_perm, edge_index):
50
+ super(TruncatedComplex.EdgeLoop, self).__init__('edgeLoop', tet_and_perm)
51
+ self.edge_index = edge_index
52
+
53
+ def tet_and_perm_of_end(self):
54
+ return self.tet_and_perm
55
+
56
+ def __repr__(self):
57
+ return 'TruncatedComplex.EdgeLoop(%r, %d)' % (
58
+ self.tet_and_perm, self.edge_index)
59
+
60
+ def __init__(self, mcomplex):
61
+ self.mcomplex = mcomplex
62
+
63
+ # maps to tet and perm to 0 or 1 to indicate the end of the edge
64
+ self.tet_and_perm_to_end_of_edge = {
65
+ (tet.Index, p2.tuple()) : end
66
+ for i, edge in enumerate(mcomplex.Edges)
67
+ for tet, perm in edge.embeddings()
68
+ for end, p in [ (0, perm), (1, perm * t3m.Perm4([1,0,2,3])) ]
69
+ for p2 in [ p, p * t3m.Perm4([0,1,3,2]) ] }
70
+
71
+ def get_glued_tet_and_perm(self, tet_and_perm):
72
+ """
73
+ The face pairings of the tetrahedra make it such that two
74
+ pairs (index of tet, perm) parametrize the same vertex in the
75
+ truncated complex. Given a pair, return the other pair.
76
+ """
77
+
78
+ tet_index, p = tet_and_perm
79
+
80
+ face = p.image(t3m.F3)
81
+ tet = self.mcomplex.Tetrahedra[tet_index]
82
+
83
+ return (tet.Neighbor[face].Index, tet.Gluing[face] * p)
84
+
85
+ def get_key(self, tet_and_perm):
86
+ """
87
+ Recall that there are two pairs (index of tet, perm) corresponding
88
+ to the same vertex in the truncated complex. Pick the lexicographically
89
+ smallest (when converting perm to a tuple so that it is hashable).
90
+ This can be used as key in a dictionary mapping vertices of the
91
+ truncated complex to something.
92
+ """
93
+
94
+ def to_tuple(tet_and_perm):
95
+ tet, perm = tet_and_perm
96
+ return (tet, perm.tuple())
97
+
98
+ return min(to_tuple(tet_and_perm),
99
+ to_tuple(self.get_glued_tet_and_perm(tet_and_perm)))
100
+
101
+ def get_edges_for_tet_and_perm(self, tet_and_perm):
102
+ """
103
+ Given a vertex in the truncated complex parametrized by
104
+ (index of tet, perm), return all four edges starting at that
105
+ vertex.
106
+ """
107
+
108
+ other_tet_and_perm = self.get_glued_tet_and_perm(tet_and_perm)
109
+
110
+ return [
111
+ TruncatedComplex.Edge('alpha', tet_and_perm),
112
+ TruncatedComplex.Edge('beta', tet_and_perm),
113
+ TruncatedComplex.Edge('gamma', tet_and_perm),
114
+ TruncatedComplex.Edge('gamma', other_tet_and_perm) ]
115
+
116
+
117
+ @staticmethod
118
+ def get_edges_of_small_hexagon(tet_and_perm):
119
+ tet_index, p = tet_and_perm
120
+ return [
121
+ TruncatedComplex.Edge('beta', tet_and_perm),
122
+ TruncatedComplex.Edge('gamma', (tet_index, p * t3m.Perm4([0,2,1,3]))),
123
+ TruncatedComplex.Edge('beta', (tet_index, p * t3m.Perm4([0,2,3,1]))),
124
+ TruncatedComplex.Edge('gamma', (tet_index, p * t3m.Perm4([0,3,2,1]))),
125
+ TruncatedComplex.Edge('beta' , (tet_index, p * t3m.Perm4([0,3,1,2]))),
126
+ TruncatedComplex.Edge('gamma', (tet_index, p * t3m.Perm4([0,1,3,2]))) ]
127
+
128
+ @staticmethod
129
+ def get_edges_of_rectangle(tet_and_perm):
130
+ tet_index, p = tet_and_perm
131
+ return [
132
+ TruncatedComplex.Edge('gamma', tet_and_perm),
133
+ TruncatedComplex.Edge('alpha', (tet_index, p * t3m.Perm4([0,1,3,2]))),
134
+ TruncatedComplex.Edge('gamma', (tet_index, p * t3m.Perm4([1,0,3,2]))),
135
+ TruncatedComplex.Edge('alpha', (tet_index, p * t3m.Perm4([1,0,2,3]))) ]
136
+
137
+ @staticmethod
138
+ def get_edges_of_big_hexagon(tet_and_perm):
139
+ tet_index, p = tet_and_perm
140
+ return [
141
+ TruncatedComplex.Edge('beta', tet_and_perm),
142
+ TruncatedComplex.Edge('alpha', (tet_index, p * t3m.Perm4([0,2,1,3]))),
143
+ TruncatedComplex.Edge('beta', (tet_index, p * t3m.Perm4([2,0,1,3]))),
144
+ TruncatedComplex.Edge('alpha', (tet_index, p * t3m.Perm4([2,1,0,3]))),
145
+ TruncatedComplex.Edge('beta', (tet_index, p * t3m.Perm4([1,2,0,3]))),
146
+ TruncatedComplex.Edge('alpha', (tet_index, p * t3m.Perm4([1,0,2,3])))]
147
+
148
+ @staticmethod
149
+ def get_tet_and_odd_perms_for_vertex(vertex):
150
+ for corner in vertex.Corners:
151
+ for perm in t3m.Perm4.A4():
152
+ p = perm * t3m.Perm4([0,1,3,2])
153
+ if p.image(t3m.V0) == corner.Subsimplex:
154
+ yield corner.Tetrahedron.Index, p
155
+
156
+ @staticmethod
157
+ def get_first_tet_and_odd_perm_for_vertex(vertex):
158
+ for tet_and_perm in TruncatedComplex.get_tet_and_odd_perms_for_vertex(
159
+ vertex):
160
+ return tet_and_perm
161
+
162
+ def get_edge_index_and_end_from_tet_and_perm(self, tet_and_perm):
163
+ tet_index, p = tet_and_perm
164
+ tet = self.mcomplex.Tetrahedra[tet_index]
165
+ return (
166
+ tet.Class[p.image(t3m.E01)].Index,
167
+ self.tet_and_perm_to_end_of_edge[(tet_index, p.tuple())])
168
+
169
+ def check_loop(self, loop):
170
+ l = len(loop)
171
+ for i in range(l):
172
+ s = loop[ i ].tet_and_perm_of_end()
173
+ e = loop[(i+1) % l].tet_and_perm
174
+
175
+ if self.get_key(s) != self.get_key(e):
176
+ raise Exception("Failed to be a loop at %d: %r" % (i, loop))
@@ -0,0 +1,58 @@
1
+ class VerificationError(RuntimeError):
2
+ pass
3
+
4
+ class BadVertexGramMatrixError(VerificationError):
5
+ '''
6
+ Failed to verify that vertex gram matrix is realized by a finite tetrahedron.
7
+ '''
8
+ pass
9
+
10
+ class AngleSumIntervalNotContainingTwoPiError(VerificationError):
11
+ '''
12
+ The interval for the sum of the dihedral angles adjacent to an edge is
13
+ 2 * pi.
14
+ '''
15
+ pass
16
+
17
+ class GimbalDerivativeNotInvertibleError(VerificationError):
18
+ pass
19
+
20
+ class VertexHasNoApproxEdgeError(VerificationError):
21
+ pass
22
+
23
+ class NewtonMethodError(VerificationError):
24
+ pass
25
+
26
+ class NewtonStepError(NewtonMethodError):
27
+ pass
28
+
29
+ class NewtonMethodConvergenceError(NewtonMethodError):
30
+ pass
31
+
32
+ class BadDihedralAngleError(VerificationError):
33
+ pass
34
+
35
+ class KrawczykFailedToFinishError(VerificationError):
36
+ pass
37
+
38
+ class KrawczykFailedWithBadDihedralAngleError(VerificationError):
39
+ pass
40
+
41
+ class OrbSolutionTypeError(VerificationError):
42
+ pass
43
+
44
+ class UnknownOrbFailureError(VerificationError):
45
+ pass
46
+
47
+ class OrbMissingError(VerificationError):
48
+ pass
49
+
50
+ class OrbVertexGramMatrixError(VerificationError):
51
+ pass
52
+
53
+ class PolishingError(VerificationError):
54
+ pass
55
+
56
+ class PolishingFailedWithBadDihedralAngleError(VerificationError):
57
+ pass
58
+