snappy 3.1.1__cp38-cp38-win_amd64.whl → 3.2__cp38-cp38-win_amd64.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 (476) hide show
  1. snappy/CyOpenGL.cp38-win_amd64.pyd +0 -0
  2. snappy/SnapPy.cp38-win_amd64.pyd +0 -0
  3. snappy/SnapPyHP.cp38-win_amd64.pyd +0 -0
  4. snappy/__init__.py +299 -402
  5. snappy/app.py +70 -20
  6. snappy/browser.py +18 -17
  7. snappy/canonical.py +249 -0
  8. snappy/{verify/cusp_shapes.py → cusps/__init__.py} +8 -18
  9. snappy/cusps/cusp_area_matrix.py +101 -0
  10. snappy/{verify/cusp_areas.py → cusps/cusp_areas_from_matrix.py} +23 -39
  11. snappy/cusps/maximal_cusp_area_matrix.py +136 -0
  12. snappy/cusps/test.py +21 -0
  13. snappy/cusps/trig_cusp_area_matrix.py +63 -0
  14. snappy/database.py +10 -9
  15. snappy/decorated_isosig.py +337 -114
  16. snappy/dev/extended_ptolemy/complexVolumesClosed.py +40 -7
  17. snappy/dev/extended_ptolemy/extended.py +3 -3
  18. snappy/dev/extended_ptolemy/phc_wrapper.py +10 -10
  19. snappy/dev/vericlosed/oneVertexTruncatedComplex.py +1 -1
  20. snappy/doc/_images/m004_paper_plane_on_systole.jpg +0 -0
  21. snappy/doc/_images/m125_paper_plane.jpg +0 -0
  22. snappy/doc/_images/o9_00000_systole_paper_plane.jpg +0 -0
  23. snappy/doc/_images/o9_00000_systole_paper_plane_closer.jpg +0 -0
  24. snappy/doc/_sources/additional_classes.rst.txt +40 -40
  25. snappy/doc/_sources/bugs.rst.txt +14 -14
  26. snappy/doc/_sources/censuses.rst.txt +51 -51
  27. snappy/doc/_sources/credits.rst.txt +75 -75
  28. snappy/doc/_sources/development.rst.txt +259 -239
  29. snappy/doc/_sources/index.rst.txt +182 -115
  30. snappy/doc/_sources/installing.rst.txt +247 -264
  31. snappy/doc/_sources/manifold.rst.txt +6 -6
  32. snappy/doc/_sources/manifoldhp.rst.txt +46 -46
  33. snappy/doc/_sources/news.rst.txt +355 -283
  34. snappy/doc/_sources/other.rst.txt +25 -25
  35. snappy/doc/_sources/platonic_census.rst.txt +20 -20
  36. snappy/doc/_sources/plink.rst.txt +102 -102
  37. snappy/doc/_sources/ptolemy.rst.txt +66 -66
  38. snappy/doc/_sources/ptolemy_classes.rst.txt +42 -42
  39. snappy/doc/_sources/ptolemy_examples1.rst.txt +298 -297
  40. snappy/doc/_sources/ptolemy_examples2.rst.txt +363 -363
  41. snappy/doc/_sources/ptolemy_examples3.rst.txt +301 -301
  42. snappy/doc/_sources/ptolemy_examples4.rst.txt +61 -61
  43. snappy/doc/_sources/ptolemy_prelim.rst.txt +105 -105
  44. snappy/doc/_sources/screenshots.rst.txt +21 -21
  45. snappy/doc/_sources/snap.rst.txt +87 -87
  46. snappy/doc/_sources/snappy.rst.txt +28 -28
  47. snappy/doc/_sources/spherogram.rst.txt +103 -103
  48. snappy/doc/_sources/todo.rst.txt +47 -47
  49. snappy/doc/_sources/triangulation.rst.txt +11 -11
  50. snappy/doc/_sources/tutorial.rst.txt +49 -49
  51. snappy/doc/_sources/verify.rst.txt +210 -150
  52. snappy/doc/_sources/verify_internals.rst.txt +79 -90
  53. snappy/doc/_static/basic.css +924 -902
  54. snappy/doc/_static/css/badge_only.css +1 -1
  55. snappy/doc/_static/css/theme.css +1 -1
  56. snappy/doc/_static/doctools.js +1 -1
  57. snappy/doc/_static/documentation_options.js +12 -13
  58. snappy/doc/_static/fonts/Lato/lato-bold.eot +0 -0
  59. snappy/doc/_static/fonts/Lato/lato-bold.ttf +0 -0
  60. snappy/doc/_static/fonts/Lato/lato-bold.woff +0 -0
  61. snappy/doc/_static/fonts/Lato/lato-bold.woff2 +0 -0
  62. snappy/doc/_static/fonts/Lato/lato-bolditalic.eot +0 -0
  63. snappy/doc/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
  64. snappy/doc/_static/fonts/Lato/lato-bolditalic.woff +0 -0
  65. snappy/doc/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
  66. snappy/doc/_static/fonts/Lato/lato-italic.eot +0 -0
  67. snappy/doc/_static/fonts/Lato/lato-italic.ttf +0 -0
  68. snappy/doc/_static/fonts/Lato/lato-italic.woff +0 -0
  69. snappy/doc/_static/fonts/Lato/lato-italic.woff2 +0 -0
  70. snappy/doc/_static/fonts/Lato/lato-regular.eot +0 -0
  71. snappy/doc/_static/fonts/Lato/lato-regular.ttf +0 -0
  72. snappy/doc/_static/fonts/Lato/lato-regular.woff +0 -0
  73. snappy/doc/_static/fonts/Lato/lato-regular.woff2 +0 -0
  74. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
  75. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
  76. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
  77. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
  78. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
  79. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
  80. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
  81. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
  82. snappy/doc/_static/js/versions.js +228 -0
  83. snappy/doc/_static/language_data.js +199 -199
  84. snappy/doc/_static/pygments.css +74 -73
  85. snappy/doc/_static/searchtools.js +125 -71
  86. snappy/doc/_static/snappy_furo.css +33 -33
  87. snappy/doc/_static/snappy_sphinx_rtd_theme.css +42 -42
  88. snappy/doc/_static/sphinx_highlight.js +13 -3
  89. snappy/doc/additional_classes.html +1499 -1330
  90. snappy/doc/bugs.html +131 -134
  91. snappy/doc/censuses.html +426 -445
  92. snappy/doc/credits.html +180 -183
  93. snappy/doc/development.html +383 -363
  94. snappy/doc/genindex.html +1330 -1409
  95. snappy/doc/index.html +261 -206
  96. snappy/doc/installing.html +345 -363
  97. snappy/doc/manifold.html +3451 -2839
  98. snappy/doc/manifoldhp.html +179 -182
  99. snappy/doc/news.html +387 -329
  100. snappy/doc/objects.inv +0 -0
  101. snappy/doc/other.html +160 -162
  102. snappy/doc/platonic_census.html +374 -377
  103. snappy/doc/plink.html +209 -212
  104. snappy/doc/ptolemy.html +253 -255
  105. snappy/doc/ptolemy_classes.html +1143 -1146
  106. snappy/doc/ptolemy_examples1.html +408 -410
  107. snappy/doc/ptolemy_examples2.html +470 -473
  108. snappy/doc/ptolemy_examples3.html +413 -416
  109. snappy/doc/ptolemy_examples4.html +194 -197
  110. snappy/doc/ptolemy_prelim.html +247 -250
  111. snappy/doc/py-modindex.html +164 -167
  112. snappy/doc/screenshots.html +140 -142
  113. snappy/doc/search.html +134 -137
  114. snappy/doc/searchindex.js +1 -1
  115. snappy/doc/snap.html +201 -204
  116. snappy/doc/snappy.html +180 -182
  117. snappy/doc/spherogram.html +1210 -1213
  118. snappy/doc/todo.html +165 -168
  119. snappy/doc/triangulation.html +1583 -1474
  120. snappy/doc/tutorial.html +158 -161
  121. snappy/doc/verify.html +329 -275
  122. snappy/doc/verify_internals.html +1234 -1691
  123. snappy/drilling/__init__.py +153 -235
  124. snappy/drilling/barycentric.py +103 -0
  125. snappy/drilling/constants.py +0 -2
  126. snappy/drilling/crush.py +56 -130
  127. snappy/drilling/cusps.py +12 -6
  128. snappy/drilling/debug.py +2 -1
  129. snappy/drilling/exceptions.py +7 -40
  130. snappy/drilling/moves.py +302 -243
  131. snappy/drilling/perturb.py +63 -37
  132. snappy/drilling/shorten.py +36 -0
  133. snappy/drilling/subdivide.py +0 -5
  134. snappy/drilling/test.py +23 -0
  135. snappy/drilling/test_cases.py +126 -0
  136. snappy/drilling/tracing.py +9 -37
  137. snappy/exceptions.py +18 -5
  138. snappy/exterior_to_link/barycentric_geometry.py +2 -4
  139. snappy/exterior_to_link/main.py +8 -7
  140. snappy/exterior_to_link/mcomplex_with_link.py +2 -2
  141. snappy/exterior_to_link/rational_linear_algebra.py +1 -1
  142. snappy/exterior_to_link/rational_linear_algebra_wrapped.py +1 -1
  143. snappy/exterior_to_link/test.py +21 -33
  144. snappy/geometric_structure/__init__.py +212 -0
  145. snappy/geometric_structure/cusp_neighborhood/__init__.py +3 -0
  146. snappy/geometric_structure/cusp_neighborhood/complex_cusp_cross_section.py +697 -0
  147. snappy/geometric_structure/cusp_neighborhood/cusp_cross_section_base.py +484 -0
  148. snappy/geometric_structure/cusp_neighborhood/exceptions.py +42 -0
  149. snappy/geometric_structure/cusp_neighborhood/real_cusp_cross_section.py +298 -0
  150. snappy/geometric_structure/cusp_neighborhood/tiles_for_cusp_neighborhood.py +159 -0
  151. snappy/geometric_structure/cusp_neighborhood/vertices.py +32 -0
  152. snappy/geometric_structure/geodesic/__init__.py +0 -0
  153. snappy/geometric_structure/geodesic/add_core_curves.py +152 -0
  154. snappy/geometric_structure/geodesic/avoid_core_curves.py +369 -0
  155. snappy/geometric_structure/geodesic/canonical_keys.py +52 -0
  156. snappy/geometric_structure/geodesic/check_away_from_core_curve.py +60 -0
  157. snappy/geometric_structure/geodesic/constants.py +6 -0
  158. snappy/geometric_structure/geodesic/exceptions.py +22 -0
  159. snappy/{drilling → geometric_structure/geodesic}/fixed_points.py +34 -9
  160. snappy/{drilling/geodesic_info.py → geometric_structure/geodesic/geodesic_start_point_info.py} +139 -180
  161. snappy/geometric_structure/geodesic/graph_trace_helper.py +67 -0
  162. snappy/geometric_structure/geodesic/line.py +30 -0
  163. snappy/geometric_structure/geodesic/multiplicity.py +127 -0
  164. snappy/geometric_structure/geodesic/tiles_for_geodesic.py +101 -0
  165. snappy/geometric_structure/test.py +22 -0
  166. snappy/gui.py +23 -13
  167. snappy/horoviewer.py +7 -7
  168. snappy/hyperboloid/__init__.py +96 -31
  169. snappy/hyperboloid/distances.py +245 -0
  170. snappy/hyperboloid/horoball.py +19 -0
  171. snappy/hyperboloid/line.py +35 -0
  172. snappy/hyperboloid/point.py +9 -0
  173. snappy/hyperboloid/triangle.py +29 -0
  174. snappy/isometry_signature.py +382 -0
  175. snappy/len_spec/__init__.py +596 -0
  176. snappy/len_spec/geodesic_info.py +110 -0
  177. snappy/len_spec/geodesic_key_info_dict.py +117 -0
  178. snappy/len_spec/geodesic_piece.py +143 -0
  179. snappy/len_spec/geometric_structure.py +182 -0
  180. snappy/len_spec/geometry.py +80 -0
  181. snappy/len_spec/length_spectrum_geodesic_info.py +170 -0
  182. snappy/len_spec/spine.py +206 -0
  183. snappy/len_spec/test.py +24 -0
  184. snappy/len_spec/test_cases.py +69 -0
  185. snappy/len_spec/tile.py +275 -0
  186. snappy/len_spec/word.py +86 -0
  187. snappy/math_basics.py +39 -13
  188. snappy/matrix.py +52 -9
  189. snappy/number.py +12 -6
  190. snappy/numeric_output_checker.py +2 -3
  191. snappy/pari.py +8 -4
  192. snappy/phone_home.py +2 -1
  193. snappy/polyviewer.py +8 -8
  194. snappy/ptolemy/__init__.py +1 -1
  195. snappy/ptolemy/component.py +2 -2
  196. snappy/ptolemy/coordinates.py +25 -25
  197. snappy/ptolemy/findLoops.py +9 -9
  198. snappy/ptolemy/manifoldMethods.py +27 -29
  199. snappy/ptolemy/polynomial.py +50 -57
  200. snappy/ptolemy/processFileBase.py +60 -0
  201. snappy/ptolemy/ptolemyVariety.py +109 -41
  202. snappy/ptolemy/reginaWrapper.py +4 -4
  203. snappy/ptolemy/rur.py +1 -1
  204. snappy/ptolemy/solutionsToPrimeIdealGroebnerBasis.py +9 -9
  205. snappy/ptolemy/test.py +99 -54
  206. snappy/ptolemy/utilities.py +1 -1
  207. snappy/raytracing/__init__.py +64 -0
  208. snappy/raytracing/additional_horospheres.py +64 -0
  209. snappy/raytracing/additional_len_spec_choices.py +63 -0
  210. snappy/raytracing/cohomology_fractal.py +0 -3
  211. snappy/raytracing/eyeball.py +123 -0
  212. snappy/raytracing/finite_raytracing_data.py +17 -17
  213. snappy/raytracing/finite_viewer.py +15 -15
  214. snappy/raytracing/geodesic_tube_info.py +93 -63
  215. snappy/raytracing/geodesics.py +94 -64
  216. snappy/raytracing/geodesics_window.py +56 -34
  217. snappy/raytracing/gui_utilities.py +21 -6
  218. snappy/raytracing/hyperboloid_navigation.py +29 -4
  219. snappy/raytracing/hyperboloid_utilities.py +73 -73
  220. snappy/raytracing/ideal_raytracing_data.py +121 -91
  221. snappy/raytracing/inside_viewer.py +199 -66
  222. snappy/raytracing/pack.py +22 -0
  223. snappy/raytracing/raytracing_data.py +37 -25
  224. snappy/raytracing/raytracing_view.py +70 -65
  225. snappy/raytracing/shaders/Eye.png +0 -0
  226. snappy/raytracing/shaders/NonGeometric.png +0 -0
  227. snappy/raytracing/shaders/__init__.py +39 -3
  228. snappy/raytracing/shaders/fragment.glsl +451 -133
  229. snappy/raytracing/test.py +29 -0
  230. snappy/raytracing/tooltip.py +146 -0
  231. snappy/raytracing/upper_halfspace_utilities.py +42 -9
  232. snappy/sage_helper.py +67 -134
  233. snappy/settings.py +90 -77
  234. snappy/shell.py +2 -0
  235. snappy/snap/character_varieties.py +2 -2
  236. snappy/snap/find_field.py +4 -3
  237. snappy/snap/fundamental_polyhedron.py +2 -2
  238. snappy/snap/kernel_structures.py +5 -1
  239. snappy/snap/nsagetools.py +9 -8
  240. snappy/snap/peripheral/dual_cellulation.py +4 -3
  241. snappy/snap/peripheral/peripheral.py +2 -2
  242. snappy/snap/peripheral/surface.py +5 -5
  243. snappy/snap/peripheral/test.py +1 -1
  244. snappy/snap/polished_reps.py +8 -8
  245. snappy/snap/slice_obs_HKL.py +16 -14
  246. snappy/snap/t3mlite/arrow.py +3 -3
  247. snappy/snap/t3mlite/edge.py +3 -3
  248. snappy/snap/t3mlite/homology.py +2 -2
  249. snappy/snap/t3mlite/mcomplex.py +3 -3
  250. snappy/snap/t3mlite/simplex.py +12 -0
  251. snappy/snap/t3mlite/spun.py +18 -17
  252. snappy/snap/t3mlite/test_vs_regina.py +4 -4
  253. snappy/snap/test.py +37 -53
  254. snappy/snap/utilities.py +4 -5
  255. snappy/test.py +121 -138
  256. snappy/test_cases.py +263 -0
  257. snappy/testing.py +131 -0
  258. snappy/tiling/__init__.py +2 -0
  259. snappy/tiling/canonical_key_dict.py +59 -0
  260. snappy/tiling/dict_based_set.py +79 -0
  261. snappy/tiling/floor.py +49 -0
  262. snappy/tiling/hyperboloid_dict.py +54 -0
  263. snappy/tiling/iter_utils.py +78 -0
  264. snappy/tiling/lifted_tetrahedron.py +22 -0
  265. snappy/tiling/lifted_tetrahedron_set.py +54 -0
  266. snappy/tiling/real_hash_dict.py +164 -0
  267. snappy/tiling/test.py +23 -0
  268. snappy/tiling/tile.py +215 -0
  269. snappy/tiling/triangle.py +33 -0
  270. snappy/tkterminal.py +113 -84
  271. snappy/twister/main.py +1 -7
  272. snappy/twister/twister_core.cp38-win_amd64.pyd +0 -0
  273. snappy/upper_halfspace/__init__.py +78 -17
  274. snappy/verify/__init__.py +3 -7
  275. snappy/verify/{verifyCanonical.py → canonical.py} +78 -70
  276. snappy/verify/complex_volume/adjust_torsion.py +1 -2
  277. snappy/verify/complex_volume/closed.py +13 -13
  278. snappy/verify/complex_volume/cusped.py +6 -6
  279. snappy/verify/complex_volume/extended_bloch.py +5 -8
  280. snappy/verify/{cuspTranslations.py → cusp_translations.py} +1 -1
  281. snappy/verify/edge_equations.py +80 -0
  282. snappy/verify/exceptions.py +0 -55
  283. snappy/verify/{verifyHyperbolicity.py → hyperbolicity.py} +3 -3
  284. snappy/verify/interval_newton_shapes_engine.py +7 -5
  285. snappy/verify/interval_tree.py +5 -5
  286. snappy/verify/krawczyk_shapes_engine.py +17 -18
  287. snappy/verify/maximal_cusp_area_matrix/__init__.py +7 -74
  288. snappy/verify/maximal_cusp_area_matrix/cusp_tiling_engine.py +3 -4
  289. snappy/verify/maximal_cusp_area_matrix/cusp_translate_engine.py +1 -1
  290. snappy/verify/{realAlgebra.py → real_algebra.py} +1 -1
  291. snappy/verify/shapes.py +5 -3
  292. snappy/verify/short_slopes.py +39 -41
  293. snappy/verify/{squareExtensions.py → square_extensions.py} +14 -11
  294. snappy/verify/test.py +57 -60
  295. snappy/verify/upper_halfspace/extended_matrix.py +1 -1
  296. snappy/verify/upper_halfspace/finite_point.py +3 -4
  297. snappy/verify/upper_halfspace/ideal_point.py +9 -9
  298. snappy/verify/volume.py +2 -2
  299. snappy/version.py +2 -2
  300. {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/METADATA +14 -10
  301. snappy-3.2.dist-info/RECORD +503 -0
  302. {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/WHEEL +1 -1
  303. {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/top_level.txt +6 -1
  304. snappy/__pycache__/__init__.cpython-38.pyc +0 -0
  305. snappy/__pycache__/browser.cpython-38.pyc +0 -0
  306. snappy/__pycache__/cache.cpython-38.pyc +0 -0
  307. snappy/__pycache__/database.cpython-38.pyc +0 -0
  308. snappy/__pycache__/db_utilities.cpython-38.pyc +0 -0
  309. snappy/__pycache__/decorated_isosig.cpython-38.pyc +0 -0
  310. snappy/__pycache__/exceptions.cpython-38.pyc +0 -0
  311. snappy/__pycache__/export_stl.cpython-38.pyc +0 -0
  312. snappy/__pycache__/filedialog.cpython-38.pyc +0 -0
  313. snappy/__pycache__/gui.cpython-38.pyc +0 -0
  314. snappy/__pycache__/horoviewer.cpython-38.pyc +0 -0
  315. snappy/__pycache__/math_basics.cpython-38.pyc +0 -0
  316. snappy/__pycache__/matrix.cpython-38.pyc +0 -0
  317. snappy/__pycache__/number.cpython-38.pyc +0 -0
  318. snappy/__pycache__/numeric_output_checker.cpython-38.pyc +0 -0
  319. snappy/__pycache__/pari.cpython-38.pyc +0 -0
  320. snappy/__pycache__/polyviewer.cpython-38.pyc +0 -0
  321. snappy/__pycache__/sage_helper.cpython-38.pyc +0 -0
  322. snappy/__pycache__/version.cpython-38.pyc +0 -0
  323. snappy/doc/_sources/verify_canon.rst.txt +0 -90
  324. snappy/doc/_static/jquery-3.6.0.js +0 -10881
  325. snappy/doc/_static/js/html5shiv-printshiv.min.js +0 -4
  326. snappy/doc/_static/js/html5shiv.min.js +0 -4
  327. snappy/doc/_static/underscore-1.13.1.js +0 -2042
  328. snappy/doc/_static/underscore.js +0 -6
  329. snappy/doc/verify_canon.html +0 -304
  330. snappy/drilling/__pycache__/__init__.cpython-38.pyc +0 -0
  331. snappy/drilling/__pycache__/constants.cpython-38.pyc +0 -0
  332. snappy/drilling/__pycache__/crush.cpython-38.pyc +0 -0
  333. snappy/drilling/__pycache__/cusps.cpython-38.pyc +0 -0
  334. snappy/drilling/__pycache__/debug.cpython-38.pyc +0 -0
  335. snappy/drilling/__pycache__/epsilons.cpython-38.pyc +0 -0
  336. snappy/drilling/__pycache__/exceptions.cpython-38.pyc +0 -0
  337. snappy/drilling/__pycache__/fixed_points.cpython-38.pyc +0 -0
  338. snappy/drilling/__pycache__/geodesic_info.cpython-38.pyc +0 -0
  339. snappy/drilling/__pycache__/geodesic_tube.cpython-38.pyc +0 -0
  340. snappy/drilling/__pycache__/geometric_structure.cpython-38.pyc +0 -0
  341. snappy/drilling/__pycache__/line.cpython-38.pyc +0 -0
  342. snappy/drilling/__pycache__/moves.cpython-38.pyc +0 -0
  343. snappy/drilling/__pycache__/peripheral_curves.cpython-38.pyc +0 -0
  344. snappy/drilling/__pycache__/perturb.cpython-38.pyc +0 -0
  345. snappy/drilling/__pycache__/quotient_space.cpython-38.pyc +0 -0
  346. snappy/drilling/__pycache__/spatial_dict.cpython-38.pyc +0 -0
  347. snappy/drilling/__pycache__/subdivide.cpython-38.pyc +0 -0
  348. snappy/drilling/__pycache__/tracing.cpython-38.pyc +0 -0
  349. snappy/drilling/geodesic_tube.py +0 -441
  350. snappy/drilling/geometric_structure.py +0 -366
  351. snappy/drilling/line.py +0 -122
  352. snappy/drilling/quotient_space.py +0 -94
  353. snappy/drilling/spatial_dict.py +0 -128
  354. snappy/exterior_to_link/__pycache__/__init__.cpython-38.pyc +0 -0
  355. snappy/exterior_to_link/__pycache__/barycentric_geometry.cpython-38.pyc +0 -0
  356. snappy/exterior_to_link/__pycache__/exceptions.cpython-38.pyc +0 -0
  357. snappy/exterior_to_link/__pycache__/hyp_utils.cpython-38.pyc +0 -0
  358. snappy/exterior_to_link/__pycache__/link_projection.cpython-38.pyc +0 -0
  359. snappy/exterior_to_link/__pycache__/main.cpython-38.pyc +0 -0
  360. snappy/exterior_to_link/__pycache__/mcomplex_with_expansion.cpython-38.pyc +0 -0
  361. snappy/exterior_to_link/__pycache__/mcomplex_with_link.cpython-38.pyc +0 -0
  362. snappy/exterior_to_link/__pycache__/mcomplex_with_memory.cpython-38.pyc +0 -0
  363. snappy/exterior_to_link/__pycache__/pl_utils.cpython-38.pyc +0 -0
  364. snappy/exterior_to_link/__pycache__/put_in_S3.cpython-38.pyc +0 -0
  365. snappy/exterior_to_link/__pycache__/rational_linear_algebra.cpython-38.pyc +0 -0
  366. snappy/exterior_to_link/__pycache__/simplify_to_base_tri.cpython-38.pyc +0 -0
  367. snappy/exterior_to_link/__pycache__/stored_moves.cpython-38.pyc +0 -0
  368. snappy/hyperboloid/__pycache__/__init__.cpython-38.pyc +0 -0
  369. snappy/manifolds/__pycache__/__init__.cpython-38.pyc +0 -0
  370. snappy/ptolemy/__pycache__/__init__.cpython-38.pyc +0 -0
  371. snappy/ptolemy/__pycache__/component.cpython-38.pyc +0 -0
  372. snappy/ptolemy/__pycache__/coordinates.cpython-38.pyc +0 -0
  373. snappy/ptolemy/__pycache__/fieldExtensions.cpython-38.pyc +0 -0
  374. snappy/ptolemy/__pycache__/findLoops.cpython-38.pyc +0 -0
  375. snappy/ptolemy/__pycache__/homology.cpython-38.pyc +0 -0
  376. snappy/ptolemy/__pycache__/manifoldMethods.cpython-38.pyc +0 -0
  377. snappy/ptolemy/__pycache__/matrix.cpython-38.pyc +0 -0
  378. snappy/ptolemy/__pycache__/numericalSolutionsToGroebnerBasis.cpython-38.pyc +0 -0
  379. snappy/ptolemy/__pycache__/polynomial.cpython-38.pyc +0 -0
  380. snappy/ptolemy/__pycache__/processComponents.cpython-38.pyc +0 -0
  381. snappy/ptolemy/__pycache__/processFileBase.cpython-38.pyc +0 -0
  382. snappy/ptolemy/__pycache__/processFileDispatch.cpython-38.pyc +0 -0
  383. snappy/ptolemy/__pycache__/processMagmaFile.cpython-38.pyc +0 -0
  384. snappy/ptolemy/__pycache__/processRurFile.cpython-38.pyc +0 -0
  385. snappy/ptolemy/__pycache__/ptolemyGeneralizedObstructionClass.cpython-38.pyc +0 -0
  386. snappy/ptolemy/__pycache__/ptolemyObstructionClass.cpython-38.pyc +0 -0
  387. snappy/ptolemy/__pycache__/ptolemyVariety.cpython-38.pyc +0 -0
  388. snappy/ptolemy/__pycache__/ptolemyVarietyPrimeIdealGroebnerBasis.cpython-38.pyc +0 -0
  389. snappy/ptolemy/__pycache__/rur.cpython-38.pyc +0 -0
  390. snappy/ptolemy/__pycache__/solutionsToPrimeIdealGroebnerBasis.cpython-38.pyc +0 -0
  391. snappy/ptolemy/__pycache__/utilities.cpython-38.pyc +0 -0
  392. snappy/snap/__pycache__/__init__.cpython-38.pyc +0 -0
  393. snappy/snap/__pycache__/character_varieties.cpython-38.pyc +0 -0
  394. snappy/snap/__pycache__/fundamental_polyhedron.cpython-38.pyc +0 -0
  395. snappy/snap/__pycache__/interval_reps.cpython-38.pyc +0 -0
  396. snappy/snap/__pycache__/kernel_structures.cpython-38.pyc +0 -0
  397. snappy/snap/__pycache__/mcomplex_base.cpython-38.pyc +0 -0
  398. snappy/snap/__pycache__/nsagetools.cpython-38.pyc +0 -0
  399. snappy/snap/__pycache__/polished_reps.cpython-38.pyc +0 -0
  400. snappy/snap/__pycache__/shapes.cpython-38.pyc +0 -0
  401. snappy/snap/__pycache__/slice_obs_HKL.cpython-38.pyc +0 -0
  402. snappy/snap/__pycache__/utilities.cpython-38.pyc +0 -0
  403. snappy/snap/peripheral/__pycache__/__init__.cpython-38.pyc +0 -0
  404. snappy/snap/peripheral/__pycache__/dual_cellulation.cpython-38.pyc +0 -0
  405. snappy/snap/peripheral/__pycache__/link.cpython-38.pyc +0 -0
  406. snappy/snap/peripheral/__pycache__/peripheral.cpython-38.pyc +0 -0
  407. snappy/snap/peripheral/__pycache__/surface.cpython-38.pyc +0 -0
  408. snappy/snap/t3mlite/__pycache__/__init__.cpython-38.pyc +0 -0
  409. snappy/snap/t3mlite/__pycache__/arrow.cpython-38.pyc +0 -0
  410. snappy/snap/t3mlite/__pycache__/corner.cpython-38.pyc +0 -0
  411. snappy/snap/t3mlite/__pycache__/edge.cpython-38.pyc +0 -0
  412. snappy/snap/t3mlite/__pycache__/face.cpython-38.pyc +0 -0
  413. snappy/snap/t3mlite/__pycache__/files.cpython-38.pyc +0 -0
  414. snappy/snap/t3mlite/__pycache__/homology.cpython-38.pyc +0 -0
  415. snappy/snap/t3mlite/__pycache__/linalg.cpython-38.pyc +0 -0
  416. snappy/snap/t3mlite/__pycache__/mcomplex.cpython-38.pyc +0 -0
  417. snappy/snap/t3mlite/__pycache__/perm4.cpython-38.pyc +0 -0
  418. snappy/snap/t3mlite/__pycache__/simplex.cpython-38.pyc +0 -0
  419. snappy/snap/t3mlite/__pycache__/spun.cpython-38.pyc +0 -0
  420. snappy/snap/t3mlite/__pycache__/surface.cpython-38.pyc +0 -0
  421. snappy/snap/t3mlite/__pycache__/tetrahedron.cpython-38.pyc +0 -0
  422. snappy/snap/t3mlite/__pycache__/vertex.cpython-38.pyc +0 -0
  423. snappy/togl/__init__.py +0 -3
  424. snappy/togl/darwin-tk8.6/Togl2.1/LICENSE +0 -28
  425. snappy/togl/darwin-tk8.6/Togl2.1/libTogl2.1.dylib +0 -0
  426. snappy/togl/darwin-tk8.6/Togl2.1/pkgIndex.tcl +0 -5
  427. snappy/togl/darwin-tk8.7/Togl2.1/LICENSE +0 -28
  428. snappy/togl/darwin-tk8.7/Togl2.1/libTogl2.1.dylib +0 -0
  429. snappy/togl/darwin-tk8.7/Togl2.1/pkgIndex.tcl +0 -5
  430. snappy/togl/linux2-x86_64-tk8.6/Togl2.1/LICENSE +0 -28
  431. snappy/togl/linux2-x86_64-tk8.6/Togl2.1/libTogl2.1.so +0 -0
  432. snappy/togl/linux2-x86_64-tk8.6/Togl2.1/pkgIndex.tcl +0 -5
  433. snappy/togl/win32VC-tk8.6/Togl2.1/LICENSE +0 -28
  434. snappy/togl/win32VC-tk8.6/Togl2.1/Togl21.dll +0 -0
  435. snappy/togl/win32VC-tk8.6/Togl2.1/Togl21.lib +0 -0
  436. snappy/togl/win32VC-tk8.6/Togl2.1/pkgIndex.tcl +0 -6
  437. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/LICENSE +0 -28
  438. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/Togl21.dll +0 -0
  439. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/Togl21.lib +0 -0
  440. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/pkgIndex.tcl +0 -6
  441. snappy/twister/__pycache__/__init__.cpython-38.pyc +0 -0
  442. snappy/twister/__pycache__/main.cpython-38.pyc +0 -0
  443. snappy/upper_halfspace/__pycache__/__init__.cpython-38.pyc +0 -0
  444. snappy/upper_halfspace/__pycache__/ideal_point.cpython-38.pyc +0 -0
  445. snappy/verify/__pycache__/__init__.cpython-38.pyc +0 -0
  446. snappy/verify/__pycache__/cuspCrossSection.cpython-38.pyc +0 -0
  447. snappy/verify/__pycache__/cuspTranslations.cpython-38.pyc +0 -0
  448. snappy/verify/__pycache__/cusp_areas.cpython-38.pyc +0 -0
  449. snappy/verify/__pycache__/cusp_shapes.cpython-38.pyc +0 -0
  450. snappy/verify/__pycache__/exceptions.cpython-38.pyc +0 -0
  451. snappy/verify/__pycache__/interval_newton_shapes_engine.cpython-38.pyc +0 -0
  452. snappy/verify/__pycache__/interval_tree.cpython-38.pyc +0 -0
  453. snappy/verify/__pycache__/krawczyk_shapes_engine.cpython-38.pyc +0 -0
  454. snappy/verify/__pycache__/realAlgebra.cpython-38.pyc +0 -0
  455. snappy/verify/__pycache__/shapes.cpython-38.pyc +0 -0
  456. snappy/verify/__pycache__/short_slopes.cpython-38.pyc +0 -0
  457. snappy/verify/__pycache__/squareExtensions.cpython-38.pyc +0 -0
  458. snappy/verify/__pycache__/verifyCanonical.cpython-38.pyc +0 -0
  459. snappy/verify/__pycache__/verifyHyperbolicity.cpython-38.pyc +0 -0
  460. snappy/verify/__pycache__/volume.cpython-38.pyc +0 -0
  461. snappy/verify/complex_volume/__pycache__/__init__.cpython-38.pyc +0 -0
  462. snappy/verify/complex_volume/__pycache__/adjust_torsion.cpython-38.pyc +0 -0
  463. snappy/verify/complex_volume/__pycache__/closed.cpython-38.pyc +0 -0
  464. snappy/verify/complex_volume/__pycache__/compute_ptolemys.cpython-38.pyc +0 -0
  465. snappy/verify/complex_volume/__pycache__/cusped.cpython-38.pyc +0 -0
  466. snappy/verify/complex_volume/__pycache__/extended_bloch.cpython-38.pyc +0 -0
  467. snappy/verify/cuspCrossSection.py +0 -1422
  468. snappy/verify/maximal_cusp_area_matrix/__pycache__/__init__.cpython-38.pyc +0 -0
  469. snappy/verify/maximal_cusp_area_matrix/__pycache__/cusp_tiling_engine.cpython-38.pyc +0 -0
  470. snappy/verify/maximal_cusp_area_matrix/__pycache__/cusp_translate_engine.cpython-38.pyc +0 -0
  471. snappy/verify/upper_halfspace/__pycache__/__init__.cpython-38.pyc +0 -0
  472. snappy/verify/upper_halfspace/__pycache__/extended_matrix.cpython-38.pyc +0 -0
  473. snappy/verify/upper_halfspace/__pycache__/finite_point.cpython-38.pyc +0 -0
  474. snappy/verify/upper_halfspace/__pycache__/ideal_point.cpython-38.pyc +0 -0
  475. snappy-3.1.1.dist-info/RECORD +0 -575
  476. {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/entry_points.txt +0 -0
@@ -1,1475 +1,1584 @@
1
- <!DOCTYPE html>
2
- <html class="writer-html5" lang="en" >
3
- <head>
4
- <meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
5
-
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
- <title>Triangulation &mdash; SnapPy 3.1.1 documentation</title>
8
- <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
9
- <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
10
- <link rel="stylesheet" href="_static/snappy_sphinx_rtd_theme.css" type="text/css" />
11
- <link rel="shortcut icon" href="_static/SnapPy.ico"/>
12
- <!--[if lt IE 9]>
13
- <script src="_static/js/html5shiv.min.js"></script>
14
- <![endif]-->
15
-
16
- <script src="_static/jquery.js"></script>
17
- <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
18
- <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
19
- <script src="_static/doctools.js"></script>
20
- <script src="_static/sphinx_highlight.js"></script>
21
- <script src="_static/js/theme.js"></script>
22
- <link rel="index" title="Index" href="genindex.html" />
23
- <link rel="search" title="Search" href="search.html" />
24
- <link rel="next" title="Additional Classes" href="additional_classes.html" />
25
- <link rel="prev" title="ManifoldHP: High-precision variant" href="manifoldhp.html" />
26
- </head>
27
-
28
- <body class="wy-body-for-nav">
29
- <div class="wy-grid-for-nav">
30
- <nav data-toggle="wy-nav-shift" class="wy-nav-side">
31
- <div class="wy-side-scroll">
32
- <div class="wy-side-nav-search" >
33
-
34
-
35
-
36
- <a href="index.html" class="icon icon-home">
37
- SnapPy
38
- <img src="_static/SnapPy-horizontal-128.png" class="logo" alt="Logo"/>
39
- </a>
40
- <div class="version">
41
- 3.1.1
42
- </div>
43
- <div role="search">
44
- <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
45
- <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
46
- <input type="hidden" name="check_keywords" value="yes" />
47
- <input type="hidden" name="area" value="default" />
48
- </form>
49
- </div>
50
- </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
51
- <ul class="current">
52
- <li class="toctree-l1"><a class="reference internal" href="installing.html">Installing SnapPy</a></li>
53
- <li class="toctree-l1"><a class="reference internal" href="screenshots.html">Screenshots: SnapPy in action</a></li>
54
- <li class="toctree-l1"><a class="reference internal" href="tutorial.html">Tutorial</a></li>
55
- <li class="toctree-l1 current"><a class="reference internal" href="snappy.html">The snappy module and its classes</a><ul class="current">
56
- <li class="toctree-l2"><a class="reference internal" href="manifold.html">Manifold: the main class</a></li>
57
- <li class="toctree-l2"><a class="reference internal" href="manifoldhp.html">ManifoldHP: High-precision variant</a></li>
58
- <li class="toctree-l2 current"><a class="current reference internal" href="#">Triangulation</a><ul>
59
- <li class="toctree-l3"><a class="reference internal" href="#snappy.Triangulation"><code class="docutils literal notranslate"><span class="pre">Triangulation</span></code></a><ul>
60
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.DT_code"><code class="docutils literal notranslate"><span class="pre">Triangulation.DT_code()</span></code></a></li>
61
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.alexander_polynomial"><code class="docutils literal notranslate"><span class="pre">Triangulation.alexander_polynomial()</span></code></a></li>
62
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.copy"><code class="docutils literal notranslate"><span class="pre">Triangulation.copy()</span></code></a></li>
63
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.cover"><code class="docutils literal notranslate"><span class="pre">Triangulation.cover()</span></code></a></li>
64
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.cover_info"><code class="docutils literal notranslate"><span class="pre">Triangulation.cover_info()</span></code></a></li>
65
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.covers"><code class="docutils literal notranslate"><span class="pre">Triangulation.covers()</span></code></a></li>
66
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.cusp_info"><code class="docutils literal notranslate"><span class="pre">Triangulation.cusp_info()</span></code></a></li>
67
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.dehn_fill"><code class="docutils literal notranslate"><span class="pre">Triangulation.dehn_fill()</span></code></a></li>
68
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.edge_valences"><code class="docutils literal notranslate"><span class="pre">Triangulation.edge_valences()</span></code></a></li>
69
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.exterior_to_link"><code class="docutils literal notranslate"><span class="pre">Triangulation.exterior_to_link()</span></code></a></li>
70
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.filled_triangulation"><code class="docutils literal notranslate"><span class="pre">Triangulation.filled_triangulation()</span></code></a></li>
71
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.fundamental_group"><code class="docutils literal notranslate"><span class="pre">Triangulation.fundamental_group()</span></code></a></li>
72
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.gluing_equations"><code class="docutils literal notranslate"><span class="pre">Triangulation.gluing_equations()</span></code></a></li>
73
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.gluing_equations_pgl"><code class="docutils literal notranslate"><span class="pre">Triangulation.gluing_equations_pgl()</span></code></a></li>
74
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.has_finite_vertices"><code class="docutils literal notranslate"><span class="pre">Triangulation.has_finite_vertices()</span></code></a></li>
75
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.homological_longitude"><code class="docutils literal notranslate"><span class="pre">Triangulation.homological_longitude()</span></code></a></li>
76
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.homology"><code class="docutils literal notranslate"><span class="pre">Triangulation.homology()</span></code></a></li>
77
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.is_orientable"><code class="docutils literal notranslate"><span class="pre">Triangulation.is_orientable()</span></code></a></li>
78
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.isomorphisms_to"><code class="docutils literal notranslate"><span class="pre">Triangulation.isomorphisms_to()</span></code></a></li>
79
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.link"><code class="docutils literal notranslate"><span class="pre">Triangulation.link()</span></code></a></li>
80
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.name"><code class="docutils literal notranslate"><span class="pre">Triangulation.name()</span></code></a></li>
81
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.normal_boundary_slopes"><code class="docutils literal notranslate"><span class="pre">Triangulation.normal_boundary_slopes()</span></code></a></li>
82
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.normal_surfaces"><code class="docutils literal notranslate"><span class="pre">Triangulation.normal_surfaces()</span></code></a></li>
83
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.num_cusps"><code class="docutils literal notranslate"><span class="pre">Triangulation.num_cusps()</span></code></a></li>
84
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.num_tetrahedra"><code class="docutils literal notranslate"><span class="pre">Triangulation.num_tetrahedra()</span></code></a></li>
85
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.orientation_cover"><code class="docutils literal notranslate"><span class="pre">Triangulation.orientation_cover()</span></code></a></li>
86
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.pickle"><code class="docutils literal notranslate"><span class="pre">Triangulation.pickle()</span></code></a></li>
87
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.plink"><code class="docutils literal notranslate"><span class="pre">Triangulation.plink()</span></code></a></li>
88
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.ptolemy_generalized_obstruction_classes"><code class="docutils literal notranslate"><span class="pre">Triangulation.ptolemy_generalized_obstruction_classes()</span></code></a></li>
89
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.ptolemy_obstruction_classes"><code class="docutils literal notranslate"><span class="pre">Triangulation.ptolemy_obstruction_classes()</span></code></a></li>
90
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.ptolemy_variety"><code class="docutils literal notranslate"><span class="pre">Triangulation.ptolemy_variety()</span></code></a></li>
91
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.randomize"><code class="docutils literal notranslate"><span class="pre">Triangulation.randomize()</span></code></a></li>
92
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.reverse_orientation"><code class="docutils literal notranslate"><span class="pre">Triangulation.reverse_orientation()</span></code></a></li>
93
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.save"><code class="docutils literal notranslate"><span class="pre">Triangulation.save()</span></code></a></li>
94
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.set_name"><code class="docutils literal notranslate"><span class="pre">Triangulation.set_name()</span></code></a></li>
95
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.set_peripheral_curves"><code class="docutils literal notranslate"><span class="pre">Triangulation.set_peripheral_curves()</span></code></a></li>
96
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.simplify"><code class="docutils literal notranslate"><span class="pre">Triangulation.simplify()</span></code></a></li>
97
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.slice_obstruction_HKL"><code class="docutils literal notranslate"><span class="pre">Triangulation.slice_obstruction_HKL()</span></code></a></li>
98
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.triangulation_isosig"><code class="docutils literal notranslate"><span class="pre">Triangulation.triangulation_isosig()</span></code></a></li>
99
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.with_hyperbolic_structure"><code class="docutils literal notranslate"><span class="pre">Triangulation.with_hyperbolic_structure()</span></code></a></li>
100
- </ul>
101
- </li>
102
- </ul>
103
- </li>
104
- <li class="toctree-l2"><a class="reference internal" href="additional_classes.html">Additional Classes</a></li>
105
- <li class="toctree-l2"><a class="reference internal" href="censuses.html">Census manifolds</a></li>
106
- </ul>
107
- </li>
108
- <li class="toctree-l1"><a class="reference internal" href="plink.html">Using SnapPy’s link editor</a></li>
109
- <li class="toctree-l1"><a class="reference internal" href="spherogram.html">Links: planar diagrams and invariants</a></li>
110
- <li class="toctree-l1"><a class="reference internal" href="snap.html">Number theory of hyperbolic 3-manifolds</a></li>
111
- <li class="toctree-l1"><a class="reference internal" href="verify.html">Verified computations</a></li>
112
- <li class="toctree-l1"><a class="reference internal" href="other.html">Other components</a></li>
113
- <li class="toctree-l1"><a class="reference internal" href="news.html">News</a></li>
114
- <li class="toctree-l1"><a class="reference internal" href="credits.html">Credits</a></li>
115
- <li class="toctree-l1"><a class="reference internal" href="bugs.html">Reporting bugs and other problems</a></li>
116
- <li class="toctree-l1"><a class="reference internal" href="todo.html">To Do List</a></li>
117
- <li class="toctree-l1"><a class="reference internal" href="development.html">Development Basics</a></li>
118
- </ul>
119
-
120
- </div>
121
- </div>
122
- </nav>
123
-
124
- <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
125
- <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
126
- <a href="index.html">SnapPy</a>
127
- </nav>
128
-
129
- <div class="wy-nav-content">
130
- <div class="rst-content">
131
- <div role="navigation" aria-label="Page navigation">
132
- <ul class="wy-breadcrumbs">
133
- <li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
134
- <li class="breadcrumb-item"><a href="snappy.html">The snappy module and its classes</a></li>
135
- <li class="breadcrumb-item active">Triangulation</li>
136
- <li class="wy-breadcrumbs-aside">
137
- </li>
138
- </ul>
139
- <hr/>
140
- </div>
141
- <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
142
- <div itemprop="articleBody">
143
-
144
- <section id="triangulation">
145
- <h1>Triangulation<a class="headerlink" href="#triangulation" title="Permalink to this heading"></a></h1>
146
- <p>The main snappy class, namely Manifold, is derived from more
147
- basic class below.</p>
148
- <dl class="py class">
149
- <dt class="sig sig-object py" id="snappy.Triangulation">
150
- <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.</span></span><span class="sig-name descname"><span class="pre">Triangulation</span></span><a class="headerlink" href="#snappy.Triangulation" title="Permalink to this definition"></a></dt>
151
- <dd><p>A Triangulation object represents a compact 3-manifold with torus
152
- boundary components, given as an ideal triangulation of the
153
- manifold’s interior. A Dehn-filling can be specified for each
154
- boundary component, allowing the description of closed 3-manifolds
155
- and some orbifolds. For non-orientable 3-manifolds, the boundary
156
- components can also be Klein bottles. Two Triangulations are equal
157
- (‘==’) if they represent combinatorially isomorphic
158
- triangulations. A Triangulation does <em>not</em> have any geometric
159
- structure, and usually one works with the subclass Manifold which
160
- adds this. Here’s a quick example:</p>
161
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;9_42&#39;</span><span class="p">)</span>
162
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">num_tetrahedra</span><span class="p">()</span>
163
- <span class="go">5</span>
164
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">is_orientable</span><span class="p">()</span>
165
- <span class="go">True</span>
166
- </pre></div>
167
- </div>
168
- <p>A Triangulation can be specified in a number of ways, e.g.</p>
169
- <ul class="simple">
170
- <li><p>Triangulation(‘9_42’) : The complement of the knot 9_42 in S^3.</p></li>
171
- <li><p>Triangulation(‘m125(1,2)(4,5)’) : The SnapPea census manifold m125
172
- where the first cusp has Dehn filling (1,2) and the second cusp has
173
- filling (4,5).</p></li>
174
- <li><p>Triangulation() : Opens a link editor window where can you
175
- specify a link complement.</p></li>
176
- </ul>
177
- <p>In general, the specification can be from among the below, with
178
- information on Dehn fillings added.</p>
179
- <ul>
180
- <li><p>SnapPea cusped census manifolds: e.g. ‘m123’, ‘s123’, ‘v123’.</p></li>
181
- <li><dl class="simple">
182
- <dt>Link complements:</dt><dd><ul class="simple">
183
- <li><p>Rolfsen’s table: e.g. ‘4_1’, ‘04_1’, ‘5^2_6’, ‘6_4^7’, ‘L20935’, ‘l104001’.</p></li>
184
- <li><p>Knots and links up to 14 crossings from tabulations by Hoste
185
- and Thistlethwaite: e.g. ‘K12a456’ or ‘L13n579’.</p></li>
186
- <li><p>Hoste-Thistlethwaite Knotscape table: e.g. ‘11a17’ or 12n345’</p></li>
187
- <li><p>Dowker-Thistlethwaite code: e.g. ‘DT:[(6,8,2,4)]’, ‘DT:dadbcda’</p></li>
188
- </ul>
189
- </dd>
190
- </dl>
191
- </li>
192
- <li><p>Once-punctured torus bundles: e.g. ‘b++LLR’, ‘b+-llR’, ‘bo-RRL’, ‘bn+LRLR’</p></li>
193
- <li><p>Fibered manifold associated to a braid: ‘Braid:[1,2,-3,4]’</p>
194
- <p>Here, the braid is thought of as a mapping class of the
195
- punctured disc, and this manifold is the corresponding
196
- mapping torus. If you want the braid closure, do (1,0) filling
197
- of the last cusp.</p>
198
- </li>
199
- <li><p>From mapping class group data using Twister:</p>
200
- <p>‘Bundle(S_{1,1}, [a0, B1])’ or ‘Splitting(S_{1,0}, [b1, A0], [a0,B1])’</p>
201
- <p>See the help for the ‘twister’ module for more.</p>
202
- </li>
203
- <li><p>A SnapPea triangulation or link projection file: ‘filename’</p>
204
- <p>The file will be loaded if found in the current directory or the
205
- path given by the shell variable SNAPPEA_MANIFOLD_DIRECTORY.</p>
206
- </li>
207
- <li><p>A Regina-style isomorphism signature, such as ‘dLQbcccdxwb’.</p></li>
208
- <li><p>A string containing the contents of a SnapPea triangulation or link
209
- projection file.</p></li>
210
- </ul>
211
- <dl class="py method">
212
- <dt class="sig sig-object py" id="snappy.Triangulation.DT_code">
213
- <span class="sig-name descname"><span class="pre">DT_code</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">alpha</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">flips</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.DT_code" title="Permalink to this definition"></a></dt>
214
- <dd><p>Return the Dowker-Thistlethwaite code of this link complement,
215
- if it is a link complement. The DT code is intended to be an
216
- immutable attribute, for use with knot and link exteriors
217
- only, which is set only when the manifold was created.</p>
218
- <p>Here is the Whitehead link:</p>
219
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;L5a1&#39;</span><span class="p">)</span>
220
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">DT_code</span><span class="p">()</span>
221
- <span class="go">[(6, 8), (2, 10, 4)]</span>
222
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">DT_code</span><span class="p">(</span><span class="n">alpha</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
223
- <span class="go">&#39;ebbccdaeb&#39;</span>
224
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">DT_code</span><span class="p">(</span><span class="n">alpha</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">flips</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
225
- <span class="go">&#39;ebbccdaeb.01110&#39;</span>
226
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">DT_code</span><span class="p">(</span><span class="n">flips</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
227
- <span class="go">([(6, 8), (2, 10, 4)], [0, 1, 1, 1, 0])</span>
228
- </pre></div>
229
- </div>
230
- </dd></dl>
231
-
232
- <dl class="py method">
233
- <dt class="sig sig-object py" id="snappy.Triangulation.alexander_polynomial">
234
- <span class="sig-name descname"><span class="pre">alexander_polynomial</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.alexander_polynomial" title="Permalink to this definition"></a></dt>
235
- <dd><p>Computes the multivariable Alexander polynomial of the manifold:</p>
236
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;K12n123&#39;</span><span class="p">)</span>
237
- <span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">.</span><span class="n">alexander_polynomial</span><span class="p">()</span>
238
- <span class="mi">2</span><span class="o">*</span><span class="n">a</span><span class="o">^</span><span class="mi">6</span> <span class="o">-</span> <span class="mi">14</span><span class="o">*</span><span class="n">a</span><span class="o">^</span><span class="mi">5</span> <span class="o">+</span> <span class="mi">34</span><span class="o">*</span><span class="n">a</span><span class="o">^</span><span class="mi">4</span> <span class="o">-</span> <span class="mi">45</span><span class="o">*</span><span class="n">a</span><span class="o">^</span><span class="mi">3</span> <span class="o">+</span> <span class="mi">34</span><span class="o">*</span><span class="n">a</span><span class="o">^</span><span class="mi">2</span> <span class="o">-</span> <span class="mi">14</span><span class="o">*</span><span class="n">a</span> <span class="o">+</span> <span class="mi">2</span>
239
-
240
- <span class="n">sage</span><span class="p">:</span> <span class="n">N</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;v1539(5,1)&#39;</span><span class="p">)</span>
241
- <span class="n">sage</span><span class="p">:</span> <span class="n">N</span><span class="o">.</span><span class="n">alexander_polynomial</span><span class="p">()</span>
242
- <span class="n">a</span><span class="o">^</span><span class="mi">2</span><span class="o">*</span><span class="n">b</span> <span class="o">+</span> <span class="n">a</span><span class="o">*</span><span class="n">b</span><span class="o">^</span><span class="mi">2</span> <span class="o">+</span> <span class="n">a</span><span class="o">*</span><span class="n">b</span> <span class="o">+</span> <span class="n">a</span> <span class="o">+</span> <span class="n">b</span>
243
- </pre></div>
244
- </div>
245
- <p>Any provided keyword arguments are passed to fundamental_group and
246
- so affect the group presentation used in the computation.</p>
247
- </dd></dl>
248
-
249
- <dl class="py method">
250
- <dt class="sig sig-object py" id="snappy.Triangulation.copy">
251
- <span class="sig-name descname"><span class="pre">copy</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.copy" title="Permalink to this definition"></a></dt>
252
- <dd><p>Returns a copy of the triangulation.</p>
253
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;m125&#39;</span><span class="p">)</span>
254
- <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
255
- </pre></div>
256
- </div>
257
- </dd></dl>
258
-
259
- <dl class="py method">
260
- <dt class="sig sig-object py" id="snappy.Triangulation.cover">
261
- <span class="sig-name descname"><span class="pre">cover</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">permutation_rep</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.cover" title="Permalink to this definition"></a></dt>
262
- <dd><p>Returns a Triangulation representing the finite cover
263
- specified by a transitive permutation representation. The
264
- representation is specified by a list of permutations, one for
265
- each generator of the simplified presentation of the
266
- fundamental group. Each permutation is specified as a list P
267
- such that set(P) == set(range(d)) where d is the degree of the
268
- cover.</p>
269
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;m004&#39;</span><span class="p">)</span>
270
- <span class="gp">&gt;&gt;&gt; </span><span class="n">N0</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">cover</span><span class="p">([[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">2</span><span class="p">],</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">3</span><span class="p">]])</span>
271
- <span class="gp">&gt;&gt;&gt; </span><span class="n">N0</span><span class="o">.</span><span class="n">homology</span><span class="p">()</span>
272
- <span class="go">Z + Z + Z</span>
273
- <span class="gp">&gt;&gt;&gt; </span><span class="n">N0</span><span class="o">.</span><span class="n">cover_info</span><span class="p">()[</span><span class="s1">&#39;type&#39;</span><span class="p">]</span>
274
- <span class="go">&#39;irregular&#39;</span>
275
- <span class="gp">&gt;&gt;&gt; </span><span class="n">N0</span><span class="o">.</span><span class="n">cover_info</span><span class="p">()[</span><span class="s1">&#39;base&#39;</span><span class="p">]</span>
276
- <span class="go">&#39;m004&#39;</span>
277
- <span class="gp">&gt;&gt;&gt; </span><span class="n">N0</span><span class="o">.</span><span class="n">cover_info</span><span class="p">()[</span><span class="s1">&#39;degree&#39;</span><span class="p">]</span>
278
- <span class="go">5</span>
279
- </pre></div>
280
- </div>
281
- <p>Within Sage the permutations can also be of type
282
- PermutationGroupElement, in which case they act on the set
283
- range(1, d + 1). Or, you can specify a GAP or Magma subgroup
284
- of the fundamental group. For examples, see the docstring for
285
- Manifold.cover</p>
286
- </dd></dl>
287
-
288
- <dl class="py method">
289
- <dt class="sig sig-object py" id="snappy.Triangulation.cover_info">
290
- <span class="sig-name descname"><span class="pre">cover_info</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.cover_info" title="Permalink to this definition"></a></dt>
291
- <dd><p>If this is a manifold or triangulation which was constructed as
292
- a covering space, return a dictionary describing the cover. Otherwise
293
- return 0. The dictionary keys are ‘base’, ‘type’ and ‘degree’.</p>
294
- </dd></dl>
295
-
296
- <dl class="py method">
297
- <dt class="sig sig-object py" id="snappy.Triangulation.covers">
298
- <span class="sig-name descname"><span class="pre">covers</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">degree</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">method</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">cover_type</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'all'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.covers" title="Permalink to this definition"></a></dt>
299
- <dd><p>M.covers(degree, method=None, cover_type=’all)</p>
300
- <p>Returns a list of Triangulations corresponding to all of the
301
- finite covers of the given degree. The default method is
302
- ‘low_index’ for general covers and ‘snappea’ for cyclic
303
- covers. The former uses Sim’s algorithm while the latter
304
- uses the original Snappea algorithm.</p>
305
- <p>WARNING: If the degree is large this might take a very, very,
306
- very long time.</p>
307
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;m003&#39;</span><span class="p">)</span>
308
- <span class="gp">&gt;&gt;&gt; </span><span class="n">covers</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">covers</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span>
309
- <span class="gp">&gt;&gt;&gt; </span><span class="nb">sorted</span><span class="p">(</span><span class="n">N</span><span class="o">.</span><span class="n">homology</span><span class="p">()</span> <span class="k">for</span> <span class="n">N</span> <span class="ow">in</span> <span class="n">covers</span><span class="p">)</span>
310
- <span class="go">[Z/3 + Z/15 + Z, Z/5 + Z + Z]</span>
311
- </pre></div>
312
- </div>
313
- <p>It is faster to look just at cyclic covers.</p>
314
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">covers</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">covers</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="n">cover_type</span><span class="o">=</span><span class="s1">&#39;cyclic&#39;</span><span class="p">)</span>
315
- <span class="gp">&gt;&gt;&gt; </span><span class="p">[(</span><span class="n">N</span><span class="p">,</span> <span class="n">N</span><span class="o">.</span><span class="n">homology</span><span class="p">())</span> <span class="k">for</span> <span class="n">N</span> <span class="ow">in</span> <span class="n">covers</span><span class="p">]</span>
316
- <span class="go">[(m003~cyc~0(0,0), Z/3 + Z/15 + Z)]</span>
317
- </pre></div>
318
- </div>
319
- <p>Here we check that we get the same number of covers with the
320
- ‘snappea’ and ‘low_index’ methods.</p>
321
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;m125&#39;</span><span class="p">)</span>
322
- <span class="gp">&gt;&gt;&gt; </span><span class="nb">len</span><span class="p">(</span><span class="n">M</span><span class="o">.</span><span class="n">covers</span><span class="p">(</span><span class="mi">5</span><span class="p">))</span>
323
- <span class="go">19</span>
324
- <span class="gp">&gt;&gt;&gt; </span><span class="nb">len</span><span class="p">(</span><span class="n">M</span><span class="o">.</span><span class="n">covers</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="n">method</span><span class="o">=</span><span class="s1">&#39;snappea&#39;</span><span class="p">))</span>
325
- <span class="go">19</span>
326
- </pre></div>
327
- </div>
328
- <p>If you are using Sage, you can use GAP to find the subgroups,
329
- which is often much faster, by specifying the optional
330
- argument method = ‘gap’ If you have Magma installed, you can
331
- used it to do the heavy lifting by specifying method=’magma’.</p>
332
- </dd></dl>
333
-
334
- <dl class="py method">
335
- <dt class="sig sig-object py" id="snappy.Triangulation.cusp_info">
336
- <span class="sig-name descname"><span class="pre">cusp_info</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data_spec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.cusp_info" title="Permalink to this definition"></a></dt>
337
- <dd><p>Returns an info object containing information about the given
338
- cusp. Usage:</p>
339
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;v3227(0,0)(1,2)(3,2)&#39;</span><span class="p">)</span>
340
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_info</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
341
- <span class="go">Cusp 1 : torus cusp with Dehn filling coefficients (M, L) = (1.0, 2.0)</span>
342
- <span class="gp">&gt;&gt;&gt; </span><span class="n">c</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">cusp_info</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
343
- <span class="gp">&gt;&gt;&gt; </span><span class="n">c</span><span class="o">.</span><span class="n">is_complete</span>
344
- <span class="go">False</span>
345
- <span class="gp">&gt;&gt;&gt; </span><span class="nb">sorted</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
346
- <span class="go">[&#39;filling&#39;, &#39;index&#39;, &#39;is_complete&#39;, &#39;topology&#39;]</span>
347
- </pre></div>
348
- </div>
349
- <p>You can get information about multiple cusps at once:</p>
350
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_info</span><span class="p">()</span>
351
- <span class="go">[Cusp 0 : torus cusp, not filled,</span>
352
- <span class="go"> Cusp 1 : torus cusp with Dehn filling coefficients (M, L) = (1.0, 2.0),</span>
353
- <span class="go"> Cusp 2 : torus cusp with Dehn filling coefficients (M, L) = (3.0, 2.0)]</span>
354
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_info</span><span class="p">(</span><span class="s1">&#39;is_complete&#39;</span><span class="p">)</span>
355
- <span class="go">[True, False, False]</span>
356
- </pre></div>
357
- </div>
358
- </dd></dl>
359
-
360
- <dl class="py method">
361
- <dt class="sig sig-object py" id="snappy.Triangulation.dehn_fill">
362
- <span class="sig-name descname"><span class="pre">dehn_fill</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">filling_data</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">which_cusp</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.dehn_fill" title="Permalink to this definition"></a></dt>
363
- <dd><p>Set the Dehn filling coefficients of the cusps. This can be
364
- specified in the following ways, where the cusps are numbered
365
- by 0,1,…,(num_cusps - 1).</p>
366
- <ul>
367
- <li><p>Fill cusp 2:</p>
368
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;8^4_1&#39;</span><span class="p">)</span>
369
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">dehn_fill</span><span class="p">((</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">),</span> <span class="mi">2</span><span class="p">)</span>
370
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span>
371
- <span class="go">8^4_1(0,0)(0,0)(2,3)(0,0)</span>
372
- </pre></div>
373
- </div>
374
- </li>
375
- <li><p>Fill the last cusp:</p>
376
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">dehn_fill</span><span class="p">((</span><span class="mi">1</span><span class="p">,</span><span class="mi">5</span><span class="p">),</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
377
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span>
378
- <span class="go">8^4_1(0,0)(0,0)(2,3)(1,5)</span>
379
- </pre></div>
380
- </div>
381
- </li>
382
- <li><p>Fill the first two cusps:</p>
383
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">dehn_fill</span><span class="p">(</span> <span class="p">[</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">0</span><span class="p">),</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">4</span><span class="p">)</span> <span class="p">])</span>
384
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span>
385
- <span class="go">8^4_1(3,0)(1,-4)(2,3)(1,5)</span>
386
- </pre></div>
387
- </div>
388
- </li>
389
- <li><p>When there is only one cusp, there’s a shortcut</p>
390
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">N</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;m004&#39;</span><span class="p">)</span>
391
- <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">dehn_fill</span><span class="p">(</span> <span class="p">(</span><span class="o">-</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="p">)</span> <span class="p">)</span>
392
- <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span>
393
- <span class="go">m004(-3,4)</span>
394
- </pre></div>
395
- </div>
396
- </li>
397
- </ul>
398
- <p>Does not return a new Triangulation.</p>
399
- </dd></dl>
400
-
401
- <dl class="py method">
402
- <dt class="sig sig-object py" id="snappy.Triangulation.edge_valences">
403
- <span class="sig-name descname"><span class="pre">edge_valences</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.edge_valences" title="Permalink to this definition"></a></dt>
404
- <dd><p>Returns a dictionary whose keys are the valences of the edges
405
- in the triangulation, and the value associated to a key is the
406
- number of edges of that valence.</p>
407
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;v3227&#39;</span><span class="p">)</span>
408
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">edge_valences</span><span class="p">()</span>
409
- <span class="go">{10: 1, 4: 1, 5: 2, 6: 3}</span>
410
- </pre></div>
411
- </div>
412
- </dd></dl>
413
-
414
- <dl class="py method">
415
- <dt class="sig sig-object py" id="snappy.Triangulation.exterior_to_link">
416
- <span class="sig-name descname"><span class="pre">exterior_to_link</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">check_input</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">check_answer</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">careful_perturbation</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">simplify_link</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pachner_search_tries</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">10</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">seed</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.exterior_to_link" title="Permalink to this definition"></a></dt>
417
- <dd><p>For a triangulation of the exterior of a link in the 3-sphere,
418
- return a planar diagram for the link. The peripheral curves whose
419
- Dehn filling is the 3-sphere are <strong>part of the input</strong>, specified
420
- by either:</p>
421
- <ol class="loweralpha simple">
422
- <li><p>If no cusp is filled, then they are the meridians of the
423
- current peripheral curves.</p></li>
424
- <li><p>If every cusp is filled, then they are the current Dehn filling
425
- curves.</p></li>
426
- </ol>
427
- <p>In particular, it does <strong>not</strong> try to determine whether there exist
428
- fillings on the input which give the 3-sphere. Example usage:</p>
429
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;m016&#39;</span><span class="p">)</span>
430
- <span class="gp">&gt;&gt;&gt; </span><span class="n">L</span> <span class="o">=</span> <span class="n">exterior_to_link</span><span class="p">(</span><span class="n">M</span><span class="p">)</span>
431
- <span class="gp">&gt;&gt;&gt; </span><span class="n">L</span><span class="o">.</span><span class="n">exterior</span><span class="p">()</span><span class="o">.</span><span class="n">is_isometric_to</span><span class="p">(</span><span class="n">M</span><span class="p">)</span>
432
- <span class="go">True</span>
433
- </pre></div>
434
- </div>
435
- <p>The algorithm used is that of <a class="reference external" href="https://arxiv.org/abs/2112.03251">Dunfield, Obeidin, and Rudd</a>. The optional arguments are
436
- as follows.</p>
437
- <ul class="simple">
438
- <li><p><code class="docutils literal notranslate"><span class="pre">verbose</span></code>: When <code class="docutils literal notranslate"><span class="pre">True</span></code>, prints progress updates as the algorithm
439
- goes along.</p></li>
440
- <li><p><code class="docutils literal notranslate"><span class="pre">check_input</span></code>: When <code class="docutils literal notranslate"><span class="pre">True</span></code> (the default), first checks that the
441
- fundamental group of the specified Dehn filling is trivial. As
442
- it doesn’t try too hard to simplify the group presentation, it
443
- can happen that this check fails but the algorithm still finds a
444
- diagram if you pass <code class="docutils literal notranslate"><span class="pre">check_input=False</span></code>.</p></li>
445
- <li><p><code class="docutils literal notranslate"><span class="pre">check_answer</span></code>: When <code class="docutils literal notranslate"><span class="pre">True</span></code> (the default), take the exterior of
446
- the final link diagram and use <code class="docutils literal notranslate"><span class="pre">Manifold.is_isometric_to</span></code> to
447
- confirm that it is homeomorphic to the input. If the input is
448
- not hyperbolic or is very large, this check may fail even though
449
- the diagram is correct.</p></li>
450
- <li><p><code class="docutils literal notranslate"><span class="pre">careful_perturbation</span></code>: The rational coordinates of the
451
- intermediate PL links are periodically rounded to control the
452
- size of their denominators. When <code class="docutils literal notranslate"><span class="pre">careful_perturbation=True</span></code>
453
- (the default), computations are performed to ensure this
454
- rounding does not change the isotopy class of the link.</p></li>
455
- <li><p><code class="docutils literal notranslate"><span class="pre">simplify_link</span></code>: When <code class="docutils literal notranslate"><span class="pre">True</span></code> (the default), uses
456
- <code class="docutils literal notranslate"><span class="pre">Link.simplify('global')</span></code> to minimize the size of the final
457
- diagram; otherwise, it just does <code class="docutils literal notranslate"><span class="pre">basic</span></code> simplifications, which
458
- can be much faster if the initial link is complicated.</p></li>
459
- <li><p><code class="docutils literal notranslate"><span class="pre">pachner_search_tries</span></code>: Controls how hard to search for a
460
- suitable sequence of Pachner moves from the filled input
461
- triangulation to a standard triangulation of the 3-sphere.</p></li>
462
- <li><p><code class="docutils literal notranslate"><span class="pre">seed</span></code>: The algorithm involves many random choices, and hence
463
- each run typically produces a different diagram of the
464
- underlying link. If you need the same output each time, you can
465
- specify a fixed seed for the various pseudo-random number
466
- generators.</p></li>
467
- </ul>
468
- <p>Note on rigor: Provided at least one of <code class="docutils literal notranslate"><span class="pre">check_answer</span></code> and
469
- <code class="docutils literal notranslate"><span class="pre">careful_perturbation</span></code> is <code class="docutils literal notranslate"><span class="pre">True</span></code>, the exterior of the output
470
- link is guaranteed to match the input (including the choice of
471
- meridians).</p>
472
- <p><strong>Warning:</strong> The order of the link components and the cusps of the
473
- input manifold is only guaranteed to match when
474
- <code class="docutils literal notranslate"><span class="pre">check_answer=True</span></code>. Even then, the implicit orientation along
475
- each component of the link may not be preserved.</p>
476
- </dd></dl>
477
-
478
- <dl class="py method">
479
- <dt class="sig sig-object py" id="snappy.Triangulation.filled_triangulation">
480
- <span class="sig-name descname"><span class="pre">filled_triangulation</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cusps_to_fill</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'all'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.filled_triangulation" title="Permalink to this definition"></a></dt>
481
- <dd><p>Return a new manifold where the specified cusps have been
482
- permanently filled in. Examples:</p>
483
- <p>Filling all the cusps:</p>
484
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;m125(1,2)(3,4)&#39;</span><span class="p">)</span>
485
- <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">filled_triangulation</span><span class="p">()</span>
486
- <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">num_cusps</span><span class="p">()</span>
487
- <span class="go">0</span>
488
- </pre></div>
489
- </div>
490
- <p>Filling cusps 0 and 2 :</p>
491
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;v3227(1,2)(3,4)(5,6)&#39;</span><span class="p">)</span>
492
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">filled_triangulation</span><span class="p">([</span><span class="mi">0</span><span class="p">,</span><span class="mi">2</span><span class="p">])</span>
493
- <span class="go">v3227_filled(3,4)</span>
494
- </pre></div>
495
- </div>
496
- </dd></dl>
497
-
498
- <dl class="py method">
499
- <dt class="sig sig-object py" id="snappy.Triangulation.fundamental_group">
500
- <span class="sig-name descname"><span class="pre">fundamental_group</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">simplify_presentation</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fillings_may_affect_generators</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">minimize_number_of_generators</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">try_hard_to_shorten_relators</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.fundamental_group" title="Permalink to this definition"></a></dt>
501
- <dd><p>Returns a FundamentalGroup object representing the fundamental
502
- group of the manifold. If integer Dehn surgery parameters
503
- have been set, then the corresponding peripheral elements are
504
- killed.</p>
505
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;m004&#39;</span><span class="p">)</span>
506
- <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">fundamental_group</span><span class="p">()</span>
507
- <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span>
508
- <span class="go">Generators:</span>
509
- <span class="go"> a,b</span>
510
- <span class="go">Relators:</span>
511
- <span class="go"> aaabABBAb</span>
512
- <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span><span class="o">.</span><span class="n">peripheral_curves</span><span class="p">()</span>
513
- <span class="go">[(&#39;ab&#39;, &#39;aBAbABab&#39;)]</span>
514
- </pre></div>
515
- </div>
516
- <p>There are four optional arguments all of which default to True:</p>
517
- <ul class="simple">
518
- <li><p>simplify_presentation</p></li>
519
- <li><p>fillings_may_affect_generators</p></li>
520
- <li><p>minimize_number_of_generators</p></li>
521
- <li><p>try_hard_to_shorten_relators</p></li>
522
- </ul>
523
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">fundamental_group</span><span class="p">(</span><span class="kc">False</span><span class="p">,</span> <span class="kc">False</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
524
- <span class="go">Generators:</span>
525
- <span class="go"> a,b,c</span>
526
- <span class="go">Relators:</span>
527
- <span class="go"> CbAcB</span>
528
- <span class="go"> BacA</span>
529
- </pre></div>
530
- </div>
531
- </dd></dl>
532
-
533
- <dl class="py method">
534
- <dt class="sig sig-object py" id="snappy.Triangulation.gluing_equations">
535
- <span class="sig-name descname"><span class="pre">gluing_equations</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">form</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'log'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.gluing_equations" title="Permalink to this definition"></a></dt>
536
- <dd><p>In the default mode, this function returns a matrix with rows
537
- of the form</p>
538
- <blockquote>
539
- <div><p>a b c d e f …</p>
540
- </div></blockquote>
541
- <p>which means</p>
542
- <blockquote>
543
- <div><p>a*log(z0) + b*log(1/(1-z0)) + c*log((z0-1)/z0) + d*log(z1) +… = 2 pi i</p>
544
- </div></blockquote>
545
- <p>for an edge equation, and (same) = 0 for a cusp equation.
546
- Here, the cusp equations come at the bottom of the matrix, and
547
- are listed in the form: meridian of cusp 0, longitude of cusp
548
- 0, meridian of cusp 1, longitude of cusp 1,…</p>
549
- <p>In terms of the tetrahedra, a is the invariant of the edge
550
- (2,3), b the invariant of the edge (0,2) and c is the
551
- invariant of the edge (1,2). See kernel_code/edge_classes.c
552
- for a detailed account of the convention used.</p>
553
- <p>If the optional argument form=’rect’ is given, then this
554
- function returns a list of tuples of the form:</p>
555
- <blockquote>
556
- <div><p>( [a0, a1,..,a_n], [b_0, b_1,…,b_n], c)</p>
557
- </div></blockquote>
558
- <p>where this corresponds to the equation</p>
559
- <blockquote>
560
- <div><p>z0^a0 (1 - z0)^b0 z1^a1(1 - z1)^b1 = c</p>
561
- </div></blockquote>
562
- <p>where c = 1 or -1.</p>
563
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;m004(2,3)&#39;</span><span class="p">)</span>
564
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">gluing_equations</span><span class="p">()</span>
565
- <span class="go">[ 2 1 0 1 0 2]</span>
566
- <span class="go">[ 0 1 2 1 2 0]</span>
567
- <span class="go">[ 2 0 0 0 -8 6]</span>
568
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">gluing_equations</span><span class="p">(</span><span class="n">form</span><span class="o">=</span><span class="s1">&#39;rect&#39;</span><span class="p">)</span>
569
- <span class="go">[([2, -1], [-1, 2], 1), ([-2, 1], [1, -2], 1), ([2, -6], [0, 14], 1)]</span>
570
- </pre></div>
571
- </div>
572
- </dd></dl>
573
-
574
- <dl class="py method">
575
- <dt class="sig sig-object py" id="snappy.Triangulation.gluing_equations_pgl">
576
- <span class="sig-name descname"><span class="pre">gluing_equations_pgl</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">N</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">2</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">equation_type</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'all'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.gluing_equations_pgl" title="Permalink to this definition"></a></dt>
577
- <dd><p>M.gluing_equations_pgl(N = 2, equation_type=’all’)</p>
578
- <p>Returns a NeumannZagierTypeEquations object that contains a matrix
579
- encoding the gluing equations for boundary-parabolic PGL(N,C)
580
- representations together with explanations of the meaning
581
- of the rows and the columns of the matrix.</p>
582
- <p>This method generalizes gluing_equations() to PGL(N,C)-representations
583
- as described in
584
- Stavros Garoufalidis, Matthias Goerner, Christian K. Zickert:
585
- “Gluing Equations for PGL(n,C)-Representations of 3-Manifolds”
586
- (<a class="reference external" href="http://arxiv.org/abs/1207.6711">http://arxiv.org/abs/1207.6711</a>).</p>
587
- <p>The result of the traditional gluing_equations() can be obtained from
588
- the general method by:</p>
589
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;m004&#39;</span><span class="p">)</span>
590
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">gluing_equations_pgl</span><span class="p">()</span><span class="o">.</span><span class="n">matrix</span>
591
- <span class="go">[ 2 1 0 1 0 2]</span>
592
- <span class="go">[ 0 1 2 1 2 0]</span>
593
- <span class="go">[ 1 0 0 0 -1 0]</span>
594
- <span class="go">[ 0 0 0 0 -2 2]</span>
595
- </pre></div>
596
- </div>
597
- <p>But besides the matrix, the method also returns explanations of
598
- the columns and rows:</p>
599
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s2">&quot;m004&quot;</span><span class="p">)</span>
600
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">gluing_equations_pgl</span><span class="p">()</span>
601
- <span class="go">NeumannZagierTypeEquations(</span>
602
- <span class="go"> [ 2 1 0 1 0 2]</span>
603
- <span class="go"> [ 0 1 2 1 2 0]</span>
604
- <span class="go"> [ 1 0 0 0 -1 0]</span>
605
- <span class="go"> [ 0 0 0 0 -2 2],</span>
606
- <span class="go"> explain_columns = [&#39;z_0000_0&#39;, &#39;zp_0000_0&#39;, &#39;zpp_0000_0&#39;, &#39;z_0000_1&#39;, &#39;zp_0000_1&#39;, &#39;zpp_0000_1&#39;],</span>
607
- <span class="go"> explain_rows = [&#39;edge_0_0&#39;, &#39;edge_0_1&#39;, &#39;meridian_0_0&#39;, &#39;longitude_0_0&#39;])</span>
608
- </pre></div>
609
- </div>
610
- <p>The first row of the matrix means that the edge equation for
611
- edge 0 is</p>
612
- <blockquote>
613
- <div><p>z_0000_0 ^ 2 * zp_0000_0 * z_0000_1 * zpp_0000_1 ^ 2 = 1.</p>
614
- </div></blockquote>
615
- <p>Similarly, the next row encodes the edge equation for the other edge
616
- and the next two rows encode peripheral equations.</p>
617
- <p>Following the SnapPy convention, a z denotes the cross ratio z at the
618
- edge (0,1), a zp the cross ratio z’ at the edge (0,2) and a zpp the cross
619
- ratio z” at the edge (1,2). The entire symbol z_xxxx_y then
620
- denotes the cross ratio belonging to the subsimplex at integral
621
- point xxxx (always 0000 for N = 2) of the simplex y. Note: the
622
- SnapPy convention is different from the paper
623
- mentioned above, e.g., compare
624
- kernel_code/edge_classes.c with Figure 3. We follow the SnapPy
625
- convention here so that all computations done in SnapPy are
626
- consistent.</p>
627
- <p>The explanations of the rows and columns can be obtained explicitly by:</p>
628
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">gluing_equations_pgl</span><span class="p">(</span><span class="n">N</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span> <span class="n">equation_type</span> <span class="o">=</span> <span class="s1">&#39;peripheral&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">explain_rows</span>
629
- <span class="go">[&#39;meridian_0_0&#39;, &#39;meridian_1_0&#39;, &#39;longitude_0_0&#39;, &#39;longitude_1_0&#39;]</span>
630
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">gluing_equations_pgl</span><span class="p">(</span><span class="n">N</span> <span class="o">=</span> <span class="mi">2</span><span class="p">)</span><span class="o">.</span><span class="n">explain_columns</span>
631
- <span class="go">[&#39;z_0000_0&#39;, &#39;zp_0000_0&#39;, &#39;zpp_0000_0&#39;, &#39;z_0000_1&#39;, &#39;zp_0000_1&#39;, &#39;zpp_0000_1&#39;]</span>
632
- </pre></div>
633
- </div>
634
- <p>A subset of all gluing equations can be obtained by setting the
635
- equation_type:</p>
636
- <ul class="simple">
637
- <li><p>all gluing equations: ‘all’</p></li>
638
- <li><p>non-peripheral equations: ‘non_peripheral’</p>
639
- <ul>
640
- <li><p>edge gluing equations: ‘edge’</p></li>
641
- <li><p>face gluing equations: ‘face’</p></li>
642
- <li><p>internal gluing equations: ‘internal’</p></li>
643
- </ul>
644
- </li>
645
- <li><p>cusp gluing equations: ‘peripheral’</p>
646
- <ul>
647
- <li><p>cusp gluing equations for meridians: ‘meridian’</p></li>
648
- <li><p>cusp gluing equations for longitudes: ‘longitude’</p></li>
649
- </ul>
650
- </li>
651
- </ul>
652
- </dd></dl>
653
-
654
- <dl class="py method">
655
- <dt class="sig sig-object py" id="snappy.Triangulation.has_finite_vertices">
656
- <span class="sig-name descname"><span class="pre">has_finite_vertices</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.has_finite_vertices" title="Permalink to this definition"></a></dt>
657
- <dd><p>Returns True if and only if the triangulation has finite (non-ideal)
658
- vertices.</p>
659
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">T</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s2">&quot;m004&quot;</span><span class="p">)</span>
660
- <span class="gp">&gt;&gt;&gt; </span><span class="n">T</span><span class="o">.</span><span class="n">has_finite_vertices</span><span class="p">()</span>
661
- <span class="go">False</span>
662
- <span class="gp">&gt;&gt;&gt; </span><span class="n">T</span><span class="o">.</span><span class="n">dehn_fill</span><span class="p">((</span><span class="mi">12</span><span class="p">,</span><span class="mi">13</span><span class="p">))</span>
663
- <span class="gp">&gt;&gt;&gt; </span><span class="n">S</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">filled_triangulation</span><span class="p">()</span>
664
- <span class="gp">&gt;&gt;&gt; </span><span class="n">S</span><span class="o">.</span><span class="n">has_finite_vertices</span><span class="p">()</span>
665
- <span class="go">True</span>
666
- </pre></div>
667
- </div>
668
- <p>When trying to find a hyperbolic structure, SnapPea will eliminate
669
- finite vertices:</p>
670
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">S</span><span class="o">.</span><span class="n">with_hyperbolic_structure</span><span class="p">()</span>
671
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">has_finite_vertices</span><span class="p">()</span>
672
- <span class="go">False</span>
673
- </pre></div>
674
- </div>
675
- </dd></dl>
676
-
677
- <dl class="py method">
678
- <dt class="sig sig-object py" id="snappy.Triangulation.homological_longitude">
679
- <span class="sig-name descname"><span class="pre">homological_longitude</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cusp</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.homological_longitude" title="Permalink to this definition"></a></dt>
680
- <dd><p>Returns the peripheral curve in the given cusp, if any, which is
681
- homologically trivial (with rational coefficients) in the manifold:</p>
682
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;m015&#39;</span><span class="p">)</span>
683
- <span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">.</span><span class="n">homological_longitude</span><span class="p">()</span>
684
- <span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
685
- </pre></div>
686
- </div>
687
- <p>If no cusp is specified, the default is the first unfilled cusp;
688
- if all cusps are filled, the default is the first cusp:</p>
689
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;L5a1(3,4)(0,0)&#39;</span><span class="p">)</span>
690
- <span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">.</span><span class="n">homological_longitude</span><span class="p">()</span>
691
- <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
692
- </pre></div>
693
- </div>
694
- <p>The components of the next link have nontrivial linking number
695
- so there is no such curve:</p>
696
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">W</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;L7a2&#39;</span><span class="p">)</span>
697
- <span class="n">sage</span><span class="p">:</span> <span class="n">W</span><span class="o">.</span><span class="n">homological_longitude</span><span class="p">(</span><span class="n">cusp</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">None</span>
698
- <span class="kc">True</span>
699
- </pre></div>
700
- </div>
701
- <p>If every curve in the given cusp is trivial in the rational homology of
702
- the manifold, an exception is raised:</p>
703
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;4_1(1,0)&#39;</span><span class="p">)</span>
704
- <span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">.</span><span class="n">homological_longitude</span><span class="p">()</span>
705
- <span class="n">Traceback</span> <span class="p">(</span><span class="n">most</span> <span class="n">recent</span> <span class="n">call</span> <span class="n">last</span><span class="p">):</span>
706
- <span class="o">...</span>
707
- <span class="ne">ValueError</span><span class="p">:</span> <span class="n">Every</span> <span class="n">curve</span> <span class="n">on</span> <span class="n">cusp</span> <span class="ow">is</span> <span class="n">homologically</span> <span class="n">trivial</span>
708
- </pre></div>
709
- </div>
710
- </dd></dl>
711
-
712
- <dl class="py method">
713
- <dt class="sig sig-object py" id="snappy.Triangulation.homology">
714
- <span class="sig-name descname"><span class="pre">homology</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.homology" title="Permalink to this definition"></a></dt>
715
- <dd><p>Returns an AbelianGroup representing the first integral
716
- homology group of the underlying (Dehn filled) manifold.</p>
717
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;m003&#39;</span><span class="p">)</span>
718
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">homology</span><span class="p">()</span>
719
- <span class="go">Z/5 + Z</span>
720
- </pre></div>
721
- </div>
722
- </dd></dl>
723
-
724
- <dl class="py method">
725
- <dt class="sig sig-object py" id="snappy.Triangulation.is_orientable">
726
- <span class="sig-name descname"><span class="pre">is_orientable</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.is_orientable" title="Permalink to this definition"></a></dt>
727
- <dd><p>Return whether the underlying 3-manifold is orientable.</p>
728
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;x124&#39;</span><span class="p">)</span>
729
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">is_orientable</span><span class="p">()</span>
730
- <span class="go">False</span>
731
- </pre></div>
732
- </div>
733
- </dd></dl>
734
-
735
- <dl class="py method">
736
- <dt class="sig sig-object py" id="snappy.Triangulation.isomorphisms_to">
737
- <span class="sig-name descname"><span class="pre">isomorphisms_to</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">Triangulation</span> <span class="pre">other</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.isomorphisms_to" title="Permalink to this definition"></a></dt>
738
- <dd><p>Returns a complete list of combinatorial isomorphisms between
739
- the two triangulations:</p>
740
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;5^2_1&#39;</span><span class="p">)</span>
741
- <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;5^2_1&#39;</span><span class="p">)</span>
742
- <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">set_peripheral_curves</span><span class="p">([[[</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">],[</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">]],[[</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">],[</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">]]])</span>
743
- <span class="gp">&gt;&gt;&gt; </span><span class="n">isoms</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">isomorphisms_to</span><span class="p">(</span><span class="n">N</span><span class="p">)</span>
744
- <span class="gp">&gt;&gt;&gt; </span><span class="n">isoms</span><span class="p">[</span><span class="mi">6</span><span class="p">]</span>
745
- <span class="go">0 -&gt; 1 1 -&gt; 0</span>
746
- <span class="go">[ 1 0] [-1 1]</span>
747
- <span class="go">[-1 1] [-3 2]</span>
748
- <span class="go">Does not extend to link</span>
749
- </pre></div>
750
- </div>
751
- <p>Each transformation between cusps is given by a matrix which
752
- acts on the left. That is, the two <em>columns</em> of the matrix
753
- give the image of the meridian and longitude respectively. In
754
- the above example, the meridian of cusp 0 is sent to the
755
- meridian of cusp 1.</p>
756
- </dd></dl>
757
-
758
- <dl class="py method">
759
- <dt class="sig sig-object py" id="snappy.Triangulation.link">
760
- <span class="sig-name descname"><span class="pre">link</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.link" title="Permalink to this definition"></a></dt>
761
- <dd><p>If the manifold is stored as a link complement in your
762
- current session then it returns the number of components
763
- and crossing of the link. To view and interact with the
764
- link see <a class="reference internal" href="spherogram.html#spherogram.Link.view" title="spherogram.Link.view"><code class="xref py py-meth docutils literal notranslate"><span class="pre">spherogram.Link.view()</span></code></a>
765
- and <a class="reference internal" href="manifold.html#snappy.Manifold.plink" title="snappy.Manifold.plink"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Manifold.plink()</span></code></a>.</p>
766
- </dd></dl>
767
-
768
- <dl class="py method">
769
- <dt class="sig sig-object py" id="snappy.Triangulation.name">
770
- <span class="sig-name descname"><span class="pre">name</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.name" title="Permalink to this definition"></a></dt>
771
- <dd><p>Return the name of the triangulation.</p>
772
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;4_1&#39;</span><span class="p">)</span>
773
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">name</span><span class="p">()</span>
774
- <span class="go">&#39;4_1&#39;</span>
775
- </pre></div>
776
- </div>
777
- </dd></dl>
778
-
779
- <dl class="py method">
780
- <dt class="sig sig-object py" id="snappy.Triangulation.normal_boundary_slopes">
781
- <span class="sig-name descname"><span class="pre">normal_boundary_slopes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">subset</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'all'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">algorithm</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'FXrays'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.normal_boundary_slopes" title="Permalink to this definition"></a></dt>
782
- <dd><p>For a one-cusped manifold, returns all the nonempty boundary slopes of
783
- spun normal surfaces. Provided the triangulation supports a
784
- genuine hyperbolic structure, then by <a class="reference external" href="http://arxiv.org/abs/math/0503027">Thurston and Walsh</a> any strict boundary slope
785
- (the boundary of an essential surface which is not a fiber or
786
- semifiber) must be listed here.</p>
787
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;K3_1&#39;</span><span class="p">)</span>
788
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">normal_boundary_slopes</span><span class="p">()</span>
789
- <span class="go">[(16, -1), (20, -1), (37, -2)]</span>
790
- </pre></div>
791
- </div>
792
- <p>If the <code class="docutils literal notranslate"><span class="pre">subset</span></code> flag is set to <code class="docutils literal notranslate"><span class="pre">'kabaya'</span></code>, then it only
793
- returns boundary slopes associated to vertex surfaces with a quad
794
- in every tetrahedron; by Theorem 1.1. of <a class="reference external" href="http://arxiv.org/abs/1102.4588">[DG]</a> these are all strict boundary
795
- slopes.</p>
796
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">N</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;m113&#39;</span><span class="p">)</span>
797
- <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">normal_boundary_slopes</span><span class="p">()</span>
798
- <span class="go">[(1, 1), (1, 2), (2, -1), (2, 3), (8, 11)]</span>
799
- <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">normal_boundary_slopes</span><span class="p">(</span><span class="s1">&#39;kabaya&#39;</span><span class="p">)</span>
800
- <span class="go">[(8, 11)]</span>
801
- </pre></div>
802
- </div>
803
- <p>If the <code class="docutils literal notranslate"><span class="pre">subset</span></code> flag is set to <code class="docutils literal notranslate"><span class="pre">'brasile'</span></code> then it returns
804
- only the boundary slopes that are associated to vertex surfaces
805
- giving isolated rays in the space of embedded normal surfaces.</p>
806
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">normal_boundary_slopes</span><span class="p">(</span><span class="s1">&#39;brasile&#39;</span><span class="p">)</span>
807
- <span class="go">[(1, 2), (8, 11)]</span>
808
- </pre></div>
809
- </div>
810
- </dd></dl>
811
-
812
- <dl class="py method">
813
- <dt class="sig sig-object py" id="snappy.Triangulation.normal_surfaces">
814
- <span class="sig-name descname"><span class="pre">normal_surfaces</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">algorithm</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'FXrays'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.normal_surfaces" title="Permalink to this definition"></a></dt>
815
- <dd><p>All the vertex spun-normal surfaces in the current triangulation.</p>
816
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;m004&#39;</span><span class="p">)</span>
817
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">normal_surfaces</span><span class="p">()</span>
818
- <span class="go">[&lt;Surface 0: [0, 0] [1, 2] (4, 1)&gt;,</span>
819
- <span class="go"> &lt;Surface 1: [0, 1] [1, 2] (4, -1)&gt;,</span>
820
- <span class="go"> &lt;Surface 2: [1, 2] [2, 1] (-4, -1)&gt;,</span>
821
- <span class="go"> &lt;Surface 3: [2, 2] [2, 1] (-4, 1)&gt;]</span>
822
- </pre></div>
823
- </div>
824
- </dd></dl>
825
-
826
- <dl class="py method">
827
- <dt class="sig sig-object py" id="snappy.Triangulation.num_cusps">
828
- <span class="sig-name descname"><span class="pre">num_cusps</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cusp_type</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'all'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.num_cusps" title="Permalink to this definition"></a></dt>
829
- <dd><p>Return the total number of cusps. By giving the optional argument
830
- ‘orientable’ or ‘nonorientable’ it will only count cusps of that type.</p>
831
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;m125&#39;</span><span class="p">)</span>
832
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">num_cusps</span><span class="p">()</span>
833
- <span class="go">2</span>
834
- </pre></div>
835
- </div>
836
- </dd></dl>
837
-
838
- <dl class="py method">
839
- <dt class="sig sig-object py" id="snappy.Triangulation.num_tetrahedra">
840
- <span class="sig-name descname"><span class="pre">num_tetrahedra</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.num_tetrahedra" title="Permalink to this definition"></a></dt>
841
- <dd><p>Return the number of tetrahedra in the triangulation.</p>
842
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;m004&#39;</span><span class="p">)</span>
843
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">num_tetrahedra</span><span class="p">()</span>
844
- <span class="go">2</span>
845
- </pre></div>
846
- </div>
847
- </dd></dl>
848
-
849
- <dl class="py method">
850
- <dt class="sig sig-object py" id="snappy.Triangulation.orientation_cover">
851
- <span class="sig-name descname"><span class="pre">orientation_cover</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.orientation_cover" title="Permalink to this definition"></a></dt>
852
- <dd><p>For a non-orientable Triangulation, returns the 2-fold cover which
853
- is orientable.</p>
854
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">X</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;x123&#39;</span><span class="p">)</span>
855
- <span class="gp">&gt;&gt;&gt; </span><span class="n">Y</span> <span class="o">=</span> <span class="n">X</span><span class="o">.</span><span class="n">orientation_cover</span><span class="p">()</span>
856
- <span class="gp">&gt;&gt;&gt; </span><span class="p">(</span><span class="n">X</span><span class="o">.</span><span class="n">is_orientable</span><span class="p">(),</span> <span class="n">Y</span><span class="o">.</span><span class="n">is_orientable</span><span class="p">())</span>
857
- <span class="go">(False, True)</span>
858
- <span class="gp">&gt;&gt;&gt; </span><span class="n">Y</span>
859
- <span class="go">x123~(0,0)(0,0)</span>
860
- <span class="gp">&gt;&gt;&gt; </span><span class="n">Y</span><span class="o">.</span><span class="n">cover_info</span><span class="p">()[</span><span class="s1">&#39;type&#39;</span><span class="p">]</span>
861
- <span class="go">&#39;cyclic&#39;</span>
862
- </pre></div>
863
- </div>
864
- </dd></dl>
865
-
866
- <dl class="py method">
867
- <dt class="sig sig-object py" id="snappy.Triangulation.pickle">
868
- <span class="sig-name descname"><span class="pre">pickle</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.pickle" title="Permalink to this definition"></a></dt>
869
- <dd></dd></dl>
870
-
871
- <dl class="py method">
872
- <dt class="sig sig-object py" id="snappy.Triangulation.plink">
873
- <span class="sig-name descname"><span class="pre">plink</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.plink" title="Permalink to this definition"></a></dt>
874
- <dd><p>Brings up a link editor window if the manifold is stored
875
- as a link complement in your current session.</p>
876
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;4_1&#39;</span><span class="p">)</span> <span class="c1"># stored as a triangulation with a link</span>
877
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">link</span><span class="p">()</span>
878
- <span class="go">&lt;Link: 1 comp; 4 cross&gt;</span>
879
- <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;m004&#39;</span><span class="p">)</span> <span class="c1"># stored as a triangulation without a link</span>
880
- <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">link</span><span class="p">()</span>
881
- <span class="gt">Traceback (most recent call last):</span>
882
- <span class="c">...</span>
883
- <span class="gr">ValueError</span>: <span class="n">No associated link known.</span>
884
- </pre></div>
885
- </div>
886
- </dd></dl>
887
-
888
- <dl class="py method">
889
- <dt class="sig sig-object py" id="snappy.Triangulation.ptolemy_generalized_obstruction_classes">
890
- <span class="sig-name descname"><span class="pre">ptolemy_generalized_obstruction_classes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">N</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.ptolemy_generalized_obstruction_classes" title="Permalink to this definition"></a></dt>
891
- <dd><p>M.ptolemy_generalized_obstruction_classes(N)</p>
892
- <p>Returns the obstruction classes needed to compute
893
- PGL(N,C)-representations for any N, i.e., it returns a list with
894
- a representative cocycle for each element in
895
- H^2(M, boundary M; Z/N) / (Z/N)^* where (Z/N)^* are the units in Z/N.
896
- The first element in the list always corresponds to the trivial
897
- obstruction class.
898
- The generalized ptolemy obstruction classes are thus a generalization
899
- of the ptolemy obstruction classes that allow to find all
900
- boundary-unipotent
901
- PGL(N,C)-representations including those that do not lift to
902
- boundary-unipotent SL(N,C)-representations for N odd or
903
- SL(N,C)/{+1,-1}-representations for N even.</p>
904
- <p>For example, 4_1 has three obstruction classes up to equivalence:</p>
905
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;4_1&quot;</span><span class="p">)</span>
906
- <span class="gp">&gt;&gt;&gt; </span><span class="n">c</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">ptolemy_generalized_obstruction_classes</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span>
907
- <span class="gp">&gt;&gt;&gt; </span><span class="nb">len</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
908
- <span class="go">3</span>
909
- </pre></div>
910
- </div>
911
- <p>For 4_1, we only get three obstruction classes even though we have
912
- H^2(M, boundary M; Z/4) = Z/4 because the two obstruction classes
913
- 1 in Z/4 and -1 in Z/4 are related by a unit and thus give
914
- isomorphic Ptolemy varieties.</p>
915
- <p>The primary use of an obstruction class sigma is to construct the
916
- Ptolemy variety of sigma. This variety computes boundary-unipotent
917
- PGL(N,C)-representations whose obstruction class to a
918
- boundary-unipotent lift to SL(N,C) is sigma.</p>
919
- <p>For example for 4_1, there are 2 obstruction classes for N = 3:</p>
920
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;4_1&quot;</span><span class="p">)</span>
921
- <span class="gp">&gt;&gt;&gt; </span><span class="n">c</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">ptolemy_generalized_obstruction_classes</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
922
- <span class="gp">&gt;&gt;&gt; </span><span class="nb">len</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
923
- <span class="go">2</span>
924
- </pre></div>
925
- </div>
926
- <p>The Ptolemy variety parametrizing boundary-unipotent
927
- SL(3,C)-representations of 4_1 is obtained by</p>
928
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">p</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="n">N</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span> <span class="n">obstruction_class</span> <span class="o">=</span> <span class="n">c</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
929
- </pre></div>
930
- </div>
931
- <p>and the Ptolemy variety parametrizing boundary-unipotent
932
- PSL(3,C)-representations of 4_1 that do not lift to
933
- boundary-unipotent SL(3,C)-representations is obtained by</p>
934
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">p</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="n">N</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span> <span class="n">obstruction_class</span> <span class="o">=</span> <span class="n">c</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
935
- </pre></div>
936
- </div>
937
- <p>The cocycle representing the non-trivial obstruction class looks as
938
- follows:</p>
939
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">c</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
940
- <span class="go">PtolemyGeneralizedObstructionClass([2, 0, 0, 1])</span>
941
- </pre></div>
942
- </div>
943
- <p>This means that the cocycle takes the value -1 in Z/3 on the first face
944
- class and 1 on the fourth face class but zero on every other of the
945
- four face classes.</p>
946
- </dd></dl>
947
-
948
- <dl class="py method">
949
- <dt class="sig sig-object py" id="snappy.Triangulation.ptolemy_obstruction_classes">
950
- <span class="sig-name descname"><span class="pre">ptolemy_obstruction_classes</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.ptolemy_obstruction_classes" title="Permalink to this definition"></a></dt>
951
- <dd><p>Returns the obstruction classes needed to compute
952
- pSL(N,C) = SL(N,C)/{+1,-1} representations for even N, i.e., it
953
- returns a list with a representative cocycle for each class in
954
- H^2(M, boundary M; Z/2). The first element in the list is always
955
- representing the trivial obstruction class.</p>
956
- <p>For example, 4_1 has two obstruction classes:</p>
957
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;4_1&quot;</span><span class="p">)</span>
958
- <span class="gp">&gt;&gt;&gt; </span><span class="n">c</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">ptolemy_obstruction_classes</span><span class="p">()</span>
959
- <span class="gp">&gt;&gt;&gt; </span><span class="nb">len</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
960
- <span class="go">2</span>
961
- </pre></div>
962
- </div>
963
- <p>The primary use of these obstruction classes is to construct
964
- the Ptolemy variety as described in Definition 1.7 of
965
- Stavros Garoufalidis, Dylan Thurston, Christian K. Zickert:
966
- “The Complex Volume of SL(n,C)-Representations of 3-Manifolds”
967
- (<a class="reference external" href="http://arxiv.org/abs/1111.2828">http://arxiv.org/abs/1111.2828</a>).</p>
968
- <p>For example, to construct the Ptolemy variety for
969
- PSL(2,C)-representations of 4_1 that do not lift to boundary-parabolic
970
- SL(2,C)-representations, use:</p>
971
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">p</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="n">N</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span> <span class="n">obstruction_class</span> <span class="o">=</span> <span class="n">c</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
972
- </pre></div>
973
- </div>
974
- <p>Or the following short-cut:</p>
975
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">p</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="n">obstruction_class</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>
976
- </pre></div>
977
- </div>
978
- <p>Note that this obstruction class only makes sense for even N:</p>
979
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">p</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="n">obstruction_class</span> <span class="o">=</span> <span class="n">c</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
980
- <span class="gt">Traceback (most recent call last):</span>
981
- <span class="c">...</span>
982
- <span class="gr">AssertionError</span>: <span class="n">PtolemyObstructionClass only makes sense for even N, try PtolemyGeneralizedObstructionClass</span>
983
- </pre></div>
984
- </div>
985
- <p>To obtain PGL(N,C)-representations for N &gt; 2, use the generalized
986
- obstruction class:</p>
987
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">c</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">ptolemy_generalized_obstruction_classes</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
988
- <span class="gp">&gt;&gt;&gt; </span><span class="n">p</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="n">obstruction_class</span> <span class="o">=</span> <span class="n">c</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
989
- </pre></div>
990
- </div>
991
- <p>The original obstruction class encodes a representing cocycle in Z/2 as follows:</p>
992
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">c</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">ptolemy_obstruction_classes</span><span class="p">()</span>
993
- <span class="gp">&gt;&gt;&gt; </span><span class="n">c</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
994
- <span class="go">PtolemyObstructionClass(s_0_0 + 1, s_1_0 - 1, s_2_0 - 1, s_3_0 + 1, s_0_0 - s_0_1, s_1_0 - s_3_1, s_2_0 - s_2_1, s_3_0 - s_1_1)</span>
995
- </pre></div>
996
- </div>
997
- <p>This means that the cocycle to represent this obstruction class in Z/2
998
- takes value 1 in Z/2 on face 0 of tetrahedra 0 (because s_0_0 = -1)
999
- and value 0 in Z/2 on face 1 of tetrahedra 0 (because s_1_0 = +1).</p>
1000
- <p>Face 3 of tetrahedra 0 and face 1 of tetrahedra 1 are identified,
1001
- hence the cocycle takes the same value on those two faces (s_3_0 = s_1_1).</p>
1002
- </dd></dl>
1003
-
1004
- <dl class="py method">
1005
- <dt class="sig sig-object py" id="snappy.Triangulation.ptolemy_variety">
1006
- <span class="sig-name descname"><span class="pre">ptolemy_variety</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">N</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">obstruction_class</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">simplify</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">eliminate_fixed_ptolemys</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.ptolemy_variety" title="Permalink to this definition"></a></dt>
1007
- <dd><p>M.ptolemy_variety(N, obstruction_class = None, simplify = True, eliminate_fixed_ptolemys = False)</p>
1008
- <p>Returns a Ptolemy variety as described in</p>
1009
- <ul class="simple">
1010
- <li><p>Stavros Garoufalidis, Dyland Thurston, Christian K. Zickert:
1011
- “The Complex Volume of SL(n,C)-Representations of 3-Manifolds”
1012
- (<a class="reference external" href="http://arxiv.org/abs/1111.2828">http://arxiv.org/abs/1111.2828</a>)</p></li>
1013
- <li><p>Stavros Garoufalidis, Matthias Goerner, Christian K. Zickert:
1014
- “Gluing Equations for PGL(n,C)-Representations of 3-Manifolds ”
1015
- (<a class="reference external" href="http://arxiv.org/abs/1207.6711">http://arxiv.org/abs/1207.6711</a>)</p></li>
1016
- </ul>
1017
- <p>The variety can be exported to magma or sage and solved there. The
1018
- solutions can be processed to compute invariants. The method can also
1019
- be used to automatically look up precomputed solutions from the
1020
- database at <a class="reference external" href="http://ptolemy.unhyperbolic.org/data">http://ptolemy.unhyperbolic.org/data</a> .</p>
1021
- <p>Example for m011 and PSL(2,C)-representations:</p>
1022
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;m011&quot;</span><span class="p">)</span>
1023
- </pre></div>
1024
- </div>
1025
- <p>Obtain all Ptolemy varieties for PSL(2,C)-representations:</p>
1026
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">p</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="n">obstruction_class</span> <span class="o">=</span> <span class="s1">&#39;all&#39;</span><span class="p">)</span>
1027
- </pre></div>
1028
- </div>
1029
- <p>There are two Ptolemy varieties for the two obstruction classes:</p>
1030
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nb">len</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
1031
- <span class="go">2</span>
1032
- </pre></div>
1033
- </div>
1034
- <p>Retrieve the solutions from the database</p>
1035
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">sols</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">retrieve_solutions</span><span class="p">()</span>
1036
- </pre></div>
1037
- </div>
1038
- <p>Compute the solutions using magma (default in SnapPy)</p>
1039
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">sols</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">compute_solutions</span><span class="p">(</span><span class="n">engine</span> <span class="o">=</span> <span class="s1">&#39;magma&#39;</span><span class="p">)</span>
1040
- </pre></div>
1041
- </div>
1042
- <p>Compute the solutions using singular (default in sage)</p>
1043
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">sols</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">compute_solutions</span><span class="p">(</span><span class="n">engine</span> <span class="o">=</span> <span class="s1">&#39;sage&#39;</span><span class="p">)</span>
1044
- </pre></div>
1045
- </div>
1046
- <p>Note that magma is significantly faster.</p>
1047
- <p>Compute all resulting complex volumes</p>
1048
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">cvols</span> <span class="o">=</span> <span class="n">sols</span><span class="o">.</span><span class="n">complex_volume_numerical</span><span class="p">()</span>
1049
- <span class="gp">&gt;&gt;&gt; </span><span class="n">cvols</span>
1050
- <span class="go">[[[-4.29405713186238 E-16 + 0.725471193740844*I,</span>
1051
- <span class="go"> -0.942707362776931 + 0.459731436553693*I,</span>
1052
- <span class="go"> 0.942707362776931 + 0.459731436553693*I]],</span>
1053
- <span class="go"> [[3.94159248086745 E-15 + 0.312682687518267*I,</span>
1054
- <span class="go"> 4.64549527022581 E-15 + 0.680993020093457*I,</span>
1055
- <span class="go"> -2.78183391239608 - 0.496837853805869*I,</span>
1056
- <span class="go"> 2.78183391239608 - 0.496837853805869*I]]]</span>
1057
- </pre></div>
1058
- </div>
1059
- <p>Show complex volumes as a non-nested list:</p>
1060
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">cvols</span><span class="o">.</span><span class="n">flatten</span><span class="p">(</span><span class="n">depth</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
1061
- <span class="go">[-4.29405713186238 E-16 + 0.725471193740844*I,</span>
1062
- <span class="go"> -0.942707362776931 + 0.459731436553693*I,</span>
1063
- <span class="go"> 0.942707362776931 + 0.459731436553693*I,</span>
1064
- <span class="go"> 3.94159248086745 E-15 + 0.312682687518267*I,</span>
1065
- <span class="go"> 4.64549527022581 E-15 + 0.680993020093457*I,</span>
1066
- <span class="go"> -2.78183391239608 - 0.496837853805869*I,</span>
1067
- <span class="go"> 2.78183391239608 - 0.496837853805869*I]</span>
1068
- </pre></div>
1069
- </div>
1070
- <p>For more examples, go to <a class="reference external" href="http://ptolemy.unhyperbolic.org/">http://ptolemy.unhyperbolic.org/</a></p>
1071
- <p>=== Optional Arguments ===</p>
1072
- <p>obstruction_class class from Definition 1.7 of (1).
1073
- None for trivial class or a value returned from ptolemy_obstruction_classes.
1074
- Short cuts: obstruction_class = ‘all’ returns a list of Ptolemy varieties
1075
- for each obstruction. For easier iteration, can set obstruction_class to
1076
- an integer.</p>
1077
- <p>simplify — boolean to indicate whether to simplify the equations which
1078
- significantly reduces the number of variables.
1079
- Simplifying means that several identified Ptolemy coordinates x = y = z = …
1080
- are eliminated instead of adding relations x - y = 0, y - z = 0, …</p>
1081
- <p>eliminate_fixed_ptolemys boolean to indicate whether to eliminate
1082
- the Ptolemy coordinates that are set to 1 for fixing the decoration.
1083
- Even though this simplifies the resulting representation, setting it to
1084
- True can cause magma to run longer when finding a Groebner basis.</p>
1085
- <p>=== Examples for 4_1 ===</p>
1086
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;4_1&quot;</span><span class="p">)</span>
1087
- </pre></div>
1088
- </div>
1089
- <p>Get the varieties for all obstruction classes at once (use
1090
- help(varieties[0]) for more information):</p>
1091
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">varieties</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="n">obstruction_class</span> <span class="o">=</span> <span class="s2">&quot;all&quot;</span><span class="p">)</span>
1092
- </pre></div>
1093
- </div>
1094
- <p>Print the variety as an ideal (sage object) for the non-trivial class:</p>
1095
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">varieties</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">ideal</span>
1096
- <span class="go">Ideal (-c_0011_0^2 + c_0011_0*c_0101_0 + c_0101_0^2, -c_0011_0^2 - c_0011_0*c_0101_0 + c_0101_0^2, c_0011_0 - 1) of Multivariate Polynomial Ring in c_0011_0, c_0101_0 over Rational Field</span>
1097
- </pre></div>
1098
- </div>
1099
- <p>Print the equations of the variety for the non-trivial class:</p>
1100
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">eqn</span> <span class="ow">in</span> <span class="n">varieties</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">equations</span><span class="p">:</span>
1101
- <span class="gp">... </span> <span class="nb">print</span><span class="p">(</span><span class="n">eqn</span><span class="p">)</span>
1102
- <span class="go"> - c_0011_0 * c_0101_0 + c_0011_0^2 + c_0101_0^2</span>
1103
- <span class="go"> c_0011_0 * c_0101_0 - c_0011_0^2 - c_0101_0^2</span>
1104
- <span class="go"> - 1 + c_0011_0</span>
1105
- </pre></div>
1106
- </div>
1107
- <p>Generate a magma file to compute Primary Decomposition for N = 3:</p>
1108
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">p</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
1109
- <span class="gp">&gt;&gt;&gt; </span><span class="n">s</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">to_magma</span><span class="p">()</span>
1110
- <span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">s</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;ring and ideal&quot;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
1111
- <span class="go">R&lt;c_0012_0, c_0012_1, c_0102_0, c_0111_0, c_0201_0, c_1011_0, c_1011_1, c_1101_0&gt; := PolynomialRing(RationalField(), 8, &quot;grevlex&quot;);</span>
1112
- <span class="go">MyIdeal := ideal&lt;R |</span>
1113
- <span class="go"> c_0012_0 * c_1101_0 + c_0102_0 * c_0111_0 - c_0102_0 * c_1011_0,</span>
1114
- <span class="go"> ...</span>
1115
- </pre></div>
1116
- </div>
1117
- <p>=== If you have a magma installation ===</p>
1118
- <p>Call p.compute_solutions() to automatically call magma on the above output
1119
- and produce exact solutions!!!</p>
1120
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">try</span><span class="p">:</span>
1121
- <span class="gp">... </span> <span class="n">sols</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">compute_solutions</span><span class="p">()</span>
1122
- <span class="gp">... </span><span class="k">except</span><span class="p">:</span>
1123
- <span class="gp">... </span> <span class="c1"># magma failed, use precomputed_solutions</span>
1124
- <span class="gp">... </span> <span class="n">sols</span> <span class="o">=</span> <span class="kc">None</span>
1125
- </pre></div>
1126
- </div>
1127
- <p>Check solutions against manifold
1128
- &gt;&gt;&gt; if sols:
1129
- … dummy = sols.check_against_manifold()</p>
1130
- <p>=== If you do not have a magma installation ===</p>
1131
- <p>Load a precomputed example from magma which is provided with the package:</p>
1132
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">snappy.ptolemy.processMagmaFile</span> <span class="kn">import</span> <span class="n">_magma_output_for_4_1__sl3</span><span class="p">,</span> <span class="n">solutions_from_magma</span>
1133
- <span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">_magma_output_for_4_1__sl3</span><span class="p">)</span>
1134
-
1135
- <span class="go">==TRIANGULATION=BEGINS==</span>
1136
- <span class="go">% Triangulation</span>
1137
- <span class="go">4_1</span>
1138
- <span class="go">...</span>
1139
- </pre></div>
1140
- </div>
1141
- <p>Parse the file and produce solutions:</p>
1142
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">sols</span> <span class="o">=</span> <span class="n">solutions_from_magma</span><span class="p">(</span><span class="n">_magma_output_for_4_1__sl3</span><span class="p">)</span>
1143
- </pre></div>
1144
- </div>
1145
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">dummy</span> <span class="o">=</span> <span class="n">sols</span><span class="o">.</span><span class="n">check_against_manifold</span><span class="p">()</span>
1146
- </pre></div>
1147
- </div>
1148
- <p>=== Continue here whether you have or do not have magma ===</p>
1149
- <p>Pick the first solution of the three different solutions (up to Galois
1150
- conjugates):</p>
1151
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nb">len</span><span class="p">(</span><span class="n">sols</span><span class="p">)</span>
1152
- <span class="go">3</span>
1153
- <span class="gp">&gt;&gt;&gt; </span><span class="n">solution</span> <span class="o">=</span> <span class="n">sols</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
1154
- </pre></div>
1155
- </div>
1156
- <p>Read the exact value for c_1020_0 (help(solution) for more information
1157
- on how to compute cross ratios, volumes and other invariants):</p>
1158
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">solution</span><span class="p">[</span><span class="s1">&#39;c_1020_0&#39;</span><span class="p">]</span>
1159
- <span class="go">Mod(-1/2*x - 3/2, x^2 + 3*x + 4)</span>
1160
- </pre></div>
1161
- </div>
1162
- <p>Example of simplified vs non-simplified variety for N = 4:</p>
1163
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">simplified</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="n">obstruction_class</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>
1164
- <span class="gp">&gt;&gt;&gt; </span><span class="n">full</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="n">obstruction_class</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">simplify</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span>
1165
- <span class="gp">&gt;&gt;&gt; </span><span class="nb">len</span><span class="p">(</span><span class="n">simplified</span><span class="o">.</span><span class="n">variables</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">full</span><span class="o">.</span><span class="n">variables</span><span class="p">)</span>
1166
- <span class="go">(21, 63)</span>
1167
- <span class="gp">&gt;&gt;&gt; </span><span class="nb">len</span><span class="p">(</span><span class="n">simplified</span><span class="o">.</span><span class="n">equations</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">full</span><span class="o">.</span><span class="n">equations</span><span class="p">)</span>
1168
- <span class="go">(24, 72)</span>
1169
- </pre></div>
1170
- </div>
1171
- </dd></dl>
1172
-
1173
- <dl class="py method">
1174
- <dt class="sig sig-object py" id="snappy.Triangulation.randomize">
1175
- <span class="sig-name descname"><span class="pre">randomize</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">blowup_multiple</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">4</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">passes_at_fours</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">6</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.randomize" title="Permalink to this definition"></a></dt>
1176
- <dd><p>Perform random Pachner moves on the underlying triangulation,
1177
- including some initial 3 -&gt; 2 moves that increase the number of
1178
- tetrahedra by blowup_multiple.</p>
1179
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;Braid:[1,2,-3,-3,1,2]&#39;</span><span class="p">)</span>
1180
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">randomize</span><span class="p">()</span>
1181
- </pre></div>
1182
- </div>
1183
- </dd></dl>
1184
-
1185
- <dl class="py method">
1186
- <dt class="sig sig-object py" id="snappy.Triangulation.reverse_orientation">
1187
- <span class="sig-name descname"><span class="pre">reverse_orientation</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.reverse_orientation" title="Permalink to this definition"></a></dt>
1188
- <dd><p>Reverses the orientation of the Triangulation, presuming that
1189
- it is orientable.</p>
1190
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;m015&#39;</span><span class="p">)</span>
1191
- <span class="gp">&gt;&gt;&gt; </span><span class="n">cs</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">chern_simons</span><span class="p">()</span>
1192
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">reverse_orientation</span><span class="p">()</span>
1193
- <span class="gp">&gt;&gt;&gt; </span><span class="nb">abs</span><span class="p">(</span><span class="n">cs</span> <span class="o">+</span> <span class="n">M</span><span class="o">.</span><span class="n">chern_simons</span><span class="p">())</span>
1194
- <span class="go">0.0</span>
1195
- </pre></div>
1196
- </div>
1197
- </dd></dl>
1198
-
1199
- <dl class="py method">
1200
- <dt class="sig sig-object py" id="snappy.Triangulation.save">
1201
- <span class="sig-name descname"><span class="pre">save</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">file_name</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.save" title="Permalink to this definition"></a></dt>
1202
- <dd><p>Save the triangulation as a SnapPea triangulation file.</p>
1203
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;m004&#39;</span><span class="p">)</span>
1204
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="s1">&#39;fig-eight.tri&#39;</span><span class="p">)</span>
1205
- </pre></div>
1206
- </div>
1207
- <p>To retrieve a SnapPea triangulation from the saved file
1208
- you can do the following. The first command creates a cusped
1209
- manifold M. The second one creates the filled manifold M1
1210
- with Dehn coefficients (2,3).</p>
1211
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;fig-eight.tri&#39;</span><span class="p">)</span>
1212
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M1</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;fig-eight.tri(2,3)&#39;</span><span class="p">)</span>
1213
- </pre></div>
1214
- </div>
1215
- </dd></dl>
1216
-
1217
- <dl class="py method">
1218
- <dt class="sig sig-object py" id="snappy.Triangulation.set_name">
1219
- <span class="sig-name descname"><span class="pre">set_name</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">new_name</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.set_name" title="Permalink to this definition"></a></dt>
1220
- <dd><p>Give the triangulation a new name.</p>
1221
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;4_1&#39;</span><span class="p">)</span>
1222
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">set_name</span><span class="p">(</span><span class="s1">&#39;figure-eight-comp&#39;</span><span class="p">)</span>
1223
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span>
1224
- <span class="go">figure-eight-comp(0,0)</span>
1225
- </pre></div>
1226
- </div>
1227
- </dd></dl>
1228
-
1229
- <dl class="py method">
1230
- <dt class="sig sig-object py" id="snappy.Triangulation.set_peripheral_curves">
1231
- <span class="sig-name descname"><span class="pre">set_peripheral_curves</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">peripheral_data</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">which_cusp</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">return_matrices</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.set_peripheral_curves" title="Permalink to this definition"></a></dt>
1232
- <dd><p>Each cusp has a preferred marking. In the case of a torus
1233
- cusp, this is pair of essential simple curves meeting in one
1234
- point; equivalently, a basis of the first homology of the
1235
- boundary torus. These curves are called the meridian and the
1236
- longitude.</p>
1237
- <p>This method changes these markings in various ways. In many
1238
- cases, if the flag return_matrices is True then it returns
1239
- a list of change-of-basis matrices is returned, one per
1240
- cusp, which will restore the original markings if passed
1241
- as peripheral_data.</p>
1242
- </dd></dl>
1243
-
1244
- <dl class="py method">
1245
- <dt class="sig sig-object py" id="snappy.Triangulation.simplify">
1246
- <span class="sig-name descname"><span class="pre">simplify</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">passes_at_fours</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">6</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.simplify" title="Permalink to this definition"></a></dt>
1247
- <dd><p>Try to simplify the triangulation by doing Pachner moves.</p>
1248
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;12n123&#39;</span><span class="p">)</span>
1249
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">simplify</span><span class="p">()</span>
1250
- </pre></div>
1251
- </div>
1252
- <p>It does four kinds of moves that reduce the number of
1253
- tetrahedra:</p>
1254
- <ul class="simple">
1255
- <li><p>3 -&gt; 2 and 2 -&gt; 0 Pacher moves, which eliminate one or two
1256
- tetrahedra respectively.</p></li>
1257
- <li><p>On suitable valence-1 edges, does a 2 -&gt; 3 and then 2 -&gt; 0 move,
1258
- which removes a tetrahedron and creates a new valence-1 edge.</p></li>
1259
- <li><p>When a 2-simplex has two edges of valence-4 giving rise to the
1260
- suspension of a pentagon, replace these 6 tetrahedra with a
1261
- single edge of valence 5.</p></li>
1262
- </ul>
1263
- <p>It also does random 4 -&gt; 4 moves in hopes of setting up a
1264
- simplfication. The argument passes_at_fours is the number of
1265
- times it goes through the valence-4 edges without progress
1266
- before giving up.</p>
1267
- </dd></dl>
1268
-
1269
- <dl class="py method">
1270
- <dt class="sig sig-object py" id="snappy.Triangulation.slice_obstruction_HKL">
1271
- <span class="sig-name descname"><span class="pre">slice_obstruction_HKL</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">primes_spec</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">check_in_S3</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.slice_obstruction_HKL" title="Permalink to this definition"></a></dt>
1272
- <dd><p>For the exterior of a knot in S^3, searches for a topological
1273
- slicing obstruction from:</p>
1274
- <p>Herald, Kirk, Livingston, Math Zeit., 2010
1275
- <a class="reference external" href="https://dx.doi.org/10.1007/s00209-009-0548-1">https://dx.doi.org/10.1007/s00209-009-0548-1</a>
1276
- <a class="reference external" href="https://arxiv.org/abs/0804.1355">https://arxiv.org/abs/0804.1355</a></p>
1277
- <p>The test looks at the cyclic branched covers of the knot of prime
1278
- order p and the F_q homology thereof where q is an odd prime. The
1279
- range of such (p, q) pairs searched is given by primes_spec as a
1280
- list of (p_max, [q_min, q_max]). It returns the pair (p, q) of
1281
- the first nonzero obstruction found (in which case K is not
1282
- slice), and otherwise returns None:</p>
1283
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;K12n813&#39;</span><span class="p">)</span>
1284
- <span class="n">sage</span><span class="p">:</span> <span class="n">spec</span> <span class="o">=</span> <span class="p">[(</span><span class="mi">10</span><span class="p">,</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">20</span><span class="p">]),</span> <span class="p">(</span><span class="mi">20</span><span class="p">,</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">10</span><span class="p">])]</span>
1285
- <span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">.</span><span class="n">slice_obstruction_HKL</span><span class="p">(</span><span class="n">spec</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
1286
- <span class="n">Looking</span> <span class="n">at</span> <span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span> <span class="o">...</span>
1287
- <span class="n">Looking</span> <span class="n">at</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="o">...</span>
1288
- <span class="n">Looking</span> <span class="n">at</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">7</span><span class="p">)</span> <span class="o">...</span>
1289
- <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">7</span><span class="p">)</span>
1290
- </pre></div>
1291
- </div>
1292
- <p>You can also specify the p to examine by a range [p_min, p_max] or
1293
- the q by just q_max:</p>
1294
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">spec</span> <span class="o">=</span> <span class="p">[([</span><span class="mi">3</span><span class="p">,</span> <span class="mi">10</span><span class="p">],</span> <span class="mi">10</span><span class="p">)]</span>
1295
- <span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">.</span><span class="n">slice_obstruction_HKL</span><span class="p">(</span><span class="n">spec</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
1296
- <span class="n">Looking</span> <span class="n">at</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="o">...</span>
1297
- <span class="n">Looking</span> <span class="n">at</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">7</span><span class="p">)</span> <span class="o">...</span>
1298
- <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">7</span><span class="p">)</span>
1299
- </pre></div>
1300
- </div>
1301
- <p>If primes_spec is just a pair (p, q) then only that obstruction is
1302
- checked:</p>
1303
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">.</span><span class="n">slice_obstruction_HKL</span><span class="p">((</span><span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">))</span>
1304
- <span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">.</span><span class="n">slice_obstruction_HKL</span><span class="p">((</span><span class="mi">3</span><span class="p">,</span> <span class="mi">7</span><span class="p">))</span>
1305
- <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">7</span><span class="p">)</span>
1306
- </pre></div>
1307
- </div>
1308
- <p>Technical note: As implemented, can only get an obstruction when
1309
- the decomposition of H_1(cover; F_q) into irreducible Z/pZ-modules
1310
- has no repeat factors. The method of [HKL] can be used more
1311
- broadly, but other cases requires computing many more twisted
1312
- Alexander polynomials.</p>
1313
- </dd></dl>
1314
-
1315
- <dl class="py method">
1316
- <dt class="sig sig-object py" id="snappy.Triangulation.triangulation_isosig">
1317
- <span class="sig-name descname"><span class="pre">triangulation_isosig</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">decorated</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ignore_cusp_ordering</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ignore_curve_orientations</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ignore_orientation</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.triangulation_isosig" title="Permalink to this definition"></a></dt>
1318
- <dd><p>Returns a compact text representation of the triangulation, called a
1319
- “decorated isomorphism signature”</p>
1320
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">T</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;m004&#39;</span><span class="p">)</span>
1321
- <span class="gp">&gt;&gt;&gt; </span><span class="n">T</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">()</span>
1322
- <span class="go">&#39;cPcbbbiht_BaCB&#39;</span>
1323
- </pre></div>
1324
- </div>
1325
- <p>You can use this string to recreate an isomorphic triangulation later</p>
1326
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">A</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;y233&#39;</span><span class="p">)</span>
1327
- <span class="gp">&gt;&gt;&gt; </span><span class="n">A</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">()</span>
1328
- <span class="go">&#39;hLMzMkbcdefggghhhqxqhx_BaaB&#39;</span>
1329
- <span class="gp">&gt;&gt;&gt; </span><span class="n">B</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;hLMzMkbcdefggghhhqxqhx_BaaB&#39;</span><span class="p">)</span>
1330
- <span class="gp">&gt;&gt;&gt; </span><span class="n">A</span> <span class="o">==</span> <span class="n">B</span>
1331
- <span class="go">True</span>
1332
- </pre></div>
1333
- </div>
1334
- <p>By default, the returned string encodes the peripheral curves (and
1335
- slopes of Dehn-fillings if any are present), but you can request
1336
- only the “isomorphism signature” which can be given to
1337
- <a class="reference external" href="https://regina-normal.github.io/">Regina</a>.</p>
1338
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">E</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;K3_1&#39;</span><span class="p">)</span> <span class="c1"># the (-2, 3, 7) exterior</span>
1339
- <span class="gp">&gt;&gt;&gt; </span><span class="n">isosig</span> <span class="o">=</span> <span class="n">E</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span><span class="n">decorated</span> <span class="o">=</span> <span class="kc">False</span><span class="p">);</span> <span class="n">isosig</span>
1340
- <span class="go">&#39;dLQacccjsnk&#39;</span>
1341
- <span class="gp">&gt;&gt;&gt; </span><span class="n">F</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="n">isosig</span><span class="p">)</span>
1342
- <span class="gp">&gt;&gt;&gt; </span><span class="n">E</span><span class="o">.</span><span class="n">isomorphisms_to</span><span class="p">(</span><span class="n">F</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span>
1343
- <span class="go">0 -&gt; 0</span>
1344
- <span class="go">[1 18]</span>
1345
- <span class="go">[0 1]</span>
1346
- <span class="go">Extends to link</span>
1347
- <span class="gp">&gt;&gt;&gt; </span><span class="n">E</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">()</span>
1348
- <span class="go">&#39;dLQacccjsnk_BaRsB&#39;</span>
1349
- <span class="gp">&gt;&gt;&gt; </span><span class="n">F</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">()</span>
1350
- <span class="go">&#39;dLQacccjsnk_BaaB&#39;</span>
1351
- <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;dLQacccjsnk_BaRsB&#39;</span><span class="p">)</span>
1352
- <span class="gp">&gt;&gt;&gt; </span><span class="n">E</span><span class="o">.</span><span class="n">isomorphisms_to</span><span class="p">(</span><span class="n">G</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
1353
- <span class="go">0 -&gt; 0</span>
1354
- <span class="go">[1 0]</span>
1355
- <span class="go">[0 1]</span>
1356
- <span class="go">Extends to link</span>
1357
- </pre></div>
1358
- </div>
1359
- <p>If you do not care about the indexing of the cusps when using a
1360
- decorated signature, use ignore_cusp_ordering</p>
1361
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;L14n64110(1,2)(2,3)(-2,1)(3,4)(0,0)&quot;</span><span class="p">)</span>
1362
- <span class="gp">&gt;&gt;&gt; </span><span class="n">isosig</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span><span class="n">decorated</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span> <span class="n">ignore_cusp_ordering</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span>
1363
- <span class="gp">&gt;&gt;&gt; </span><span class="n">isosig</span>
1364
- <span class="go">&#39;xLLvLvMLPMPLAMQQcceflnjmmmospsrttvvvtswwwiieiifdeauinasltltahmbjn_bacBbaaBBaBbBbbaabba(2,3)(-2,1)(1,2)(3,4)(0,0)&#39;</span>
1365
- <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="n">isosig</span><span class="p">)</span><span class="o">.</span><span class="n">filled_triangulation</span><span class="p">()</span>
1366
- <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">is_isometric_to</span><span class="p">(</span><span class="n">M</span><span class="o">.</span><span class="n">filled_triangulation</span><span class="p">())</span>
1367
- <span class="go">True</span>
1368
- </pre></div>
1369
- </div>
1370
- <p>If you do not care about the orientations of the peripheral curves,
1371
- use ignore_curve_orientations</p>
1372
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;L6a1&quot;</span><span class="p">)</span>
1373
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">()</span>
1374
- <span class="go">&#39;gLLAQcdeefffdopuado_BabbBaab&#39;</span>
1375
- <span class="gp">&gt;&gt;&gt; </span><span class="n">isosig</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span><span class="n">decorated</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span> <span class="n">ignore_curve_orientations</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span>
1376
- <span class="gp">&gt;&gt;&gt; </span><span class="n">isosig</span>
1377
- <span class="go">&#39;gLLAQcdeefffdopuado_babbbaab&#39;</span>
1378
- <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="n">isosig</span><span class="p">)</span>
1379
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">isomorphisms_to</span><span class="p">(</span><span class="n">N</span><span class="p">)</span>
1380
- <span class="go">[0 -&gt; 0 1 -&gt; 1</span>
1381
- <span class="go">[-1 0] [-1 0]</span>
1382
- <span class="go">[ 0 1] [ 0 1]</span>
1383
- <span class="go">Extends to link, 0 -&gt; 0 1 -&gt; 1</span>
1384
- <span class="go">[1 0] [1 0]</span>
1385
- <span class="go">[0 -1] [0 -1]</span>
1386
- <span class="go">Extends to link]</span>
1387
- </pre></div>
1388
- </div>
1389
- <p>By default, the isomorphism signature does not capture the orientation
1390
- of an orientable triangulation. If you specify
1391
- <cite>ignore_orientation = False</cite>, the isomorphism signature for an oriented
1392
- triangulation and its mirror image will be different if the
1393
- triangulation is cheiral.</p>
1394
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;m006&quot;</span><span class="p">)</span>
1395
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span><span class="n">decorated</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">ignore_orientation</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span>
1396
- <span class="go">&#39;dLQacccjnjs&#39;</span>
1397
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">reverse_orientation</span><span class="p">()</span>
1398
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span><span class="n">decorated</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">ignore_orientation</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span>
1399
- <span class="go">&#39;dLQacccnsnk&#39;</span>
1400
- </pre></div>
1401
- </div>
1402
- <p>Note that a decorated triangulation isosig with the default values
1403
- <cite>ignore_orientation = True</cite> but <cite>ignore_curve_orientations = False</cite>
1404
- still captures the orientations of the triangulation through the
1405
- peripheral curves.</p>
1406
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;m006&quot;</span><span class="p">)</span>
1407
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">()</span>
1408
- <span class="go">&#39;dLQacccjnjs_aBbB&#39;</span>
1409
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">reverse_orientation</span><span class="p">()</span>
1410
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">()</span>
1411
- <span class="go">&#39;dLQacccjnjs_aBBb&#39;</span>
1412
- </pre></div>
1413
- </div>
1414
- <p>The code has been copied from <a class="reference external" href="https://regina-normal.github.io/">Regina</a> where
1415
- the corresponding method is called “isoSig”.</p>
1416
- <p>Unlike dehydrations for 3-manifold triangulations, an
1417
- isomorphism signature uniquely determines a triangulation up
1418
- to combinatorial isomorphism. That is, two triangulations of
1419
- 3-dimensional manifolds are combinatorially isomorphic if and
1420
- only if their isomorphism signatures are the same string. For
1421
- full details, see <a class="reference external" href="http://arxiv.org/abs/1110.6080">Simplification paths in the Pachner graphs
1422
- of closed orientable 3-manifold triangulations, Burton, 2011</a>.</p>
1423
- <p>For details about how the peripheral decorations work, see
1424
- the SnapPy source code.</p>
1425
- </dd></dl>
1426
-
1427
- <dl class="py method">
1428
- <dt class="sig sig-object py" id="snappy.Triangulation.with_hyperbolic_structure">
1429
- <span class="sig-name descname"><span class="pre">with_hyperbolic_structure</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.with_hyperbolic_structure" title="Permalink to this definition"></a></dt>
1430
- <dd><p>Add a (possibly degenerate) hyperbolic structure, turning the
1431
- Triangulation into a Manifold.</p>
1432
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;m004&#39;</span><span class="p">)</span>
1433
- <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">with_hyperbolic_structure</span><span class="p">()</span>
1434
- <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">volume</span><span class="p">()</span>
1435
- <span class="go">2.02988321</span>
1436
- </pre></div>
1437
- </div>
1438
- </dd></dl>
1439
-
1440
- </dd></dl>
1441
-
1442
- </section>
1443
-
1444
-
1445
- </div>
1446
- </div>
1447
- <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
1448
- <a href="manifoldhp.html" class="btn btn-neutral float-left" title="ManifoldHP: High-precision variant" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
1449
- <a href="additional_classes.html" class="btn btn-neutral float-right" title="Additional Classes" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
1450
- </div>
1451
-
1452
- <hr/>
1453
-
1454
- <div role="contentinfo">
1455
- <p>&#169; Copyright 2009-2023, by Marc Culler, Nathan Dunfield, Matthias Goerner, Jeffrey Weeks and others.</p>
1456
- </div>
1457
-
1458
- Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
1459
- <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
1460
- provided by <a href="https://readthedocs.org">Read the Docs</a>.
1461
-
1462
-
1463
- </footer>
1464
- </div>
1465
- </div>
1466
- </section>
1467
- </div>
1468
- <script>
1469
- jQuery(function () {
1470
- SphinxRtdTheme.Navigation.enable(true);
1471
- });
1472
- </script>
1473
-
1474
- </body>
1
+
2
+
3
+ <!DOCTYPE html>
4
+ <html class="writer-html5" lang="en" data-content_root="./">
5
+ <head>
6
+ <meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
7
+
8
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
9
+ <title>Triangulation &mdash; SnapPy 3.2 documentation</title>
10
+ <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=fa44fd50" />
11
+ <link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=e59714d7" />
12
+ <link rel="stylesheet" type="text/css" href="_static/snappy_sphinx_rtd_theme.css?v=1b8ec2a8" />
13
+
14
+
15
+ <link rel="shortcut icon" href="_static/SnapPy.ico"/>
16
+ <script src="_static/jquery.js?v=5d32c60e"></script>
17
+ <script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
18
+ <script src="_static/documentation_options.js?v=828ea960"></script>
19
+ <script src="_static/doctools.js?v=9a2dae69"></script>
20
+ <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
21
+ <script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
22
+ <script src="_static/js/theme.js"></script>
23
+ <link rel="index" title="Index" href="genindex.html" />
24
+ <link rel="search" title="Search" href="search.html" />
25
+ <link rel="next" title="Additional Classes" href="additional_classes.html" />
26
+ <link rel="prev" title="ManifoldHP: High-precision variant" href="manifoldhp.html" />
27
+ </head>
28
+
29
+ <body class="wy-body-for-nav">
30
+ <div class="wy-grid-for-nav">
31
+ <nav data-toggle="wy-nav-shift" class="wy-nav-side">
32
+ <div class="wy-side-scroll">
33
+ <div class="wy-side-nav-search" >
34
+
35
+
36
+
37
+ <a href="index.html" class="icon icon-home">
38
+ SnapPy
39
+ <img src="_static/SnapPy-horizontal-128.png" class="logo" alt="Logo"/>
40
+ </a>
41
+ <div role="search">
42
+ <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
43
+ <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
44
+ <input type="hidden" name="check_keywords" value="yes" />
45
+ <input type="hidden" name="area" value="default" />
46
+ </form>
47
+ </div>
48
+ </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
49
+ <ul class="current">
50
+ <li class="toctree-l1"><a class="reference internal" href="installing.html">Installing SnapPy</a></li>
51
+ <li class="toctree-l1"><a class="reference internal" href="screenshots.html">Screenshots: SnapPy in action</a></li>
52
+ <li class="toctree-l1"><a class="reference internal" href="tutorial.html">Tutorial</a></li>
53
+ <li class="toctree-l1 current"><a class="reference internal" href="snappy.html">The snappy module and its classes</a><ul class="current">
54
+ <li class="toctree-l2"><a class="reference internal" href="manifold.html">Manifold: the main class</a></li>
55
+ <li class="toctree-l2"><a class="reference internal" href="manifoldhp.html">ManifoldHP: High-precision variant</a></li>
56
+ <li class="toctree-l2 current"><a class="current reference internal" href="#">Triangulation</a><ul>
57
+ <li class="toctree-l3"><a class="reference internal" href="#snappy.Triangulation"><code class="docutils literal notranslate"><span class="pre">Triangulation</span></code></a><ul>
58
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.DT_code"><code class="docutils literal notranslate"><span class="pre">Triangulation.DT_code()</span></code></a></li>
59
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.alexander_polynomial"><code class="docutils literal notranslate"><span class="pre">Triangulation.alexander_polynomial()</span></code></a></li>
60
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.copy"><code class="docutils literal notranslate"><span class="pre">Triangulation.copy()</span></code></a></li>
61
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.cover"><code class="docutils literal notranslate"><span class="pre">Triangulation.cover()</span></code></a></li>
62
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.cover_info"><code class="docutils literal notranslate"><span class="pre">Triangulation.cover_info()</span></code></a></li>
63
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.covers"><code class="docutils literal notranslate"><span class="pre">Triangulation.covers()</span></code></a></li>
64
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.cusp_info"><code class="docutils literal notranslate"><span class="pre">Triangulation.cusp_info()</span></code></a></li>
65
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.dehn_fill"><code class="docutils literal notranslate"><span class="pre">Triangulation.dehn_fill()</span></code></a></li>
66
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.edge_valences"><code class="docutils literal notranslate"><span class="pre">Triangulation.edge_valences()</span></code></a></li>
67
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.exterior_to_link"><code class="docutils literal notranslate"><span class="pre">Triangulation.exterior_to_link()</span></code></a></li>
68
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.filled_triangulation"><code class="docutils literal notranslate"><span class="pre">Triangulation.filled_triangulation()</span></code></a></li>
69
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.fundamental_group"><code class="docutils literal notranslate"><span class="pre">Triangulation.fundamental_group()</span></code></a></li>
70
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.gluing_equations"><code class="docutils literal notranslate"><span class="pre">Triangulation.gluing_equations()</span></code></a></li>
71
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.gluing_equations_pgl"><code class="docutils literal notranslate"><span class="pre">Triangulation.gluing_equations_pgl()</span></code></a></li>
72
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.has_finite_vertices"><code class="docutils literal notranslate"><span class="pre">Triangulation.has_finite_vertices()</span></code></a></li>
73
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.homological_longitude"><code class="docutils literal notranslate"><span class="pre">Triangulation.homological_longitude()</span></code></a></li>
74
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.homology"><code class="docutils literal notranslate"><span class="pre">Triangulation.homology()</span></code></a></li>
75
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.is_orientable"><code class="docutils literal notranslate"><span class="pre">Triangulation.is_orientable()</span></code></a></li>
76
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.isomorphisms_to"><code class="docutils literal notranslate"><span class="pre">Triangulation.isomorphisms_to()</span></code></a></li>
77
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.link"><code class="docutils literal notranslate"><span class="pre">Triangulation.link()</span></code></a></li>
78
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.name"><code class="docutils literal notranslate"><span class="pre">Triangulation.name()</span></code></a></li>
79
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.normal_boundary_slopes"><code class="docutils literal notranslate"><span class="pre">Triangulation.normal_boundary_slopes()</span></code></a></li>
80
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.normal_surfaces"><code class="docutils literal notranslate"><span class="pre">Triangulation.normal_surfaces()</span></code></a></li>
81
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.num_cusps"><code class="docutils literal notranslate"><span class="pre">Triangulation.num_cusps()</span></code></a></li>
82
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.num_tetrahedra"><code class="docutils literal notranslate"><span class="pre">Triangulation.num_tetrahedra()</span></code></a></li>
83
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.orientation_cover"><code class="docutils literal notranslate"><span class="pre">Triangulation.orientation_cover()</span></code></a></li>
84
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.plink"><code class="docutils literal notranslate"><span class="pre">Triangulation.plink()</span></code></a></li>
85
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.ptolemy_generalized_obstruction_classes"><code class="docutils literal notranslate"><span class="pre">Triangulation.ptolemy_generalized_obstruction_classes()</span></code></a></li>
86
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.ptolemy_obstruction_classes"><code class="docutils literal notranslate"><span class="pre">Triangulation.ptolemy_obstruction_classes()</span></code></a></li>
87
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.ptolemy_variety"><code class="docutils literal notranslate"><span class="pre">Triangulation.ptolemy_variety()</span></code></a></li>
88
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.randomize"><code class="docutils literal notranslate"><span class="pre">Triangulation.randomize()</span></code></a></li>
89
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.reverse_orientation"><code class="docutils literal notranslate"><span class="pre">Triangulation.reverse_orientation()</span></code></a></li>
90
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.save"><code class="docutils literal notranslate"><span class="pre">Triangulation.save()</span></code></a></li>
91
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.set_name"><code class="docutils literal notranslate"><span class="pre">Triangulation.set_name()</span></code></a></li>
92
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.set_peripheral_curves"><code class="docutils literal notranslate"><span class="pre">Triangulation.set_peripheral_curves()</span></code></a></li>
93
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.simplify"><code class="docutils literal notranslate"><span class="pre">Triangulation.simplify()</span></code></a></li>
94
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.slice_obstruction_HKL"><code class="docutils literal notranslate"><span class="pre">Triangulation.slice_obstruction_HKL()</span></code></a></li>
95
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.symplectic_basis"><code class="docutils literal notranslate"><span class="pre">Triangulation.symplectic_basis()</span></code></a></li>
96
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.triangulation_isosig"><code class="docutils literal notranslate"><span class="pre">Triangulation.triangulation_isosig()</span></code></a></li>
97
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Triangulation.with_hyperbolic_structure"><code class="docutils literal notranslate"><span class="pre">Triangulation.with_hyperbolic_structure()</span></code></a></li>
98
+ </ul>
99
+ </li>
100
+ </ul>
101
+ </li>
102
+ <li class="toctree-l2"><a class="reference internal" href="additional_classes.html">Additional Classes</a></li>
103
+ <li class="toctree-l2"><a class="reference internal" href="censuses.html">Census manifolds</a></li>
104
+ </ul>
105
+ </li>
106
+ <li class="toctree-l1"><a class="reference internal" href="plink.html">Using SnapPy’s link editor</a></li>
107
+ <li class="toctree-l1"><a class="reference internal" href="spherogram.html">Links: planar diagrams and invariants</a></li>
108
+ <li class="toctree-l1"><a class="reference internal" href="snap.html">Number theory of hyperbolic 3-manifolds</a></li>
109
+ <li class="toctree-l1"><a class="reference internal" href="verify.html">Verified computations</a></li>
110
+ <li class="toctree-l1"><a class="reference internal" href="other.html">Other components</a></li>
111
+ <li class="toctree-l1"><a class="reference internal" href="news.html">News</a></li>
112
+ <li class="toctree-l1"><a class="reference internal" href="credits.html">Credits</a></li>
113
+ <li class="toctree-l1"><a class="reference internal" href="bugs.html">Reporting bugs and other problems</a></li>
114
+ <li class="toctree-l1"><a class="reference internal" href="todo.html">To Do List</a></li>
115
+ <li class="toctree-l1"><a class="reference internal" href="development.html">Development Basics</a></li>
116
+ </ul>
117
+
118
+ </div>
119
+ </div>
120
+ </nav>
121
+
122
+ <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
123
+ <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
124
+ <a href="index.html">SnapPy</a>
125
+ </nav>
126
+
127
+ <div class="wy-nav-content">
128
+ <div class="rst-content">
129
+ <div role="navigation" aria-label="Page navigation">
130
+ <ul class="wy-breadcrumbs">
131
+ <li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
132
+ <li class="breadcrumb-item"><a href="snappy.html">The snappy module and its classes</a></li>
133
+ <li class="breadcrumb-item active">Triangulation</li>
134
+ <li class="wy-breadcrumbs-aside">
135
+ </li>
136
+ </ul>
137
+ <hr/>
138
+ </div>
139
+ <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
140
+ <div itemprop="articleBody">
141
+
142
+ <section id="triangulation">
143
+ <h1>Triangulation<a class="headerlink" href="#triangulation" title="Link to this heading"></a></h1>
144
+ <p>The main snappy class, namely Manifold, is derived from the more
145
+ basic class below.</p>
146
+ <dl class="py class">
147
+ <dt class="sig sig-object py" id="snappy.Triangulation">
148
+ <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">snappy.</span></span><span class="sig-name descname"><span class="pre">Triangulation</span></span><a class="headerlink" href="#snappy.Triangulation" title="Link to this definition"></a></dt>
149
+ <dd><p>A Triangulation object represents a compact 3-manifold with torus
150
+ boundary components, given as an ideal triangulation of the
151
+ manifold’s interior. A Dehn-filling can be specified for each
152
+ boundary component, allowing the description of closed 3-manifolds
153
+ and some orbifolds. For non-orientable 3-manifolds, the boundary
154
+ components can also be Klein bottles. Two Triangulations are equal
155
+ (‘==’) if they represent combinatorially isomorphic
156
+ triangulations. A Triangulation does <em>not</em> have any geometric
157
+ structure, and usually one works with the subclass Manifold which
158
+ adds this. Here’s a quick example:</p>
159
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;9_42&#39;</span><span class="p">)</span>
160
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">num_tetrahedra</span><span class="p">()</span>
161
+ <span class="go">5</span>
162
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">is_orientable</span><span class="p">()</span>
163
+ <span class="go">True</span>
164
+ </pre></div>
165
+ </div>
166
+ <p>A Triangulation can be specified in a number of ways, e.g.</p>
167
+ <ul class="simple">
168
+ <li><p>Triangulation(‘9_42’) : The complement of the knot 9_42 in S^3.</p></li>
169
+ <li><p>Triangulation(‘m125(1,2)(4,5)’) : The SnapPea census manifold m125
170
+ where the first cusp has Dehn filling (1,2) and the second cusp has
171
+ filling (4,5).</p></li>
172
+ <li><p>Triangulation() : Opens a link editor window where can you
173
+ specify a link complement.</p></li>
174
+ </ul>
175
+ <p>In general, the specification can be from among the below, with
176
+ information on Dehn fillings added.</p>
177
+ <ul>
178
+ <li><p>SnapPea cusped census manifolds: e.g. ‘m123’, ‘s123’, ‘v123’.</p></li>
179
+ <li><p>Link complements:</p>
180
+ <blockquote>
181
+ <div><ul class="simple">
182
+ <li><p>Rolfsen’s table: e.g. ‘4_1’, ‘04_1’, ‘5^2_6’, ‘6_4^7’, ‘L20935’, ‘l104001’.</p></li>
183
+ <li><p>Knots and links up to 14 crossings from tabulations by Hoste
184
+ and Thistlethwaite: e.g. ‘K12a456’ or ‘L13n579’.</p></li>
185
+ <li><p>Hoste-Thistlethwaite Knotscape table: e.g. ‘11a17’ or ‘12n345’</p></li>
186
+ <li><p>Dowker-Thistlethwaite code: e.g. ‘DT:[(6,8,2,4)]’,DT:dadbcda’</p></li>
187
+ </ul>
188
+ </div></blockquote>
189
+ </li>
190
+ <li><p>Once-punctured torus bundles: e.g. ‘b++LLR’, ‘b+-llR’, ‘bo-RRL’, ‘bn+LRLR’</p></li>
191
+ <li><p>Fibered manifold associated to a braid: ‘Braid:[1,2,-3,4]’</p>
192
+ <p>Here, the braid is thought of as a mapping class of the
193
+ punctured disc, and this manifold is the corresponding
194
+ mapping torus. If you want the braid closure, do (1,0) filling
195
+ of the last cusp.</p>
196
+ </li>
197
+ <li><p>From mapping class group data using Twister:</p>
198
+ <p>‘Bundle(S_{1,1}, [a0, B1])’ or ‘Splitting(S_{1,0}, [b1, A0], [a0,B1])’</p>
199
+ <p>See the help for the ‘twister’ module for more.</p>
200
+ </li>
201
+ <li><p>A SnapPea triangulation or link projection file: ‘filename’</p>
202
+ <p>The file will be loaded if found in the current directory or the
203
+ path given by the shell variable SNAPPEA_MANIFOLD_DIRECTORY.</p>
204
+ </li>
205
+ <li><p>A Regina-style isomorphism signature, such as ‘dLQbcccdxwb’.</p></li>
206
+ <li><p>A string containing the contents of a SnapPea triangulation or link
207
+ projection file.</p></li>
208
+ </ul>
209
+ <dl class="py method">
210
+ <dt class="sig sig-object py" id="snappy.Triangulation.DT_code">
211
+ <span class="sig-name descname"><span class="pre">DT_code</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">alpha</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">flips</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.DT_code" title="Link to this definition"></a></dt>
212
+ <dd><p>Return the Dowker-Thistlethwaite code of this link complement,
213
+ if it is a link complement. The DT code is intended to be an
214
+ immutable attribute, for use with knot and link exteriors
215
+ only, which is set only when the manifold was created.</p>
216
+ <p>Here is the Whitehead link:</p>
217
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;L5a1&#39;</span><span class="p">)</span>
218
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">DT_code</span><span class="p">()</span>
219
+ <span class="go">[(6, 8), (2, 10, 4)]</span>
220
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">DT_code</span><span class="p">(</span><span class="n">alpha</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
221
+ <span class="go">&#39;ebbccdaeb&#39;</span>
222
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">DT_code</span><span class="p">(</span><span class="n">alpha</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">flips</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
223
+ <span class="go">&#39;ebbccdaeb.01110&#39;</span>
224
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">DT_code</span><span class="p">(</span><span class="n">flips</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
225
+ <span class="go">([(6, 8), (2, 10, 4)], [0, 1, 1, 1, 0])</span>
226
+ </pre></div>
227
+ </div>
228
+ </dd></dl>
229
+
230
+ <dl class="py method">
231
+ <dt class="sig sig-object py" id="snappy.Triangulation.alexander_polynomial">
232
+ <span class="sig-name descname"><span class="pre">alexander_polynomial</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.alexander_polynomial" title="Link to this definition"></a></dt>
233
+ <dd><p>Computes the multivariable Alexander polynomial of the manifold:</p>
234
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;K12n123&#39;</span><span class="p">)</span>
235
+ <span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">.</span><span class="n">alexander_polynomial</span><span class="p">()</span>
236
+ <span class="mi">2</span><span class="o">*</span><span class="n">a</span><span class="o">^</span><span class="mi">6</span> <span class="o">-</span> <span class="mi">14</span><span class="o">*</span><span class="n">a</span><span class="o">^</span><span class="mi">5</span> <span class="o">+</span> <span class="mi">34</span><span class="o">*</span><span class="n">a</span><span class="o">^</span><span class="mi">4</span> <span class="o">-</span> <span class="mi">45</span><span class="o">*</span><span class="n">a</span><span class="o">^</span><span class="mi">3</span> <span class="o">+</span> <span class="mi">34</span><span class="o">*</span><span class="n">a</span><span class="o">^</span><span class="mi">2</span> <span class="o">-</span> <span class="mi">14</span><span class="o">*</span><span class="n">a</span> <span class="o">+</span> <span class="mi">2</span>
237
+
238
+ <span class="n">sage</span><span class="p">:</span> <span class="n">N</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;v1539(5,1)&#39;</span><span class="p">)</span>
239
+ <span class="n">sage</span><span class="p">:</span> <span class="n">N</span><span class="o">.</span><span class="n">alexander_polynomial</span><span class="p">()</span>
240
+ <span class="n">a</span><span class="o">^</span><span class="mi">2</span><span class="o">*</span><span class="n">b</span> <span class="o">+</span> <span class="n">a</span><span class="o">*</span><span class="n">b</span><span class="o">^</span><span class="mi">2</span> <span class="o">+</span> <span class="n">a</span><span class="o">*</span><span class="n">b</span> <span class="o">+</span> <span class="n">a</span> <span class="o">+</span> <span class="n">b</span>
241
+ </pre></div>
242
+ </div>
243
+ <p>Any provided keyword arguments are passed to
244
+ <a class="reference internal" href="#snappy.Triangulation.fundamental_group" title="snappy.Triangulation.fundamental_group"><code class="xref py py-meth docutils literal notranslate"><span class="pre">fundamental_group</span></code></a> and
245
+ so affect the group presentation used in the computation.</p>
246
+ </dd></dl>
247
+
248
+ <dl class="py method">
249
+ <dt class="sig sig-object py" id="snappy.Triangulation.copy">
250
+ <span class="sig-name descname"><span class="pre">copy</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.copy" title="Link to this definition"></a></dt>
251
+ <dd><p>Returns a copy of the triangulation.</p>
252
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;m125&#39;</span><span class="p">)</span>
253
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
254
+ </pre></div>
255
+ </div>
256
+ </dd></dl>
257
+
258
+ <dl class="py method">
259
+ <dt class="sig sig-object py" id="snappy.Triangulation.cover">
260
+ <span class="sig-name descname"><span class="pre">cover</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">permutation_rep</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#snappy.Triangulation" title="snappy.Triangulation"><span class="pre">snappy.Triangulation</span></a></span></span><a class="headerlink" href="#snappy.Triangulation.cover" title="Link to this definition"></a></dt>
261
+ <dd><p>Returns a <a class="reference internal" href="#snappy.Triangulation" title="snappy.Triangulation"><code class="xref py py-class docutils literal notranslate"><span class="pre">Triangulation</span></code></a> representing the finite cover specified
262
+ by a transitive permutation representation. The representation is
263
+ specified by a list of permutations, one for each generator of the
264
+ simplified presentation of the fundamental group. Each permutation is
265
+ specified as a list <code class="docutils literal notranslate"><span class="pre">P</span></code> such that <code class="docutils literal notranslate"><span class="pre">set(P)</span> <span class="pre">==</span> <span class="pre">set(range(d))</span></code> where
266
+ <code class="docutils literal notranslate"><span class="pre">d</span></code> is the degree of the cover.</p>
267
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;m004&#39;</span><span class="p">)</span>
268
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N0</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">cover</span><span class="p">([[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">2</span><span class="p">],</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">3</span><span class="p">]])</span>
269
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N0</span><span class="o">.</span><span class="n">homology</span><span class="p">()</span>
270
+ <span class="go">Z + Z + Z</span>
271
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N0</span><span class="o">.</span><span class="n">cover_info</span><span class="p">()[</span><span class="s1">&#39;type&#39;</span><span class="p">]</span>
272
+ <span class="go">&#39;irregular&#39;</span>
273
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N0</span><span class="o">.</span><span class="n">cover_info</span><span class="p">()[</span><span class="s1">&#39;base&#39;</span><span class="p">]</span>
274
+ <span class="go">&#39;m004&#39;</span>
275
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N0</span><span class="o">.</span><span class="n">cover_info</span><span class="p">()[</span><span class="s1">&#39;degree&#39;</span><span class="p">]</span>
276
+ <span class="go">5</span>
277
+ </pre></div>
278
+ </div>
279
+ <p>Within Sage the permutations can also be of type
280
+ <code class="docutils literal notranslate"><span class="pre">PermutationGroupElement</span></code>, in which case they act on the set
281
+ <code class="docutils literal notranslate"><span class="pre">range(1,</span> <span class="pre">d</span> <span class="pre">+</span> <span class="pre">1)</span></code>. Or, you can specify a GAP or Magma subgroup
282
+ of the fundamental group. For more examples, see the docstring for
283
+ <a class="reference internal" href="manifold.html#snappy.Manifold.cover" title="snappy.Manifold.cover"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Manifold.cover()</span></code></a>.</p>
284
+ </dd></dl>
285
+
286
+ <dl class="py method">
287
+ <dt class="sig sig-object py" id="snappy.Triangulation.cover_info">
288
+ <span class="sig-name descname"><span class="pre">cover_info</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.cover_info" title="Link to this definition"></a></dt>
289
+ <dd><p>If this is a manifold or triangulation which was constructed as
290
+ a covering space, return a dictionary describing the cover. Otherwise
291
+ return 0. The dictionary keys are ‘base’, ‘type’ and ‘degree’.</p>
292
+ </dd></dl>
293
+
294
+ <dl class="py method">
295
+ <dt class="sig sig-object py" id="snappy.Triangulation.covers">
296
+ <span class="sig-name descname"><span class="pre">covers</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">degree</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">method</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">cover_type</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'all'</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">list</span><span class="p"><span class="pre">[</span></span><a class="reference internal" href="#snappy.Triangulation" title="snappy.Triangulation"><span class="pre">snappy.Triangulation</span></a><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#snappy.Triangulation.covers" title="Link to this definition"></a></dt>
297
+ <dd><p>Returns a list of Triangulations corresponding to all of the
298
+ finite covers of the given degree. The default method is
299
+ ‘low_index’ for general covers and ‘snappea for cyclic
300
+ covers. The former uses Sim’s algorithm while the latter
301
+ uses the original Snappea algorithm.</p>
302
+ <p>WARNING: If the degree is large this might take a very, very,
303
+ very long time.</p>
304
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;m003&#39;</span><span class="p">)</span>
305
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">covers</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">covers</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span>
306
+ <span class="gp">&gt;&gt;&gt; </span><span class="nb">sorted</span><span class="p">(</span><span class="n">N</span><span class="o">.</span><span class="n">homology</span><span class="p">()</span> <span class="k">for</span> <span class="n">N</span> <span class="ow">in</span> <span class="n">covers</span><span class="p">)</span>
307
+ <span class="go">[Z/3 + Z/15 + Z, Z/5 + Z + Z]</span>
308
+ </pre></div>
309
+ </div>
310
+ <p>It is faster to look just at cyclic covers.</p>
311
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">covers</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">covers</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="n">cover_type</span><span class="o">=</span><span class="s1">&#39;cyclic&#39;</span><span class="p">)</span>
312
+ <span class="gp">&gt;&gt;&gt; </span><span class="p">[(</span><span class="n">N</span><span class="p">,</span> <span class="n">N</span><span class="o">.</span><span class="n">homology</span><span class="p">())</span> <span class="k">for</span> <span class="n">N</span> <span class="ow">in</span> <span class="n">covers</span><span class="p">]</span>
313
+ <span class="go">[(m003~cyc~0(0,0), Z/3 + Z/15 + Z)]</span>
314
+ </pre></div>
315
+ </div>
316
+ <p>Here we check that we get the same number of covers with the
317
+ ‘snappea’ and ‘low_index’ methods.</p>
318
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;m125&#39;</span><span class="p">)</span>
319
+ <span class="gp">&gt;&gt;&gt; </span><span class="nb">len</span><span class="p">(</span><span class="n">M</span><span class="o">.</span><span class="n">covers</span><span class="p">(</span><span class="mi">5</span><span class="p">))</span>
320
+ <span class="go">19</span>
321
+ <span class="gp">&gt;&gt;&gt; </span><span class="nb">len</span><span class="p">(</span><span class="n">M</span><span class="o">.</span><span class="n">covers</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="n">method</span><span class="o">=</span><span class="s1">&#39;snappea&#39;</span><span class="p">))</span>
322
+ <span class="go">19</span>
323
+ </pre></div>
324
+ </div>
325
+ <p>If you are using Sage, you can use GAP to find the subgroups,
326
+ which is often much faster, by specifying the optional
327
+ argument method = ‘gap’ If you have Magma installed, you can
328
+ used it to do the heavy lifting by specifying method=’magma’.</p>
329
+ </dd></dl>
330
+
331
+ <dl class="py method">
332
+ <dt class="sig sig-object py" id="snappy.Triangulation.cusp_info">
333
+ <span class="sig-name descname"><span class="pre">cusp_info</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data_spec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.cusp_info" title="Link to this definition"></a></dt>
334
+ <dd><p>Returns an info object containing information about the given
335
+ cusp. Usage:</p>
336
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;v3227(0,0)(1,2)(3,2)&#39;</span><span class="p">)</span>
337
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_info</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
338
+ <span class="go">Cusp 1 : torus cusp with Dehn filling coefficients (M, L) = (1.0, 2.0)</span>
339
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">c</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">cusp_info</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
340
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">c</span><span class="o">.</span><span class="n">is_complete</span>
341
+ <span class="go">False</span>
342
+ <span class="gp">&gt;&gt;&gt; </span><span class="nb">sorted</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
343
+ <span class="go">[&#39;filling&#39;, &#39;index&#39;, &#39;is_complete&#39;, &#39;topology&#39;]</span>
344
+ </pre></div>
345
+ </div>
346
+ <p>You can get information about multiple cusps at once:</p>
347
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_info</span><span class="p">()</span>
348
+ <span class="go">[Cusp 0 : torus cusp, not filled,</span>
349
+ <span class="go"> Cusp 1 : torus cusp with Dehn filling coefficients (M, L) = (1.0, 2.0),</span>
350
+ <span class="go"> Cusp 2 : torus cusp with Dehn filling coefficients (M, L) = (3.0, 2.0)]</span>
351
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_info</span><span class="p">(</span><span class="s1">&#39;is_complete&#39;</span><span class="p">)</span>
352
+ <span class="go">[True, False, False]</span>
353
+ </pre></div>
354
+ </div>
355
+ </dd></dl>
356
+
357
+ <dl class="py method">
358
+ <dt class="sig sig-object py" id="snappy.Triangulation.dehn_fill">
359
+ <span class="sig-name descname"><span class="pre">dehn_fill</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">filling_data</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">which_cusp</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span><a class="headerlink" href="#snappy.Triangulation.dehn_fill" title="Link to this definition"></a></dt>
360
+ <dd><p>Set the Dehn filling coefficients of the cusps. This can be
361
+ specified in the following ways, where the cusps are numbered
362
+ by 0,1,…,(num_cusps - 1).</p>
363
+ <ul>
364
+ <li><p>Fill cusp 2:</p>
365
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;8^4_1&#39;</span><span class="p">)</span>
366
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">dehn_fill</span><span class="p">((</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">),</span> <span class="mi">2</span><span class="p">)</span>
367
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span>
368
+ <span class="go">8^4_1(0,0)(0,0)(2,3)(0,0)</span>
369
+ </pre></div>
370
+ </div>
371
+ </li>
372
+ <li><p>Fill the last cusp:</p>
373
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">dehn_fill</span><span class="p">((</span><span class="mi">1</span><span class="p">,</span><span class="mi">5</span><span class="p">),</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
374
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span>
375
+ <span class="go">8^4_1(0,0)(0,0)(2,3)(1,5)</span>
376
+ </pre></div>
377
+ </div>
378
+ </li>
379
+ <li><p>Fill the first two cusps:</p>
380
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">dehn_fill</span><span class="p">(</span> <span class="p">[</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">0</span><span class="p">),</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">4</span><span class="p">)</span> <span class="p">])</span>
381
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span>
382
+ <span class="go">8^4_1(3,0)(1,-4)(2,3)(1,5)</span>
383
+ </pre></div>
384
+ </div>
385
+ </li>
386
+ <li><p>When there is only one cusp, there’s a shortcut</p>
387
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">N</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;m004&#39;</span><span class="p">)</span>
388
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">dehn_fill</span><span class="p">(</span> <span class="p">(</span><span class="o">-</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="p">)</span> <span class="p">)</span>
389
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span>
390
+ <span class="go">m004(-3,4)</span>
391
+ </pre></div>
392
+ </div>
393
+ </li>
394
+ </ul>
395
+ <p>Does not return a new <a class="reference internal" href="#snappy.Triangulation" title="snappy.Triangulation"><code class="xref py py-class docutils literal notranslate"><span class="pre">Triangulation</span></code></a>.</p>
396
+ </dd></dl>
397
+
398
+ <dl class="py method">
399
+ <dt class="sig sig-object py" id="snappy.Triangulation.edge_valences">
400
+ <span class="sig-name descname"><span class="pre">edge_valences</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.edge_valences" title="Link to this definition"></a></dt>
401
+ <dd><p>Returns a dictionary whose keys are the valences of the edges
402
+ in the triangulation, and the value associated to a key is the
403
+ number of edges of that valence.</p>
404
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;v3227&#39;</span><span class="p">)</span>
405
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">edge_valences</span><span class="p">()</span>
406
+ <span class="go">{10: 1, 4: 1, 5: 2, 6: 3}</span>
407
+ </pre></div>
408
+ </div>
409
+ </dd></dl>
410
+
411
+ <dl class="py method">
412
+ <dt class="sig sig-object py" id="snappy.Triangulation.exterior_to_link">
413
+ <span class="sig-name descname"><span class="pre">exterior_to_link</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">check_input</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">check_answer</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">careful_perturbation</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">simplify_link</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pachner_search_tries</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">10</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">seed</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="spherogram.html#spherogram.Link" title="spherogram.Link"><span class="pre">Link</span></a></span></span><a class="headerlink" href="#snappy.Triangulation.exterior_to_link" title="Link to this definition"></a></dt>
414
+ <dd><p>For a triangulation of the exterior of a link in the 3-sphere,
415
+ return a planar diagram for the link. The peripheral curves whose
416
+ Dehn filling is the 3-sphere are <strong>part of the input</strong>, specified
417
+ by either:</p>
418
+ <ol class="loweralpha simple">
419
+ <li><p>If no cusp is filled, then they are the meridians of the
420
+ current peripheral curves.</p></li>
421
+ <li><p>If every cusp is filled, then they are the current Dehn filling
422
+ curves.</p></li>
423
+ </ol>
424
+ <p>In particular, it does <strong>not</strong> try to determine whether there exist
425
+ fillings on the input which give the 3-sphere. Example usage:</p>
426
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;m016&#39;</span><span class="p">)</span>
427
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">L</span> <span class="o">=</span> <span class="n">exterior_to_link</span><span class="p">(</span><span class="n">M</span><span class="p">)</span>
428
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">L</span><span class="o">.</span><span class="n">exterior</span><span class="p">()</span><span class="o">.</span><span class="n">is_isometric_to</span><span class="p">(</span><span class="n">M</span><span class="p">)</span>
429
+ <span class="go">True</span>
430
+ </pre></div>
431
+ </div>
432
+ <p>The algorithm used is that of <a class="reference external" href="https://arxiv.org/abs/2112.03251">Dunfield, Obeidin, and Rudd</a>. The optional arguments are
433
+ as follows.</p>
434
+ <ul class="simple">
435
+ <li><p><code class="docutils literal notranslate"><span class="pre">verbose</span></code>: When <code class="docutils literal notranslate"><span class="pre">True</span></code>, prints progress updates as the algorithm
436
+ goes along.</p></li>
437
+ <li><p><code class="docutils literal notranslate"><span class="pre">check_input</span></code>: When <code class="docutils literal notranslate"><span class="pre">True</span></code> (the default), first checks that the
438
+ fundamental group of the specified Dehn filling is trivial. As
439
+ it doesn’t try too hard to simplify the group presentation, it
440
+ can happen that this check fails but the algorithm still finds a
441
+ diagram if you pass <code class="docutils literal notranslate"><span class="pre">check_input=False</span></code>.</p></li>
442
+ <li><p><code class="docutils literal notranslate"><span class="pre">check_answer</span></code>: When <code class="docutils literal notranslate"><span class="pre">True</span></code> (the default), take the exterior of
443
+ the final link diagram and use <code class="docutils literal notranslate"><span class="pre">Manifold.is_isometric_to</span></code> to
444
+ confirm that it is homeomorphic to the input. If the input is
445
+ not hyperbolic or is very large, this check may fail even though
446
+ the diagram is correct.</p></li>
447
+ <li><p><code class="docutils literal notranslate"><span class="pre">careful_perturbation</span></code>: The rational coordinates of the
448
+ intermediate PL links are periodically rounded to control the
449
+ size of their denominators. When <code class="docutils literal notranslate"><span class="pre">careful_perturbation=True</span></code>
450
+ (the default), computations are performed to ensure this
451
+ rounding does not change the isotopy class of the link.</p></li>
452
+ <li><p><code class="docutils literal notranslate"><span class="pre">simplify_link</span></code>: When <code class="docutils literal notranslate"><span class="pre">True</span></code> (the default), uses
453
+ <code class="docutils literal notranslate"><span class="pre">Link.simplify('global')</span></code> to minimize the size of the final
454
+ diagram; otherwise, it just does <code class="docutils literal notranslate"><span class="pre">basic</span></code> simplifications, which
455
+ can be much faster if the initial link is complicated.</p></li>
456
+ <li><p><code class="docutils literal notranslate"><span class="pre">pachner_search_tries</span></code>: Controls how hard to search for a
457
+ suitable sequence of Pachner moves from the filled input
458
+ triangulation to a standard triangulation of the 3-sphere.</p></li>
459
+ <li><p><code class="docutils literal notranslate"><span class="pre">seed</span></code>: The algorithm involves many random choices, and hence
460
+ each run typically produces a different diagram of the
461
+ underlying link. If you need the same output each time, you can
462
+ specify a fixed seed for the various pseudo-random number
463
+ generators.</p></li>
464
+ </ul>
465
+ <p>Note on rigor: Provided at least one of <code class="docutils literal notranslate"><span class="pre">check_answer</span></code> and
466
+ <code class="docutils literal notranslate"><span class="pre">careful_perturbation</span></code> is <code class="docutils literal notranslate"><span class="pre">True</span></code>, the exterior of the output
467
+ link is guaranteed to match the input (including the choice of
468
+ meridians).</p>
469
+ <p><strong>Warning:</strong> The order of the link components and the cusps of the
470
+ input manifold is only guaranteed to match when
471
+ <code class="docutils literal notranslate"><span class="pre">check_answer=True</span></code>. Even then, the implicit orientation along
472
+ each component of the link may not be preserved.</p>
473
+ </dd></dl>
474
+
475
+ <dl class="py method">
476
+ <dt class="sig sig-object py" id="snappy.Triangulation.filled_triangulation">
477
+ <span class="sig-name descname"><span class="pre">filled_triangulation</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cusps_to_fill</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'all'</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#snappy.Triangulation" title="snappy.Triangulation"><span class="pre">snappy.Triangulation</span></a></span></span><a class="headerlink" href="#snappy.Triangulation.filled_triangulation" title="Link to this definition"></a></dt>
478
+ <dd><p>Return a new manifold where the specified cusps have been
479
+ permanently filled in. Examples:</p>
480
+ <p>Filling all the cusps:</p>
481
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;m125(1,2)(3,4)&#39;</span><span class="p">)</span>
482
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">filled_triangulation</span><span class="p">()</span>
483
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">num_cusps</span><span class="p">()</span>
484
+ <span class="go">0</span>
485
+ </pre></div>
486
+ </div>
487
+ <p>Filling cusps 0 and 2 :</p>
488
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;v3227(1,2)(3,4)(5,6)&#39;</span><span class="p">)</span>
489
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">filled_triangulation</span><span class="p">([</span><span class="mi">0</span><span class="p">,</span><span class="mi">2</span><span class="p">])</span>
490
+ <span class="go">v3227_filled(3,4)</span>
491
+ </pre></div>
492
+ </div>
493
+ </dd></dl>
494
+
495
+ <dl class="py method">
496
+ <dt class="sig sig-object py" id="snappy.Triangulation.fundamental_group">
497
+ <span class="sig-name descname"><span class="pre">fundamental_group</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">simplify_presentation</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fillings_may_affect_generators</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">minimize_number_of_generators</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">try_hard_to_shorten_relators</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">FundamentalGroup</span></span></span><a class="headerlink" href="#snappy.Triangulation.fundamental_group" title="Link to this definition"></a></dt>
498
+ <dd><p>Returns a <code class="xref py py-class docutils literal notranslate"><span class="pre">FundamentalGroup</span></code> object representing the fundamental
499
+ group of the manifold. If integer Dehn surgery parameters
500
+ have been set, then the corresponding peripheral elements are
501
+ killed.</p>
502
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;m004&#39;</span><span class="p">)</span>
503
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">fundamental_group</span><span class="p">()</span>
504
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span>
505
+ <span class="go">Generators:</span>
506
+ <span class="go"> a,b</span>
507
+ <span class="go">Relators:</span>
508
+ <span class="go"> aaabABBAb</span>
509
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span><span class="o">.</span><span class="n">peripheral_curves</span><span class="p">()</span>
510
+ <span class="go">[(&#39;ab&#39;, &#39;aBAbABab&#39;)]</span>
511
+ </pre></div>
512
+ </div>
513
+ <p>There are four optional arguments all of which default to True:</p>
514
+ <ul class="simple">
515
+ <li><p>simplify_presentation</p></li>
516
+ <li><p>fillings_may_affect_generators</p></li>
517
+ <li><p>minimize_number_of_generators</p></li>
518
+ <li><p>try_hard_to_shorten_relators</p></li>
519
+ </ul>
520
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">fundamental_group</span><span class="p">(</span><span class="kc">False</span><span class="p">,</span> <span class="kc">False</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
521
+ <span class="go">Generators:</span>
522
+ <span class="go"> a,b,c</span>
523
+ <span class="go">Relators:</span>
524
+ <span class="go"> CbAcB</span>
525
+ <span class="go"> BacA</span>
526
+ </pre></div>
527
+ </div>
528
+ </dd></dl>
529
+
530
+ <dl class="py method">
531
+ <dt class="sig sig-object py" id="snappy.Triangulation.gluing_equations">
532
+ <span class="sig-name descname"><span class="pre">gluing_equations</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">form</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'log'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.gluing_equations" title="Link to this definition"></a></dt>
533
+ <dd><p>In the default mode, this function returns a matrix with rows
534
+ of the form</p>
535
+ <blockquote>
536
+ <div><p>a b c d e f …</p>
537
+ </div></blockquote>
538
+ <p>which means</p>
539
+ <blockquote>
540
+ <div><p>a*log(z0) + b*log(1/(1-z0)) + c*log((z0-1)/z0) + d*log(z1) +… = 2 pi i</p>
541
+ </div></blockquote>
542
+ <p>for an edge equation, and (same) = 0 for a cusp equation.
543
+ Here, the cusp equations come at the bottom of the matrix, and
544
+ are listed in the form: meridian of cusp 0, longitude of cusp
545
+ 0, meridian of cusp 1, longitude of cusp 1,…</p>
546
+ <p>In terms of the tetrahedra, a is the invariant of the edge
547
+ (2,3), b the invariant of the edge (0,2) and c is the
548
+ invariant of the edge (1,2). See kernel_code/edge_classes.c
549
+ for a detailed account of the convention used.</p>
550
+ <p>If the optional argument form=’rect’ is given, then this
551
+ function returns a list of tuples of the form:</p>
552
+ <blockquote>
553
+ <div><p>( [a0, a1,..,a_n], [b_0, b_1,…,b_n], c)</p>
554
+ </div></blockquote>
555
+ <p>where this corresponds to the equation</p>
556
+ <blockquote>
557
+ <div><p>z0^a0 (1 - z0)^b0 z1^a1(1 - z1)^b1 … = c</p>
558
+ </div></blockquote>
559
+ <p>where c = 1 or -1.</p>
560
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;m004(2,3)&#39;</span><span class="p">)</span>
561
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">gluing_equations</span><span class="p">()</span>
562
+ <span class="go">[ 2 1 0 1 0 2]</span>
563
+ <span class="go">[ 0 1 2 1 2 0]</span>
564
+ <span class="go">[ 2 0 0 0 -8 6]</span>
565
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">gluing_equations</span><span class="p">(</span><span class="n">form</span><span class="o">=</span><span class="s1">&#39;rect&#39;</span><span class="p">)</span>
566
+ <span class="go">[([2, -1], [-1, 2], 1), ([-2, 1], [1, -2], 1), ([2, -6], [0, 14], 1)]</span>
567
+ </pre></div>
568
+ </div>
569
+ </dd></dl>
570
+
571
+ <dl class="py method">
572
+ <dt class="sig sig-object py" id="snappy.Triangulation.gluing_equations_pgl">
573
+ <span class="sig-name descname"><span class="pre">gluing_equations_pgl</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">N</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">2</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">equation_type</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'all'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.gluing_equations_pgl" title="Link to this definition"></a></dt>
574
+ <dd><p>Returns a NeumannZagierTypeEquations object that contains a matrix
575
+ encoding the gluing equations for boundary-parabolic PGL(N,C)
576
+ representations together with explanations of the meaning
577
+ of the rows and the columns of the matrix.</p>
578
+ <p>This method generalizes gluing_equations() to PGL(N,C)-representations
579
+ as described in
580
+ Stavros Garoufalidis, Matthias Goerner, Christian K. Zickert:
581
+ “Gluing Equations for PGL(n,C)-Representations of 3-Manifolds”
582
+ (<a class="reference external" href="http://arxiv.org/abs/1207.6711">http://arxiv.org/abs/1207.6711</a>).</p>
583
+ <p>The result of the <a class="reference internal" href="#snappy.Triangulation.gluing_equations" title="snappy.Triangulation.gluing_equations"><code class="xref py py-meth docutils literal notranslate"><span class="pre">gluing_equations()</span></code></a> can be obtained from
584
+ the general method by:</p>
585
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;m004&#39;</span><span class="p">)</span>
586
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">gluing_equations_pgl</span><span class="p">()</span><span class="o">.</span><span class="n">matrix</span>
587
+ <span class="go">[ 2 1 0 1 0 2]</span>
588
+ <span class="go">[ 0 1 2 1 2 0]</span>
589
+ <span class="go">[ 1 0 0 0 -1 0]</span>
590
+ <span class="go">[ 0 0 0 0 -2 2]</span>
591
+ </pre></div>
592
+ </div>
593
+ <p>But besides the matrix, the method also returns explanations of
594
+ the columns and rows:</p>
595
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s2">&quot;m004&quot;</span><span class="p">)</span>
596
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">gluing_equations_pgl</span><span class="p">()</span>
597
+ <span class="go">NeumannZagierTypeEquations(</span>
598
+ <span class="go"> [ 2 1 0 1 0 2]</span>
599
+ <span class="go"> [ 0 1 2 1 2 0]</span>
600
+ <span class="go"> [ 1 0 0 0 -1 0]</span>
601
+ <span class="go"> [ 0 0 0 0 -2 2],</span>
602
+ <span class="go"> explain_columns = [&#39;z_0000_0&#39;, &#39;zp_0000_0&#39;, &#39;zpp_0000_0&#39;, &#39;z_0000_1&#39;, &#39;zp_0000_1&#39;, &#39;zpp_0000_1&#39;],</span>
603
+ <span class="go"> explain_rows = [&#39;edge_0_0&#39;, &#39;edge_0_1&#39;, &#39;meridian_0_0&#39;, &#39;longitude_0_0&#39;])</span>
604
+ </pre></div>
605
+ </div>
606
+ <p>The first row of the matrix means that the edge equation for
607
+ edge 0 is</p>
608
+ <div class="math notranslate nohighlight">
609
+ \[{z_{0000,0}}^2 * z'_{0000,0} * z_{0000,1} * {z''_{0000,1}}^2 = 1.\]</div>
610
+ <p>Similarly, the next row encodes the edge equation for the other edge
611
+ and the next two rows encode peripheral equations.</p>
612
+ <p>Following the SnapPy convention, a <code class="docutils literal notranslate"><span class="pre">z</span></code> denotes the cross ratio
613
+ <span class="math notranslate nohighlight">\(z\)</span> at the edge (0,1), a <code class="docutils literal notranslate"><span class="pre">zp</span></code> the cross ratio <span class="math notranslate nohighlight">\(z'\)</span> at
614
+ the edge (0,2) and a <code class="docutils literal notranslate"><span class="pre">zpp</span></code> the cross
615
+ ratio <span class="math notranslate nohighlight">\(z''\)</span> at the edge (1,2). The entire symbol <code class="docutils literal notranslate"><span class="pre">z_xxxx_y</span></code> then
616
+ denotes the cross ratio belonging to the subsimplex at integral
617
+ point <code class="docutils literal notranslate"><span class="pre">xxxx</span></code> (always <code class="docutils literal notranslate"><span class="pre">0000</span></code> for <code class="docutils literal notranslate"><span class="pre">N</span> <span class="pre">=</span> <span class="pre">2</span></code>) of the simplex <code class="docutils literal notranslate"><span class="pre">y</span></code>.</p>
618
+ <p>Note: the SnapPy convention is different from the paper
619
+ mentioned above, e.g., compare
620
+ kernel_code/edge_classes.c with Figure 3. We follow the SnapPy
621
+ convention here so that all computations done in SnapPy are
622
+ consistent.</p>
623
+ <p>The explanations of the rows and columns can be obtained explicitly by:</p>
624
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">gluing_equations_pgl</span><span class="p">(</span><span class="n">N</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span> <span class="n">equation_type</span> <span class="o">=</span> <span class="s1">&#39;peripheral&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">explain_rows</span>
625
+ <span class="go">[&#39;meridian_0_0&#39;, &#39;meridian_1_0&#39;, &#39;longitude_0_0&#39;, &#39;longitude_1_0&#39;]</span>
626
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">gluing_equations_pgl</span><span class="p">(</span><span class="n">N</span> <span class="o">=</span> <span class="mi">2</span><span class="p">)</span><span class="o">.</span><span class="n">explain_columns</span>
627
+ <span class="go">[&#39;z_0000_0&#39;, &#39;zp_0000_0&#39;, &#39;zpp_0000_0&#39;, &#39;z_0000_1&#39;, &#39;zp_0000_1&#39;, &#39;zpp_0000_1&#39;]</span>
628
+ </pre></div>
629
+ </div>
630
+ <p>A subset of all gluing equations can be obtained by setting the
631
+ <code class="docutils literal notranslate"><span class="pre">equation_type</span></code>:</p>
632
+ <ul class="simple">
633
+ <li><p>all gluing equations: <code class="docutils literal notranslate"><span class="pre">all</span></code></p></li>
634
+ <li><p>non-peripheral equations: <code class="docutils literal notranslate"><span class="pre">non_peripheral</span></code></p>
635
+ <ul>
636
+ <li><p>edge gluing equations: <code class="docutils literal notranslate"><span class="pre">edge</span></code></p></li>
637
+ <li><p>face gluing equations: <code class="docutils literal notranslate"><span class="pre">face</span></code></p></li>
638
+ <li><p>internal gluing equations: <code class="docutils literal notranslate"><span class="pre">internal</span></code></p></li>
639
+ </ul>
640
+ </li>
641
+ <li><p>cusp gluing equations: <code class="docutils literal notranslate"><span class="pre">peripheral</span></code></p>
642
+ <ul>
643
+ <li><p>cusp gluing equations for meridians: <code class="docutils literal notranslate"><span class="pre">meridian</span></code></p></li>
644
+ <li><p>cusp gluing equations for longitudes: <code class="docutils literal notranslate"><span class="pre">longitude</span></code></p></li>
645
+ </ul>
646
+ </li>
647
+ </ul>
648
+ </dd></dl>
649
+
650
+ <dl class="py method">
651
+ <dt class="sig sig-object py" id="snappy.Triangulation.has_finite_vertices">
652
+ <span class="sig-name descname"><span class="pre">has_finite_vertices</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">bool</span></span></span><a class="headerlink" href="#snappy.Triangulation.has_finite_vertices" title="Link to this definition"></a></dt>
653
+ <dd><p>Returns <code class="docutils literal notranslate"><span class="pre">True</span></code> if and only if the triangulation has finite (non-ideal)
654
+ vertices.</p>
655
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">T</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s2">&quot;m004&quot;</span><span class="p">)</span>
656
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">T</span><span class="o">.</span><span class="n">has_finite_vertices</span><span class="p">()</span>
657
+ <span class="go">False</span>
658
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">T</span><span class="o">.</span><span class="n">dehn_fill</span><span class="p">((</span><span class="mi">12</span><span class="p">,</span><span class="mi">13</span><span class="p">))</span>
659
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">S</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">filled_triangulation</span><span class="p">()</span>
660
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">S</span><span class="o">.</span><span class="n">has_finite_vertices</span><span class="p">()</span>
661
+ <span class="go">True</span>
662
+ </pre></div>
663
+ </div>
664
+ <p>When trying to find a hyperbolic structure, SnapPea will eliminate
665
+ finite vertices:</p>
666
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">S</span><span class="o">.</span><span class="n">with_hyperbolic_structure</span><span class="p">()</span>
667
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">has_finite_vertices</span><span class="p">()</span>
668
+ <span class="go">False</span>
669
+ </pre></div>
670
+ </div>
671
+ </dd></dl>
672
+
673
+ <dl class="py method">
674
+ <dt class="sig sig-object py" id="snappy.Triangulation.homological_longitude">
675
+ <span class="sig-name descname"><span class="pre">homological_longitude</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cusp</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.homological_longitude" title="Link to this definition"></a></dt>
676
+ <dd><p>Returns the peripheral curve in the given cusp, if any, which is
677
+ homologically trivial (with rational coefficients) in the manifold:</p>
678
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;m015&#39;</span><span class="p">)</span>
679
+ <span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">.</span><span class="n">homological_longitude</span><span class="p">()</span>
680
+ <span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
681
+ </pre></div>
682
+ </div>
683
+ <p>If no cusp is specified, the default is the first unfilled cusp;
684
+ if all cusps are filled, the default is the first cusp:</p>
685
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;L5a1(3,4)(0,0)&#39;</span><span class="p">)</span>
686
+ <span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">.</span><span class="n">homological_longitude</span><span class="p">()</span>
687
+ <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
688
+ </pre></div>
689
+ </div>
690
+ <p>The components of the next link have nontrivial linking number
691
+ so there is no such curve:</p>
692
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">W</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;L7a2&#39;</span><span class="p">)</span>
693
+ <span class="n">sage</span><span class="p">:</span> <span class="n">W</span><span class="o">.</span><span class="n">homological_longitude</span><span class="p">(</span><span class="n">cusp</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">None</span>
694
+ <span class="kc">True</span>
695
+ </pre></div>
696
+ </div>
697
+ <p>If every curve in the given cusp is trivial in the rational homology of
698
+ the manifold, an exception is raised:</p>
699
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;4_1(1,0)&#39;</span><span class="p">)</span>
700
+ <span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">.</span><span class="n">homological_longitude</span><span class="p">()</span>
701
+ <span class="n">Traceback</span> <span class="p">(</span><span class="n">most</span> <span class="n">recent</span> <span class="n">call</span> <span class="n">last</span><span class="p">):</span>
702
+ <span class="o">...</span>
703
+ <span class="ne">ValueError</span><span class="p">:</span> <span class="n">Every</span> <span class="n">curve</span> <span class="n">on</span> <span class="n">cusp</span> <span class="ow">is</span> <span class="n">homologically</span> <span class="n">trivial</span>
704
+ </pre></div>
705
+ </div>
706
+ </dd></dl>
707
+
708
+ <dl class="py method">
709
+ <dt class="sig sig-object py" id="snappy.Triangulation.homology">
710
+ <span class="sig-name descname"><span class="pre">homology</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="additional_classes.html#snappy.AbelianGroup" title="SnapPy.AbelianGroup"><span class="pre">AbelianGroup</span></a></span></span><a class="headerlink" href="#snappy.Triangulation.homology" title="Link to this definition"></a></dt>
711
+ <dd><p>Returns an <a class="reference internal" href="additional_classes.html#snappy.AbelianGroup" title="snappy.AbelianGroup"><code class="xref py py-class docutils literal notranslate"><span class="pre">AbelianGroup</span></code></a> representing the first integral
712
+ homology group of the underlying (Dehn filled) manifold.</p>
713
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;m003&#39;</span><span class="p">)</span>
714
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">homology</span><span class="p">()</span>
715
+ <span class="go">Z/5 + Z</span>
716
+ </pre></div>
717
+ </div>
718
+ </dd></dl>
719
+
720
+ <dl class="py method">
721
+ <dt class="sig sig-object py" id="snappy.Triangulation.is_orientable">
722
+ <span class="sig-name descname"><span class="pre">is_orientable</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">bool</span></span></span><a class="headerlink" href="#snappy.Triangulation.is_orientable" title="Link to this definition"></a></dt>
723
+ <dd><p>Return whether the underlying 3-manifold is orientable.</p>
724
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;x124&#39;</span><span class="p">)</span>
725
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">is_orientable</span><span class="p">()</span>
726
+ <span class="go">False</span>
727
+ </pre></div>
728
+ </div>
729
+ </dd></dl>
730
+
731
+ <dl class="py method">
732
+ <dt class="sig sig-object py" id="snappy.Triangulation.isomorphisms_to">
733
+ <span class="sig-name descname"><span class="pre">isomorphisms_to</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#snappy.Triangulation" title="snappy.Triangulation"><span class="pre">Triangulation</span></a><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">TriangulationHP</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">List</span><span class="p"><span class="pre">[</span></span><span class="pre">Isometry</span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#snappy.Triangulation.isomorphisms_to" title="Link to this definition"></a></dt>
734
+ <dd><p>Returns a complete list of combinatorial isomorphisms between
735
+ the two triangulations:</p>
736
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;5^2_1&#39;</span><span class="p">)</span>
737
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;5^2_1&#39;</span><span class="p">)</span>
738
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">set_peripheral_curves</span><span class="p">([[[</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">],[</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">]],[[</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">],[</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">]]])</span>
739
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">isoms</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">isomorphisms_to</span><span class="p">(</span><span class="n">N</span><span class="p">)</span>
740
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">isoms</span><span class="p">[</span><span class="mi">6</span><span class="p">]</span>
741
+ <span class="go">0 -&gt; 1 1 -&gt; 0</span>
742
+ <span class="go">[ 1 0] [-1 1]</span>
743
+ <span class="go">[-1 1] [-3 2]</span>
744
+ <span class="go">Does not extend to link</span>
745
+ </pre></div>
746
+ </div>
747
+ <p>Each transformation between cusps is given by a matrix which
748
+ acts on the left. That is, the two <em>columns</em> of the matrix
749
+ give the image of the meridian and longitude respectively. In
750
+ the above example, the meridian of cusp 0 is sent to the
751
+ meridian of cusp 1.</p>
752
+ </dd></dl>
753
+
754
+ <dl class="py method">
755
+ <dt class="sig sig-object py" id="snappy.Triangulation.link">
756
+ <span class="sig-name descname"><span class="pre">link</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.link" title="Link to this definition"></a></dt>
757
+ <dd><p>If the manifold is stored as a link complement in your
758
+ current session then it returns the number of components
759
+ and crossing of the link. To view and interact with the
760
+ link see <a class="reference internal" href="spherogram.html#spherogram.Link.view" title="spherogram.Link.view"><code class="xref py py-meth docutils literal notranslate"><span class="pre">spherogram.Link.view()</span></code></a>
761
+ and <a class="reference internal" href="#snappy.Triangulation.plink" title="snappy.Triangulation.plink"><code class="xref py py-meth docutils literal notranslate"><span class="pre">plink</span></code></a>.</p>
762
+ </dd></dl>
763
+
764
+ <dl class="py method">
765
+ <dt class="sig sig-object py" id="snappy.Triangulation.name">
766
+ <span class="sig-name descname"><span class="pre">name</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">str</span></span></span><a class="headerlink" href="#snappy.Triangulation.name" title="Link to this definition"></a></dt>
767
+ <dd><p>Return the name of the triangulation.</p>
768
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;4_1&#39;</span><span class="p">)</span>
769
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">name</span><span class="p">()</span>
770
+ <span class="go">&#39;4_1&#39;</span>
771
+ </pre></div>
772
+ </div>
773
+ </dd></dl>
774
+
775
+ <dl class="py method">
776
+ <dt class="sig sig-object py" id="snappy.Triangulation.normal_boundary_slopes">
777
+ <span class="sig-name descname"><span class="pre">normal_boundary_slopes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">subset</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'all'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">algorithm</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'FXrays'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.normal_boundary_slopes" title="Link to this definition"></a></dt>
778
+ <dd><p>For a one-cusped manifold, returns all the nonempty boundary slopes of
779
+ spun normal surfaces. Provided the triangulation supports a
780
+ genuine hyperbolic structure, then by <a class="reference external" href="http://arxiv.org/abs/math/0503027">Thurston and Walsh</a> any strict boundary slope
781
+ (the boundary of an essential surface which is not a fiber or
782
+ semifiber) must be listed here.</p>
783
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;K3_1&#39;</span><span class="p">)</span>
784
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">normal_boundary_slopes</span><span class="p">()</span>
785
+ <span class="go">[(16, -1), (20, -1), (37, -2)]</span>
786
+ </pre></div>
787
+ </div>
788
+ <p>If the <code class="docutils literal notranslate"><span class="pre">subset</span></code> flag is set to <code class="docutils literal notranslate"><span class="pre">'kabaya'</span></code>, then it only
789
+ returns boundary slopes associated to vertex surfaces with a quad
790
+ in every tetrahedron; by Theorem 1.1. of
791
+ <a class="reference external" href="http://arxiv.org/abs/1102.4588">Dunfield and Garoufalidis ‘12</a>
792
+ these are all strict boundary slopes.</p>
793
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">N</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;m113&#39;</span><span class="p">)</span>
794
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">normal_boundary_slopes</span><span class="p">()</span>
795
+ <span class="go">[(1, 1), (1, 2), (2, -1), (2, 3), (8, 11)]</span>
796
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">normal_boundary_slopes</span><span class="p">(</span><span class="s1">&#39;kabaya&#39;</span><span class="p">)</span>
797
+ <span class="go">[(8, 11)]</span>
798
+ </pre></div>
799
+ </div>
800
+ <p>If the <code class="docutils literal notranslate"><span class="pre">subset</span></code> flag is set to <code class="docutils literal notranslate"><span class="pre">'brasile'</span></code> then it returns
801
+ only the boundary slopes that are associated to vertex surfaces
802
+ giving isolated rays in the space of embedded normal surfaces.</p>
803
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">normal_boundary_slopes</span><span class="p">(</span><span class="s1">&#39;brasile&#39;</span><span class="p">)</span>
804
+ <span class="go">[(1, 2), (8, 11)]</span>
805
+ </pre></div>
806
+ </div>
807
+ </dd></dl>
808
+
809
+ <dl class="py method">
810
+ <dt class="sig sig-object py" id="snappy.Triangulation.normal_surfaces">
811
+ <span class="sig-name descname"><span class="pre">normal_surfaces</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">algorithm</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'FXrays'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.normal_surfaces" title="Link to this definition"></a></dt>
812
+ <dd><p>All the vertex spun-normal surfaces in the current triangulation.</p>
813
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;m004&#39;</span><span class="p">)</span>
814
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">normal_surfaces</span><span class="p">()</span>
815
+ <span class="go">[&lt;Surface 0: [0, 0] [1, 2] (4, 1)&gt;,</span>
816
+ <span class="go"> &lt;Surface 1: [0, 1] [1, 2] (4, -1)&gt;,</span>
817
+ <span class="go"> &lt;Surface 2: [1, 2] [2, 1] (-4, -1)&gt;,</span>
818
+ <span class="go"> &lt;Surface 3: [2, 2] [2, 1] (-4, 1)&gt;]</span>
819
+ </pre></div>
820
+ </div>
821
+ </dd></dl>
822
+
823
+ <dl class="py method">
824
+ <dt class="sig sig-object py" id="snappy.Triangulation.num_cusps">
825
+ <span class="sig-name descname"><span class="pre">num_cusps</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cusp_type</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'all'</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">int</span></span></span><a class="headerlink" href="#snappy.Triangulation.num_cusps" title="Link to this definition"></a></dt>
826
+ <dd><p>Return the total number of cusps. By giving the optional argument
827
+ ‘orientable’ or ‘nonorientable’ it will only count cusps of that type.</p>
828
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;m125&#39;</span><span class="p">)</span>
829
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">num_cusps</span><span class="p">()</span>
830
+ <span class="go">2</span>
831
+ </pre></div>
832
+ </div>
833
+ </dd></dl>
834
+
835
+ <dl class="py method">
836
+ <dt class="sig sig-object py" id="snappy.Triangulation.num_tetrahedra">
837
+ <span class="sig-name descname"><span class="pre">num_tetrahedra</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">int</span></span></span><a class="headerlink" href="#snappy.Triangulation.num_tetrahedra" title="Link to this definition"></a></dt>
838
+ <dd><p>Return the number of tetrahedra in the triangulation.</p>
839
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;m004&#39;</span><span class="p">)</span>
840
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">num_tetrahedra</span><span class="p">()</span>
841
+ <span class="go">2</span>
842
+ </pre></div>
843
+ </div>
844
+ </dd></dl>
845
+
846
+ <dl class="py method">
847
+ <dt class="sig sig-object py" id="snappy.Triangulation.orientation_cover">
848
+ <span class="sig-name descname"><span class="pre">orientation_cover</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.orientation_cover" title="Link to this definition"></a></dt>
849
+ <dd><p>For a non-orientable Triangulation, returns the 2-fold cover which
850
+ is orientable.</p>
851
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">X</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;x123&#39;</span><span class="p">)</span>
852
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">Y</span> <span class="o">=</span> <span class="n">X</span><span class="o">.</span><span class="n">orientation_cover</span><span class="p">()</span>
853
+ <span class="gp">&gt;&gt;&gt; </span><span class="p">(</span><span class="n">X</span><span class="o">.</span><span class="n">is_orientable</span><span class="p">(),</span> <span class="n">Y</span><span class="o">.</span><span class="n">is_orientable</span><span class="p">())</span>
854
+ <span class="go">(False, True)</span>
855
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">Y</span>
856
+ <span class="go">x123~(0,0)(0,0)</span>
857
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">Y</span><span class="o">.</span><span class="n">cover_info</span><span class="p">()[</span><span class="s1">&#39;type&#39;</span><span class="p">]</span>
858
+ <span class="go">&#39;cyclic&#39;</span>
859
+ </pre></div>
860
+ </div>
861
+ </dd></dl>
862
+
863
+ <dl class="py method">
864
+ <dt class="sig sig-object py" id="snappy.Triangulation.plink">
865
+ <span class="sig-name descname"><span class="pre">plink</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.plink" title="Link to this definition"></a></dt>
866
+ <dd><p>Brings up a link editor window if the manifold is stored
867
+ as a link complement in your current session.</p>
868
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;4_1&#39;</span><span class="p">)</span> <span class="c1"># stored as a triangulation with a link</span>
869
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">link</span><span class="p">()</span>
870
+ <span class="go">&lt;Link: 1 comp; 4 cross&gt;</span>
871
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;m004&#39;</span><span class="p">)</span> <span class="c1"># stored as a triangulation without a link</span>
872
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">link</span><span class="p">()</span>
873
+ <span class="gt">Traceback (most recent call last):</span>
874
+ <span class="c">...</span>
875
+ <span class="gr">ValueError</span>: <span class="n">No associated link known.</span>
876
+ </pre></div>
877
+ </div>
878
+ </dd></dl>
879
+
880
+ <dl class="py method">
881
+ <dt class="sig sig-object py" id="snappy.Triangulation.ptolemy_generalized_obstruction_classes">
882
+ <span class="sig-name descname"><span class="pre">ptolemy_generalized_obstruction_classes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">N</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.ptolemy_generalized_obstruction_classes" title="Link to this definition"></a></dt>
883
+ <dd><p>Returns the obstruction classes needed to compute
884
+ PGL(N,C)-representations for any N, i.e., it returns a list with
885
+ a representative cocycle for each element in
886
+ H^2(M, boundary M; Z/N) / (Z/N)^* where (Z/N)^* are the units in Z/N.
887
+ The first element in the list always corresponds to the trivial
888
+ obstruction class.
889
+ The generalized ptolemy obstruction classes are thus a generalization
890
+ of the ptolemy obstruction classes that allow to find all
891
+ boundary-unipotent
892
+ PGL(N,C)-representations including those that do not lift to
893
+ boundary-unipotent SL(N,C)-representations for N odd or
894
+ SL(N,C)/{+1,-1}-representations for N even.</p>
895
+ <p>For example, 4_1 has three obstruction classes up to equivalence:</p>
896
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;4_1&quot;</span><span class="p">)</span>
897
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">c</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">ptolemy_generalized_obstruction_classes</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span>
898
+ <span class="gp">&gt;&gt;&gt; </span><span class="nb">len</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
899
+ <span class="go">3</span>
900
+ </pre></div>
901
+ </div>
902
+ <p>For 4_1, we only get three obstruction classes even though we have
903
+ H^2(M, boundary M; Z/4) = Z/4 because the two obstruction classes
904
+ 1 in Z/4 and -1 in Z/4 are related by a unit and thus give
905
+ isomorphic Ptolemy varieties.</p>
906
+ <p>The primary use of an obstruction class sigma is to construct the
907
+ Ptolemy variety of sigma. This variety computes boundary-unipotent
908
+ PGL(N,C)-representations whose obstruction class to a
909
+ boundary-unipotent lift to SL(N,C) is sigma.</p>
910
+ <p>For example for 4_1, there are 2 obstruction classes for N = 3:</p>
911
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;4_1&quot;</span><span class="p">)</span>
912
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">c</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">ptolemy_generalized_obstruction_classes</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
913
+ <span class="gp">&gt;&gt;&gt; </span><span class="nb">len</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
914
+ <span class="go">2</span>
915
+ </pre></div>
916
+ </div>
917
+ <p>The Ptolemy variety parametrizing boundary-unipotent
918
+ SL(3,C)-representations of 4_1 is obtained by</p>
919
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">p</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="n">N</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span> <span class="n">obstruction_class</span> <span class="o">=</span> <span class="n">c</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
920
+ </pre></div>
921
+ </div>
922
+ <p>and the Ptolemy variety parametrizing boundary-unipotent
923
+ PSL(3,C)-representations of 4_1 that do not lift to
924
+ boundary-unipotent SL(3,C)-representations is obtained by</p>
925
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">p</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="n">N</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span> <span class="n">obstruction_class</span> <span class="o">=</span> <span class="n">c</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
926
+ </pre></div>
927
+ </div>
928
+ <p>The cocycle representing the non-trivial obstruction class looks as
929
+ follows:</p>
930
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">c</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
931
+ <span class="go">PtolemyGeneralizedObstructionClass([2, 0, 0, 1])</span>
932
+ </pre></div>
933
+ </div>
934
+ <p>This means that the cocycle takes the value -1 in Z/3 on the first face
935
+ class and 1 on the fourth face class but zero on every other of the
936
+ four face classes.</p>
937
+ </dd></dl>
938
+
939
+ <dl class="py method">
940
+ <dt class="sig sig-object py" id="snappy.Triangulation.ptolemy_obstruction_classes">
941
+ <span class="sig-name descname"><span class="pre">ptolemy_obstruction_classes</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.ptolemy_obstruction_classes" title="Link to this definition"></a></dt>
942
+ <dd><p>Returns the obstruction classes needed to compute
943
+ pSL(N,C) = SL(N,C)/{+1,-1} representations for even N, i.e., it
944
+ returns a list with a representative cocycle for each class in
945
+ H^2(M, boundary M; Z/2). The first element in the list is always
946
+ representing the trivial obstruction class.</p>
947
+ <p>For example, 4_1 has two obstruction classes:</p>
948
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;4_1&quot;</span><span class="p">)</span>
949
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">c</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">ptolemy_obstruction_classes</span><span class="p">()</span>
950
+ <span class="gp">&gt;&gt;&gt; </span><span class="nb">len</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
951
+ <span class="go">2</span>
952
+ </pre></div>
953
+ </div>
954
+ <p>The primary use of these obstruction classes is to construct
955
+ the Ptolemy variety as described in Definition 1.7 of
956
+ Stavros Garoufalidis, Dylan Thurston, Christian K. Zickert:
957
+ “The Complex Volume of SL(n,C)-Representations of 3-Manifolds”
958
+ (<a class="reference external" href="http://arxiv.org/abs/1111.2828">http://arxiv.org/abs/1111.2828</a>).</p>
959
+ <p>For example, to construct the Ptolemy variety for
960
+ PSL(2,C)-representations of 4_1 that do not lift to boundary-parabolic
961
+ SL(2,C)-representations, use:</p>
962
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">p</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="n">N</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span> <span class="n">obstruction_class</span> <span class="o">=</span> <span class="n">c</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
963
+ </pre></div>
964
+ </div>
965
+ <p>Or the following short-cut:</p>
966
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">p</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="n">obstruction_class</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>
967
+ </pre></div>
968
+ </div>
969
+ <p>Note that this obstruction class only makes sense for even N:</p>
970
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">p</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="n">obstruction_class</span> <span class="o">=</span> <span class="n">c</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
971
+ <span class="gt">Traceback (most recent call last):</span>
972
+ <span class="c">...</span>
973
+ <span class="gr">AssertionError</span>: <span class="n">PtolemyObstructionClass only makes sense for even N, try PtolemyGeneralizedObstructionClass</span>
974
+ </pre></div>
975
+ </div>
976
+ <p>To obtain PGL(N,C)-representations for N &gt; 2, use the generalized
977
+ obstruction class:</p>
978
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">c</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">ptolemy_generalized_obstruction_classes</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
979
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">p</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="n">obstruction_class</span> <span class="o">=</span> <span class="n">c</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
980
+ </pre></div>
981
+ </div>
982
+ <p>The original obstruction class encodes a representing cocycle in Z/2 as follows:</p>
983
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">c</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">ptolemy_obstruction_classes</span><span class="p">()</span>
984
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">c</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
985
+ <span class="go">PtolemyObstructionClass(s_0_0 + 1, s_1_0 - 1, s_2_0 - 1, s_3_0 + 1, s_0_0 - s_0_1, s_1_0 - s_3_1, s_2_0 - s_2_1, s_3_0 - s_1_1)</span>
986
+ </pre></div>
987
+ </div>
988
+ <p>This means that the cocycle to represent this obstruction class in Z/2
989
+ takes value 1 in Z/2 on face 0 of tetrahedra 0 (because s_0_0 = -1)
990
+ and value 0 in Z/2 on face 1 of tetrahedra 0 (because s_1_0 = +1).</p>
991
+ <p>Face 3 of tetrahedra 0 and face 1 of tetrahedra 1 are identified,
992
+ hence the cocycle takes the same value on those two faces (s_3_0 = s_1_1).</p>
993
+ </dd></dl>
994
+
995
+ <dl class="py method">
996
+ <dt class="sig sig-object py" id="snappy.Triangulation.ptolemy_variety">
997
+ <span class="sig-name descname"><span class="pre">ptolemy_variety</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">N</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">obstruction_class</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">simplify</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">eliminate_fixed_ptolemys</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.ptolemy_variety" title="Link to this definition"></a></dt>
998
+ <dd><p>Returns a Ptolemy variety as described in</p>
999
+ <ul class="simple">
1000
+ <li><p>Stavros Garoufalidis, Dyland Thurston, Christian K. Zickert:
1001
+ “The Complex Volume of SL(n,C)-Representations of 3-Manifolds”
1002
+ (<a class="reference external" href="http://arxiv.org/abs/1111.2828">http://arxiv.org/abs/1111.2828</a>)</p></li>
1003
+ <li><p>Stavros Garoufalidis, Matthias Goerner, Christian K. Zickert:
1004
+ “Gluing Equations for PGL(n,C)-Representations of 3-Manifolds ”
1005
+ (<a class="reference external" href="http://arxiv.org/abs/1207.6711">http://arxiv.org/abs/1207.6711</a>)</p></li>
1006
+ </ul>
1007
+ <p>The variety can be exported to magma or sage and solved there. The
1008
+ solutions can be processed to compute invariants. The method can also
1009
+ be used to automatically look up precomputed solutions from the
1010
+ database at <a class="reference external" href="http://ptolemy.unhyperbolic.org/data">http://ptolemy.unhyperbolic.org/data</a> .</p>
1011
+ <p>Example for m011 and PSL(2,C)-representations:</p>
1012
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;m011&quot;</span><span class="p">)</span>
1013
+ </pre></div>
1014
+ </div>
1015
+ <p>Obtain all Ptolemy varieties for PSL(2,C)-representations:</p>
1016
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">p</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="n">obstruction_class</span> <span class="o">=</span> <span class="s1">&#39;all&#39;</span><span class="p">)</span>
1017
+ </pre></div>
1018
+ </div>
1019
+ <p>There are two Ptolemy varieties for the two obstruction classes:</p>
1020
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nb">len</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
1021
+ <span class="go">2</span>
1022
+ </pre></div>
1023
+ </div>
1024
+ <p>Retrieve the solutions from the database</p>
1025
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">sols</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">retrieve_solutions</span><span class="p">()</span>
1026
+ </pre></div>
1027
+ </div>
1028
+ <p>Compute the solutions using magma (default in SnapPy)</p>
1029
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">sols</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">compute_solutions</span><span class="p">(</span><span class="n">engine</span> <span class="o">=</span> <span class="s1">&#39;magma&#39;</span><span class="p">)</span>
1030
+ </pre></div>
1031
+ </div>
1032
+ <p>Compute the solutions using singular (default in sage)</p>
1033
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">sols</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">compute_solutions</span><span class="p">(</span><span class="n">engine</span> <span class="o">=</span> <span class="s1">&#39;sage&#39;</span><span class="p">)</span>
1034
+ </pre></div>
1035
+ </div>
1036
+ <p>Note that magma is significantly faster.</p>
1037
+ <p>Compute all resulting complex volumes</p>
1038
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">cvols</span> <span class="o">=</span> <span class="n">sols</span><span class="o">.</span><span class="n">complex_volume_numerical</span><span class="p">()</span>
1039
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">cvols</span>
1040
+ <span class="go">[[[-4.29405713186238 E-16 + 0.725471193740844*I,</span>
1041
+ <span class="go"> -0.942707362776931 + 0.459731436553693*I,</span>
1042
+ <span class="go"> 0.942707362776931 + 0.459731436553693*I]],</span>
1043
+ <span class="go"> [[3.94159248086745 E-15 + 0.312682687518267*I,</span>
1044
+ <span class="go"> 4.64549527022581 E-15 + 0.680993020093457*I,</span>
1045
+ <span class="go"> -2.78183391239608 - 0.496837853805869*I,</span>
1046
+ <span class="go"> 2.78183391239608 - 0.496837853805869*I]]]</span>
1047
+ </pre></div>
1048
+ </div>
1049
+ <p>Show complex volumes as a non-nested list:</p>
1050
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">cvols</span><span class="o">.</span><span class="n">flatten</span><span class="p">(</span><span class="n">depth</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
1051
+ <span class="go">[-4.29405713186238 E-16 + 0.725471193740844*I,</span>
1052
+ <span class="go"> -0.942707362776931 + 0.459731436553693*I,</span>
1053
+ <span class="go"> 0.942707362776931 + 0.459731436553693*I,</span>
1054
+ <span class="go"> 3.94159248086745 E-15 + 0.312682687518267*I,</span>
1055
+ <span class="go"> 4.64549527022581 E-15 + 0.680993020093457*I,</span>
1056
+ <span class="go"> -2.78183391239608 - 0.496837853805869*I,</span>
1057
+ <span class="go"> 2.78183391239608 - 0.496837853805869*I]</span>
1058
+ </pre></div>
1059
+ </div>
1060
+ <p>For more examples, go to <a class="reference external" href="http://ptolemy.unhyperbolic.org/">http://ptolemy.unhyperbolic.org/</a></p>
1061
+ <p>=== Optional Arguments ===</p>
1062
+ <p>obstruction_class class from Definition 1.7 of (1).
1063
+ None for trivial class or a value returned from ptolemy_obstruction_classes.
1064
+ Short cuts: obstruction_class = ‘all’ returns a list of Ptolemy varieties
1065
+ for each obstruction. For easier iteration, can set obstruction_class to
1066
+ an integer.</p>
1067
+ <p>simplify boolean to indicate whether to simplify the equations which
1068
+ significantly reduces the number of variables.
1069
+ Simplifying means that several identified Ptolemy coordinates x = y = z = …
1070
+ are eliminated instead of adding relations x - y = 0, y - z = 0, …</p>
1071
+ <p>eliminate_fixed_ptolemys boolean to indicate whether to eliminate
1072
+ the Ptolemy coordinates that are set to 1 for fixing the decoration.
1073
+ Even though this simplifies the resulting representation, setting it to
1074
+ True can cause magma to run longer when finding a Groebner basis.</p>
1075
+ <p>=== Examples for 4_1 ===</p>
1076
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;4_1&quot;</span><span class="p">)</span>
1077
+ </pre></div>
1078
+ </div>
1079
+ <p>Get the varieties for all obstruction classes at once (use
1080
+ help(varieties[0]) for more information):</p>
1081
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">varieties</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="n">obstruction_class</span> <span class="o">=</span> <span class="s2">&quot;all&quot;</span><span class="p">)</span>
1082
+ </pre></div>
1083
+ </div>
1084
+ <p>Print the variety as an ideal (sage object) for the non-trivial class:</p>
1085
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">varieties</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">ideal</span>
1086
+ <span class="go">Ideal (-c_0011_0^2 + c_0011_0*c_0101_0 + c_0101_0^2, -c_0011_0^2 - c_0011_0*c_0101_0 + c_0101_0^2, c_0011_0 - 1) of Multivariate Polynomial Ring in c_0011_0, c_0101_0 over Rational Field</span>
1087
+ </pre></div>
1088
+ </div>
1089
+ <p>Print the equations of the variety for the non-trivial class:</p>
1090
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">eqn</span> <span class="ow">in</span> <span class="n">varieties</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">equations</span><span class="p">:</span>
1091
+ <span class="gp">... </span> <span class="nb">print</span><span class="p">(</span><span class="n">eqn</span><span class="p">)</span>
1092
+ <span class="go"> - c_0011_0 * c_0101_0 + c_0011_0^2 + c_0101_0^2</span>
1093
+ <span class="go"> c_0011_0 * c_0101_0 - c_0011_0^2 - c_0101_0^2</span>
1094
+ <span class="go"> - 1 + c_0011_0</span>
1095
+ </pre></div>
1096
+ </div>
1097
+ <p>Generate a magma file to compute Primary Decomposition for N = 3:</p>
1098
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">p</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
1099
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">s</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">to_magma</span><span class="p">()</span>
1100
+ <span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">s</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;ring and ideal&quot;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
1101
+ <span class="go">R&lt;c_0012_0, c_0012_1, c_0102_0, c_0111_0, c_0201_0, c_1011_0, c_1011_1, c_1101_0&gt; := PolynomialRing(RationalField(), 8, &quot;grevlex&quot;);</span>
1102
+ <span class="go">MyIdeal := ideal&lt;R |</span>
1103
+ <span class="go"> c_0012_0 * c_1101_0 + c_0102_0 * c_0111_0 - c_0102_0 * c_1011_0,</span>
1104
+ <span class="go"> ...</span>
1105
+ </pre></div>
1106
+ </div>
1107
+ <p>=== If you have a magma installation ===</p>
1108
+ <p>Call p.compute_solutions() to automatically call magma on the above output
1109
+ and produce exact solutions!!!</p>
1110
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">try</span><span class="p">:</span>
1111
+ <span class="gp">... </span> <span class="n">sols</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">compute_solutions</span><span class="p">()</span>
1112
+ <span class="gp">... </span><span class="k">except</span><span class="p">:</span>
1113
+ <span class="gp">... </span> <span class="c1"># magma failed, use precomputed_solutions</span>
1114
+ <span class="gp">... </span> <span class="n">sols</span> <span class="o">=</span> <span class="kc">None</span>
1115
+ </pre></div>
1116
+ </div>
1117
+ <p>Check solutions against manifold
1118
+ &gt;&gt;&gt; if sols:
1119
+ … dummy = sols.check_against_manifold()</p>
1120
+ <p>=== If you do not have a magma installation ===</p>
1121
+ <p>Load a precomputed example from magma which is provided with the package:</p>
1122
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">snappy.ptolemy.processMagmaFile</span> <span class="kn">import</span> <span class="n">_magma_output_for_4_1__sl3</span><span class="p">,</span> <span class="n">solutions_from_magma</span>
1123
+ <span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">_magma_output_for_4_1__sl3</span><span class="p">)</span>
1124
+
1125
+ <span class="go">==TRIANGULATION=BEGINS==</span>
1126
+ <span class="go">% Triangulation</span>
1127
+ <span class="go">4_1</span>
1128
+ <span class="go">...</span>
1129
+ </pre></div>
1130
+ </div>
1131
+ <p>Parse the file and produce solutions:</p>
1132
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">sols</span> <span class="o">=</span> <span class="n">solutions_from_magma</span><span class="p">(</span><span class="n">_magma_output_for_4_1__sl3</span><span class="p">)</span>
1133
+ </pre></div>
1134
+ </div>
1135
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">dummy</span> <span class="o">=</span> <span class="n">sols</span><span class="o">.</span><span class="n">check_against_manifold</span><span class="p">()</span>
1136
+ </pre></div>
1137
+ </div>
1138
+ <p>=== Continue here whether you have or do not have magma ===</p>
1139
+ <p>Pick the first solution of the three different solutions (up to Galois
1140
+ conjugates):</p>
1141
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nb">len</span><span class="p">(</span><span class="n">sols</span><span class="p">)</span>
1142
+ <span class="go">3</span>
1143
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">solution</span> <span class="o">=</span> <span class="n">sols</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
1144
+ </pre></div>
1145
+ </div>
1146
+ <p>Read the exact value for c_1020_0 (help(solution) for more information
1147
+ on how to compute cross ratios, volumes and other invariants):</p>
1148
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">solution</span><span class="p">[</span><span class="s1">&#39;c_1020_0&#39;</span><span class="p">]</span>
1149
+ <span class="go">Mod(-1/2*x - 3/2, x^2 + 3*x + 4)</span>
1150
+ </pre></div>
1151
+ </div>
1152
+ <p>Example of simplified vs non-simplified variety for N = 4:</p>
1153
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">simplified</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="n">obstruction_class</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>
1154
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">full</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="n">obstruction_class</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">simplify</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span>
1155
+ <span class="gp">&gt;&gt;&gt; </span><span class="nb">len</span><span class="p">(</span><span class="n">simplified</span><span class="o">.</span><span class="n">variables</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">full</span><span class="o">.</span><span class="n">variables</span><span class="p">)</span>
1156
+ <span class="go">(21, 63)</span>
1157
+ <span class="gp">&gt;&gt;&gt; </span><span class="nb">len</span><span class="p">(</span><span class="n">simplified</span><span class="o">.</span><span class="n">equations</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">full</span><span class="o">.</span><span class="n">equations</span><span class="p">)</span>
1158
+ <span class="go">(24, 72)</span>
1159
+ </pre></div>
1160
+ </div>
1161
+ </dd></dl>
1162
+
1163
+ <dl class="py method">
1164
+ <dt class="sig sig-object py" id="snappy.Triangulation.randomize">
1165
+ <span class="sig-name descname"><span class="pre">randomize</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">blowup_multiple</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">4</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">passes_at_fours</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">6</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.randomize" title="Link to this definition"></a></dt>
1166
+ <dd><p>Perform random Pachner moves on the underlying triangulation,
1167
+ including some initial 3 -&gt; 2 moves that increase the number of
1168
+ tetrahedra by blowup_multiple.</p>
1169
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;Braid:[1,2,-3,-3,1,2]&#39;</span><span class="p">)</span>
1170
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">randomize</span><span class="p">()</span>
1171
+ </pre></div>
1172
+ </div>
1173
+ </dd></dl>
1174
+
1175
+ <dl class="py method">
1176
+ <dt class="sig sig-object py" id="snappy.Triangulation.reverse_orientation">
1177
+ <span class="sig-name descname"><span class="pre">reverse_orientation</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span><a class="headerlink" href="#snappy.Triangulation.reverse_orientation" title="Link to this definition"></a></dt>
1178
+ <dd><p>Reverses the orientation of the Triangulation, presuming that
1179
+ it is orientable.</p>
1180
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;m015&#39;</span><span class="p">)</span>
1181
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">cs</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">chern_simons</span><span class="p">()</span>
1182
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">reverse_orientation</span><span class="p">()</span>
1183
+ <span class="gp">&gt;&gt;&gt; </span><span class="nb">abs</span><span class="p">(</span><span class="n">cs</span> <span class="o">+</span> <span class="n">M</span><span class="o">.</span><span class="n">chern_simons</span><span class="p">())</span>
1184
+ <span class="go">0.0</span>
1185
+ </pre></div>
1186
+ </div>
1187
+ </dd></dl>
1188
+
1189
+ <dl class="py method">
1190
+ <dt class="sig sig-object py" id="snappy.Triangulation.save">
1191
+ <span class="sig-name descname"><span class="pre">save</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">file_name</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.save" title="Link to this definition"></a></dt>
1192
+ <dd><p>Save the triangulation as a SnapPea triangulation file.</p>
1193
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;m004&#39;</span><span class="p">)</span>
1194
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="s1">&#39;fig-eight.tri&#39;</span><span class="p">)</span>
1195
+ </pre></div>
1196
+ </div>
1197
+ <p>To retrieve a SnapPea triangulation from the saved file
1198
+ you can do the following. The first command creates a cusped
1199
+ manifold M. The second one creates the filled manifold M1
1200
+ with Dehn coefficients (2,3).</p>
1201
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;fig-eight.tri&#39;</span><span class="p">)</span>
1202
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M1</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;fig-eight.tri(2,3)&#39;</span><span class="p">)</span>
1203
+ </pre></div>
1204
+ </div>
1205
+ </dd></dl>
1206
+
1207
+ <dl class="py method">
1208
+ <dt class="sig sig-object py" id="snappy.Triangulation.set_name">
1209
+ <span class="sig-name descname"><span class="pre">set_name</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">new_name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span><a class="headerlink" href="#snappy.Triangulation.set_name" title="Link to this definition"></a></dt>
1210
+ <dd><p>Give the triangulation a new name.</p>
1211
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;4_1&#39;</span><span class="p">)</span>
1212
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">set_name</span><span class="p">(</span><span class="s1">&#39;figure-eight-comp&#39;</span><span class="p">)</span>
1213
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span>
1214
+ <span class="go">figure-eight-comp(0,0)</span>
1215
+ </pre></div>
1216
+ </div>
1217
+ </dd></dl>
1218
+
1219
+ <dl class="py method">
1220
+ <dt class="sig sig-object py" id="snappy.Triangulation.set_peripheral_curves">
1221
+ <span class="sig-name descname"><span class="pre">set_peripheral_curves</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">peripheral_data</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">which_cusp</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">return_matrices</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.set_peripheral_curves" title="Link to this definition"></a></dt>
1222
+ <dd><p>Each cusp has a preferred marking. In the case of a torus
1223
+ cusp, this is pair of essential simple curves meeting in one
1224
+ point; equivalently, a basis of the first homology of the
1225
+ boundary torus. These curves are called the meridian and the
1226
+ longitude.</p>
1227
+ <p>This method changes these markings in various ways. In many
1228
+ cases, if the flag return_matrices is True then it returns
1229
+ a list of change-of-basis matrices is returned, one per
1230
+ cusp, which will restore the original markings if passed
1231
+ as peripheral_data.</p>
1232
+ </dd></dl>
1233
+
1234
+ <dl class="py method">
1235
+ <dt class="sig sig-object py" id="snappy.Triangulation.simplify">
1236
+ <span class="sig-name descname"><span class="pre">simplify</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">passes_at_fours</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">6</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.simplify" title="Link to this definition"></a></dt>
1237
+ <dd><p>Try to simplify the triangulation by doing Pachner moves.</p>
1238
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;12n123&#39;</span><span class="p">)</span>
1239
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">simplify</span><span class="p">()</span>
1240
+ </pre></div>
1241
+ </div>
1242
+ <p>It does four kinds of moves that reduce the number of
1243
+ tetrahedra:</p>
1244
+ <ul class="simple">
1245
+ <li><p>3 -&gt; 2 and 2 -&gt; 0 Pacher moves, which eliminate one or two
1246
+ tetrahedra respectively.</p></li>
1247
+ <li><p>On suitable valence-1 edges, does a 2 -&gt; 3 and then 2 -&gt; 0 move,
1248
+ which removes a tetrahedron and creates a new valence-1 edge.</p></li>
1249
+ <li><p>When a 2-simplex has two edges of valence-4 giving rise to the
1250
+ suspension of a pentagon, replace these 6 tetrahedra with a
1251
+ single edge of valence 5.</p></li>
1252
+ </ul>
1253
+ <p>It also does random 4 -&gt; 4 moves in hopes of setting up a
1254
+ simplfication. The argument passes_at_fours is the number of
1255
+ times it goes through the valence-4 edges without progress
1256
+ before giving up.</p>
1257
+ </dd></dl>
1258
+
1259
+ <dl class="py method">
1260
+ <dt class="sig sig-object py" id="snappy.Triangulation.slice_obstruction_HKL">
1261
+ <span class="sig-name descname"><span class="pre">slice_obstruction_HKL</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">primes_spec</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">check_in_S3</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.slice_obstruction_HKL" title="Link to this definition"></a></dt>
1262
+ <dd><p>For the exterior of a knot in S^3, searches for a topological
1263
+ slicing obstruction from:</p>
1264
+ <p>Herald, Kirk, Livingston, Math Zeit., 2010
1265
+ <a class="reference external" href="https://dx.doi.org/10.1007/s00209-009-0548-1">https://dx.doi.org/10.1007/s00209-009-0548-1</a>
1266
+ <a class="reference external" href="https://arxiv.org/abs/0804.1355">https://arxiv.org/abs/0804.1355</a></p>
1267
+ <p>The test looks at the cyclic branched covers of the knot of prime
1268
+ order p and the F_q homology thereof where q is an odd prime. The
1269
+ range of such (p, q) pairs searched is given by primes_spec as a
1270
+ list of (p_max, [q_min, q_max]). It returns the pair (p, q) of
1271
+ the first nonzero obstruction found (in which case K is not
1272
+ slice), and otherwise returns None:</p>
1273
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;K12n813&#39;</span><span class="p">)</span>
1274
+ <span class="n">sage</span><span class="p">:</span> <span class="n">spec</span> <span class="o">=</span> <span class="p">[(</span><span class="mi">10</span><span class="p">,</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">20</span><span class="p">]),</span> <span class="p">(</span><span class="mi">20</span><span class="p">,</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">10</span><span class="p">])]</span>
1275
+ <span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">.</span><span class="n">slice_obstruction_HKL</span><span class="p">(</span><span class="n">spec</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
1276
+ <span class="n">Looking</span> <span class="n">at</span> <span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span> <span class="o">...</span>
1277
+ <span class="n">Looking</span> <span class="n">at</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">7</span><span class="p">)</span> <span class="o">...</span>
1278
+ <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">7</span><span class="p">)</span>
1279
+ </pre></div>
1280
+ </div>
1281
+ <p>You can also specify the p to examine by a range [p_min, p_max] or
1282
+ the q by just q_max:</p>
1283
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">spec</span> <span class="o">=</span> <span class="p">[([</span><span class="mi">3</span><span class="p">,</span> <span class="mi">10</span><span class="p">],</span> <span class="mi">10</span><span class="p">)]</span>
1284
+ <span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">.</span><span class="n">slice_obstruction_HKL</span><span class="p">(</span><span class="n">spec</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
1285
+ <span class="n">Looking</span> <span class="n">at</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">7</span><span class="p">)</span> <span class="o">...</span>
1286
+ <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">7</span><span class="p">)</span>
1287
+ </pre></div>
1288
+ </div>
1289
+ <p>If primes_spec is just a pair (p, q) then only that obstruction is
1290
+ checked:</p>
1291
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">.</span><span class="n">slice_obstruction_HKL</span><span class="p">((</span><span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">))</span>
1292
+ <span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">.</span><span class="n">slice_obstruction_HKL</span><span class="p">((</span><span class="mi">3</span><span class="p">,</span> <span class="mi">7</span><span class="p">))</span>
1293
+ <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">7</span><span class="p">)</span>
1294
+ </pre></div>
1295
+ </div>
1296
+ <p>Technical note: As implemented, can only get an obstruction when
1297
+ the decomposition of H_1(cover; F_q) into irreducible Z/pZ-modules
1298
+ has no repeat factors. The method of [HKL] can be used more
1299
+ broadly, but other cases requires computing many more twisted
1300
+ Alexander polynomials.</p>
1301
+ </dd></dl>
1302
+
1303
+ <dl class="py method">
1304
+ <dt class="sig sig-object py" id="snappy.Triangulation.symplectic_basis">
1305
+ <span class="sig-name descname"><span class="pre">symplectic_basis</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">verify</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.symplectic_basis" title="Link to this definition"></a></dt>
1306
+ <dd><p>Extend the Neumann-Zagier matrix to one which is symplectic
1307
+ (up to factors of 2) using oscillating curves, see
1308
+ <a class="reference external" href="https://arxiv.org/abs/2208.06969">Mathews and Purcell ‘22</a>.
1309
+ Only accepts triangulations with 1 cusp.</p>
1310
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;4_1&quot;</span><span class="p">)</span>
1311
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">symplectic_basis</span><span class="p">()</span>
1312
+ <span class="go">[-1 0 -1 -1]</span>
1313
+ <span class="go">[ 2 0 -2 0]</span>
1314
+ <span class="go">[-2 -1 -2 -1]</span>
1315
+ <span class="go">[ 0 -1 -2 -1]</span>
1316
+ </pre></div>
1317
+ </div>
1318
+ <dl class="field-list simple">
1319
+ <dt class="field-odd">Parameters<span class="colon">:</span></dt>
1320
+ <dd class="field-odd"><p><strong>verify</strong> Explicitly test if the resulting matrix is symplectic.</p>
1321
+ </dd>
1322
+ </dl>
1323
+ </dd></dl>
1324
+
1325
+ <dl class="py method">
1326
+ <dt class="sig sig-object py" id="snappy.Triangulation.triangulation_isosig">
1327
+ <span class="sig-name descname"><span class="pre">triangulation_isosig</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">decorated</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ignore_cusp_ordering</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ignore_curves</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ignore_curve_orientations</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ignore_filling_orientations</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ignore_orientation</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">str</span></span></span><a class="headerlink" href="#snappy.Triangulation.triangulation_isosig" title="Link to this definition"></a></dt>
1328
+ <dd><p>Returns the “(decorated) isomorphism signature”, a compact text
1329
+ representation of the triangulation:</p>
1330
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">T</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;m004&#39;</span><span class="p">)</span>
1331
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">T</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">()</span>
1332
+ <span class="go">&#39;cPcbbbiht_BaCB&#39;</span>
1333
+ </pre></div>
1334
+ </div>
1335
+ <p>This string can be used later to recreate an isomorphic triangulation:</p>
1336
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">U</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;cPcbbbiht_BaCB&#39;</span><span class="p">)</span>
1337
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">T</span> <span class="o">==</span> <span class="n">U</span>
1338
+ <span class="go">True</span>
1339
+ </pre></div>
1340
+ </div>
1341
+ <p>The isomorphism signature is also used to compute the
1342
+ <a class="reference internal" href="manifold.html#snappy.Manifold.isometry_signature" title="snappy.Manifold.isometry_signature"><code class="xref py py-meth docutils literal notranslate"><span class="pre">isometry_signature</span></code></a>.
1343
+ It comes in two flavors controlled by the <code class="xref py py-attr docutils literal notranslate"><span class="pre">decorated</span></code> flag.</p>
1344
+ <p><strong>Undecorated isomorphism signature</strong></p>
1345
+ <p>The undecorated isomorphism signature is a complete invariant of the
1346
+ (oriented) triangulation up to combinatorial isomorphism:</p>
1347
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">T</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;m015&#39;</span><span class="p">)</span>
1348
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">T</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span><span class="n">decorated</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
1349
+ <span class="go">&#39;dLQbcccdero&#39;</span>
1350
+ </pre></div>
1351
+ </div>
1352
+ <p>It was introduced in
1353
+ <a class="reference external" href="http://arxiv.org/abs/1110.6080">Burton ‘11</a>. It canonizes and
1354
+ generalizes the ealier dehydration string by
1355
+ <a class="reference external" href="https://doi.org/10.1090/S0025-5718-99-01036-4">Callahan, Hildebrand and Weeks ‘99</a>.
1356
+ The undecorated isomorphism signature can also be given to
1357
+ <a class="reference external" href="https://regina-normal.github.io/">Regina</a>’s
1358
+ <code class="docutils literal notranslate"><span class="pre">Triangulation3.fromIsoSig</span></code>.</p>
1359
+ <p>By default, the orientation (if orientable) is ignored. More
1360
+ precisely, it computes the string for both orientations (if orientable)
1361
+ and uses the lexicographically smaller string:</p>
1362
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">T</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;m015&#39;</span><span class="p">)</span>
1363
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">T</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span><span class="n">decorated</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
1364
+ <span class="go">&#39;dLQbcccdero&#39;</span>
1365
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">T</span><span class="o">.</span><span class="n">reverse_orientation</span><span class="p">()</span>
1366
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">T</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span><span class="n">decorated</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
1367
+ <span class="go">&#39;dLQbcccdero&#39;</span>
1368
+ </pre></div>
1369
+ </div>
1370
+ <p>When specifying <code class="xref py py-attr docutils literal notranslate"><span class="pre">ignore_orientation</span> <span class="pre">=</span> <span class="pre">False</span></code>, the result
1371
+ encodes the orientation (if orientable). Now the result is
1372
+ different if we change the orientation of a chiral triangulation:</p>
1373
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">T</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;m015&#39;</span><span class="p">)</span>
1374
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">T</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span><span class="n">decorated</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">ignore_orientation</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
1375
+ <span class="go">&#39;dLQbcccdero&#39;</span>
1376
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">T</span><span class="o">.</span><span class="n">reverse_orientation</span><span class="p">()</span>
1377
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">T</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span><span class="n">decorated</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">ignore_orientation</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
1378
+ <span class="go">&#39;dLQbccceekg&#39;</span>
1379
+ </pre></div>
1380
+ </div>
1381
+ <p><strong>Decorated isomorphism signature (default)</strong></p>
1382
+ <p>SnapPy can decorate the isomorphism signature to include the following
1383
+ peripheral information in a canonical way (that is invariant under
1384
+ the action by combinatorial isomorphisms of the triangulation):</p>
1385
+ <ol class="arabic simple">
1386
+ <li><p>Indexing of the cusps (that is, ideal vertices).</p>
1387
+ <ul class="simple">
1388
+ <li><p>Included by default.
1389
+ Can be suppressed with <code class="xref py py-attr docutils literal notranslate"><span class="pre">ignore_cusp_ordering</span> <span class="pre">=</span> <span class="pre">True</span></code>.</p></li>
1390
+ </ul>
1391
+ </li>
1392
+ <li><p>Peripheral curves (aka meridian and longitude, up to homotopy).</p>
1393
+ <ul class="simple">
1394
+ <li><p>Included by default.
1395
+ Can be suppressed with <code class="xref py py-attr docutils literal notranslate"><span class="pre">ignore_curves</span> <span class="pre">=</span> <span class="pre">True</span></code>.</p></li>
1396
+ <li><p>By default, the decoration encodes the oriented peripheral curves.
1397
+ By specifying <code class="xref py py-attr docutils literal notranslate"><span class="pre">ignore_curve_orientations</span> <span class="pre">=</span> <span class="pre">True</span></code>, it encodes
1398
+ the unoriented peripheral curves instead.</p></li>
1399
+ </ul>
1400
+ </li>
1401
+ <li><p>Dehn-fillings (if present).</p>
1402
+ <ul class="simple">
1403
+ <li><p>By default, the decoration encodes the oriented Dehn-fillings.
1404
+ That is, we also encodes the orientation of the peripheral curve
1405
+ that is used for the Dehn-filling (this explanation only
1406
+ works if the coefficients are integral).
1407
+ By specifying <code class="xref py py-attr docutils literal notranslate"><span class="pre">ignore_filling_orientations</span> <span class="pre">=</span> <span class="pre">True</span></code>, the
1408
+ decoration encodes the unoriented Dehn-fillings.
1409
+ That is, it normalizes the Dehn-filling coefficients by picking
1410
+ a canonical pair among <span class="math notranslate nohighlight">\((m,l)\)</span> and <span class="math notranslate nohighlight">\((-m,-l)\)</span>.</p></li>
1411
+ </ul>
1412
+ </li>
1413
+ </ol>
1414
+ <p>Details of the encoding are explained in the
1415
+ <a class="reference external" href="https://github.com/3-manifolds/SnapPy/blob/master/python/decorated_isosig.py">SnapPy source code</a>.</p>
1416
+ <p><strong>Example</strong></p>
1417
+ <p>Let us consider the links <span class="math notranslate nohighlight">\(9^2_{34}\)</span> and <code class="docutils literal notranslate"><span class="pre">L9a21</span></code>. Note that we use
1418
+ <a class="reference internal" href="manifold.html#snappy.Manifold.canonical_retriangulation" title="snappy.Manifold.canonical_retriangulation"><code class="xref py py-meth docutils literal notranslate"><span class="pre">canonical_retriangulation</span></code></a>
1419
+ to make the following examples say something intrinsic about the
1420
+ hyperbolic manifold:</p>
1421
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">snappy</span> <span class="kn">import</span> <span class="n">Manifold</span>
1422
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;9^2_34&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">canonical_retriangulation</span><span class="p">()</span>
1423
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;L9a21&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">canonical_retriangulation</span><span class="p">()</span>
1424
+ </pre></div>
1425
+ </div>
1426
+ <p>The decorated isosig recovers the entire peripheral information faithfully
1427
+ (including orientation, see below):</p>
1428
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">()</span>
1429
+ <span class="go">&#39;oLLvzQLLQQccdhifihnlmkmlnnpvuvbvouggbggoo_baBabbbBbC&#39;</span>
1430
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">K</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;oLLvzQLLQQccdhifihnlmkmlnnpvuvbvouggbggoo_baBabbbBbC&#39;</span><span class="p">)</span>
1431
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">isomorphisms_to</span><span class="p">(</span><span class="n">K</span><span class="p">)</span>
1432
+ <span class="go">[0 -&gt; 0 1 -&gt; 1</span>
1433
+ <span class="go">[1 0] [1 0]</span>
1434
+ <span class="go">[0 1] [0 1]</span>
1435
+ <span class="go">Extends to link]</span>
1436
+ </pre></div>
1437
+ </div>
1438
+ <p>The two links have isometric complements:</p>
1439
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span><span class="n">decorated</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
1440
+ <span class="go">&#39;oLLvzQLLQQccdhifihnlmkmlnnpvuvbvouggbggoo&#39;</span>
1441
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span><span class="n">decorated</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
1442
+ <span class="go">&#39;oLLvzQLLQQccdhifihnlmkmlnnpvuvbvouggbggoo&#39;</span>
1443
+ </pre></div>
1444
+ </div>
1445
+ <p>However, the complements have different handedness:</p>
1446
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span><span class="n">decorated</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span><span class="n">ignore_orientation</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
1447
+ <span class="go">&#39;oLLzLPwzQQccdeghjiiklmnmnnuvuvvavovvffffo&#39;</span>
1448
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span><span class="n">decorated</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span><span class="n">ignore_orientation</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
1449
+ <span class="go">&#39;oLLvzQLLQQccdhifihnlmkmlnnpvuvbvouggbggoo&#39;</span>
1450
+ </pre></div>
1451
+ </div>
1452
+ <p>Also, the cusps/components of the link are indexed differently:</p>
1453
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span><span class="n">ignore_curves</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
1454
+ <span class="go">&#39;oLLvzQLLQQccdhifihnlmkmlnnpvuvbvouggbggoo_ba&#39;</span>
1455
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span><span class="n">ignore_curves</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
1456
+ <span class="go">&#39;oLLvzQLLQQccdhifihnlmkmlnnpvuvbvouggbggoo_ab&#39;</span>
1457
+ </pre></div>
1458
+ </div>
1459
+ <p>Ignoring the indexing, we also see that the oriented merdians and
1460
+ longitudes do not match:</p>
1461
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span><span class="n">ignore_cusp_ordering</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
1462
+ <span class="go">&#39;oLLvzQLLQQccdhifihnlmkmlnnpvuvbvouggbggoo_bBbCBabb&#39;</span>
1463
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span><span class="n">ignore_cusp_ordering</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
1464
+ <span class="go">&#39;oLLvzQLLQQccdhifihnlmkmlnnpvuvbvouggbggoo_BbbCbabb&#39;</span>
1465
+ </pre></div>
1466
+ </div>
1467
+ <p>However, they are the same links (ignoring indexing and orientation):</p>
1468
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span><span class="n">ignore_cusp_ordering</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">ignore_curve_orientations</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
1469
+ <span class="go">&#39;oLLvzQLLQQccdhifihnlmkmlnnpvuvbvouggbggoo_bBBcbabb&#39;</span>
1470
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span><span class="n">ignore_cusp_ordering</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">ignore_curve_orientations</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
1471
+ <span class="go">&#39;oLLvzQLLQQccdhifihnlmkmlnnpvuvbvouggbggoo_bBBcbabb&#39;</span>
1472
+ </pre></div>
1473
+ </div>
1474
+ <p>Let us create two surgery presentations from the links (note that we
1475
+ fill after
1476
+ <a class="reference internal" href="manifold.html#snappy.Manifold.canonical_retriangulation" title="snappy.Manifold.canonical_retriangulation"><code class="xref py py-meth docutils literal notranslate"><span class="pre">canonical_retriangulation</span></code></a>
1477
+ since it rejects Dehn-fillings):</p>
1478
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">dehn_fill</span><span class="p">((</span><span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">),</span><span class="mi">0</span><span class="p">)</span>
1479
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">dehn_fill</span><span class="p">((</span><span class="mi">4</span><span class="p">,</span><span class="o">-</span><span class="mi">5</span><span class="p">),</span><span class="mi">1</span><span class="p">)</span>
1480
+ </pre></div>
1481
+ </div>
1482
+ <p>They are equivalent surgery presentations (of the same manifold):</p>
1483
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span>
1484
+ <span class="gp">... </span> <span class="n">ignore_cusp_ordering</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
1485
+ <span class="gp">... </span> <span class="n">ignore_curves</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
1486
+ <span class="gp">... </span> <span class="n">ignore_filling_orientations</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
1487
+ <span class="go">&#39;oLLvzQLLQQccdhifihnlmkmlnnpvuvbvouggbggoo(0,0)(1,5)&#39;</span>
1488
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">triangulation_isosig</span><span class="p">(</span>
1489
+ <span class="gp">... </span> <span class="n">ignore_cusp_ordering</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
1490
+ <span class="gp">... </span> <span class="n">ignore_curves</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
1491
+ <span class="gp">... </span> <span class="n">ignore_filling_orientations</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
1492
+ <span class="go">&#39;oLLvzQLLQQccdhifihnlmkmlnnpvuvbvouggbggoo(0,0)(1,5)&#39;</span>
1493
+ </pre></div>
1494
+ </div>
1495
+ <p><strong>Orientation</strong></p>
1496
+ <p>Note that <code class="xref py py-attr docutils literal notranslate"><span class="pre">ignore_orientation=True</span></code> only applies to the undecorated
1497
+ part of the isomorphism signature. The decoration can still capture the
1498
+ the orientation.
1499
+ More, precisely, the result of <a class="reference internal" href="#snappy.Triangulation.triangulation_isosig" title="snappy.Triangulation.triangulation_isosig"><code class="xref py py-meth docutils literal notranslate"><span class="pre">triangulation_isosig()</span></code></a> depends on
1500
+ the orientation (if the triangulation is orientable and chiral) if any
1501
+ of the following is true:</p>
1502
+ <ol class="arabic simple">
1503
+ <li><p><code class="xref py py-attr docutils literal notranslate"><span class="pre">ignore_orientation</span> <span class="pre">=</span> <span class="pre">False</span></code>.</p></li>
1504
+ <li><p><code class="xref py py-attr docutils literal notranslate"><span class="pre">decorated</span> <span class="pre">=</span> <span class="pre">True</span></code> and
1505
+ <code class="xref py py-attr docutils literal notranslate"><span class="pre">ignore_curves</span> <span class="pre">=</span> <span class="pre">False</span></code> and
1506
+ <code class="xref py py-attr docutils literal notranslate"><span class="pre">ignore_filling_orientations</span> <span class="pre">=</span> <span class="pre">False</span></code>.</p></li>
1507
+ </ol>
1508
+ <p>In these cases, re-constructing a triangulation from the isomorphism
1509
+ signature yields a triangulation with the same handedness.</p>
1510
+ <dl class="field-list simple">
1511
+ <dt class="field-odd">Parameters<span class="colon">:</span></dt>
1512
+ <dd class="field-odd"><ul class="simple">
1513
+ <li><p><strong>decorated</strong> – Include peripheral information such as indexing of the cusps,
1514
+ (oriented or unoriented) peripheral curves and
1515
+ (oriented or unoriented) Dehn-fillings.</p></li>
1516
+ <li><p><strong>ignore_cusp_ordering</strong> – Do not encode the indexing of the cusps.
1517
+ Only relevant if <code class="xref py py-attr docutils literal notranslate"><span class="pre">decorated</span> <span class="pre">=</span> <span class="pre">True</span></code>.</p></li>
1518
+ <li><p><strong>ignore_curves</strong> – Do not encode the peripheral curves.
1519
+ Only relevant if <code class="xref py py-attr docutils literal notranslate"><span class="pre">decorated</span> <span class="pre">=</span> <span class="pre">True</span></code>.
1520
+ This is new in SnapPy version 3.2.
1521
+ If <code class="xref py py-attr docutils literal notranslate"><span class="pre">ignore_curves</span> <span class="pre">=</span> <span class="pre">True</span></code>, the result of this method cannot
1522
+ be given to prior versions.</p></li>
1523
+ <li><p><strong>ignore_curve_orientations</strong> – Do not encode the orientations of the peripheral curves.
1524
+ Only relevant if <code class="xref py py-attr docutils literal notranslate"><span class="pre">decorated</span> <span class="pre">=</span> <span class="pre">True</span></code> and
1525
+ <code class="xref py py-attr docutils literal notranslate"><span class="pre">ignore_curves</span> <span class="pre">=</span> <span class="pre">False</span></code>.</p></li>
1526
+ <li><p><strong>ignore_filling_orientations</strong> – Do not encode the orientations of the Dehn-fillings.
1527
+ Only relevant if <code class="xref py py-attr docutils literal notranslate"><span class="pre">decorated</span> <span class="pre">=</span> <span class="pre">True</span></code>.</p></li>
1528
+ <li><p><strong>ignore_orientation</strong> – Do not encode the orientation of the triangulation in the
1529
+ undecorated part of the triangulation isosig.
1530
+ See above section about orientation.</p></li>
1531
+ </ul>
1532
+ </dd>
1533
+ </dl>
1534
+ </dd></dl>
1535
+
1536
+ <dl class="py method">
1537
+ <dt class="sig sig-object py" id="snappy.Triangulation.with_hyperbolic_structure">
1538
+ <span class="sig-name descname"><span class="pre">with_hyperbolic_structure</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Triangulation.with_hyperbolic_structure" title="Link to this definition"></a></dt>
1539
+ <dd><p>Add a (possibly degenerate) hyperbolic structure, turning the
1540
+ <a class="reference internal" href="#snappy.Triangulation" title="snappy.Triangulation"><code class="xref py py-class docutils literal notranslate"><span class="pre">Triangulation</span></code></a> into a <a class="reference internal" href="manifold.html#snappy.Manifold" title="snappy.Manifold"><code class="xref py py-class docutils literal notranslate"><span class="pre">Manifold</span></code></a>.</p>
1541
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;m004&#39;</span><span class="p">)</span>
1542
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">with_hyperbolic_structure</span><span class="p">()</span>
1543
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">volume</span><span class="p">()</span>
1544
+ <span class="go">2.02988321</span>
1545
+ </pre></div>
1546
+ </div>
1547
+ </dd></dl>
1548
+
1549
+ </dd></dl>
1550
+
1551
+ </section>
1552
+
1553
+
1554
+ </div>
1555
+ </div>
1556
+ <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
1557
+ <a href="manifoldhp.html" class="btn btn-neutral float-left" title="ManifoldHP: High-precision variant" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
1558
+ <a href="additional_classes.html" class="btn btn-neutral float-right" title="Additional Classes" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
1559
+ </div>
1560
+
1561
+ <hr/>
1562
+
1563
+ <div role="contentinfo">
1564
+ <p>&#169; Copyright 2009-2025, by Marc Culler, Nathan Dunfield, Matthias Goerner, Jeffrey Weeks and others.</p>
1565
+ </div>
1566
+
1567
+ Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
1568
+ <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
1569
+ provided by <a href="https://readthedocs.org">Read the Docs</a>.
1570
+
1571
+
1572
+ </footer>
1573
+ </div>
1574
+ </div>
1575
+ </section>
1576
+ </div>
1577
+ <script>
1578
+ jQuery(function () {
1579
+ SphinxRtdTheme.Navigation.enable(true);
1580
+ });
1581
+ </script>
1582
+
1583
+ </body>
1475
1584
  </html>