snappy 3.1.1__cp310-cp310-macosx_11_0_arm64.whl → 3.2__cp310-cp310-macosx_11_0_arm64.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (464) hide show
  1. snappy/CyOpenGL.cpython-310-darwin.so +0 -0
  2. snappy/SnapPy.cpython-310-darwin.so +0 -0
  3. snappy/SnapPyHP.cpython-310-darwin.so +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/development.rst.txt +66 -46
  25. snappy/doc/_sources/index.rst.txt +72 -5
  26. snappy/doc/_sources/installing.rst.txt +145 -162
  27. snappy/doc/_sources/news.rst.txt +73 -1
  28. snappy/doc/_sources/ptolemy_examples1.rst.txt +8 -7
  29. snappy/doc/_sources/ptolemy_examples3.rst.txt +2 -2
  30. snappy/doc/_sources/triangulation.rst.txt +2 -2
  31. snappy/doc/_sources/verify.rst.txt +89 -29
  32. snappy/doc/_sources/verify_internals.rst.txt +5 -16
  33. snappy/doc/_static/basic.css +23 -1
  34. snappy/doc/_static/css/badge_only.css +1 -1
  35. snappy/doc/_static/css/theme.css +1 -1
  36. snappy/doc/_static/doctools.js +1 -1
  37. snappy/doc/_static/documentation_options.js +2 -3
  38. snappy/doc/_static/fonts/Lato/lato-bold.eot +0 -0
  39. snappy/doc/_static/fonts/Lato/lato-bold.ttf +0 -0
  40. snappy/doc/_static/fonts/Lato/lato-bold.woff +0 -0
  41. snappy/doc/_static/fonts/Lato/lato-bold.woff2 +0 -0
  42. snappy/doc/_static/fonts/Lato/lato-bolditalic.eot +0 -0
  43. snappy/doc/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
  44. snappy/doc/_static/fonts/Lato/lato-bolditalic.woff +0 -0
  45. snappy/doc/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
  46. snappy/doc/_static/fonts/Lato/lato-italic.eot +0 -0
  47. snappy/doc/_static/fonts/Lato/lato-italic.ttf +0 -0
  48. snappy/doc/_static/fonts/Lato/lato-italic.woff +0 -0
  49. snappy/doc/_static/fonts/Lato/lato-italic.woff2 +0 -0
  50. snappy/doc/_static/fonts/Lato/lato-regular.eot +0 -0
  51. snappy/doc/_static/fonts/Lato/lato-regular.ttf +0 -0
  52. snappy/doc/_static/fonts/Lato/lato-regular.woff +0 -0
  53. snappy/doc/_static/fonts/Lato/lato-regular.woff2 +0 -0
  54. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
  55. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
  56. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
  57. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
  58. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
  59. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
  60. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
  61. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
  62. snappy/doc/_static/js/versions.js +228 -0
  63. snappy/doc/_static/language_data.js +2 -2
  64. snappy/doc/_static/pygments.css +1 -0
  65. snappy/doc/_static/searchtools.js +125 -71
  66. snappy/doc/_static/sphinx_highlight.js +13 -3
  67. snappy/doc/additional_classes.html +291 -122
  68. snappy/doc/bugs.html +17 -20
  69. snappy/doc/censuses.html +34 -53
  70. snappy/doc/credits.html +18 -21
  71. snappy/doc/development.html +88 -68
  72. snappy/doc/genindex.html +66 -145
  73. snappy/doc/index.html +86 -31
  74. snappy/doc/installing.html +164 -182
  75. snappy/doc/manifold.html +1168 -556
  76. snappy/doc/manifoldhp.html +18 -21
  77. snappy/doc/news.html +91 -33
  78. snappy/doc/objects.inv +0 -0
  79. snappy/doc/other.html +20 -22
  80. snappy/doc/platonic_census.html +31 -34
  81. snappy/doc/plink.html +19 -22
  82. snappy/doc/ptolemy.html +20 -22
  83. snappy/doc/ptolemy_classes.html +102 -105
  84. snappy/doc/ptolemy_examples1.html +34 -36
  85. snappy/doc/ptolemy_examples2.html +28 -31
  86. snappy/doc/ptolemy_examples3.html +26 -29
  87. snappy/doc/ptolemy_examples4.html +20 -23
  88. snappy/doc/ptolemy_prelim.html +25 -28
  89. snappy/doc/py-modindex.html +16 -19
  90. snappy/doc/screenshots.html +22 -24
  91. snappy/doc/search.html +15 -18
  92. snappy/doc/searchindex.js +1 -1
  93. snappy/doc/snap.html +18 -21
  94. snappy/doc/snappy.html +18 -20
  95. snappy/doc/spherogram.html +84 -87
  96. snappy/doc/todo.html +17 -20
  97. snappy/doc/triangulation.html +324 -215
  98. snappy/doc/tutorial.html +17 -20
  99. snappy/doc/verify.html +100 -46
  100. snappy/doc/verify_internals.html +106 -563
  101. snappy/drilling/__init__.py +153 -235
  102. snappy/drilling/barycentric.py +103 -0
  103. snappy/drilling/constants.py +0 -2
  104. snappy/drilling/crush.py +56 -130
  105. snappy/drilling/cusps.py +12 -6
  106. snappy/drilling/debug.py +2 -1
  107. snappy/drilling/exceptions.py +7 -40
  108. snappy/drilling/moves.py +302 -243
  109. snappy/drilling/perturb.py +63 -37
  110. snappy/drilling/shorten.py +36 -0
  111. snappy/drilling/subdivide.py +0 -5
  112. snappy/drilling/test.py +23 -0
  113. snappy/drilling/test_cases.py +126 -0
  114. snappy/drilling/tracing.py +9 -37
  115. snappy/exceptions.py +18 -5
  116. snappy/exterior_to_link/barycentric_geometry.py +2 -4
  117. snappy/exterior_to_link/main.py +8 -7
  118. snappy/exterior_to_link/mcomplex_with_link.py +2 -2
  119. snappy/exterior_to_link/rational_linear_algebra.py +1 -1
  120. snappy/exterior_to_link/rational_linear_algebra_wrapped.py +1 -1
  121. snappy/exterior_to_link/test.py +21 -33
  122. snappy/geometric_structure/__init__.py +212 -0
  123. snappy/geometric_structure/cusp_neighborhood/__init__.py +3 -0
  124. snappy/geometric_structure/cusp_neighborhood/complex_cusp_cross_section.py +697 -0
  125. snappy/geometric_structure/cusp_neighborhood/cusp_cross_section_base.py +484 -0
  126. snappy/geometric_structure/cusp_neighborhood/exceptions.py +42 -0
  127. snappy/geometric_structure/cusp_neighborhood/real_cusp_cross_section.py +298 -0
  128. snappy/geometric_structure/cusp_neighborhood/tiles_for_cusp_neighborhood.py +159 -0
  129. snappy/geometric_structure/cusp_neighborhood/vertices.py +32 -0
  130. snappy/geometric_structure/geodesic/__init__.py +0 -0
  131. snappy/geometric_structure/geodesic/add_core_curves.py +152 -0
  132. snappy/geometric_structure/geodesic/avoid_core_curves.py +369 -0
  133. snappy/geometric_structure/geodesic/canonical_keys.py +52 -0
  134. snappy/geometric_structure/geodesic/check_away_from_core_curve.py +60 -0
  135. snappy/geometric_structure/geodesic/constants.py +6 -0
  136. snappy/geometric_structure/geodesic/exceptions.py +22 -0
  137. snappy/{drilling → geometric_structure/geodesic}/fixed_points.py +34 -9
  138. snappy/{drilling/geodesic_info.py → geometric_structure/geodesic/geodesic_start_point_info.py} +139 -180
  139. snappy/geometric_structure/geodesic/graph_trace_helper.py +67 -0
  140. snappy/geometric_structure/geodesic/line.py +30 -0
  141. snappy/geometric_structure/geodesic/multiplicity.py +127 -0
  142. snappy/geometric_structure/geodesic/tiles_for_geodesic.py +101 -0
  143. snappy/geometric_structure/test.py +22 -0
  144. snappy/gui.py +23 -13
  145. snappy/horoviewer.py +7 -7
  146. snappy/hyperboloid/__init__.py +96 -31
  147. snappy/hyperboloid/distances.py +245 -0
  148. snappy/hyperboloid/horoball.py +19 -0
  149. snappy/hyperboloid/line.py +35 -0
  150. snappy/hyperboloid/point.py +9 -0
  151. snappy/hyperboloid/triangle.py +29 -0
  152. snappy/isometry_signature.py +382 -0
  153. snappy/len_spec/__init__.py +596 -0
  154. snappy/len_spec/geodesic_info.py +110 -0
  155. snappy/len_spec/geodesic_key_info_dict.py +117 -0
  156. snappy/len_spec/geodesic_piece.py +143 -0
  157. snappy/len_spec/geometric_structure.py +182 -0
  158. snappy/len_spec/geometry.py +80 -0
  159. snappy/len_spec/length_spectrum_geodesic_info.py +170 -0
  160. snappy/len_spec/spine.py +206 -0
  161. snappy/len_spec/test.py +24 -0
  162. snappy/len_spec/test_cases.py +69 -0
  163. snappy/len_spec/tile.py +275 -0
  164. snappy/len_spec/word.py +86 -0
  165. snappy/math_basics.py +39 -13
  166. snappy/matrix.py +52 -9
  167. snappy/number.py +12 -6
  168. snappy/numeric_output_checker.py +2 -3
  169. snappy/pari.py +8 -4
  170. snappy/phone_home.py +2 -1
  171. snappy/polyviewer.py +8 -8
  172. snappy/ptolemy/__init__.py +1 -1
  173. snappy/ptolemy/component.py +2 -2
  174. snappy/ptolemy/coordinates.py +25 -25
  175. snappy/ptolemy/findLoops.py +9 -9
  176. snappy/ptolemy/manifoldMethods.py +27 -29
  177. snappy/ptolemy/polynomial.py +50 -57
  178. snappy/ptolemy/processFileBase.py +60 -0
  179. snappy/ptolemy/ptolemyVariety.py +109 -41
  180. snappy/ptolemy/reginaWrapper.py +4 -4
  181. snappy/ptolemy/rur.py +1 -1
  182. snappy/ptolemy/solutionsToPrimeIdealGroebnerBasis.py +9 -9
  183. snappy/ptolemy/test.py +99 -54
  184. snappy/ptolemy/utilities.py +1 -1
  185. snappy/raytracing/__init__.py +64 -0
  186. snappy/raytracing/additional_horospheres.py +64 -0
  187. snappy/raytracing/additional_len_spec_choices.py +63 -0
  188. snappy/raytracing/cohomology_fractal.py +0 -3
  189. snappy/raytracing/eyeball.py +123 -0
  190. snappy/raytracing/finite_raytracing_data.py +17 -17
  191. snappy/raytracing/finite_viewer.py +15 -15
  192. snappy/raytracing/geodesic_tube_info.py +93 -63
  193. snappy/raytracing/geodesics.py +94 -64
  194. snappy/raytracing/geodesics_window.py +56 -34
  195. snappy/raytracing/gui_utilities.py +21 -6
  196. snappy/raytracing/hyperboloid_navigation.py +29 -4
  197. snappy/raytracing/hyperboloid_utilities.py +73 -73
  198. snappy/raytracing/ideal_raytracing_data.py +121 -91
  199. snappy/raytracing/inside_viewer.py +199 -66
  200. snappy/raytracing/pack.py +22 -0
  201. snappy/raytracing/raytracing_data.py +37 -25
  202. snappy/raytracing/raytracing_view.py +70 -65
  203. snappy/raytracing/shaders/Eye.png +0 -0
  204. snappy/raytracing/shaders/NonGeometric.png +0 -0
  205. snappy/raytracing/shaders/__init__.py +39 -3
  206. snappy/raytracing/shaders/fragment.glsl +451 -133
  207. snappy/raytracing/test.py +29 -0
  208. snappy/raytracing/tooltip.py +146 -0
  209. snappy/raytracing/upper_halfspace_utilities.py +42 -9
  210. snappy/sage_helper.py +67 -134
  211. snappy/settings.py +90 -77
  212. snappy/shell.py +2 -0
  213. snappy/snap/character_varieties.py +2 -2
  214. snappy/snap/find_field.py +4 -3
  215. snappy/snap/fundamental_polyhedron.py +2 -2
  216. snappy/snap/kernel_structures.py +5 -1
  217. snappy/snap/nsagetools.py +9 -8
  218. snappy/snap/peripheral/dual_cellulation.py +4 -3
  219. snappy/snap/peripheral/peripheral.py +2 -2
  220. snappy/snap/peripheral/surface.py +5 -5
  221. snappy/snap/peripheral/test.py +1 -1
  222. snappy/snap/polished_reps.py +8 -8
  223. snappy/snap/slice_obs_HKL.py +16 -14
  224. snappy/snap/t3mlite/arrow.py +3 -3
  225. snappy/snap/t3mlite/edge.py +3 -3
  226. snappy/snap/t3mlite/homology.py +2 -2
  227. snappy/snap/t3mlite/mcomplex.py +3 -3
  228. snappy/snap/t3mlite/simplex.py +12 -0
  229. snappy/snap/t3mlite/spun.py +18 -17
  230. snappy/snap/t3mlite/test_vs_regina.py +4 -4
  231. snappy/snap/test.py +37 -53
  232. snappy/snap/utilities.py +4 -5
  233. snappy/test.py +121 -138
  234. snappy/test_cases.py +263 -0
  235. snappy/testing.py +131 -0
  236. snappy/tiling/__init__.py +2 -0
  237. snappy/tiling/canonical_key_dict.py +59 -0
  238. snappy/tiling/dict_based_set.py +79 -0
  239. snappy/tiling/floor.py +49 -0
  240. snappy/tiling/hyperboloid_dict.py +54 -0
  241. snappy/tiling/iter_utils.py +78 -0
  242. snappy/tiling/lifted_tetrahedron.py +22 -0
  243. snappy/tiling/lifted_tetrahedron_set.py +54 -0
  244. snappy/tiling/real_hash_dict.py +164 -0
  245. snappy/tiling/test.py +23 -0
  246. snappy/tiling/tile.py +215 -0
  247. snappy/tiling/triangle.py +33 -0
  248. snappy/tkterminal.py +113 -84
  249. snappy/twister/main.py +1 -7
  250. snappy/twister/twister_core.cpython-310-darwin.so +0 -0
  251. snappy/upper_halfspace/__init__.py +78 -17
  252. snappy/verify/__init__.py +3 -7
  253. snappy/verify/{verifyCanonical.py → canonical.py} +78 -70
  254. snappy/verify/complex_volume/adjust_torsion.py +1 -2
  255. snappy/verify/complex_volume/closed.py +13 -13
  256. snappy/verify/complex_volume/cusped.py +6 -6
  257. snappy/verify/complex_volume/extended_bloch.py +5 -8
  258. snappy/verify/{cuspTranslations.py → cusp_translations.py} +1 -1
  259. snappy/verify/edge_equations.py +80 -0
  260. snappy/verify/exceptions.py +0 -55
  261. snappy/verify/{verifyHyperbolicity.py → hyperbolicity.py} +3 -3
  262. snappy/verify/interval_newton_shapes_engine.py +7 -5
  263. snappy/verify/interval_tree.py +5 -5
  264. snappy/verify/krawczyk_shapes_engine.py +17 -18
  265. snappy/verify/maximal_cusp_area_matrix/__init__.py +7 -74
  266. snappy/verify/maximal_cusp_area_matrix/cusp_tiling_engine.py +3 -4
  267. snappy/verify/maximal_cusp_area_matrix/cusp_translate_engine.py +1 -1
  268. snappy/verify/{realAlgebra.py → real_algebra.py} +1 -1
  269. snappy/verify/shapes.py +5 -3
  270. snappy/verify/short_slopes.py +39 -41
  271. snappy/verify/{squareExtensions.py → square_extensions.py} +14 -11
  272. snappy/verify/test.py +57 -60
  273. snappy/verify/upper_halfspace/extended_matrix.py +1 -1
  274. snappy/verify/upper_halfspace/finite_point.py +3 -4
  275. snappy/verify/upper_halfspace/ideal_point.py +9 -9
  276. snappy/verify/volume.py +2 -2
  277. snappy/version.py +2 -2
  278. {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/METADATA +26 -11
  279. snappy-3.2.dist-info/RECORD +503 -0
  280. {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/WHEEL +1 -1
  281. {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/top_level.txt +6 -1
  282. snappy/__pycache__/__init__.cpython-310.pyc +0 -0
  283. snappy/__pycache__/browser.cpython-310.pyc +0 -0
  284. snappy/__pycache__/cache.cpython-310.pyc +0 -0
  285. snappy/__pycache__/database.cpython-310.pyc +0 -0
  286. snappy/__pycache__/db_utilities.cpython-310.pyc +0 -0
  287. snappy/__pycache__/decorated_isosig.cpython-310.pyc +0 -0
  288. snappy/__pycache__/exceptions.cpython-310.pyc +0 -0
  289. snappy/__pycache__/export_stl.cpython-310.pyc +0 -0
  290. snappy/__pycache__/filedialog.cpython-310.pyc +0 -0
  291. snappy/__pycache__/gui.cpython-310.pyc +0 -0
  292. snappy/__pycache__/horoviewer.cpython-310.pyc +0 -0
  293. snappy/__pycache__/infowindow.cpython-310.pyc +0 -0
  294. snappy/__pycache__/math_basics.cpython-310.pyc +0 -0
  295. snappy/__pycache__/matrix.cpython-310.pyc +0 -0
  296. snappy/__pycache__/number.cpython-310.pyc +0 -0
  297. snappy/__pycache__/numeric_output_checker.cpython-310.pyc +0 -0
  298. snappy/__pycache__/pari.cpython-310.pyc +0 -0
  299. snappy/__pycache__/polyviewer.cpython-310.pyc +0 -0
  300. snappy/__pycache__/sage_helper.cpython-310.pyc +0 -0
  301. snappy/__pycache__/version.cpython-310.pyc +0 -0
  302. snappy/doc/_sources/verify_canon.rst.txt +0 -90
  303. snappy/doc/_static/js/html5shiv-printshiv.min.js +0 -4
  304. snappy/doc/_static/js/html5shiv.min.js +0 -4
  305. snappy/doc/verify_canon.html +0 -304
  306. snappy/drilling/__pycache__/__init__.cpython-310.pyc +0 -0
  307. snappy/drilling/__pycache__/constants.cpython-310.pyc +0 -0
  308. snappy/drilling/__pycache__/crush.cpython-310.pyc +0 -0
  309. snappy/drilling/__pycache__/cusps.cpython-310.pyc +0 -0
  310. snappy/drilling/__pycache__/debug.cpython-310.pyc +0 -0
  311. snappy/drilling/__pycache__/epsilons.cpython-310.pyc +0 -0
  312. snappy/drilling/__pycache__/exceptions.cpython-310.pyc +0 -0
  313. snappy/drilling/__pycache__/fixed_points.cpython-310.pyc +0 -0
  314. snappy/drilling/__pycache__/geodesic_info.cpython-310.pyc +0 -0
  315. snappy/drilling/__pycache__/geodesic_tube.cpython-310.pyc +0 -0
  316. snappy/drilling/__pycache__/geometric_structure.cpython-310.pyc +0 -0
  317. snappy/drilling/__pycache__/line.cpython-310.pyc +0 -0
  318. snappy/drilling/__pycache__/moves.cpython-310.pyc +0 -0
  319. snappy/drilling/__pycache__/peripheral_curves.cpython-310.pyc +0 -0
  320. snappy/drilling/__pycache__/perturb.cpython-310.pyc +0 -0
  321. snappy/drilling/__pycache__/quotient_space.cpython-310.pyc +0 -0
  322. snappy/drilling/__pycache__/spatial_dict.cpython-310.pyc +0 -0
  323. snappy/drilling/__pycache__/subdivide.cpython-310.pyc +0 -0
  324. snappy/drilling/__pycache__/tracing.cpython-310.pyc +0 -0
  325. snappy/drilling/geodesic_tube.py +0 -441
  326. snappy/drilling/geometric_structure.py +0 -366
  327. snappy/drilling/line.py +0 -122
  328. snappy/drilling/quotient_space.py +0 -94
  329. snappy/drilling/spatial_dict.py +0 -128
  330. snappy/exterior_to_link/__pycache__/__init__.cpython-310.pyc +0 -0
  331. snappy/exterior_to_link/__pycache__/barycentric_geometry.cpython-310.pyc +0 -0
  332. snappy/exterior_to_link/__pycache__/exceptions.cpython-310.pyc +0 -0
  333. snappy/exterior_to_link/__pycache__/hyp_utils.cpython-310.pyc +0 -0
  334. snappy/exterior_to_link/__pycache__/link_projection.cpython-310.pyc +0 -0
  335. snappy/exterior_to_link/__pycache__/main.cpython-310.pyc +0 -0
  336. snappy/exterior_to_link/__pycache__/mcomplex_with_expansion.cpython-310.pyc +0 -0
  337. snappy/exterior_to_link/__pycache__/mcomplex_with_link.cpython-310.pyc +0 -0
  338. snappy/exterior_to_link/__pycache__/mcomplex_with_memory.cpython-310.pyc +0 -0
  339. snappy/exterior_to_link/__pycache__/pl_utils.cpython-310.pyc +0 -0
  340. snappy/exterior_to_link/__pycache__/put_in_S3.cpython-310.pyc +0 -0
  341. snappy/exterior_to_link/__pycache__/rational_linear_algebra.cpython-310.pyc +0 -0
  342. snappy/exterior_to_link/__pycache__/simplify_to_base_tri.cpython-310.pyc +0 -0
  343. snappy/exterior_to_link/__pycache__/stored_moves.cpython-310.pyc +0 -0
  344. snappy/hyperboloid/__pycache__/__init__.cpython-310.pyc +0 -0
  345. snappy/manifolds/__pycache__/__init__.cpython-310.pyc +0 -0
  346. snappy/ptolemy/__pycache__/__init__.cpython-310.pyc +0 -0
  347. snappy/ptolemy/__pycache__/component.cpython-310.pyc +0 -0
  348. snappy/ptolemy/__pycache__/coordinates.cpython-310.pyc +0 -0
  349. snappy/ptolemy/__pycache__/fieldExtensions.cpython-310.pyc +0 -0
  350. snappy/ptolemy/__pycache__/findLoops.cpython-310.pyc +0 -0
  351. snappy/ptolemy/__pycache__/homology.cpython-310.pyc +0 -0
  352. snappy/ptolemy/__pycache__/manifoldMethods.cpython-310.pyc +0 -0
  353. snappy/ptolemy/__pycache__/matrix.cpython-310.pyc +0 -0
  354. snappy/ptolemy/__pycache__/numericalSolutionsToGroebnerBasis.cpython-310.pyc +0 -0
  355. snappy/ptolemy/__pycache__/polynomial.cpython-310.pyc +0 -0
  356. snappy/ptolemy/__pycache__/processComponents.cpython-310.pyc +0 -0
  357. snappy/ptolemy/__pycache__/processFileBase.cpython-310.pyc +0 -0
  358. snappy/ptolemy/__pycache__/processFileDispatch.cpython-310.pyc +0 -0
  359. snappy/ptolemy/__pycache__/processMagmaFile.cpython-310.pyc +0 -0
  360. snappy/ptolemy/__pycache__/processRurFile.cpython-310.pyc +0 -0
  361. snappy/ptolemy/__pycache__/ptolemyGeneralizedObstructionClass.cpython-310.pyc +0 -0
  362. snappy/ptolemy/__pycache__/ptolemyObstructionClass.cpython-310.pyc +0 -0
  363. snappy/ptolemy/__pycache__/ptolemyVariety.cpython-310.pyc +0 -0
  364. snappy/ptolemy/__pycache__/ptolemyVarietyPrimeIdealGroebnerBasis.cpython-310.pyc +0 -0
  365. snappy/ptolemy/__pycache__/rur.cpython-310.pyc +0 -0
  366. snappy/ptolemy/__pycache__/solutionsToPrimeIdealGroebnerBasis.cpython-310.pyc +0 -0
  367. snappy/ptolemy/__pycache__/utilities.cpython-310.pyc +0 -0
  368. snappy/raytracing/__pycache__/__init__.cpython-310.pyc +0 -0
  369. snappy/raytracing/__pycache__/finite_raytracing_data.cpython-310.pyc +0 -0
  370. snappy/raytracing/__pycache__/gui_utilities.cpython-310.pyc +0 -0
  371. snappy/raytracing/__pycache__/hyperboloid_navigation.cpython-310.pyc +0 -0
  372. snappy/raytracing/__pycache__/hyperboloid_utilities.cpython-310.pyc +0 -0
  373. snappy/raytracing/__pycache__/ideal_raytracing_data.cpython-310.pyc +0 -0
  374. snappy/raytracing/__pycache__/inside_viewer.cpython-310.pyc +0 -0
  375. snappy/raytracing/__pycache__/raytracing_data.cpython-310.pyc +0 -0
  376. snappy/raytracing/__pycache__/raytracing_view.cpython-310.pyc +0 -0
  377. snappy/raytracing/__pycache__/upper_halfspace_utilities.cpython-310.pyc +0 -0
  378. snappy/raytracing/__pycache__/view_scale_controller.cpython-310.pyc +0 -0
  379. snappy/raytracing/zoom_slider/__pycache__/__init__.cpython-310.pyc +0 -0
  380. snappy/snap/__pycache__/__init__.cpython-310.pyc +0 -0
  381. snappy/snap/__pycache__/character_varieties.cpython-310.pyc +0 -0
  382. snappy/snap/__pycache__/fundamental_polyhedron.cpython-310.pyc +0 -0
  383. snappy/snap/__pycache__/interval_reps.cpython-310.pyc +0 -0
  384. snappy/snap/__pycache__/kernel_structures.cpython-310.pyc +0 -0
  385. snappy/snap/__pycache__/mcomplex_base.cpython-310.pyc +0 -0
  386. snappy/snap/__pycache__/nsagetools.cpython-310.pyc +0 -0
  387. snappy/snap/__pycache__/polished_reps.cpython-310.pyc +0 -0
  388. snappy/snap/__pycache__/shapes.cpython-310.pyc +0 -0
  389. snappy/snap/__pycache__/slice_obs_HKL.cpython-310.pyc +0 -0
  390. snappy/snap/__pycache__/utilities.cpython-310.pyc +0 -0
  391. snappy/snap/peripheral/__pycache__/__init__.cpython-310.pyc +0 -0
  392. snappy/snap/peripheral/__pycache__/dual_cellulation.cpython-310.pyc +0 -0
  393. snappy/snap/peripheral/__pycache__/link.cpython-310.pyc +0 -0
  394. snappy/snap/peripheral/__pycache__/peripheral.cpython-310.pyc +0 -0
  395. snappy/snap/peripheral/__pycache__/surface.cpython-310.pyc +0 -0
  396. snappy/snap/t3mlite/__pycache__/__init__.cpython-310.pyc +0 -0
  397. snappy/snap/t3mlite/__pycache__/arrow.cpython-310.pyc +0 -0
  398. snappy/snap/t3mlite/__pycache__/corner.cpython-310.pyc +0 -0
  399. snappy/snap/t3mlite/__pycache__/edge.cpython-310.pyc +0 -0
  400. snappy/snap/t3mlite/__pycache__/face.cpython-310.pyc +0 -0
  401. snappy/snap/t3mlite/__pycache__/files.cpython-310.pyc +0 -0
  402. snappy/snap/t3mlite/__pycache__/homology.cpython-310.pyc +0 -0
  403. snappy/snap/t3mlite/__pycache__/linalg.cpython-310.pyc +0 -0
  404. snappy/snap/t3mlite/__pycache__/mcomplex.cpython-310.pyc +0 -0
  405. snappy/snap/t3mlite/__pycache__/perm4.cpython-310.pyc +0 -0
  406. snappy/snap/t3mlite/__pycache__/simplex.cpython-310.pyc +0 -0
  407. snappy/snap/t3mlite/__pycache__/spun.cpython-310.pyc +0 -0
  408. snappy/snap/t3mlite/__pycache__/surface.cpython-310.pyc +0 -0
  409. snappy/snap/t3mlite/__pycache__/tetrahedron.cpython-310.pyc +0 -0
  410. snappy/snap/t3mlite/__pycache__/vertex.cpython-310.pyc +0 -0
  411. snappy/togl/__init__.py +0 -3
  412. snappy/togl/darwin-tk8.6/Togl2.1/LICENSE +0 -28
  413. snappy/togl/darwin-tk8.6/Togl2.1/libTogl2.1.dylib +0 -0
  414. snappy/togl/darwin-tk8.6/Togl2.1/pkgIndex.tcl +0 -5
  415. snappy/togl/darwin-tk8.7/Togl2.1/LICENSE +0 -28
  416. snappy/togl/darwin-tk8.7/Togl2.1/libTogl2.1.dylib +0 -0
  417. snappy/togl/darwin-tk8.7/Togl2.1/pkgIndex.tcl +0 -5
  418. snappy/togl/linux2-x86_64-tk8.6/Togl2.1/LICENSE +0 -28
  419. snappy/togl/linux2-x86_64-tk8.6/Togl2.1/libTogl2.1.so +0 -0
  420. snappy/togl/linux2-x86_64-tk8.6/Togl2.1/pkgIndex.tcl +0 -5
  421. snappy/togl/win32VC-tk8.6/Togl2.1/LICENSE +0 -28
  422. snappy/togl/win32VC-tk8.6/Togl2.1/Togl21.dll +0 -0
  423. snappy/togl/win32VC-tk8.6/Togl2.1/Togl21.lib +0 -0
  424. snappy/togl/win32VC-tk8.6/Togl2.1/pkgIndex.tcl +0 -6
  425. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/LICENSE +0 -28
  426. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/Togl21.dll +0 -0
  427. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/Togl21.lib +0 -0
  428. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/pkgIndex.tcl +0 -6
  429. snappy/twister/__pycache__/__init__.cpython-310.pyc +0 -0
  430. snappy/twister/__pycache__/main.cpython-310.pyc +0 -0
  431. snappy/upper_halfspace/__pycache__/__init__.cpython-310.pyc +0 -0
  432. snappy/upper_halfspace/__pycache__/ideal_point.cpython-310.pyc +0 -0
  433. snappy/verify/__pycache__/__init__.cpython-310.pyc +0 -0
  434. snappy/verify/__pycache__/cuspCrossSection.cpython-310.pyc +0 -0
  435. snappy/verify/__pycache__/cuspTranslations.cpython-310.pyc +0 -0
  436. snappy/verify/__pycache__/cusp_areas.cpython-310.pyc +0 -0
  437. snappy/verify/__pycache__/cusp_shapes.cpython-310.pyc +0 -0
  438. snappy/verify/__pycache__/exceptions.cpython-310.pyc +0 -0
  439. snappy/verify/__pycache__/interval_newton_shapes_engine.cpython-310.pyc +0 -0
  440. snappy/verify/__pycache__/interval_tree.cpython-310.pyc +0 -0
  441. snappy/verify/__pycache__/krawczyk_shapes_engine.cpython-310.pyc +0 -0
  442. snappy/verify/__pycache__/realAlgebra.cpython-310.pyc +0 -0
  443. snappy/verify/__pycache__/shapes.cpython-310.pyc +0 -0
  444. snappy/verify/__pycache__/short_slopes.cpython-310.pyc +0 -0
  445. snappy/verify/__pycache__/squareExtensions.cpython-310.pyc +0 -0
  446. snappy/verify/__pycache__/verifyCanonical.cpython-310.pyc +0 -0
  447. snappy/verify/__pycache__/verifyHyperbolicity.cpython-310.pyc +0 -0
  448. snappy/verify/__pycache__/volume.cpython-310.pyc +0 -0
  449. snappy/verify/complex_volume/__pycache__/__init__.cpython-310.pyc +0 -0
  450. snappy/verify/complex_volume/__pycache__/adjust_torsion.cpython-310.pyc +0 -0
  451. snappy/verify/complex_volume/__pycache__/closed.cpython-310.pyc +0 -0
  452. snappy/verify/complex_volume/__pycache__/compute_ptolemys.cpython-310.pyc +0 -0
  453. snappy/verify/complex_volume/__pycache__/cusped.cpython-310.pyc +0 -0
  454. snappy/verify/complex_volume/__pycache__/extended_bloch.cpython-310.pyc +0 -0
  455. snappy/verify/cuspCrossSection.py +0 -1422
  456. snappy/verify/maximal_cusp_area_matrix/__pycache__/__init__.cpython-310.pyc +0 -0
  457. snappy/verify/maximal_cusp_area_matrix/__pycache__/cusp_tiling_engine.cpython-310.pyc +0 -0
  458. snappy/verify/maximal_cusp_area_matrix/__pycache__/cusp_translate_engine.cpython-310.pyc +0 -0
  459. snappy/verify/upper_halfspace/__pycache__/__init__.cpython-310.pyc +0 -0
  460. snappy/verify/upper_halfspace/__pycache__/extended_matrix.cpython-310.pyc +0 -0
  461. snappy/verify/upper_halfspace/__pycache__/finite_point.cpython-310.pyc +0 -0
  462. snappy/verify/upper_halfspace/__pycache__/ideal_point.cpython-310.pyc +0 -0
  463. snappy-3.1.1.dist-info/RECORD +0 -585
  464. {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/entry_points.txt +0 -0
snappy/doc/manifold.html CHANGED
@@ -1,23 +1,24 @@
1
+
2
+
1
3
  <!DOCTYPE html>
2
- <html class="writer-html5" lang="en" >
4
+ <html class="writer-html5" lang="en" data-content_root="./">
3
5
  <head>
4
- <meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
6
+ <meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
5
7
 
6
8
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
- <title>Manifold: the main class &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]-->
9
+ <title>Manifold: the main class &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
+
15
14
 
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>
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>
21
22
  <script src="_static/js/theme.js"></script>
22
23
  <link rel="index" title="Index" href="genindex.html" />
23
24
  <link rel="search" title="Search" href="search.html" />
@@ -37,9 +38,6 @@
37
38
  SnapPy
38
39
  <img src="_static/SnapPy-horizontal-128.png" class="logo" alt="Logo"/>
39
40
  </a>
40
- <div class="version">
41
- 3.1.1
42
- </div>
43
41
  <div role="search">
44
42
  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
45
43
  <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
@@ -92,7 +90,6 @@
92
90
  <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.hyperbolic_adjoint_torsion"><code class="docutils literal notranslate"><span class="pre">Manifold.hyperbolic_adjoint_torsion()</span></code></a></li>
93
91
  <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.hyperbolic_torsion"><code class="docutils literal notranslate"><span class="pre">Manifold.hyperbolic_torsion()</span></code></a></li>
94
92
  <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.identify"><code class="docutils literal notranslate"><span class="pre">Manifold.identify()</span></code></a></li>
95
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.init_hyperbolic_structure"><code class="docutils literal notranslate"><span class="pre">Manifold.init_hyperbolic_structure()</span></code></a></li>
96
93
  <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.inside_view"><code class="docutils literal notranslate"><span class="pre">Manifold.inside_view()</span></code></a></li>
97
94
  <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.invariant_trace_field_gens"><code class="docutils literal notranslate"><span class="pre">Manifold.invariant_trace_field_gens()</span></code></a></li>
98
95
  <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.is_isometric_to"><code class="docutils literal notranslate"><span class="pre">Manifold.is_isometric_to()</span></code></a></li>
@@ -101,6 +98,8 @@
101
98
  <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.isometry_signature"><code class="docutils literal notranslate"><span class="pre">Manifold.isometry_signature()</span></code></a></li>
102
99
  <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.isomorphisms_to"><code class="docutils literal notranslate"><span class="pre">Manifold.isomorphisms_to()</span></code></a></li>
103
100
  <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.length_spectrum"><code class="docutils literal notranslate"><span class="pre">Manifold.length_spectrum()</span></code></a></li>
101
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.length_spectrum_alt"><code class="docutils literal notranslate"><span class="pre">Manifold.length_spectrum_alt()</span></code></a></li>
102
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.length_spectrum_alt_gen"><code class="docutils literal notranslate"><span class="pre">Manifold.length_spectrum_alt_gen()</span></code></a></li>
104
103
  <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.link"><code class="docutils literal notranslate"><span class="pre">Manifold.link()</span></code></a></li>
105
104
  <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.name"><code class="docutils literal notranslate"><span class="pre">Manifold.name()</span></code></a></li>
106
105
  <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.normal_boundary_slopes"><code class="docutils literal notranslate"><span class="pre">Manifold.normal_boundary_slopes()</span></code></a></li>
@@ -108,7 +107,6 @@
108
107
  <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.num_cusps"><code class="docutils literal notranslate"><span class="pre">Manifold.num_cusps()</span></code></a></li>
109
108
  <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.num_tetrahedra"><code class="docutils literal notranslate"><span class="pre">Manifold.num_tetrahedra()</span></code></a></li>
110
109
  <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.orientation_cover"><code class="docutils literal notranslate"><span class="pre">Manifold.orientation_cover()</span></code></a></li>
111
- <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.pickle"><code class="docutils literal notranslate"><span class="pre">Manifold.pickle()</span></code></a></li>
112
110
  <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.plink"><code class="docutils literal notranslate"><span class="pre">Manifold.plink()</span></code></a></li>
113
111
  <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.polished_holonomy"><code class="docutils literal notranslate"><span class="pre">Manifold.polished_holonomy()</span></code></a></li>
114
112
  <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.ptolemy_generalized_obstruction_classes"><code class="docutils literal notranslate"><span class="pre">Manifold.ptolemy_generalized_obstruction_classes()</span></code></a></li>
@@ -129,6 +127,7 @@
129
127
  <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.splitting_surfaces"><code class="docutils literal notranslate"><span class="pre">Manifold.splitting_surfaces()</span></code></a></li>
130
128
  <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.symmetric_triangulation"><code class="docutils literal notranslate"><span class="pre">Manifold.symmetric_triangulation()</span></code></a></li>
131
129
  <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.symmetry_group"><code class="docutils literal notranslate"><span class="pre">Manifold.symmetry_group()</span></code></a></li>
130
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.symplectic_basis"><code class="docutils literal notranslate"><span class="pre">Manifold.symplectic_basis()</span></code></a></li>
132
131
  <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.tetrahedra_field_gens"><code class="docutils literal notranslate"><span class="pre">Manifold.tetrahedra_field_gens()</span></code></a></li>
133
132
  <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.tetrahedra_shapes"><code class="docutils literal notranslate"><span class="pre">Manifold.tetrahedra_shapes()</span></code></a></li>
134
133
  <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.trace_field_gens"><code class="docutils literal notranslate"><span class="pre">Manifold.trace_field_gens()</span></code></a></li>
@@ -185,15 +184,14 @@
185
184
  <div itemprop="articleBody">
186
185
 
187
186
  <section id="manifold-the-main-class">
188
- <h1>Manifold: the main class<a class="headerlink" href="#manifold-the-main-class" title="Permalink to this heading"></a></h1>
187
+ <h1>Manifold: the main class<a class="headerlink" href="#manifold-the-main-class" title="Link to this heading"></a></h1>
189
188
  <dl class="py class">
190
189
  <dt class="sig sig-object py" id="snappy.Manifold">
191
- <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">Manifold</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">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.Manifold" title="Permalink to this definition"></a></dt>
192
- <dd><blockquote>
193
- <div><p>A Manifold is a Triangulation together with a geometric structure.
190
+ <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">Manifold</span></span><a class="headerlink" href="#snappy.Manifold" title="Link to this definition"></a></dt>
191
+ <dd><p>A Manifold is a <a class="reference internal" href="triangulation.html#snappy.Triangulation" title="snappy.Triangulation"><code class="xref py py-class docutils literal notranslate"><span class="pre">Triangulation</span></code></a> together with a geometric structure.
194
192
  That is, a Manifold is an ideal triangulation of the interior of a
195
- compact 3-manifold with torus boundary components, where each
196
- tetrahedron has been assigned the geometry of an ideal tetrahedron
193
+ compact 3-manifold with torus and Klein-bottle boundary components, where
194
+ each tetrahedron has been assigned the geometry of an ideal tetrahedron
197
195
  in hyperbolic 3-space. A Dehn-filling can be specified for each
198
196
  boundary component, allowing the description of closed 3-manifolds,
199
197
  some orbifolds and cone 3-manifolds. Here’s a quick example:</p>
@@ -231,15 +229,15 @@ specify a link complement.</p></li>
231
229
  information on Dehn fillings added.</p>
232
230
  <ul>
233
231
  <li><p>SnapPea cusped census manifolds: e.g. ‘m123’, ‘s123’, ‘v123’.</p></li>
234
- <li><dl class="simple">
235
- <dt>Link complements:</dt><dd><ul class="simple">
232
+ <li><p>Link complements:</p>
233
+ <blockquote>
234
+ <div><ul class="simple">
236
235
  <li><p>Rolfsen’s table: e.g. ‘4_1’, ‘04_1’, ‘5^2_6’, ‘6_4^7’, ‘L20935’, ‘l104001’.</p></li>
237
236
  <li><p>Hoste-Thistlethwaite Knotscape table: e.g. ‘11a17’ or ‘12n345’</p></li>
238
237
  <li><p>Callahan-Dean-Weeks-Champanerkar-Kofman-Patterson knots: e.g. ‘K6_21’.</p></li>
239
238
  <li><p>Dowker-Thistlethwaite code: e.g. ‘DT:[(6,8,2,4)]’</p></li>
240
239
  </ul>
241
- </dd>
242
- </dl>
240
+ </div></blockquote>
243
241
  </li>
244
242
  <li><p>Once-punctured torus bundles: e.g. ‘b++LLR’, ‘b+-llR’, ‘bo-RRL’, ‘bn+LRLR’</p></li>
245
243
  <li><p>Fibered manifold associated to a braid: ‘Braid[1,2,-3,4]’</p>
@@ -254,21 +252,15 @@ of the last cusp.</p>
254
252
  </li>
255
253
  <li><p>A SnapPea triangulation or link projection file: ‘filename’</p>
256
254
  <p>The file will be loaded if found in the current directory or the
257
- path given by the shell variable SNAPPEA_MANIFOLD_DIRECTORY.
255
+ path given by the shell variable <code class="docutils literal notranslate"><span class="pre">SNAPPEA_MANIFOLD_DIRECTORY</span></code>.
258
256
  See <a class="reference internal" href="#snappy.Manifold.save" title="snappy.Manifold.save"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Manifold.save()</span></code></a> for details.</p>
259
257
  </li>
260
- </ul>
261
- </div></blockquote>
262
- <ul class="simple">
263
- <li><dl class="simple">
264
- <dt>A string containing the contents of a SnapPea triangulation or link</dt><dd><p>projection file.</p>
265
- </dd>
266
- </dl>
267
- </li>
258
+ <li><p>A string containing the contents of a SnapPea triangulation or link
259
+ projection file.</p></li>
268
260
  </ul>
269
261
  <dl class="py method">
270
262
  <dt class="sig sig-object py" id="snappy.Manifold.DT_code">
271
- <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.Manifold.DT_code" title="Permalink to this definition"></a></dt>
263
+ <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.Manifold.DT_code" title="Link to this definition"></a></dt>
272
264
  <dd><p>Return the Dowker-Thistlethwaite code of this link complement,
273
265
  if it is a link complement. The DT code is intended to be an
274
266
  immutable attribute, for use with knot and link exteriors
@@ -289,7 +281,7 @@ only, which is set only when the manifold was created.</p>
289
281
 
290
282
  <dl class="py method">
291
283
  <dt class="sig sig-object py" id="snappy.Manifold.alexander_polynomial">
292
- <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.Manifold.alexander_polynomial" title="Permalink to this definition"></a></dt>
284
+ <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.Manifold.alexander_polynomial" title="Link to this definition"></a></dt>
293
285
  <dd><p>Computes the multivariable Alexander polynomial of the manifold:</p>
294
286
  <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>
295
287
  <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>
@@ -300,13 +292,14 @@ only, which is set only when the manifold was created.</p>
300
292
  <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>
301
293
  </pre></div>
302
294
  </div>
303
- <p>Any provided keyword arguments are passed to fundamental_group and
295
+ <p>Any provided keyword arguments are passed to
296
+ <a class="reference internal" href="triangulation.html#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
304
297
  so affect the group presentation used in the computation.</p>
305
298
  </dd></dl>
306
299
 
307
300
  <dl class="py method">
308
301
  <dt class="sig sig-object py" id="snappy.Manifold.browse">
309
- <span class="sig-name descname"><span class="pre">browse</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.browse" title="Permalink to this definition"></a></dt>
302
+ <span class="sig-name descname"><span class="pre">browse</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.browse" title="Link to this definition"></a></dt>
310
303
  <dd><p>Opens browser window with a graphical interface, which allows to
311
304
  explore the manifold and interact with it.
312
305
  This includes: invariants, Dirichlet domain, cusp neighborhoods,
@@ -320,33 +313,158 @@ inside view, symmetry, Dehn filling, drilling, etc.</p>
320
313
 
321
314
  <dl class="py method">
322
315
  <dt class="sig sig-object py" id="snappy.Manifold.canonical_retriangulation">
323
- <span class="sig-name descname"><span class="pre">canonical_retriangulation</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">verified</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">interval_bits_precs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[53,</span> <span class="pre">212]</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">exact_bits_prec_and_degrees</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[(212,</span> <span class="pre">10),</span> <span class="pre">(1000,</span> <span class="pre">20),</span> <span class="pre">(2000,</span> <span class="pre">20)]</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><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.canonical_retriangulation" title="Permalink to this definition"></a></dt>
324
- <dd><p>The canonical retriangulation which is closely related to the canonical
325
- cell decomposition and described in more detail <a class="reference external" href="verify.html#the-canonical-retriangulation-and-the-isometry-signature">here</a>:</p>
316
+ <span class="sig-name descname"><span class="pre">canonical_retriangulation</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">verified</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">interval_bits_precs</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Sequence</span><span class="p"><span class="pre">[</span></span><span class="pre">int</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">[53,</span> <span class="pre">212]</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">exact_bits_prec_and_degrees</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Sequence</span><span class="p"><span class="pre">[</span></span><span class="pre">Tuple</span><span class="p"><span class="pre">[</span></span><span class="pre">int</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">int</span><span class="p"><span class="pre">]</span></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">[(212,</span> <span class="pre">10),</span> <span class="pre">(1000,</span> <span class="pre">20),</span> <span class="pre">(2000,</span> <span class="pre">20)]</span></span></em>, <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><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="triangulation.html#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><a class="reference internal" href="#snappy.Manifold" title="snappy.Manifold"><span class="pre">Manifold</span></a></span></span><a class="headerlink" href="#snappy.Manifold.canonical_retriangulation" title="Link to this definition"></a></dt>
317
+ <dd><p>Returns a triangulation canonically associated to the hyperbolic manifold.
318
+ That is, the triangulation is (up to combinatorial isomorphism relabeling
319
+ the tetrahedra and vertices) completely determined by the isometry type of
320
+ the hyperbolic manifold.</p>
321
+ <p>Manifolds with incomplete cusps are rejected (unlike in the case of
322
+ <a class="reference internal" href="#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>).</p>
323
+ <p>We now describe the canonical retriangulation. If all cells of
324
+ the canonical cell decomposition (defined by <a class="reference external" href="https://projecteuclid.org/euclid.jdg/1214441650">Epstein and Penner ‘88</a>) are tetrahedral,
325
+ <a class="reference internal" href="#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>
326
+ simply returns that ideal triangulation as a
327
+ <a class="reference internal" href="#snappy.Manifold" title="snappy.Manifold"><code class="xref py py-class docutils literal notranslate"><span class="pre">Manifold</span></code></a>. Here is an example:</p>
328
+ <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">Manifold</span><span class="p">(</span><span class="s2">&quot;m015&quot;</span><span class="p">)</span>
329
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">K</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">canonical_retriangulation</span><span class="p">()</span>
330
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">K</span><span class="o">.</span><span class="n">has_finite_vertices</span><span class="p">()</span>
331
+ <span class="go">False</span>
332
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">K</span><span class="o">.</span><span class="n">solution_type</span><span class="p">()</span>
333
+ <span class="go">&#39;all tetrahedra positively oriented&#39;</span>
334
+ </pre></div>
335
+ </div>
336
+ <p>If there are non-tetrahedral cells,
337
+ <a class="reference internal" href="#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>
338
+ subdivides the canonical cell decomposition. It introduces a finite vertex
339
+ for each canonical cell resulting in a
340
+ <a class="reference internal" href="triangulation.html#snappy.Triangulation" title="snappy.Triangulation"><code class="xref py py-class docutils literal notranslate"><span class="pre">Triangulation</span></code></a>. Here is an example where the
341
+ canonical cell is a cube:</p>
326
342
  <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">Manifold</span><span class="p">(</span><span class="s2">&quot;m412&quot;</span><span class="p">)</span>
327
343
  <span class="gp">&gt;&gt;&gt; </span><span class="n">K</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">canonical_retriangulation</span><span class="p">()</span>
328
- <span class="gp">&gt;&gt;&gt; </span><span class="nb">len</span><span class="p">(</span><span class="n">K</span><span class="o">.</span><span class="n">isomorphisms_to</span><span class="p">(</span><span class="n">K</span><span class="p">))</span> <span class="c1"># Unverified size of the isometry group.</span>
329
- <span class="go">8</span>
344
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">K</span><span class="o">.</span><span class="n">has_finite_vertices</span><span class="p">()</span>
345
+ <span class="go">True</span>
346
+ </pre></div>
347
+ </div>
348
+ <p>The canonical retriangulation can be used to find the symmetries of a
349
+ single manifold. It also can compute the isometries between two
350
+ manifolds. We do this using
351
+ <a class="reference internal" href="triangulation.html#snappy.Triangulation.isomorphisms_to" title="snappy.Triangulation.isomorphisms_to"><code class="xref py py-meth docutils literal notranslate"><span class="pre">isomorphisms_to</span></code></a>:</p>
352
+ <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">Manifold</span><span class="p">(</span><span class="s2">&quot;5_2&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">canonical_retriangulation</span><span class="p">()</span>
353
+ <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="s2">&quot;m015&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">canonical_retriangulation</span><span class="p">()</span>
354
+ <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">M</span><span class="p">)</span>
355
+ <span class="go">[0 -&gt; 0</span>
356
+ <span class="go">[1 0]</span>
357
+ <span class="go">[0 1]</span>
358
+ <span class="go">...</span>
359
+ <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>
360
+ <span class="go">[0 -&gt; 0</span>
361
+ <span class="go">[-1 2]</span>
362
+ <span class="go">[ 0 -1]</span>
363
+ <span class="go">...</span>
330
364
  </pre></div>
331
365
  </div>
332
- <p>When used inside <a class="reference external" href="http://sagemath.org/">Sage</a> and <code class="docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">True</span></code> is
333
- passed as argument, the verify module will certify the result to be
334
- correct:</p>
366
+ <p>The canonical retriangulation is also the basis for the
367
+ <a class="reference internal" href="#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>.</p>
368
+ <p><strong>Subdivision</strong></p>
369
+ <p>If the canonical cell decomposition has a non-tetrahedral cell, the method
370
+ subdivides. You can think of the subdivision in either of the following
371
+ (equivalent) ways:</p>
372
+ <ul class="simple">
373
+ <li><p>A coarsening of the barycentric subdivision with only a quarter of the
374
+ number of tetrahedra. That is, take the barycentric subdivision and
375
+ merge the four tetrahedra adjacent to a barycentric edge connecting
376
+ an edge midpoint to a face midpoint.</p></li>
377
+ <li><p>Taking the double suspension of each face (which is an ideal n-gon)
378
+ about the centers of the two neighboring 3-cells. Then split each
379
+ such topological “lens” into n tetrahedra along its central axis.</p></li>
380
+ </ul>
381
+ <p><strong>Verified computations</strong></p>
382
+ <p>While the canonical retriangulation is combinatorial, some intermediate
383
+ computations are numerical. Thus, if <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">False</span></code>,
384
+ floating-point issues can arise.
385
+ (Arguably this gave rise to a mistake in the
386
+ non-orientable census. <code class="docutils literal notranslate"><span class="pre">x101</span></code> and <code class="docutils literal notranslate"><span class="pre">x103</span></code> were later identified as
387
+ the same by <a class="reference external" href="http://arxiv.org/abs/1311.7615">Burton ‘14</a>.)</p>
388
+ <p>The method can be made <a class="reference internal" href="verify.html#verify-primer"><span class="std std-ref">verified</span></a> by passing
389
+ <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">True</span></code>:</p>
390
+ <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="s2">&quot;v2986&quot;</span><span class="p">)</span>
391
+ <span class="n">sage</span><span class="p">:</span> <span class="n">K</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">canonical_retriangulation</span><span class="p">(</span><span class="n">verified</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span>
392
+ <span class="n">sage</span><span class="p">:</span> <span class="n">K</span><span class="o">.</span><span class="n">has_finite_vertices</span><span class="p">()</span> <span class="c1"># Cell decomposition verified to be tetrahedral</span>
393
+ <span class="kc">False</span>
394
+ <span class="n">sage</span><span class="p">:</span> <span class="n">K</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="c1"># Verified isometry signature.</span>
395
+ <span class="s1">&#39;jvLALQQdeefgihihiokcmmwwswg&#39;</span>
396
+ <span class="n">sage</span><span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="n">K</span><span class="o">.</span><span class="n">isomorphisms_to</span><span class="p">(</span><span class="n">K</span><span class="p">))</span> <span class="c1"># Verified to have no (non-trivial) symmetries.</span>
397
+ <span class="mi">1</span>
398
+ </pre></div>
399
+ </div>
400
+ <p>Interval arithmetic can only be used to verify the canonical cell decomposition
401
+ if all cells are tetrahedral. For non-tetrahedral cells, the method
402
+ automatically switches to
403
+ exact methods to verify the canonical cell decomposition. That is, it uses
404
+ snap-like methods
405
+ (<a class="reference external" href="http://en.wikipedia.org/wiki/Lenstra%E2%80%93Lenstra%E2%80%93Lov%C3%A1sz_lattice_basis_reduction_algorithm">LLL-algorithm</a>)
406
+ to guess a representation of the
407
+ shapes in the shape field. It then uses exact arithmetic to verify the
408
+ shapes form a valid geometric structure and compute the necessary tilts
409
+ to verify the canonical cell decomposition. Note that this can take a
410
+ long time!</p>
411
+ <p>Here is an example where exact methods are used:</p>
335
412
  <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="s2">&quot;m412&quot;</span><span class="p">)</span>
336
413
  <span class="n">sage</span><span class="p">:</span> <span class="n">K</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">canonical_retriangulation</span><span class="p">(</span><span class="n">verified</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span>
337
- <span class="n">sage</span><span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="n">K</span><span class="o">.</span><span class="n">isomorphisms_to</span><span class="p">(</span><span class="n">K</span><span class="p">))</span> <span class="c1"># Verified size of the isometry group.</span>
338
- <span class="mi">8</span>
414
+ <span class="n">sage</span><span class="p">:</span> <span class="n">K</span><span class="o">.</span><span class="n">has_finite_vertices</span><span class="p">()</span> <span class="c1"># Has non-tetrahedral cell</span>
415
+ <span class="kc">True</span>
339
416
  </pre></div>
340
417
  </div>
341
- <p>See <a class="reference internal" href="verify_canon.html#snappy.verify.verified_canonical_retriangulation" title="snappy.verify.verified_canonical_retriangulation"><code class="xref py py-meth docutils literal notranslate"><span class="pre">verify.verified_canonical_retriangulation()</span></code></a> for the
342
- additional options.</p>
418
+ <p>If the canonical retriangulation cannot be verified, an exception will be
419
+ raised. (Note that this is new (and safer) in Version 3.2. Prior to that
420
+ version, <a class="reference internal" href="#snappy.Manifold.canonical_retriangulation" title="snappy.Manifold.canonical_retriangulation"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Manifold.canonical_retriangulation()</span></code></a> could return <code class="docutils literal notranslate"><span class="pre">None</span></code>
421
+ instead.)</p>
422
+ <p>Here is an example where we skip the (potentially lengthy) exact methods
423
+ needed to verify a non-tetrahedral cell. The method fails (early
424
+ and with an exception) since the cells are actually tetrahedral:</p>
425
+ <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="s2">&quot;m412&quot;</span><span class="p">)</span>
426
+ <span class="n">sage</span><span class="p">:</span> <span class="n">K</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">canonical_retriangulation</span><span class="p">(</span><span class="n">verified</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span> <span class="n">exact_bits_prec_and_degrees</span> <span class="o">=</span> <span class="p">[])</span> <span class="c1"># doctest: +ELLIPSIS +IGNORE_EXCEPTION_DETAIL</span>
427
+ <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>
428
+ <span class="o">...</span>
429
+ <span class="n">snappy</span><span class="o">.</span><span class="n">verify</span><span class="o">.</span><span class="n">exceptions</span><span class="o">.</span><span class="n">TiltInequalityNumericalVerifyError</span><span class="p">:</span> <span class="n">Numerical</span> <span class="n">verification</span> <span class="n">that</span> <span class="n">tilt</span> <span class="ow">is</span> <span class="n">negative</span> <span class="n">has</span> <span class="n">failed</span><span class="p">:</span> <span class="o">...</span> <span class="o">&lt;</span> <span class="mi">0</span>
430
+ </pre></div>
431
+ </div>
432
+ <dl class="field-list simple">
433
+ <dt class="field-odd">Parameters<span class="colon">:</span></dt>
434
+ <dd class="field-odd"><ul class="simple">
435
+ <li><p><strong>verified</strong> – Use <a class="reference internal" href="verify.html#verify-primer"><span class="std std-ref">verified computation</span></a>.</p></li>
436
+ <li><p><strong>interval_bits_precs</strong> – Only relevant if <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">True</span></code>.
437
+ A list of (increasing) precisions used to try to
438
+ certify the canonical cell decomposition using intervals. Each
439
+ precision is tried until we succeed. If none succeeded, we move on
440
+ to exact methods.</p></li>
441
+ <li><p><strong>exact_bits_prec_and_degrees</strong> – Only relevant if <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">True</span></code>.
442
+ A list of pairs (precision, max degree) used when the
443
+ LLL-algorithm is trying to find the defining
444
+ polynomial of the shape field with
445
+ <code class="docutils literal notranslate"><span class="pre">ListOfApproximateAlgebraicNumbers.find_field</span></code>.
446
+ Each pair is tried until we succeed.</p></li>
447
+ <li><p><strong>verbose</strong> – Print information about the methods tried to compute and verify the
448
+ canonical retriangulation.</p></li>
449
+ </ul>
450
+ </dd>
451
+ <dt class="field-even">Returns<span class="colon">:</span></dt>
452
+ <dd class="field-even"><p>If the canonical cell decomposition exists entirely of
453
+ (hyperbolic ideal) tetrahedra, a <a class="reference internal" href="#snappy.Manifold" title="snappy.Manifold"><code class="xref py py-class docutils literal notranslate"><span class="pre">Manifold</span></code></a> with those
454
+ tetrahedra.
455
+ Otherwise, a <a class="reference internal" href="triangulation.html#snappy.Triangulation" title="snappy.Triangulation"><code class="xref py py-class docutils literal notranslate"><span class="pre">Triangulation</span></code></a> that is a subdivision of the
456
+ canonical cell decomposition.</p>
457
+ </dd>
458
+ </dl>
343
459
  </dd></dl>
344
460
 
345
461
  <dl class="py method">
346
462
  <dt class="sig sig-object py" id="snappy.Manifold.canonize">
347
- <span class="sig-name descname"><span class="pre">canonize</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.canonize" title="Permalink to this definition"></a></dt>
463
+ <span class="sig-name descname"><span class="pre">canonize</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.Manifold.canonize" title="Link to this definition"></a></dt>
348
464
  <dd><p>Change the triangulation to an arbitrary retriangulation of
349
- the canonical cell decomposition.</p>
465
+ the canonical cell decomposition. See
466
+ <a class="reference internal" href="#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>
467
+ to get the actual canonical cell decomposition.</p>
350
468
  <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;m007&#39;</span><span class="p">)</span>
351
469
  <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>
352
470
  <span class="go">3</span>
@@ -355,14 +473,15 @@ the canonical cell decomposition.</p>
355
473
  <span class="go">4</span>
356
474
  </pre></div>
357
475
  </div>
358
- <p>Note: due to rounding error, it is possible that this is not
359
- actually the canonical triangulation.</p>
476
+ <p>Note: Due to rounding error, it is possible that this is actually
477
+ not a retriangulation of the canonical cell decomposition.</p>
360
478
  </dd></dl>
361
479
 
362
480
  <dl class="py method">
363
481
  <dt class="sig sig-object py" id="snappy.Manifold.chern_simons">
364
- <span class="sig-name descname"><span class="pre">chern_simons</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">accuracy</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.Manifold.chern_simons" title="Permalink to this definition"></a></dt>
365
- <dd><p>Returns the Chern-Simons invariant of the manifold, if it is known.</p>
482
+ <span class="sig-name descname"><span class="pre">chern_simons</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">accuracy</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.Manifold.chern_simons" title="Link to this definition"></a></dt>
483
+ <dd><p>Returns the Chern-Simons invariant of the manifold (normalized by
484
+ dividing it by <span class="math notranslate nohighlight">\(2 \pi^2\)</span>), if it is known.</p>
366
485
  <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>
367
486
  <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">chern_simons</span><span class="p">()</span>
368
487
  <span class="go">-0.15320413</span>
@@ -389,24 +508,35 @@ manifold so as to initialize SnapPea’s internals. For instance,</p>
389
508
  <span class="go">0.07731787</span>
390
509
  </pre></div>
391
510
  </div>
392
- <p>works, but will fail with ‘Chern-Simons invariant not
393
- currently known’ if the first call to chern_simons is not
394
- made.</p>
511
+ <p>works, but will fail with
512
+ <code class="docutils literal notranslate"><span class="pre">ValueError:</span> <span class="pre">The</span> <span class="pre">Chern-Simons</span> <span class="pre">invariant</span> <span class="pre">isn't</span> <span class="pre">currently</span> <span class="pre">known.</span></code>
513
+ if the first call to chern_simons is not made.</p>
395
514
  </dd></dl>
396
515
 
397
516
  <dl class="py method">
398
517
  <dt class="sig sig-object py" id="snappy.Manifold.complex_volume">
399
- <span class="sig-name descname"><span class="pre">complex_volume</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">verified_modulo_2_torsion</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">bits_prec</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.Manifold.complex_volume" title="Permalink to this definition"></a></dt>
400
- <dd><p>Returns the complex volume, i.e.
401
- volume + i 2 pi^2 (chern simons)</p>
518
+ <span class="sig-name descname"><span class="pre">complex_volume</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">verified_modulo_2_torsion</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">bits_prec</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.Manifold.complex_volume" title="Link to this definition"></a></dt>
519
+ <dd><p>Returns the complex volume modulo <span class="math notranslate nohighlight">\(i \pi^2\)</span> which is given by</p>
520
+ <div class="math notranslate nohighlight">
521
+ \[\text{vol} + i \text{CS}\]</div>
522
+ <p>where <span class="math notranslate nohighlight">\(\text{CS}\)</span> is the (unnormalized) Chern-Simons invariant.</p>
402
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">Manifold</span><span class="p">(</span><span class="s1">&#39;5_2&#39;</span><span class="p">)</span>
403
524
  <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">complex_volume</span><span class="p">()</span>
404
525
  <span class="go">2.82812209 - 3.02412838*I</span>
405
- <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">chern_simons</span><span class="p">()</span>
406
- <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">2</span><span class="p">))</span>
526
+ </pre></div>
527
+ </div>
528
+ <p>Note that <a class="reference internal" href="#snappy.Manifold.chern_simons" title="snappy.Manifold.chern_simons"><code class="xref py py-meth docutils literal notranslate"><span class="pre">chern_simons</span></code></a>
529
+ normalizes the Chern-Simons invariant by dividing it by
530
+ <span class="math notranslate nohighlight">\(2 \pi^2 = 19.7392...\)</span></p>
531
+ <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">chern_simons</span><span class="p">()</span>
532
+ <span class="go">-0.153204133297152</span>
533
+ </pre></div>
534
+ </div>
535
+ <p>More examples:</p>
536
+ <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">1</span><span class="p">,</span><span class="mi">2</span><span class="p">))</span>
407
537
  <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">complex_volume</span><span class="p">()</span>
408
538
  <span class="go">2.22671790 + 1.52619361*I</span>
409
- <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;3_1&quot;</span><span class="p">)</span>
539
+ <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;3_1&quot;</span><span class="p">)</span> <span class="c1"># A non-hyperbolic example.</span>
410
540
  <span class="gp">&gt;&gt;&gt; </span><span class="n">cvol</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">complex_volume</span><span class="p">()</span>
411
541
  <span class="gp">&gt;&gt;&gt; </span><span class="n">cvol</span><span class="o">.</span><span class="n">real</span><span class="p">()</span>
412
542
  <span class="go">0</span>
@@ -416,11 +546,11 @@ volume + i 2 pi^2 (chern simons)</p>
416
546
  </div>
417
547
  <p>If no cusp is filled or there is only one cusped (filled or
418
548
  unfilled), the complex volume can be verified up to multiples
419
- of i pi^2 / 2 by passing <cite>verified_modulo_2_torsion = True</cite>
420
- when inside SageMath (and higher precision can be requested
421
- with <cite>bits_prec</cite>):</p>
549
+ of <span class="math notranslate nohighlight">\(i \pi^2 /2\)</span> by passing <code class="docutils literal notranslate"><span class="pre">verified_modulo_2_torsion</span> <span class="pre">=</span> <span class="pre">True</span></code>
550
+ when inside SageMath. Higher precision can be requested
551
+ with <code class="docutils literal notranslate"><span class="pre">bits_prec</span></code>:</p>
422
552
  <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: M = Manifold(&quot;m015&quot;)
423
- sage: M.complex_volume(verified_modulo_2_torsion=True, bits_prec = 90) # doctest: +NUMERIC24
553
+ sage: M.complex_volume(verified_modulo_2_torsion=True, bits_prec = 93) # doctest: +NUMERIC21
424
554
  2.828122088330783162764? + 1.910673824035377649698?*I
425
555
  sage: M = Manifold(&quot;m015(3,4)&quot;)
426
556
  sage: M.complex_volume(verified_modulo_2_torsion=True) # doctest: +NUMERIC6
@@ -431,7 +561,7 @@ sage: M.complex_volume(verified_modulo_2_torsion=True) # doctest: +NUMERIC6
431
561
 
432
562
  <dl class="py method">
433
563
  <dt class="sig sig-object py" id="snappy.Manifold.copy">
434
- <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.Manifold.copy" title="Permalink to this definition"></a></dt>
564
+ <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.Manifold.copy" title="Link to this definition"></a></dt>
435
565
  <dd><p>Returns a copy of the manifold</p>
436
566
  <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>
437
567
  <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>
@@ -441,24 +571,22 @@ sage: M.complex_volume(verified_modulo_2_torsion=True) # doctest: +NUMERIC6
441
571
 
442
572
  <dl class="py method">
443
573
  <dt class="sig sig-object py" id="snappy.Manifold.cover">
444
- <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.Manifold.cover" title="Permalink to this definition"></a></dt>
445
- <dd><p>M.cover(permutation_rep)</p>
446
- <p>Returns a Manifold representing the finite cover
447
- specified by a transitive permutation representation. The
448
- representation is specified by a list of permutations, one for
449
- each generator of the simplified presentation of the
450
- fundamental group. Each permutation is specified as a list P
451
- such that set(P) == set(range(d)) where d is the degree of the
452
- cover.</p>
574
+ <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.Manifold" title="snappy.Manifold"><span class="pre">snappy.Manifold</span></a></span></span><a class="headerlink" href="#snappy.Manifold.cover" title="Link to this definition"></a></dt>
575
+ <dd><p>Returns a <a class="reference internal" href="#snappy.Manifold" title="snappy.Manifold"><code class="xref py py-class docutils literal notranslate"><span class="pre">Manifold</span></code></a> representing the finite cover specified by a
576
+ transitive permutation representation. The representation is
577
+ specified by a list of permutations, one for each generator of the
578
+ simplified presentation of the fundamental group. Each permutation is
579
+ specified as a list <code class="docutils literal notranslate"><span class="pre">P</span></code> such 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>
580
+ where <code class="docutils literal notranslate"><span class="pre">d</span></code> is the degree of the cover.</p>
453
581
  <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>
454
582
  <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>
455
583
  <span class="gp">&gt;&gt;&gt; </span><span class="nb">abs</span><span class="p">(</span><span class="n">N0</span><span class="o">.</span><span class="n">volume</span><span class="p">()</span><span class="o">/</span><span class="n">M</span><span class="o">.</span><span class="n">volume</span><span class="p">()</span> <span class="o">-</span> <span class="mi">5</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mf">0.0000000001</span>
456
584
  <span class="go">True</span>
457
585
  </pre></div>
458
586
  </div>
459
- <p>If within Sage, the permutations can also be of type
460
- PermutationGroupElement, in which case they act on the set
461
- range(1, d + 1). Or, you can specify a GAP or Magma subgroup
587
+ <p>If within SageMath, the permutations can also be of type
588
+ <code class="docutils literal notranslate"><span class="pre">PermutationGroupElement</span></code>, in which case they act on the set
589
+ <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
462
590
  of the fundamental group. Some examples:</p>
463
591
  <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;m004&#39;</span><span class="p">)</span>
464
592
  </pre></div>
@@ -510,7 +638,7 @@ of the fundamental group. Some examples:</p>
510
638
 
511
639
  <dl class="py method">
512
640
  <dt class="sig sig-object py" id="snappy.Manifold.cover_info">
513
- <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.Manifold.cover_info" title="Permalink to this definition"></a></dt>
641
+ <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.Manifold.cover_info" title="Link to this definition"></a></dt>
514
642
  <dd><p>If this is a manifold or triangulation which was constructed as
515
643
  a covering space, return a dictionary describing the cover. Otherwise
516
644
  return 0. The dictionary keys are ‘base’, ‘type’ and ‘degree’.</p>
@@ -518,9 +646,8 @@ return 0. The dictionary keys are ‘base’, ‘type’ and ‘degree’.</p>
518
646
 
519
647
  <dl class="py method">
520
648
  <dt class="sig sig-object py" id="snappy.Manifold.covers">
521
- <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.Manifold.covers" title="Permalink to this definition"></a></dt>
522
- <dd><p>M.covers(degree, method=None, cover_type=’all’)</p>
523
- <p>Returns a list of Manifolds corresponding to all of the
649
+ <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.Manifold" title="snappy.Manifold"><span class="pre">snappy.Manifold</span></a><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#snappy.Manifold.covers" title="Link to this definition"></a></dt>
650
+ <dd><p>Returns a list of <a class="reference internal" href="#snappy.Manifold" title="snappy.Manifold"><code class="xref py py-class docutils literal notranslate"><span class="pre">Manifold</span></code></a>s corresponding to all of the
524
651
  finite covers of the given degree. The default method is
525
652
  ‘low_index’ for general covers and ‘snappea’ for cyclic
526
653
  covers. The former uses Sim’s algorithm while the latter
@@ -556,143 +683,150 @@ used it to do the heavy lifting by specifying method=’magma’.</p>
556
683
 
557
684
  <dl class="py method">
558
685
  <dt class="sig sig-object py" id="snappy.Manifold.cusp_area_matrix">
559
- <span class="sig-name descname"><span class="pre">cusp_area_matrix</span></span><span class="sig-paren">(</span><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">'trigDependentTryCanonize'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verified</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">bits_prec</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.Manifold.cusp_area_matrix" title="Permalink to this definition"></a></dt>
560
- <dd><p>This function returns a matrix that can be used to check whether
561
- cusp neighborhoods of areas a<sub>0</sub>, …, a<sub>m-1</sub> are
562
- disjoint: the cusp neighborhoods about cusp i and j are
563
- disjoint (respectively, the cusp neighborhood embeds if i and j
564
- are equal) if a<sub>i</sub> * a<sub>j</sub> is less than or equal to
565
- the entry (i,j) of the cusp area matrix. Note that the “if”
566
- becomes “if and only if if we pick the “maximal cusp area
567
- matrix”.</p>
568
- <p>This function can operate in different ways (determined by
569
- <code class="docutils literal notranslate"><span class="pre">method</span></code>). By default (<code class="docutils literal notranslate"><span class="pre">method='trigDependentTryCanonize'</span></code>),
570
- it returns a result which can be suboptimal and non-deterministic
571
- but is quicker to compute and sufficies for many applications:</p>
572
- <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">Manifold</span><span class="p">(</span><span class="s2">&quot;s776&quot;</span><span class="p">)</span>
686
+ <span class="sig-name descname"><span class="pre">cusp_area_matrix</span></span><span class="sig-paren">(</span><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">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">'maximal'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verified</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">bits_prec</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><a class="headerlink" href="#snappy.Manifold.cusp_area_matrix" title="Link to this definition"></a></dt>
687
+ <dd><p>Returns the maximal cusp area matrix <span class="math notranslate nohighlight">\((A_{ij})\)</span> where
688
+ <span class="math notranslate nohighlight">\(A_{ij}\)</span> is defined as follows.
689
+ Let <span class="math notranslate nohighlight">\(C_i\)</span> and <span class="math notranslate nohighlight">\(C_j\)</span> be the (open) cusp neighborhoods about cusp
690
+ <span class="math notranslate nohighlight">\(i\)</span> and <span class="math notranslate nohighlight">\(j\)</span>. Let <span class="math notranslate nohighlight">\(A(C_i)\)</span> and <span class="math notranslate nohighlight">\(A(C_j)\)</span> be the
691
+ areas of <span class="math notranslate nohighlight">\(C_i\)</span> and <span class="math notranslate nohighlight">\(C_j\)</span>, respectively. Then, <span class="math notranslate nohighlight">\(C_i\)</span>
692
+ and <span class="math notranslate nohighlight">\(C_j\)</span> are embedded (if <span class="math notranslate nohighlight">\(i = j\)</span>) or disjoint (otherwise)
693
+ if and only if <span class="math notranslate nohighlight">\(A(C_i)A(C_j) \leq A_{ij}\)</span>.</p>
694
+ <p>Here is an example:</p>
695
+ <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">Manifold</span><span class="p">(</span><span class="s2">&quot;L6a5&quot;</span><span class="p">)</span>
573
696
  <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_area_matrix</span><span class="p">()</span>
574
- <span class="go">[28.0000000000000 7.00000000000000 6.99999999999999]</span>
575
- <span class="go">[7.00000000000000 21.4375000000000 7.00000000000000]</span>
576
- <span class="go">[6.99999999999999 7.00000000000000 21.4375000000000]</span>
577
- </pre></div>
578
- </div>
579
- <p>If <code class="docutils literal notranslate"><span class="pre">method='maximal'</span></code> is specified, the result is the “maximal
580
- cusp area matrix”, thus it is optimal and an invariant of the
581
- manifold with labeled cusps. Note that the maximal cusp area
582
- matrix is only available as verified computation and thus
583
- requires passing <code class="docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">True</span></code>:</p>
584
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: M.cusp_area_matrix(method = &#39;maximal&#39;, verified=True) # doctest: +NUMERIC6
585
- [28.0000000000? 7.0000000000? 7.0000000000?]
586
- [ 7.0000000000? 28.000000000? 7.00000000000?]
587
- [ 7.0000000000? 7.00000000000? 28.00000000?]
588
- </pre></div>
589
- </div>
590
- <p>If <code class="docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">True</span></code> is specified and <code class="docutils literal notranslate"><span class="pre">method</span></code> is not
591
- <code class="docutils literal notranslate"><span class="pre">maximal</span></code>, the entries are all guaranteed to be less than the
592
- corresponding ones in the maximal cusp area matrix (more
593
- precisely, the lower end point of the interval is guaranteed to be
594
- less than the true value of the corresponding maximal cusp area
595
- matrix entry):</p>
596
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: M.cusp_area_matrix(verified=True, bits_prec=70) # doctest: +NUMERIC15
597
- [ 28.000000000000000? 7.0000000000000000? 7.0000000000000000?]
598
- [ 7.0000000000000000? 21.4375000000000000? 7.0000000000000000?]
599
- [ 7.0000000000000000? 7.0000000000000000? 21.4375000000000000?]
600
- </pre></div>
601
- </div>
602
- <p>For expert users:</p>
603
- <p>Besides the two values above, <code class="docutils literal notranslate"><span class="pre">method</span></code> can be <code class="docutils literal notranslate"><span class="pre">trigDependent</span></code>:
604
- this result is also fast to compute by making the assumption that
605
- cusp neighborhoods are not only disjoint but also in “standard
606
- form” with respect to the triangulation (i.e., when lifting of a
607
- cusp neighborhood to a horoball in the universal cover, it
608
- intersects a geodesic tetrahedron in three but not four
609
- faces). <code class="docutils literal notranslate"><span class="pre">trigDependentTryCanonize</span></code> is similar to
610
- <code class="docutils literal notranslate"><span class="pre">trigDependent</span></code> but tries to “proto-canonize” (a copy of) the
611
- triangulation first since this often produces a matrix that is
612
- closer to the maximal cusp area matrix, for example:</p>
613
- <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">Manifold</span><span class="p">(</span><span class="s2">&quot;o9_35953&quot;</span><span class="p">)</span>
614
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_area_matrix</span><span class="p">(</span><span class="n">method</span> <span class="o">=</span> <span class="s1">&#39;trigDependent&#39;</span><span class="p">)</span>
615
- <span class="go">[72.9848715318467 12.7560424258060]</span>
616
- <span class="go">[12.7560424258060 6.65567118002656]</span>
617
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_area_matrix</span><span class="p">(</span><span class="n">method</span> <span class="o">=</span> <span class="s1">&#39;trigDependentTryCanonize&#39;</span><span class="p">)</span>
618
- <span class="go">[72.9848715318466 12.7560424258060]</span>
619
- <span class="go">[12.7560424258060 62.1043047674605]</span>
620
- </pre></div>
621
- </div>
622
- <p>Compare to maximal area matrix:</p>
623
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: M.cusp_area_matrix(method = &#39;maximal&#39;, verified = True, bits_prec = 100) # doctest: +NUMERIC15
624
- [ 72.984871531846664? 12.7560424258059765562778?]
625
- [12.7560424258059765562778? 62.104304767460978078?]
626
- </pre></div>
627
- </div>
697
+ <span class="go">[27.9999999999996 7.00000000000000 7.00000000000000]</span>
698
+ <span class="go">[7.00000000000000 27.9999999999999 7.00000000000000]</span>
699
+ <span class="go">[7.00000000000000 7.00000000000000 28.0000000000001]</span>
700
+ </pre></div>
701
+ </div>
702
+ <p><strong>Faster lower bounds</strong></p>
703
+ <p>This section can be skipped by most users!</p>
704
+ <p>Prior to SnapPy version 3.2, the algorithm to compute the maximal cusp
705
+ area matrix was much slower and required <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">True</span></code> and
706
+ SageMath. Thus, in prior versions, <code class="xref py py-attr docutils literal notranslate"><span class="pre">method</span></code> defaulted to
707
+ <code class="docutils literal notranslate"><span class="pre">trigDependentTryCanonize</span></code>. This meant, that, by default,
708
+ <a class="reference internal" href="#snappy.Manifold.cusp_area_matrix" title="snappy.Manifold.cusp_area_matrix"><code class="xref py py-meth docutils literal notranslate"><span class="pre">cusp_area_matrix()</span></code></a> only returned
709
+ (some) lower bounds for the maximal cusp area matrix entries.</p>
710
+ <p>These lower bounds can still be accessed:</p>
711
+ <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">cusp_area_matrix</span><span class="p">(</span><span class="n">method</span> <span class="o">=</span> <span class="s1">&#39;trigDependentTryCanonize&#39;</span><span class="p">)</span>
712
+ <span class="go">[21.4375000000000 7.00000000000000 7.00000000000000]</span>
713
+ <span class="go">[7.00000000000000 28.0000000000000 7.00000000000000]</span>
714
+ <span class="go">[7.00000000000000 7.00000000000000 28.0000000000000]</span>
715
+ </pre></div>
716
+ </div>
717
+ <p>If <code class="xref py py-attr docutils literal notranslate"><span class="pre">method</span> <span class="pre">=</span> <span class="pre">'trigDependent'</span></code> or
718
+ <code class="xref py py-attr docutils literal notranslate"><span class="pre">method</span> <span class="pre">=</span> <span class="pre">'trigDependenyTryCanonize'</span></code>, the result is triangulation
719
+ dependent or not even deterministic, respectively.
720
+ Furthermore, if <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">True</span></code> is also set, while the left
721
+ endpoints of the intervals are lower bounds for the maximal cusp area
722
+ matrix entries, the right endpoints are meaningless and could be smaller
723
+ or larger than the maximal cusp area matrix entries.</p>
724
+ <p><strong>Verified computation</strong></p>
725
+ <p>If <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">False</span></code>, floating-point issues can arise resulting in
726
+ incorrect values. The method can be made
727
+ <a class="reference internal" href="verify.html#verify-primer"><span class="std std-ref">verified</span></a> by passing <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">True</span></code>:</p>
728
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: M.cusp_area_matrix(verified=True) # doctest: +NUMERIC3
729
+ [ 28.0000? 7.000000000000? 7.00000000000?]
730
+ [7.000000000000? 28.000000? 7.00000000000?]
731
+ [ 7.00000000000? 7.00000000000? 28.00000?]
732
+ </pre></div>
733
+ </div>
734
+ <dl class="field-list simple">
735
+ <dt class="field-odd">Parameters<span class="colon">:</span></dt>
736
+ <dd class="field-odd"><ul class="simple">
737
+ <li><p><strong>verified</strong> – Use <a class="reference internal" href="verify.html#verify-primer"><span class="std std-ref">verified computation</span></a>.</p></li>
738
+ <li><p><strong>bits_prec</strong> – Precision used for computation. Increase if computation
739
+ did not succeed or a more precise result is desired.</p></li>
740
+ <li><p><strong>method</strong> Switches to older algorithms giving lower bounds when
741
+ <code class="docutils literal notranslate"><span class="pre">trigDependentTryCanonize</span></code> and <code class="docutils literal notranslate"><span class="pre">trigDependent</span></code>.</p></li>
742
+ </ul>
743
+ </dd>
744
+ <dt class="field-even">Returns<span class="colon">:</span></dt>
745
+ <dd class="field-even"><p>Maximal cusp area matrix (default) or lower bounds
746
+ (if <code class="xref py py-attr docutils literal notranslate"><span class="pre">method</span></code> switches to older algorithm).</p>
747
+ </dd>
748
+ </dl>
628
749
  </dd></dl>
629
750
 
630
751
  <dl class="py method">
631
752
  <dt class="sig sig-object py" id="snappy.Manifold.cusp_areas">
632
- <span class="sig-name descname"><span class="pre">cusp_areas</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">policy</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'unbiased'</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">'trigDependentTryCanonize'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verified</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">bits_prec</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">first_cusps</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[]</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.cusp_areas" title="Permalink to this definition"></a></dt>
633
- <dd><p>Picks areas for the cusps such that the corresponding cusp
634
- neighborhoods are disjoint. By default, the <code class="docutils literal notranslate"><span class="pre">policy</span></code> is
635
- <code class="docutils literal notranslate"><span class="pre">unbiased</span></code> which means that the cusp neighborhoods are blown up
636
- simultaneously with a cusp neighborhood stopping to grow when it
637
- touches another cusp neighborhood or itself:</p>
753
+ <span class="sig-name descname"><span class="pre">cusp_areas</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">policy</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">'unbiased'</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">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">'maximal'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verified</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">bits_prec</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>, <em class="sig-param"><span class="n"><span class="pre">first_cusps</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">List</span><span class="p"><span class="pre">[</span></span><span class="pre">int</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">[]</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.cusp_areas" title="Link to this definition"></a></dt>
754
+ <dd><p>Returns a list of areas, one for each cusp. The cusp neighborhoods
755
+ defined by these areas are embedded and disjoint. Furthermore, these
756
+ neighborhoods are maximal in that they fail to be embedded or
757
+ disjoint if any cusp neighborhood is enlarged (unless <code class="xref py py-attr docutils literal notranslate"><span class="pre">method</span></code>
758
+ is set to a value different from the default).</p>
759
+ <p>There are different policies how these cusp neighborhoods are found.</p>
760
+ <p>The default <code class="xref py py-attr docutils literal notranslate"><span class="pre">policy</span></code> is <code class="docutils literal notranslate"><span class="pre">unbiased</span></code>. This means that the
761
+ cusp neighborhoods are blown up simultaneously and a cusp neighborhood
762
+ stops growing when it touches any cusp neighborhood including itself:</p>
638
763
  <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">Manifold</span><span class="p">(</span><span class="s2">&quot;s776&quot;</span><span class="p">)</span>
639
764
  <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_areas</span><span class="p">()</span>
640
765
  <span class="go">[2.64575131106459, 2.64575131106459, 2.64575131106459]</span>
641
766
  </pre></div>
642
767
  </div>
643
- <p>Alternatively, <code class="docutils literal notranslate"><span class="pre">policy='greedy'</span></code> means that the first cusp
644
- neighborhood is blown up until it touches itself, then the second
645
- cusp neighborhood is blown up until it touches itself or the first
646
- cusp neighborhood, …:</p>
768
+ <p>Alternatively, <code class="xref py py-attr docutils literal notranslate"><span class="pre">policy='greedy'</span></code> can be specified. This means
769
+ that the first cusp neighborhood is blown up until it touches itself,
770
+ then the second cusp neighborhood is blown up until it touches itself
771
+ or the first cusp neighborhood, and so on:</p>
647
772
  <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">cusp_areas</span><span class="p">(</span><span class="n">policy</span><span class="o">=</span><span class="s1">&#39;greedy&#39;</span><span class="p">)</span>
648
773
  <span class="go">[5.29150262212918, 1.32287565553230, 1.32287565553229]</span>
649
774
  </pre></div>
650
775
  </div>
651
- <p>To specify cusps to be blown up first, and in which order to blow
652
- them up, set <code class="docutils literal notranslate"><span class="pre">first_cusps</span></code> to the appropriate list of cusps.</p>
653
- <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;o9_44210&#39;</span><span class="p">)</span>
654
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_areas</span><span class="p">(</span><span class="n">policy</span><span class="o">=</span><span class="s1">&#39;greedy&#39;</span><span class="p">)</span>
655
- <span class="go">[7.053940530873898, 3.2712450270, 2.7091590087]</span>
656
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_areas</span><span class="p">(</span><span class="n">policy</span><span class="o">=</span><span class="s1">&#39;greedy&#39;</span><span class="p">,</span> <span class="n">first_cusps</span><span class="o">=</span><span class="p">[])</span>
657
- <span class="go">[7.053940530873898, 3.2712450270, 2.7091590087]</span>
658
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_areas</span><span class="p">(</span><span class="n">policy</span><span class="o">=</span><span class="s1">&#39;greedy&#39;</span><span class="p">,</span> <span class="n">first_cusps</span><span class="o">=</span><span class="p">[</span><span class="mi">0</span><span class="p">,])</span>
659
- <span class="go">[7.053940530873898, 3.2712450270, 2.7091590087]</span>
660
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_areas</span><span class="p">(</span><span class="n">policy</span><span class="o">=</span><span class="s1">&#39;greedy&#39;</span><span class="p">,</span> <span class="n">first_cusps</span><span class="o">=</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">])</span>
661
- <span class="go">[7.053940530873898, 3.2712450270, 2.7091590087]</span>
662
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_areas</span><span class="p">(</span><span class="n">policy</span><span class="o">=</span><span class="s1">&#39;greedy&#39;</span><span class="p">,</span> <span class="n">first_cusps</span><span class="o">=</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">])</span>
663
- <span class="go">[7.053940530873898, 3.2712450270, 2.7091590087]</span>
664
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_areas</span><span class="p">(</span><span class="n">policy</span><span class="o">=</span><span class="s1">&#39;greedy&#39;</span><span class="p">,</span> <span class="n">first_cusps</span><span class="o">=</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>
665
- <span class="go">[7.053940530873898, 2.3513135103, 3.7690945490]</span>
666
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_areas</span><span class="p">(</span><span class="n">policy</span><span class="o">=</span><span class="s1">&#39;greedy&#39;</span><span class="p">,</span> <span class="n">first_cusps</span><span class="o">=</span><span class="p">[</span><span class="mi">1</span><span class="p">,])</span>
667
- <span class="go">[4.0302253322, 5.725527974287718, 1.5478612583]</span>
668
- </pre></div>
669
- </div>
670
- <p><code class="docutils literal notranslate"><span class="pre">cusp_areas</span></code> is implemented using
671
- <a class="reference internal" href="#snappy.Manifold.cusp_area_matrix" title="snappy.Manifold.cusp_area_matrix"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Manifold.cusp_area_matrix()</span></code></a> and the same arguments
672
- (<code class="docutils literal notranslate"><span class="pre">method</span></code>, <code class="docutils literal notranslate"><span class="pre">verified</span></code>, <code class="docutils literal notranslate"><span class="pre">bits_prec</span></code>) are accepted. For
673
- example, verified computations are supported:</p>
674
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: M=Manifold(&quot;v2854&quot;)
675
- sage: M.cusp_areas(verified=True) # doctest: +NUMERIC9
676
- [3.6005032476?, 3.6005032476?]
776
+ <p>Use <code class="xref py py-attr docutils literal notranslate"><span class="pre">first_cusps</span></code> to specify the order in which the cusp
777
+ neighborhoods are blown up:</p>
778
+ <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">cusp_areas</span><span class="p">(</span><span class="n">policy</span><span class="o">=</span><span class="s1">&#39;greedy&#39;</span><span class="p">,</span> <span class="n">first_cusps</span><span class="o">=</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">2</span><span class="p">])</span>
779
+ <span class="go">[1.32287565553230, 5.29150262212918, 1.32287565553229]</span>
677
780
  </pre></div>
678
781
  </div>
679
- <p>If <code class="docutils literal notranslate"><span class="pre">method='maximal'</span></code>, <code class="docutils literal notranslate"><span class="pre">policy='unbiased'</span></code> and
680
- <code class="docutils literal notranslate"><span class="pre">verified=True</span></code>, the result is an invariant of the manifold with
681
- labeled cusps and the corresponding cusp neighborhoods are maximal
682
- in that every cusp neighborhood is touching some (not necessarily
683
- distinct) cusp neighborhood.</p>
684
- <p>Area of the cusp neighborhood touching itself for a one-cusped
685
- manifold:</p>
686
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: M=Manifold(&quot;v1959&quot;)
687
- sage: M.cusp_areas(method=&#39;maximal&#39;, verified=True, bits_prec=100) # doctest: +NUMERIC15
688
- [7.15679216175810579?]
782
+ <p>An incomplete list can be given to <code class="xref py py-attr docutils literal notranslate"><span class="pre">first_cusps</span></code>. In this case,
783
+ the list is automatically completed by appending the remaining cusps in
784
+ order. Thus, the above call is equivalent to:</p>
785
+ <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">cusp_areas</span><span class="p">(</span><span class="n">policy</span><span class="o">=</span><span class="s1">&#39;greedy&#39;</span><span class="p">,</span> <span class="n">first_cusps</span><span class="o">=</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
786
+ <span class="go">[1.32287565553230, 5.29150262212918, 1.32287565553229]</span>
689
787
  </pre></div>
690
788
  </div>
789
+ <p>Under the hood, this method is using
790
+ <a class="reference internal" href="#snappy.Manifold.cusp_area_matrix" title="snappy.Manifold.cusp_area_matrix"><code class="xref py py-meth docutils literal notranslate"><span class="pre">cusp_area_matrix()</span></code></a>.</p>
791
+ <p><strong>Verified computation</strong></p>
792
+ <p>If <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">False</span></code>, floating-point issues can arise resulting in
793
+ incorrect values. The method can be made
794
+ <a class="reference internal" href="verify.html#verify-primer"><span class="std std-ref">verified</span></a> by passing <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">True</span></code>:</p>
795
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: M=Manifold(&quot;s776&quot;)
796
+ sage: M.cusp_areas(verified=True) # doctest: +NUMERIC9
797
+ [2.64575131107?, 2.64575131107?, 2.64575131107?]
798
+ </pre></div>
799
+ </div>
800
+ <dl class="field-list simple">
801
+ <dt class="field-odd">Parameters<span class="colon">:</span></dt>
802
+ <dd class="field-odd"><ul class="simple">
803
+ <li><p><strong>verified</strong> – Use <a class="reference internal" href="verify.html#verify-primer"><span class="std std-ref">verified computation</span></a>.</p></li>
804
+ <li><p><strong>bits_prec</strong> – Precision used for computation. Increase if computation
805
+ did not succeed or a more precise result is desired.</p></li>
806
+ <li><p><strong>method</strong> – Passed to <a class="reference internal" href="#snappy.Manifold.cusp_area_matrix" title="snappy.Manifold.cusp_area_matrix"><code class="xref py py-meth docutils literal notranslate"><span class="pre">cusp_area_matrix()</span></code></a>. If set
807
+ to a value different from the default <code class="docutils literal notranslate"><span class="pre">maximal</span></code>, the cusp
808
+ neighborhoods stop growing when the corresponding value
809
+ in the computed cusp area matrix is exceeded. At this point,
810
+ the cusp neighborhood might not necessarily touch any other
811
+ cusp neighborhood since we do not use the maximal cusp area
812
+ matrix.</p></li>
813
+ <li><p><strong>policy</strong> – Specifies process of choosing cusp neighborhoods.
814
+ Either <code class="docutils literal notranslate"><span class="pre">unbiased</span></code> or <code class="docutils literal notranslate"><span class="pre">greedy</span></code>, see above.</p></li>
815
+ <li><p><strong>first_cusps</strong> – Preference order of cusps.
816
+ Only relevant if <code class="xref py py-attr docutils literal notranslate"><span class="pre">policy='greedy'</span></code>, see above.</p></li>
817
+ </ul>
818
+ </dd>
819
+ <dt class="field-even">Returns<span class="colon">:</span></dt>
820
+ <dd class="field-even"><p>Areas of maximal embedded and disjoint cusp neighborhoods
821
+ (default). Or areas of some embedded and disjoint cusp
822
+ neighborhoods (if <code class="xref py py-attr docutils literal notranslate"><span class="pre">method</span></code> switches to older algorithm).</p>
823
+ </dd>
824
+ </dl>
691
825
  </dd></dl>
692
826
 
693
827
  <dl class="py method">
694
828
  <dt class="sig sig-object py" id="snappy.Manifold.cusp_info">
695
- <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>, <em class="sig-param"><span class="n"><span class="pre">verified</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">bits_prec</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.Manifold.cusp_info" title="Permalink to this definition"></a></dt>
829
+ <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>, <em class="sig-param"><span class="n"><span class="pre">verified</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">bits_prec</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.Manifold.cusp_info" title="Link to this definition"></a></dt>
696
830
  <dd><p>Returns an info object containing information about the given
697
831
  cusp. Usage:</p>
698
832
  <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;v3227(0,0)(1,2)(3,2)&#39;</span><span class="p">)</span>
@@ -744,7 +878,7 @@ sage: M.cusp_info(&#39;shape&#39;, verified = True, bits_prec = 60) # doctest: +
744
878
 
745
879
  <dl class="py method">
746
880
  <dt class="sig sig-object py" id="snappy.Manifold.cusp_neighborhood">
747
- <span class="sig-name descname"><span class="pre">cusp_neighborhood</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.cusp_neighborhood" title="Permalink to this definition"></a></dt>
881
+ <span class="sig-name descname"><span class="pre">cusp_neighborhood</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.CuspNeighborhood" title="SnapPy.CuspNeighborhood"><span class="pre">CuspNeighborhood</span></a></span></span><a class="headerlink" href="#snappy.Manifold.cusp_neighborhood" title="Link to this definition"></a></dt>
748
882
  <dd><p>Returns information about the cusp neighborhoods of the
749
883
  manifold, in the form of data about the corresponding horoball
750
884
  diagrams in hyperbolic 3-space.</p>
@@ -761,43 +895,40 @@ diagrams in hyperbolic 3-space.</p>
761
895
 
762
896
  <dl class="py method">
763
897
  <dt class="sig sig-object py" id="snappy.Manifold.cusp_translations">
764
- <span class="sig-name descname"><span class="pre">cusp_translations</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">policy</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'unbiased'</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">'trigDependentTryCanonize'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verified</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">bits_prec</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">first_cusps</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[]</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.cusp_translations" title="Permalink to this definition"></a></dt>
765
- <dd><p>Picks disjoint cusp neighborhoods and returns the respective
766
- (complex) Euclidean translations of the meridian and longitude for
767
- each cusp. The method takes the same arguments as
768
- <a class="reference internal" href="#snappy.Manifold.cusp_areas" title="snappy.Manifold.cusp_areas"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Manifold.cusp_areas()</span></code></a> and uses that method to pick the
769
- cusp neighborhood. The result is a list of pairs, the second entry
770
- corresponding to a longitude is always real:</p>
898
+ <span class="sig-name descname"><span class="pre">cusp_translations</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">policy</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">'unbiased'</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">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">'maximal'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verified</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">bits_prec</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>, <em class="sig-param"><span class="n"><span class="pre">first_cusps</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">List</span><span class="p"><span class="pre">[</span></span><span class="pre">int</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">[]</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.cusp_translations" title="Link to this definition"></a></dt>
899
+ <dd><p>Returns a list of the (complex) Euclidean translations corresponding to the
900
+ meridian and longitude of each cusp.</p>
901
+ <p>That is, the method uses <a class="reference internal" href="#snappy.Manifold.cusp_areas" title="snappy.Manifold.cusp_areas"><code class="xref py py-meth docutils literal notranslate"><span class="pre">cusp_areas()</span></code></a> to find
902
+ (maximal) embedded and disjoint cusp neighborhoods. It then uses the
903
+ boundaries of these cusp neighborhoods to measure the meridian and
904
+ longitude of each cusp. The result is a pair for each cusp. The first
905
+ entry of the pair corresponds to the meridian and is complex. The
906
+ second entry corresponds to the longitude and is always real:</p>
771
907
  <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">Manifold</span><span class="p">(</span><span class="s2">&quot;s776&quot;</span><span class="p">)</span>
772
908
  <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_translations</span><span class="p">()</span>
773
909
  <span class="go">[(0.500000000000000 + 1.32287565553230*I, 2.00000000000000), (0.500000000000000 + 1.32287565553230*I, 2.00000000000000), (0.499999999999999 + 1.32287565553230*I, 2.00000000000000)]</span>
774
910
  </pre></div>
775
911
  </div>
776
- <p>Arguments such as <code class="docutils literal notranslate"><span class="pre">policy='greedy'</span></code> are interpreted the same way as
777
- for <a class="reference internal" href="#snappy.Manifold.cusp_areas" title="snappy.Manifold.cusp_areas"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Manifold.cusp_areas()</span></code></a>:</p>
778
- <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">cusp_translations</span><span class="p">(</span><span class="n">policy</span> <span class="o">=</span> <span class="s1">&#39;greedy&#39;</span><span class="p">,</span> <span class="n">first_cusps</span> <span class="o">=</span> <span class="p">[],</span> <span class="n">bits_prec</span> <span class="o">=</span> <span class="mi">100</span><span class="p">)</span>
912
+ <p>It takes the same arguments as <a class="reference internal" href="#snappy.Manifold.cusp_areas" title="snappy.Manifold.cusp_areas"><code class="xref py py-meth docutils literal notranslate"><span class="pre">cusp_areas()</span></code></a>:</p>
913
+ <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">cusp_translations</span><span class="p">(</span><span class="n">policy</span> <span class="o">=</span> <span class="s1">&#39;greedy&#39;</span><span class="p">)</span>
779
914
  <span class="go">[(0.70710678118654752440084436210 + 1.8708286933869706927918743662*I, 2.8284271247461900976033774484), (0.35355339059327376220042218105 + 0.93541434669348534639593718308*I, 1.4142135623730950488016887242), (0.35355339059327376220042218105 + 0.93541434669348534639593718308*I, 1.4142135623730950488016887242)]</span>
780
915
  </pre></div>
781
916
  </div>
782
- <p>and can return verified intervals:</p>
783
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: M.cusp_translations(method = &#39;maximal&#39;, verified = True) # doctest: +NUMERIC9
917
+ <p><strong>Verified computations</strong></p>
918
+ <p>If <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">False</span></code>, floating-point issues can arise resulting in
919
+ incorrect values. The method can be made
920
+ <a class="reference internal" href="verify.html#verify-primer"><span class="std std-ref">verified</span></a> by passing <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">True</span></code>:</p>
921
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: M.cusp_translations(verified = True) # doctest: +NUMERIC9
784
922
  [(0.50000000000? + 1.32287565553?*I, 2.00000000000?), (0.500000000000? + 1.32287565554?*I, 2.00000000000?), (0.500000000000? + 1.32287565554?*I, 2.00000000000?)]
785
923
  </pre></div>
786
924
  </div>
787
- <p>that are guaranteed to contain the true translations of cusp neighborhoods
788
- verified to be disjoint (the element corresponding to a longitude
789
- is always in a <code class="docutils literal notranslate"><span class="pre">RealIntervalField</span></code>).</p>
790
- <p><strong>Remark:</strong> The default <code class="docutils literal notranslate"><span class="pre">method</span> <span class="pre">=</span> <span class="pre">'trigDependentTryCanonize'</span></code> is
791
- (potentially) non-deterministic and thus the result of</p>
792
- <blockquote>
793
- <div><p>[ M.cusp_translations()[i] for i in range(M.num_cusps()) ]</p>
794
- </div></blockquote>
795
- <p>might not correspond to disjoint cusp neighborhoods.</p>
925
+ <p>Note that the first element of each pair is a SageMath <code class="docutils literal notranslate"><span class="pre">ComplexIntervalField</span></code> and
926
+ the second element a <code class="docutils literal notranslate"><span class="pre">RealIntervalField</span></code>.</p>
796
927
  </dd></dl>
797
928
 
798
929
  <dl class="py method">
799
930
  <dt class="sig sig-object py" id="snappy.Manifold.dehn_fill">
800
- <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.Manifold.dehn_fill" title="Permalink to this definition"></a></dt>
931
+ <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.Manifold.dehn_fill" title="Link to this definition"></a></dt>
801
932
  <dd><p>Set the Dehn filling coefficients of the cusps. This can be
802
933
  specified in the following ways, where the cusps are numbered
803
934
  by 0,1,…,(num_cusps - 1).</p>
@@ -838,8 +969,8 @@ by 0,1,…,(num_cusps - 1).</p>
838
969
 
839
970
  <dl class="py method">
840
971
  <dt class="sig sig-object py" id="snappy.Manifold.dirichlet_domain">
841
- <span class="sig-name descname"><span class="pre">dirichlet_domain</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">vertex_epsilon</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">default_vertex_epsilon</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">displacement</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">(0.0,</span> <span class="pre">0.0,</span> <span class="pre">0.0)</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">centroid_at_origin</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">maximize_injectivity_radius</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">include_words</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.Manifold.dirichlet_domain" title="Permalink to this definition"></a></dt>
842
- <dd><p>Returns a DirichletDomain object representing a Dirichlet
972
+ <span class="sig-name descname"><span class="pre">dirichlet_domain</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">vertex_epsilon</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1e-08</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">displacement</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">(0.0,</span> <span class="pre">0.0,</span> <span class="pre">0.0)</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">centroid_at_origin</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">maximize_injectivity_radius</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">include_words</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> <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.DirichletDomain" title="SnapPy.DirichletDomain"><span class="pre">DirichletDomain</span></a></span></span><a class="headerlink" href="#snappy.Manifold.dirichlet_domain" title="Link to this definition"></a></dt>
973
+ <dd><p>Returns a <a class="reference internal" href="additional_classes.html#snappy.DirichletDomain" title="snappy.DirichletDomain"><code class="xref py py-class docutils literal notranslate"><span class="pre">DirichletDomain</span></code></a> object representing a Dirichlet
843
974
  domain of the hyperbolic manifold, typically centered at a
844
975
  point which is a local maximum of injectivity radius. It will
845
976
  have ideal vertices if the manifold is not closed.</p>
@@ -852,7 +983,7 @@ have ideal vertices if the manifold is not closed.</p>
852
983
  </div>
853
984
  <p>The group elements for the face-pairings of the Dirichlet domain
854
985
  can be given as words in the original generators of the
855
- (unsimplified) fundamental group by setting include_words = True:</p>
986
+ (unsimplified) fundamental group by setting <code class="xref py py-attr docutils literal notranslate"><span class="pre">include_words</span> <span class="pre">=</span> <span class="pre">True</span></code>:</p>
856
987
  <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nb">sorted</span><span class="p">(</span><span class="n">M</span><span class="o">.</span><span class="n">dirichlet_domain</span><span class="p">(</span><span class="n">include_words</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span><span class="o">.</span><span class="n">pairing_words</span><span class="p">())</span>
857
988
  <span class="go">[&#39;A&#39;, ...]</span>
858
989
  </pre></div>
@@ -876,7 +1007,7 @@ the default choices are shown below:</p>
876
1007
 
877
1008
  <dl class="py method">
878
1009
  <dt class="sig sig-object py" id="snappy.Manifold.drill">
879
- <span class="sig-name descname"><span class="pre">drill</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">which_curve</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">max_segments</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.Manifold.drill" title="Permalink to this definition"></a></dt>
1010
+ <span class="sig-name descname"><span class="pre">drill</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">which_curve</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">max_segments</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.Manifold.drill" title="Link to this definition"></a></dt>
880
1011
  <dd><p>Drills out the specified dual curve from among all dual curves
881
1012
  with at most max_segments, which defaults to 6. The method
882
1013
  dual_curve allows one to see the properties of curves before
@@ -891,38 +1022,35 @@ choosing which one to drill out.</p>
891
1022
 
892
1023
  <dl class="py method">
893
1024
  <dt class="sig sig-object py" id="snappy.Manifold.drill_word">
894
- <span class="sig-name descname"><span class="pre">drill_word</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">word</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verified</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">bits_prec</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">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><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.drill_word" title="Permalink to this definition"></a></dt>
1025
+ <span class="sig-name descname"><span class="pre">drill_word</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">word</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verified</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">bits_prec</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>, <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><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.Manifold" title="snappy.Manifold"><span class="pre">Manifold</span></a></span></span><a class="headerlink" href="#snappy.Manifold.drill_word" title="Link to this definition"></a></dt>
895
1026
  <dd><p>Drills the geodesic corresponding to the given word in the unsimplified
896
- fundamental group.</p>
897
- <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</span> <span class="kn">import</span> <span class="n">Manifold</span>
898
- <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;m004&quot;</span><span class="p">)</span>
899
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">length_spectrum</span><span class="p">(</span><span class="mf">1.2</span><span class="p">,</span> <span class="n">include_words</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span> <span class="n">grouped</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span>
900
- <span class="go">mult length topology parity word</span>
901
- <span class="go">1 1.08707014499574 - 1.72276844987009*I circle + a</span>
902
- <span class="go">1 1.08707014499574 + 1.72276844987009*I circle + bC</span>
1027
+ fundamental group. Here is an example:</p>
1028
+ <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">Manifold</span><span class="p">(</span><span class="s2">&quot;m004&quot;</span><span class="p">)</span>
1029
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">length_spectrum_alt</span><span class="p">(</span><span class="n">max_len</span><span class="o">=</span><span class="mf">1.2</span><span class="p">)</span>
1030
+ <span class="go">[Length Core curve Word</span>
1031
+ <span class="go"> 1.08707014499574 + 1.72276844987009*I - bC,</span>
1032
+ <span class="go"> 1.08707014499574 - 1.72276844987009*I - a]</span>
903
1033
  <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">drill_word</span><span class="p">(</span><span class="s1">&#39;a&#39;</span><span class="p">)</span>
904
1034
  <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">identify</span><span class="p">()</span>
905
1035
  <span class="go">[m129(0,0)(0,0), 5^2_1(0,0)(0,0), L5a1(0,0)(0,0), ooct01_00001(0,0)(0,0)]</span>
906
1036
  </pre></div>
907
1037
  </div>
908
- <p>The last cusp of the new manifold corresponds to the drilled
909
- geodesic and the longitude and meridian for that cusp are chosen such that
910
- (1,0)-filling results in the original (undrilled) manifold. The orientation
911
- of the new longitude is chosen so that it is parallel to the closed geodesic.
912
- That is, the new longitude is homotopic to the closed geodesic when embedding
913
- the drilled manifold into the original manifold.</p>
914
- <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">dehn_fill</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>
1038
+ <p>The last cusp of the resulting manifold corresponds to the drilled
1039
+ geodesic. The longitude and meridian for that cusp are chosen such that
1040
+ <code class="docutils literal notranslate"><span class="pre">(1,0)</span></code>-filling the last cusp results in the given (undrilled) manifold:</p>
1041
+ <div class="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">dehn_fill</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="o">-</span><span class="mi">1</span><span class="p">)</span>
915
1042
  <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">is_isometric_to</span><span class="p">(</span><span class="n">N</span><span class="p">)</span>
916
1043
  <span class="go">True</span>
917
1044
  <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">cusp_info</span><span class="p">(</span><span class="mi">1</span><span class="p">)[</span><span class="s1">&#39;core_length&#39;</span><span class="p">]</span>
918
1045
  <span class="go">1.08707014499574 - 1.72276844987009*I</span>
919
1046
  </pre></div>
920
1047
  </div>
921
- <p>If the drilled geodesic coincides with a core curve of a filled cusp, the
922
- cusp is unfilled instead and the longitude and meridian changed so that
923
- the above again applies. The cusp order is also changed so that the unfilled
924
- cusp becomes the last cusp.</p>
925
- <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;m004(2,3)&quot;</span><span class="p">)</span>
1048
+ <p>The orientation of the new longitude is chosen so that it is parallel to
1049
+ the closed geodesic. That is, the new longitude is homotopic to the closed
1050
+ geodesic when embedding the drilled manifold into the given manifold.</p>
1051
+ <p>If the given geodesic coincides with a core curve of a filled cusp, the
1052
+ cusp is unfilled instead:</p>
1053
+ <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">Manifold</span><span class="p">(</span><span class="s2">&quot;m004(2,3)&quot;</span><span class="p">)</span>
926
1054
  <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">volume</span><span class="p">()</span>
927
1055
  <span class="go">1.73712388065</span>
928
1056
  <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">0</span><span class="p">)[</span><span class="s1">&#39;core_length&#39;</span><span class="p">]</span>
@@ -934,30 +1062,19 @@ cusp becomes the last cusp.</p>
934
1062
  <span class="go">m004_drilled(0,0)</span>
935
1063
  <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>
936
1064
  <span class="go">1</span>
937
- <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">1</span><span class="p">,</span><span class="mi">0</span><span class="p">))</span>
938
- <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>
939
- <span class="go">1.73712388065</span>
940
1065
  </pre></div>
941
1066
  </div>
942
- <p>Even though the output of the drilling geodesic algorithm is a
943
- triangulation and thus combinatorial in nature, the intermediate
944
- computations to compute the intersections of the geodesic with the
945
- faces of the tetrahedra is numerical. Sometimes it is necessary to increase
946
- the precision with <cite>bits_prec</cite> to make this computation accurate or succeed.
947
- If <cite>verified = True</cite> is specified, intervals are used for all computations
948
- and the result is provably correct (only supported when used inside
949
- SageMath).
950
- That is, the algorithm will fail with an exception (most likely
951
- InsufficientPrecisionError) if insufficient precision is used. Example of
952
- verified computation:</p>
953
- <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="s2">&quot;m004(2,3)&quot;</span><span class="p">)</span>
954
- <span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">.</span><span class="n">drill_word</span><span class="p">(</span><span class="s1">&#39;caa&#39;</span><span class="p">,</span> <span class="n">verified</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span> <span class="n">bits_prec</span> <span class="o">=</span> <span class="mi">100</span><span class="p">)</span>
955
- <span class="n">m004_drilled</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">0</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span>
1067
+ <p>In this case, the peripheral information is also
1068
+ updated such that the above remark about <code class="docutils literal notranslate"><span class="pre">(1,0)</span></code>-filling applies again:</p>
1069
+ <div class="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">dehn_fill</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="o">-</span><span class="mi">1</span><span class="p">)</span>
1070
+ <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>
1071
+ <span class="go">1.73712388065</span>
956
1072
  </pre></div>
957
1073
  </div>
958
- <p>An example where we drill the core geodesic:</p>
959
- <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>
960
- <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;v2986(3,4)&quot;</span><span class="p">)</span>
1074
+ <p>That is, the longitude and meridian of the unfilled cusps are reinstalled
1075
+ and the cusps reindexed so that the unfilled cusp becomes the last cusp.</p>
1076
+ <p>Here is another example where we drill the core geodesic:</p>
1077
+ <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">Manifold</span><span class="p">(</span><span class="s2">&quot;v2986(3,4)&quot;</span><span class="p">)</span>
961
1078
  <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">drill_word</span><span class="p">(</span><span class="s1">&#39;EdFgabcGEdFgaDcc&#39;</span><span class="p">)</span>
962
1079
  <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">Manifold</span><span class="p">(</span><span class="s2">&quot;v2986&quot;</span><span class="p">),</span> <span class="n">return_isometries</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span>
963
1080
  <span class="go">[0 -&gt; 0</span>
@@ -966,17 +1083,52 @@ verified computation:</p>
966
1083
  <span class="go"> Does not extend to link]</span>
967
1084
  </pre></div>
968
1085
  </div>
1086
+ <p>While the result of drilling a geodesic is a triangulation and thus
1087
+ combinatorial in nature, some intermediate computations (for example,
1088
+ to compute the intersections of the geodesic with the faces of the
1089
+ tetrahedra) are numerical. Sometimes, it is necessary to increase the
1090
+ precision with <code class="xref py py-attr docutils literal notranslate"><span class="pre">bits_prec</span></code> to make the method succeed and produce
1091
+ the correct result.</p>
1092
+ <p><strong>Verified computation</strong></p>
1093
+ <p>If <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">False</span></code>, floating-point issues can arise resulting
1094
+ in drilling the wrong loop. The method can be made
1095
+ <a class="reference internal" href="verify.html#verify-primer"><span class="std std-ref">verified</span></a> by passing <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">True</span></code>:</p>
1096
+ <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="s2">&quot;m004(2,3)&quot;</span><span class="p">)</span>
1097
+ <span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">.</span><span class="n">drill_word</span><span class="p">(</span><span class="s1">&#39;caa&#39;</span><span class="p">,</span> <span class="n">verified</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span> <span class="n">bits_prec</span> <span class="o">=</span> <span class="mi">100</span><span class="p">)</span>
1098
+ <span class="n">m004_drilled</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">0</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span>
1099
+ </pre></div>
1100
+ </div>
1101
+ <p>That is, if the precision is insufficient to prove the result is correct,
1102
+ the algorithm fails with an exception (most likely
1103
+ <code class="docutils literal notranslate"><span class="pre">InsufficientPrecisionError</span></code>).</p>
1104
+ <dl class="field-list simple">
1105
+ <dt class="field-odd">Parameters<span class="colon">:</span></dt>
1106
+ <dd class="field-odd"><ul class="simple">
1107
+ <li><p><strong>word</strong> – The word in the unsimplified fundamental group specifying the
1108
+ geodesic to be drilled.</p></li>
1109
+ <li><p><strong>bits_prec</strong> – The precision used in the intermediate computation. Increase
1110
+ if the computation failed.</p></li>
1111
+ <li><p><strong>verified</strong> – Use <a class="reference internal" href="verify.html#verify-primer"><span class="std std-ref">verified computation</span></a>.</p></li>
1112
+ <li><p><strong>verbose</strong> – Print intermediate results and statistics.</p></li>
1113
+ </ul>
1114
+ </dd>
1115
+ <dt class="field-even">Returns<span class="colon">:</span></dt>
1116
+ <dd class="field-even"><p>Manifold obtained by drilling geodesic. <code class="docutils literal notranslate"><span class="pre">(1,0)</span></code>-filling the
1117
+ last cusp gives the given (undrilled) manifold.</p>
1118
+ </dd>
1119
+ </dl>
969
1120
  </dd></dl>
970
1121
 
971
1122
  <dl class="py method">
972
1123
  <dt class="sig sig-object py" id="snappy.Manifold.drill_words">
973
- <span class="sig-name descname"><span class="pre">drill_words</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">words</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Sequence</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verified</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">bits_prec</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">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><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.drill_words" title="Permalink to this definition"></a></dt>
974
- <dd><p>A generalization of M.drill_word taking a list of words to
975
- drill several geodesics simultaneously.</p>
976
- <p>Here is an example where we drill the core curve corresponding to the third cusp
977
- and a geodesic that is not a core curve:</p>
978
- <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</span> <span class="kn">import</span> <span class="n">Manifold</span>
979
- <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;t12047(0,0)(1,3)(1,4)(1,5)&quot;</span><span class="p">)</span>
1124
+ <span class="sig-name descname"><span class="pre">drill_words</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">words</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Sequence</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verified</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">bits_prec</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>, <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><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.Manifold" title="snappy.Manifold"><span class="pre">Manifold</span></a></span></span><a class="headerlink" href="#snappy.Manifold.drill_words" title="Link to this definition"></a></dt>
1125
+ <dd><p>A generalization of <a class="reference internal" href="#snappy.Manifold.drill_word" title="snappy.Manifold.drill_word"><code class="xref py py-meth docutils literal notranslate"><span class="pre">drill_word</span></code></a> to drill
1126
+ several geodesics simultaneously. It takes a list of words in the
1127
+ unsimplified fundamental group.</p>
1128
+ <p>Here is an example where we drill two geodesics. One of the geodesics is
1129
+ the core curve corresponding to the third cusp. The other geodesic is not
1130
+ a core curve:</p>
1131
+ <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">Manifold</span><span class="p">(</span><span class="s2">&quot;t12047(0,0)(1,3)(1,4)(1,5)&quot;</span><span class="p">)</span>
980
1132
  <span class="gp">&gt;&gt;&gt; </span><span class="p">[</span> <span class="n">info</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;core_length&#39;</span><span class="p">)</span> <span class="k">for</span> <span class="n">info</span> <span class="ow">in</span> <span class="n">M</span><span class="o">.</span><span class="n">cusp_info</span><span class="p">()</span> <span class="p">]</span>
981
1133
  <span class="go">[None,</span>
982
1134
  <span class="go"> 0.510804267610103 + 1.92397456664239*I,</span>
@@ -992,15 +1144,17 @@ and a geodesic that is not a core curve:</p>
992
1144
  <span class="go">t12047_drilled(0,0)(1,3)(1,5)(0,0)(0,0)</span>
993
1145
  </pre></div>
994
1146
  </div>
995
- <p>The last n cusps correspond to the n geodesics that were drilled, appearing
996
- in the same order the words for the geodesics were given. Note that in the
997
- above example, the drilled manifold has only five cusps even though the
998
- original manifold had four cusps and we drilled two geodesics. This is
999
- because one geodesic was a core curve. The corresponding cusp was unfilled
1000
- (from (1,4)) and grouped with the other cusps coming from drilling.</p>
1001
- <p>We obtain the original (undrilled) manifold by (1,0)-filling the last n cusps.</p>
1002
- <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">dehn_fill</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">3</span><span class="p">)</span>
1003
- <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">1</span><span class="p">,</span><span class="mi">0</span><span class="p">),</span> <span class="mi">4</span><span class="p">)</span>
1147
+ <p>Let n be the number of geodesics that were drilled. Then the last n
1148
+ cusps correspond to the drilled geodesics and appear in the same order than
1149
+ the geodesics were given as words. Note that in the above example, we expect
1150
+ six cusps since we started with four cusps and drilled two geodesics. However,
1151
+ we only obtain five cusps because one geodesic was a core curve. The
1152
+ corresponding cusp was unfilled (from <code class="docutils literal notranslate"><span class="pre">(1,4)</span></code>) and grouped with the other
1153
+ cusps coming from drilling.</p>
1154
+ <p>We obtain the given (undrilled) manifold by <code class="docutils literal notranslate"><span class="pre">(1,0)</span></code>-filling the last n
1155
+ cusps.</p>
1156
+ <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">dehn_fill</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="o">-</span><span class="mi">2</span><span class="p">)</span>
1157
+ <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">1</span><span class="p">,</span><span class="mi">0</span><span class="p">),</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
1004
1158
  <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">is_isometric_to</span><span class="p">(</span><span class="n">N</span><span class="p">)</span>
1005
1159
  <span class="go">True</span>
1006
1160
  <span class="gp">&gt;&gt;&gt; </span><span class="p">[</span> <span class="n">info</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;core_length&#39;</span><span class="p">)</span> <span class="k">for</span> <span class="n">info</span> <span class="ow">in</span> <span class="n">N</span><span class="o">.</span><span class="n">cusp_info</span><span class="p">()</span> <span class="p">]</span>
@@ -1011,11 +1165,28 @@ because one geodesic was a core curve. The corresponding cusp was unfilled
1011
1165
  <span class="go"> 1.43914411734251 + 2.66246879992796*I]</span>
1012
1166
  </pre></div>
1013
1167
  </div>
1168
+ <dl class="field-list simple">
1169
+ <dt class="field-odd">Parameters<span class="colon">:</span></dt>
1170
+ <dd class="field-odd"><ul class="simple">
1171
+ <li><p><strong>word</strong> – The words in the unsimplified fundamental group specifying the
1172
+ geodesics to be drilled.</p></li>
1173
+ <li><p><strong>bits_prec</strong> – The precision used in the intermediate computation. Increase
1174
+ if the computation failed.</p></li>
1175
+ <li><p><strong>verified</strong> – Use <a class="reference internal" href="verify.html#verify-primer"><span class="std std-ref">verified computation</span></a>.</p></li>
1176
+ <li><p><strong>verbose</strong> – Print intermediate results and statistics.</p></li>
1177
+ </ul>
1178
+ </dd>
1179
+ <dt class="field-even">Returns<span class="colon">:</span></dt>
1180
+ <dd class="field-even"><p>Manifold obtained by drilling geodesics. <code class="docutils literal notranslate"><span class="pre">(1,0)</span></code>-filling the
1181
+ last n cusps gives the given (undrilled) manifold where n is the
1182
+ number of given words.</p>
1183
+ </dd>
1184
+ </dl>
1014
1185
  </dd></dl>
1015
1186
 
1016
1187
  <dl class="py method">
1017
1188
  <dt class="sig sig-object py" id="snappy.Manifold.dual_curves">
1018
- <span class="sig-name descname"><span class="pre">dual_curves</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">max_segments</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.Manifold.dual_curves" title="Permalink to this definition"></a></dt>
1189
+ <span class="sig-name descname"><span class="pre">dual_curves</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">max_segments</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.Manifold.dual_curves" title="Link to this definition"></a></dt>
1019
1190
  <dd><p>Constructs a <em>reasonable</em> selection of simple closed curves in
1020
1191
  a manifold’s dual 1-skeleton. In particular, it returns those
1021
1192
  that appear to represent geodesics. The resulting curves can
@@ -1053,7 +1224,7 @@ max_segments</p>
1053
1224
 
1054
1225
  <dl class="py method">
1055
1226
  <dt class="sig sig-object py" id="snappy.Manifold.edge_valences">
1056
- <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.Manifold.edge_valences" title="Permalink to this definition"></a></dt>
1227
+ <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.Manifold.edge_valences" title="Link to this definition"></a></dt>
1057
1228
  <dd><p>Returns a dictionary whose keys are the valences of the edges
1058
1229
  in the triangulation, and the value associated to a key is the
1059
1230
  number of edges of that valence.</p>
@@ -1066,7 +1237,7 @@ number of edges of that valence.</p>
1066
1237
 
1067
1238
  <dl class="py method">
1068
1239
  <dt class="sig sig-object py" id="snappy.Manifold.exterior_to_link">
1069
- <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.Manifold.exterior_to_link" title="Permalink to this definition"></a></dt>
1240
+ <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.Manifold.exterior_to_link" title="Link to this definition"></a></dt>
1070
1241
  <dd><p>For a triangulation of the exterior of a link in the 3-sphere,
1071
1242
  return a planar diagram for the link. The peripheral curves whose
1072
1243
  Dehn filling is the 3-sphere are <strong>part of the input</strong>, specified
@@ -1130,7 +1301,7 @@ each component of the link may not be preserved.</p>
1130
1301
 
1131
1302
  <dl class="py method">
1132
1303
  <dt class="sig sig-object py" id="snappy.Manifold.filled_triangulation">
1133
- <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.Manifold.filled_triangulation" title="Permalink to this definition"></a></dt>
1304
+ <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.Manifold" title="snappy.Manifold"><span class="pre">snappy.Manifold</span></a></span></span><a class="headerlink" href="#snappy.Manifold.filled_triangulation" title="Link to this definition"></a></dt>
1134
1305
  <dd><p>Return a new Manifold where the specified cusps have been
1135
1306
  permanently filled in.</p>
1136
1307
  <p>Filling all the cusps results in a Triangulation rather
@@ -1153,8 +1324,8 @@ structures when there are no cusps.</p>
1153
1324
 
1154
1325
  <dl class="py method">
1155
1326
  <dt class="sig sig-object py" id="snappy.Manifold.fundamental_group">
1156
- <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.Manifold.fundamental_group" title="Permalink to this definition"></a></dt>
1157
- <dd><p>Return a HolonomyGroup representing the fundamental group of
1327
+ <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"><a class="reference internal" href="additional_classes.html#snappy.HolonomyGroup" title="SnapPy.HolonomyGroup"><span class="pre">HolonomyGroup</span></a></span></span><a class="headerlink" href="#snappy.Manifold.fundamental_group" title="Link to this definition"></a></dt>
1328
+ <dd><p>Return a <a class="reference internal" href="additional_classes.html#snappy.HolonomyGroup" title="snappy.HolonomyGroup"><code class="xref py py-class docutils literal notranslate"><span class="pre">HolonomyGroup</span></code></a> representing the fundamental group of
1158
1329
  the manifold, together with its holonomy representation. If
1159
1330
  integer Dehn surgery parameters have been set, then the
1160
1331
  corresponding peripheral elements are killed.</p>
@@ -1190,7 +1361,7 @@ corresponding peripheral elements are killed.</p>
1190
1361
 
1191
1362
  <dl class="py method">
1192
1363
  <dt class="sig sig-object py" id="snappy.Manifold.gluing_equations">
1193
- <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.Manifold.gluing_equations" title="Permalink to this definition"></a></dt>
1364
+ <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.Manifold.gluing_equations" title="Link to this definition"></a></dt>
1194
1365
  <dd><p>In the default mode, this function returns a matrix with rows
1195
1366
  of the form</p>
1196
1367
  <blockquote>
@@ -1231,9 +1402,8 @@ function returns a list of tuples of the form:</p>
1231
1402
 
1232
1403
  <dl class="py method">
1233
1404
  <dt class="sig sig-object py" id="snappy.Manifold.gluing_equations_pgl">
1234
- <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.Manifold.gluing_equations_pgl" title="Permalink to this definition"></a></dt>
1235
- <dd><p>M.gluing_equations_pgl(N = 2, equation_type=’all’)</p>
1236
- <p>Returns a NeumannZagierTypeEquations object that contains a matrix
1405
+ <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.Manifold.gluing_equations_pgl" title="Link to this definition"></a></dt>
1406
+ <dd><p>Returns a NeumannZagierTypeEquations object that contains a matrix
1237
1407
  encoding the gluing equations for boundary-parabolic PGL(N,C)
1238
1408
  representations together with explanations of the meaning
1239
1409
  of the rows and the columns of the matrix.</p>
@@ -1242,7 +1412,7 @@ as described in
1242
1412
  Stavros Garoufalidis, Matthias Goerner, Christian K. Zickert:
1243
1413
  “Gluing Equations for PGL(n,C)-Representations of 3-Manifolds”
1244
1414
  (<a class="reference external" href="http://arxiv.org/abs/1207.6711">http://arxiv.org/abs/1207.6711</a>).</p>
1245
- <p>The result of the traditional gluing_equations() can be obtained from
1415
+ <p>The result of the <a class="reference internal" href="#snappy.Manifold.gluing_equations" title="snappy.Manifold.gluing_equations"><code class="xref py py-meth docutils literal notranslate"><span class="pre">gluing_equations()</span></code></a> can be obtained from
1246
1416
  the general method by:</p>
1247
1417
  <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>
1248
1418
  <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>
@@ -1267,17 +1437,17 @@ the columns and rows:</p>
1267
1437
  </div>
1268
1438
  <p>The first row of the matrix means that the edge equation for
1269
1439
  edge 0 is</p>
1270
- <blockquote>
1271
- <div><p>z_0000_0 ^ 2 * zp_0000_0 * z_0000_1 * zpp_0000_1 ^ 2 = 1.</p>
1272
- </div></blockquote>
1440
+ <div class="math notranslate nohighlight">
1441
+ \[{z_{0000,0}}^2 * z'_{0000,0} * z_{0000,1} * {z''_{0000,1}}^2 = 1.\]</div>
1273
1442
  <p>Similarly, the next row encodes the edge equation for the other edge
1274
1443
  and the next two rows encode peripheral equations.</p>
1275
- <p>Following the SnapPy convention, a z denotes the cross ratio z at the
1276
- edge (0,1), a zp the cross ratio z’ at the edge (0,2) and a zpp the cross
1277
- ratio z” at the edge (1,2). The entire symbol z_xxxx_y then
1444
+ <p>Following the SnapPy convention, a <code class="docutils literal notranslate"><span class="pre">z</span></code> denotes the cross ratio
1445
+ <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
1446
+ the edge (0,2) and a <code class="docutils literal notranslate"><span class="pre">zpp</span></code> the cross
1447
+ 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
1278
1448
  denotes the cross ratio belonging to the subsimplex at integral
1279
- point xxxx (always 0000 for N = 2) of the simplex y. Note: the
1280
- SnapPy convention is different from the paper
1449
+ 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>
1450
+ <p>Note: the SnapPy convention is different from the paper
1281
1451
  mentioned above, e.g., compare
1282
1452
  kernel_code/edge_classes.c with Figure 3. We follow the SnapPy
1283
1453
  convention here so that all computations done in SnapPy are
@@ -1290,20 +1460,20 @@ consistent.</p>
1290
1460
  </pre></div>
1291
1461
  </div>
1292
1462
  <p>A subset of all gluing equations can be obtained by setting the
1293
- equation_type:</p>
1463
+ <code class="docutils literal notranslate"><span class="pre">equation_type</span></code>:</p>
1294
1464
  <ul class="simple">
1295
- <li><p>all gluing equations: all’</p></li>
1296
- <li><p>non-peripheral equations: non_peripheral’</p>
1465
+ <li><p>all gluing equations: <code class="docutils literal notranslate"><span class="pre">all</span></code></p></li>
1466
+ <li><p>non-peripheral equations: <code class="docutils literal notranslate"><span class="pre">non_peripheral</span></code></p>
1297
1467
  <ul>
1298
- <li><p>edge gluing equations: edge’</p></li>
1299
- <li><p>face gluing equations: face’</p></li>
1300
- <li><p>internal gluing equations: internal’</p></li>
1468
+ <li><p>edge gluing equations: <code class="docutils literal notranslate"><span class="pre">edge</span></code></p></li>
1469
+ <li><p>face gluing equations: <code class="docutils literal notranslate"><span class="pre">face</span></code></p></li>
1470
+ <li><p>internal gluing equations: <code class="docutils literal notranslate"><span class="pre">internal</span></code></p></li>
1301
1471
  </ul>
1302
1472
  </li>
1303
- <li><p>cusp gluing equations: peripheral’</p>
1473
+ <li><p>cusp gluing equations: <code class="docutils literal notranslate"><span class="pre">peripheral</span></code></p>
1304
1474
  <ul>
1305
- <li><p>cusp gluing equations for meridians: meridian’</p></li>
1306
- <li><p>cusp gluing equations for longitudes: longitude’</p></li>
1475
+ <li><p>cusp gluing equations for meridians: <code class="docutils literal notranslate"><span class="pre">meridian</span></code></p></li>
1476
+ <li><p>cusp gluing equations for longitudes: <code class="docutils literal notranslate"><span class="pre">longitude</span></code></p></li>
1307
1477
  </ul>
1308
1478
  </li>
1309
1479
  </ul>
@@ -1311,8 +1481,8 @@ equation_type:</p>
1311
1481
 
1312
1482
  <dl class="py method">
1313
1483
  <dt class="sig sig-object py" id="snappy.Manifold.has_finite_vertices">
1314
- <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.Manifold.has_finite_vertices" title="Permalink to this definition"></a></dt>
1315
- <dd><p>Returns True if and only if the triangulation has finite (non-ideal)
1484
+ <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.Manifold.has_finite_vertices" title="Link to this definition"></a></dt>
1485
+ <dd><p>Returns <code class="docutils literal notranslate"><span class="pre">True</span></code> if and only if the triangulation has finite (non-ideal)
1316
1486
  vertices.</p>
1317
1487
  <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>
1318
1488
  <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>
@@ -1334,7 +1504,7 @@ finite vertices:</p>
1334
1504
 
1335
1505
  <dl class="py method">
1336
1506
  <dt class="sig sig-object py" id="snappy.Manifold.high_precision">
1337
- <span class="sig-name descname"><span class="pre">high_precision</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.high_precision" title="Permalink to this definition"></a></dt>
1507
+ <span class="sig-name descname"><span class="pre">high_precision</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.high_precision" title="Link to this definition"></a></dt>
1338
1508
  <dd><p>Return a high precision version of this manifold.</p>
1339
1509
  <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>
1340
1510
  <span class="gp">&gt;&gt;&gt; </span><span class="nb">type</span><span class="p">(</span><span class="n">M</span><span class="o">.</span><span class="n">high_precision</span><span class="p">())</span>
@@ -1345,7 +1515,7 @@ finite vertices:</p>
1345
1515
 
1346
1516
  <dl class="py method">
1347
1517
  <dt class="sig sig-object py" id="snappy.Manifold.holonomy_matrix_entries">
1348
- <span class="sig-name descname"><span class="pre">holonomy_matrix_entries</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">fundamental_group_args</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[]</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">match_kernel</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.Manifold.holonomy_matrix_entries" title="Permalink to this definition"></a></dt>
1518
+ <span class="sig-name descname"><span class="pre">holonomy_matrix_entries</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">fundamental_group_args</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[]</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">match_kernel</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.Manifold.holonomy_matrix_entries" title="Link to this definition"></a></dt>
1349
1519
  <dd><p>The entries of the matrices of the holonomy as list of ApproximateAlgebraicNumbers
1350
1520
  (four consecutive numbers per matrix). The numbers are guaranteed to lie in the
1351
1521
  trace field only if match_kernel = False:</p>
@@ -1362,7 +1532,7 @@ trace field only if match_kernel = False:</p>
1362
1532
 
1363
1533
  <dl class="py method">
1364
1534
  <dt class="sig sig-object py" id="snappy.Manifold.homological_longitude">
1365
- <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.Manifold.homological_longitude" title="Permalink to this definition"></a></dt>
1535
+ <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.Manifold.homological_longitude" title="Link to this definition"></a></dt>
1366
1536
  <dd><p>Returns the peripheral curve in the given cusp, if any, which is
1367
1537
  homologically trivial (with rational coefficients) in the manifold:</p>
1368
1538
  <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>
@@ -1397,8 +1567,8 @@ the manifold, an exception is raised:</p>
1397
1567
 
1398
1568
  <dl class="py method">
1399
1569
  <dt class="sig sig-object py" id="snappy.Manifold.homology">
1400
- <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.Manifold.homology" title="Permalink to this definition"></a></dt>
1401
- <dd><p>Returns an AbelianGroup representing the first integral
1570
+ <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.Manifold.homology" title="Link to this definition"></a></dt>
1571
+ <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
1402
1572
  homology group of the underlying (Dehn filled) manifold.</p>
1403
1573
  <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>
1404
1574
  <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>
@@ -1409,7 +1579,7 @@ homology group of the underlying (Dehn filled) manifold.</p>
1409
1579
 
1410
1580
  <dl class="py method">
1411
1581
  <dt class="sig sig-object py" id="snappy.Manifold.hyperbolic_SLN_torsion">
1412
- <span class="sig-name descname"><span class="pre">hyperbolic_SLN_torsion</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">bits_prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">100</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.hyperbolic_SLN_torsion" title="Permalink to this definition"></a></dt>
1582
+ <span class="sig-name descname"><span class="pre">hyperbolic_SLN_torsion</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">bits_prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">100</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.hyperbolic_SLN_torsion" title="Link to this definition"></a></dt>
1413
1583
  <dd><p>Compute the torsion polynomial of the holonomy representation lifted
1414
1584
  to SL(2, C) and then followed by the irreducible representation
1415
1585
  from SL(2, C) -&gt; SL(N, C):</p>
@@ -1422,7 +1592,7 @@ from SL(2, C) -&gt; SL(N, C):</p>
1422
1592
 
1423
1593
  <dl class="py method">
1424
1594
  <dt class="sig sig-object py" id="snappy.Manifold.hyperbolic_adjoint_torsion">
1425
- <span class="sig-name descname"><span class="pre">hyperbolic_adjoint_torsion</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">bits_prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">100</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.hyperbolic_adjoint_torsion" title="Permalink to this definition"></a></dt>
1595
+ <span class="sig-name descname"><span class="pre">hyperbolic_adjoint_torsion</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">bits_prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">100</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.hyperbolic_adjoint_torsion" title="Link to this definition"></a></dt>
1426
1596
  <dd><p>Computes the torsion polynomial of the adjoint representation
1427
1597
  a la Dubois-Yamaguichi. This is not a sign-refined computation
1428
1598
  so the result is only defined up to sign, not to mention a power
@@ -1439,7 +1609,7 @@ of the variable ‘a’:</p>
1439
1609
 
1440
1610
  <dl class="py method">
1441
1611
  <dt class="sig sig-object py" id="snappy.Manifold.hyperbolic_torsion">
1442
- <span class="sig-name descname"><span class="pre">hyperbolic_torsion</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">bits_prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">100</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">all_lifts</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">wada_conventions</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">phi</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.Manifold.hyperbolic_torsion" title="Permalink to this definition"></a></dt>
1612
+ <span class="sig-name descname"><span class="pre">hyperbolic_torsion</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">bits_prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">100</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">all_lifts</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">wada_conventions</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">phi</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.Manifold.hyperbolic_torsion" title="Link to this definition"></a></dt>
1443
1613
  <dd><p>Computes the hyperbolic torsion polynomial as defined in
1444
1614
  <a class="reference external" href="http://arxiv.org/abs/1108.3045">[DFJ]</a>:</p>
1445
1615
  <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;K11n42&#39;</span><span class="p">)</span>
@@ -1454,7 +1624,7 @@ of the variable ‘a’:</p>
1454
1624
 
1455
1625
  <dl class="py method">
1456
1626
  <dt class="sig sig-object py" id="snappy.Manifold.identify">
1457
- <span class="sig-name descname"><span class="pre">identify</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">extends_to_link</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.Manifold.identify" title="Permalink to this definition"></a></dt>
1627
+ <span class="sig-name descname"><span class="pre">identify</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">extends_to_link</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.Manifold.identify" title="Link to this definition"></a></dt>
1458
1628
  <dd><p>Looks for the manifold in all of the SnapPy databases.
1459
1629
  For hyperbolic manifolds this is done by searching for isometries:</p>
1460
1630
  <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;m125&#39;</span><span class="p">)</span>
@@ -1480,14 +1650,9 @@ because of how the kernel code works:</p>
1480
1650
  </div>
1481
1651
  </dd></dl>
1482
1652
 
1483
- <dl class="py method">
1484
- <dt class="sig sig-object py" id="snappy.Manifold.init_hyperbolic_structure">
1485
- <span class="sig-name descname"><span class="pre">init_hyperbolic_structure</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">force_recompute</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.Manifold.init_hyperbolic_structure" title="Permalink to this definition"></a></dt>
1486
- <dd></dd></dl>
1487
-
1488
1653
  <dl class="py method">
1489
1654
  <dt class="sig sig-object py" id="snappy.Manifold.inside_view">
1490
- <span class="sig-name descname"><span class="pre">inside_view</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cohomology_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">geodesics</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[]</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.inside_view" title="Permalink to this definition"></a></dt>
1655
+ <span class="sig-name descname"><span class="pre">inside_view</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cohomology_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">geodesics</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Sequence</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">[]</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.inside_view" title="Link to this definition"></a></dt>
1491
1656
  <dd><p>Show raytraced inside view of hyperbolic manifold. See
1492
1657
  <a class="reference external" href="https://im.icerm.brown.edu/portfolio/snappy-views/">images</a>
1493
1658
  and <a class="reference external" href="https://youtu.be/CAERhmUCkRs">demo video</a>.</p>
@@ -1500,10 +1665,10 @@ and <a class="reference external" href="https://youtu.be/CAERhmUCkRs">demo video
1500
1665
  <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">inside_view</span><span class="p">(</span><span class="n">cohomology_class</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span>
1501
1666
  </pre></div>
1502
1667
  </div>
1503
- <p>The cohomology class in H^2(M, bd M; R) producing the cohomology
1504
- fractal can be specified as a cocycle or using an automatically computed
1505
- basis (of, say, length <code class="docutils literal notranslate"><span class="pre">n</span></code>). Thus, <code class="docutils literal notranslate"><span class="pre">cohomology_class</span></code> can be one of
1506
- the following.</p>
1668
+ <p>The cohomology class in <span class="math notranslate nohighlight">\(H^2(M, \partial M; \mathbb{R})\)</span> producing the
1669
+ cohomology fractal can be specified as a cocycle or using an automatically
1670
+ computed basis (of, say, length <code class="docutils literal notranslate"><span class="pre">n</span></code>). Thus, <code class="docutils literal notranslate"><span class="pre">cohomology_class</span></code> can be
1671
+ one of the following.</p>
1507
1672
  <ul class="simple">
1508
1673
  <li><p>An integer <code class="docutils literal notranslate"><span class="pre">i</span></code> between 0 and <code class="docutils literal notranslate"><span class="pre">n</span></code> - 1 to pick the <code class="docutils literal notranslate"><span class="pre">i</span></code>-th basis
1509
1674
  vector.</p></li>
@@ -1511,11 +1676,16 @@ vector.</p></li>
1511
1676
  combination of basis vectors.</p></li>
1512
1677
  <li><p>A weight for each face of each tetrahedron.</p></li>
1513
1678
  </ul>
1679
+ <p>Geodesics can be specified as words in the unsimplified fundamental group:</p>
1680
+ <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;m004&quot;</span><span class="p">)</span>
1681
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">inside_view</span><span class="p">(</span><span class="n">geodesics</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;a&#39;</span><span class="p">,</span> <span class="s1">&#39;bC&#39;</span><span class="p">])</span>
1682
+ </pre></div>
1683
+ </div>
1514
1684
  </dd></dl>
1515
1685
 
1516
1686
  <dl class="py method">
1517
1687
  <dt class="sig sig-object py" id="snappy.Manifold.invariant_trace_field_gens">
1518
- <span class="sig-name descname"><span class="pre">invariant_trace_field_gens</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">fundamental_group_args</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[]</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.invariant_trace_field_gens" title="Permalink to this definition"></a></dt>
1688
+ <span class="sig-name descname"><span class="pre">invariant_trace_field_gens</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">fundamental_group_args</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[]</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.invariant_trace_field_gens" title="Link to this definition"></a></dt>
1519
1689
  <dd><p>The generators of the trace field as ApproximateAlgebraicNumbers. Can be
1520
1690
  used to compute the tetrahedra field, where the first two parameters
1521
1691
  are bits of precision and maximum degree of the field:</p>
@@ -1530,9 +1700,9 @@ are bits of precision and maximum degree of the field:</p>
1530
1700
 
1531
1701
  <dl class="py method">
1532
1702
  <dt class="sig sig-object py" id="snappy.Manifold.is_isometric_to">
1533
- <span class="sig-name descname"><span class="pre">is_isometric_to</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">Manifold</span> <span class="pre">other</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">return_isometries=False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.is_isometric_to" title="Permalink to this definition"></a></dt>
1534
- <dd><p>Returns True if M and N are isometric, False if they not. A
1535
- RuntimeError is raised in cases where the SnapPea kernel fails
1703
+ <span class="sig-name descname"><span class="pre">is_isometric_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.Manifold" title="snappy.Manifold"><span class="pre">Manifold</span></a><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">ManifoldHP</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">return_isometries</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> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">bool</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><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.Manifold.is_isometric_to" title="Link to this definition"></a></dt>
1704
+ <dd><p>Returns <code class="docutils literal notranslate"><span class="pre">True</span></code> if M and N are isometric, <code class="docutils literal notranslate"><span class="pre">False</span></code> if they not.
1705
+ A <code class="docutils literal notranslate"><span class="pre">RuntimeError</span></code> is raised in cases where the SnapPea kernel fails
1536
1706
  to determine either answer. (This is fairly common for closed
1537
1707
  manifolds.)</p>
1538
1708
  <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>
@@ -1561,14 +1731,14 @@ acts on the left. That is, the two <em>columns</em> of the matrix
1561
1731
  give the image of the meridian and longitude respectively. In
1562
1732
  the above example, the meridian of cusp 0 is sent to the
1563
1733
  meridian of cusp 1.</p>
1564
- <p>Note: The answer True is rigorous, but the answer False may
1734
+ <p>Note: The answer <code class="docutils literal notranslate"><span class="pre">True</span></code> is rigorous, but the answer <code class="docutils literal notranslate"><span class="pre">False</span></code> may
1565
1735
  not be as there could be numerical errors resulting in finding
1566
1736
  an incorrect canonical triangulation.</p>
1567
1737
  </dd></dl>
1568
1738
 
1569
1739
  <dl class="py method">
1570
1740
  <dt class="sig sig-object py" id="snappy.Manifold.is_orientable">
1571
- <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.Manifold.is_orientable" title="Permalink to this definition"></a></dt>
1741
+ <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.Manifold.is_orientable" title="Link to this definition"></a></dt>
1572
1742
  <dd><p>Return whether the underlying 3-manifold is orientable.</p>
1573
1743
  <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>
1574
1744
  <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>
@@ -1579,10 +1749,11 @@ an incorrect canonical triangulation.</p>
1579
1749
 
1580
1750
  <dl class="py method">
1581
1751
  <dt class="sig sig-object py" id="snappy.Manifold.is_two_bridge">
1582
- <span class="sig-name descname"><span class="pre">is_two_bridge</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.is_two_bridge" title="Permalink to this definition"></a></dt>
1752
+ <span class="sig-name descname"><span class="pre">is_two_bridge</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.Manifold.is_two_bridge" title="Link to this definition"></a></dt>
1583
1753
  <dd><p>If the manifold is the complement of a two-bridge knot or link
1584
- in S^3, then this method returns (p,q) where p/q is the
1585
- fraction describing the link. Otherwise, returns False.</p>
1754
+ in <span class="math notranslate nohighlight">\(S^3\)</span>, then this method returns <span class="math notranslate nohighlight">\((p,q)\)</span> where
1755
+ <span class="math notranslate nohighlight">\(p/q\)</span> is the fraction describing the link.
1756
+ Otherwise, returns <code class="docutils literal notranslate"><span class="pre">False</span></code>.</p>
1586
1757
  <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>
1587
1758
  <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">is_two_bridge</span><span class="p">()</span>
1588
1759
  <span class="go">(2, 5)</span>
@@ -1591,57 +1762,138 @@ fraction describing the link. Otherwise, returns False.</p>
1591
1762
  <span class="go">False</span>
1592
1763
  </pre></div>
1593
1764
  </div>
1594
- <p>Note: An answer of True is rigorous, but not the answer
1595
- False’, as there could be numerical errors resulting in
1765
+ <p>Note: An answer of <code class="docutils literal notranslate"><span class="pre">True</span></code> is rigorous, but not the answer
1766
+ <code class="docutils literal notranslate"><span class="pre">False</span></code>, as there could be numerical errors resulting in
1596
1767
  finding an incorrect canonical triangulation.</p>
1597
1768
  </dd></dl>
1598
1769
 
1599
1770
  <dl class="py method">
1600
1771
  <dt class="sig sig-object py" id="snappy.Manifold.isometry_signature">
1601
- <span class="sig-name descname"><span class="pre">isometry_signature</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">of_link</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">verified</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">interval_bits_precs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[53,</span> <span class="pre">212]</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">exact_bits_prec_and_degrees</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[(212,</span> <span class="pre">10),</span> <span class="pre">(1000,</span> <span class="pre">20),</span> <span class="pre">(2000,</span> <span class="pre">20)]</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><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.isometry_signature" title="Permalink to this definition"></a></dt>
1602
- <dd><p>The isomorphism signature of the canonical retriangulation. This is a
1603
- complete invariant of the isometry type of a hyperbolic 3-manifold and
1604
- described in more detail <a class="reference external" href="verify.html#the-canonical-retriangulation-and-the-isometry-signature">here</a>:</p>
1605
- <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">Manifold</span><span class="p">(</span><span class="s2">&quot;m125&quot;</span><span class="p">)</span>
1606
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">isometry_signature</span><span class="p">()</span> <span class="c1"># Unverified isometry signature</span>
1607
- <span class="go">&#39;gLLPQccdefffqffqqof&#39;</span>
1608
- </pre></div>
1609
- </div>
1610
- <p>When used inside <a class="reference external" href="http://sagemath.org/">Sage</a> and <code class="docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">True</span></code> is
1611
- passed as argument, the verify module will certify the result to be
1612
- correct:</p>
1613
- <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="s2">&quot;m125&quot;</span><span class="p">)</span>
1614
- <span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">.</span><span class="n">isometry_signature</span><span class="p">(</span><span class="n">verified</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="c1"># Verified isometry signature</span>
1615
- <span class="s1">&#39;gLLPQccdefffqffqqof&#39;</span>
1616
- </pre></div>
1617
- </div>
1618
- <p>When <code class="docutils literal notranslate"><span class="pre">of_link</span> <span class="pre">=</span> <span class="pre">True</span></code> is specified, the peripheral curves are included in
1619
- such a way that the result is a complete invariant of a link. In particular,
1620
- <code class="docutils literal notranslate"><span class="pre">isometry_signature(of_link=True)</span></code> is invariant under changing the
1621
- ordering or orientations of the components or flipping all crossings of a
1622
- link simultaneously (it passes <code class="docutils literal notranslate"><span class="pre">ignore_cusp_order</span> <span class="pre">=</span> <span class="pre">True,</span>
1623
- <span class="pre">ignore_curve_orientations</span> <span class="pre">=</span> <span class="pre">True</span></code> to
1624
- <a class="reference internal" href="#snappy.Manifold.triangulation_isosig" title="snappy.Manifold.triangulation_isosig"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Manifold.triangulation_isosig()</span></code></a>):</p>
1625
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;5^2_1&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">isometry_signature</span><span class="p">(</span><span class="n">of_link</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span>
1772
+ <span class="sig-name descname"><span class="pre">isometry_signature</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">of_link</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>, <em class="sig-param"><span class="n"><span class="pre">verified</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">interval_bits_precs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[53,</span> <span class="pre">212]</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">exact_bits_prec_and_degrees</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[(212,</span> <span class="pre">10),</span> <span class="pre">(1000,</span> <span class="pre">20),</span> <span class="pre">(2000,</span> <span class="pre">20)]</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><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.Manifold.isometry_signature" title="Link to this definition"></a></dt>
1773
+ <dd><p>Returns the “isometry signature”, a complete invariant of the hyperbolic
1774
+ 3-manifold obtained by applying the Dehn-fillings.
1775
+ The isometry signature is always a (decorated) isomorphism signature, see
1776
+ <a class="reference internal" href="#snappy.Manifold.triangulation_isosig" title="snappy.Manifold.triangulation_isosig"><code class="xref py py-meth docutils literal notranslate"><span class="pre">triangulation_isosig()</span></code></a>, and was introduced in
1777
+ <a class="reference external" href="http://arxiv.org/abs/1502.00383">Goerner ‘16</a>.</p>
1778
+ <p>Depending on <code class="xref py py-attr docutils literal notranslate"><span class="pre">ignore_orientation</span></code>, it is a complete invariant of
1779
+ either the oriented (if orientable) or unoriented hyperbolic 3-manifold.
1780
+ If <code class="xref py py-attr docutils literal notranslate"><span class="pre">of_link</span> <span class="pre">=</span> <span class="pre">True</span></code> is specified, the signature is decorated by the
1781
+ unoriented peripheral curves (aka meridian and longitude, up to homotopy).
1782
+ If the 3-manifold arises as a link complement, the decorated isometry
1783
+ signature obtained with <code class="xref py py-attr docutils literal notranslate"><span class="pre">of_link</span> <span class="pre">=</span> <span class="pre">True</span></code> is a complete invariant of
1784
+ the link.</p>
1785
+ <p>The isometry signature is computed differently based on whether there
1786
+ is at least one unfilled cusp.</p>
1787
+ <p><strong>Cusped manifolds</strong></p>
1788
+ <p>If there is at least one unfilled cusped, we are in the cusped case.</p>
1789
+ <p>Here is an example of two links having isometric (hyperbolic) complements:</p>
1790
+ <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;L5a1&quot;</span><span class="p">)</span>
1791
+ <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="s2">&quot;L7n2&quot;</span><span class="p">)</span>
1792
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">isometry_signature</span><span class="p">()</span>
1793
+ <span class="go">&#39;eLPkbdcddhgggb&#39;</span>
1794
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">isometry_signature</span><span class="p">()</span>
1795
+ <span class="go">&#39;eLPkbdcddhgggb&#39;</span>
1796
+ </pre></div>
1797
+ </div>
1798
+ <p>The complements do have opposite handedness though:</p>
1799
+ <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">isometry_signature</span><span class="p">(</span><span class="n">ignore_orientation</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
1800
+ <span class="go">&#39;eLPkbdcddxvvcv&#39;</span>
1801
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">isometry_signature</span><span class="p">(</span><span class="n">ignore_orientation</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
1802
+ <span class="go">&#39;eLPkbdcddhgggb&#39;</span>
1803
+ </pre></div>
1804
+ </div>
1805
+ <p>We can show that the two links are distinct:</p>
1806
+ <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">isometry_signature</span><span class="p">(</span><span class="n">of_link</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span>
1626
1807
  <span class="go">&#39;eLPkbdcddhgggb_baCbbaCb&#39;</span>
1627
- <span class="gp">&gt;&gt;&gt; </span><span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;7^2_8&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">isometry_signature</span><span class="p">(</span><span class="n">of_link</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span>
1808
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">isometry_signature</span><span class="p">(</span><span class="n">of_link</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span>
1628
1809
  <span class="go">&#39;eLPkbdcddhgggb_bBcBbaCb&#39;</span>
1629
1810
  </pre></div>
1630
1811
  </div>
1631
- <p>See <a class="reference internal" href="verify_canon.html#snappy.verify.verified_canonical_retriangulation" title="snappy.verify.verified_canonical_retriangulation"><code class="xref py py-meth docutils literal notranslate"><span class="pre">verify.verified_canonical_retriangulation()</span></code></a> for the
1632
- additional options.</p>
1633
- <p>Note that interval methods cannot verify a canonical retriangulation
1634
- with non-tetrahedral cells such as in the cas of <code class="docutils literal notranslate"><span class="pre">m412</span></code>, so the following
1635
- call returns <code class="docutils literal notranslate"><span class="pre">None</span></code>:</p>
1636
- <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="s2">&quot;m412&quot;</span><span class="p">)</span>
1637
- <span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">.</span><span class="n">isometry_signature</span><span class="p">(</span><span class="n">verified</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span> <span class="n">exact_bits_prec_and_degrees</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span>
1638
- </pre></div>
1639
- </div>
1812
+ <p>If we Dehn-fill some cusps, the method uses the filled triangulation.
1813
+ Here, we Dehn-fill the Whitehead link to get the figure-eight knot:</p>
1814
+ <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">1</span><span class="p">,</span><span class="mi">1</span><span class="p">),</span> <span class="mi">0</span><span class="p">)</span>
1815
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">isometry_signature</span><span class="p">(</span><span class="n">of_link</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span>
1816
+ <span class="go">&#39;cPcbbbiht_bacb&#39;</span>
1817
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;4_1&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">isometry_signature</span><span class="p">(</span><span class="n">of_link</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span>
1818
+ <span class="go">&#39;cPcbbbiht_bacb&#39;</span>
1819
+ </pre></div>
1820
+ </div>
1821
+ <p>In general, the isometry signature is the isomorphism signature (see
1822
+ <a class="reference internal" href="#snappy.Manifold.triangulation_isosig" title="snappy.Manifold.triangulation_isosig"><code class="xref py py-meth docutils literal notranslate"><span class="pre">triangulation_isosig()</span></code></a>) of the
1823
+ <a class="reference internal" href="#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> of the
1824
+ <a class="reference internal" href="#snappy.Manifold.filled_triangulation" title="snappy.Manifold.filled_triangulation"><code class="xref py py-meth docutils literal notranslate"><span class="pre">filled_triangulation()</span></code></a>:</p>
1825
+ <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">M</span><span class="o">.</span><span class="n">filled_triangulation</span><span class="p">()</span><span class="o">.</span><span class="n">canonical_retriangulation</span><span class="p">()</span>
1826
+ <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">ignore_cusp_ordering</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
1827
+ <span class="gp">... </span> <span class="n">ignore_curve_orientations</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span>
1828
+ <span class="go">&#39;cPcbbbiht_bacb&#39;</span>
1829
+ </pre></div>
1830
+ </div>
1831
+ <p><strong>Closed manifolds</strong></p>
1832
+ <p>If all cusps are filled, we are in the closed case. In this case, the
1833
+ isometry signature gives the resulting closed hyperbolic 3-manifold as
1834
+ canonical surgery on a hyperbolic 1-cusped manifold (which is encoded by
1835
+ its isometry signature). Only orientable manifolds are supported in the
1836
+ closed case.</p>
1837
+ <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;v2000(1,3)&quot;</span><span class="p">)</span>
1838
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">isometry_signature</span><span class="p">()</span>
1839
+ <span class="go">&#39;fLLQcacdedenbxxrr(-7,12)&#39;</span>
1840
+ </pre></div>
1841
+ </div>
1842
+ <p>The following code illustrates how the isometry signature is computed:</p>
1843
+ <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">length_spectrum_alt</span><span class="p">(</span><span class="n">count</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
1844
+ <span class="go">[Length Core curve Word</span>
1845
+ <span class="go"> 0.06491027903143 - 2.63765810995071*I - d,</span>
1846
+ <span class="go"> 0.49405010583448 + 2.38451103485706*I - a]</span>
1847
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">K</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">drill_word</span><span class="p">(</span><span class="s1">&#39;d&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">filled_triangulation</span><span class="p">()</span><span class="o">.</span><span class="n">canonical_retriangulation</span><span class="p">()</span>
1848
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">K</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">0</span><span class="p">),</span> <span class="mi">0</span><span class="p">)</span>
1849
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">K</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_curves</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
1850
+ <span class="go">&#39;fLLQcacdedenbxxrr(-7,12)&#39;</span>
1851
+ </pre></div>
1852
+ </div>
1853
+ <p>Note that there is clearly a unique shortest geodesic in this example.
1854
+ In general, the method first considers a canonical set of geodesics.
1855
+ For each such geodesic, it computes a candidate signature as above. It
1856
+ then picks a canonical signature among the candidates. Further details
1857
+ can be found in an upcoming paper.</p>
1858
+ <p><strong>Verified computations</strong></p>
1859
+ <p>While the isometry signature is purely combinatorial, some intermediate
1860
+ computations are numerical. Thus, if <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">False</span></code>,
1861
+ floating-point issues can arise.</p>
1862
+ <p>The method can be made <a class="reference internal" href="verify.html#verify-primer"><span class="std std-ref">verified</span></a> by passing
1863
+ <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">True</span></code>:</p>
1864
+ <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="s2">&quot;m007(4,1)&quot;</span><span class="p">)</span>
1865
+ <span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">.</span><span class="n">isometry_signature</span><span class="p">(</span><span class="n">verified</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
1866
+ <span class="s1">&#39;eLPkbcdddhggsj(3,1)&#39;</span>
1867
+ </pre></div>
1868
+ </div>
1869
+ <p>This method always needs to compute at least one canonical retriangulation.
1870
+ It can take the same arguments as <a class="reference internal" href="#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> and
1871
+ passes them to <a class="reference internal" href="#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> when computing the
1872
+ verified canonical retriangulation. If the manifold is closed, interval
1873
+ arithmetic is used when finding and drilling the short geodesics.</p>
1874
+ <dl class="field-list simple">
1875
+ <dt class="field-odd">Parameters<span class="colon">:</span></dt>
1876
+ <dd class="field-odd"><ul class="simple">
1877
+ <li><p><strong>of_link</strong> – Also encode the unoriented peripheral curves.
1878
+ Note that it is not necessary for the manifold to be a link
1879
+ complement to invoke this flag.
1880
+ Only relevant in the cusped case.</p></li>
1881
+ <li><p><strong>ignore_orientation</strong> – Do not encode the orientation of the 3-manifold.</p></li>
1882
+ <li><p><strong>verified</strong> – Use <a class="reference internal" href="verify.html#verify-primer"><span class="std std-ref">verified computation</span></a>.</p></li>
1883
+ <li><p><strong>interval_bits_precs</strong> – Passed to <a class="reference internal" href="#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> and (in the closed
1884
+ case) also used when calling <a class="reference internal" href="#snappy.Manifold.length_spectrum_alt_gen" title="snappy.Manifold.length_spectrum_alt_gen"><code class="xref py py-meth docutils literal notranslate"><span class="pre">length_spectrum_alt_gen()</span></code></a> and
1885
+ <a class="reference internal" href="#snappy.Manifold.drill_word" title="snappy.Manifold.drill_word"><code class="xref py py-meth docutils literal notranslate"><span class="pre">drill_word()</span></code></a> to find and drill the short geodesics.</p></li>
1886
+ <li><p><strong>exact_bits_prec_and_degrees</strong> – Passed to <a class="reference internal" href="#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>.</p></li>
1887
+ <li><p><strong>verbose</strong> – Print information about finding and drilling the short geodesics.
1888
+ Also passed to <a class="reference internal" href="#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>.</p></li>
1889
+ </ul>
1890
+ </dd>
1891
+ </dl>
1640
1892
  </dd></dl>
1641
1893
 
1642
1894
  <dl class="py method">
1643
1895
  <dt class="sig sig-object py" id="snappy.Manifold.isomorphisms_to">
1644
- <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.Manifold.isomorphisms_to" title="Permalink to this definition"></a></dt>
1896
+ <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="triangulation.html#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.Manifold.isomorphisms_to" title="Link to this definition"></a></dt>
1645
1897
  <dd><p>Returns a complete list of combinatorial isomorphisms between
1646
1898
  the two triangulations:</p>
1647
1899
  <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>
@@ -1664,7 +1916,7 @@ meridian of cusp 1.</p>
1664
1916
 
1665
1917
  <dl class="py method">
1666
1918
  <dt class="sig sig-object py" id="snappy.Manifold.length_spectrum">
1667
- <span class="sig-name descname"><span class="pre">length_spectrum</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cutoff</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1.0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">full_rigor</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">grouped</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">include_words</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.Manifold.length_spectrum" title="Permalink to this definition"></a></dt>
1919
+ <span class="sig-name descname"><span class="pre">length_spectrum</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cutoff</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1.0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">full_rigor</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">grouped</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">include_words</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.Manifold.length_spectrum" title="Link to this definition"></a></dt>
1668
1920
  <dd><p>Returns a list of geodesics (with multiplicities) of length
1669
1921
  up to the specified cutoff value. (The default cutoff is 1.0.)</p>
1670
1922
  <p>Here’s a quick example:</p>
@@ -1682,19 +1934,250 @@ up to the specified cutoff value. (The default cutoff is 1.0.)</p>
1682
1934
  </div>
1683
1935
  </dd></dl>
1684
1936
 
1937
+ <dl class="py method">
1938
+ <dt class="sig sig-object py" id="snappy.Manifold.length_spectrum_alt">
1939
+ <span class="sig-name descname"><span class="pre">length_spectrum_alt</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">count</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>, <em class="sig-param"><span class="n"><span class="pre">max_len</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Any</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>, <em class="sig-param"><span class="n"><span class="pre">bits_prec</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>, <em class="sig-param"><span class="n"><span class="pre">verified</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> <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">LengthSpectrumGeodesicInfo</span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#snappy.Manifold.length_spectrum_alt" title="Link to this definition"></a></dt>
1940
+ <dd><p>Returns a list of geodesics. How far this list goes can be specified
1941
+ by either a cut-off length or a count. The method only supports
1942
+ orientable manifolds. It is a convenience method for
1943
+ <a class="reference internal" href="#snappy.Manifold.length_spectrum_alt_gen" title="snappy.Manifold.length_spectrum_alt_gen"><code class="xref py py-meth docutils literal notranslate"><span class="pre">length_spectrum_alt_gen()</span></code></a>.
1944
+ We refer the reader to
1945
+ <a class="reference internal" href="#snappy.Manifold.length_spectrum_alt_gen" title="snappy.Manifold.length_spectrum_alt_gen"><code class="xref py py-meth docutils literal notranslate"><span class="pre">length_spectrum_alt_gen()</span></code></a>
1946
+ for further details not covered here.</p>
1947
+ <p><strong>Cut-off length</strong></p>
1948
+ <p>Here is an example where a cut-off length for the geodesics is specified:</p>
1949
+ <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">Manifold</span><span class="p">(</span><span class="s2">&quot;m202(3,4)(3,4)&quot;</span><span class="p">)</span>
1950
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">length_spectrum_alt</span><span class="p">(</span><span class="n">max_len</span> <span class="o">=</span> <span class="mf">0.5</span><span class="p">)</span>
1951
+ <span class="go">[Length Core curve Word</span>
1952
+ <span class="go"> 0.14820741547094 - 1.76955170166922*I Cusp 1 bcDc,</span>
1953
+ <span class="go"> 0.14820741547097 - 1.76955170166923*I Cusp 0 aabcDabcB]</span>
1954
+ </pre></div>
1955
+ </div>
1956
+ <p>It also supports <a class="reference internal" href="verify.html#verify-primer"><span class="std std-ref">verified</span></a> computations:</p>
1957
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: M.length_spectrum_alt(max_len = 0.5, verified = True, bits_prec = 100) # doctest: +SKIP
1958
+ [Length Core curve Word
1959
+ 0.148207415470948? - 1.76955170166924? *I Cusp 0 aabcDabcB,
1960
+ 0.14820741547094... - 1.76955170166923...*I Cusp 1 bcDc]
1961
+ </pre></div>
1962
+ </div>
1963
+ <p>If <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified=True</span></code>, the returned list is guaranteed to include all
1964
+ geodesics up to the given cut-off length and might include additional
1965
+ geodesics.</p>
1966
+ <p><strong>Count</strong></p>
1967
+ <p>Here is an example where a count is specified:</p>
1968
+ <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">Manifold</span><span class="p">(</span><span class="s2">&quot;m202(3,4)(3,4)&quot;</span><span class="p">)</span>
1969
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">length_spectrum_alt</span><span class="p">(</span><span class="n">count</span> <span class="o">=</span> <span class="mi">3</span><span class="p">)</span>
1970
+ <span class="go">[Length Core curve Word</span>
1971
+ <span class="go"> 0.14820741547094 - 1.76955170166922*I Cusp 1 bcDc,</span>
1972
+ <span class="go"> 0.14820741547097 - 1.76955170166923*I Cusp 0 aabcDabcB,</span>
1973
+ <span class="go"> 0.79356651781096 + 2.65902431489655*I - aB,</span>
1974
+ <span class="go"> 0.79356651781096 + 2.65902431489655*I - b]</span>
1975
+ </pre></div>
1976
+ </div>
1977
+ <p>Note that the number of geodesics listed might be larger than the given
1978
+ count. In particular, this happens when the same (real) length appears
1979
+ multiple times. If <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified=True</span></code>, the returned list is guaranteed
1980
+ to include the <code class="xref py py-attr docutils literal notranslate"><span class="pre">count</span></code> shortest geodesics and might include additional
1981
+ geodesics.</p>
1982
+ <p><strong>Verified systole</strong></p>
1983
+ <p>Even though, the first reported geodesic might not be the shortest, we
1984
+ obtain an interval containing the systole as follows, also see
1985
+ <a class="reference internal" href="#snappy.Manifold.length_spectrum_alt_gen" title="snappy.Manifold.length_spectrum_alt_gen"><code class="xref py py-meth docutils literal notranslate"><span class="pre">length_spectrum_alt_gen()</span></code></a>:</p>
1986
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: M = Manifold(&quot;m004&quot;)
1987
+ sage: M.length_spectrum_alt(count=1, verified=True, bits_prec=100)[0].length.real() # doctest: +NUMERIC21
1988
+ 1.0870701449957390997853?
1989
+ </pre></div>
1990
+ </div>
1991
+ <dl class="field-list simple">
1992
+ <dt class="field-odd">Parameters<span class="colon">:</span></dt>
1993
+ <dd class="field-odd"><ul class="simple">
1994
+ <li><p><strong>count</strong> – Number of shortest geodesics to list. The actual result might
1995
+ contain additional geodesics. Exactly one of <code class="xref py py-attr docutils literal notranslate"><span class="pre">count</span></code> and
1996
+ <code class="xref py py-attr docutils literal notranslate"><span class="pre">max_len</span></code> has to be specified.</p></li>
1997
+ <li><p><strong>max_len</strong> – Cut-off length for geodesics. The actual result includes all
1998
+ geodesics up to the given length and might include additional
1999
+ geodesics. Exactly one of <code class="xref py py-attr docutils literal notranslate"><span class="pre">count</span></code> and <code class="xref py py-attr docutils literal notranslate"><span class="pre">max_len</span></code> has
2000
+ to be specified.</p></li>
2001
+ <li><p><strong>bits_prec</strong> – Precision used for the computation. Increase if computation did
2002
+ not succeed.</p></li>
2003
+ <li><p><strong>verified</strong> – Use <a class="reference internal" href="verify.html#verify-primer"><span class="std std-ref">verified computation</span></a>.</p></li>
2004
+ </ul>
2005
+ </dd>
2006
+ <dt class="field-even">Returns<span class="colon">:</span></dt>
2007
+ <dd class="field-even"><p>A list of geodesics such that the (lower bound of) the real
2008
+ length is non-decreasing.</p>
2009
+ </dd>
2010
+ </dl>
2011
+ </dd></dl>
2012
+
2013
+ <dl class="py method">
2014
+ <dt class="sig sig-object py" id="snappy.Manifold.length_spectrum_alt_gen">
2015
+ <span class="sig-name descname"><span class="pre">length_spectrum_alt_gen</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">bits_prec</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>, <em class="sig-param"><span class="n"><span class="pre">verified</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> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Sequence</span><span class="p"><span class="pre">[</span></span><span class="pre">LengthSpectrumGeodesicInfo</span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#snappy.Manifold.length_spectrum_alt_gen" title="Link to this definition"></a></dt>
2016
+ <dd><p>Returns a generator for the geodesics sorted by real length. The method
2017
+ only supports orientable manifolds.</p>
2018
+ <p>Here is an example:</p>
2019
+ <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">Manifold</span><span class="p">(</span><span class="s2">&quot;m202(3,4)(0,0)&quot;</span><span class="p">)</span>
2020
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">spec</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">length_spectrum_alt_gen</span><span class="p">()</span>
2021
+ <span class="gp">&gt;&gt;&gt; </span><span class="nb">next</span><span class="p">(</span><span class="n">spec</span><span class="p">)</span>
2022
+ <span class="go">Length Core curve Word</span>
2023
+ <span class="go">0.14742465268512 - 1.78287093565202*I Cusp 0 aabcDabcB</span>
2024
+ <span class="gp">&gt;&gt;&gt; </span><span class="nb">next</span><span class="p">(</span><span class="n">spec</span><span class="p">)</span>
2025
+ <span class="go">0.81161414965958 + 2.72911699294426*I - b</span>
2026
+ <span class="gp">&gt;&gt;&gt; </span><span class="nb">next</span><span class="p">(</span><span class="n">spec</span><span class="p">)</span>
2027
+ <span class="go">0.84163270359334 + 2.61245944742151*I - aB</span>
2028
+ </pre></div>
2029
+ </div>
2030
+ <p>Note that the shortest geodesic in the above example happens to be the
2031
+ core curve of the filled cusp (Cusp 0).</p>
2032
+ <p>Access just the length or word:</p>
2033
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">g</span> <span class="o">=</span> <span class="nb">next</span><span class="p">(</span><span class="n">spec</span><span class="p">)</span>
2034
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">g</span><span class="o">.</span><span class="n">length</span>
2035
+ <span class="go">0.93461379591349 + 2.70060614107722*I</span>
2036
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">g</span><span class="o">.</span><span class="n">word</span>
2037
+ <span class="go">&#39;a&#39;</span>
2038
+ </pre></div>
2039
+ </div>
2040
+ <p>The word is given with respect to the unsimplified fundamental group:</p>
2041
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><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><span class="n">simplify_presentation</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
2042
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span><span class="o">.</span><span class="n">complex_length</span><span class="p">(</span><span class="s1">&#39;a&#39;</span><span class="p">)</span>
2043
+ <span class="go">0.93461379591349 + 2.70060614107722*I</span>
2044
+ </pre></div>
2045
+ </div>
2046
+ <p>The method also supports higher precision:</p>
2047
+ <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">Manifold</span><span class="p">(</span><span class="s2">&quot;m003(-3,1)&quot;</span><span class="p">)</span>
2048
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">spec</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">length_spectrum_alt_gen</span><span class="p">(</span><span class="n">bits_prec</span><span class="o">=</span><span class="mi">100</span><span class="p">)</span>
2049
+ <span class="gp">&gt;&gt;&gt; </span><span class="nb">next</span><span class="p">(</span><span class="n">spec</span><span class="p">)</span><span class="o">.</span><span class="n">length</span>
2050
+ <span class="go">0.58460368501798696932015666264 + 2.4953704555604684110903962008*I</span>
2051
+ </pre></div>
2052
+ </div>
2053
+ <p><strong>Performance</strong></p>
2054
+ <p>This method uses a different algorithm than
2055
+ <a class="reference internal" href="#snappy.Manifold.length_spectrum" title="snappy.Manifold.length_spectrum"><code class="xref py py-meth docutils literal notranslate"><span class="pre">length_spectrum</span></code></a>. In particular,
2056
+ it does not compute the Dirichlet domain. It also allows for
2057
+ <a class="reference internal" href="verify.html#verify-primer"><span class="std std-ref">verified computations</span></a>.
2058
+ It is implemented in python and thus
2059
+ typically slower than <a class="reference internal" href="#snappy.Manifold.length_spectrum" title="snappy.Manifold.length_spectrum"><code class="xref py py-meth docutils literal notranslate"><span class="pre">length_spectrum</span></code></a>.
2060
+ But there are also some cases where it is significantly faster. In
2061
+ particular, this applies to spun triangulations such as <code class="docutils literal notranslate"><span class="pre">m004(21,10)</span></code>.</p>
2062
+ <p>Here is example where we can help the algorithm by guessing and drilling
2063
+ and filling a short geodesic:</p>
2064
+ <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">Manifold</span><span class="p">(</span><span class="s2">&quot;o9_00639&quot;</span><span class="p">)</span>
2065
+ </pre></div>
2066
+ </div>
2067
+ <p>Over an hour to compute:</p>
2068
+ <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">high_precision</span><span class="p">()</span><span class="o">.</span><span class="n">length_spectrum</span><span class="p">(</span><span class="mf">0.1</span><span class="p">)</span>
2069
+ <span class="go">mult length topology parity</span>
2070
+ <span class="go">1 0.00150226276052 - 2.39996262244127*I circle +</span>
2071
+ </pre></div>
2072
+ </div>
2073
+ <p>A couple of minutes to compute:</p>
2074
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">spec</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">length_spectrum_alt_gen</span><span class="p">(</span><span class="n">bits_prec</span> <span class="o">=</span> <span class="mi">150</span><span class="p">)</span>
2075
+ <span class="gp">&gt;&gt;&gt; </span><span class="nb">next</span><span class="p">(</span><span class="n">spec</span><span class="p">)</span>
2076
+ <span class="go">Length Word Core curve</span>
2077
+ <span class="go">0.00150226276052 - 2.39996262244127*I a -</span>
2078
+ </pre></div>
2079
+ </div>
2080
+ <p>After drilling and filling, less than a second to compute:</p>
2081
+ <div class="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">M</span><span class="o">.</span><span class="n">drill_word</span><span class="p">(</span><span class="s1">&#39;a&#39;</span><span class="p">)</span>
2082
+ <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">1</span><span class="p">,</span><span class="mi">0</span><span class="p">),</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="c1"># N is now isometric to o9_00639 but as a surgery m125(0,0)(34,55)</span>
2083
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">spec</span> <span class="o">=</span> <span class="n">N</span><span class="o">.</span><span class="n">length_spectrum_alt_gen</span><span class="p">()</span>
2084
+ <span class="gp">&gt;&gt;&gt; </span><span class="nb">next</span><span class="p">(</span><span class="n">spec</span><span class="p">)</span>
2085
+ <span class="go">Length Core curve Word</span>
2086
+ <span class="go">0.00150226276073 - 2.39996262244128*I Cusp 1 cDcDDcDcDDcDDcDcDDcDcDDcDDcDcDDcDD</span>
2087
+ <span class="gp">&gt;&gt;&gt; </span><span class="nb">next</span><span class="p">(</span><span class="n">spec</span><span class="p">)</span><span class="o">.</span><span class="n">length</span><span class="o">.</span><span class="n">real</span><span class="p">()</span>
2088
+ <span class="go">0.96218768626877</span>
2089
+ </pre></div>
2090
+ </div>
2091
+ <p><strong>Verified computations</strong></p>
2092
+ <p>The method also supports <a class="reference internal" href="verify.html#verify-primer"><span class="std std-ref">verified computations</span></a>:</p>
2093
+ <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="s2">&quot;m019&quot;</span><span class="p">)</span>
2094
+ <span class="n">sage</span><span class="p">:</span> <span class="n">spec</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">length_spectrum_alt_gen</span><span class="p">(</span><span class="n">verified</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">bits_prec</span><span class="o">=</span><span class="mi">100</span><span class="p">)</span>
2095
+ <span class="n">sage</span><span class="p">:</span> <span class="nb">next</span><span class="p">(</span><span class="n">spec</span><span class="p">)</span>
2096
+ <span class="n">Length</span> <span class="n">Core</span> <span class="n">curve</span> <span class="n">Word</span>
2097
+ <span class="mf">0.43153441294719</span><span class="o">...</span> <span class="o">+</span> <span class="mf">2.35105908147863</span><span class="o">...*</span><span class="n">I</span> <span class="o">-</span> <span class="n">a</span>
2098
+ <span class="n">sage</span><span class="p">:</span> <span class="nb">next</span><span class="p">(</span><span class="n">spec</span><span class="p">)</span>
2099
+ <span class="mf">0.88944299721255</span><span class="o">...</span> <span class="o">-</span> <span class="mf">2.94185904702273</span><span class="o">...*</span><span class="n">I</span> <span class="o">-</span> <span class="n">bD</span>
2100
+ </pre></div>
2101
+ </div>
2102
+ <p>If <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">True</span></code> is passed, the algorithm guarantees that the lower
2103
+ bound of the real length is (non-strictly) increasing. In particular, we know
2104
+ that we have found all geodesics less than the following length:</p>
2105
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="nb">next</span><span class="p">(</span><span class="n">spec</span><span class="p">)</span><span class="o">.</span><span class="n">length</span><span class="o">.</span><span class="n">real</span><span class="p">()</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="c1"># doctest: +NUMERIC12</span>
2106
+ <span class="mf">0.94135129037387168886341739832</span>
2107
+ </pre></div>
2108
+ </div>
2109
+ <p>To illustrate some pitfalls, here is an example of a potential a result
2110
+ of the method:</p>
2111
+ <table class="docutils align-default">
2112
+ <thead>
2113
+ <tr class="row-odd"><th class="head"><p>Real length interval</p></th>
2114
+ <th class="head"><p>Word</p></th>
2115
+ </tr>
2116
+ </thead>
2117
+ <tbody>
2118
+ <tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">[1.0,</span> <span class="pre">2.0]</span></code></p></td>
2119
+ <td><p><code class="docutils literal notranslate"><span class="pre">a</span></code></p></td>
2120
+ </tr>
2121
+ <tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">[1.2,</span> <span class="pre">1.3]</span></code></p></td>
2122
+ <td><p><code class="docutils literal notranslate"><span class="pre">b</span></code></p></td>
2123
+ </tr>
2124
+ <tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">[1.7,</span> <span class="pre">1.8]</span></code></p></td>
2125
+ <td><p><code class="docutils literal notranslate"><span class="pre">c</span></code></p></td>
2126
+ </tr>
2127
+ <tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">[3.0,</span> <span class="pre">4.0]</span></code></p></td>
2128
+ <td><p><code class="docutils literal notranslate"><span class="pre">d</span></code></p></td>
2129
+ </tr>
2130
+ </tbody>
2131
+ </table>
2132
+ <p>Note that we cannot say whether geodesic <code class="docutils literal notranslate"><span class="pre">a</span></code> is actually the first,
2133
+ second or third shortest geodesic or tied with <code class="docutils literal notranslate"><span class="pre">b</span></code> or <code class="docutils literal notranslate"><span class="pre">c</span></code>. Increasing
2134
+ precision can change (representative words and) the order in which the
2135
+ geodesics are emitted.</p>
2136
+ <p>We can say that together <code class="docutils literal notranslate"><span class="pre">a</span></code>, <code class="docutils literal notranslate"><span class="pre">b</span></code> and <code class="docutils literal notranslate"><span class="pre">c</span></code> are the three shortest
2137
+ geodesics. Furthermore, we can also say that the systole
2138
+ of the manifold is in <code class="docutils literal notranslate"><span class="pre">[1.0,</span> <span class="pre">2.0]</span></code> even though <code class="docutils literal notranslate"><span class="pre">a</span></code> itself might not be
2139
+ the shortest geodesic. The latter is true in general:</p>
2140
+ <p><strong>Verified systole</strong></p>
2141
+ <p>It is not necessarily true that the first geodesic returned
2142
+ by the method is the shortest geodesic. Despite this, the interval for
2143
+ the real length of the first geodesic always contains the systole of
2144
+ the manifold:</p>
2145
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: M = Manifold(&quot;m004&quot;)
2146
+ sage: spec = M.length_spectrum_alt_gen(verified=True)
2147
+ sage: g = next(spec) # g might or might not be shortest geodesic
2148
+ sage: systole = g.length.real() # But interval is large enough to contain systole
2149
+ sage: systole # doctest: +NUMERIC6
2150
+ 1.08707015?
2151
+ </pre></div>
2152
+ </div>
2153
+ <dl class="field-list simple">
2154
+ <dt class="field-odd">Parameters<span class="colon">:</span></dt>
2155
+ <dd class="field-odd"><ul class="simple">
2156
+ <li><p><strong>bits_prec</strong> – Precision used for the computation. Increase if computation did
2157
+ not succeed.</p></li>
2158
+ <li><p><strong>verified</strong> – Use <a class="reference internal" href="verify.html#verify-primer"><span class="std std-ref">verified computation</span></a>.</p></li>
2159
+ </ul>
2160
+ </dd>
2161
+ <dt class="field-even">Returns<span class="colon">:</span></dt>
2162
+ <dd class="field-even"><p>A generator to enumerate the geodesics such that the (lower bound
2163
+ of the) real length is non-decreasing.</p>
2164
+ </dd>
2165
+ </dl>
2166
+ </dd></dl>
2167
+
1685
2168
  <dl class="py method">
1686
2169
  <dt class="sig sig-object py" id="snappy.Manifold.link">
1687
- <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.Manifold.link" title="Permalink to this definition"></a></dt>
2170
+ <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.Manifold.link" title="Link to this definition"></a></dt>
1688
2171
  <dd><p>If the manifold is stored as a link complement in your
1689
2172
  current session then it returns the number of components
1690
2173
  and crossing of the link. To view and interact with the
1691
2174
  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>
1692
- and <a class="reference internal" href="#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>
2175
+ and <a class="reference internal" href="triangulation.html#snappy.Triangulation.plink" title="snappy.Triangulation.plink"><code class="xref py py-meth docutils literal notranslate"><span class="pre">plink</span></code></a>.</p>
1693
2176
  </dd></dl>
1694
2177
 
1695
2178
  <dl class="py method">
1696
2179
  <dt class="sig sig-object py" id="snappy.Manifold.name">
1697
- <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.Manifold.name" title="Permalink to this definition"></a></dt>
2180
+ <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.Manifold.name" title="Link to this definition"></a></dt>
1698
2181
  <dd><p>Return the name of the triangulation.</p>
1699
2182
  <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>
1700
2183
  <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>
@@ -1705,7 +2188,7 @@ and <a class="reference internal" href="#snappy.Manifold.plink" title="snappy.Ma
1705
2188
 
1706
2189
  <dl class="py method">
1707
2190
  <dt class="sig sig-object py" id="snappy.Manifold.normal_boundary_slopes">
1708
- <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.Manifold.normal_boundary_slopes" title="Permalink to this definition"></a></dt>
2191
+ <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.Manifold.normal_boundary_slopes" title="Link to this definition"></a></dt>
1709
2192
  <dd><p>For a one-cusped manifold, returns all the nonempty boundary slopes of
1710
2193
  spun normal surfaces. Provided the triangulation supports a
1711
2194
  genuine hyperbolic structure, then by <a class="reference external" href="http://arxiv.org/abs/math/0503027">Thurston and Walsh</a> any strict boundary slope
@@ -1718,8 +2201,9 @@ semifiber) must be listed here.</p>
1718
2201
  </div>
1719
2202
  <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
1720
2203
  returns boundary slopes associated to vertex surfaces with a quad
1721
- 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
1722
- slopes.</p>
2204
+ in every tetrahedron; by Theorem 1.1. of
2205
+ <a class="reference external" href="http://arxiv.org/abs/1102.4588">Dunfield and Garoufalidis ‘12</a>
2206
+ these are all strict boundary slopes.</p>
1723
2207
  <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>
1724
2208
  <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>
1725
2209
  <span class="go">[(1, 1), (1, 2), (2, -1), (2, 3), (8, 11)]</span>
@@ -1738,7 +2222,7 @@ giving isolated rays in the space of embedded normal surfaces.</p>
1738
2222
 
1739
2223
  <dl class="py method">
1740
2224
  <dt class="sig sig-object py" id="snappy.Manifold.normal_surfaces">
1741
- <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.Manifold.normal_surfaces" title="Permalink to this definition"></a></dt>
2225
+ <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.Manifold.normal_surfaces" title="Link to this definition"></a></dt>
1742
2226
  <dd><p>All the vertex spun-normal surfaces in the current triangulation.</p>
1743
2227
  <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>
1744
2228
  <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>
@@ -1752,7 +2236,7 @@ giving isolated rays in the space of embedded normal surfaces.</p>
1752
2236
 
1753
2237
  <dl class="py method">
1754
2238
  <dt class="sig sig-object py" id="snappy.Manifold.num_cusps">
1755
- <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.Manifold.num_cusps" title="Permalink to this definition"></a></dt>
2239
+ <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.Manifold.num_cusps" title="Link to this definition"></a></dt>
1756
2240
  <dd><p>Return the total number of cusps. By giving the optional argument
1757
2241
  ‘orientable’ or ‘nonorientable’ it will only count cusps of that type.</p>
1758
2242
  <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>
@@ -1764,7 +2248,7 @@ giving isolated rays in the space of embedded normal surfaces.</p>
1764
2248
 
1765
2249
  <dl class="py method">
1766
2250
  <dt class="sig sig-object py" id="snappy.Manifold.num_tetrahedra">
1767
- <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.Manifold.num_tetrahedra" title="Permalink to this definition"></a></dt>
2251
+ <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.Manifold.num_tetrahedra" title="Link to this definition"></a></dt>
1768
2252
  <dd><p>Return the number of tetrahedra in the triangulation.</p>
1769
2253
  <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>
1770
2254
  <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>
@@ -1775,7 +2259,7 @@ giving isolated rays in the space of embedded normal surfaces.</p>
1775
2259
 
1776
2260
  <dl class="py method">
1777
2261
  <dt class="sig sig-object py" id="snappy.Manifold.orientation_cover">
1778
- <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.Manifold.orientation_cover" title="Permalink to this definition"></a></dt>
2262
+ <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.Manifold.orientation_cover" title="Link to this definition"></a></dt>
1779
2263
  <dd><p>For a non-orientable Triangulation, returns the 2-fold cover which
1780
2264
  is orientable.</p>
1781
2265
  <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>
@@ -1790,14 +2274,9 @@ is orientable.</p>
1790
2274
  </div>
1791
2275
  </dd></dl>
1792
2276
 
1793
- <dl class="py method">
1794
- <dt class="sig sig-object py" id="snappy.Manifold.pickle">
1795
- <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.Manifold.pickle" title="Permalink to this definition"></a></dt>
1796
- <dd></dd></dl>
1797
-
1798
2277
  <dl class="py method">
1799
2278
  <dt class="sig sig-object py" id="snappy.Manifold.plink">
1800
- <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.Manifold.plink" title="Permalink to this definition"></a></dt>
2279
+ <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.Manifold.plink" title="Link to this definition"></a></dt>
1801
2280
  <dd><p>Brings up a link editor window if the manifold is stored
1802
2281
  as a link complement in your current session.</p>
1803
2282
  <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>
@@ -1814,9 +2293,9 @@ as a link complement in your current session.</p>
1814
2293
 
1815
2294
  <dl class="py method">
1816
2295
  <dt class="sig sig-object py" id="snappy.Manifold.polished_holonomy">
1817
- <span class="sig-name descname"><span class="pre">polished_holonomy</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">bits_prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">100</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fundamental_group_args</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[]</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">lift_to_SL2</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_solution_type</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">dec_prec</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">match_kernel</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.Manifold.polished_holonomy" title="Permalink to this definition"></a></dt>
1818
- <dd><p>Return the fundamental group of M equipt with a high-precision version of the
1819
- holonomy representation:</p>
2296
+ <span class="sig-name descname"><span class="pre">polished_holonomy</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">bits_prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">100</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fundamental_group_args</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[]</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">lift_to_SL2</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_solution_type</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">dec_prec</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">match_kernel</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.Manifold.polished_holonomy" title="Link to this definition"></a></dt>
2297
+ <dd><p>Return the fundamental group of M equipped with a high-precision version of
2298
+ the holonomy representation:</p>
1820
2299
  <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;m004&#39;</span><span class="p">)</span>
1821
2300
  <span class="n">sage</span><span class="p">:</span> <span class="n">G</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">polished_holonomy</span><span class="p">()</span>
1822
2301
  <span class="n">sage</span><span class="p">:</span> <span class="n">G</span><span class="p">(</span><span class="s1">&#39;a&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">trace</span><span class="p">()</span>
@@ -1830,9 +2309,8 @@ holonomy representation:</p>
1830
2309
 
1831
2310
  <dl class="py method">
1832
2311
  <dt class="sig sig-object py" id="snappy.Manifold.ptolemy_generalized_obstruction_classes">
1833
- <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.Manifold.ptolemy_generalized_obstruction_classes" title="Permalink to this definition"></a></dt>
1834
- <dd><p>M.ptolemy_generalized_obstruction_classes(N)</p>
1835
- <p>Returns the obstruction classes needed to compute
2312
+ <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.Manifold.ptolemy_generalized_obstruction_classes" title="Link to this definition"></a></dt>
2313
+ <dd><p>Returns the obstruction classes needed to compute
1836
2314
  PGL(N,C)-representations for any N, i.e., it returns a list with
1837
2315
  a representative cocycle for each element in
1838
2316
  H^2(M, boundary M; Z/N) / (Z/N)^* where (Z/N)^* are the units in Z/N.
@@ -1890,7 +2368,7 @@ four face classes.</p>
1890
2368
 
1891
2369
  <dl class="py method">
1892
2370
  <dt class="sig sig-object py" id="snappy.Manifold.ptolemy_obstruction_classes">
1893
- <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.Manifold.ptolemy_obstruction_classes" title="Permalink to this definition"></a></dt>
2371
+ <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.Manifold.ptolemy_obstruction_classes" title="Link to this definition"></a></dt>
1894
2372
  <dd><p>Returns the obstruction classes needed to compute
1895
2373
  pSL(N,C) = SL(N,C)/{+1,-1} representations for even N, i.e., it
1896
2374
  returns a list with a representative cocycle for each class in
@@ -1946,9 +2424,8 @@ hence the cocycle takes the same value on those two faces (s_3_0 = s_1_1).</p>
1946
2424
 
1947
2425
  <dl class="py method">
1948
2426
  <dt class="sig sig-object py" id="snappy.Manifold.ptolemy_variety">
1949
- <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.Manifold.ptolemy_variety" title="Permalink to this definition"></a></dt>
1950
- <dd><p>M.ptolemy_variety(N, obstruction_class = None, simplify = True, eliminate_fixed_ptolemys = False)</p>
1951
- <p>Returns a Ptolemy variety as described in</p>
2427
+ <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.Manifold.ptolemy_variety" title="Link to this definition"></a></dt>
2428
+ <dd><p>Returns a Ptolemy variety as described in</p>
1952
2429
  <ul class="simple">
1953
2430
  <li><p>Stavros Garoufalidis, Dyland Thurston, Christian K. Zickert:
1954
2431
  “The Complex Volume of SL(n,C)-Representations of 3-Manifolds”
@@ -2115,7 +2592,7 @@ on how to compute cross ratios, volumes and other invariants):</p>
2115
2592
 
2116
2593
  <dl class="py method">
2117
2594
  <dt class="sig sig-object py" id="snappy.Manifold.randomize">
2118
- <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.Manifold.randomize" title="Permalink to this definition"></a></dt>
2595
+ <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.Manifold.randomize" title="Link to this definition"></a></dt>
2119
2596
  <dd><p>Perform random Pachner moves on the underlying triangulation,
2120
2597
  including some initial 3 -&gt; 2 moves that increase the number of
2121
2598
  tetrahedra by blowup_multiple.</p>
@@ -2127,7 +2604,7 @@ tetrahedra by blowup_multiple.</p>
2127
2604
 
2128
2605
  <dl class="py method">
2129
2606
  <dt class="sig sig-object py" id="snappy.Manifold.reverse_orientation">
2130
- <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.Manifold.reverse_orientation" title="Permalink to this definition"></a></dt>
2607
+ <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.Manifold.reverse_orientation" title="Link to this definition"></a></dt>
2131
2608
  <dd><p>Reverses the orientation of the Triangulation, presuming that
2132
2609
  it is orientable.</p>
2133
2610
  <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>
@@ -2141,7 +2618,7 @@ it is orientable.</p>
2141
2618
 
2142
2619
  <dl class="py method">
2143
2620
  <dt class="sig sig-object py" id="snappy.Manifold.save">
2144
- <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.Manifold.save" title="Permalink to this definition"></a></dt>
2621
+ <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.Manifold.save" title="Link to this definition"></a></dt>
2145
2622
  <dd><p>Save the triangulation as a SnapPea triangulation file.</p>
2146
2623
  <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>
2147
2624
  <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>
@@ -2159,7 +2636,7 @@ with Dehn coefficients (2,3).</p>
2159
2636
 
2160
2637
  <dl class="py method">
2161
2638
  <dt class="sig sig-object py" id="snappy.Manifold.set_name">
2162
- <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.Manifold.set_name" title="Permalink to this definition"></a></dt>
2639
+ <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.Manifold.set_name" title="Link to this definition"></a></dt>
2163
2640
  <dd><p>Give the triangulation a new name.</p>
2164
2641
  <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>
2165
2642
  <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>
@@ -2171,7 +2648,7 @@ with Dehn coefficients (2,3).</p>
2171
2648
 
2172
2649
  <dl class="py method">
2173
2650
  <dt class="sig sig-object py" id="snappy.Manifold.set_peripheral_curves">
2174
- <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.Manifold.set_peripheral_curves" title="Permalink to this definition"></a></dt>
2651
+ <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.Manifold.set_peripheral_curves" title="Link to this definition"></a></dt>
2175
2652
  <dd><p>Each cusp has a preferred marking. In the case of a torus
2176
2653
  cusp, this is pair of essential simple curves meeting in one
2177
2654
  point; equivalently, a basis of the first homology of the
@@ -2231,9 +2708,8 @@ possible while fixing the longitudes via the option
2231
2708
 
2232
2709
  <dl class="py method">
2233
2710
  <dt class="sig sig-object py" id="snappy.Manifold.set_target_holonomy">
2234
- <span class="sig-name descname"><span class="pre">set_target_holonomy</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">target</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">0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">recompute</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.Manifold.set_target_holonomy" title="Permalink to this definition"></a></dt>
2235
- <dd><p>M.set_target_holonomy(target, which_cusp=0, recompute=True)</p>
2236
- <p>Computes a geometric structure in which the Dehn filling curve
2711
+ <span class="sig-name descname"><span class="pre">set_target_holonomy</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">target</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">0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">recompute</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.Manifold.set_target_holonomy" title="Link to this definition"></a></dt>
2712
+ <dd><p>Computes a geometric structure in which the Dehn filling curve
2237
2713
  on the specified cusp has holonomy equal to the target value.
2238
2714
  The holonomies of Dehn filling curves on other cusps are left
2239
2715
  unchanged. If the ‘recompute’ flag is False, the Dehn filling
@@ -2242,7 +2718,7 @@ equations are modified, but not solved.</p>
2242
2718
 
2243
2719
  <dl class="py method">
2244
2720
  <dt class="sig sig-object py" id="snappy.Manifold.set_tetrahedra_shapes">
2245
- <span class="sig-name descname"><span class="pre">set_tetrahedra_shapes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">filled_shapes</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">complete_shapes</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">fillings</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.Manifold.set_tetrahedra_shapes" title="Permalink to this definition"></a></dt>
2721
+ <span class="sig-name descname"><span class="pre">set_tetrahedra_shapes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">filled_shapes</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">complete_shapes</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">fillings</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.Manifold.set_tetrahedra_shapes" title="Link to this definition"></a></dt>
2246
2722
  <dd><p>Replaces the tetrahedron shapes with those in the given lists,
2247
2723
  and sets the Dehn filling coefficients as specified by the
2248
2724
  fillings argument. The shapes will get double precision
@@ -2251,23 +2727,22 @@ values; polishing will be needed for high precision shapes.</p>
2251
2727
 
2252
2728
  <dl class="py method">
2253
2729
  <dt class="sig sig-object py" id="snappy.Manifold.short_slopes">
2254
- <span class="sig-name descname"><span class="pre">short_slopes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">length</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">6</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">policy</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'unbiased'</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">'trigDependentTryCanonize'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verified</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">bits_prec</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">first_cusps</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[]</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.short_slopes" title="Permalink to this definition"></a></dt>
2255
- <dd><p>Picks disjoint cusp neighborhoods (using
2256
- <a class="reference internal" href="#snappy.Manifold.cusp_areas" title="snappy.Manifold.cusp_areas"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Manifold.cusp_areas()</span></code></a>, thus the same arguments can be
2257
- used) and returns for each cusp the slopes that have length less
2258
- or equal to given <code class="docutils literal notranslate"><span class="pre">length</span></code> (defaults to 6) when measured on the
2259
- boundary of the cusp neighborhood:</p>
2730
+ <span class="sig-name descname"><span class="pre">short_slopes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">length</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">6</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">policy</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">'unbiased'</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">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">'maximal'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verified</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">bits_prec</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>, <em class="sig-param"><span class="n"><span class="pre">first_cusps</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">List</span><span class="p"><span class="pre">[</span></span><span class="pre">int</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">[]</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.short_slopes" title="Link to this definition"></a></dt>
2731
+ <dd><p>Returns a list of short slopes (for Dehn-fillings) for each cusp.</p>
2732
+ <p>That is, the method uses <a class="reference internal" href="#snappy.Manifold.cusp_areas" title="snappy.Manifold.cusp_areas"><code class="xref py py-meth docutils literal notranslate"><span class="pre">cusp_areas()</span></code></a> to find
2733
+ (maximal) embedded and disjoint cusp neighborhoods. It uses the boundaries
2734
+ of these cusp neighborhoods to measure the length of a peripheral curve.
2735
+ For each cusp, it determines all simple peripheral curves shorter than
2736
+ the given <code class="xref py py-attr docutils literal notranslate"><span class="pre">length</span></code> (which defaults to 6). The result is a list
2737
+ of the corresponding slopes for each cusp:</p>
2260
2738
  <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">Manifold</span><span class="p">(</span><span class="s2">&quot;otet20_00022&quot;</span><span class="p">)</span>
2261
2739
  <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">short_slopes</span><span class="p">()</span>
2262
2740
  <span class="go">[[(1, 0), (-1, 1), (0, 1)], [(1, 0)]]</span>
2263
2741
  </pre></div>
2264
2742
  </div>
2265
- <p>When <code class="docutils literal notranslate"><span class="pre">verified=True</span></code>, the result is guaranteed
2266
- to contain all slopes of length less or equal to given <code class="docutils literal notranslate"><span class="pre">length</span></code>
2267
- (and could contain additional slopes if precision is not high
2268
- enough):</p>
2269
- <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">short_slopes</span><span class="p">(</span><span class="n">verified</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span>
2270
- <span class="p">[[(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</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="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)],</span> <span class="p">[(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">)]]</span>
2743
+ <p>It takes the same arguments as <a class="reference internal" href="#snappy.Manifold.cusp_areas" title="snappy.Manifold.cusp_areas"><code class="xref py py-meth docutils literal notranslate"><span class="pre">cusp_areas()</span></code></a>:</p>
2744
+ <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">short_slopes</span><span class="p">(</span><span class="n">policy</span> <span class="o">=</span> <span class="s1">&#39;greedy&#39;</span><span class="p">)</span>
2745
+ <span class="go">[[(1, 0)], [(1, 0)]]</span>
2271
2746
  </pre></div>
2272
2747
  </div>
2273
2748
  <p>The ten exceptional slopes of the figure-eight knot:</p>
@@ -2276,12 +2751,26 @@ enough):</p>
2276
2751
  <span class="go">[[(1, 0), (-4, 1), (-3, 1), (-2, 1), (-1, 1), (0, 1), (1, 1), (2, 1), (3, 1), (4, 1)]]</span>
2277
2752
  </pre></div>
2278
2753
  </div>
2279
- <p>Two more slopes appear when increasing length to 2 pi:</p>
2754
+ <p>Two more slopes appear when increasing length to <span class="math notranslate nohighlight">\(2\pi\)</span>:</p>
2280
2755
  <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">short_slopes</span><span class="p">(</span><span class="n">length</span> <span class="o">=</span> <span class="mf">6.283185307179586</span><span class="p">)</span>
2281
2756
  <span class="go">[[(1, 0), (-5, 1), (-4, 1), (-3, 1), (-2, 1), (-1, 1), (0, 1), (1, 1), (2, 1), (3, 1), (4, 1), (5, 1)]]</span>
2282
2757
  </pre></div>
2283
2758
  </div>
2284
- <p>When using verified computations, <code class="docutils literal notranslate"><span class="pre">length</span></code> is converted into the <code class="docutils literal notranslate"><span class="pre">RealIntervalField</span></code> of requested precision:</p>
2759
+ <p><strong>Verified computation</strong></p>
2760
+ <p>If <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">False</span></code>, floating-point issues can arise resulting in
2761
+ incorrect values. The method can be made
2762
+ <a class="reference internal" href="verify.html#verify-primer"><span class="std std-ref">verified</span></a> by passing <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">True</span></code>:</p>
2763
+ <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="s2">&quot;4_1&quot;</span><span class="p">)</span>
2764
+ <span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">.</span><span class="n">short_slopes</span><span class="p">(</span><span class="n">verified</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span>
2765
+ <span class="p">[[(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="p">(</span><span class="o">-</span><span class="mi">4</span><span class="p">,</span> <span class="mi">1</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">1</span><span class="p">),</span> <span class="p">(</span><span class="o">-</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</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="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</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="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="mi">1</span><span class="p">)]]</span>
2766
+ </pre></div>
2767
+ </div>
2768
+ <p>If <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">True</span></code>, the result is guaranteed to contain all short
2769
+ slopes and might contain additional slopes (with lengths slightly longer
2770
+ than the given <code class="xref py py-attr docutils literal notranslate"><span class="pre">length</span></code> but this could not be proven using the
2771
+ interval estimates).</p>
2772
+ <p>The given <code class="xref py py-attr docutils literal notranslate"><span class="pre">length</span></code> is cast to a SageMath <code class="docutils literal notranslate"><span class="pre">RealIntervalField</span></code> of the
2773
+ given precision if <code class="xref py py-attr docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">True</span></code>:</p>
2285
2774
  <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="kn">from</span> <span class="nn">sage.all</span> <span class="kn">import</span> <span class="n">pi</span>
2286
2775
  <span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">.</span><span class="n">short_slopes</span><span class="p">(</span><span class="n">length</span> <span class="o">=</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">pi</span><span class="p">,</span> <span class="n">verified</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span> <span class="n">bits_prec</span> <span class="o">=</span> <span class="mi">100</span><span class="p">)</span>
2287
2776
  <span class="p">[[(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</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> <span class="p">(</span><span class="o">-</span><span class="mi">4</span><span class="p">,</span> <span class="mi">1</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">1</span><span class="p">),</span> <span class="p">(</span><span class="o">-</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</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="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</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="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="mi">1</span><span class="p">)]]</span>
@@ -2291,7 +2780,7 @@ enough):</p>
2291
2780
 
2292
2781
  <dl class="py method">
2293
2782
  <dt class="sig sig-object py" id="snappy.Manifold.simplify">
2294
- <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.Manifold.simplify" title="Permalink to this definition"></a></dt>
2783
+ <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.Manifold.simplify" title="Link to this definition"></a></dt>
2295
2784
  <dd><p>Try to simplify the triangulation by doing Pachner moves.</p>
2296
2785
  <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>
2297
2786
  <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>
@@ -2316,7 +2805,7 @@ before giving up.</p>
2316
2805
 
2317
2806
  <dl class="py method">
2318
2807
  <dt class="sig sig-object py" id="snappy.Manifold.slice_obstruction_HKL">
2319
- <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.Manifold.slice_obstruction_HKL" title="Permalink to this definition"></a></dt>
2808
+ <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.Manifold.slice_obstruction_HKL" title="Link to this definition"></a></dt>
2320
2809
  <dd><p>For the exterior of a knot in S^3, searches for a topological
2321
2810
  slicing obstruction from:</p>
2322
2811
  <p>Herald, Kirk, Livingston, Math Zeit., 2010
@@ -2332,7 +2821,6 @@ slice), and otherwise returns None:</p>
2332
2821
  <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>
2333
2822
  <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>
2334
2823
  <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>
2335
- <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>
2336
2824
  <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>
2337
2825
  <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">7</span><span class="p">)</span>
2338
2826
  </pre></div>
@@ -2341,7 +2829,6 @@ slice), and otherwise returns None:</p>
2341
2829
  the q by just q_max:</p>
2342
2830
  <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>
2343
2831
  <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>
2344
- <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>
2345
2832
  <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>
2346
2833
  <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">7</span><span class="p">)</span>
2347
2834
  </pre></div>
@@ -2362,7 +2849,7 @@ Alexander polynomials.</p>
2362
2849
 
2363
2850
  <dl class="py method">
2364
2851
  <dt class="sig sig-object py" id="snappy.Manifold.solution_type">
2365
- <span class="sig-name descname"><span class="pre">solution_type</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">enum</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.Manifold.solution_type" title="Permalink to this definition"></a></dt>
2852
+ <span class="sig-name descname"><span class="pre">solution_type</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">enum</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.Manifold.solution_type" title="Link to this definition"></a></dt>
2366
2853
  <dd><p>Returns the type of the current solution to the gluing
2367
2854
  equations, basically a summary of how degenerate the solution
2368
2855
  is. If the flag enum=True is set, then an integer value is
@@ -2395,7 +2882,7 @@ simplices have reversed orientations.</p></li>
2395
2882
 
2396
2883
  <dl class="py method">
2397
2884
  <dt class="sig sig-object py" id="snappy.Manifold.split">
2398
- <span class="sig-name descname"><span class="pre">split</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">which_surface</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.split" title="Permalink to this definition"></a></dt>
2885
+ <span class="sig-name descname"><span class="pre">split</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">which_surface</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.split" title="Link to this definition"></a></dt>
2399
2886
  <dd><p>Split the manifold open along a surface of positive characteristic found
2400
2887
  by the method “splitting_surfaces”. Returns a list of the pieces, with any
2401
2888
  sphere boundary components filled in.</p>
@@ -2424,7 +2911,7 @@ sphere boundary components filled in.</p>
2424
2911
 
2425
2912
  <dl class="py method">
2426
2913
  <dt class="sig sig-object py" id="snappy.Manifold.splitting_surfaces">
2427
- <span class="sig-name descname"><span class="pre">splitting_surfaces</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.splitting_surfaces" title="Permalink to this definition"></a></dt>
2914
+ <span class="sig-name descname"><span class="pre">splitting_surfaces</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.splitting_surfaces" title="Link to this definition"></a></dt>
2428
2915
  <dd><p>Searches for connected closed normal surfaces of nonnegative Euler
2429
2916
  characteristic. If spheres or projective planes are found, then
2430
2917
  tori and Klein bottles aren’t reported. There is no guarantee
@@ -2449,7 +2936,7 @@ using the method “split”.</p>
2449
2936
 
2450
2937
  <dl class="py method">
2451
2938
  <dt class="sig sig-object py" id="snappy.Manifold.symmetric_triangulation">
2452
- <span class="sig-name descname"><span class="pre">symmetric_triangulation</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.symmetric_triangulation" title="Permalink to this definition"></a></dt>
2939
+ <span class="sig-name descname"><span class="pre">symmetric_triangulation</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.symmetric_triangulation" title="Link to this definition"></a></dt>
2453
2940
  <dd><p>Returns a Dehn filling description of the manifold realizing
2454
2941
  the symmetry group.</p>
2455
2942
  <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;m003(-3,1)&#39;</span><span class="p">)</span>
@@ -2467,15 +2954,37 @@ the symmetry group.</p>
2467
2954
 
2468
2955
  <dl class="py method">
2469
2956
  <dt class="sig sig-object py" id="snappy.Manifold.symmetry_group">
2470
- <span class="sig-name descname"><span class="pre">symmetry_group</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">of_link</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.Manifold.symmetry_group" title="Permalink to this definition"></a></dt>
2957
+ <span class="sig-name descname"><span class="pre">symmetry_group</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">of_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">False</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="additional_classes.html#snappy.SymmetryGroup" title="SnapPy.SymmetryGroup"><span class="pre">SymmetryGroup</span></a></span></span><a class="headerlink" href="#snappy.Manifold.symmetry_group" title="Link to this definition"></a></dt>
2471
2958
  <dd><p>Returns the symmetry group of the Manifold.
2472
2959
  If the flag “of_link” is set, then it only returns symmetries
2473
2960
  that preserves the meridians.</p>
2474
2961
  </dd></dl>
2475
2962
 
2963
+ <dl class="py method">
2964
+ <dt class="sig sig-object py" id="snappy.Manifold.symplectic_basis">
2965
+ <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.Manifold.symplectic_basis" title="Link to this definition"></a></dt>
2966
+ <dd><p>Extend the Neumann-Zagier matrix to one which is symplectic
2967
+ (up to factors of 2) using oscillating curves, see
2968
+ <a class="reference external" href="https://arxiv.org/abs/2208.06969">Mathews and Purcell ‘22</a>.
2969
+ Only accepts triangulations with 1 cusp.</p>
2970
+ <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>
2971
+ <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>
2972
+ <span class="go">[-1 0 -1 -1]</span>
2973
+ <span class="go">[ 2 0 -2 0]</span>
2974
+ <span class="go">[-2 -1 -2 -1]</span>
2975
+ <span class="go">[ 0 -1 -2 -1]</span>
2976
+ </pre></div>
2977
+ </div>
2978
+ <dl class="field-list simple">
2979
+ <dt class="field-odd">Parameters<span class="colon">:</span></dt>
2980
+ <dd class="field-odd"><p><strong>verify</strong> – Explicitly test if the resulting matrix is symplectic.</p>
2981
+ </dd>
2982
+ </dl>
2983
+ </dd></dl>
2984
+
2476
2985
  <dl class="py method">
2477
2986
  <dt class="sig sig-object py" id="snappy.Manifold.tetrahedra_field_gens">
2478
- <span class="sig-name descname"><span class="pre">tetrahedra_field_gens</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.tetrahedra_field_gens" title="Permalink to this definition"></a></dt>
2987
+ <span class="sig-name descname"><span class="pre">tetrahedra_field_gens</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.tetrahedra_field_gens" title="Link to this definition"></a></dt>
2479
2988
  <dd><p>The shapes of the tetrahedra as ApproximateAlgebraicNumbers. Can be
2480
2989
  used to compute the tetrahedra field, where the first two parameters
2481
2990
  are bits of precision and maximum degree of the field:</p>
@@ -2491,7 +3000,7 @@ sage: tets.find_field(100, 10, optimize=True) # doctest: +NORMALIZE_WHITESPAC
2491
3000
 
2492
3001
  <dl class="py method">
2493
3002
  <dt class="sig sig-object py" id="snappy.Manifold.tetrahedra_shapes">
2494
- <span class="sig-name descname"><span class="pre">tetrahedra_shapes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">part</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">fixed_alignment</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">bits_prec</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">dec_prec</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">intervals</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.Manifold.tetrahedra_shapes" title="Permalink to this definition"></a></dt>
3003
+ <span class="sig-name descname"><span class="pre">tetrahedra_shapes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">part</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">fixed_alignment</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">bits_prec</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">dec_prec</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">intervals</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.Manifold.tetrahedra_shapes" title="Link to this definition"></a></dt>
2495
3004
  <dd><p>Gives the shapes of the tetrahedra in the current solution to
2496
3005
  the gluing equations. Returns a list containing one info object
2497
3006
  for each tetrahedron. The keys are:</p>
@@ -2520,7 +3029,7 @@ normalize the triangle.</p>
2520
3029
 
2521
3030
  <dl class="py method">
2522
3031
  <dt class="sig sig-object py" id="snappy.Manifold.trace_field_gens">
2523
- <span class="sig-name descname"><span class="pre">trace_field_gens</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">fundamental_group_args</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[]</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.trace_field_gens" title="Permalink to this definition"></a></dt>
3032
+ <span class="sig-name descname"><span class="pre">trace_field_gens</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">fundamental_group_args</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[]</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.trace_field_gens" title="Link to this definition"></a></dt>
2524
3033
  <dd><p>The generators of the trace field as ApproximateAlgebraicNumbers. Can be
2525
3034
  used to compute the tetrahedra field, where the first two parameters
2526
3035
  are bits of precision and maximum degree of the field:</p>
@@ -2536,119 +3045,218 @@ are bits of precision and maximum degree of the field:</p>
2536
3045
 
2537
3046
  <dl class="py method">
2538
3047
  <dt class="sig sig-object py" id="snappy.Manifold.triangulation_isosig">
2539
- <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.Manifold.triangulation_isosig" title="Permalink to this definition"></a></dt>
2540
- <dd><p>Returns a compact text representation of the triangulation, called a
2541
- “decorated isomorphism signature”</p>
2542
- <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>
3048
+ <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.Manifold.triangulation_isosig" title="Link to this definition"></a></dt>
3049
+ <dd><p>Returns the “(decorated) isomorphism signature”, a compact text
3050
+ representation of the triangulation:</p>
3051
+ <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>
2543
3052
  <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>
2544
3053
  <span class="go">&#39;cPcbbbiht_BaCB&#39;</span>
2545
3054
  </pre></div>
2546
3055
  </div>
2547
- <p>You can use this string to recreate an isomorphic triangulation later</p>
2548
- <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>
2549
- <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>
2550
- <span class="go">&#39;hLMzMkbcdefggghhhqxqhx_BaaB&#39;</span>
2551
- <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>
2552
- <span class="gp">&gt;&gt;&gt; </span><span class="n">A</span> <span class="o">==</span> <span class="n">B</span>
3056
+ <p>This string can be used later to recreate an isomorphic triangulation:</p>
3057
+ <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>
3058
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">T</span> <span class="o">==</span> <span class="n">U</span>
2553
3059
  <span class="go">True</span>
2554
3060
  </pre></div>
2555
3061
  </div>
2556
- <p>By default, the returned string encodes the peripheral curves (and
2557
- slopes of Dehn-fillings if any are present), but you can request
2558
- only the “isomorphism signature” which can be given to
2559
- <a class="reference external" href="https://regina-normal.github.io/">Regina</a>.</p>
2560
- <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>
2561
- <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>
2562
- <span class="go">&#39;dLQacccjsnk&#39;</span>
2563
- <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>
2564
- <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>
2565
- <span class="go">0 -&gt; 0</span>
2566
- <span class="go">[1 18]</span>
2567
- <span class="go">[0 1]</span>
2568
- <span class="go">Extends to link</span>
2569
- <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>
2570
- <span class="go">&#39;dLQacccjsnk_BaRsB&#39;</span>
2571
- <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>
2572
- <span class="go">&#39;dLQacccjsnk_BaaB&#39;</span>
2573
- <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>
2574
- <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>
2575
- <span class="go">0 -&gt; 0</span>
2576
- <span class="go">[1 0]</span>
2577
- <span class="go">[0 1]</span>
2578
- <span class="go">Extends to link</span>
2579
- </pre></div>
2580
- </div>
2581
- <p>If you do not care about the indexing of the cusps when using a
2582
- decorated signature, use ignore_cusp_ordering</p>
2583
- <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>
2584
- <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>
2585
- <span class="gp">&gt;&gt;&gt; </span><span class="n">isosig</span>
2586
- <span class="go">&#39;xLLvLvMLPMPLAMQQcceflnjmmmospsrttvvvtswwwiieiifdeauinasltltahmbjn_bacBbaaBBaBbBbbaabba(2,3)(-2,1)(1,2)(3,4)(0,0)&#39;</span>
2587
- <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>
2588
- <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>
2589
- <span class="go">True</span>
3062
+ <p>The isomorphism signature is also used to compute the
3063
+ <a class="reference internal" href="#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>.
3064
+ 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>
3065
+ <p><strong>Undecorated isomorphism signature</strong></p>
3066
+ <p>The undecorated isomorphism signature is a complete invariant of the
3067
+ (oriented) triangulation up to combinatorial isomorphism:</p>
3068
+ <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>
3069
+ <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>
3070
+ <span class="go">&#39;dLQbcccdero&#39;</span>
3071
+ </pre></div>
3072
+ </div>
3073
+ <p>It was introduced in
3074
+ <a class="reference external" href="http://arxiv.org/abs/1110.6080">Burton ‘11</a>. It canonizes and
3075
+ generalizes the ealier dehydration string by
3076
+ <a class="reference external" href="https://doi.org/10.1090/S0025-5718-99-01036-4">Callahan, Hildebrand and Weeks ‘99</a>.
3077
+ The undecorated isomorphism signature can also be given to
3078
+ <a class="reference external" href="https://regina-normal.github.io/">Regina</a>’s
3079
+ <code class="docutils literal notranslate"><span class="pre">Triangulation3.fromIsoSig</span></code>.</p>
3080
+ <p>By default, the orientation (if orientable) is ignored. More
3081
+ precisely, it computes the string for both orientations (if orientable)
3082
+ and uses the lexicographically smaller string:</p>
3083
+ <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>
3084
+ <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>
3085
+ <span class="go">&#39;dLQbcccdero&#39;</span>
3086
+ <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>
3087
+ <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>
3088
+ <span class="go">&#39;dLQbcccdero&#39;</span>
3089
+ </pre></div>
3090
+ </div>
3091
+ <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
3092
+ encodes the orientation (if orientable). Now the result is
3093
+ different if we change the orientation of a chiral triangulation:</p>
3094
+ <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>
3095
+ <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>
3096
+ <span class="go">&#39;dLQbcccdero&#39;</span>
3097
+ <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>
3098
+ <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>
3099
+ <span class="go">&#39;dLQbccceekg&#39;</span>
3100
+ </pre></div>
3101
+ </div>
3102
+ <p><strong>Decorated isomorphism signature (default)</strong></p>
3103
+ <p>SnapPy can decorate the isomorphism signature to include the following
3104
+ peripheral information in a canonical way (that is invariant under
3105
+ the action by combinatorial isomorphisms of the triangulation):</p>
3106
+ <ol class="arabic simple">
3107
+ <li><p>Indexing of the cusps (that is, ideal vertices).</p>
3108
+ <ul class="simple">
3109
+ <li><p>Included by default.
3110
+ 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>
3111
+ </ul>
3112
+ </li>
3113
+ <li><p>Peripheral curves (aka meridian and longitude, up to homotopy).</p>
3114
+ <ul class="simple">
3115
+ <li><p>Included by default.
3116
+ 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>
3117
+ <li><p>By default, the decoration encodes the oriented peripheral curves.
3118
+ 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
3119
+ the unoriented peripheral curves instead.</p></li>
3120
+ </ul>
3121
+ </li>
3122
+ <li><p>Dehn-fillings (if present).</p>
3123
+ <ul class="simple">
3124
+ <li><p>By default, the decoration encodes the oriented Dehn-fillings.
3125
+ That is, we also encodes the orientation of the peripheral curve
3126
+ that is used for the Dehn-filling (this explanation only
3127
+ works if the coefficients are integral).
3128
+ 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
3129
+ decoration encodes the unoriented Dehn-fillings.
3130
+ That is, it normalizes the Dehn-filling coefficients by picking
3131
+ a canonical pair among <span class="math notranslate nohighlight">\((m,l)\)</span> and <span class="math notranslate nohighlight">\((-m,-l)\)</span>.</p></li>
3132
+ </ul>
3133
+ </li>
3134
+ </ol>
3135
+ <p>Details of the encoding are explained in the
3136
+ <a class="reference external" href="https://github.com/3-manifolds/SnapPy/blob/master/python/decorated_isosig.py">SnapPy source code</a>.</p>
3137
+ <p><strong>Example</strong></p>
3138
+ <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
3139
+ <a class="reference internal" href="#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>
3140
+ to make the following examples say something intrinsic about the
3141
+ hyperbolic manifold:</p>
3142
+ <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>
3143
+ <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>
3144
+ <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>
2590
3145
  </pre></div>
2591
3146
  </div>
2592
- <p>If you do not care about the orientations of the peripheral curves,
2593
- use ignore_curve_orientations</p>
2594
- <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>
2595
- <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>
2596
- <span class="go">&#39;gLLAQcdeefffdopuado_BabbBaab&#39;</span>
2597
- <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>
2598
- <span class="gp">&gt;&gt;&gt; </span><span class="n">isosig</span>
2599
- <span class="go">&#39;gLLAQcdeefffdopuado_babbbaab&#39;</span>
2600
- <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>
2601
- <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>
3147
+ <p>The decorated isosig recovers the entire peripheral information faithfully
3148
+ (including orientation, see below):</p>
3149
+ <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>
3150
+ <span class="go">&#39;oLLvzQLLQQccdhifihnlmkmlnnpvuvbvouggbggoo_baBabbbBbC&#39;</span>
3151
+ <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>
3152
+ <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>
2602
3153
  <span class="go">[0 -&gt; 0 1 -&gt; 1</span>
2603
- <span class="go">[-1 0] [-1 0]</span>
2604
- <span class="go">[ 0 1] [ 0 1]</span>
2605
- <span class="go">Extends to link, 0 -&gt; 0 1 -&gt; 1</span>
2606
- <span class="go">[1 0] [1 0]</span>
2607
- <span class="go">[0 -1] [0 -1]</span>
3154
+ <span class="go">[1 0] [1 0]</span>
3155
+ <span class="go">[0 1] [0 1]</span>
2608
3156
  <span class="go">Extends to link]</span>
2609
3157
  </pre></div>
2610
3158
  </div>
2611
- <p>By default, the isomorphism signature does not capture the orientation
2612
- of an orientable triangulation. If you specify
2613
- <cite>ignore_orientation = False</cite>, the isomorphism signature for an oriented
2614
- triangulation and its mirror image will be different if the
2615
- triangulation is cheiral.</p>
2616
- <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>
2617
- <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>
2618
- <span class="go">&#39;dLQacccjnjs&#39;</span>
2619
- <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>
2620
- <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>
2621
- <span class="go">&#39;dLQacccnsnk&#39;</span>
2622
- </pre></div>
2623
- </div>
2624
- <p>Note that a decorated triangulation isosig with the default values
2625
- <cite>ignore_orientation = True</cite> but <cite>ignore_curve_orientations = False</cite>
2626
- still captures the orientations of the triangulation through the
2627
- peripheral curves.</p>
2628
- <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>
2629
- <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>
2630
- <span class="go">&#39;dLQacccjnjs_aBbB&#39;</span>
2631
- <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>
2632
- <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>
2633
- <span class="go">&#39;dLQacccjnjs_aBBb&#39;</span>
2634
- </pre></div>
2635
- </div>
2636
- <p>The code has been copied from <a class="reference external" href="https://regina-normal.github.io/">Regina</a> where
2637
- the corresponding method is called “isoSig”.</p>
2638
- <p>Unlike dehydrations for 3-manifold triangulations, an
2639
- isomorphism signature uniquely determines a triangulation up
2640
- to combinatorial isomorphism. That is, two triangulations of
2641
- 3-dimensional manifolds are combinatorially isomorphic if and
2642
- only if their isomorphism signatures are the same string. For
2643
- full details, see <a class="reference external" href="http://arxiv.org/abs/1110.6080">Simplification paths in the Pachner graphs
2644
- of closed orientable 3-manifold triangulations, Burton, 2011</a>.</p>
2645
- <p>For details about how the peripheral decorations work, see
2646
- the SnapPy source code.</p>
3159
+ <p>The two links have isometric complements:</p>
3160
+ <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>
3161
+ <span class="go">&#39;oLLvzQLLQQccdhifihnlmkmlnnpvuvbvouggbggoo&#39;</span>
3162
+ <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>
3163
+ <span class="go">&#39;oLLvzQLLQQccdhifihnlmkmlnnpvuvbvouggbggoo&#39;</span>
3164
+ </pre></div>
3165
+ </div>
3166
+ <p>However, the complements have different handedness:</p>
3167
+ <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>
3168
+ <span class="go">&#39;oLLzLPwzQQccdeghjiiklmnmnnuvuvvavovvffffo&#39;</span>
3169
+ <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>
3170
+ <span class="go">&#39;oLLvzQLLQQccdhifihnlmkmlnnpvuvbvouggbggoo&#39;</span>
3171
+ </pre></div>
3172
+ </div>
3173
+ <p>Also, the cusps/components of the link are indexed differently:</p>
3174
+ <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>
3175
+ <span class="go">&#39;oLLvzQLLQQccdhifihnlmkmlnnpvuvbvouggbggoo_ba&#39;</span>
3176
+ <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>
3177
+ <span class="go">&#39;oLLvzQLLQQccdhifihnlmkmlnnpvuvbvouggbggoo_ab&#39;</span>
3178
+ </pre></div>
3179
+ </div>
3180
+ <p>Ignoring the indexing, we also see that the oriented merdians and
3181
+ longitudes do not match:</p>
3182
+ <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>
3183
+ <span class="go">&#39;oLLvzQLLQQccdhifihnlmkmlnnpvuvbvouggbggoo_bBbCBabb&#39;</span>
3184
+ <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>
3185
+ <span class="go">&#39;oLLvzQLLQQccdhifihnlmkmlnnpvuvbvouggbggoo_BbbCbabb&#39;</span>
3186
+ </pre></div>
3187
+ </div>
3188
+ <p>However, they are the same links (ignoring indexing and orientation):</p>
3189
+ <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>
3190
+ <span class="go">&#39;oLLvzQLLQQccdhifihnlmkmlnnpvuvbvouggbggoo_bBBcbabb&#39;</span>
3191
+ <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>
3192
+ <span class="go">&#39;oLLvzQLLQQccdhifihnlmkmlnnpvuvbvouggbggoo_bBBcbabb&#39;</span>
3193
+ </pre></div>
3194
+ </div>
3195
+ <p>Let us create two surgery presentations from the links (note that we
3196
+ fill after
3197
+ <a class="reference internal" href="#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>
3198
+ since it rejects Dehn-fillings):</p>
3199
+ <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>
3200
+ <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>
3201
+ </pre></div>
3202
+ </div>
3203
+ <p>They are equivalent surgery presentations (of the same manifold):</p>
3204
+ <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>
3205
+ <span class="gp">... </span> <span class="n">ignore_cusp_ordering</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
3206
+ <span class="gp">... </span> <span class="n">ignore_curves</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
3207
+ <span class="gp">... </span> <span class="n">ignore_filling_orientations</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
3208
+ <span class="go">&#39;oLLvzQLLQQccdhifihnlmkmlnnpvuvbvouggbggoo(0,0)(1,5)&#39;</span>
3209
+ <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>
3210
+ <span class="gp">... </span> <span class="n">ignore_cusp_ordering</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
3211
+ <span class="gp">... </span> <span class="n">ignore_curves</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
3212
+ <span class="gp">... </span> <span class="n">ignore_filling_orientations</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
3213
+ <span class="go">&#39;oLLvzQLLQQccdhifihnlmkmlnnpvuvbvouggbggoo(0,0)(1,5)&#39;</span>
3214
+ </pre></div>
3215
+ </div>
3216
+ <p><strong>Orientation</strong></p>
3217
+ <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
3218
+ part of the isomorphism signature. The decoration can still capture the
3219
+ the orientation.
3220
+ More, precisely, the result of <a class="reference internal" href="#snappy.Manifold.triangulation_isosig" title="snappy.Manifold.triangulation_isosig"><code class="xref py py-meth docutils literal notranslate"><span class="pre">triangulation_isosig()</span></code></a> depends on
3221
+ the orientation (if the triangulation is orientable and chiral) if any
3222
+ of the following is true:</p>
3223
+ <ol class="arabic simple">
3224
+ <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>
3225
+ <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
3226
+ <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
3227
+ <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>
3228
+ </ol>
3229
+ <p>In these cases, re-constructing a triangulation from the isomorphism
3230
+ signature yields a triangulation with the same handedness.</p>
3231
+ <dl class="field-list simple">
3232
+ <dt class="field-odd">Parameters<span class="colon">:</span></dt>
3233
+ <dd class="field-odd"><ul class="simple">
3234
+ <li><p><strong>decorated</strong> – Include peripheral information such as indexing of the cusps,
3235
+ (oriented or unoriented) peripheral curves and
3236
+ (oriented or unoriented) Dehn-fillings.</p></li>
3237
+ <li><p><strong>ignore_cusp_ordering</strong> – Do not encode the indexing of the cusps.
3238
+ 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>
3239
+ <li><p><strong>ignore_curves</strong> – Do not encode the peripheral curves.
3240
+ 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>.
3241
+ This is new in SnapPy version 3.2.
3242
+ 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
3243
+ be given to prior versions.</p></li>
3244
+ <li><p><strong>ignore_curve_orientations</strong> – Do not encode the orientations of the peripheral curves.
3245
+ 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
3246
+ <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>
3247
+ <li><p><strong>ignore_filling_orientations</strong> – Do not encode the orientations of the Dehn-fillings.
3248
+ 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>
3249
+ <li><p><strong>ignore_orientation</strong> – Do not encode the orientation of the triangulation in the
3250
+ undecorated part of the triangulation isosig.
3251
+ See above section about orientation.</p></li>
3252
+ </ul>
3253
+ </dd>
3254
+ </dl>
2647
3255
  </dd></dl>
2648
3256
 
2649
3257
  <dl class="py method">
2650
3258
  <dt class="sig sig-object py" id="snappy.Manifold.use_field_conversion">
2651
- <span class="sig-name descname"><span class="pre">use_field_conversion</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">type</span> <span class="pre">cls</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">func</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.use_field_conversion" title="Permalink to this definition"></a></dt>
3259
+ <em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">use_field_conversion</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.use_field_conversion" title="Link to this definition"></a></dt>
2652
3260
  <dd><p>A class method for specifying a numerical conversion function.
2653
3261
  This method is deprecated: SnapPy will automatically use
2654
3262
  SageMath number types or its own SnapPy number type depending on
@@ -2672,23 +3280,27 @@ strings ‘sage’ or ‘snappy’ can be passed as arguments to select
2672
3280
  either of the two default behaviors.</p>
2673
3281
  <p>EXAMPLE:</p>
2674
3282
  <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;m004&#39;</span><span class="p">)</span>
2675
- <span class="n">sage</span><span class="p">:</span> <span class="n">parent</span><span class="p">(</span><span class="n">M</span><span class="o">.</span><span class="n">volume</span><span class="p">())</span>
2676
- <span class="n">Real</span> <span class="n">Field</span> <span class="k">with</span> <span class="mi">64</span> <span class="n">bits</span> <span class="n">of</span> <span class="n">precision</span>
3283
+ <span class="n">sage</span><span class="p">:</span> <span class="n">R</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">volume</span><span class="p">()</span><span class="o">.</span><span class="n">parent</span><span class="p">()</span>
3284
+ <span class="n">sage</span><span class="p">:</span> <span class="n">R</span><span class="o">.</span><span class="n">name</span><span class="p">()</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">&#39;RealField&#39;</span><span class="p">)</span>
3285
+ <span class="kc">True</span>
3286
+ <span class="n">sage</span><span class="p">:</span> <span class="kn">from</span> <span class="nn">snappy.number</span> <span class="kn">import</span> <span class="n">SnapPyNumbers</span>
2677
3287
  <span class="n">sage</span><span class="p">:</span> <span class="n">Manifold</span><span class="o">.</span><span class="n">use_field_conversion</span><span class="p">(</span><span class="s1">&#39;snappy&#39;</span><span class="p">)</span>
2678
3288
  <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;m004&#39;</span><span class="p">)</span>
2679
- <span class="n">sage</span><span class="p">:</span> <span class="n">parent</span><span class="p">(</span><span class="n">M</span><span class="o">.</span><span class="n">volume</span><span class="p">())</span>
2680
- <span class="n">SnapPy</span> <span class="n">Numbers</span> <span class="k">with</span> <span class="mi">64</span> <span class="n">bits</span> <span class="n">precision</span>
3289
+ <span class="n">sage</span><span class="p">:</span> <span class="n">R</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">volume</span><span class="p">()</span><span class="o">.</span><span class="n">parent</span><span class="p">()</span>
3290
+ <span class="n">sage</span><span class="p">:</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">R</span><span class="p">,</span> <span class="n">SnapPyNumbers</span><span class="p">)</span>
3291
+ <span class="kc">True</span>
2681
3292
  <span class="n">sage</span><span class="p">:</span> <span class="n">Manifold</span><span class="o">.</span><span class="n">use_field_conversion</span><span class="p">(</span><span class="s1">&#39;sage&#39;</span><span class="p">)</span>
2682
3293
  <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;m004&#39;</span><span class="p">)</span>
2683
- <span class="n">sage</span><span class="p">:</span> <span class="n">parent</span><span class="p">(</span><span class="n">M</span><span class="o">.</span><span class="n">volume</span><span class="p">())</span>
2684
- <span class="n">Real</span> <span class="n">Field</span> <span class="k">with</span> <span class="mi">64</span> <span class="n">bits</span> <span class="n">of</span> <span class="n">precision</span>
3294
+ <span class="n">sage</span><span class="p">:</span> <span class="n">R</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">volume</span><span class="p">()</span><span class="o">.</span><span class="n">parent</span><span class="p">()</span>
3295
+ <span class="n">sage</span><span class="p">:</span> <span class="n">R</span><span class="o">.</span><span class="n">name</span><span class="p">()</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">&#39;RealField&#39;</span><span class="p">)</span>
3296
+ <span class="kc">True</span>
2685
3297
  </pre></div>
2686
3298
  </div>
2687
3299
  </dd></dl>
2688
3300
 
2689
3301
  <dl class="py method">
2690
3302
  <dt class="sig sig-object py" id="snappy.Manifold.verify_hyperbolicity">
2691
- <span class="sig-name descname"><span class="pre">verify_hyperbolicity</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">bits_prec</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">holonomy</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">fundamental_group_args</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[]</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">lift_to_SL</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.Manifold.verify_hyperbolicity" title="Permalink to this definition"></a></dt>
3303
+ <span class="sig-name descname"><span class="pre">verify_hyperbolicity</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">bits_prec</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">holonomy</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">fundamental_group_args</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[]</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">lift_to_SL</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.Manifold.verify_hyperbolicity" title="Link to this definition"></a></dt>
2692
3304
  <dd><p>Given an orientable SnapPy Manifold, verifies its hyperbolicity.</p>
2693
3305
  <p>Similar to HIKMOT’s <a class="reference internal" href="#snappy.Manifold.verify_hyperbolicity" title="snappy.Manifold.verify_hyperbolicity"><code class="xref py py-meth docutils literal notranslate"><span class="pre">verify_hyperbolicity()</span></code></a>, the result is either
2694
3306
  <code class="docutils literal notranslate"><span class="pre">(True,</span> <span class="pre">listOfShapeIntervals)</span></code> or <code class="docutils literal notranslate"><span class="pre">(False,</span> <span class="pre">[])</span></code> if verification failed.
@@ -2746,7 +3358,7 @@ tetrahedra are positively oriented.</p>
2746
3358
 
2747
3359
  <dl class="py method">
2748
3360
  <dt class="sig sig-object py" id="snappy.Manifold.volume">
2749
- <span class="sig-name descname"><span class="pre">volume</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">accuracy</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">verified</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">bits_prec</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.Manifold.volume" title="Permalink to this definition"></a></dt>
3361
+ <span class="sig-name descname"><span class="pre">volume</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">accuracy</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">verified</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">bits_prec</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.Manifold.volume" title="Link to this definition"></a></dt>
2750
3362
  <dd><p>Returns the volume of the current solution to the hyperbolic
2751
3363
  gluing equations; if the solution is sufficiently non-degenerate,
2752
3364
  this is the sum of the volumes of the hyperbolic pieces in
@@ -2778,9 +3390,9 @@ that the manifold is indeed hyperbolic):</p>
2778
3390
 
2779
3391
  <dl class="py method">
2780
3392
  <dt class="sig sig-object py" id="snappy.Manifold.with_hyperbolic_structure">
2781
- <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.Manifold.with_hyperbolic_structure" title="Permalink to this definition"></a></dt>
3393
+ <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.Manifold.with_hyperbolic_structure" title="Link to this definition"></a></dt>
2782
3394
  <dd><p>Add a (possibly degenerate) hyperbolic structure, turning the
2783
- Triangulation into a Manifold.</p>
3395
+ <a class="reference internal" href="triangulation.html#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="#snappy.Manifold" title="snappy.Manifold"><code class="xref py py-class docutils literal notranslate"><span class="pre">Manifold</span></code></a>.</p>
2784
3396
  <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>
2785
3397
  <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>
2786
3398
  <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>
@@ -2791,8 +3403,8 @@ Triangulation into a Manifold.</p>
2791
3403
 
2792
3404
  <dl class="py method">
2793
3405
  <dt class="sig sig-object py" id="snappy.Manifold.without_hyperbolic_structure">
2794
- <span class="sig-name descname"><span class="pre">without_hyperbolic_structure</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.without_hyperbolic_structure" title="Permalink to this definition"></a></dt>
2795
- <dd><p>Returns self as a Triangulation, forgetting the hyperbolic
3406
+ <span class="sig-name descname"><span class="pre">without_hyperbolic_structure</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.without_hyperbolic_structure" title="Link to this definition"></a></dt>
3407
+ <dd><p>Returns self as a <a class="reference internal" href="triangulation.html#snappy.Triangulation" title="snappy.Triangulation"><code class="xref py py-class docutils literal notranslate"><span class="pre">Triangulation</span></code></a>, forgetting the hyperbolic
2796
3408
  structure in the process.</p>
2797
3409
  <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;9_42&#39;</span><span class="p">)</span>
2798
3410
  <span class="gp">&gt;&gt;&gt; </span><span class="n">T</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">without_hyperbolic_structure</span><span class="p">()</span>
@@ -2817,7 +3429,7 @@ structure in the process.</p>
2817
3429
  <hr/>
2818
3430
 
2819
3431
  <div role="contentinfo">
2820
- <p>&#169; Copyright 2009-2023, by Marc Culler, Nathan Dunfield, Matthias Goerner, Jeffrey Weeks and others.</p>
3432
+ <p>&#169; Copyright 2009-2025, by Marc Culler, Nathan Dunfield, Matthias Goerner, Jeffrey Weeks and others.</p>
2821
3433
  </div>
2822
3434
 
2823
3435
  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a