snappy 3.2__cp310-cp310-macosx_10_12_x86_64.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (503) hide show
  1. snappy/CyOpenGL.cpython-310-darwin.so +0 -0
  2. snappy/SnapPy.cpython-310-darwin.so +0 -0
  3. snappy/SnapPy.ico +0 -0
  4. snappy/SnapPy.png +0 -0
  5. snappy/SnapPyHP.cpython-310-darwin.so +0 -0
  6. snappy/__init__.py +760 -0
  7. snappy/app.py +605 -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 +38 -0
  13. snappy/cusps/cusp_area_matrix.py +101 -0
  14. snappy/cusps/cusp_areas_from_matrix.py +173 -0
  15. snappy/cusps/maximal_cusp_area_matrix.py +136 -0
  16. snappy/cusps/test.py +21 -0
  17. snappy/cusps/trig_cusp_area_matrix.py +63 -0
  18. snappy/database.py +454 -0
  19. snappy/db_utilities.py +79 -0
  20. snappy/decorated_isosig.py +710 -0
  21. snappy/dev/__init__.py +0 -0
  22. snappy/dev/extended_ptolemy/__init__.py +8 -0
  23. snappy/dev/extended_ptolemy/closed.py +106 -0
  24. snappy/dev/extended_ptolemy/complexVolumesClosed.py +149 -0
  25. snappy/dev/extended_ptolemy/direct.py +42 -0
  26. snappy/dev/extended_ptolemy/extended.py +406 -0
  27. snappy/dev/extended_ptolemy/giac_helper.py +43 -0
  28. snappy/dev/extended_ptolemy/giac_rur.py +129 -0
  29. snappy/dev/extended_ptolemy/gluing.py +46 -0
  30. snappy/dev/extended_ptolemy/phc_wrapper.py +220 -0
  31. snappy/dev/extended_ptolemy/printMatrices.py +70 -0
  32. snappy/dev/vericlosed/__init__.py +1 -0
  33. snappy/dev/vericlosed/computeApproxHyperbolicStructureNew.py +159 -0
  34. snappy/dev/vericlosed/computeApproxHyperbolicStructureOrb.py +90 -0
  35. snappy/dev/vericlosed/computeVerifiedHyperbolicStructure.py +111 -0
  36. snappy/dev/vericlosed/gimbalLoopFinder.py +130 -0
  37. snappy/dev/vericlosed/hyperbolicStructure.py +313 -0
  38. snappy/dev/vericlosed/krawczykCertifiedEdgeLengthsEngine.py +165 -0
  39. snappy/dev/vericlosed/oneVertexTruncatedComplex.py +122 -0
  40. snappy/dev/vericlosed/orb/__init__.py +1 -0
  41. snappy/dev/vericlosed/orb/orb_solution_for_snappea_finite_triangulation_mac +0 -0
  42. snappy/dev/vericlosed/parseVertexGramMatrixFile.py +47 -0
  43. snappy/dev/vericlosed/polishApproxHyperbolicStructure.py +61 -0
  44. snappy/dev/vericlosed/test.py +54 -0
  45. snappy/dev/vericlosed/truncatedComplex.py +176 -0
  46. snappy/dev/vericlosed/verificationError.py +58 -0
  47. snappy/dev/vericlosed/verifyHyperbolicStructureEngine.py +177 -0
  48. snappy/doc/_images/SnapPy-196.png +0 -0
  49. snappy/doc/_images/geodesics.jpg +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 +51 -0
  61. snappy/doc/_sources/credits.rst.txt +75 -0
  62. snappy/doc/_sources/development.rst.txt +259 -0
  63. snappy/doc/_sources/index.rst.txt +182 -0
  64. snappy/doc/_sources/installing.rst.txt +247 -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 +355 -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 +925 -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 +156 -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 +199 -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 +620 -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 +427 -0
  152. snappy/doc/credits.html +181 -0
  153. snappy/doc/development.html +384 -0
  154. snappy/doc/genindex.html +1331 -0
  155. snappy/doc/index.html +262 -0
  156. snappy/doc/installing.html +346 -0
  157. snappy/doc/manifold.html +3452 -0
  158. snappy/doc/manifoldhp.html +180 -0
  159. snappy/doc/news.html +388 -0
  160. snappy/doc/objects.inv +0 -0
  161. snappy/doc/other.html +161 -0
  162. snappy/doc/platonic_census.html +375 -0
  163. snappy/doc/plink.html +210 -0
  164. snappy/doc/ptolemy.html +254 -0
  165. snappy/doc/ptolemy_classes.html +1144 -0
  166. snappy/doc/ptolemy_examples1.html +409 -0
  167. snappy/doc/ptolemy_examples2.html +471 -0
  168. snappy/doc/ptolemy_examples3.html +414 -0
  169. snappy/doc/ptolemy_examples4.html +195 -0
  170. snappy/doc/ptolemy_prelim.html +248 -0
  171. snappy/doc/py-modindex.html +165 -0
  172. snappy/doc/screenshots.html +141 -0
  173. snappy/doc/search.html +135 -0
  174. snappy/doc/searchindex.js +1 -0
  175. snappy/doc/snap.html +202 -0
  176. snappy/doc/snappy.html +181 -0
  177. snappy/doc/spherogram.html +1211 -0
  178. snappy/doc/todo.html +166 -0
  179. snappy/doc/triangulation.html +1584 -0
  180. snappy/doc/tutorial.html +159 -0
  181. snappy/doc/verify.html +330 -0
  182. snappy/doc/verify_internals.html +1235 -0
  183. snappy/drilling/__init__.py +456 -0
  184. snappy/drilling/barycentric.py +103 -0
  185. snappy/drilling/constants.py +5 -0
  186. snappy/drilling/crush.py +270 -0
  187. snappy/drilling/cusps.py +125 -0
  188. snappy/drilling/debug.py +242 -0
  189. snappy/drilling/epsilons.py +6 -0
  190. snappy/drilling/exceptions.py +55 -0
  191. snappy/drilling/moves.py +620 -0
  192. snappy/drilling/peripheral_curves.py +210 -0
  193. snappy/drilling/perturb.py +188 -0
  194. snappy/drilling/shorten.py +36 -0
  195. snappy/drilling/subdivide.py +274 -0
  196. snappy/drilling/test.py +23 -0
  197. snappy/drilling/test_cases.py +126 -0
  198. snappy/drilling/tracing.py +351 -0
  199. snappy/exceptions.py +26 -0
  200. snappy/export_stl.py +120 -0
  201. snappy/exterior_to_link/__init__.py +2 -0
  202. snappy/exterior_to_link/barycentric_geometry.py +463 -0
  203. snappy/exterior_to_link/exceptions.py +6 -0
  204. snappy/exterior_to_link/geodesic_map.json +14408 -0
  205. snappy/exterior_to_link/hyp_utils.py +112 -0
  206. snappy/exterior_to_link/link_projection.py +323 -0
  207. snappy/exterior_to_link/main.py +197 -0
  208. snappy/exterior_to_link/mcomplex_with_expansion.py +261 -0
  209. snappy/exterior_to_link/mcomplex_with_link.py +687 -0
  210. snappy/exterior_to_link/mcomplex_with_memory.py +162 -0
  211. snappy/exterior_to_link/pl_utils.py +491 -0
  212. snappy/exterior_to_link/put_in_S3.py +156 -0
  213. snappy/exterior_to_link/rational_linear_algebra.py +123 -0
  214. snappy/exterior_to_link/rational_linear_algebra_wrapped.py +135 -0
  215. snappy/exterior_to_link/simplify_to_base_tri.py +114 -0
  216. snappy/exterior_to_link/stored_moves.py +475 -0
  217. snappy/exterior_to_link/test.py +31 -0
  218. snappy/filedialog.py +28 -0
  219. snappy/geometric_structure/__init__.py +212 -0
  220. snappy/geometric_structure/cusp_neighborhood/__init__.py +3 -0
  221. snappy/geometric_structure/cusp_neighborhood/complex_cusp_cross_section.py +697 -0
  222. snappy/geometric_structure/cusp_neighborhood/cusp_cross_section_base.py +484 -0
  223. snappy/geometric_structure/cusp_neighborhood/exceptions.py +42 -0
  224. snappy/geometric_structure/cusp_neighborhood/real_cusp_cross_section.py +298 -0
  225. snappy/geometric_structure/cusp_neighborhood/tiles_for_cusp_neighborhood.py +159 -0
  226. snappy/geometric_structure/cusp_neighborhood/vertices.py +32 -0
  227. snappy/geometric_structure/geodesic/__init__.py +0 -0
  228. snappy/geometric_structure/geodesic/add_core_curves.py +152 -0
  229. snappy/geometric_structure/geodesic/avoid_core_curves.py +369 -0
  230. snappy/geometric_structure/geodesic/canonical_keys.py +52 -0
  231. snappy/geometric_structure/geodesic/check_away_from_core_curve.py +60 -0
  232. snappy/geometric_structure/geodesic/constants.py +6 -0
  233. snappy/geometric_structure/geodesic/exceptions.py +22 -0
  234. snappy/geometric_structure/geodesic/fixed_points.py +93 -0
  235. snappy/geometric_structure/geodesic/geodesic_start_point_info.py +435 -0
  236. snappy/geometric_structure/geodesic/graph_trace_helper.py +67 -0
  237. snappy/geometric_structure/geodesic/line.py +30 -0
  238. snappy/geometric_structure/geodesic/multiplicity.py +127 -0
  239. snappy/geometric_structure/geodesic/tiles_for_geodesic.py +101 -0
  240. snappy/geometric_structure/test.py +22 -0
  241. snappy/gui.py +121 -0
  242. snappy/horoviewer.py +443 -0
  243. snappy/hyperboloid/__init__.py +212 -0
  244. snappy/hyperboloid/distances.py +245 -0
  245. snappy/hyperboloid/horoball.py +19 -0
  246. snappy/hyperboloid/line.py +35 -0
  247. snappy/hyperboloid/point.py +9 -0
  248. snappy/hyperboloid/triangle.py +29 -0
  249. snappy/info_icon.gif +0 -0
  250. snappy/infowindow.py +65 -0
  251. snappy/isometry_signature.py +382 -0
  252. snappy/len_spec/__init__.py +596 -0
  253. snappy/len_spec/geodesic_info.py +110 -0
  254. snappy/len_spec/geodesic_key_info_dict.py +117 -0
  255. snappy/len_spec/geodesic_piece.py +143 -0
  256. snappy/len_spec/geometric_structure.py +182 -0
  257. snappy/len_spec/geometry.py +80 -0
  258. snappy/len_spec/length_spectrum_geodesic_info.py +170 -0
  259. snappy/len_spec/spine.py +206 -0
  260. snappy/len_spec/test.py +24 -0
  261. snappy/len_spec/test_cases.py +69 -0
  262. snappy/len_spec/tile.py +275 -0
  263. snappy/len_spec/word.py +86 -0
  264. snappy/manifolds/HTWKnots/alternating.gz +0 -0
  265. snappy/manifolds/HTWKnots/nonalternating.gz +0 -0
  266. snappy/manifolds/__init__.py +3 -0
  267. snappy/math_basics.py +176 -0
  268. snappy/matrix.py +525 -0
  269. snappy/number.py +657 -0
  270. snappy/numeric_output_checker.py +345 -0
  271. snappy/pari.py +41 -0
  272. snappy/phone_home.py +57 -0
  273. snappy/polyviewer.py +259 -0
  274. snappy/ptolemy/__init__.py +17 -0
  275. snappy/ptolemy/component.py +103 -0
  276. snappy/ptolemy/coordinates.py +2290 -0
  277. snappy/ptolemy/fieldExtensions.py +153 -0
  278. snappy/ptolemy/findLoops.py +473 -0
  279. snappy/ptolemy/geometricRep.py +59 -0
  280. snappy/ptolemy/homology.py +165 -0
  281. snappy/ptolemy/magma/default.magma_template +229 -0
  282. snappy/ptolemy/magma/radicalsOfPrimaryDecomposition.magma_template +79 -0
  283. snappy/ptolemy/manifoldMethods.py +395 -0
  284. snappy/ptolemy/matrix.py +350 -0
  285. snappy/ptolemy/numericalSolutionsToGroebnerBasis.py +113 -0
  286. snappy/ptolemy/polynomial.py +857 -0
  287. snappy/ptolemy/processComponents.py +173 -0
  288. snappy/ptolemy/processFileBase.py +247 -0
  289. snappy/ptolemy/processFileDispatch.py +46 -0
  290. snappy/ptolemy/processMagmaFile.py +392 -0
  291. snappy/ptolemy/processRurFile.py +150 -0
  292. snappy/ptolemy/ptolemyGeneralizedObstructionClass.py +102 -0
  293. snappy/ptolemy/ptolemyObstructionClass.py +64 -0
  294. snappy/ptolemy/ptolemyVariety.py +1029 -0
  295. snappy/ptolemy/ptolemyVarietyPrimeIdealGroebnerBasis.py +140 -0
  296. snappy/ptolemy/reginaWrapper.py +698 -0
  297. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c0.magma_out.bz2 +0 -0
  298. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c1.magma_out.bz2 +0 -0
  299. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c2.magma_out.bz2 +0 -0
  300. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c3.magma_out.bz2 +0 -0
  301. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c4.magma_out.bz2 +0 -0
  302. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c5.magma_out.bz2 +0 -0
  303. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c6.magma_out.bz2 +0 -0
  304. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c7.magma_out.bz2 +0 -0
  305. snappy/ptolemy/regina_testing_files_generalized/m003__sl3_c0.magma_out.bz2 +0 -0
  306. snappy/ptolemy/regina_testing_files_generalized/m003__sl3_c1.magma_out.bz2 +0 -0
  307. snappy/ptolemy/regina_testing_files_generalized/m015__sl2_c0.magma_out.bz2 +0 -0
  308. snappy/ptolemy/regina_testing_files_generalized/m015__sl2_c1.magma_out.bz2 +0 -0
  309. snappy/ptolemy/regina_testing_files_generalized/m015__sl3_c0.magma_out.bz2 +0 -0
  310. snappy/ptolemy/regina_testing_files_generalized/m015__sl3_c1.magma_out.bz2 +0 -0
  311. snappy/ptolemy/rur.py +545 -0
  312. snappy/ptolemy/solutionsToPrimeIdealGroebnerBasis.py +277 -0
  313. snappy/ptolemy/test.py +1126 -0
  314. snappy/ptolemy/testing_files/3_1__sl2_c0.magma_out.bz2 +0 -0
  315. snappy/ptolemy/testing_files/3_1__sl2_c1.magma_out.bz2 +0 -0
  316. snappy/ptolemy/testing_files/4_1__sl2_c0.magma_out.bz2 +0 -0
  317. snappy/ptolemy/testing_files/4_1__sl2_c1.magma_out.bz2 +0 -0
  318. snappy/ptolemy/testing_files/4_1__sl3_c0.magma_out.bz2 +0 -0
  319. snappy/ptolemy/testing_files/4_1__sl4_c0.magma_out.bz2 +0 -0
  320. snappy/ptolemy/testing_files/4_1__sl4_c1.magma_out.bz2 +0 -0
  321. snappy/ptolemy/testing_files/5_2__sl2_c0.magma_out.bz2 +0 -0
  322. snappy/ptolemy/testing_files/5_2__sl2_c1.magma_out.bz2 +0 -0
  323. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c0.magma_out.bz2 +0 -0
  324. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c1.magma_out.bz2 +0 -0
  325. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c2.magma_out.bz2 +0 -0
  326. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c3.magma_out.bz2 +0 -0
  327. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c4.magma_out.bz2 +0 -0
  328. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c5.magma_out.bz2 +0 -0
  329. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c6.magma_out.bz2 +0 -0
  330. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c7.magma_out.bz2 +0 -0
  331. snappy/ptolemy/testing_files/data/pgl2/OrientableCuspedCensus/03_tetrahedra/m019__sl2_c0.magma_out +95 -0
  332. snappy/ptolemy/testing_files/data/pgl2/OrientableCuspedCensus/03_tetrahedra/m019__sl2_c1.magma_out +95 -0
  333. snappy/ptolemy/testing_files/m015__sl3_c0.magma_out.bz2 +0 -0
  334. snappy/ptolemy/testing_files/m135__sl2_c0.magma_out.bz2 +0 -0
  335. snappy/ptolemy/testing_files/m135__sl2_c1.magma_out.bz2 +0 -0
  336. snappy/ptolemy/testing_files/m135__sl2_c2.magma_out.bz2 +0 -0
  337. snappy/ptolemy/testing_files/m135__sl2_c3.magma_out.bz2 +0 -0
  338. snappy/ptolemy/testing_files/m135__sl2_c4.magma_out.bz2 +0 -0
  339. snappy/ptolemy/testing_files/m135__sl2_c5.magma_out.bz2 +0 -0
  340. snappy/ptolemy/testing_files/m135__sl2_c6.magma_out.bz2 +0 -0
  341. snappy/ptolemy/testing_files/m135__sl2_c7.magma_out.bz2 +0 -0
  342. snappy/ptolemy/testing_files/s000__sl2_c0.magma_out.bz2 +0 -0
  343. snappy/ptolemy/testing_files/s000__sl2_c1.magma_out.bz2 +0 -0
  344. snappy/ptolemy/testing_files/t00000__sl2_c0.magma_out.bz2 +0 -0
  345. snappy/ptolemy/testing_files/t00000__sl2_c1.magma_out.bz2 +0 -0
  346. snappy/ptolemy/testing_files/v0000__sl2_c0.magma_out.bz2 +0 -0
  347. snappy/ptolemy/testing_files/v0000__sl2_c1.magma_out.bz2 +0 -0
  348. snappy/ptolemy/testing_files/v0000__sl2_c2.magma_out.bz2 +0 -0
  349. snappy/ptolemy/testing_files/v0000__sl2_c3.magma_out.bz2 +0 -0
  350. snappy/ptolemy/testing_files_generalized/m003__sl2_c0.magma_out.bz2 +0 -0
  351. snappy/ptolemy/testing_files_generalized/m003__sl2_c1.magma_out.bz2 +0 -0
  352. snappy/ptolemy/testing_files_generalized/m003__sl3_c0.magma_out.bz2 +0 -0
  353. snappy/ptolemy/testing_files_generalized/m003__sl3_c1.magma_out.bz2 +0 -0
  354. snappy/ptolemy/testing_files_generalized/m004__sl2_c0.magma_out.bz2 +0 -0
  355. snappy/ptolemy/testing_files_generalized/m004__sl2_c1.magma_out.bz2 +0 -0
  356. snappy/ptolemy/testing_files_generalized/m015__sl2_c1.magma_out.bz2 +0 -0
  357. snappy/ptolemy/testing_files_generalized/m015__sl3_c0.magma_out.bz2 +0 -0
  358. snappy/ptolemy/testing_files_rur/m052__sl3_c0.rur.bz2 +0 -0
  359. snappy/ptolemy/utilities.py +236 -0
  360. snappy/raytracing/__init__.py +64 -0
  361. snappy/raytracing/additional_horospheres.py +64 -0
  362. snappy/raytracing/additional_len_spec_choices.py +63 -0
  363. snappy/raytracing/cohomology_fractal.py +197 -0
  364. snappy/raytracing/eyeball.py +123 -0
  365. snappy/raytracing/finite_raytracing_data.py +237 -0
  366. snappy/raytracing/finite_viewer.py +590 -0
  367. snappy/raytracing/geodesic_tube_info.py +174 -0
  368. snappy/raytracing/geodesics.py +246 -0
  369. snappy/raytracing/geodesics_window.py +258 -0
  370. snappy/raytracing/gui_utilities.py +293 -0
  371. snappy/raytracing/hyperboloid_navigation.py +556 -0
  372. snappy/raytracing/hyperboloid_utilities.py +234 -0
  373. snappy/raytracing/ideal_raytracing_data.py +592 -0
  374. snappy/raytracing/inside_viewer.py +974 -0
  375. snappy/raytracing/pack.py +22 -0
  376. snappy/raytracing/raytracing_data.py +126 -0
  377. snappy/raytracing/raytracing_view.py +454 -0
  378. snappy/raytracing/shaders/Eye.png +0 -0
  379. snappy/raytracing/shaders/NonGeometric.png +0 -0
  380. snappy/raytracing/shaders/__init__.py +101 -0
  381. snappy/raytracing/shaders/fragment.glsl +1744 -0
  382. snappy/raytracing/test.py +29 -0
  383. snappy/raytracing/tooltip.py +146 -0
  384. snappy/raytracing/upper_halfspace_utilities.py +98 -0
  385. snappy/raytracing/view_scale_controller.py +98 -0
  386. snappy/raytracing/zoom_slider/__init__.py +263 -0
  387. snappy/raytracing/zoom_slider/inward.png +0 -0
  388. snappy/raytracing/zoom_slider/inward18.png +0 -0
  389. snappy/raytracing/zoom_slider/outward.png +0 -0
  390. snappy/raytracing/zoom_slider/outward18.png +0 -0
  391. snappy/raytracing/zoom_slider/test.py +20 -0
  392. snappy/sage_helper.py +117 -0
  393. snappy/settings.py +409 -0
  394. snappy/shell.py +53 -0
  395. snappy/snap/__init__.py +114 -0
  396. snappy/snap/character_varieties.py +375 -0
  397. snappy/snap/find_field.py +372 -0
  398. snappy/snap/fundamental_polyhedron.py +569 -0
  399. snappy/snap/generators.py +39 -0
  400. snappy/snap/interval_reps.py +81 -0
  401. snappy/snap/kernel_structures.py +128 -0
  402. snappy/snap/mcomplex_base.py +18 -0
  403. snappy/snap/nsagetools.py +702 -0
  404. snappy/snap/peripheral/__init__.py +1 -0
  405. snappy/snap/peripheral/dual_cellulation.py +219 -0
  406. snappy/snap/peripheral/link.py +127 -0
  407. snappy/snap/peripheral/peripheral.py +159 -0
  408. snappy/snap/peripheral/surface.py +522 -0
  409. snappy/snap/peripheral/test.py +35 -0
  410. snappy/snap/polished_reps.py +335 -0
  411. snappy/snap/shapes.py +152 -0
  412. snappy/snap/slice_obs_HKL.py +668 -0
  413. snappy/snap/t3mlite/__init__.py +2 -0
  414. snappy/snap/t3mlite/arrow.py +243 -0
  415. snappy/snap/t3mlite/corner.py +22 -0
  416. snappy/snap/t3mlite/edge.py +172 -0
  417. snappy/snap/t3mlite/face.py +37 -0
  418. snappy/snap/t3mlite/files.py +211 -0
  419. snappy/snap/t3mlite/homology.py +53 -0
  420. snappy/snap/t3mlite/linalg.py +419 -0
  421. snappy/snap/t3mlite/mcomplex.py +1499 -0
  422. snappy/snap/t3mlite/perm4.py +320 -0
  423. snappy/snap/t3mlite/setup.py +12 -0
  424. snappy/snap/t3mlite/simplex.py +199 -0
  425. snappy/snap/t3mlite/spun.py +297 -0
  426. snappy/snap/t3mlite/surface.py +519 -0
  427. snappy/snap/t3mlite/test.py +20 -0
  428. snappy/snap/t3mlite/test_vs_regina.py +86 -0
  429. snappy/snap/t3mlite/tetrahedron.py +109 -0
  430. snappy/snap/t3mlite/vertex.py +42 -0
  431. snappy/snap/test.py +134 -0
  432. snappy/snap/utilities.py +288 -0
  433. snappy/test.py +209 -0
  434. snappy/test_cases.py +263 -0
  435. snappy/testing.py +131 -0
  436. snappy/tiling/__init__.py +2 -0
  437. snappy/tiling/canonical_key_dict.py +59 -0
  438. snappy/tiling/dict_based_set.py +79 -0
  439. snappy/tiling/floor.py +49 -0
  440. snappy/tiling/hyperboloid_dict.py +54 -0
  441. snappy/tiling/iter_utils.py +78 -0
  442. snappy/tiling/lifted_tetrahedron.py +22 -0
  443. snappy/tiling/lifted_tetrahedron_set.py +54 -0
  444. snappy/tiling/real_hash_dict.py +164 -0
  445. snappy/tiling/test.py +23 -0
  446. snappy/tiling/tile.py +215 -0
  447. snappy/tiling/triangle.py +33 -0
  448. snappy/tkterminal.py +920 -0
  449. snappy/twister/__init__.py +20 -0
  450. snappy/twister/main.py +646 -0
  451. snappy/twister/surfaces/S_0_1 +3 -0
  452. snappy/twister/surfaces/S_0_2 +3 -0
  453. snappy/twister/surfaces/S_0_4 +7 -0
  454. snappy/twister/surfaces/S_0_4_Lantern +8 -0
  455. snappy/twister/surfaces/S_1 +3 -0
  456. snappy/twister/surfaces/S_1_1 +4 -0
  457. snappy/twister/surfaces/S_1_2 +5 -0
  458. snappy/twister/surfaces/S_1_2_5 +6 -0
  459. snappy/twister/surfaces/S_2 +6 -0
  460. snappy/twister/surfaces/S_2_1 +8 -0
  461. snappy/twister/surfaces/S_2_heeg +10 -0
  462. snappy/twister/surfaces/S_3 +8 -0
  463. snappy/twister/surfaces/S_3_1 +10 -0
  464. snappy/twister/surfaces/S_4_1 +12 -0
  465. snappy/twister/surfaces/S_5_1 +14 -0
  466. snappy/twister/surfaces/heeg_fig8 +9 -0
  467. snappy/twister/twister_core.cpython-310-darwin.so +0 -0
  468. snappy/upper_halfspace/__init__.py +146 -0
  469. snappy/upper_halfspace/ideal_point.py +26 -0
  470. snappy/verify/__init__.py +13 -0
  471. snappy/verify/canonical.py +542 -0
  472. snappy/verify/complex_volume/__init__.py +18 -0
  473. snappy/verify/complex_volume/adjust_torsion.py +86 -0
  474. snappy/verify/complex_volume/closed.py +168 -0
  475. snappy/verify/complex_volume/compute_ptolemys.py +90 -0
  476. snappy/verify/complex_volume/cusped.py +56 -0
  477. snappy/verify/complex_volume/extended_bloch.py +201 -0
  478. snappy/verify/cusp_translations.py +85 -0
  479. snappy/verify/edge_equations.py +80 -0
  480. snappy/verify/exceptions.py +254 -0
  481. snappy/verify/hyperbolicity.py +224 -0
  482. snappy/verify/interval_newton_shapes_engine.py +523 -0
  483. snappy/verify/interval_tree.py +400 -0
  484. snappy/verify/krawczyk_shapes_engine.py +518 -0
  485. snappy/verify/maximal_cusp_area_matrix/__init__.py +46 -0
  486. snappy/verify/maximal_cusp_area_matrix/cusp_tiling_engine.py +419 -0
  487. snappy/verify/maximal_cusp_area_matrix/cusp_translate_engine.py +153 -0
  488. snappy/verify/real_algebra.py +286 -0
  489. snappy/verify/shapes.py +25 -0
  490. snappy/verify/short_slopes.py +200 -0
  491. snappy/verify/square_extensions.py +1005 -0
  492. snappy/verify/test.py +78 -0
  493. snappy/verify/upper_halfspace/__init__.py +9 -0
  494. snappy/verify/upper_halfspace/extended_matrix.py +100 -0
  495. snappy/verify/upper_halfspace/finite_point.py +283 -0
  496. snappy/verify/upper_halfspace/ideal_point.py +426 -0
  497. snappy/verify/volume.py +128 -0
  498. snappy/version.py +2 -0
  499. snappy-3.2.dist-info/METADATA +58 -0
  500. snappy-3.2.dist-info/RECORD +503 -0
  501. snappy-3.2.dist-info/WHEEL +5 -0
  502. snappy-3.2.dist-info/entry_points.txt +2 -0
  503. snappy-3.2.dist-info/top_level.txt +28 -0
@@ -0,0 +1,301 @@
1
+ Step-by-step examples: Part 3
2
+ =============================
3
+
4
+ .. _ptolemy-example-using-magma-sage:
5
+
6
+ Computing solutions with magma or sage vs retrieving solutions
7
+ --------------------------------------------------------------
8
+
9
+ So far, we querried the database for solutions to a Ptolemy variety::
10
+
11
+ >>> p = Manifold("m011").ptolemy_variety(2)
12
+ >>> p.retrieve_solutions()
13
+ Trying to retrieve solutions from http://ptolemy.unhyperbolic.org/data/pgl2/OrientableCuspedCensus/03_tetrahedra/m011__sl2_c0.magma_out ...
14
+ Parsing...
15
+ [PtolemyCoordinates(
16
+ {'c_0011_0': 1,
17
+ 'c_0011_1': -1,
18
+ 'c_0011_2': -1,
19
+ 'c_0101_0': -1,
20
+ 'c_0101_1': Mod(x^2 + x, x^3 + 2*x^2 + x + 1),
21
+ ...
22
+ 's_3_2': 1},
23
+ is_numerical = False, ...)]
24
+
25
+ We can use ``compute_solutions`` instead of ``retrieve_solutions`` to actually compute the solutions ourselves (for example, for a non-census triangulation not in the database). Currently, we support two engines:
26
+
27
+ * `sage <http://www.sagemath.org/>`_ (which is free, but can only solve a fairly limited number of Ptolemy varieties)
28
+ * `magma <http://magma.maths.usyd.edu.au/magma/>`_
29
+
30
+ If you are inside sage::
31
+
32
+ >>> p = Manifold("m011").ptolemy_variety(2)
33
+ >>> p.compute_solutions(engine = 'sage')
34
+ [PtolemyCoordinates(
35
+ {'c_0011_0': 1,
36
+ 'c_0011_1': -1,
37
+ 'c_0011_2': -1,
38
+ 'c_0101_0': -1,
39
+ 'c_0101_1': Mod(x^2 + x, x^3 + 2*x^2 + x + 1),
40
+ ...
41
+ 's_3_2': 1},
42
+ is_numerical = False, ...)]
43
+
44
+ If you have magma installed::
45
+
46
+ >>> p = Manifold("m011").ptolemy_variety(2)
47
+ >>> p.compute_solutions(engine = 'magma', verbose = True)
48
+ Writing to file: /tmp/tmppNSc8S/m011__sl2_c0.magma
49
+ Magma's output in: /tmp/tmppNSc8S/m011__sl2_c0.magma_out
50
+ Command: ulimit -m 732421; echo | magma "/tmp/tmppNSc8S/m011__sl2_c0.magma" > "/tmp/tmppNSc8S/m011__sl2_c0.magma_out"
51
+ Starting magma...
52
+ magma finished.
53
+ Parsing magma result...
54
+ [PtolemyCoordinates(
55
+ {'c_0011_0': 1,
56
+ 'c_0011_1': -1,
57
+ 'c_0011_2': -1,
58
+ 'c_0101_0': -1,
59
+ 'c_0101_1': Mod(x^2 + x, x^3 + 2*x^2 + x + 1),
60
+ ...
61
+ 's_3_2': 1},
62
+ is_numerical = False, ...)]
63
+
64
+ To get an idea of what Ptolemy varieties magma can still handle, have a look at the `database <http://ptolemy.unhyperbolic.org/html/summary.html>`_: for *N* = 2, the computations up to 12 tetrahedra only took
65
+
66
+ **Remark:** The magma engine is not expected to work under windows. It will also fail if magma is not installed or the magma executable cannot be found. The ptolemy module creates a temporary file (``m011__sl2_c0`` here) and also gives the command it tried to run to process the file through magma. If you believe that magma is installed correctly on your system but encounter an error, you can try to run the command yourself to understand better what is going on. Feel free to report a bug (to enischte at gmail dot com) including the temporary files (``m011__sl2_c0`` and ``m011__sl2_c0.out`` here) and any other error messages.
67
+
68
+ **Remark:** If no engine is specified, it is assumed to be sage when used inside sage and magma instead.
69
+
70
+ .. _ptolemy-example-complex-volume:
71
+
72
+ Computing the complex volume
73
+ ----------------------------
74
+
75
+ Similar to ``volume_numerical``, we can compute the complex volume (volume + i Chern-Simons) for all representations (that are :ref:`generically decorated <ptolemy-generically-decorated>`).
76
+
77
+ Here is an example computing the solutions to the Ptolemy variety ourselves::
78
+
79
+ >>> Manifold("m011").ptolemy_variety(2,'all').compute_solutions().complex_volume_numerical()
80
+ [[[-4.30211422042248 E-16 + 0.725471193740844*I,
81
+ -0.942707362776931 + 0.459731436553693*I,
82
+ 0.942707362776931 + 0.459731436553693*I]],
83
+ [[4.64255370258293 E-15 + 0.680993020093457*I,
84
+ 3.94215909915729 E-15 + 0.312682687518267*I,
85
+ -2.78183391239608 - 0.496837853805869*I,
86
+ 2.78183391239608 - 0.496837853805869*I]]]
87
+
88
+ And here the same example retrieving solutions from the database::
89
+
90
+ >>> Manifold("m011").ptolemy_variety(2,'all').retrieve_solutions().complex_volume_numerical()
91
+ Trying to retrieve solutions from http://ptolemy.unhyperbolic.org/data/pgl2/OrientableCuspedCensus/03_tetrahedra/m011__sl2_c0.magma_out ...
92
+ Parsing...
93
+ Trying to retrieve solutions from http://ptolemy.unhyperbolic.org/data/pgl2/OrientableCuspedCensus/03_tetrahedra/m011__sl2_c1.magma_out ...
94
+ Parsing...
95
+ [[[-4.30211422042248 E-16 + 0.725471193740844*I,
96
+ ...
97
+ 2.78183391239608 - 0.496837853805869*I]]]
98
+
99
+ .. _ptolemy-detailed-example-matrices:
100
+
101
+ Computing the matrices for a different presentation
102
+ ---------------------------------------------------
103
+
104
+ The :py:meth:`~snappy.Triangulation.fundamental_group` method of a SnapPy triangulation can yield different presentations by supplying optional arguments such as ``simplify_presentation`` and ``minimize_number_of_generators``. If we have a word in one of these presentations and want to evaluate its image under the representation, we need to supply the presentation as follows::
105
+
106
+ >>> M=Manifold("m003")
107
+ >>> sol = M.ptolemy_variety(2).retrieve_solutions()[0]
108
+ >>> G = M.fundamental_group(simplify_presentation = False)
109
+ >>> sol.evaluate_word('a', G)
110
+
111
+ Again, we can check that the representation actually assigns the identity to all relators:
112
+
113
+ >>> G
114
+ Generators:
115
+ a,b,c
116
+ Relators:
117
+ BCaC
118
+ AbCbA
119
+ >>> sol.evaluate_word('AbCbA', G)
120
+ [[Mod(1, x^2 - x - 1), 0], [0, Mod(1, x^2 - x - 1)]]
121
+ >>> for relator in G.relators():
122
+ ... print(sol.evaluate_word(relator, G))
123
+ [[Mod(1, x^2 - x - 1), 0], [0, Mod(1, x^2 - x - 1)]]
124
+ [[Mod(1, x^2 - x - 1), 0], [0, Mod(1, x^2 - x - 1)]]
125
+
126
+
127
+ .. _ptolemy-example-boundary-holonomy:
128
+
129
+ Computing the images of the peripheral curves for a representation
130
+ ------------------------------------------------------------------
131
+
132
+ The object returned by :py:meth:`~snappy.Triangulation.fundamental_group` also contains words for the peripheral curves of a manifold. We can compute the corresponding matrices::
133
+
134
+ >>> M = Manifold("m003")
135
+ >>> G = M.fundamental_group()
136
+ >>> sol = M.ptolemy_variety(2,1).retrieve_solutions()[0]
137
+ >>> for i, cusp_curves in enumerate(G.peripheral_curves()):
138
+ ... print("Cusp %d:" % i)
139
+ ... for cusp_curve in cusp_curves:
140
+ ... print(sol.evaluate_word(cusp_curve, G))
141
+ Cusp 0:
142
+ [[Mod(2*x - 3, x^2 + x + 1), Mod(2*x, x^2 + x + 1)], [Mod(6, x^2 + x + 1), Mod(-2*x + 1, x^2 + x + 1)]]
143
+ [[Mod(-2*x - 5, x^2 + x + 1), Mod(-2, x^2 + x + 1)], [Mod(6*x + 6, x^2 + x + 1), Mod(2*x + 3, x^2 + x + 1)]]
144
+
145
+ **Remark:** For each cusp, we can conjugate these matrices into *P* since the representation is :ref:`boundary-unipotent <ptolemy-boundary-unipotent>`. We might implement a method returning a matrix in *P* for the longitude and meridian of a cusp in the future (simply by finding loops corresponding to a longitude and meridian as path of short edges in the truncated simplex in Figure 17 of [GGZ2012]_).
146
+
147
+ .. _ptolemy-example-find-witness:
148
+
149
+ Finding a witness point for a positively dimensional component of the Ptolemy variety
150
+ -------------------------------------------------------------------------------------
151
+
152
+ We already saw an :ref:`example of a positively dimensional component <ptolemy-non-zero-dim-comp>`. By flattening, we obtain a list of all the components of the Ptolemy varieties for all obstruction classes::
153
+
154
+ >>> M=Manifold("m371")
155
+ >>> sols = M.ptolemy_variety(2,'all').retrieve_solutions().flatten()
156
+
157
+ We can now just look at the positively dimensional ones::
158
+
159
+ >>> one_dim_sols = [ sol for sol in sols if sol.dimension > 0]
160
+ >>> len(one_dim_sols)
161
+ 1
162
+ >>> one_dim_sols
163
+ [[ PtolemyCoordinates(
164
+ {'c_0011_0': 1,
165
+ 'c_0011_1': -1,
166
+ 'c_0011_2': -1,
167
+ 'c_0011_3': Mod(-x - 1, x^2 + x + 2),
168
+ ...,
169
+ 's_3_4': 1},
170
+ is_numerical = False, ...)
171
+ (witnesses for NonZeroDimensionalComponent(dimension = 1, free_variables = ['c_0110_2'])) ]]
172
+
173
+ We see that we have one such component and that each component is actually itself a list of witness points.
174
+
175
+ **Remark:** Witness points are a fairly new feature and not all files in the database have been updated yet to contain them. You might instead just see ``[NonZeroDimensionalComponent(dimension = 1)]``.
176
+
177
+ **Remark:** The ptolemy module also reports the `free variables` for the positively dimensional components. We can set these variables to random values and generically will obtain a new witness point.
178
+
179
+ We can access the witness point(s) for each component just by iteration::
180
+
181
+ >>> for component in one_dim_sols:
182
+ ... print("Component:")
183
+ ... for witness in component:
184
+ ... print(" Witness:")
185
+ ... print(" Volumes:", witness.volume_numerical())
186
+ Component:
187
+ Witness:
188
+ Volumes: [0.E-38, 0.E-38]
189
+
190
+ The different volumes in a line correspond to different Galois conjugates of the same `algebraic` witness point.
191
+
192
+ .. _ptolemy-example-non-zero-dim-rep:
193
+
194
+ Finding non-zero dimensional families of boundary-unipotent representations
195
+ ---------------------------------------------------------------------------
196
+
197
+ We now revisit the :ref:`1-dimensional component of the Ptolemy variety<ptolemy-non-zero-dim-comp>` and answer the question whether this yields a 1-dimensional family of representations or not. We pick a :ref:`witness point <ptolemy-example-find-witness>` for the component and check the :ref:`matrices for the peripheral curves <ptolemy-example-boundary-holonomy>`::
198
+
199
+ >>> M = Manifold("m371")
200
+ >>> G = M.fundamental_group()
201
+ >>> sols = M.ptolemy_variety(2,'all').retrieve_solutions().flatten()
202
+ >>> components = [ sol for sol in sols if sol.dimension > 0]
203
+ >>> for component in components:
204
+ ... print("Component of dimension %d" % component.dimension)
205
+ ... for witness in component:
206
+ ... for i, cusp_curves in enumerate(G.peripheral_curves()):
207
+ ... print(" Cusp %d:" % i)
208
+ ... for cusp_curve in cusp_curves:
209
+ ... print(" ", witness.evaluate_word(cusp_curve, G))
210
+ Component of dimension 1
211
+ Cusp 0:
212
+ [[Mod(1, x^2 + x + 2), 0], [0, Mod(1, x^2 + x + 2)]]
213
+ [[Mod(1, x^2 + x + 2), 0], [0, Mod(1, x^2 + x + 2)]]
214
+
215
+ We see that the matrices are trivial, thus this 1-dimensional component corresponds to a 1-dimensional family of :ref:`decorations <ptolemy-generically-decorated>` of the same (up to Galois conjugacy) representation. The corresponding family of representation is 0-dimensional.
216
+
217
+ Let us try another manifold, ``m410``:
218
+
219
+ >>> M = Manifold("m410")
220
+ >>> G = M.fundamental_group()
221
+ >>> sols = M.ptolemy_variety(2,'all').retrieve_solutions().flatten()
222
+ >>> components = [ sol for sol in sols if sol.dimension > 0]
223
+ >>> for component in components:
224
+ ... print("Component of dimension %d" % component.dimension)
225
+ ... for witness in component:
226
+ ... for i, cusp_curves in enumerate(G.peripheral_curves()):
227
+ ... print(" Cusp %d:" % i)
228
+ ... for cusp_curve in cusp_curves:
229
+ ... print(" ", witness.evaluate_word(cusp_curve, G))
230
+ Component of dimension 1
231
+ Cusp 0:
232
+ [[Mod(1, x^2 + 2), 0], [0, Mod(1, x^2 + 2)]]
233
+ [[Mod(1, x^2 + 2), Mod(x, x^2 + 2)], [0, Mod(1, x^2 + 2)]]
234
+ Component of dimension 1
235
+ Cusp 0:
236
+ [[Mod(1, x^2 + 7), 0], [0, Mod(1, x^2 + 7)]]
237
+ [[Mod(1, x^2 + 7), 0], [0, Mod(1, x^2 + 7)]]
238
+
239
+ It has two 1-dimensional components, and for the first one, we see that the matrices are non-trivial, so this corresponds indeed to a 1-dimensional family of representations.
240
+
241
+ **Remark:** The witness points are chosen so that they are not at the intersection of two positively dimensional components. This is for the following reason: it could happen that there is a 1-dimensional family of representations which contains points where the boundary holonomy becomes trivial. This yields a representation where the above matrices are trivial yet it is part of a 1-dimensional family of boundary-unipotent representations. In the ptolemy variety, however, this means that two non-zero dimensional components (one corresponding to a family of decorations, the other to a family of representations) intersect.
242
+
243
+ Representations that are the same as PSL(2, **C**)-representations
244
+ ------------------------------------------------------------------
245
+
246
+ Let us compare the volumes of ``m009`` and ``m159``:
247
+
248
+ >>> Manifold("m009").ptolemy_variety(2,'all').retrieve_solutions().volume_numerical()
249
+ [[],
250
+ [],
251
+ [],
252
+ [[2.66674478344907, -2.66674478344907, 2.66674478344907, -2.66674478344907]]]
253
+ >>> Manifold("m159").ptolemy_variety(2,'all').retrieve_solutions().volume_numerical()
254
+ [[[0.E-38, 0.E-37, 0.E-37],
255
+ [-2.02988321281931, 2.02988321281931, -2.02988321281931, 2.02988321281931]],
256
+ [[0.698544082784440, -0.698544082784440, 3.82168758617998, -3.82168758617998],
257
+ [0.E-37, 0.E-37, 0.E-37, 0.E-37]]]
258
+
259
+ In both cases, some volumes appear twice (2.66674... for ``m009`` and 2.02988... for ``m159``). In the case of ``m009``, these two volumes correspond to the same PSL(2, **C**)-representation and in case ``m159`` to two different boundary-unipotent SL(2, **C**)-representations that are the same as PSL(2, **C**)-representations (see :ref:`ptolemy-psl-multiplicity`). We can get the multiplicity by calling ``degree_to_shapes``::
260
+
261
+ >>> Manifold("m009").ptolemy_variety(2).degree_to_shapes()
262
+ 2
263
+ >>> Manifold("m159").ptolemy_variety(2).degree_to_shapes()
264
+ 1
265
+
266
+ When we convert the Ptolemy coordinates to shapes/cross ratios for ``m009``, we also see that we see the same shape assignment appears twice (at least numerically)::
267
+
268
+ >>> Manifold("m009").ptolemy_variety(2,'all').retrieve_solutions().numerical().cross_ratios()
269
+ [[],
270
+ [],
271
+ [],
272
+ [[CrossRatios(
273
+ {'z_0000_0': 0.500000000000000 + 1.32287565553230*I,
274
+ 'z_0000_1': 0.375000000000000 + 0.330718913883074*I,
275
+ 'z_0000_2': 0.500000000000000 + 1.32287565553230*I,
276
+ 'zp_0000_0': 0.250000000000000 + 0.661437827766148*I,
277
+ ...},
278
+ is_numerical = True, ...),
279
+ CrossRatios(
280
+ {'z_0000_0': 0.500000000000000 - 1.32287565553230*I,
281
+ 'z_0000_1': 0.375000000000000 - 0.330718913883074*I,
282
+ 'z_0000_2': 0.500000000000000 - 1.32287565553230*I,
283
+ ...}
284
+ is_numerical = True, ...),
285
+ CrossRatios(
286
+ {'z_0000_0': 0.500000000000000 + 1.32287565553230*I,
287
+ 'z_0000_1': 0.375000000000000 + 0.330718913883074*I,
288
+ 'z_0000_2': 0.500000000000000 + 1.32287565553230*I,
289
+ ...},
290
+ is_numerical = True, ...),
291
+ CrossRatios(
292
+ {'z_0000_0': 0.500000000000000 - 1.32287565553230*I,
293
+ 'z_0000_1': 0.375000000000000 - 0.330718913883074*I,
294
+ 'z_0000_2': 0.500000000000000 - 1.32287565553230*I,
295
+ ...},
296
+ is_numerical = True, ...)]]]
297
+
298
+
299
+
300
+ **Remark:** The tables at `ptolemy.unhyperbolic.org <http://ptolemy.unhyperbolic.org/html/summary.html>`_ use the cross ratios to list representations that are the same as PSL(2, **C**)-representation only once.
301
+
@@ -0,0 +1,61 @@
1
+ Step-by-step examples: Part 4
2
+ =============================
3
+
4
+ **Advanced topics. Still under construction.**
5
+
6
+ .. _ptolemy-example-structure-of-solution:
7
+
8
+ The structure of an exact solution
9
+ ----------------------------------
10
+
11
+ A solution to the Ptolemy variety (here ``sol``) is an object of type ``PtolemyCoordinates`` which is a subclass of a python dictionary. It assigns a value to each Ptolemy coordinate c\ :sub:`...` (the s\ :sub:`...` are related to the obstruction class which is trivial here). We can get the value assigned to a particular Ptolemy coordinate as follows::
12
+
13
+ >>> sol = Manifold("m003").ptolemy_variety(2).retrieve_solutions()[0]
14
+ >>> sol['c_0101_1']
15
+ Mod(-x, x^2 - x - 1)
16
+
17
+ This is a pari object of type `POLMOD`. It means that the solution is in the number field with defining polynomial *x*\ :sup:`2`\ - *x* - 1 and that it is equal to - *x* where *x* is a root in the defining polynomial.
18
+
19
+ We can get to the parts of a pari `POLMOD` object by::
20
+
21
+ >>> sol['c_0101_1'].lift()
22
+ -x
23
+ >>> sol['c_0101_1'].mod()
24
+ x^2 - x - 1
25
+
26
+ These objects also support the field operations, here we are computing a cross ratio::
27
+
28
+ >>> (sol['c_0101_0'] * sol['c_1010_0']) / (sol['c_1001_0'] * sol['c_0110_0'])
29
+ Mod(x, x^2 - x - 1)
30
+
31
+ **Remark:** We would prefer to represent these using types that are better suited when using sage such as NumberField and NumberFieldElement. In the future, we might jettison support of the ptolemy module outside of sage and use sage's native types.
32
+
33
+ Rational Univariate Representation
34
+ ----------------------------------
35
+
36
+ We have some limited support for the `Rational Univariate Representation`, for example::
37
+
38
+ >>> sols = Manifold("m069").ptolemy_variety(3).retrieve_solutions()
39
+ >>> sols[4]
40
+ PtolemyCoordinates(
41
+ { 'c_0201_0': ( Mod(-426088934700737884313191344*x^24 + 4110489425474123899213651272*x^23 ...
42
+ - 67064980598091504185767190,
43
+ x^25 ... - 196124*x^4 + 14010*x^3 - 1560*x^2 + 72*x - 1)
44
+ ) / ( Mod(875895332415105303646551573*x^24 - 8450034810535061601312104296*x^23 ...
45
+ + 137871639973525691285247446,
46
+ x^25 ... - 196124*x^4 + 14010*x^3 - 1560*x^2 + 72*x - 1) ),
47
+ ...
48
+ },
49
+ is_numerical = False, ...)
50
+
51
+ This means that ``c_0201_0`` is assigned the fraction of those two ``POLDMOD`` objects.
52
+
53
+ **Remark:** This is still under development.
54
+
55
+ TODO
56
+ ----
57
+
58
+ * Give an overview of the classes and the methods.
59
+ * Explain how the magma file are generated. Say that magma computes the RadicalDecomposition. Ptolemy module can process the lexicographic Groebner basis of a prime ideal.
60
+
61
+
@@ -0,0 +1,105 @@
1
+ Mathematical preliminaries
2
+ ==========================
3
+
4
+ Given a triangulation, the ptolemy module will produce a system of equation that is equivalent to
5
+ the reduced Ptolemy variety (see [GTZ2011]_, Section 5 of [GGZ2012]_, and Proposition 4.7 of [GGZ2014]_).
6
+
7
+ A solution
8
+ to this system of equations where no Ptolemy coordinate is zero yields a :ref:`boundary-unipotent <ptolemy-boundary-unipotent>`
9
+ SL(*N*, **C**)-representation, respectively, PSL(*N*, **C**)-representation (see :ref:`obstruction-class`).
10
+
11
+ Note that a solution where some Ptolemy coordinates are zero might not have enough information
12
+ to recover the representation - thus the ptolemy module discards those and thus might miss some
13
+ boundary-unipotent representations for the chosen triangulation (see :ref:`ptolemy-generically-decorated`).
14
+ This is the same problem that the
15
+ gluing equations for finding PGL(2, **C**)-representations suffer from where simplices in the developing
16
+ map can be degenerate and yielding cross ratios that are 0, 1, or :math:`\infty`\ .
17
+
18
+ .. _ptolemy-boundary-unipotent:
19
+
20
+ Boundary-unipotent
21
+ ------------------
22
+
23
+ We call a SL(*N*, **C**)-representation *boundary-unipotent* if each peripheral subgroup is taken to
24
+ a conjugate of the unipotent group *P* of upper unit-triangular matrices. Similarly, we call
25
+ a PSL(*N*, **C**)-representation *boundary-unipotent* if each peripheral subgroup is taken to a conjugate
26
+ of the unipotent group of PSL(*N*, **C**), i.e., the image of *P* under the projection SL(*N*, **C**)\ :math:`\rightarrow`\ PSL(*N*, **C**).
27
+
28
+ Note that even when boundary-unipotent PSL(*N*, **C**)-representation can be lifted to an
29
+ SL(*N*, **C**)-representation, the lift might no longer be boundary-unipotent, i.e., there might be
30
+ a peripheral curve whose image now is conjugate to an upper triangular matrix with an *N*-th root
31
+ of unity on the diagonal. For example, if the manifold is hyperbolic and has one cusp,
32
+ any lift of the geometric representation will take the longitude
33
+ to a matrix with trace -2 and is thus not boundary-unipotent as SL(2, **C**)-representation.
34
+
35
+ .. _obstruction-class:
36
+
37
+ Obstruction class
38
+ -----------------
39
+
40
+ Given a boundary-unipotent PSL(*N*, **C**)-representation, we obtain an *obstruction class* in H\ :sup:`2`\ (M,\ :math:`\partial`\ M; **Z**/*N*)
41
+ that is trivial if and only if the representations lifts to a boundary-unipotent SL(*N*, **C**)-representation (see Section 9.1 of [GTZ2011]_ and Section 1.3 of [GGZ2014]_).
42
+ Given a triangulation and an element in H\ :sup:`2`\ (M,\ :math:`\partial`\ M; **Z**/*N*), the Ptolemy variety can be modified to find
43
+ the boundary-unipotent
44
+ PSL(*N*, **C**)-representations with that obstruction class (for *N* > 2 this is implemented here but has not been published yet).
45
+
46
+ Note that two elements in H\ :sup:`2`\ (M,\ :math:`\partial`\ M; **Z**/*N*)
47
+ related by multiplication by an element in (**Z**/*N*)\ :sup:`*` yield Ptolemy
48
+ varieties corresponding to picking different Galois conjugates for the *N*-th root of unity. Thus, it is enough
49
+ to consider a representative for each element in the quotient H\ :sup:`2`\ (M,\ :math:`\partial`\ M; **Z**/*N*)/(**Z**/*N*)\ :sup:`*`\ .
50
+
51
+ .. _ptolemy-psl-multiplicity:
52
+
53
+ SL(*N*, **C**) vs PSL(*N*, **C**)
54
+ ---------------------------------
55
+
56
+ The reduced Ptolemy variety for the trivial obstruction class can have several points (say *d*) giving different SL(*N*, **C**)-representations that are the same as PSL(*N*, **C**)-representations. Similarly, for the non-trivial obstruction class we can have *d* points in the reduced Ptolemy variety yielding the same PSL(*N*, **C**)-representation.
57
+
58
+ The degree *d* of this correspondence is the size of H\ :sup:`1`\ (\ :math:`\hat{M}`\ ; **Z**/*N*) where :math:`\hat{M}` is the cell complex obtained from collapsing each cusp to a point.
59
+
60
+ .. _ptolemy-generically-decorated:
61
+
62
+ Generically decorated representations
63
+ -------------------------------------
64
+
65
+ We want to point out two important facts when using the reduced Ptolemy variety to find boundary-unipotent representations:
66
+
67
+ * We miss representations that are not generically decorated (as mentioned above). This happens but rarely.
68
+ * A positively dimensional component in the reduced Ptolemy variety might mean two things (which we can distinguish by looking at the images of the peripheral groups):
69
+ * a positively dimensional family of boundary-unipotent representations or
70
+ * a family of decorations of the same representation.
71
+
72
+ The reason for this is that the reduced Ptolmey variety does not parametrize representations but generically decorated representations (which can also be thought of as development maps). We just list the facts about decorations important to us here and refer the reader for details to Section 4 of [GTZ2011]_ and Section 8 of [GGZ2012]_ (where decoration would be called *B*-decoration or (SL(*N*), **C**), *B*)-decoration with *B* the Borel group of upper triangular matrices):
73
+
74
+ * Every boundary-unipotent representation of a cusped manifold admits a decoration. The set of decorations of a representation is intrinsic to the representation and independent of the triangulation.
75
+ * The representation determines the decoration uniquely if and only if the representation is boundary-non-degenerate (which most representations are).
76
+ * Given a decorated representation and an ideal triangulation of a cusped manifold, we obtain Ptolemy coordinates.
77
+ * If all the resulting Ptolemy coordinates are non-zero, we call the representation *generically decorated* - a notion that depends on the chosen triangulation.
78
+ * The reduced Ptolemy variety parametrizes generically decorated and boundary-unipotent representations.
79
+
80
+
81
+ .. _ptolemy-reduced-variety:
82
+
83
+ Reduced Ptolemy variety
84
+ -----------------------
85
+
86
+ We will actually always use the reduced Ptolemy variety, i.e., the system of equation that consists of the Ptolemy relations (always of the form
87
+ :math:`\pm` c\ :sub:`...` c\ :sub:`...` :math:`\pm` c\ :sub:`...` c\ :sub:`...` :math:`\pm` c\ :sub:`...` c\ :sub:`...`\) and extra equations fixing an appropriate set of (N-1) Ptolemy coordinates per cusp as described in Proposition 4.7 of [GGZ2014]_. This is because the Ptolemy relations alone admit an action by (**C**\ :sup:`*`\ )\ :sup:`(N-1)` for each cusp that does not change the representation it yields.
88
+
89
+ In other words, the Ptolemy variety parametrizes *P*-decorations and the reduced Ptolemy variety parametrizes *B*-decorations.
90
+
91
+ Future work
92
+ -----------
93
+
94
+ In unpublished work, we developed an algorithm that takes some triangulation of a manifold and constructs a set of triangulations and corresponding Ptolemy varieties (with extra edge relations) such that we can guarantee that all boundary-unipotent PSL(2,C)-representations are found - not just the ones that are generically decorated with respect to the chosen triangulation. This is inspired by [S2009]_. The ptolemy module might support this in the future.
95
+
96
+ In [Z2014]_, the Ptolemy variety was extended to detect non boundary-unipotent representations as well. The ptolemy module might produce these varieties in the future. This might offer another way of computing A-polynomials - that when combined with the above algorithm is guaranteed to be the full A-polynomial and not just a factor of it.
97
+
98
+ References
99
+ ----------
100
+
101
+ .. [S2009] Henry Segerman: A generalisation of the deformation variety, http://arxiv.org/abs/0904.1893
102
+ .. [GTZ2011] Stavros Garoufalidis, Dylan P. Thurston, and Christian K. Zickert: The Complex Volume of SL(n,C)-Representations of 3-Manifolds, http://arxiv.org/abs/1111.2828
103
+ .. [GGZ2012] Stavros Garoufalidis, Matthias Goerner, and Christian K. Zickert: Gluing Equations for PGL(n,C)-Representations of 3-Manifolds, http://arxiv.org/abs/1207.6711
104
+ .. [GGZ2014] Stavros Garoufalidis, Matthias Goerner, and Christian K. Zickert: The Ptolemy Field of 3-Manifold Representations, http://arxiv.org/abs/1401.5542
105
+ .. [Z2014] Christian K. Zickert: Ptolemy coordinates, Dehn invariant, and the A-polynomial, http://arxiv.org/abs/1405.0025
@@ -0,0 +1,21 @@
1
+ ==============================
2
+ Screenshots: SnapPy in action
3
+ ==============================
4
+
5
+ Mac OS X
6
+ ---------
7
+
8
+ .. image:: images/mac.png
9
+ :width: 717 px
10
+
11
+
12
+ Linux (Ubuntu 13.10)
13
+ ------------------------
14
+
15
+ .. image:: images/ubuntu.png
16
+
17
+
18
+ Windows 7
19
+ --------------------
20
+
21
+ .. image:: images/win7.png
@@ -0,0 +1,87 @@
1
+ .. Documentation of the Snap part of SnapPy
2
+ .. automodule:: snappy.snap
3
+
4
+ Number theory of hyperbolic 3-manifolds
5
+ =======================================
6
+
7
+ SnapPy has support for arbitrary-precision computation and for
8
+ identifying number fields associated to hyperbolic 3-manifolds. While
9
+ this functionality is less than that of `Snap
10
+ <http://snap-pari.sf.net/>`_, it is already useful. Except for the
11
+ first example, one currently needs to use SnapPy inside of `Sage
12
+ <http://sagemath.org>`_ to have access to these features. Here's how
13
+ to find the tetrahedra shapes to high-precision::
14
+
15
+ sage: import snappy
16
+ sage: M = snappy.Manifold('m004')
17
+ sage: M.tetrahedra_shapes('rect', bits_prec=100)
18
+ [0.50000000000000000000000000000 + 0.86602540378443864676372317075*I, 0.50000000000000000000000000000 + 0.86602540378443864676372317075*I]
19
+ sage: M.tetrahedra_shapes('rect', dec_prec=100)[0]
20
+ 0.500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +
21
+ 0.866025403784438646763723170752936183471402626905190314027903489725966508454400018540573093378624288*I
22
+
23
+ One can also compute the holonomy representation to any precision::
24
+
25
+ sage: G = M.polished_holonomy(bits_prec=100)
26
+ sage: G.SL2C('a')
27
+ [0.50000000000000000000000000000 + 0.86602540378443864676372317075*I -1.0000000000000000000000000000*I]
28
+ [ 1.0000000000000000000000000000*I 1.0000000000000000000000000000 - 1.7320508075688772935274463415*I]
29
+
30
+ You can also try to guess the shapes exactly using an LLL-based
31
+ algorithm of the type pioneered by Snap::
32
+
33
+ sage: T = M.tetrahedra_field_gens()
34
+ sage: T.find_field(prec=100, degree=10, optimize=True)
35
+ (Number Field in z with defining polynomial x^2 - x + 1, <ApproxAN: 0.5 + 0.866025403784*I>, [x, x])
36
+
37
+ You can do the same for various other fields via the methods
38
+ ``trace_field_gens``, ``invariant_trace_field_gens``, and ``holonomy_matrix_entries``.
39
+
40
+ In more complicated examples, one needs to use higher precision and/or
41
+ degree to actually find the exact values::
42
+
43
+ sage: N = snappy.Manifold('m004(1,3)')
44
+ sage: K = N.trace_field_gens()
45
+ sage: K.find_field(prec=100, degree=10, optimize=True) # Fails, so no output
46
+ sage: K.find_field(prec=200, degree=20, optimize=True)[0]
47
+ Number Field in z with defining polynomial x^11 - 2*x^10 - 8*x^9 + 16*x^8 + 22*x^7 - 44*x^6 - 25*x^5 + 50*x^4 + 11*x^3 - 22*x^2 - x + 1
48
+
49
+ We can also compute various hyperbolicly-twisted Alexander
50
+ polynomials, as described `here <http://dunfield.info/torsion>`_::
51
+
52
+ sage: M = snappy.Manifold('5_2')
53
+ sage: M.alexander_polynomial()
54
+ 2*a^2 - 3*a + 2
55
+ sage: M.hyperbolic_torsion(bits_prec=100)
56
+ (2.3376410213776269870195455729 - 0.56227951206230124389918214504*I)*a^2
57
+ - 4.0000000000000000000000000003*a
58
+ + 2.3376410213776269870195455731 - 0.56227951206230124389918214477*I
59
+ sage: M.hyperbolic_SLN_torsion(3, 100) # Dubois-Yamagachi adjoint torsion
60
+ (0.40431358073618481197132660504 +
61
+ 0.75939451500971650241038772223*I)*a^3
62
+ + (2.9032849613891083021420278850 -
63
+ 4.1185388389935516999882632998*I)*a^2
64
+ + (-2.9032849613891083021420278809 +
65
+ 4.1185388389935516999882633007*I)*a
66
+ - 0.40431358073618481197132661847 - 0.75939451500971650241038771418*I
67
+ sage: M.hyperbolic_SLN_torsion(4, 100) # Why not?
68
+ (2.5890988184099251088892745185 + 3.5126610817613336586374292713*I)*a^4
69
+ + (10.357403823939297224437742077 - 13.378446302375451727042633120*I)*a^3
70
+ + (-26.821802363180149782221451472 + 7.0253221635226673172748587283*I)*a^2
71
+ + (10.357403823939297224437738856 - 13.378446302375451727042631346*I)*a
72
+ + 2.5890988184099251088892549440 + 3.5126610817613336586374448040*I
73
+
74
+ You can find out more about each of these methods using
75
+ introspection::
76
+
77
+ sage: M.hyperbolic_torsion?
78
+ Definition: M.hyperbolic_torsion(M, bits_prec=100, all_lifts=False, wada_conventions=False, phi=None)
79
+ Docstring:
80
+ Computes the hyperbolic torsion polynomial as defined in [DFJ].
81
+
82
+ >>> M = Manifold('K11n42')
83
+ >>> M.alexander_polynomial()
84
+ 1
85
+ >>> tau = M.hyperbolic_torsion(bits_prec=200)
86
+ >>> tau.degree()
87
+ 6
@@ -0,0 +1,28 @@
1
+ .. Documentation of the Python part of SnapPy
2
+
3
+ The snappy module and its classes
4
+ =======================================
5
+
6
+ SnapPy is centered around a Python interface for SnapPea called
7
+ "snappy", and this is what you're interacting with in the main "SnapPy
8
+ command shell" window. The main class is Manifold, which is an ideal
9
+ triangulation of the interior of a compact 3-manifold with torus
10
+ boundary, where each tetrahedron has been assigned the geometry of
11
+ an ideal tetrahedron in hyperbolic 3-space. A Dehn-filling can be
12
+ specified for each boundary component, allowing the description of
13
+ closed 3-manifolds and some orbifolds. The class Manifold is derived
14
+ from the simpler Triangulation class which lacks any geometric
15
+ structure. There are also some additional classes for things like
16
+ fundamental groups, Dirichlet domains, etc. Snappy comes with a large
17
+ library of 3-manifolds, some of which are grouped together in censuses.
18
+
19
+
20
+ .. toctree::
21
+ :maxdepth: 2
22
+
23
+ manifold
24
+ manifoldhp
25
+ triangulation
26
+ additional_classes
27
+ censuses
28
+