snappy 3.0.3__cp38-cp38-macosx_11_0_arm64.whl → 3.2__cp38-cp38-macosx_11_0_arm64.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (401) hide show
  1. snappy/CyOpenGL.cpython-38-darwin.so +0 -0
  2. snappy/SnapPy.cpython-38-darwin.so +0 -0
  3. snappy/SnapPyHP.cpython-38-darwin.so +0 -0
  4. snappy/__init__.py +373 -426
  5. snappy/app.py +240 -75
  6. snappy/app_menus.py +93 -78
  7. snappy/browser.py +87 -63
  8. snappy/cache.py +5 -8
  9. snappy/canonical.py +249 -0
  10. snappy/{verify/cusp_shapes.py → cusps/__init__.py} +11 -19
  11. snappy/cusps/cusp_area_matrix.py +101 -0
  12. snappy/{verify/cusp_areas.py → cusps/cusp_areas_from_matrix.py} +39 -54
  13. snappy/cusps/maximal_cusp_area_matrix.py +136 -0
  14. snappy/cusps/test.py +21 -0
  15. snappy/cusps/trig_cusp_area_matrix.py +63 -0
  16. snappy/database.py +40 -31
  17. snappy/db_utilities.py +13 -14
  18. snappy/decorated_isosig.py +377 -133
  19. snappy/dev/extended_ptolemy/complexVolumesClosed.py +42 -9
  20. snappy/dev/extended_ptolemy/extended.py +32 -25
  21. snappy/dev/extended_ptolemy/giac_rur.py +23 -8
  22. snappy/dev/extended_ptolemy/phc_wrapper.py +10 -10
  23. snappy/dev/vericlosed/computeApproxHyperbolicStructureOrb.py +2 -1
  24. snappy/dev/vericlosed/gimbalLoopFinder.py +5 -5
  25. snappy/dev/vericlosed/hyperbolicStructure.py +3 -3
  26. snappy/dev/vericlosed/oneVertexTruncatedComplex.py +2 -2
  27. snappy/dev/vericlosed/truncatedComplex.py +3 -2
  28. snappy/dev/vericlosed/verifyHyperbolicStructureEngine.py +4 -3
  29. snappy/doc/_images/geodesics.jpg +0 -0
  30. snappy/doc/_images/m004_paper_plane_on_systole.jpg +0 -0
  31. snappy/doc/_images/m125_paper_plane.jpg +0 -0
  32. snappy/doc/_images/o9_00000_systole_paper_plane.jpg +0 -0
  33. snappy/doc/_images/o9_00000_systole_paper_plane_closer.jpg +0 -0
  34. snappy/doc/_sources/additional_classes.rst.txt +1 -0
  35. snappy/doc/_sources/credits.rst.txt +6 -1
  36. snappy/doc/_sources/development.rst.txt +69 -50
  37. snappy/doc/_sources/index.rst.txt +101 -66
  38. snappy/doc/_sources/installing.rst.txt +148 -165
  39. snappy/doc/_sources/news.rst.txt +136 -32
  40. snappy/doc/_sources/ptolemy.rst.txt +1 -1
  41. snappy/doc/_sources/ptolemy_examples1.rst.txt +9 -8
  42. snappy/doc/_sources/ptolemy_examples2.rst.txt +3 -3
  43. snappy/doc/_sources/ptolemy_examples3.rst.txt +14 -14
  44. snappy/doc/_sources/ptolemy_prelim.rst.txt +1 -1
  45. snappy/doc/_sources/snap.rst.txt +2 -2
  46. snappy/doc/_sources/snappy.rst.txt +1 -1
  47. snappy/doc/_sources/triangulation.rst.txt +3 -2
  48. snappy/doc/_sources/verify.rst.txt +89 -29
  49. snappy/doc/_sources/verify_internals.rst.txt +5 -16
  50. snappy/doc/_static/SnapPy-horizontal-128.png +0 -0
  51. snappy/doc/_static/SnapPy.ico +0 -0
  52. snappy/doc/_static/_sphinx_javascript_frameworks_compat.js +123 -0
  53. snappy/doc/_static/basic.css +47 -27
  54. snappy/doc/_static/css/badge_only.css +1 -0
  55. snappy/doc/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
  56. snappy/doc/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
  57. snappy/doc/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
  58. snappy/doc/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
  59. snappy/doc/_static/css/fonts/fontawesome-webfont.eot +0 -0
  60. snappy/doc/_static/css/fonts/fontawesome-webfont.svg +2671 -0
  61. snappy/doc/_static/css/fonts/fontawesome-webfont.ttf +0 -0
  62. snappy/doc/_static/css/fonts/fontawesome-webfont.woff +0 -0
  63. snappy/doc/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
  64. snappy/doc/_static/css/fonts/lato-bold-italic.woff +0 -0
  65. snappy/doc/_static/css/fonts/lato-bold-italic.woff2 +0 -0
  66. snappy/doc/_static/css/fonts/lato-bold.woff +0 -0
  67. snappy/doc/_static/css/fonts/lato-bold.woff2 +0 -0
  68. snappy/doc/_static/css/fonts/lato-normal-italic.woff +0 -0
  69. snappy/doc/_static/css/fonts/lato-normal-italic.woff2 +0 -0
  70. snappy/doc/_static/css/fonts/lato-normal.woff +0 -0
  71. snappy/doc/_static/css/fonts/lato-normal.woff2 +0 -0
  72. snappy/doc/_static/css/theme.css +4 -0
  73. snappy/doc/_static/doctools.js +107 -274
  74. snappy/doc/_static/documentation_options.js +6 -5
  75. snappy/doc/_static/fonts/Lato/lato-bold.eot +0 -0
  76. snappy/doc/_static/fonts/Lato/lato-bold.ttf +0 -0
  77. snappy/doc/_static/fonts/Lato/lato-bold.woff +0 -0
  78. snappy/doc/_static/fonts/Lato/lato-bold.woff2 +0 -0
  79. snappy/doc/_static/fonts/Lato/lato-bolditalic.eot +0 -0
  80. snappy/doc/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
  81. snappy/doc/_static/fonts/Lato/lato-bolditalic.woff +0 -0
  82. snappy/doc/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
  83. snappy/doc/_static/fonts/Lato/lato-italic.eot +0 -0
  84. snappy/doc/_static/fonts/Lato/lato-italic.ttf +0 -0
  85. snappy/doc/_static/fonts/Lato/lato-italic.woff +0 -0
  86. snappy/doc/_static/fonts/Lato/lato-italic.woff2 +0 -0
  87. snappy/doc/_static/fonts/Lato/lato-regular.eot +0 -0
  88. snappy/doc/_static/fonts/Lato/lato-regular.ttf +0 -0
  89. snappy/doc/_static/fonts/Lato/lato-regular.woff +0 -0
  90. snappy/doc/_static/fonts/Lato/lato-regular.woff2 +0 -0
  91. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
  92. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
  93. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
  94. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
  95. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
  96. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
  97. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
  98. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
  99. snappy/doc/_static/jquery.js +2 -2
  100. snappy/doc/_static/js/badge_only.js +1 -0
  101. snappy/doc/_static/js/theme.js +1 -0
  102. snappy/doc/_static/js/versions.js +228 -0
  103. snappy/doc/_static/language_data.js +3 -101
  104. snappy/doc/_static/pygments.css +1 -0
  105. snappy/doc/_static/searchtools.js +489 -398
  106. snappy/doc/_static/snappy_furo.css +33 -0
  107. snappy/doc/_static/snappy_sphinx_rtd_theme.css +42 -0
  108. snappy/doc/_static/sphinx_highlight.js +154 -0
  109. snappy/doc/additional_classes.html +688 -263
  110. snappy/doc/bugs.html +107 -94
  111. snappy/doc/censuses.html +155 -127
  112. snappy/doc/credits.html +115 -104
  113. snappy/doc/development.html +184 -146
  114. snappy/doc/genindex.html +287 -204
  115. snappy/doc/index.html +189 -150
  116. snappy/doc/installing.html +259 -266
  117. snappy/doc/manifold.html +1626 -592
  118. snappy/doc/manifoldhp.html +119 -105
  119. snappy/doc/news.html +198 -104
  120. snappy/doc/objects.inv +0 -0
  121. snappy/doc/other.html +117 -105
  122. snappy/doc/platonic_census.html +161 -114
  123. snappy/doc/plink.html +113 -105
  124. snappy/doc/ptolemy.html +131 -108
  125. snappy/doc/ptolemy_classes.html +242 -223
  126. snappy/doc/ptolemy_examples1.html +144 -130
  127. snappy/doc/ptolemy_examples2.html +141 -129
  128. snappy/doc/ptolemy_examples3.html +148 -132
  129. snappy/doc/ptolemy_examples4.html +131 -111
  130. snappy/doc/ptolemy_prelim.html +162 -138
  131. snappy/doc/py-modindex.html +104 -69
  132. snappy/doc/screenshots.html +117 -108
  133. snappy/doc/search.html +115 -84
  134. snappy/doc/searchindex.js +1 -1
  135. snappy/doc/snap.html +109 -96
  136. snappy/doc/snappy.html +134 -97
  137. snappy/doc/spherogram.html +259 -187
  138. snappy/doc/todo.html +107 -94
  139. snappy/doc/triangulation.html +1380 -111
  140. snappy/doc/tutorial.html +107 -94
  141. snappy/doc/verify.html +194 -125
  142. snappy/doc/verify_internals.html +248 -686
  143. snappy/drilling/__init__.py +456 -0
  144. snappy/drilling/barycentric.py +103 -0
  145. snappy/drilling/constants.py +5 -0
  146. snappy/drilling/crush.py +270 -0
  147. snappy/drilling/cusps.py +125 -0
  148. snappy/drilling/debug.py +242 -0
  149. snappy/drilling/epsilons.py +6 -0
  150. snappy/drilling/exceptions.py +55 -0
  151. snappy/drilling/moves.py +620 -0
  152. snappy/drilling/peripheral_curves.py +210 -0
  153. snappy/drilling/perturb.py +188 -0
  154. snappy/drilling/shorten.py +36 -0
  155. snappy/drilling/subdivide.py +274 -0
  156. snappy/drilling/test.py +23 -0
  157. snappy/drilling/test_cases.py +126 -0
  158. snappy/drilling/tracing.py +351 -0
  159. snappy/exceptions.py +23 -3
  160. snappy/export_stl.py +20 -14
  161. snappy/exterior_to_link/__init__.py +2 -0
  162. snappy/exterior_to_link/barycentric_geometry.py +463 -0
  163. snappy/exterior_to_link/exceptions.py +6 -0
  164. snappy/exterior_to_link/geodesic_map.json +14408 -0
  165. snappy/exterior_to_link/hyp_utils.py +112 -0
  166. snappy/exterior_to_link/link_projection.py +323 -0
  167. snappy/exterior_to_link/main.py +197 -0
  168. snappy/exterior_to_link/mcomplex_with_expansion.py +261 -0
  169. snappy/exterior_to_link/mcomplex_with_link.py +687 -0
  170. snappy/exterior_to_link/mcomplex_with_memory.py +162 -0
  171. snappy/exterior_to_link/pl_utils.py +491 -0
  172. snappy/exterior_to_link/put_in_S3.py +156 -0
  173. snappy/exterior_to_link/rational_linear_algebra.py +123 -0
  174. snappy/exterior_to_link/rational_linear_algebra_wrapped.py +135 -0
  175. snappy/exterior_to_link/simplify_to_base_tri.py +114 -0
  176. snappy/exterior_to_link/stored_moves.py +475 -0
  177. snappy/exterior_to_link/test.py +31 -0
  178. snappy/geometric_structure/__init__.py +212 -0
  179. snappy/geometric_structure/cusp_neighborhood/__init__.py +3 -0
  180. snappy/geometric_structure/cusp_neighborhood/complex_cusp_cross_section.py +697 -0
  181. snappy/geometric_structure/cusp_neighborhood/cusp_cross_section_base.py +484 -0
  182. snappy/geometric_structure/cusp_neighborhood/exceptions.py +42 -0
  183. snappy/geometric_structure/cusp_neighborhood/real_cusp_cross_section.py +298 -0
  184. snappy/geometric_structure/cusp_neighborhood/tiles_for_cusp_neighborhood.py +159 -0
  185. snappy/geometric_structure/cusp_neighborhood/vertices.py +32 -0
  186. snappy/geometric_structure/geodesic/__init__.py +0 -0
  187. snappy/geometric_structure/geodesic/add_core_curves.py +152 -0
  188. snappy/geometric_structure/geodesic/avoid_core_curves.py +369 -0
  189. snappy/geometric_structure/geodesic/canonical_keys.py +52 -0
  190. snappy/geometric_structure/geodesic/check_away_from_core_curve.py +60 -0
  191. snappy/geometric_structure/geodesic/constants.py +6 -0
  192. snappy/geometric_structure/geodesic/exceptions.py +22 -0
  193. snappy/geometric_structure/geodesic/fixed_points.py +93 -0
  194. snappy/geometric_structure/geodesic/geodesic_start_point_info.py +435 -0
  195. snappy/geometric_structure/geodesic/graph_trace_helper.py +67 -0
  196. snappy/geometric_structure/geodesic/line.py +30 -0
  197. snappy/geometric_structure/geodesic/multiplicity.py +127 -0
  198. snappy/geometric_structure/geodesic/tiles_for_geodesic.py +101 -0
  199. snappy/geometric_structure/test.py +22 -0
  200. snappy/gui.py +36 -36
  201. snappy/horoviewer.py +50 -48
  202. snappy/hyperboloid/__init__.py +212 -0
  203. snappy/hyperboloid/distances.py +245 -0
  204. snappy/hyperboloid/horoball.py +19 -0
  205. snappy/hyperboloid/line.py +35 -0
  206. snappy/hyperboloid/point.py +9 -0
  207. snappy/hyperboloid/triangle.py +29 -0
  208. snappy/{infodialog.py → infowindow.py} +32 -33
  209. snappy/isometry_signature.py +382 -0
  210. snappy/len_spec/__init__.py +596 -0
  211. snappy/len_spec/geodesic_info.py +110 -0
  212. snappy/len_spec/geodesic_key_info_dict.py +117 -0
  213. snappy/len_spec/geodesic_piece.py +143 -0
  214. snappy/len_spec/geometric_structure.py +182 -0
  215. snappy/len_spec/geometry.py +80 -0
  216. snappy/len_spec/length_spectrum_geodesic_info.py +170 -0
  217. snappy/len_spec/spine.py +206 -0
  218. snappy/len_spec/test.py +24 -0
  219. snappy/len_spec/test_cases.py +69 -0
  220. snappy/len_spec/tile.py +275 -0
  221. snappy/len_spec/word.py +86 -0
  222. snappy/manifolds/__init__.py +1 -1
  223. snappy/math_basics.py +176 -0
  224. snappy/matrix.py +525 -0
  225. snappy/number.py +97 -21
  226. snappy/numeric_output_checker.py +37 -27
  227. snappy/pari.py +30 -69
  228. snappy/phone_home.py +25 -20
  229. snappy/polyviewer.py +39 -37
  230. snappy/ptolemy/__init__.py +4 -6
  231. snappy/ptolemy/component.py +14 -12
  232. snappy/ptolemy/coordinates.py +312 -295
  233. snappy/ptolemy/fieldExtensions.py +14 -12
  234. snappy/ptolemy/findLoops.py +43 -31
  235. snappy/ptolemy/geometricRep.py +24 -26
  236. snappy/ptolemy/homology.py +12 -7
  237. snappy/ptolemy/manifoldMethods.py +69 -70
  238. snappy/ptolemy/matrix.py +65 -26
  239. snappy/ptolemy/numericalSolutionsToGroebnerBasis.py +18 -14
  240. snappy/ptolemy/polynomial.py +125 -119
  241. snappy/ptolemy/processComponents.py +36 -30
  242. snappy/ptolemy/processFileBase.py +79 -18
  243. snappy/ptolemy/processFileDispatch.py +13 -14
  244. snappy/ptolemy/processMagmaFile.py +44 -39
  245. snappy/ptolemy/processRurFile.py +18 -11
  246. snappy/ptolemy/ptolemyGeneralizedObstructionClass.py +20 -17
  247. snappy/ptolemy/ptolemyObstructionClass.py +13 -17
  248. snappy/ptolemy/ptolemyVariety.py +190 -121
  249. snappy/ptolemy/ptolemyVarietyPrimeIdealGroebnerBasis.py +20 -19
  250. snappy/ptolemy/reginaWrapper.py +25 -29
  251. snappy/ptolemy/rur.py +6 -14
  252. snappy/ptolemy/solutionsToPrimeIdealGroebnerBasis.py +27 -22
  253. snappy/ptolemy/test.py +247 -188
  254. snappy/ptolemy/utilities.py +41 -43
  255. snappy/raytracing/__init__.py +64 -0
  256. snappy/raytracing/additional_horospheres.py +64 -0
  257. snappy/raytracing/additional_len_spec_choices.py +63 -0
  258. snappy/raytracing/cohomology_fractal.py +10 -6
  259. snappy/raytracing/eyeball.py +123 -0
  260. snappy/raytracing/finite_raytracing_data.py +48 -38
  261. snappy/raytracing/finite_viewer.py +218 -210
  262. snappy/raytracing/geodesic_tube_info.py +174 -0
  263. snappy/raytracing/geodesics.py +246 -0
  264. snappy/raytracing/geodesics_window.py +258 -0
  265. snappy/raytracing/gui_utilities.py +152 -40
  266. snappy/raytracing/hyperboloid_navigation.py +102 -52
  267. snappy/raytracing/hyperboloid_utilities.py +114 -261
  268. snappy/raytracing/ideal_raytracing_data.py +256 -179
  269. snappy/raytracing/inside_viewer.py +522 -253
  270. snappy/raytracing/pack.py +22 -0
  271. snappy/raytracing/raytracing_data.py +46 -34
  272. snappy/raytracing/raytracing_view.py +190 -109
  273. snappy/raytracing/shaders/Eye.png +0 -0
  274. snappy/raytracing/shaders/NonGeometric.png +0 -0
  275. snappy/raytracing/shaders/__init__.py +60 -4
  276. snappy/raytracing/shaders/fragment.glsl +575 -148
  277. snappy/raytracing/test.py +29 -0
  278. snappy/raytracing/tooltip.py +146 -0
  279. snappy/raytracing/upper_halfspace_utilities.py +98 -0
  280. snappy/raytracing/view_scale_controller.py +98 -0
  281. snappy/raytracing/zoom_slider/__init__.py +32 -29
  282. snappy/raytracing/zoom_slider/test.py +2 -0
  283. snappy/sage_helper.py +69 -123
  284. snappy/{preferences.py → settings.py} +167 -145
  285. snappy/shell.py +4 -0
  286. snappy/snap/__init__.py +12 -8
  287. snappy/snap/character_varieties.py +24 -18
  288. snappy/snap/find_field.py +35 -34
  289. snappy/snap/fundamental_polyhedron.py +99 -85
  290. snappy/snap/generators.py +6 -8
  291. snappy/snap/interval_reps.py +18 -6
  292. snappy/snap/kernel_structures.py +8 -3
  293. snappy/snap/mcomplex_base.py +1 -2
  294. snappy/snap/nsagetools.py +107 -53
  295. snappy/snap/peripheral/__init__.py +1 -1
  296. snappy/snap/peripheral/dual_cellulation.py +15 -7
  297. snappy/snap/peripheral/link.py +20 -16
  298. snappy/snap/peripheral/peripheral.py +22 -14
  299. snappy/snap/peripheral/surface.py +47 -50
  300. snappy/snap/peripheral/test.py +8 -8
  301. snappy/snap/polished_reps.py +65 -40
  302. snappy/snap/shapes.py +41 -22
  303. snappy/snap/slice_obs_HKL.py +64 -25
  304. snappy/snap/t3mlite/arrow.py +88 -51
  305. snappy/snap/t3mlite/corner.py +5 -6
  306. snappy/snap/t3mlite/edge.py +32 -21
  307. snappy/snap/t3mlite/face.py +7 -9
  308. snappy/snap/t3mlite/files.py +31 -23
  309. snappy/snap/t3mlite/homology.py +14 -10
  310. snappy/snap/t3mlite/linalg.py +158 -56
  311. snappy/snap/t3mlite/mcomplex.py +739 -291
  312. snappy/snap/t3mlite/perm4.py +236 -84
  313. snappy/snap/t3mlite/setup.py +9 -10
  314. snappy/snap/t3mlite/simplex.py +65 -48
  315. snappy/snap/t3mlite/spun.py +42 -30
  316. snappy/snap/t3mlite/surface.py +45 -45
  317. snappy/snap/t3mlite/test.py +3 -0
  318. snappy/snap/t3mlite/test_vs_regina.py +17 -13
  319. snappy/snap/t3mlite/tetrahedron.py +25 -24
  320. snappy/snap/t3mlite/vertex.py +8 -13
  321. snappy/snap/test.py +45 -52
  322. snappy/snap/utilities.py +66 -65
  323. snappy/test.py +155 -158
  324. snappy/test_cases.py +263 -0
  325. snappy/testing.py +131 -0
  326. snappy/tiling/__init__.py +2 -0
  327. snappy/tiling/canonical_key_dict.py +59 -0
  328. snappy/tiling/dict_based_set.py +79 -0
  329. snappy/tiling/floor.py +49 -0
  330. snappy/tiling/hyperboloid_dict.py +54 -0
  331. snappy/tiling/iter_utils.py +78 -0
  332. snappy/tiling/lifted_tetrahedron.py +22 -0
  333. snappy/tiling/lifted_tetrahedron_set.py +54 -0
  334. snappy/tiling/real_hash_dict.py +164 -0
  335. snappy/tiling/test.py +23 -0
  336. snappy/tiling/tile.py +215 -0
  337. snappy/tiling/triangle.py +33 -0
  338. snappy/tkterminal.py +313 -203
  339. snappy/twister/main.py +1 -8
  340. snappy/twister/twister_core.cpython-38-darwin.so +0 -0
  341. snappy/upper_halfspace/__init__.py +146 -0
  342. snappy/upper_halfspace/ideal_point.py +26 -0
  343. snappy/verify/__init__.py +4 -8
  344. snappy/verify/{verifyCanonical.py → canonical.py} +114 -97
  345. snappy/verify/complex_volume/__init__.py +3 -2
  346. snappy/verify/complex_volume/adjust_torsion.py +13 -11
  347. snappy/verify/complex_volume/closed.py +29 -24
  348. snappy/verify/complex_volume/compute_ptolemys.py +8 -6
  349. snappy/verify/complex_volume/cusped.py +10 -9
  350. snappy/verify/complex_volume/extended_bloch.py +14 -12
  351. snappy/verify/{cuspTranslations.py → cusp_translations.py} +15 -14
  352. snappy/verify/edge_equations.py +80 -0
  353. snappy/verify/exceptions.py +23 -56
  354. snappy/verify/{verifyHyperbolicity.py → hyperbolicity.py} +19 -15
  355. snappy/verify/interval_newton_shapes_engine.py +51 -211
  356. snappy/verify/interval_tree.py +27 -25
  357. snappy/verify/krawczyk_shapes_engine.py +47 -50
  358. snappy/verify/maximal_cusp_area_matrix/__init__.py +17 -86
  359. snappy/verify/maximal_cusp_area_matrix/cusp_tiling_engine.py +58 -48
  360. snappy/verify/maximal_cusp_area_matrix/cusp_translate_engine.py +53 -57
  361. snappy/verify/{realAlgebra.py → real_algebra.py} +26 -20
  362. snappy/verify/shapes.py +10 -7
  363. snappy/verify/short_slopes.py +41 -42
  364. snappy/verify/{squareExtensions.py → square_extensions.py} +96 -92
  365. snappy/verify/test.py +59 -57
  366. snappy/verify/upper_halfspace/extended_matrix.py +5 -5
  367. snappy/verify/upper_halfspace/finite_point.py +44 -31
  368. snappy/verify/upper_halfspace/ideal_point.py +69 -57
  369. snappy/verify/volume.py +15 -12
  370. snappy/version.py +2 -3
  371. {snappy-3.0.3.dist-info → snappy-3.2.dist-info}/METADATA +14 -12
  372. snappy-3.2.dist-info/RECORD +503 -0
  373. {snappy-3.0.3.dist-info → snappy-3.2.dist-info}/WHEEL +1 -1
  374. {snappy-3.0.3.dist-info → snappy-3.2.dist-info}/entry_points.txt +0 -1
  375. {snappy-3.0.3.dist-info → snappy-3.2.dist-info}/top_level.txt +10 -1
  376. snappy/doc/_sources/verify_canon.rst.txt +0 -90
  377. snappy/doc/_static/classic.css +0 -266
  378. snappy/doc/_static/jquery-3.5.1.js +0 -10872
  379. snappy/doc/_static/sidebar.js +0 -159
  380. snappy/doc/_static/underscore-1.13.1.js +0 -2042
  381. snappy/doc/_static/underscore.js +0 -6
  382. snappy/doc/verify_canon.html +0 -283
  383. snappy/ppm_to_png.py +0 -243
  384. snappy/togl/__init__.py +0 -3
  385. snappy/togl/darwin-tk8.6/Togl2.1/LICENSE +0 -28
  386. snappy/togl/darwin-tk8.6/Togl2.1/libTogl2.1.dylib +0 -0
  387. snappy/togl/darwin-tk8.6/Togl2.1/pkgIndex.tcl +0 -5
  388. snappy/togl/linux2-x86_64-tk8.6/Togl2.1/LICENSE +0 -28
  389. snappy/togl/linux2-x86_64-tk8.6/Togl2.1/libTogl2.1.so +0 -0
  390. snappy/togl/linux2-x86_64-tk8.6/Togl2.1/pkgIndex.tcl +0 -5
  391. snappy/togl/win32VC-tk8.6/Togl2.1/LICENSE +0 -28
  392. snappy/togl/win32VC-tk8.6/Togl2.1/Togl21.dll +0 -0
  393. snappy/togl/win32VC-tk8.6/Togl2.1/Togl21.lib +0 -0
  394. snappy/togl/win32VC-tk8.6/Togl2.1/pkgIndex.tcl +0 -6
  395. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/LICENSE +0 -28
  396. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/Togl21.dll +0 -0
  397. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/Togl21.lib +0 -0
  398. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/pkgIndex.tcl +0 -6
  399. snappy/verify/cuspCrossSection.py +0 -1413
  400. snappy/verify/mathHelpers.py +0 -64
  401. snappy-3.0.3.dist-info/RECORD +0 -360
snappy/doc/manifold.html CHANGED
@@ -1,63 +1,200 @@
1
1
 
2
- <!DOCTYPE html>
3
2
 
4
- <html>
5
- <head>
6
- <meta charset="utf-8" />
7
- <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
8
-
9
- <title>Manifold: the main class &#8212; SnapPy 3.0.3 documentation</title>
10
- <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
11
- <link rel="stylesheet" type="text/css" href="_static/classic.css" />
12
-
13
- <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
14
- <script src="_static/jquery.js"></script>
15
- <script src="_static/underscore.js"></script>
16
- <script src="_static/doctools.js"></script>
17
-
3
+ <!DOCTYPE html>
4
+ <html class="writer-html5" lang="en" data-content_root="./">
5
+ <head>
6
+ <meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
7
+
8
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
9
+ <title>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
+
14
+
15
+ <link rel="shortcut icon" href="_static/SnapPy.ico"/>
16
+ <script src="_static/jquery.js?v=5d32c60e"></script>
17
+ <script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
18
+ <script src="_static/documentation_options.js?v=828ea960"></script>
19
+ <script src="_static/doctools.js?v=9a2dae69"></script>
20
+ <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
21
+ <script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
22
+ <script src="_static/js/theme.js"></script>
18
23
  <link rel="index" title="Index" href="genindex.html" />
19
24
  <link rel="search" title="Search" href="search.html" />
20
25
  <link rel="next" title="ManifoldHP: High-precision variant" href="manifoldhp.html" />
21
26
  <link rel="prev" title="The snappy module and its classes" href="snappy.html" />
22
- </head><body>
23
- <div class="related" role="navigation" aria-label="related navigation">
24
- <h3>Navigation</h3>
25
- <ul>
26
- <li class="right" style="margin-right: 10px">
27
- <a href="genindex.html" title="General Index"
28
- accesskey="I">index</a></li>
29
- <li class="right" >
30
- <a href="py-modindex.html" title="Python Module Index"
31
- >modules</a> |</li>
32
- <li class="right" >
33
- <a href="manifoldhp.html" title="ManifoldHP: High-precision variant"
34
- accesskey="N">next</a> |</li>
35
- <li class="right" >
36
- <a href="snappy.html" title="The snappy module and its classes"
37
- accesskey="P">previous</a> |</li>
38
- <li class="nav-item nav-item-0"><a href="index.html">SnapPy 3.0.3 documentation</a> &#187;</li>
39
- <li class="nav-item nav-item-1"><a href="snappy.html" accesskey="U">The snappy module and its classes</a> &#187;</li>
40
- <li class="nav-item nav-item-this"><a href="">Manifold: the main class</a></li>
41
- </ul>
42
- </div>
43
-
44
- <div class="document">
45
- <div class="documentwrapper">
46
- <div class="bodywrapper">
47
- <div class="body" role="main">
48
-
27
+ </head>
28
+
29
+ <body class="wy-body-for-nav">
30
+ <div class="wy-grid-for-nav">
31
+ <nav data-toggle="wy-nav-shift" class="wy-nav-side">
32
+ <div class="wy-side-scroll">
33
+ <div class="wy-side-nav-search" >
34
+
35
+
36
+
37
+ <a href="index.html" class="icon icon-home">
38
+ SnapPy
39
+ <img src="_static/SnapPy-horizontal-128.png" class="logo" alt="Logo"/>
40
+ </a>
41
+ <div role="search">
42
+ <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
43
+ <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
44
+ <input type="hidden" name="check_keywords" value="yes" />
45
+ <input type="hidden" name="area" value="default" />
46
+ </form>
47
+ </div>
48
+ </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
49
+ <ul class="current">
50
+ <li class="toctree-l1"><a class="reference internal" href="installing.html">Installing SnapPy</a></li>
51
+ <li class="toctree-l1"><a class="reference internal" href="screenshots.html">Screenshots: SnapPy in action</a></li>
52
+ <li class="toctree-l1"><a class="reference internal" href="tutorial.html">Tutorial</a></li>
53
+ <li class="toctree-l1 current"><a class="reference internal" href="snappy.html">The snappy module and its classes</a><ul class="current">
54
+ <li class="toctree-l2 current"><a class="current reference internal" href="#">Manifold: the main class</a><ul>
55
+ <li class="toctree-l3"><a class="reference internal" href="#snappy.Manifold"><code class="docutils literal notranslate"><span class="pre">Manifold</span></code></a><ul>
56
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.DT_code"><code class="docutils literal notranslate"><span class="pre">Manifold.DT_code()</span></code></a></li>
57
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.alexander_polynomial"><code class="docutils literal notranslate"><span class="pre">Manifold.alexander_polynomial()</span></code></a></li>
58
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.browse"><code class="docutils literal notranslate"><span class="pre">Manifold.browse()</span></code></a></li>
59
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.canonical_retriangulation"><code class="docutils literal notranslate"><span class="pre">Manifold.canonical_retriangulation()</span></code></a></li>
60
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.canonize"><code class="docutils literal notranslate"><span class="pre">Manifold.canonize()</span></code></a></li>
61
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.chern_simons"><code class="docutils literal notranslate"><span class="pre">Manifold.chern_simons()</span></code></a></li>
62
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.complex_volume"><code class="docutils literal notranslate"><span class="pre">Manifold.complex_volume()</span></code></a></li>
63
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.copy"><code class="docutils literal notranslate"><span class="pre">Manifold.copy()</span></code></a></li>
64
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.cover"><code class="docutils literal notranslate"><span class="pre">Manifold.cover()</span></code></a></li>
65
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.cover_info"><code class="docutils literal notranslate"><span class="pre">Manifold.cover_info()</span></code></a></li>
66
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.covers"><code class="docutils literal notranslate"><span class="pre">Manifold.covers()</span></code></a></li>
67
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.cusp_area_matrix"><code class="docutils literal notranslate"><span class="pre">Manifold.cusp_area_matrix()</span></code></a></li>
68
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.cusp_areas"><code class="docutils literal notranslate"><span class="pre">Manifold.cusp_areas()</span></code></a></li>
69
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.cusp_info"><code class="docutils literal notranslate"><span class="pre">Manifold.cusp_info()</span></code></a></li>
70
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.cusp_neighborhood"><code class="docutils literal notranslate"><span class="pre">Manifold.cusp_neighborhood()</span></code></a></li>
71
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.cusp_translations"><code class="docutils literal notranslate"><span class="pre">Manifold.cusp_translations()</span></code></a></li>
72
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.dehn_fill"><code class="docutils literal notranslate"><span class="pre">Manifold.dehn_fill()</span></code></a></li>
73
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.dirichlet_domain"><code class="docutils literal notranslate"><span class="pre">Manifold.dirichlet_domain()</span></code></a></li>
74
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.drill"><code class="docutils literal notranslate"><span class="pre">Manifold.drill()</span></code></a></li>
75
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.drill_word"><code class="docutils literal notranslate"><span class="pre">Manifold.drill_word()</span></code></a></li>
76
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.drill_words"><code class="docutils literal notranslate"><span class="pre">Manifold.drill_words()</span></code></a></li>
77
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.dual_curves"><code class="docutils literal notranslate"><span class="pre">Manifold.dual_curves()</span></code></a></li>
78
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.edge_valences"><code class="docutils literal notranslate"><span class="pre">Manifold.edge_valences()</span></code></a></li>
79
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.exterior_to_link"><code class="docutils literal notranslate"><span class="pre">Manifold.exterior_to_link()</span></code></a></li>
80
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.filled_triangulation"><code class="docutils literal notranslate"><span class="pre">Manifold.filled_triangulation()</span></code></a></li>
81
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.fundamental_group"><code class="docutils literal notranslate"><span class="pre">Manifold.fundamental_group()</span></code></a></li>
82
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.gluing_equations"><code class="docutils literal notranslate"><span class="pre">Manifold.gluing_equations()</span></code></a></li>
83
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.gluing_equations_pgl"><code class="docutils literal notranslate"><span class="pre">Manifold.gluing_equations_pgl()</span></code></a></li>
84
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.has_finite_vertices"><code class="docutils literal notranslate"><span class="pre">Manifold.has_finite_vertices()</span></code></a></li>
85
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.high_precision"><code class="docutils literal notranslate"><span class="pre">Manifold.high_precision()</span></code></a></li>
86
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.holonomy_matrix_entries"><code class="docutils literal notranslate"><span class="pre">Manifold.holonomy_matrix_entries()</span></code></a></li>
87
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.homological_longitude"><code class="docutils literal notranslate"><span class="pre">Manifold.homological_longitude()</span></code></a></li>
88
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.homology"><code class="docutils literal notranslate"><span class="pre">Manifold.homology()</span></code></a></li>
89
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.hyperbolic_SLN_torsion"><code class="docutils literal notranslate"><span class="pre">Manifold.hyperbolic_SLN_torsion()</span></code></a></li>
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>
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>
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>
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>
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>
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>
96
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.is_orientable"><code class="docutils literal notranslate"><span class="pre">Manifold.is_orientable()</span></code></a></li>
97
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.is_two_bridge"><code class="docutils literal notranslate"><span class="pre">Manifold.is_two_bridge()</span></code></a></li>
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>
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>
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>
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>
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>
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>
106
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.normal_surfaces"><code class="docutils literal notranslate"><span class="pre">Manifold.normal_surfaces()</span></code></a></li>
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>
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>
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>
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>
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>
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>
113
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.ptolemy_obstruction_classes"><code class="docutils literal notranslate"><span class="pre">Manifold.ptolemy_obstruction_classes()</span></code></a></li>
114
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.ptolemy_variety"><code class="docutils literal notranslate"><span class="pre">Manifold.ptolemy_variety()</span></code></a></li>
115
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.randomize"><code class="docutils literal notranslate"><span class="pre">Manifold.randomize()</span></code></a></li>
116
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.reverse_orientation"><code class="docutils literal notranslate"><span class="pre">Manifold.reverse_orientation()</span></code></a></li>
117
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.save"><code class="docutils literal notranslate"><span class="pre">Manifold.save()</span></code></a></li>
118
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.set_name"><code class="docutils literal notranslate"><span class="pre">Manifold.set_name()</span></code></a></li>
119
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.set_peripheral_curves"><code class="docutils literal notranslate"><span class="pre">Manifold.set_peripheral_curves()</span></code></a></li>
120
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.set_target_holonomy"><code class="docutils literal notranslate"><span class="pre">Manifold.set_target_holonomy()</span></code></a></li>
121
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.set_tetrahedra_shapes"><code class="docutils literal notranslate"><span class="pre">Manifold.set_tetrahedra_shapes()</span></code></a></li>
122
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.short_slopes"><code class="docutils literal notranslate"><span class="pre">Manifold.short_slopes()</span></code></a></li>
123
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.simplify"><code class="docutils literal notranslate"><span class="pre">Manifold.simplify()</span></code></a></li>
124
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.slice_obstruction_HKL"><code class="docutils literal notranslate"><span class="pre">Manifold.slice_obstruction_HKL()</span></code></a></li>
125
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.solution_type"><code class="docutils literal notranslate"><span class="pre">Manifold.solution_type()</span></code></a></li>
126
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.split"><code class="docutils literal notranslate"><span class="pre">Manifold.split()</span></code></a></li>
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>
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>
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>
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>
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>
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>
134
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.triangulation_isosig"><code class="docutils literal notranslate"><span class="pre">Manifold.triangulation_isosig()</span></code></a></li>
135
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.use_field_conversion"><code class="docutils literal notranslate"><span class="pre">Manifold.use_field_conversion()</span></code></a></li>
136
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.verify_hyperbolicity"><code class="docutils literal notranslate"><span class="pre">Manifold.verify_hyperbolicity()</span></code></a></li>
137
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.volume"><code class="docutils literal notranslate"><span class="pre">Manifold.volume()</span></code></a></li>
138
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.with_hyperbolic_structure"><code class="docutils literal notranslate"><span class="pre">Manifold.with_hyperbolic_structure()</span></code></a></li>
139
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.Manifold.without_hyperbolic_structure"><code class="docutils literal notranslate"><span class="pre">Manifold.without_hyperbolic_structure()</span></code></a></li>
140
+ </ul>
141
+ </li>
142
+ </ul>
143
+ </li>
144
+ <li class="toctree-l2"><a class="reference internal" href="manifoldhp.html">ManifoldHP: High-precision variant</a></li>
145
+ <li class="toctree-l2"><a class="reference internal" href="triangulation.html">Triangulation</a></li>
146
+ <li class="toctree-l2"><a class="reference internal" href="additional_classes.html">Additional Classes</a></li>
147
+ <li class="toctree-l2"><a class="reference internal" href="censuses.html">Census manifolds</a></li>
148
+ </ul>
149
+ </li>
150
+ <li class="toctree-l1"><a class="reference internal" href="plink.html">Using SnapPy’s link editor</a></li>
151
+ <li class="toctree-l1"><a class="reference internal" href="spherogram.html">Links: planar diagrams and invariants</a></li>
152
+ <li class="toctree-l1"><a class="reference internal" href="snap.html">Number theory of hyperbolic 3-manifolds</a></li>
153
+ <li class="toctree-l1"><a class="reference internal" href="verify.html">Verified computations</a></li>
154
+ <li class="toctree-l1"><a class="reference internal" href="other.html">Other components</a></li>
155
+ <li class="toctree-l1"><a class="reference internal" href="news.html">News</a></li>
156
+ <li class="toctree-l1"><a class="reference internal" href="credits.html">Credits</a></li>
157
+ <li class="toctree-l1"><a class="reference internal" href="bugs.html">Reporting bugs and other problems</a></li>
158
+ <li class="toctree-l1"><a class="reference internal" href="todo.html">To Do List</a></li>
159
+ <li class="toctree-l1"><a class="reference internal" href="development.html">Development Basics</a></li>
160
+ </ul>
161
+
162
+ </div>
163
+ </div>
164
+ </nav>
165
+
166
+ <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
167
+ <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
168
+ <a href="index.html">SnapPy</a>
169
+ </nav>
170
+
171
+ <div class="wy-nav-content">
172
+ <div class="rst-content">
173
+ <div role="navigation" aria-label="Page navigation">
174
+ <ul class="wy-breadcrumbs">
175
+ <li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
176
+ <li class="breadcrumb-item"><a href="snappy.html">The snappy module and its classes</a></li>
177
+ <li class="breadcrumb-item active">Manifold: the main class</li>
178
+ <li class="wy-breadcrumbs-aside">
179
+ </li>
180
+ </ul>
181
+ <hr/>
182
+ </div>
183
+ <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
184
+ <div itemprop="articleBody">
185
+
49
186
  <section id="manifold-the-main-class">
50
- <h1>Manifold: the main class<a class="headerlink" href="#manifold-the-main-class" title="Permalink to this headline">¶</a></h1>
187
+ <h1>Manifold: the main class<a class="headerlink" href="#manifold-the-main-class" title="Link to this heading"></a></h1>
51
188
  <dl class="py class">
52
189
  <dt class="sig sig-object py" id="snappy.Manifold">
53
- <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>
54
- <dd><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.
55
192
  That is, a Manifold is an ideal triangulation of the interior of a
56
- compact 3-manifold with torus boundary, where each tetrahedron has
57
- has been assigned the geometry of an ideal tetrahedron in
58
- hyperbolic 3-space. A Dehn-filling can be specified for each
59
- boundary component, allowing the description of closed 3-manifolds
60
- and some orbifolds. Here’s a quick example:</p>
193
+ compact 3-manifold with torus and Klein-bottle boundary components, where
194
+ each tetrahedron has been assigned the geometry of an ideal tetrahedron
195
+ in hyperbolic 3-space. A Dehn-filling can be specified for each
196
+ boundary component, allowing the description of closed 3-manifolds,
197
+ some orbifolds and cone 3-manifolds. Here’s a quick example:</p>
61
198
  <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>
62
199
  <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>
63
200
  <span class="go">4.05686022</span>
@@ -65,6 +202,20 @@ and some orbifolds. Here’s a quick example:</p>
65
202
  <span class="go">[-4.278936315 + 1.95728679*I]</span>
66
203
  </pre></div>
67
204
  </div>
205
+ <p>This is an example for running SnapPy inside Sage:</p>
206
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="kn">import</span> <span class="nn">snappy</span>
207
+ <span class="n">sage</span><span class="p">:</span> <span class="n">M</span> <span class="o">=</span> <span class="n">snappy</span><span class="o">.</span><span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;m125(1,2)(4,5)&#39;</span><span class="p">)</span>
208
+ <span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">.</span><span class="n">is_orientable</span><span class="p">()</span>
209
+ <span class="kc">True</span>
210
+ </pre></div>
211
+ </div>
212
+ <p>An alternative way of running SnapPy inside Sage:</p>
213
+ <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">snappy</span> <span class="kn">import</span> <span class="o">*</span>
214
+ <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;m123&#39;</span><span class="p">)</span>
215
+ <span class="n">sage</span><span class="p">:</span> <span class="n">M</span><span class="o">.</span><span class="n">num_cusps</span><span class="p">()</span>
216
+ <span class="mi">1</span>
217
+ </pre></div>
218
+ </div>
68
219
  <p>A Manifold can be specified in a number of ways, e.g.</p>
69
220
  <ul class="simple">
70
221
  <li><p>Manifold(‘9_42’) : The complement of the knot 9_42 in S^3.</p></li>
@@ -78,15 +229,15 @@ specify a link complement.</p></li>
78
229
  information on Dehn fillings added.</p>
79
230
  <ul>
80
231
  <li><p>SnapPea cusped census manifolds: e.g. ‘m123’, ‘s123’, ‘v123’.</p></li>
81
- <li><dl class="simple">
82
- <dt>Link complements:</dt><dd><ul class="simple">
232
+ <li><p>Link complements:</p>
233
+ <blockquote>
234
+ <div><ul class="simple">
83
235
  <li><p>Rolfsen’s table: e.g. ‘4_1’, ‘04_1’, ‘5^2_6’, ‘6_4^7’, ‘L20935’, ‘l104001’.</p></li>
84
236
  <li><p>Hoste-Thistlethwaite Knotscape table: e.g. ‘11a17’ or ‘12n345’</p></li>
85
237
  <li><p>Callahan-Dean-Weeks-Champanerkar-Kofman-Patterson knots: e.g. ‘K6_21’.</p></li>
86
238
  <li><p>Dowker-Thistlethwaite code: e.g. ‘DT:[(6,8,2,4)]’</p></li>
87
239
  </ul>
88
- </dd>
89
- </dl>
240
+ </div></blockquote>
90
241
  </li>
91
242
  <li><p>Once-punctured torus bundles: e.g. ‘b++LLR’, ‘b+-llR’, ‘bo-RRL’, ‘bn+LRLR’</p></li>
92
243
  <li><p>Fibered manifold associated to a braid: ‘Braid[1,2,-3,4]’</p>
@@ -101,14 +252,15 @@ of the last cusp.</p>
101
252
  </li>
102
253
  <li><p>A SnapPea triangulation or link projection file: ‘filename’</p>
103
254
  <p>The file will be loaded if found in the current directory or the
104
- path given by the shell variable SNAPPEA_MANIFOLD_DIRECTORY.</p>
255
+ path given by the shell variable <code class="docutils literal notranslate"><span class="pre">SNAPPEA_MANIFOLD_DIRECTORY</span></code>.
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>
105
257
  </li>
106
258
  <li><p>A string containing the contents of a SnapPea triangulation or link
107
259
  projection file.</p></li>
108
260
  </ul>
109
261
  <dl class="py method">
110
262
  <dt class="sig sig-object py" id="snappy.Manifold.DT_code">
111
- <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>
112
264
  <dd><p>Return the Dowker-Thistlethwaite code of this link complement,
113
265
  if it is a link complement. The DT code is intended to be an
114
266
  immutable attribute, for use with knot and link exteriors
@@ -129,7 +281,7 @@ only, which is set only when the manifold was created.</p>
129
281
 
130
282
  <dl class="py method">
131
283
  <dt class="sig sig-object py" id="snappy.Manifold.alexander_polynomial">
132
- <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>
133
285
  <dd><p>Computes the multivariable Alexander polynomial of the manifold:</p>
134
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>
135
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>
@@ -140,48 +292,179 @@ only, which is set only when the manifold was created.</p>
140
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>
141
293
  </pre></div>
142
294
  </div>
143
- <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
144
297
  so affect the group presentation used in the computation.</p>
145
298
  </dd></dl>
146
299
 
147
300
  <dl class="py method">
148
301
  <dt class="sig sig-object py" id="snappy.Manifold.browse">
149
- <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>
150
- <dd><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>
151
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">browse</span><span class="p">()</span> <span class="c1"># Opens browser window </span>
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>
303
+ <dd><p>Opens browser window with a graphical interface, which allows to
304
+ explore the manifold and interact with it.
305
+ This includes: invariants, Dirichlet domain, cusp neighborhoods,
306
+ inside view, symmetry, Dehn filling, drilling, etc.</p>
307
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;m125&#39;</span><span class="p">)</span>
308
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">browse</span><span class="p">()</span>
152
309
  </pre></div>
153
310
  </div>
311
+ <p>This does not work when using SnapPy in a Docker container.</p>
154
312
  </dd></dl>
155
313
 
156
314
  <dl class="py method">
157
315
  <dt class="sig sig-object py" id="snappy.Manifold.canonical_retriangulation">
158
- <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>
159
- <dd><p>The canonical retriangulation which is closely related to the canonical
160
- 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>
161
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>
162
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>
163
- <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>
164
- <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>
364
+ </pre></div>
365
+ </div>
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>
165
398
  </pre></div>
166
399
  </div>
167
- <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
168
- passed as argument, the verify module will certify the result to be
169
- correct:</p>
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>
170
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>
171
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>
172
- <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>
173
- <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>
174
416
  </pre></div>
175
417
  </div>
176
- <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
177
- 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>
178
459
  </dd></dl>
179
460
 
180
461
  <dl class="py method">
181
462
  <dt class="sig sig-object py" id="snappy.Manifold.canonize">
182
- <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>
183
464
  <dd><p>Change the triangulation to an arbitrary retriangulation of
184
- 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>
185
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>
186
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>
187
470
  <span class="go">3</span>
@@ -190,22 +473,24 @@ the canonical cell decomposition.</p>
190
473
  <span class="go">4</span>
191
474
  </pre></div>
192
475
  </div>
193
- <p>Note: due to rounding error, it is possible that this is not
194
- 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>
195
478
  </dd></dl>
196
479
 
197
480
  <dl class="py method">
198
481
  <dt class="sig sig-object py" id="snappy.Manifold.chern_simons">
199
- <span class="sig-name descname"><span class="pre">chern_simons</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.chern_simons" title="Permalink to this definition">¶</a></dt>
200
- <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>
201
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>
202
- <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>
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>
203
487
  <span class="go">-0.15320413</span>
204
488
  </pre></div>
205
489
  </div>
206
490
  <p>The return value has an extra attribute, accuracy, which
207
491
  is the number of digits of accuracy as <em>estimated</em> by SnapPea.</p>
208
- <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">chern_simons</span><span class="p">()</span><span class="o">.</span><span class="n">accuracy</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mi">9</span><span class="p">,</span> <span class="mi">56</span><span class="p">)</span> <span class="c1"># Low and High precision</span>
492
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">cs</span><span class="p">,</span> <span class="n">accuracy</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">chern_simons</span><span class="p">(</span><span class="n">accuracy</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span>
493
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">accuracy</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mi">9</span><span class="p">,</span> <span class="mi">56</span><span class="p">)</span> <span class="c1"># Low and High precision</span>
209
494
  <span class="go">True</span>
210
495
  </pre></div>
211
496
  </div>
@@ -216,31 +501,42 @@ original algorithm, which is based on Meyerhoff-Hodgson-Neumann.</p>
216
501
  manifold, one must sometimes compute it first for the unfilled
217
502
  manifold so as to initialize SnapPea’s internals. For instance,</p>
218
503
  <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>
219
- <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>
504
+ <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>
220
505
  <span class="go">-0.15320413</span>
221
506
  <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">dehn_fill</span><span class="p">(</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">)</span> <span class="p">)</span>
222
- <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>
507
+ <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>
223
508
  <span class="go">0.07731787</span>
224
509
  </pre></div>
225
510
  </div>
226
- <p>works, but will fail with ‘Chern-Simons invariant not
227
- currently known’ if the first call to chern_simons is not
228
- 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>
229
514
  </dd></dl>
230
515
 
231
516
  <dl class="py method">
232
517
  <dt class="sig sig-object py" id="snappy.Manifold.complex_volume">
233
- <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>
234
- <dd><p>Returns the complex volume, i.e.
235
- 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>
236
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>
237
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>
238
525
  <span class="go">2.82812209 - 3.02412838*I</span>
239
- <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>
240
- <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>
241
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>
242
538
  <span class="go">2.22671790 + 1.52619361*I</span>
243
- <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>
244
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>
245
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>
246
542
  <span class="go">0</span>
@@ -250,11 +546,11 @@ volume + i 2 pi^2 (chern simons)</p>
250
546
  </div>
251
547
  <p>If no cusp is filled or there is only one cusped (filled or
252
548
  unfilled), the complex volume can be verified up to multiples
253
- of i pi^2 / 2 by passing <cite>verified_modulo_2_torsion = True</cite>
254
- when inside SageMath (and higher precision can be requested
255
- 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>
256
552
  <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: M = Manifold(&quot;m015&quot;)
257
- 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
258
554
  2.828122088330783162764? + 1.910673824035377649698?*I
259
555
  sage: M = Manifold(&quot;m015(3,4)&quot;)
260
556
  sage: M.complex_volume(verified_modulo_2_torsion=True) # doctest: +NUMERIC6
@@ -265,7 +561,7 @@ sage: M.complex_volume(verified_modulo_2_torsion=True) # doctest: +NUMERIC6
265
561
 
266
562
  <dl class="py method">
267
563
  <dt class="sig sig-object py" id="snappy.Manifold.copy">
268
- <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>
269
565
  <dd><p>Returns a copy of the manifold</p>
270
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>
271
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>
@@ -275,24 +571,22 @@ sage: M.complex_volume(verified_modulo_2_torsion=True) # doctest: +NUMERIC6
275
571
 
276
572
  <dl class="py method">
277
573
  <dt class="sig sig-object py" id="snappy.Manifold.cover">
278
- <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>
279
- <dd><p>M.cover(permutation_rep)</p>
280
- <p>Returns a Manifold representing the finite cover
281
- specified by a transitive permutation representation. The
282
- representation is specified by a list of permutations, one for
283
- each generator of the simplified presentation of the
284
- fundamental group. Each permutation is specified as a list P
285
- such that set(P) == set(range(d)) where d is the degree of the
286
- 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>
287
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>
288
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>
289
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>
290
584
  <span class="go">True</span>
291
585
  </pre></div>
292
586
  </div>
293
- <p>If within Sage, the permutations can also be of type
294
- PermutationGroupElement, in which case they act on the set
295
- 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
296
590
  of the fundamental group. Some examples:</p>
297
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>
298
592
  </pre></div>
@@ -312,13 +606,13 @@ of the fundamental group. Some examples:</p>
312
606
  <p>Or a homomorphism to a permutation group:</p>
313
607
  <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">f</span> <span class="o">=</span> <span class="n">G</span><span class="o">.</span><span class="n">GQuotients</span><span class="p">(</span><span class="n">PSL</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">7</span><span class="p">))[</span><span class="mi">1</span><span class="p">]</span>
314
608
  <span class="n">sage</span><span class="p">:</span> <span class="n">N2</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="n">f</span><span class="p">)</span>
315
- <span class="n">sage</span><span class="p">:</span> <span class="n">N2</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>
609
+ <span class="n">sage</span><span class="p">:</span> <span class="n">N2</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="c1"># doctest: +NUMERIC9</span>
316
610
  <span class="mf">8.00000000</span>
317
611
  </pre></div>
318
612
  </div>
319
613
  <p>Or maybe we want larger cover coming from the kernel of this:</p>
320
614
  <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">N3</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="n">f</span><span class="o">.</span><span class="n">Kernel</span><span class="p">())</span>
321
- <span class="n">sage</span><span class="p">:</span> <span class="n">N3</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>
615
+ <span class="n">sage</span><span class="p">:</span> <span class="n">N3</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="c1"># doctest: +NUMERIC9</span>
322
616
  <span class="mf">168.00000000</span>
323
617
  </pre></div>
324
618
  </div>
@@ -344,7 +638,7 @@ of the fundamental group. Some examples:</p>
344
638
 
345
639
  <dl class="py method">
346
640
  <dt class="sig sig-object py" id="snappy.Manifold.cover_info">
347
- <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>
348
642
  <dd><p>If this is a manifold or triangulation which was constructed as
349
643
  a covering space, return a dictionary describing the cover. Otherwise
350
644
  return 0. The dictionary keys are ‘base’, ‘type’ and ‘degree’.</p>
@@ -352,24 +646,35 @@ return 0. The dictionary keys are ‘base’, ‘type’ and ‘degree’.</p>
352
646
 
353
647
  <dl class="py method">
354
648
  <dt class="sig sig-object py" id="snappy.Manifold.covers">
355
- <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>
356
- <dd><p>M.covers(degree, method=None)</p>
357
- <p>Returns a list of Manifolds corresponding to all of the
358
- finite covers of the given degree.</p>
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
651
+ finite covers of the given degree. The default method is
652
+ ‘low_index’ for general covers and ‘snappea’ for cyclic
653
+ covers. The former uses Sim’s algorithm while the latter
654
+ uses the original Snappea algorithm.</p>
359
655
  <p>WARNING: If the degree is large this might take a very, very,
360
656
  very long time.</p>
361
657
  <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&#39;</span><span class="p">)</span>
362
658
  <span class="gp">&gt;&gt;&gt; </span><span class="n">covers</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">covers</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span>
363
- <span class="gp">&gt;&gt;&gt; </span><span class="p">[(</span><span class="n">N</span><span class="p">,</span> <span class="n">N</span><span class="o">.</span><span class="n">homology</span><span class="p">())</span> <span class="k">for</span> <span class="n">N</span> <span class="ow">in</span> <span class="n">covers</span><span class="p">]</span>
364
- <span class="go">[(m003~irr~0(0,0)(0,0), Z/5 + Z + Z), (m003~cyc~1(0,0), Z/3 + Z/15 + Z)]</span>
659
+ <span class="gp">&gt;&gt;&gt; </span><span class="nb">sorted</span><span class="p">(</span><span class="n">N</span><span class="o">.</span><span class="n">homology</span><span class="p">()</span> <span class="k">for</span> <span class="n">N</span> <span class="ow">in</span> <span class="n">covers</span><span class="p">)</span>
660
+ <span class="go">[Z/3 + Z/15 + Z, Z/5 + Z + Z]</span>
365
661
  </pre></div>
366
662
  </div>
367
- <p>You can also look just at cyclic covers, which is much faster.</p>
663
+ <p>It is faster to look just at cyclic covers.</p>
368
664
  <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">covers</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">covers</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="n">cover_type</span><span class="o">=</span><span class="s1">&#39;cyclic&#39;</span><span class="p">)</span>
369
665
  <span class="gp">&gt;&gt;&gt; </span><span class="p">[(</span><span class="n">N</span><span class="p">,</span> <span class="n">N</span><span class="o">.</span><span class="n">homology</span><span class="p">())</span> <span class="k">for</span> <span class="n">N</span> <span class="ow">in</span> <span class="n">covers</span><span class="p">]</span>
370
666
  <span class="go">[(m003~cyc~0(0,0), Z/3 + Z/15 + Z)]</span>
371
667
  </pre></div>
372
668
  </div>
669
+ <p>Here we check that we get the same number of covers with the
670
+ ‘snappea’ and ‘low_index’ methods.</p>
671
+ <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>
672
+ <span class="gp">&gt;&gt;&gt; </span><span class="nb">len</span><span class="p">(</span><span class="n">M</span><span class="o">.</span><span class="n">covers</span><span class="p">(</span><span class="mi">5</span><span class="p">))</span>
673
+ <span class="go">19</span>
674
+ <span class="gp">&gt;&gt;&gt; </span><span class="nb">len</span><span class="p">(</span><span class="n">M</span><span class="o">.</span><span class="n">covers</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="n">method</span><span class="o">=</span><span class="s1">&#39;snappea&#39;</span><span class="p">))</span>
675
+ <span class="go">19</span>
676
+ </pre></div>
677
+ </div>
373
678
  <p>If you are using Sage, you can use GAP to find the subgroups,
374
679
  which is often much faster, by specifying the optional
375
680
  argument method = ‘gap’ If you have Magma installed, you can
@@ -378,143 +683,150 @@ used it to do the heavy lifting by specifying method=’magma’.</p>
378
683
 
379
684
  <dl class="py method">
380
685
  <dt class="sig sig-object py" id="snappy.Manifold.cusp_area_matrix">
381
- <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>
382
- <dd><p>This function returns a matrix that can be used to check whether
383
- cusp neighborhoods of areas a<sub>0</sub>, …, a<sub>m-1</sub> are
384
- disjoint: the cusp neighborhoods about cusp i and j are
385
- disjoint (respectively, the cusp neighborhood embeds if i and j
386
- are equal) if a<sub>i</sub> * a<sub>j</sub> is less than or equal to
387
- the entry (i,j) of the cusp area matrix. Note that the “if”
388
- becomes “if and only if if we pick the “maximal cusp area
389
- matrix”.</p>
390
- <p>This function can operate in different ways (determined by
391
- <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>),
392
- it returns a result which can be suboptimal and non-deterministic
393
- but is quicker to compute and sufficies for many applications:</p>
394
- <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>
395
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>
396
- <span class="go">[28.0000000000000 7.00000000000000 6.99999999999999]</span>
397
- <span class="go">[7.00000000000000 21.4375000000000 7.00000000000000]</span>
398
- <span class="go">[6.99999999999999 7.00000000000000 21.4375000000000]</span>
399
- </pre></div>
400
- </div>
401
- <p>If <code class="docutils literal notranslate"><span class="pre">method='maximal'</span></code> is specified, the result is the “maximal
402
- cusp area matrix”, thus it is optimal and an invariant of the
403
- manifold with labeled cusps. Note that the maximal cusp area
404
- matrix is only available as verified computation and thus
405
- requires passing <code class="docutils literal notranslate"><span class="pre">verified</span> <span class="pre">=</span> <span class="pre">True</span></code>:</p>
406
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: M.cusp_area_matrix(method = &#39;maximal&#39;, verified=True) # doctest: +NUMERIC6
407
- [28.0000000000? 7.0000000000? 7.0000000000?]
408
- [ 7.0000000000? 28.000000000? 7.00000000000?]
409
- [ 7.0000000000? 7.00000000000? 28.00000000?]
410
- </pre></div>
411
- </div>
412
- <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
413
- <code class="docutils literal notranslate"><span class="pre">maximal</span></code>, the entries are all guaranteed to be less than the
414
- corresponding ones in the maximal cusp area matrix (more
415
- precisely, the lower end point of the interval is guaranteed to be
416
- less than the true value of the corresponding maximal cusp area
417
- matrix entry):</p>
418
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: M.cusp_area_matrix(verified=True, bits_prec=70) # doctest: +NUMERIC15
419
- [ 28.000000000000000? 7.0000000000000000? 7.0000000000000000?]
420
- [ 7.0000000000000000? 21.4375000000000000? 7.0000000000000000?]
421
- [ 7.0000000000000000? 7.0000000000000000? 21.4375000000000000?]
422
- </pre></div>
423
- </div>
424
- <p>For expert users:</p>
425
- <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>:
426
- this result is also fast to compute by making the assumption that
427
- cusp neighborhoods are not only disjoint but also in “standard
428
- form” with respect to the triangulation (i.e., when lifting of a
429
- cusp neighborhood to a horoball in the universal cover, it
430
- intersects a geodesic tetrahedron in three but not four
431
- faces). <code class="docutils literal notranslate"><span class="pre">trigDependentTryCanonize</span></code> is similar to
432
- <code class="docutils literal notranslate"><span class="pre">trigDependent</span></code> but tries to “proto-canonize” (a copy of) the
433
- triangulation first since this often produces a matrix that is
434
- closer to the maximal cusp area matrix, for example:</p>
435
- <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>
436
- <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>
437
- <span class="go">[72.9848715318467 12.7560424258060]</span>
438
- <span class="go">[12.7560424258060 6.65567118002656]</span>
439
- <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>
440
- <span class="go">[72.9848715318466 12.7560424258060]</span>
441
- <span class="go">[12.7560424258060 62.1043047674605]</span>
442
- </pre></div>
443
- </div>
444
- <p>Compare to maximal area matrix:</p>
445
- <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
446
- [ 72.984871531846664? 12.7560424258059765562778?]
447
- [12.7560424258059765562778? 62.104304767460978078?]
448
- </pre></div>
449
- </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>
450
749
  </dd></dl>
451
750
 
452
751
  <dl class="py method">
453
752
  <dt class="sig sig-object py" id="snappy.Manifold.cusp_areas">
454
- <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>
455
- <dd><p>Picks areas for the cusps such that the corresponding cusp
456
- neighborhoods are disjoint. By default, the <code class="docutils literal notranslate"><span class="pre">policy</span></code> is
457
- <code class="docutils literal notranslate"><span class="pre">unbiased</span></code> which means that the cusp neighborhoods are blown up
458
- simultaneously with a cusp neighborhood stopping to grow when it
459
- 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>
460
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>
461
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>
462
765
  <span class="go">[2.64575131106459, 2.64575131106459, 2.64575131106459]</span>
463
766
  </pre></div>
464
767
  </div>
465
- <p>Alternatively, <code class="docutils literal notranslate"><span class="pre">policy='greedy'</span></code> means that the first cusp
466
- neighborhood is blown up until it touches itself, then the second
467
- cusp neighborhood is blown up until it touches itself or the first
468
- 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>
469
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>
470
773
  <span class="go">[5.29150262212918, 1.32287565553230, 1.32287565553229]</span>
471
774
  </pre></div>
472
775
  </div>
473
- <p>To specify cusps to be blown up first, and in which order to blow
474
- them up, set <code class="docutils literal notranslate"><span class="pre">first_cusps</span></code> to the appropriate list of cusps.</p>
475
- <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>
476
- <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>
477
- <span class="go">[7.053940530873898, 3.2712450270, 2.7091590087]</span>
478
- <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>
479
- <span class="go">[7.053940530873898, 3.2712450270, 2.7091590087]</span>
480
- <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>
481
- <span class="go">[7.053940530873898, 3.2712450270, 2.7091590087]</span>
482
- <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>
483
- <span class="go">[7.053940530873898, 3.2712450270, 2.7091590087]</span>
484
- <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>
485
- <span class="go">[7.053940530873898, 3.2712450270, 2.7091590087]</span>
486
- <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>
487
- <span class="go">[7.053940530873898, 2.3513135103, 3.7690945490]</span>
488
- <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>
489
- <span class="go">[4.0302253322, 5.725527974287718, 1.5478612583]</span>
490
- </pre></div>
491
- </div>
492
- <p><code class="docutils literal notranslate"><span class="pre">cusp_areas</span></code> is implemented using
493
- <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
494
- (<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
495
- example, verified computations are supported:</p>
496
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: M=Manifold(&quot;v2854&quot;)
497
- sage: M.cusp_areas(verified=True) # doctest: +NUMERIC9
498
- [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>
499
780
  </pre></div>
500
781
  </div>
501
- <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
502
- <code class="docutils literal notranslate"><span class="pre">verified=True</span></code>, the result is an invariant of the manifold with
503
- labeled cusps and the corresponding cusp neighborhoods are maximal
504
- in that every cusp neighborhood is touching some (not necessarily
505
- distinct) cusp neighborhood.</p>
506
- <p>Area of the cusp neighborhood touching itself for a one-cusped
507
- manifold:</p>
508
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: M=Manifold(&quot;v1959&quot;)
509
- sage: M.cusp_areas(method=&#39;maximal&#39;, verified=True, bits_prec=100) # doctest: +NUMERIC15
510
- [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>
511
787
  </pre></div>
512
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>
513
825
  </dd></dl>
514
826
 
515
827
  <dl class="py method">
516
828
  <dt class="sig sig-object py" id="snappy.Manifold.cusp_info">
517
- <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>
518
830
  <dd><p>Returns an info object containing information about the given
519
831
  cusp. Usage:</p>
520
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>
@@ -524,7 +836,7 @@ cusp. Usage:</p>
524
836
  </div>
525
837
  <p>To get more detailed information about the cusp, we do</p>
526
838
  <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">c</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">cusp_info</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
527
- <span class="gp">&gt;&gt;&gt; </span><span class="n">c</span><span class="o">.</span><span class="n">shape</span>
839
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">c</span><span class="o">.</span><span class="n">shape</span>
528
840
  <span class="go">0.11044502 + 0.94677098*I</span>
529
841
  <span class="gp">&gt;&gt;&gt; </span><span class="n">c</span><span class="o">.</span><span class="n">modulus</span>
530
842
  <span class="go">-0.12155872 + 1.04204128*I</span>
@@ -539,7 +851,7 @@ basis, i.e.
539
851
  ( (second shortest translation)/(shortest translation)).
540
852
  For cusps that are filled, one instead cares about the
541
853
  holonomies:</p>
542
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_info</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)[</span><span class="s1">&#39;holonomies&#39;</span><span class="p">]</span>
854
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_info</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)[</span><span class="s1">&#39;holonomies&#39;</span><span class="p">]</span>
543
855
  <span class="go">(-0.59883089 + 1.09812548*I, 0.89824633 + 1.49440443*I)</span>
544
856
  </pre></div>
545
857
  </div>
@@ -547,7 +859,7 @@ holonomies:</p>
547
859
  holonomies have an extra attribute, accuracy, which is
548
860
  SnapPea’s <em>estimate</em> of their accuracy.</p>
549
861
  <p>You can also get information about multiple cusps at once:</p>
550
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_info</span><span class="p">()</span>
862
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_info</span><span class="p">()</span>
551
863
  <span class="go">[Cusp 0 : complete torus cusp of shape 0.11044502 + 0.94677098*I,</span>
552
864
  <span class="go"> Cusp 1 : torus cusp with Dehn filling coefficients (M, L) = (1.0, 2.0),</span>
553
865
  <span class="go"> Cusp 2 : torus cusp with Dehn filling coefficients (M, L) = (3.0, 2.0)]</span>
@@ -566,13 +878,13 @@ sage: M.cusp_info(&#39;shape&#39;, verified = True, bits_prec = 60) # doctest: +
566
878
 
567
879
  <dl class="py method">
568
880
  <dt class="sig sig-object py" id="snappy.Manifold.cusp_neighborhood">
569
- <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>
570
882
  <dd><p>Returns information about the cusp neighborhoods of the
571
883
  manifold, in the form of data about the corresponding horoball
572
884
  diagrams in hyperbolic 3-space.</p>
573
885
  <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;s000&#39;</span><span class="p">)</span>
574
886
  <span class="gp">&gt;&gt;&gt; </span><span class="n">CN</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">cusp_neighborhood</span><span class="p">()</span>
575
- <span class="gp">&gt;&gt;&gt; </span><span class="n">CN</span><span class="o">.</span><span class="n">volume</span><span class="p">()</span>
887
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">CN</span><span class="o">.</span><span class="n">volume</span><span class="p">()</span>
576
888
  <span class="go">0.32475953</span>
577
889
  <span class="gp">&gt;&gt;&gt; </span><span class="nb">len</span><span class="p">(</span><span class="n">CN</span><span class="o">.</span><span class="n">horoballs</span><span class="p">(</span><span class="mf">0.01</span><span class="p">))</span>
578
890
  <span class="go">178</span>
@@ -583,43 +895,40 @@ diagrams in hyperbolic 3-space.</p>
583
895
 
584
896
  <dl class="py method">
585
897
  <dt class="sig sig-object py" id="snappy.Manifold.cusp_translations">
586
- <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>
587
- <dd><p>Picks disjoint cusp neighborhoods and returns the respective
588
- (complex) Euclidean translations of the meridian and longitude for
589
- each cusp. The method takes the same arguments as
590
- <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
591
- cusp neighborhood. The result is a list of pairs, the second entry
592
- 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>
593
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>
594
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>
595
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>
596
910
  </pre></div>
597
911
  </div>
598
- <p>Arguments such as <code class="docutils literal notranslate"><span class="pre">policy='greedy'</span></code> are interpreted the same way as
599
- 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>
600
- <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>
601
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>
602
915
  </pre></div>
603
916
  </div>
604
- <p>and can return verified intervals:</p>
605
- <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
606
922
  [(0.50000000000? + 1.32287565553?*I, 2.00000000000?), (0.500000000000? + 1.32287565554?*I, 2.00000000000?), (0.500000000000? + 1.32287565554?*I, 2.00000000000?)]
607
923
  </pre></div>
608
924
  </div>
609
- <p>that are guaranteed to contain the true translations of cusp neighborhoods
610
- verified to be disjoint (the element corresponding to a longitude
611
- is always in a <code class="docutils literal notranslate"><span class="pre">RealIntervalField</span></code>).</p>
612
- <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
613
- (potentially) non-deterministic and thus the result of</p>
614
- <blockquote>
615
- <div><p>[ M.cusp_translations()[i] for i in range(M.num_cusps()) ]</p>
616
- </div></blockquote>
617
- <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>
618
927
  </dd></dl>
619
928
 
620
929
  <dl class="py method">
621
930
  <dt class="sig sig-object py" id="snappy.Manifold.dehn_fill">
622
- <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>
623
932
  <dd><p>Set the Dehn filling coefficients of the cusps. This can be
624
933
  specified in the following ways, where the cusps are numbered
625
934
  by 0,1,…,(num_cusps - 1).</p>
@@ -660,8 +969,8 @@ by 0,1,…,(num_cusps - 1).</p>
660
969
 
661
970
  <dl class="py method">
662
971
  <dt class="sig sig-object py" id="snappy.Manifold.dirichlet_domain">
663
- <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><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.dirichlet_domain" title="Permalink to this definition">¶</a></dt>
664
- <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
665
974
  domain of the hyperbolic manifold, typically centered at a
666
975
  point which is a local maximum of injectivity radius. It will
667
976
  have ideal vertices if the manifold is not closed.</p>
@@ -672,6 +981,13 @@ have ideal vertices if the manifold is not closed.</p>
672
981
  <span class="gp">&gt;&gt;&gt; </span><span class="n">D</span><span class="o">.</span><span class="n">view</span><span class="p">()</span> <span class="c1">#Shows 3d-graphical view. </span>
673
982
  </pre></div>
674
983
  </div>
984
+ <p>The group elements for the face-pairings of the Dirichlet domain
985
+ can be given as words in the original generators of the
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>
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>
988
+ <span class="go">[&#39;A&#39;, ...]</span>
989
+ </pre></div>
990
+ </div>
675
991
  <p>Other options can be provided to customize the computation;
676
992
  the default choices are shown below:</p>
677
993
  <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">dirichlet_domain</span><span class="p">(</span><span class="n">vertex_epsilon</span><span class="o">=</span><span class="mf">10.0</span><span class="o">**-</span><span class="mi">8</span><span class="p">,</span>
@@ -691,7 +1007,7 @@ the default choices are shown below:</p>
691
1007
 
692
1008
  <dl class="py method">
693
1009
  <dt class="sig sig-object py" id="snappy.Manifold.drill">
694
- <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>
695
1011
  <dd><p>Drills out the specified dual curve from among all dual curves
696
1012
  with at most max_segments, which defaults to 6. The method
697
1013
  dual_curve allows one to see the properties of curves before
@@ -704,16 +1020,180 @@ choosing which one to drill out.</p>
704
1020
  </div>
705
1021
  </dd></dl>
706
1022
 
1023
+ <dl class="py method">
1024
+ <dt class="sig sig-object py" id="snappy.Manifold.drill_word">
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>
1026
+ <dd><p>Drills the geodesic corresponding to the given word in the unsimplified
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>
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>
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>
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>
1036
+ </pre></div>
1037
+ </div>
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>
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>
1043
+ <span class="go">True</span>
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>
1045
+ <span class="go">1.08707014499574 - 1.72276844987009*I</span>
1046
+ </pre></div>
1047
+ </div>
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>
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>
1055
+ <span class="go">1.73712388065</span>
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>
1057
+ <span class="go">0.178792491242577 - 2.11983007979743*I</span>
1058
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">fundamental_group</span><span class="p">(</span><span class="n">simplify_presentation</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span><span class="o">.</span><span class="n">complex_length</span><span class="p">(</span><span class="s1">&#39;aBAbbABab&#39;</span><span class="p">)</span>
1059
+ <span class="go">0.178792491242577 - 2.11983007979743*I</span>
1060
+ <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;aBAbbABab&#39;</span><span class="p">)</span>
1061
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span>
1062
+ <span class="go">m004_drilled(0,0)</span>
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>
1064
+ <span class="go">1</span>
1065
+ </pre></div>
1066
+ </div>
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>
1072
+ </pre></div>
1073
+ </div>
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>
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>
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>
1080
+ <span class="go">[0 -&gt; 0</span>
1081
+ <span class="go"> [3 -1]</span>
1082
+ <span class="go"> [4 -1]</span>
1083
+ <span class="go"> Does not extend to link]</span>
1084
+ </pre></div>
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>
1120
+ </dd></dl>
1121
+
1122
+ <dl class="py method">
1123
+ <dt class="sig sig-object py" id="snappy.Manifold.drill_words">
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>
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>
1133
+ <span class="go">[None,</span>
1134
+ <span class="go"> 0.510804267610103 + 1.92397456664239*I,</span>
1135
+ <span class="go"> 0.317363079597924 + 1.48157893409218*I,</span>
1136
+ <span class="go"> 0.223574975263386 + 1.26933288854145*I]</span>
1137
+ <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>
1138
+ <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;c&#39;</span><span class="p">)</span>
1139
+ <span class="go">0.317363079597924 + 1.48157893409218*I</span>
1140
+ <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;fA&#39;</span><span class="p">)</span>
1141
+ <span class="go">1.43914411734250 + 2.66246879992795*I</span>
1142
+ <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_words</span><span class="p">([</span><span class="s1">&#39;c&#39;</span><span class="p">,</span><span class="s1">&#39;fA&#39;</span><span class="p">])</span>
1143
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span>
1144
+ <span class="go">t12047_drilled(0,0)(1,3)(1,5)(0,0)(0,0)</span>
1145
+ </pre></div>
1146
+ </div>
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>
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>
1159
+ <span class="go">True</span>
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>
1161
+ <span class="go">[None,</span>
1162
+ <span class="go"> 0.510804267610103 + 1.92397456664239*I,</span>
1163
+ <span class="go"> 0.223574975263386 + 1.26933288854145*I,</span>
1164
+ <span class="go"> 0.317363079597924 + 1.48157893409218*I,</span>
1165
+ <span class="go"> 1.43914411734251 + 2.66246879992796*I]</span>
1166
+ </pre></div>
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>
1185
+ </dd></dl>
1186
+
707
1187
  <dl class="py method">
708
1188
  <dt class="sig sig-object py" id="snappy.Manifold.dual_curves">
709
- <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>
710
1190
  <dd><p>Constructs a <em>reasonable</em> selection of simple closed curves in
711
1191
  a manifold’s dual 1-skeleton. In particular, it returns those
712
1192
  that appear to represent geodesics. The resulting curves can
713
1193
  be drilled out.</p>
714
1194
  <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>
715
1195
  <span class="gp">&gt;&gt;&gt; </span><span class="n">curves</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">dual_curves</span><span class="p">()</span>
716
- <span class="gp">&gt;&gt;&gt; </span><span class="n">curves</span>
1196
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">curves</span>
717
1197
  <span class="go">[ 0: orientation-preserving curve of length 0.56239915 - 2.81543089*I,</span>
718
1198
  <span class="go"> 1: orientation-preserving curve of length 1.12479830 + 0.65232354*I,</span>
719
1199
  <span class="go"> 2: orientation-preserving curve of length 1.26080402 + 1.97804689*I,</span>
@@ -736,7 +1216,7 @@ with one more cusp.</p>
736
1216
  <p>By default, this function only finds curves of length 6; this
737
1217
  can be changed by specifying the optional argument
738
1218
  max_segments</p>
739
- <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">dual_curves</span><span class="p">(</span><span class="n">max_segments</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
1219
+ <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">dual_curves</span><span class="p">(</span><span class="n">max_segments</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
740
1220
  <span class="go">[ 0: orientation-preserving curve of length 0.56239915 - 2.81543089*I]</span>
741
1221
  </pre></div>
742
1222
  </div>
@@ -744,7 +1224,7 @@ max_segments</p>
744
1224
 
745
1225
  <dl class="py method">
746
1226
  <dt class="sig sig-object py" id="snappy.Manifold.edge_valences">
747
- <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>
748
1228
  <dd><p>Returns a dictionary whose keys are the valences of the edges
749
1229
  in the triangulation, and the value associated to a key is the
750
1230
  number of edges of that valence.</p>
@@ -755,9 +1235,73 @@ number of edges of that valence.</p>
755
1235
  </div>
756
1236
  </dd></dl>
757
1237
 
1238
+ <dl class="py method">
1239
+ <dt class="sig sig-object py" id="snappy.Manifold.exterior_to_link">
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>
1241
+ <dd><p>For a triangulation of the exterior of a link in the 3-sphere,
1242
+ return a planar diagram for the link. The peripheral curves whose
1243
+ Dehn filling is the 3-sphere are <strong>part of the input</strong>, specified
1244
+ by either:</p>
1245
+ <ol class="loweralpha simple">
1246
+ <li><p>If no cusp is filled, then they are the meridians of the
1247
+ current peripheral curves.</p></li>
1248
+ <li><p>If every cusp is filled, then they are the current Dehn filling
1249
+ curves.</p></li>
1250
+ </ol>
1251
+ <p>In particular, it does <strong>not</strong> try to determine whether there exist
1252
+ fillings on the input which give the 3-sphere. Example usage:</p>
1253
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;m016&#39;</span><span class="p">)</span>
1254
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">L</span> <span class="o">=</span> <span class="n">exterior_to_link</span><span class="p">(</span><span class="n">M</span><span class="p">)</span>
1255
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">L</span><span class="o">.</span><span class="n">exterior</span><span class="p">()</span><span class="o">.</span><span class="n">is_isometric_to</span><span class="p">(</span><span class="n">M</span><span class="p">)</span>
1256
+ <span class="go">True</span>
1257
+ </pre></div>
1258
+ </div>
1259
+ <p>The algorithm used is that of <a class="reference external" href="https://arxiv.org/abs/2112.03251">Dunfield, Obeidin, and Rudd</a>. The optional arguments are
1260
+ as follows.</p>
1261
+ <ul class="simple">
1262
+ <li><p><code class="docutils literal notranslate"><span class="pre">verbose</span></code>: When <code class="docutils literal notranslate"><span class="pre">True</span></code>, prints progress updates as the algorithm
1263
+ goes along.</p></li>
1264
+ <li><p><code class="docutils literal notranslate"><span class="pre">check_input</span></code>: When <code class="docutils literal notranslate"><span class="pre">True</span></code> (the default), first checks that the
1265
+ fundamental group of the specified Dehn filling is trivial. As
1266
+ it doesn’t try too hard to simplify the group presentation, it
1267
+ can happen that this check fails but the algorithm still finds a
1268
+ diagram if you pass <code class="docutils literal notranslate"><span class="pre">check_input=False</span></code>.</p></li>
1269
+ <li><p><code class="docutils literal notranslate"><span class="pre">check_answer</span></code>: When <code class="docutils literal notranslate"><span class="pre">True</span></code> (the default), take the exterior of
1270
+ the final link diagram and use <code class="docutils literal notranslate"><span class="pre">Manifold.is_isometric_to</span></code> to
1271
+ confirm that it is homeomorphic to the input. If the input is
1272
+ not hyperbolic or is very large, this check may fail even though
1273
+ the diagram is correct.</p></li>
1274
+ <li><p><code class="docutils literal notranslate"><span class="pre">careful_perturbation</span></code>: The rational coordinates of the
1275
+ intermediate PL links are periodically rounded to control the
1276
+ size of their denominators. When <code class="docutils literal notranslate"><span class="pre">careful_perturbation=True</span></code>
1277
+ (the default), computations are performed to ensure this
1278
+ rounding does not change the isotopy class of the link.</p></li>
1279
+ <li><p><code class="docutils literal notranslate"><span class="pre">simplify_link</span></code>: When <code class="docutils literal notranslate"><span class="pre">True</span></code> (the default), uses
1280
+ <code class="docutils literal notranslate"><span class="pre">Link.simplify('global')</span></code> to minimize the size of the final
1281
+ diagram; otherwise, it just does <code class="docutils literal notranslate"><span class="pre">basic</span></code> simplifications, which
1282
+ can be much faster if the initial link is complicated.</p></li>
1283
+ <li><p><code class="docutils literal notranslate"><span class="pre">pachner_search_tries</span></code>: Controls how hard to search for a
1284
+ suitable sequence of Pachner moves from the filled input
1285
+ triangulation to a standard triangulation of the 3-sphere.</p></li>
1286
+ <li><p><code class="docutils literal notranslate"><span class="pre">seed</span></code>: The algorithm involves many random choices, and hence
1287
+ each run typically produces a different diagram of the
1288
+ underlying link. If you need the same output each time, you can
1289
+ specify a fixed seed for the various pseudo-random number
1290
+ generators.</p></li>
1291
+ </ul>
1292
+ <p>Note on rigor: Provided at least one of <code class="docutils literal notranslate"><span class="pre">check_answer</span></code> and
1293
+ <code class="docutils literal notranslate"><span class="pre">careful_perturbation</span></code> is <code class="docutils literal notranslate"><span class="pre">True</span></code>, the exterior of the output
1294
+ link is guaranteed to match the input (including the choice of
1295
+ meridians).</p>
1296
+ <p><strong>Warning:</strong> The order of the link components and the cusps of the
1297
+ input manifold is only guaranteed to match when
1298
+ <code class="docutils literal notranslate"><span class="pre">check_answer=True</span></code>. Even then, the implicit orientation along
1299
+ each component of the link may not be preserved.</p>
1300
+ </dd></dl>
1301
+
758
1302
  <dl class="py method">
759
1303
  <dt class="sig sig-object py" id="snappy.Manifold.filled_triangulation">
760
- <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>
761
1305
  <dd><p>Return a new Manifold where the specified cusps have been
762
1306
  permanently filled in.</p>
763
1307
  <p>Filling all the cusps results in a Triangulation rather
@@ -780,8 +1324,8 @@ structures when there are no cusps.</p>
780
1324
 
781
1325
  <dl class="py method">
782
1326
  <dt class="sig sig-object py" id="snappy.Manifold.fundamental_group">
783
- <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>
784
- <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
785
1329
  the manifold, together with its holonomy representation. If
786
1330
  integer Dehn surgery parameters have been set, then the
787
1331
  corresponding peripheral elements are killed.</p>
@@ -794,7 +1338,7 @@ corresponding peripheral elements are killed.</p>
794
1338
  <span class="go"> aaabABBAb</span>
795
1339
  <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span><span class="o">.</span><span class="n">peripheral_curves</span><span class="p">()</span>
796
1340
  <span class="go">[(&#39;ab&#39;, &#39;aBAbABab&#39;)]</span>
797
- <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span><span class="o">.</span><span class="n">SL2C</span><span class="p">(</span><span class="s1">&#39;baaBA&#39;</span><span class="p">)</span>
1341
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span><span class="o">.</span><span class="n">SL2C</span><span class="p">(</span><span class="s1">&#39;baaBA&#39;</span><span class="p">)</span>
798
1342
  <span class="go">[ 2.50000000 - 2.59807621*I -6.06217783 - 0.50000000*I]</span>
799
1343
  <span class="go">[ 0.86602540 - 2.50000000*I -4.00000000 + 1.73205081*I]</span>
800
1344
  </pre></div>
@@ -817,7 +1361,7 @@ corresponding peripheral elements are killed.</p>
817
1361
 
818
1362
  <dl class="py method">
819
1363
  <dt class="sig sig-object py" id="snappy.Manifold.gluing_equations">
820
- <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>
821
1365
  <dd><p>In the default mode, this function returns a matrix with rows
822
1366
  of the form</p>
823
1367
  <blockquote>
@@ -858,9 +1402,8 @@ function returns a list of tuples of the form:</p>
858
1402
 
859
1403
  <dl class="py method">
860
1404
  <dt class="sig sig-object py" id="snappy.Manifold.gluing_equations_pgl">
861
- <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>
862
- <dd><p>M.gluing_equations_pgl(N = 2, equation_type=’all’)</p>
863
- <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
864
1407
  encoding the gluing equations for boundary-parabolic PGL(N,C)
865
1408
  representations together with explanations of the meaning
866
1409
  of the rows and the columns of the matrix.</p>
@@ -869,7 +1412,7 @@ as described in
869
1412
  Stavros Garoufalidis, Matthias Goerner, Christian K. Zickert:
870
1413
  “Gluing Equations for PGL(n,C)-Representations of 3-Manifolds”
871
1414
  (<a class="reference external" href="http://arxiv.org/abs/1207.6711">http://arxiv.org/abs/1207.6711</a>).</p>
872
- <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
873
1416
  the general method by:</p>
874
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>
875
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>
@@ -894,17 +1437,17 @@ the columns and rows:</p>
894
1437
  </div>
895
1438
  <p>The first row of the matrix means that the edge equation for
896
1439
  edge 0 is</p>
897
- <blockquote>
898
- <div><p>z_0000_0 ^ 2 * zp_0000_0 * z_0000_1 * zpp_0000_1 ^ 2 = 1.</p>
899
- </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>
900
1442
  <p>Similarly, the next row encodes the edge equation for the other edge
901
1443
  and the next two rows encode peripheral equations.</p>
902
- <p>Following the SnapPy convention, a z denotes the cross ratio z at the
903
- edge (0,1), a zp the cross ratio z’ at the edge (0,2) and a zpp the cross
904
- 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
905
1448
  denotes the cross ratio belonging to the subsimplex at integral
906
- point xxxx (always 0000 for N = 2) of the simplex y. Note: the
907
- 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
908
1451
  mentioned above, e.g., compare
909
1452
  kernel_code/edge_classes.c with Figure 3. We follow the SnapPy
910
1453
  convention here so that all computations done in SnapPy are
@@ -917,20 +1460,20 @@ consistent.</p>
917
1460
  </pre></div>
918
1461
  </div>
919
1462
  <p>A subset of all gluing equations can be obtained by setting the
920
- equation_type:</p>
1463
+ <code class="docutils literal notranslate"><span class="pre">equation_type</span></code>:</p>
921
1464
  <ul class="simple">
922
- <li><p>all gluing equations: all’</p></li>
923
- <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>
924
1467
  <ul>
925
- <li><p>edge gluing equations: edge’</p></li>
926
- <li><p>face gluing equations: face’</p></li>
927
- <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>
928
1471
  </ul>
929
1472
  </li>
930
- <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>
931
1474
  <ul>
932
- <li><p>cusp gluing equations for meridians: meridian’</p></li>
933
- <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>
934
1477
  </ul>
935
1478
  </li>
936
1479
  </ul>
@@ -938,8 +1481,8 @@ equation_type:</p>
938
1481
 
939
1482
  <dl class="py method">
940
1483
  <dt class="sig sig-object py" id="snappy.Manifold.has_finite_vertices">
941
- <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>
942
- <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)
943
1486
  vertices.</p>
944
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>
945
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>
@@ -961,7 +1504,7 @@ finite vertices:</p>
961
1504
 
962
1505
  <dl class="py method">
963
1506
  <dt class="sig sig-object py" id="snappy.Manifold.high_precision">
964
- <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>
965
1508
  <dd><p>Return a high precision version of this manifold.</p>
966
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>
967
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>
@@ -972,7 +1515,7 @@ finite vertices:</p>
972
1515
 
973
1516
  <dl class="py method">
974
1517
  <dt class="sig sig-object py" id="snappy.Manifold.holonomy_matrix_entries">
975
- <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>
976
1519
  <dd><p>The entries of the matrices of the holonomy as list of ApproximateAlgebraicNumbers
977
1520
  (four consecutive numbers per matrix). The numbers are guaranteed to lie in the
978
1521
  trace field only if match_kernel = False:</p>
@@ -989,7 +1532,7 @@ trace field only if match_kernel = False:</p>
989
1532
 
990
1533
  <dl class="py method">
991
1534
  <dt class="sig sig-object py" id="snappy.Manifold.homological_longitude">
992
- <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>
993
1536
  <dd><p>Returns the peripheral curve in the given cusp, if any, which is
994
1537
  homologically trivial (with rational coefficients) in the manifold:</p>
995
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>
@@ -1024,8 +1567,8 @@ the manifold, an exception is raised:</p>
1024
1567
 
1025
1568
  <dl class="py method">
1026
1569
  <dt class="sig sig-object py" id="snappy.Manifold.homology">
1027
- <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>
1028
- <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
1029
1572
  homology group of the underlying (Dehn filled) manifold.</p>
1030
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>
1031
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>
@@ -1036,7 +1579,7 @@ homology group of the underlying (Dehn filled) manifold.</p>
1036
1579
 
1037
1580
  <dl class="py method">
1038
1581
  <dt class="sig sig-object py" id="snappy.Manifold.hyperbolic_SLN_torsion">
1039
- <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>
1040
1583
  <dd><p>Compute the torsion polynomial of the holonomy representation lifted
1041
1584
  to SL(2, C) and then followed by the irreducible representation
1042
1585
  from SL(2, C) -&gt; SL(N, C):</p>
@@ -1049,7 +1592,7 @@ from SL(2, C) -&gt; SL(N, C):</p>
1049
1592
 
1050
1593
  <dl class="py method">
1051
1594
  <dt class="sig sig-object py" id="snappy.Manifold.hyperbolic_adjoint_torsion">
1052
- <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>
1053
1596
  <dd><p>Computes the torsion polynomial of the adjoint representation
1054
1597
  a la Dubois-Yamaguichi. This is not a sign-refined computation
1055
1598
  so the result is only defined up to sign, not to mention a power
@@ -1066,7 +1609,7 @@ of the variable ‘a’:</p>
1066
1609
 
1067
1610
  <dl class="py method">
1068
1611
  <dt class="sig sig-object py" id="snappy.Manifold.hyperbolic_torsion">
1069
- <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>
1070
1613
  <dd><p>Computes the hyperbolic torsion polynomial as defined in
1071
1614
  <a class="reference external" href="http://arxiv.org/abs/1108.3045">[DFJ]</a>:</p>
1072
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>
@@ -1081,21 +1624,23 @@ of the variable ‘a’:</p>
1081
1624
 
1082
1625
  <dl class="py method">
1083
1626
  <dt class="sig sig-object py" id="snappy.Manifold.identify">
1084
- <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>
1085
- <dd><p>Look for the manifold in all of the SnapPy databases:</p>
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>
1628
+ <dd><p>Looks for the manifold in all of the SnapPy databases.
1629
+ For hyperbolic manifolds this is done by searching for isometries:</p>
1086
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>
1087
1631
  <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">identify</span><span class="p">()</span>
1088
1632
  <span class="go">[m125(0,0)(0,0), L13n5885(0,0)(0,0), ooct01_00000(0,0)(0,0)]</span>
1089
1633
  </pre></div>
1090
1634
  </div>
1091
- <p>One can require that there be an isometry taking meridians
1092
- to meridians:</p>
1635
+ <p>By default, there is no restriction on the isometries. One can
1636
+ require that the isometry take meridians to meridians. This
1637
+ might return fewer results:</p>
1093
1638
  <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">identify</span><span class="p">(</span><span class="n">extends_to_link</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
1094
1639
  <span class="go">[m125(0,0)(0,0), ooct01_00000(0,0)(0,0)]</span>
1095
1640
  </pre></div>
1096
1641
  </div>
1097
- <p>For closed manifolds, extends_to_link doesn’t make sense because
1098
- of how the kernel code works:</p>
1642
+ <p>For closed manifolds, extends_to_link doesn’t make sense
1643
+ because of how the kernel code works:</p>
1099
1644
  <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">C</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;m015(1,2)&quot;</span><span class="p">)</span>
1100
1645
  <span class="gp">&gt;&gt;&gt; </span><span class="n">C</span><span class="o">.</span><span class="n">identify</span><span class="p">()</span>
1101
1646
  <span class="go">[m006(-5,2)]</span>
@@ -1105,15 +1650,12 @@ of how the kernel code works:</p>
1105
1650
  </div>
1106
1651
  </dd></dl>
1107
1652
 
1108
- <dl class="py method">
1109
- <dt class="sig sig-object py" id="snappy.Manifold.init_hyperbolic_structure">
1110
- <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>
1111
- <dd></dd></dl>
1112
-
1113
1653
  <dl class="py method">
1114
1654
  <dt class="sig sig-object py" id="snappy.Manifold.inside_view">
1115
- <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><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.inside_view" title="Permalink to this definition">¶</a></dt>
1116
- <dd><p>Show raytraced inside view of hyperbolic manifold:</p>
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>
1656
+ <dd><p>Show raytraced inside view of hyperbolic manifold. See
1657
+ <a class="reference external" href="https://im.icerm.brown.edu/portfolio/snappy-views/">images</a>
1658
+ and <a class="reference external" href="https://youtu.be/CAERhmUCkRs">demo video</a>.</p>
1117
1659
  <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>
1118
1660
  <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>
1119
1661
  </pre></div>
@@ -1123,10 +1665,10 @@ of how the kernel code works:</p>
1123
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>
1124
1666
  </pre></div>
1125
1667
  </div>
1126
- <p>The cohomology class in H^2(M, bd M; R) producing the cohomology
1127
- fractal can be specified as a cocycle or using an automatically computed
1128
- 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
1129
- 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>
1130
1672
  <ul class="simple">
1131
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
1132
1674
  vector.</p></li>
@@ -1134,11 +1676,16 @@ vector.</p></li>
1134
1676
  combination of basis vectors.</p></li>
1135
1677
  <li><p>A weight for each face of each tetrahedron.</p></li>
1136
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>
1137
1684
  </dd></dl>
1138
1685
 
1139
1686
  <dl class="py method">
1140
1687
  <dt class="sig sig-object py" id="snappy.Manifold.invariant_trace_field_gens">
1141
- <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>
1142
1689
  <dd><p>The generators of the trace field as ApproximateAlgebraicNumbers. Can be
1143
1690
  used to compute the tetrahedra field, where the first two parameters
1144
1691
  are bits of precision and maximum degree of the field:</p>
@@ -1153,9 +1700,9 @@ are bits of precision and maximum degree of the field:</p>
1153
1700
 
1154
1701
  <dl class="py method">
1155
1702
  <dt class="sig sig-object py" id="snappy.Manifold.is_isometric_to">
1156
- <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>
1157
- <dd><p>Returns True if M and N are isometric, False if they not. A
1158
- 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
1159
1706
  to determine either answer. (This is fairly common for closed
1160
1707
  manifolds.)</p>
1161
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>
@@ -1173,7 +1720,7 @@ manifolds:</p>
1173
1720
  <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;m129&#39;</span><span class="p">)</span>
1174
1721
  <span class="gp">&gt;&gt;&gt; </span><span class="n">isoms</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">is_isometric_to</span><span class="p">(</span><span class="n">N</span><span class="p">,</span> <span class="n">return_isometries</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span>
1175
1722
  <span class="gp">&gt;&gt;&gt; </span><span class="n">isoms</span><span class="p">[</span><span class="mi">6</span><span class="p">]</span> <span class="c1"># Includes action on cusps</span>
1176
- <span class="go">0 -&gt; 1 1 -&gt; 0 </span>
1723
+ <span class="go">0 -&gt; 1 1 -&gt; 0</span>
1177
1724
  <span class="go">[1 2] [-1 -2]</span>
1178
1725
  <span class="go">[0 -1] [ 0 1]</span>
1179
1726
  <span class="go">Extends to link</span>
@@ -1184,14 +1731,14 @@ acts on the left. That is, the two <em>columns</em> of the matrix
1184
1731
  give the image of the meridian and longitude respectively. In
1185
1732
  the above example, the meridian of cusp 0 is sent to the
1186
1733
  meridian of cusp 1.</p>
1187
- <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
1188
1735
  not be as there could be numerical errors resulting in finding
1189
1736
  an incorrect canonical triangulation.</p>
1190
1737
  </dd></dl>
1191
1738
 
1192
1739
  <dl class="py method">
1193
1740
  <dt class="sig sig-object py" id="snappy.Manifold.is_orientable">
1194
- <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>
1195
1742
  <dd><p>Return whether the underlying 3-manifold is orientable.</p>
1196
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>
1197
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>
@@ -1202,10 +1749,11 @@ an incorrect canonical triangulation.</p>
1202
1749
 
1203
1750
  <dl class="py method">
1204
1751
  <dt class="sig sig-object py" id="snappy.Manifold.is_two_bridge">
1205
- <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>
1206
1753
  <dd><p>If the manifold is the complement of a two-bridge knot or link
1207
- in S^3, then this method returns (p,q) where p/q is the
1208
- 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>
1209
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>
1210
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>
1211
1759
  <span class="go">(2, 5)</span>
@@ -1214,57 +1762,138 @@ fraction describing the link. Otherwise, returns False.</p>
1214
1762
  <span class="go">False</span>
1215
1763
  </pre></div>
1216
1764
  </div>
1217
- <p>Note: An answer of True is rigorous, but not the answer
1218
- 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
1219
1767
  finding an incorrect canonical triangulation.</p>
1220
1768
  </dd></dl>
1221
1769
 
1222
1770
  <dl class="py method">
1223
1771
  <dt class="sig sig-object py" id="snappy.Manifold.isometry_signature">
1224
- <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>
1225
- <dd><p>The isomorphism signature of the canonical retriangulation. This is a
1226
- complete invariant of the isometry type of a hyperbolic 3-manifold and
1227
- described in more detail <a class="reference external" href="verify.html#the-canonical-retriangulation-and-the-isometry-signature">here</a>:</p>
1228
- <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>
1229
- <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>
1230
- <span class="go">&#39;gLLPQccdefffqffqqof&#39;</span>
1231
- </pre></div>
1232
- </div>
1233
- <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
1234
- passed as argument, the verify module will certify the result to be
1235
- correct:</p>
1236
- <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>
1237
- <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>
1238
- <span class="s1">&#39;gLLPQccdefffqffqqof&#39;</span>
1239
- </pre></div>
1240
- </div>
1241
- <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
1242
- such a way that the result is a complete invariant of a link. In particular,
1243
- <code class="docutils literal notranslate"><span class="pre">isometry_signature(of_link=True)</span></code> is invariant under changing the
1244
- ordering or orientations of the components or flipping all crossings of a
1245
- 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>
1246
- <span class="pre">ignore_curve_orientations</span> <span class="pre">=</span> <span class="pre">True</span></code> to
1247
- <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>
1248
- <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>
1249
1807
  <span class="go">&#39;eLPkbdcddhgggb_baCbbaCb&#39;</span>
1250
- <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>
1251
1809
  <span class="go">&#39;eLPkbdcddhgggb_bBcBbaCb&#39;</span>
1252
1810
  </pre></div>
1253
1811
  </div>
1254
- <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
1255
- additional options.</p>
1256
- <p>Note that interval methods cannot verify a canonical retriangulation
1257
- with non-tetrahedral cells such as in the cas of <code class="docutils literal notranslate"><span class="pre">m412</span></code>, so the following
1258
- call returns <code class="docutils literal notranslate"><span class="pre">None</span></code>:</p>
1259
- <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>
1260
- <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>
1261
- </pre></div>
1262
- </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>
1263
1892
  </dd></dl>
1264
1893
 
1265
1894
  <dl class="py method">
1266
1895
  <dt class="sig sig-object py" id="snappy.Manifold.isomorphisms_to">
1267
- <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>
1268
1897
  <dd><p>Returns a complete list of combinatorial isomorphisms between
1269
1898
  the two triangulations:</p>
1270
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>
@@ -1287,20 +1916,268 @@ meridian of cusp 1.</p>
1287
1916
 
1288
1917
  <dl class="py method">
1289
1918
  <dt class="sig sig-object py" id="snappy.Manifold.length_spectrum">
1290
- <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><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.length_spectrum" title="Permalink to this definition">¶</a></dt>
1291
- <dd><p>M.length_spectrum(cutoff=1.0)</p>
1292
- <p>Returns a list of geodesics (with multiplicities) of length
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>
1920
+ <dd><p>Returns a list of geodesics (with multiplicities) of length
1293
1921
  up to the specified cutoff value. (The default cutoff is 1.0.)</p>
1922
+ <p>Here’s a quick example:</p>
1923
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">L</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;m016&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">length_spectrum</span><span class="p">(</span><span class="mf">0.75</span><span class="p">,</span> <span class="n">include_words</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
1924
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">L</span>
1925
+ <span class="go">mult length topology parity word</span>
1926
+ <span class="go">1 0.58460368501799 + 2.49537045556047*I circle + a</span>
1927
+ <span class="go">1 0.72978937305180 + 3.02669828218116*I circle + Bc</span>
1928
+ </pre></div>
1929
+ </div>
1930
+ <p>Access just the length:</p>
1931
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">L</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">length</span>
1932
+ <span class="go">0.584603685017987 + 2.495370455560469*I</span>
1933
+ </pre></div>
1934
+ </div>
1935
+ </dd></dl>
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>
1294
2166
  </dd></dl>
1295
2167
 
1296
2168
  <dl class="py method">
1297
2169
  <dt class="sig sig-object py" id="snappy.Manifold.link">
1298
- <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>
1299
- <dd></dd></dl>
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>
2171
+ <dd><p>If the manifold is stored as a link complement in your
2172
+ current session then it returns the number of components
2173
+ and crossing of the link. To view and interact with the
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>
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>
2176
+ </dd></dl>
1300
2177
 
1301
2178
  <dl class="py method">
1302
2179
  <dt class="sig sig-object py" id="snappy.Manifold.name">
1303
- <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>
1304
2181
  <dd><p>Return the name of the triangulation.</p>
1305
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>
1306
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>
@@ -1311,7 +2188,7 @@ up to the specified cutoff value. (The default cutoff is 1.0.)</p>
1311
2188
 
1312
2189
  <dl class="py method">
1313
2190
  <dt class="sig sig-object py" id="snappy.Manifold.normal_boundary_slopes">
1314
- <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>
1315
2192
  <dd><p>For a one-cusped manifold, returns all the nonempty boundary slopes of
1316
2193
  spun normal surfaces. Provided the triangulation supports a
1317
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
@@ -1324,8 +2201,9 @@ semifiber) must be listed here.</p>
1324
2201
  </div>
1325
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
1326
2203
  returns boundary slopes associated to vertex surfaces with a quad
1327
- 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
1328
- 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>
1329
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>
1330
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>
1331
2209
  <span class="go">[(1, 1), (1, 2), (2, -1), (2, 3), (8, 11)]</span>
@@ -1344,7 +2222,7 @@ giving isolated rays in the space of embedded normal surfaces.</p>
1344
2222
 
1345
2223
  <dl class="py method">
1346
2224
  <dt class="sig sig-object py" id="snappy.Manifold.normal_surfaces">
1347
- <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>
1348
2226
  <dd><p>All the vertex spun-normal surfaces in the current triangulation.</p>
1349
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>
1350
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>
@@ -1358,7 +2236,7 @@ giving isolated rays in the space of embedded normal surfaces.</p>
1358
2236
 
1359
2237
  <dl class="py method">
1360
2238
  <dt class="sig sig-object py" id="snappy.Manifold.num_cusps">
1361
- <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>
1362
2240
  <dd><p>Return the total number of cusps. By giving the optional argument
1363
2241
  ‘orientable’ or ‘nonorientable’ it will only count cusps of that type.</p>
1364
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>
@@ -1370,7 +2248,7 @@ giving isolated rays in the space of embedded normal surfaces.</p>
1370
2248
 
1371
2249
  <dl class="py method">
1372
2250
  <dt class="sig sig-object py" id="snappy.Manifold.num_tetrahedra">
1373
- <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>
1374
2252
  <dd><p>Return the number of tetrahedra in the triangulation.</p>
1375
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>
1376
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>
@@ -1381,7 +2259,7 @@ giving isolated rays in the space of embedded normal surfaces.</p>
1381
2259
 
1382
2260
  <dl class="py method">
1383
2261
  <dt class="sig sig-object py" id="snappy.Manifold.orientation_cover">
1384
- <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>
1385
2263
  <dd><p>For a non-orientable Triangulation, returns the 2-fold cover which
1386
2264
  is orientable.</p>
1387
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>
@@ -1396,23 +2274,28 @@ is orientable.</p>
1396
2274
  </div>
1397
2275
  </dd></dl>
1398
2276
 
1399
- <dl class="py method">
1400
- <dt class="sig sig-object py" id="snappy.Manifold.pickle">
1401
- <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>
1402
- <dd></dd></dl>
1403
-
1404
2277
  <dl class="py method">
1405
2278
  <dt class="sig sig-object py" id="snappy.Manifold.plink">
1406
- <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>
1407
- <dd><p>Brings up a link editor window if there is a link known to be associated
1408
- with the manifold.</p>
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>
2280
+ <dd><p>Brings up a link editor window if the manifold is stored
2281
+ as a link complement in your current session.</p>
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>
2283
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">link</span><span class="p">()</span>
2284
+ <span class="go">&lt;Link: 1 comp; 4 cross&gt;</span>
2285
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;m004&#39;</span><span class="p">)</span> <span class="c1"># stored as a triangulation without a link</span>
2286
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">link</span><span class="p">()</span>
2287
+ <span class="gt">Traceback (most recent call last):</span>
2288
+ <span class="c">...</span>
2289
+ <span class="gr">ValueError</span>: <span class="n">No associated link known.</span>
2290
+ </pre></div>
2291
+ </div>
1409
2292
  </dd></dl>
1410
2293
 
1411
2294
  <dl class="py method">
1412
2295
  <dt class="sig sig-object py" id="snappy.Manifold.polished_holonomy">
1413
- <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>
1414
- <dd><p>Return the fundamental group of M equipt with a high-precision version of the
1415
- 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>
1416
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>
1417
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>
1418
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>
@@ -1426,9 +2309,8 @@ holonomy representation:</p>
1426
2309
 
1427
2310
  <dl class="py method">
1428
2311
  <dt class="sig sig-object py" id="snappy.Manifold.ptolemy_generalized_obstruction_classes">
1429
- <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>
1430
- <dd><p>M.ptolemy_generalized_obstruction_classes(N)</p>
1431
- <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
1432
2314
  PGL(N,C)-representations for any N, i.e., it returns a list with
1433
2315
  a representative cocycle for each element in
1434
2316
  H^2(M, boundary M; Z/N) / (Z/N)^* where (Z/N)^* are the units in Z/N.
@@ -1486,7 +2368,7 @@ four face classes.</p>
1486
2368
 
1487
2369
  <dl class="py method">
1488
2370
  <dt class="sig sig-object py" id="snappy.Manifold.ptolemy_obstruction_classes">
1489
- <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>
1490
2372
  <dd><p>Returns the obstruction classes needed to compute
1491
2373
  pSL(N,C) = SL(N,C)/{+1,-1} representations for even N, i.e., it
1492
2374
  returns a list with a representative cocycle for each class in
@@ -1542,9 +2424,8 @@ hence the cocycle takes the same value on those two faces (s_3_0 = s_1_1).</p>
1542
2424
 
1543
2425
  <dl class="py method">
1544
2426
  <dt class="sig sig-object py" id="snappy.Manifold.ptolemy_variety">
1545
- <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>
1546
- <dd><p>M.ptolemy_variety(N, obstruction_class = None, simplify = True, eliminate_fixed_ptolemys = False)</p>
1547
- <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>
1548
2429
  <ul class="simple">
1549
2430
  <li><p>Stavros Garoufalidis, Dyland Thurston, Christian K. Zickert:
1550
2431
  “The Complex Volume of SL(n,C)-Representations of 3-Manifolds”
@@ -1674,7 +2555,7 @@ and produce exact solutions!!!</p>
1674
2555
  <span class="go">==TRIANGULATION=BEGINS==</span>
1675
2556
  <span class="go">% Triangulation</span>
1676
2557
  <span class="go">4_1</span>
1677
- <span class="gp">...</span>
2558
+ <span class="go">...</span>
1678
2559
  </pre></div>
1679
2560
  </div>
1680
2561
  <p>Parse the file and produce solutions:</p>
@@ -1711,9 +2592,9 @@ on how to compute cross ratios, volumes and other invariants):</p>
1711
2592
 
1712
2593
  <dl class="py method">
1713
2594
  <dt class="sig sig-object py" id="snappy.Manifold.randomize">
1714
- <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>
1715
2596
  <dd><p>Perform random Pachner moves on the underlying triangulation,
1716
- including some intial 3 -&gt; 2 moves that increase the number of
2597
+ including some initial 3 -&gt; 2 moves that increase the number of
1717
2598
  tetrahedra by blowup_multiple.</p>
1718
2599
  <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Triangulation</span><span class="p">(</span><span class="s1">&#39;Braid:[1,2,-3,-3,1,2]&#39;</span><span class="p">)</span>
1719
2600
  <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">randomize</span><span class="p">()</span>
@@ -1723,13 +2604,13 @@ tetrahedra by blowup_multiple.</p>
1723
2604
 
1724
2605
  <dl class="py method">
1725
2606
  <dt class="sig sig-object py" id="snappy.Manifold.reverse_orientation">
1726
- <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>
1727
2608
  <dd><p>Reverses the orientation of the Triangulation, presuming that
1728
2609
  it is orientable.</p>
1729
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>
1730
2611
  <span class="gp">&gt;&gt;&gt; </span><span class="n">cs</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">chern_simons</span><span class="p">()</span>
1731
2612
  <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>
1732
- <span class="gp">&gt;&gt;&gt; </span><span class="nb">round</span><span class="p">(</span><span class="nb">abs</span><span class="p">(</span><span class="n">cs</span> <span class="o">+</span> <span class="n">M</span><span class="o">.</span><span class="n">chern_simons</span><span class="p">()),</span> <span class="mi">15</span><span class="p">)</span>
2613
+ <span class="gp">&gt;&gt;&gt; </span><span class="nb">abs</span><span class="p">(</span><span class="n">cs</span> <span class="o">+</span> <span class="n">M</span><span class="o">.</span><span class="n">chern_simons</span><span class="p">())</span>
1733
2614
  <span class="go">0.0</span>
1734
2615
  </pre></div>
1735
2616
  </div>
@@ -1737,17 +2618,25 @@ it is orientable.</p>
1737
2618
 
1738
2619
  <dl class="py method">
1739
2620
  <dt class="sig sig-object py" id="snappy.Manifold.save">
1740
- <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>
1741
2622
  <dd><p>Save the triangulation as a SnapPea triangulation file.</p>
1742
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>
1743
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>
1744
2625
  </pre></div>
1745
2626
  </div>
2627
+ <p>To retrieve a SnapPea triangulation from the saved file
2628
+ you can do the following. The first command creates a cusped
2629
+ manifold M. The second one creates the filled manifold M1
2630
+ with Dehn coefficients (2,3).</p>
2631
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;fig-eight.tri&#39;</span><span class="p">)</span>
2632
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M1</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;fig-eight.tri(2,3)&#39;</span><span class="p">)</span>
2633
+ </pre></div>
2634
+ </div>
1746
2635
  </dd></dl>
1747
2636
 
1748
2637
  <dl class="py method">
1749
2638
  <dt class="sig sig-object py" id="snappy.Manifold.set_name">
1750
- <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>
1751
2640
  <dd><p>Give the triangulation a new name.</p>
1752
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>
1753
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>
@@ -1759,7 +2648,7 @@ it is orientable.</p>
1759
2648
 
1760
2649
  <dl class="py method">
1761
2650
  <dt class="sig sig-object py" id="snappy.Manifold.set_peripheral_curves">
1762
- <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>
1763
2652
  <dd><p>Each cusp has a preferred marking. In the case of a torus
1764
2653
  cusp, this is pair of essential simple curves meeting in one
1765
2654
  point; equivalently, a basis of the first homology of the
@@ -1774,19 +2663,19 @@ as peripheral_data.</p>
1774
2663
  <li><p>Make the shortest curves the meridians, and the second
1775
2664
  shortest curves the longitudes.</p>
1776
2665
  <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>
1777
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_info</span><span class="p">(</span><span class="s1">&#39;shape&#39;</span><span class="p">)</span>
2666
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_info</span><span class="p">(</span><span class="s1">&#39;shape&#39;</span><span class="p">)</span>
1778
2667
  <span class="go">[-2.49024467 + 2.97944707*I]</span>
1779
2668
  <span class="gp">&gt;&gt;&gt; </span><span class="n">cob</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">set_peripheral_curves</span><span class="p">(</span><span class="s1">&#39;shortest&#39;</span><span class="p">,</span> <span class="n">return_matrices</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
1780
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_info</span><span class="p">(</span><span class="s1">&#39;shape&#39;</span><span class="p">)</span>
2669
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_info</span><span class="p">(</span><span class="s1">&#39;shape&#39;</span><span class="p">)</span>
1781
2670
  <span class="go">[-0.49024467 + 2.97944707*I]</span>
1782
2671
  <span class="gp">&gt;&gt;&gt; </span><span class="n">cob</span>
1783
2672
  <span class="go">[[[1, 0], [-2, 1]]]</span>
1784
2673
  <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">set_peripheral_curves</span><span class="p">(</span><span class="n">cob</span><span class="p">)</span>
1785
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_info</span><span class="p">(</span><span class="s1">&#39;shape&#39;</span><span class="p">)</span>
2674
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">cusp_info</span><span class="p">(</span><span class="s1">&#39;shape&#39;</span><span class="p">)</span>
1786
2675
  <span class="go">[-2.49024467 + 2.97944707*I]</span>
1787
2676
  </pre></div>
1788
2677
  </div>
1789
- <p>You can also make just the meridians as short as
2678
+ <p>You can also make just the meridians as short as
1790
2679
  possible while fixing the longitudes via the option
1791
2680
  ‘shortest_meridians’, and conversely with
1792
2681
  ‘shortest_longitudes’.</p>
@@ -1819,9 +2708,8 @@ possible while fixing the longitudes via the option
1819
2708
 
1820
2709
  <dl class="py method">
1821
2710
  <dt class="sig sig-object py" id="snappy.Manifold.set_target_holonomy">
1822
- <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>
1823
- <dd><p>M.set_target_holonomy(target, which_cusp=0, recompute=True)</p>
1824
- <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
1825
2713
  on the specified cusp has holonomy equal to the target value.
1826
2714
  The holonomies of Dehn filling curves on other cusps are left
1827
2715
  unchanged. If the ‘recompute’ flag is False, the Dehn filling
@@ -1830,7 +2718,7 @@ equations are modified, but not solved.</p>
1830
2718
 
1831
2719
  <dl class="py method">
1832
2720
  <dt class="sig sig-object py" id="snappy.Manifold.set_tetrahedra_shapes">
1833
- <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>
1834
2722
  <dd><p>Replaces the tetrahedron shapes with those in the given lists,
1835
2723
  and sets the Dehn filling coefficients as specified by the
1836
2724
  fillings argument. The shapes will get double precision
@@ -1839,23 +2727,22 @@ values; polishing will be needed for high precision shapes.</p>
1839
2727
 
1840
2728
  <dl class="py method">
1841
2729
  <dt class="sig sig-object py" id="snappy.Manifold.short_slopes">
1842
- <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>
1843
- <dd><p>Picks disjoint cusp neighborhoods (using
1844
- <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
1845
- used) and returns for each cusp the slopes that have length less
1846
- or equal to given <code class="docutils literal notranslate"><span class="pre">length</span></code> (defaults to 6) when measured on the
1847
- 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>
1848
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>
1849
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>
1850
2740
  <span class="go">[[(1, 0), (-1, 1), (0, 1)], [(1, 0)]]</span>
1851
2741
  </pre></div>
1852
2742
  </div>
1853
- <p>When <code class="docutils literal notranslate"><span class="pre">verified=True</span></code>, the result is guaranteed
1854
- to contain all slopes of length less or equal to given <code class="docutils literal notranslate"><span class="pre">length</span></code>
1855
- (and could contain additional slopes if precision is not high
1856
- enough):</p>
1857
- <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>
1858
- <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>
1859
2746
  </pre></div>
1860
2747
  </div>
1861
2748
  <p>The ten exceptional slopes of the figure-eight knot:</p>
@@ -1864,14 +2751,28 @@ enough):</p>
1864
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>
1865
2752
  </pre></div>
1866
2753
  </div>
1867
- <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>
1868
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>
1869
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>
1870
2757
  </pre></div>
1871
2758
  </div>
1872
- <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>
1873
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>
1874
- <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>
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>
1875
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>
1876
2777
  </pre></div>
1877
2778
  </div>
@@ -1879,7 +2780,7 @@ enough):</p>
1879
2780
 
1880
2781
  <dl class="py method">
1881
2782
  <dt class="sig sig-object py" id="snappy.Manifold.simplify">
1882
- <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>
1883
2784
  <dd><p>Try to simplify the triangulation by doing Pachner moves.</p>
1884
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>
1885
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>
@@ -1898,13 +2799,13 @@ single edge of valence 5.</p></li>
1898
2799
  </ul>
1899
2800
  <p>It also does random 4 -&gt; 4 moves in hopes of setting up a
1900
2801
  simplfication. The argument passes_at_fours is the number of
1901
- times it goes through the valence-4 edges without progress
2802
+ times it goes through the valence-4 edges without progress
1902
2803
  before giving up.</p>
1903
2804
  </dd></dl>
1904
2805
 
1905
2806
  <dl class="py method">
1906
2807
  <dt class="sig sig-object py" id="snappy.Manifold.slice_obstruction_HKL">
1907
- <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>
1908
2809
  <dd><p>For the exterior of a knot in S^3, searches for a topological
1909
2810
  slicing obstruction from:</p>
1910
2811
  <p>Herald, Kirk, Livingston, Math Zeit., 2010
@@ -1920,7 +2821,14 @@ slice), and otherwise returns None:</p>
1920
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>
1921
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>
1922
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>
1923
- <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>
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>
2825
+ <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">7</span><span class="p">)</span>
2826
+ </pre></div>
2827
+ </div>
2828
+ <p>You can also specify the p to examine by a range [p_min, p_max] or
2829
+ the q by just q_max:</p>
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>
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>
1924
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>
1925
2833
  <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">7</span><span class="p">)</span>
1926
2834
  </pre></div>
@@ -1941,7 +2849,7 @@ Alexander polynomials.</p>
1941
2849
 
1942
2850
  <dl class="py method">
1943
2851
  <dt class="sig sig-object py" id="snappy.Manifold.solution_type">
1944
- <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>
1945
2853
  <dd><p>Returns the type of the current solution to the gluing
1946
2854
  equations, basically a summary of how degenerate the solution
1947
2855
  is. If the flag enum=True is set, then an integer value is
@@ -1974,9 +2882,9 @@ simplices have reversed orientations.</p></li>
1974
2882
 
1975
2883
  <dl class="py method">
1976
2884
  <dt class="sig sig-object py" id="snappy.Manifold.split">
1977
- <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>
1978
2886
  <dd><p>Split the manifold open along a surface of positive characteristic found
1979
- by the method “splitting_surfaces”. Returns a list of the pieces, with any
2887
+ by the method “splitting_surfaces”. Returns a list of the pieces, with any
1980
2888
  sphere boundary components filled in.</p>
1981
2889
  <p>Here’s an example of a Whitehead double on the trefoil.</p>
1982
2890
  <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;K14n26039&#39;</span><span class="p">)</span>
@@ -1987,15 +2895,15 @@ sphere boundary components filled in.</p>
1987
2895
  </div>
1988
2896
  <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">pieces</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">S</span><span class="p">);</span> <span class="n">pieces</span>
1989
2897
  <span class="go">[K14n26039.a(0,0)(0,0), K14n26039.b(0,0)]</span>
1990
- <span class="gp">&gt;&gt;&gt; </span><span class="n">pieces</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">volume</span><span class="p">()</span>
2898
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">pieces</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">volume</span><span class="p">()</span>
1991
2899
  <span class="go">3.66386238</span>
1992
2900
  <span class="gp">&gt;&gt;&gt; </span><span class="n">pieces</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">fundamental_group</span><span class="p">()</span><span class="o">.</span><span class="n">relators</span><span class="p">()</span>
1993
2901
  <span class="go">[&#39;aabbb&#39;]</span>
1994
2902
  </pre></div>
1995
2903
  </div>
1996
2904
  <p>You can also specify a surface by its index.</p>
1997
- <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;L10n111&#39;</span><span class="p">)</span>
1998
- <span class="gp">&gt;&gt;&gt; </span><span class="nb">max</span><span class="p">(</span> <span class="n">P</span><span class="o">.</span><span class="n">volume</span><span class="p">()</span> <span class="k">for</span> <span class="n">P</span> <span class="ow">in</span> <span class="n">M</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> <span class="p">)</span>
2905
+ <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;L10n111&#39;</span><span class="p">)</span>
2906
+ <span class="gp">&gt;&gt;&gt; </span><span class="nb">max</span><span class="p">(</span> <span class="n">P</span><span class="o">.</span><span class="n">volume</span><span class="p">()</span> <span class="k">for</span> <span class="n">P</span> <span class="ow">in</span> <span class="n">M</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> <span class="p">)</span>
1999
2907
  <span class="go">5.33348957</span>
2000
2908
  </pre></div>
2001
2909
  </div>
@@ -2003,7 +2911,7 @@ sphere boundary components filled in.</p>
2003
2911
 
2004
2912
  <dl class="py method">
2005
2913
  <dt class="sig sig-object py" id="snappy.Manifold.splitting_surfaces">
2006
- <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>
2007
2915
  <dd><p>Searches for connected closed normal surfaces of nonnegative Euler
2008
2916
  characteristic. If spheres or projective planes are found, then
2009
2917
  tori and Klein bottles aren’t reported. There is no guarantee
@@ -2028,7 +2936,7 @@ using the method “split”.</p>
2028
2936
 
2029
2937
  <dl class="py method">
2030
2938
  <dt class="sig sig-object py" id="snappy.Manifold.symmetric_triangulation">
2031
- <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>
2032
2940
  <dd><p>Returns a Dehn filling description of the manifold realizing
2033
2941
  the symmetry group.</p>
2034
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>
@@ -2046,15 +2954,37 @@ the symmetry group.</p>
2046
2954
 
2047
2955
  <dl class="py method">
2048
2956
  <dt class="sig sig-object py" id="snappy.Manifold.symmetry_group">
2049
- <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>
2050
2958
  <dd><p>Returns the symmetry group of the Manifold.
2051
2959
  If the flag “of_link” is set, then it only returns symmetries
2052
2960
  that preserves the meridians.</p>
2053
2961
  </dd></dl>
2054
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
+
2055
2985
  <dl class="py method">
2056
2986
  <dt class="sig sig-object py" id="snappy.Manifold.tetrahedra_field_gens">
2057
- <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>
2058
2988
  <dd><p>The shapes of the tetrahedra as ApproximateAlgebraicNumbers. Can be
2059
2989
  used to compute the tetrahedra field, where the first two parameters
2060
2990
  are bits of precision and maximum degree of the field:</p>
@@ -2070,7 +3000,7 @@ sage: tets.find_field(100, 10, optimize=True) # doctest: +NORMALIZE_WHITESPAC
2070
3000
 
2071
3001
  <dl class="py method">
2072
3002
  <dt class="sig sig-object py" id="snappy.Manifold.tetrahedra_shapes">
2073
- <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>
2074
3004
  <dd><p>Gives the shapes of the tetrahedra in the current solution to
2075
3005
  the gluing equations. Returns a list containing one info object
2076
3006
  for each tetrahedron. The keys are:</p>
@@ -2087,7 +3017,7 @@ then the function returns only that component of the data.</p>
2087
3017
  used to report the shape parameters are chosen so as to
2088
3018
  normalize the triangle.</p>
2089
3019
  <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>
2090
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">tetrahedra_shapes</span><span class="p">(</span><span class="n">part</span><span class="o">=</span><span class="s1">&#39;rect&#39;</span><span class="p">)</span>
3020
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">tetrahedra_shapes</span><span class="p">(</span><span class="n">part</span><span class="o">=</span><span class="s1">&#39;rect&#39;</span><span class="p">)</span>
2091
3021
  <span class="go">[0.66235898 + 0.56227951*I, 0.66235898 + 0.56227951*I, 0.66235898 + 0.56227951*I]</span>
2092
3022
  <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">tetrahedra_shapes</span><span class="p">()</span>
2093
3023
  <span class="go">[{&#39;accuracies&#39;: (11, 11, 12, 11), &#39;log&#39;: -0.14059979 + 0.70385772*I, &#39;rect&#39;: 0.66235898 + 0.56227951*I},</span>
@@ -2099,7 +3029,7 @@ normalize the triangle.</p>
2099
3029
 
2100
3030
  <dl class="py method">
2101
3031
  <dt class="sig sig-object py" id="snappy.Manifold.trace_field_gens">
2102
- <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>
2103
3033
  <dd><p>The generators of the trace field as ApproximateAlgebraicNumbers. Can be
2104
3034
  used to compute the tetrahedra field, where the first two parameters
2105
3035
  are bits of precision and maximum degree of the field:</p>
@@ -2115,95 +3045,222 @@ are bits of precision and maximum degree of the field:</p>
2115
3045
 
2116
3046
  <dl class="py method">
2117
3047
  <dt class="sig sig-object py" id="snappy.Manifold.triangulation_isosig">
2118
- <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><span class="sig-paren">)</span><a class="headerlink" href="#snappy.Manifold.triangulation_isosig" title="Permalink to this definition">¶</a></dt>
2119
- <dd><p>Returns a compact text representation of the triangulation, called a
2120
- “decorated isomorphism signature”</p>
2121
- <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>
2122
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>
2123
3053
  <span class="go">&#39;cPcbbbiht_BaCB&#39;</span>
2124
3054
  </pre></div>
2125
3055
  </div>
2126
- <p>You can use this string to recreate an isomorphic triangulation later</p>
2127
- <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>
2128
- <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>
2129
- <span class="go">&#39;hLMzMkbcdefggghhhqxqhx_BaaB&#39;</span>
2130
- <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>
2131
- <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>
2132
3059
  <span class="go">True</span>
2133
3060
  </pre></div>
2134
3061
  </div>
2135
- <p>By default, the returned string encodes the peripheral curves (and
2136
- slopes of Dehn-fillings if any are present), but you can request
2137
- only the “isomorphism signature” which can be given to
2138
- <a class="reference external" href="http://regina.sf.net/">Regina</a>.</p>
2139
- <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>
2140
- <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>
2141
- <span class="go">&#39;dLQacccjsnk&#39;</span>
2142
- <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>
2143
- <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>
2144
- <span class="go">0 -&gt; 0</span>
2145
- <span class="go">[1 18]</span>
2146
- <span class="go">[0 1]</span>
2147
- <span class="go">Extends to link</span>
2148
- <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>
2149
- <span class="go">&#39;dLQacccjsnk_BaRsB&#39;</span>
2150
- <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>
2151
- <span class="go">&#39;dLQacccjsnk_BaaB&#39;</span>
2152
- <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>
2153
- <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>
2154
- <span class="go">0 -&gt; 0</span>
2155
- <span class="go">[1 0] </span>
2156
- <span class="go">[0 1] </span>
2157
- <span class="go">Extends to link</span>
2158
- </pre></div>
2159
- </div>
2160
- <p>If you do not care about the indexing of the cusps when using a
2161
- decorated signature, use ignore_cusp_ordering</p>
2162
- <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>
2163
- <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>
2164
- <span class="gp">&gt;&gt;&gt; </span><span class="n">isosig</span>
2165
- <span class="go">&#39;xLLvLvMLPMPLAMQQcceflnjmmmospsrttvvvtswwwiieiifdeauinasltltahmbjn_bacBbaaBBaBbBbbaabba(2,3)(-2,1)(1,2)(3,4)(0,0)&#39;</span>
2166
- <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>
2167
- <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>
2168
- <span class="go">True</span>
2169
- </pre></div>
2170
- </div>
2171
- <p>If you do not care about the orientations of the peripheral curves,
2172
- use ignore_curve_orientations</p>
2173
- <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>
2174
- <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>
2175
- <span class="go">&#39;gLLAQcdeefffdopuado_BabbBaab&#39;</span>
2176
- <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>
2177
- <span class="gp">&gt;&gt;&gt; </span><span class="n">isosig</span>
2178
- <span class="go">&#39;gLLAQcdeefffdopuado_babbbaab&#39;</span>
2179
- <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>
2180
- <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>
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>
3145
+ </pre></div>
3146
+ </div>
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>
2181
3153
  <span class="go">[0 -&gt; 0 1 -&gt; 1</span>
2182
- <span class="go">[-1 0] [-1 0]</span>
2183
- <span class="go">[ 0 1] [ 0 1]</span>
2184
- <span class="go">Extends to link, 0 -&gt; 0 1 -&gt; 1</span>
2185
- <span class="go">[1 0] [1 0]</span>
2186
- <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>
2187
3156
  <span class="go">Extends to link]</span>
2188
3157
  </pre></div>
2189
3158
  </div>
2190
- <p>The code has been copied from <a class="reference external" href="http://regina.sf.net/">Regina</a> where
2191
- the corresponding method is called “isoSig”.</p>
2192
- <p>Unlike dehydrations for 3-manifold triangulations, an
2193
- isomorphism signature uniquely determines a triangulation up
2194
- to combinatorial isomorphism. That is, two triangulations of
2195
- 3-dimensional manifolds are combinatorially isomorphic if and
2196
- only if their isomorphism signatures are the same string. For
2197
- full details, see <a class="reference external" href="http://arxiv.org/abs/1110.6080">Simplification paths in the Pachner graphs
2198
- of closed orientable 3-manifold triangulations, Burton, 2011</a>.</p>
2199
- <p>For details about how the peripheral decorations work, see
2200
- 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>
2201
3255
  </dd></dl>
2202
3256
 
2203
3257
  <dl class="py method">
2204
3258
  <dt class="sig sig-object py" id="snappy.Manifold.use_field_conversion">
2205
- <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>
2206
- <dd><p>A class method for specifying a numerical conversion function.</p>
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>
3260
+ <dd><p>A class method for specifying a numerical conversion function.
3261
+ This method is deprecated: SnapPy will automatically use
3262
+ SageMath number types or its own SnapPy number type depending on
3263
+ whether SageMath is available or not.</p>
2207
3264
  <p>SnapPy includes its own number type, snappy.Number, which can
2208
3265
  represent floating point real or complex numbers of varying
2209
3266
  precision. (In fact, Number is a wrapper for a pari number of
@@ -2223,25 +3280,29 @@ strings ‘sage’ or ‘snappy’ can be passed as arguments to select
2223
3280
  either of the two default behaviors.</p>
2224
3281
  <p>EXAMPLE:</p>
2225
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>
2226
- <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>
2227
- <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>
2228
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>
2229
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>
2230
- <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>
2231
- <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>
2232
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>
2233
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>
2234
- <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>
2235
- <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>
2236
3297
  </pre></div>
2237
3298
  </div>
2238
3299
  </dd></dl>
2239
3300
 
2240
3301
  <dl class="py method">
2241
3302
  <dt class="sig sig-object py" id="snappy.Manifold.verify_hyperbolicity">
2242
- <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>
2243
- <dd><p>Given an orientable SnapPy Manifold, verifies its hyperbolicity.
2244
- 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
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>
3304
+ <dd><p>Given an orientable SnapPy Manifold, verifies its hyperbolicity.</p>
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
2245
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.
2246
3307
  <code class="docutils literal notranslate"><span class="pre">listOfShapesIntervals</span></code> is a list of complex intervals (elements in
2247
3308
  sage’s <code class="docutils literal notranslate"><span class="pre">ComplexIntervalField</span></code>) certified to contain the true shapes
@@ -2297,7 +3358,7 @@ tetrahedra are positively oriented.</p>
2297
3358
 
2298
3359
  <dl class="py method">
2299
3360
  <dt class="sig sig-object py" id="snappy.Manifold.volume">
2300
- <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>
2301
3362
  <dd><p>Returns the volume of the current solution to the hyperbolic
2302
3363
  gluing equations; if the solution is sufficiently non-degenerate,
2303
3364
  this is the sum of the volumes of the hyperbolic pieces in
@@ -2313,7 +3374,8 @@ the geometric decomposition of the manifold.</p>
2313
3374
  number of digits of accuracy as <em>estimated</em> by SnapPea. When
2314
3375
  printing the volume, the result is rounded to 1 more than this
2315
3376
  number of digits.</p>
2316
- <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">volume</span><span class="p">()</span><span class="o">.</span><span class="n">accuracy</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">63</span><span class="p">)</span> <span class="c1"># Low precision, High precision</span>
3377
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">vol</span><span class="p">,</span> <span class="n">accuracy</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="n">accuracy</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span>
3378
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">accuracy</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">63</span><span class="p">)</span> <span class="c1"># Low precision, High precision</span>
2317
3379
  <span class="go">True</span>
2318
3380
  </pre></div>
2319
3381
  </div>
@@ -2328,12 +3390,12 @@ that the manifold is indeed hyperbolic):</p>
2328
3390
 
2329
3391
  <dl class="py method">
2330
3392
  <dt class="sig sig-object py" id="snappy.Manifold.with_hyperbolic_structure">
2331
- <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>
2332
3394
  <dd><p>Add a (possibly degenerate) hyperbolic structure, turning the
2333
- 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>
2334
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>
2335
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>
2336
- <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>
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>
2337
3399
  <span class="go">2.02988321</span>
2338
3400
  </pre></div>
2339
3401
  </div>
@@ -2341,8 +3403,8 @@ Triangulation into a Manifold.</p>
2341
3403
 
2342
3404
  <dl class="py method">
2343
3405
  <dt class="sig sig-object py" id="snappy.Manifold.without_hyperbolic_structure">
2344
- <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>
2345
- <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
2346
3408
  structure in the process.</p>
2347
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>
2348
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>
@@ -2357,62 +3419,34 @@ structure in the process.</p>
2357
3419
  </section>
2358
3420
 
2359
3421
 
2360
- <div class="clearer"></div>
3422
+ </div>
2361
3423
  </div>
2362
- </div>
2363
- </div>
2364
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
2365
- <div class="sphinxsidebarwrapper">
2366
- <h4>Previous topic</h4>
2367
- <p class="topless"><a href="snappy.html"
2368
- title="previous chapter">The snappy module and its classes</a></p>
2369
- <h4>Next topic</h4>
2370
- <p class="topless"><a href="manifoldhp.html"
2371
- title="next chapter">ManifoldHP: High-precision variant</a></p>
2372
- <div role="note" aria-label="source link">
2373
- <h3>This Page</h3>
2374
- <ul class="this-page-menu">
2375
- <li><a href="_sources/manifold.rst.txt"
2376
- rel="nofollow">Show Source</a></li>
2377
- </ul>
2378
- </div>
2379
- <div id="searchbox" style="display: none" role="search">
2380
- <h3 id="searchlabel">Quick search</h3>
2381
- <div class="searchformwrapper">
2382
- <form class="search" action="search.html" method="get">
2383
- <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
2384
- <input type="submit" value="Go" />
2385
- </form>
3424
+ <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
3425
+ <a href="snappy.html" class="btn btn-neutral float-left" title="The snappy module and its classes" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
3426
+ <a href="manifoldhp.html" class="btn btn-neutral float-right" title="ManifoldHP: High-precision variant" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
2386
3427
  </div>
2387
- </div>
2388
- <script>$('#searchbox').show(0);</script>
3428
+
3429
+ <hr/>
3430
+
3431
+ <div role="contentinfo">
3432
+ <p>&#169; Copyright 2009-2025, by Marc Culler, Nathan Dunfield, Matthias Goerner, Jeffrey Weeks and others.</p>
3433
+ </div>
3434
+
3435
+ Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
3436
+ <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
3437
+ provided by <a href="https://readthedocs.org">Read the Docs</a>.
3438
+
3439
+
3440
+ </footer>
2389
3441
  </div>
2390
3442
  </div>
2391
- <div class="clearer"></div>
2392
- </div>
2393
- <div class="related" role="navigation" aria-label="related navigation">
2394
- <h3>Navigation</h3>
2395
- <ul>
2396
- <li class="right" style="margin-right: 10px">
2397
- <a href="genindex.html" title="General Index"
2398
- >index</a></li>
2399
- <li class="right" >
2400
- <a href="py-modindex.html" title="Python Module Index"
2401
- >modules</a> |</li>
2402
- <li class="right" >
2403
- <a href="manifoldhp.html" title="ManifoldHP: High-precision variant"
2404
- >next</a> |</li>
2405
- <li class="right" >
2406
- <a href="snappy.html" title="The snappy module and its classes"
2407
- >previous</a> |</li>
2408
- <li class="nav-item nav-item-0"><a href="index.html">SnapPy 3.0.3 documentation</a> &#187;</li>
2409
- <li class="nav-item nav-item-1"><a href="snappy.html" >The snappy module and its classes</a> &#187;</li>
2410
- <li class="nav-item nav-item-this"><a href="">Manifold: the main class</a></li>
2411
- </ul>
2412
- </div>
2413
- <div class="footer" role="contentinfo">
2414
- &#169; Copyright 2009-2021, by Marc Culler, Nathan Dunfield, Matthias Goerner, Jeffrey Weeks and others.
2415
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.3.1.
2416
- </div>
2417
- </body>
3443
+ </section>
3444
+ </div>
3445
+ <script>
3446
+ jQuery(function () {
3447
+ SphinxRtdTheme.Navigation.enable(true);
3448
+ });
3449
+ </script>
3450
+
3451
+ </body>
2418
3452
  </html>