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,172 @@
1
+ # $Id: edge.py,v 1.3 2002/09/20 03:52:16 culler Exp $
2
+ # t3m - software for studying triangulated 3-manifolds
3
+ # Copyright (C) 2002 Marc Culler, Nathan Dunfield and others
4
+ #
5
+ # This program is distributed under the terms of the
6
+ # GNU General Public License, version 2 or later, as published by
7
+ # the Free Software Foundation. See the file GPL.txt for details.
8
+
9
+ from .simplex import *
10
+ from .corner import Corner
11
+ from .arrow import Arrow
12
+ from .perm4 import Perm4
13
+ import sys
14
+
15
+ # A table used for _add_corner, equivalent to:
16
+ # other_arrow = arrow.copy().opposite()
17
+ # tail, head = other_arrow.tail(), other_arrow.head()
18
+
19
+ _edge_add_corner_dict = {}
20
+ for edge, face in EdgeFacePairs:
21
+ other_arrow = Arrow(edge, face, None).opposite()
22
+ _edge_add_corner_dict[edge, face] = other_arrow.tail(), other_arrow.head()
23
+
24
+
25
+ # An edge has an initial and terminal vertex, but these are determined
26
+ # arbitrarily when the 1-skeleton is constructed.
27
+
28
+ class Edge:
29
+
30
+ def __init__(self):
31
+ self.Index = -1
32
+ self.Name = ''
33
+ self.IntOrBdry = '' # value: '', 'int' or 'bdry'
34
+ self.Corners = [] # Corners of type "1-simplex in Tetrahedron"
35
+ self.Vertices = [] # pairs: (initial Vertex, terminal Vertex)
36
+ self.LeftBdryArrow = None # Arrows representing the two boundary faces,
37
+ self.RightBdryArrow = None # if this is a boundary edge.
38
+ self._edge_orient_cache = {}
39
+
40
+ def __repr__(self):
41
+ if self.Index > -1:
42
+ return ('e' + str(self.Index) + self.Name +
43
+ ' (' + self.IntOrBdry + ')')
44
+ else:
45
+ return '< floating edge' + str(id(self)) + ' >'
46
+
47
+ # below added by NMD for more detailed printing
48
+
49
+ # returns an arrow rotating around self
50
+
51
+ def get_arrow(self):
52
+ e = self.Corners[0].Subsimplex
53
+ return Arrow(e, RightFace[e], self.Corners[0].Tetrahedron)
54
+
55
+ def info(self, out=sys.stdout):
56
+ out.write(repr(self) + "\t Edge of valence %d\tEndpoints %s\n"
57
+ % (self.valence(), self.Vertices))
58
+ if self.IntOrBdry == 'bdry':
59
+ a = self.LeftBdryArrow.copy()
60
+ a.reverse()
61
+ else:
62
+ a = self.get_arrow()
63
+ s = "\t"
64
+ for i in range(self.valence()):
65
+ s = s + repr(a) + " "
66
+ a.next()
67
+ if i > 0 and (i + 1) % 3 == 0 and i != (self.valence()-1):
68
+ s = s + "\n\t"
69
+ out.write(s + '\n')
70
+
71
+ def valence(self):
72
+ return len(self.Corners)
73
+
74
+ # Return 1 if all corners belong to distinct tetrahedra.
75
+ def distinct(self):
76
+ for corner in self.Corners:
77
+ corner.Tetrahedron.Checked = 0
78
+ for corner in self.Corners:
79
+ if corner.Tetrahedron.Checked == 1:
80
+ return 0
81
+ else:
82
+ corner.Tetrahedron.Checked = 1
83
+ return 1
84
+
85
+ # Return 1 if two sides of a 2-simplex are identified to the edge.
86
+ def self_adjacent(self):
87
+ for corner in self.Corners:
88
+ for one_subsimplex in AdjacentEdges[corner.Subsimplex]:
89
+ if corner.Tetrahedron.Class[one_subsimplex] is self:
90
+ return 1
91
+ return 0
92
+
93
+ # Return 1 if two opposite edges of a 3-simplex are identified to
94
+ # the edge.
95
+ def self_opposite(self):
96
+ count = 0
97
+ for corner in self.Corners:
98
+ if corner.Tetrahedron.Class[comp(corner.Subsimplex)] == self:
99
+ count = count + 1
100
+ return count/2
101
+
102
+ # Remove all references to self from adjoining Tetrahedra and Vertices
103
+ def erase(self):
104
+ for corner in self.Corners:
105
+ corner.Tetrahedron.Class[corner.Subsimplex] = None
106
+ for vertex in self.Vertices:
107
+ try:
108
+ vertex.Edges.remove(self)
109
+ except:
110
+ pass
111
+ self.Index = -1
112
+
113
+ # Below added 7/6/99 by NMD. Given a tetrahedra and a pair of vertices
114
+ # (a, b) returns the orientation of the edge self with respect to the arrow
115
+ # (a -> b). Returns 1 if the orientations agree and -1 if they differ.
116
+ # raises an exception if the arrow is not on this edge.
117
+
118
+ def orientation_with_respect_to(self, tet, a, b):
119
+ try:
120
+ return self._edge_orient_cache[(tet, a, b)]
121
+ except IndexError:
122
+ raise ValueError("Given corner of tet not on this edge")
123
+
124
+ def index(self):
125
+ return self.Index
126
+
127
+ def _first_embedding(self):
128
+ """
129
+ For this edge, return an edge embedding similar
130
+ to regina, that is a pair (tetrahedron, permutation) such that
131
+ vertex 0 and 1 of the tetrahedron span the edge.
132
+ """
133
+
134
+ corner = self.Corners[0]
135
+ tet = corner.Tetrahedron
136
+
137
+ for perm in Perm4.A4():
138
+ if corner.Subsimplex == perm.image(E01):
139
+ # Match orientation of edge given by Vertices
140
+ if tet.Class[perm.image(V0)] == self.Vertices[0]:
141
+ if tet.Class[perm.image(V1)] == self.Vertices[1]:
142
+ return (tet, perm)
143
+
144
+ def embeddings(self):
145
+ """
146
+ Iterator through the embeddings of this edge.
147
+ An edge embedding is a pair (tetrahedron, permutation) such that
148
+ vertices of the tetrahedron that are labeled by the images of 0 and 1
149
+ under the permutation span the edge. The images of 2 and 3 of the edge
150
+ embeddings are in an orientation compatible way.
151
+ This is similar to the NEdgeEmbeddings of regina.
152
+ """
153
+
154
+ order = len(self.Corners)
155
+ tet, perm = self._first_embedding()
156
+ for i in range(order):
157
+ yield tet, perm
158
+ face = perm.image(F2)
159
+ tet, perm = (
160
+ tet.Neighbor[face], tet.Gluing[face] * perm * Perm4( (0,1,3,2) ))
161
+
162
+ def _add_corner(self, arrow):
163
+ """
164
+ Used by Mcomplex.build_edge_classes
165
+ """
166
+ self.Corners.append(Corner(arrow.Tetrahedron, arrow.Edge))
167
+ # Next line equivalent to:
168
+ # other_arrow = arrow.copy().opposite()
169
+ # tail, head = other_arrow.tail(), other_arrow.head()
170
+ tail, head = _edge_add_corner_dict[arrow.Edge, arrow.Face]
171
+ self._edge_orient_cache[arrow.Tetrahedron, tail, head] = 1
172
+ self._edge_orient_cache[arrow.Tetrahedron, head, tail] = -1
@@ -0,0 +1,37 @@
1
+ # $$
2
+ # t3m - software for studying triangulated 3-manifolds
3
+ # Copyright (C) 2002 Marc Culler, Nathan Dunfield and others
4
+ #
5
+ # This program is distributed under the terms of the
6
+ # GNU General Public License, version 2 or later, as published by
7
+ # the Free Software Foundation. See the file GPL.txt for details.
8
+
9
+ from .arrow import Arrow
10
+ from .simplex import PickAnEdge
11
+
12
+
13
+ class Face:
14
+ def __init__(self):
15
+ self.Index = -1
16
+ self.IntOrBdry = ''
17
+ self.Corners = [] # Corners of type "2-simplex in Tetrahedron"
18
+
19
+ def __repr__(self):
20
+ if self.Index > -1:
21
+ return ('f' + str(self.Index)
22
+ + ' (' + self.IntOrBdry + ')')
23
+ else:
24
+ return '< floating face' + str(id(self)) + ' >'
25
+
26
+ def erase(self):
27
+ for corner in self.Corners:
28
+ corner.Tetrahedron.Class[corner.Subsimplex] = None
29
+ self.Index = -1
30
+
31
+ def bdry_arrow(self):
32
+ if self.IntOrBdry != 'bdry':
33
+ return None
34
+ face = self.Corners[0].Subsimplex
35
+ tet = self.Corners[0].Tetrahedron
36
+ edge = PickAnEdge[face]
37
+ return Arrow(edge, face, tet)
@@ -0,0 +1,211 @@
1
+ # t3m - software for studying triangulated 3-manifolds
2
+ # Copyright (C) 2002 Marc Culler, Nathan Dunfield and others
3
+ #
4
+ # This program is distributed under the terms of the
5
+ # GNU General Public License, version 2 or later, as published by
6
+ # the Free Software Foundation. See the file GPL.txt for details.
7
+
8
+ from .arrow import eArrow
9
+ from .simplex import *
10
+ from .tetrahedron import Tetrahedron
11
+ import re
12
+
13
+ # Nathan's code for importing and exporting snappea files.
14
+ # Converts a SnapPea file to MComplex. Doesn't really use all the
15
+ # structure of the SnapPea file as it relies only on the fact that the
16
+ # gluing data for the ith pair of tetrahedra is given by the ith pair
17
+ # of lines like:
18
+ #
19
+ # 2 5 1 34
20
+ # 3120 0321 0132 0132
21
+
22
+
23
+ def read_SnapPea_file(file_name=None, data=None):
24
+ if data is None:
25
+ data = open(file_name).read().decode('ascii')
26
+ count = 0
27
+
28
+ neighbors_match = r"^\s*(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s*$"
29
+ perm_match = r"\s*([0123]{4,4})\s+([0123]{4,4})\s+([0123]{4,4})\s+([0123]{4,4})\s*$"
30
+ snappea_re = re.compile(neighbors_match + perm_match, re.MULTILINE)
31
+
32
+ fake_tets = []
33
+
34
+ curr_poss = 0
35
+ while 1:
36
+ m = snappea_re.search(data, curr_poss)
37
+ if not m:
38
+ break
39
+ else:
40
+ neighbors = [int(g) for g in m.group(1,2,3,4)]
41
+ perms = []
42
+ for perm in m.group(5,6,7,8):
43
+ perm = [int(p) for p in [perm[0], perm[1], perm[2], perm[3]]]
44
+ perms.append(perm)
45
+ fake_tets.append( (neighbors, perms) )
46
+ curr_poss = m.end(8)
47
+ return fake_tets
48
+
49
+ # ------------End function SnapPea to Mcomplex--------------------
50
+
51
+
52
+ # Exports an Mcomplex in SnapPea 2.0 format.
53
+ # ASSUMES THAT THE MANIFOLD IS ORIENTABLE AND THAT THE LINK OF
54
+ # ANY VERTEX HAS GENUS AT MOST ONE.
55
+
56
+ def write_SnapPea_file(mcomplex, fileobject):
57
+ out = fileobject.write
58
+ if hasattr(fileobject, 'name'):
59
+ name = fileobject.name
60
+ else:
61
+ name = 'untitled'
62
+
63
+ out("% Triangulation\n\n" + name + "\nnot_attempted 0.0\nunknown_orientability\nCS_unknown\n\n")
64
+
65
+ torus_cusps = []
66
+ for vertex in mcomplex.Vertices:
67
+ g = vertex.link_genus()
68
+ if g > 1:
69
+ raise ValueError("Link of vertex has genus more than 1.")
70
+ if g == 1:
71
+ torus_cusps.append(vertex)
72
+
73
+ # All torus cusps are unfilled
74
+
75
+ out("%d 0\n" % len(torus_cusps))
76
+ for i in torus_cusps:
77
+ out( " torus 0.000000000000 0.000000000000\n" )
78
+
79
+ out("\n")
80
+
81
+ # The num of tetrahedra
82
+
83
+ out("%d\n" % len(mcomplex))
84
+
85
+ # Output the tetraheda themselves.
86
+
87
+ for tet in mcomplex.Tetrahedra:
88
+ for face in TwoSubsimplices:
89
+ out(" %d" % mcomplex.Tetrahedra.index( tet.Neighbor[face]))
90
+ out("\n")
91
+ for face in TwoSubsimplices:
92
+ out(" %d%d%d%d" % tet.Gluing[face].tuple())
93
+
94
+ out("\n")
95
+ for vert in ZeroSubsimplices:
96
+ vertex = tet.Class[vert]
97
+ if vertex.link_genus() == 1:
98
+ out("%d " % torus_cusps.index(vertex))
99
+ else:
100
+ out("-1 ")
101
+ out("\n")
102
+ if hasattr(tet, 'PeripheralCurves'):
103
+ for curve in tet.PeripheralCurves:
104
+ for sheet in curve:
105
+ for v in ZeroSubsimplices:
106
+ for f in TwoSubsimplices:
107
+ out("%d " % sheet[v][f])
108
+ if v == V3:
109
+ out("\n")
110
+ else:
111
+ out(" ")
112
+ else:
113
+ for i in range(4):
114
+ out("0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n")
115
+ out("0.0 0.0\n\n")
116
+
117
+
118
+ # Nathan's code for importing and exporting geo files.
119
+ #
120
+ # converts Casson's u, v, w, x into 0, 1, 2, 3
121
+
122
+ conv = {"u" : V0, "v" : V1, "w" : V2, "x" : V3}
123
+ conv_back = {V0: "u", V1 : "v", V2 : "w", V3: "x"}
124
+
125
+ # Geo saves edges in the form "5ux". This function returns
126
+ # (tet_num, starting_vertex, ending_vertex). Because Casson
127
+ # starts his indexing of tets at 1 and Jeff starts at 0,
128
+ # we subtract 1.
129
+
130
+
131
+ def read_edge(edge):
132
+ m = re.match("([0-9]+)([uvwx])([uvwx])", edge)
133
+ return (int(m.group(1)) - 1, conv[m.group(2)], conv[m.group(3)])
134
+
135
+ # Geo stores manifolds by storing the link around each edge. This
136
+ # function takes two successive edges in the link and glues the
137
+ # corresponding tetrahedra together.
138
+
139
+
140
+ def read_geo_file(file_name, num_tet=None):
141
+ data = open(file_name).readlines()
142
+ if num_tet is None:
143
+ num_tet = len(data) - 2
144
+ tets = []
145
+ for i in range(num_tet):
146
+ tets.append(Tetrahedron())
147
+
148
+ for line in data[1 : ]:
149
+ line = line.decode('ascii')
150
+ cycle = re.split(r"\s+", line[ : -1])[1 : ]
151
+ for i in range(len(cycle)):
152
+ t1, v1, v2 = read_edge(cycle[i])
153
+ t2, w1, w2 = read_edge(cycle[(i+1) % len(cycle)]) # Yes, that's w2, w1
154
+ a = eArrow(tets[t1], v1, v2)
155
+ b = eArrow(tets[t2], w1, w2)
156
+ a.glue(b)
157
+
158
+ return Mcomplex(tets)
159
+
160
+ # ---------Code to go from Mcomplex to Geo---------------------
161
+
162
+
163
+ def write_geo_file(mcomplex, fileobject):
164
+ out = fileobject.write
165
+ out("k\n")
166
+ i = 1
167
+ for edge in mcomplex.Edges:
168
+ tet = edge.Corners[0].Tetrahedron
169
+ edge_name = edge.Corners[0].Subsimplex
170
+ init = Head[edge_name]
171
+ fin = Tail[edge_name]
172
+ a = eArrow(tet, init, fin).opposite()
173
+ b = a.copy()
174
+ out("%d\t%d%s%s " % (i, mcomplex.Tetrahedra.index(b.Tetrahedron) + 1,
175
+ conv_back[b.tail()], conv_back[b.head()]))
176
+ b.next()
177
+ while b != a:
178
+ out("%d%s%s " % (mcomplex.Tetrahedra.index(b.Tetrahedron) + 1,
179
+ conv_back[b.tail()], conv_back[b.head()]))
180
+ b.next()
181
+
182
+ i = i + 1
183
+ out("\n")
184
+
185
+
186
+ # writing a file for Matveev's program Spine
187
+
188
+ def write_spine_file(mcomplex, fileobject):
189
+ out = fileobject.write
190
+ for edge in mcomplex.Edges:
191
+ n = edge.valence()
192
+ A = edge.get_arrow()
193
+ tets, global_faces, local_faces, back_local_faces = [], [], [], []
194
+ for i in range(n):
195
+ tets.append(A.Tetrahedron.Index + 1)
196
+ global_faces.append(A.Tetrahedron.Class[A.Face].Index + 1)
197
+ local_faces.append(A.Face)
198
+ back_local_faces.append(comp(A.head()))
199
+ A.next()
200
+
201
+ signs = [1 if (tets[i], local_faces[i]) < (tets[(i + 1) % n], back_local_faces[(i + 1) % n]) else -1 for i in range(n)]
202
+ ans = repr([signs[i]*global_faces[i] for i in range(n)])[1:-1].replace(",", "")
203
+ out(ans + "\n")
204
+
205
+
206
+ __all__ = ('read_SnapPea_file',
207
+ 'write_SnapPea_file',
208
+ 'read_geo_file',
209
+ 'write_geo_file',
210
+ 'write_spine_file',
211
+ )
@@ -0,0 +1,53 @@
1
+ from .simplex import *
2
+ from .linalg import Matrix
3
+
4
+
5
+ def boundary_three(manifold):
6
+ F, T = len(manifold.Faces), len(manifold.Tetrahedra)
7
+ ans = Matrix(F, T)
8
+ for F in manifold.Faces:
9
+ t0, t1 = (C.Tetrahedron.Index for C in F.Corners)
10
+ ans[F.Index, t0] += 1
11
+ ans[F.Index, t1] += -1
12
+ return ans
13
+
14
+
15
+ def boundary_two(manifold):
16
+ VerticesOfFace = { F0 : (V1, V2, V3), F1 : (V0, V3, V2), F2 : (V0, V1, V3), F3 :
17
+ (V0, V2, V1) }
18
+
19
+ E, F = len(manifold.Edges), len(manifold.Faces)
20
+ ans = Matrix(E, F)
21
+ for F in manifold.Faces:
22
+ C = F.Corners[0]
23
+ tet = C.Tetrahedron
24
+ vertices = VerticesOfFace[C.Subsimplex]
25
+ for i in range(3):
26
+ a, b = vertices[i], vertices[(i + 1) % 3]
27
+ e = tet.Class[a | b]
28
+ ans[e.index(), F.Index] += e.orientation_with_respect_to(tet, a, b)
29
+ return ans
30
+
31
+
32
+ def boundary_one(manifold):
33
+ V, E = len(manifold.Vertices), len(manifold.Edges)
34
+ ans = Matrix(V, E)
35
+ for e in manifold.Edges:
36
+ v_init, v_term = (v.Index for v in e.Vertices)
37
+ ans[v_term, e.Index] += 1
38
+ ans[v_init, e.Index] += -1
39
+ return ans
40
+
41
+
42
+ def boundary_maps(manifold):
43
+ """
44
+ The boundary maps in the homology chain complex of the
45
+ underlying cell-complex of a Mcomplex.
46
+
47
+ >>> M = Mcomplex('o9_12345')
48
+ >>> len(M.boundary_maps()) == 3
49
+ True
50
+ """
51
+ B1, B2, B3 = boundary_one(manifold), boundary_two(manifold), boundary_three(manifold)
52
+ assert B1*B2 == 0 and B2*B3 == 0
53
+ return B1, B2, B3