snappy 3.1.1__cp312-cp312-win_amd64.whl → 3.2__cp312-cp312-win_amd64.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (471) hide show
  1. snappy/CyOpenGL.cp312-win_amd64.pyd +0 -0
  2. snappy/SnapPy.cp312-win_amd64.pyd +0 -0
  3. snappy/SnapPyHP.cp312-win_amd64.pyd +0 -0
  4. snappy/__init__.py +271 -401
  5. snappy/app.py +70 -20
  6. snappy/browser.py +18 -17
  7. snappy/canonical.py +249 -0
  8. snappy/{verify/cusp_shapes.py → cusps/__init__.py} +8 -18
  9. snappy/cusps/cusp_area_matrix.py +101 -0
  10. snappy/{verify/cusp_areas.py → cusps/cusp_areas_from_matrix.py} +23 -39
  11. snappy/cusps/maximal_cusp_area_matrix.py +136 -0
  12. snappy/cusps/test.py +21 -0
  13. snappy/cusps/trig_cusp_area_matrix.py +63 -0
  14. snappy/database.py +10 -9
  15. snappy/decorated_isosig.py +337 -114
  16. snappy/dev/extended_ptolemy/complexVolumesClosed.py +40 -7
  17. snappy/dev/extended_ptolemy/extended.py +3 -3
  18. snappy/dev/extended_ptolemy/phc_wrapper.py +10 -10
  19. snappy/dev/vericlosed/oneVertexTruncatedComplex.py +1 -1
  20. snappy/doc/_images/m004_paper_plane_on_systole.jpg +0 -0
  21. snappy/doc/_images/m125_paper_plane.jpg +0 -0
  22. snappy/doc/_images/o9_00000_systole_paper_plane.jpg +0 -0
  23. snappy/doc/_images/o9_00000_systole_paper_plane_closer.jpg +0 -0
  24. snappy/doc/_sources/additional_classes.rst.txt +40 -40
  25. snappy/doc/_sources/bugs.rst.txt +14 -14
  26. snappy/doc/_sources/censuses.rst.txt +51 -51
  27. snappy/doc/_sources/credits.rst.txt +75 -75
  28. snappy/doc/_sources/development.rst.txt +259 -239
  29. snappy/doc/_sources/index.rst.txt +182 -115
  30. snappy/doc/_sources/installing.rst.txt +247 -264
  31. snappy/doc/_sources/manifold.rst.txt +6 -6
  32. snappy/doc/_sources/manifoldhp.rst.txt +46 -46
  33. snappy/doc/_sources/news.rst.txt +355 -283
  34. snappy/doc/_sources/other.rst.txt +25 -25
  35. snappy/doc/_sources/platonic_census.rst.txt +20 -20
  36. snappy/doc/_sources/plink.rst.txt +102 -102
  37. snappy/doc/_sources/ptolemy.rst.txt +66 -66
  38. snappy/doc/_sources/ptolemy_classes.rst.txt +42 -42
  39. snappy/doc/_sources/ptolemy_examples1.rst.txt +298 -297
  40. snappy/doc/_sources/ptolemy_examples2.rst.txt +363 -363
  41. snappy/doc/_sources/ptolemy_examples3.rst.txt +301 -301
  42. snappy/doc/_sources/ptolemy_examples4.rst.txt +61 -61
  43. snappy/doc/_sources/ptolemy_prelim.rst.txt +105 -105
  44. snappy/doc/_sources/screenshots.rst.txt +21 -21
  45. snappy/doc/_sources/snap.rst.txt +87 -87
  46. snappy/doc/_sources/snappy.rst.txt +28 -28
  47. snappy/doc/_sources/spherogram.rst.txt +103 -103
  48. snappy/doc/_sources/todo.rst.txt +47 -47
  49. snappy/doc/_sources/triangulation.rst.txt +11 -11
  50. snappy/doc/_sources/tutorial.rst.txt +49 -49
  51. snappy/doc/_sources/verify.rst.txt +210 -150
  52. snappy/doc/_sources/verify_internals.rst.txt +79 -90
  53. snappy/doc/_static/basic.css +924 -924
  54. snappy/doc/_static/css/badge_only.css +1 -1
  55. snappy/doc/_static/css/theme.css +1 -1
  56. snappy/doc/_static/doctools.js +1 -1
  57. snappy/doc/_static/documentation_options.js +12 -12
  58. snappy/doc/_static/fonts/Lato/lato-bold.eot +0 -0
  59. snappy/doc/_static/fonts/Lato/lato-bold.ttf +0 -0
  60. snappy/doc/_static/fonts/Lato/lato-bold.woff +0 -0
  61. snappy/doc/_static/fonts/Lato/lato-bold.woff2 +0 -0
  62. snappy/doc/_static/fonts/Lato/lato-bolditalic.eot +0 -0
  63. snappy/doc/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
  64. snappy/doc/_static/fonts/Lato/lato-bolditalic.woff +0 -0
  65. snappy/doc/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
  66. snappy/doc/_static/fonts/Lato/lato-italic.eot +0 -0
  67. snappy/doc/_static/fonts/Lato/lato-italic.ttf +0 -0
  68. snappy/doc/_static/fonts/Lato/lato-italic.woff +0 -0
  69. snappy/doc/_static/fonts/Lato/lato-italic.woff2 +0 -0
  70. snappy/doc/_static/fonts/Lato/lato-regular.eot +0 -0
  71. snappy/doc/_static/fonts/Lato/lato-regular.ttf +0 -0
  72. snappy/doc/_static/fonts/Lato/lato-regular.woff +0 -0
  73. snappy/doc/_static/fonts/Lato/lato-regular.woff2 +0 -0
  74. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
  75. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
  76. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
  77. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
  78. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
  79. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
  80. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
  81. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
  82. snappy/doc/_static/js/versions.js +228 -0
  83. snappy/doc/_static/language_data.js +199 -199
  84. snappy/doc/_static/pygments.css +74 -74
  85. snappy/doc/_static/searchtools.js +108 -62
  86. snappy/doc/_static/snappy_furo.css +33 -33
  87. snappy/doc/_static/snappy_sphinx_rtd_theme.css +42 -42
  88. snappy/doc/additional_classes.html +1499 -1330
  89. snappy/doc/bugs.html +131 -134
  90. snappy/doc/censuses.html +426 -445
  91. snappy/doc/credits.html +180 -183
  92. snappy/doc/development.html +383 -363
  93. snappy/doc/genindex.html +1330 -1409
  94. snappy/doc/index.html +261 -206
  95. snappy/doc/installing.html +345 -363
  96. snappy/doc/manifold.html +3451 -2839
  97. snappy/doc/manifoldhp.html +179 -182
  98. snappy/doc/news.html +387 -329
  99. snappy/doc/objects.inv +0 -0
  100. snappy/doc/other.html +160 -162
  101. snappy/doc/platonic_census.html +374 -377
  102. snappy/doc/plink.html +209 -212
  103. snappy/doc/ptolemy.html +253 -255
  104. snappy/doc/ptolemy_classes.html +1143 -1146
  105. snappy/doc/ptolemy_examples1.html +408 -410
  106. snappy/doc/ptolemy_examples2.html +470 -473
  107. snappy/doc/ptolemy_examples3.html +413 -416
  108. snappy/doc/ptolemy_examples4.html +194 -197
  109. snappy/doc/ptolemy_prelim.html +247 -250
  110. snappy/doc/py-modindex.html +164 -167
  111. snappy/doc/screenshots.html +140 -142
  112. snappy/doc/search.html +134 -137
  113. snappy/doc/searchindex.js +1 -1
  114. snappy/doc/snap.html +201 -204
  115. snappy/doc/snappy.html +180 -182
  116. snappy/doc/spherogram.html +1210 -1213
  117. snappy/doc/todo.html +165 -168
  118. snappy/doc/triangulation.html +1583 -1474
  119. snappy/doc/tutorial.html +158 -161
  120. snappy/doc/verify.html +329 -275
  121. snappy/doc/verify_internals.html +1234 -1691
  122. snappy/drilling/__init__.py +153 -235
  123. snappy/drilling/barycentric.py +103 -0
  124. snappy/drilling/constants.py +0 -2
  125. snappy/drilling/crush.py +56 -130
  126. snappy/drilling/cusps.py +12 -6
  127. snappy/drilling/debug.py +2 -1
  128. snappy/drilling/exceptions.py +7 -40
  129. snappy/drilling/moves.py +302 -243
  130. snappy/drilling/perturb.py +63 -37
  131. snappy/drilling/shorten.py +36 -0
  132. snappy/drilling/subdivide.py +0 -5
  133. snappy/drilling/test.py +23 -0
  134. snappy/drilling/test_cases.py +126 -0
  135. snappy/drilling/tracing.py +9 -37
  136. snappy/exceptions.py +18 -5
  137. snappy/exterior_to_link/barycentric_geometry.py +2 -4
  138. snappy/exterior_to_link/main.py +8 -7
  139. snappy/exterior_to_link/mcomplex_with_link.py +2 -2
  140. snappy/exterior_to_link/rational_linear_algebra.py +1 -1
  141. snappy/exterior_to_link/rational_linear_algebra_wrapped.py +1 -1
  142. snappy/exterior_to_link/test.py +21 -33
  143. snappy/geometric_structure/__init__.py +212 -0
  144. snappy/geometric_structure/cusp_neighborhood/__init__.py +3 -0
  145. snappy/geometric_structure/cusp_neighborhood/complex_cusp_cross_section.py +697 -0
  146. snappy/geometric_structure/cusp_neighborhood/cusp_cross_section_base.py +484 -0
  147. snappy/geometric_structure/cusp_neighborhood/exceptions.py +42 -0
  148. snappy/geometric_structure/cusp_neighborhood/real_cusp_cross_section.py +298 -0
  149. snappy/geometric_structure/cusp_neighborhood/tiles_for_cusp_neighborhood.py +159 -0
  150. snappy/geometric_structure/cusp_neighborhood/vertices.py +32 -0
  151. snappy/geometric_structure/geodesic/__init__.py +0 -0
  152. snappy/geometric_structure/geodesic/add_core_curves.py +152 -0
  153. snappy/geometric_structure/geodesic/avoid_core_curves.py +369 -0
  154. snappy/geometric_structure/geodesic/canonical_keys.py +52 -0
  155. snappy/geometric_structure/geodesic/check_away_from_core_curve.py +60 -0
  156. snappy/geometric_structure/geodesic/constants.py +6 -0
  157. snappy/geometric_structure/geodesic/exceptions.py +22 -0
  158. snappy/{drilling → geometric_structure/geodesic}/fixed_points.py +34 -9
  159. snappy/{drilling/geodesic_info.py → geometric_structure/geodesic/geodesic_start_point_info.py} +139 -180
  160. snappy/geometric_structure/geodesic/graph_trace_helper.py +67 -0
  161. snappy/geometric_structure/geodesic/line.py +30 -0
  162. snappy/geometric_structure/geodesic/multiplicity.py +127 -0
  163. snappy/geometric_structure/geodesic/tiles_for_geodesic.py +101 -0
  164. snappy/geometric_structure/test.py +22 -0
  165. snappy/gui.py +23 -13
  166. snappy/horoviewer.py +7 -7
  167. snappy/hyperboloid/__init__.py +96 -31
  168. snappy/hyperboloid/distances.py +245 -0
  169. snappy/hyperboloid/horoball.py +19 -0
  170. snappy/hyperboloid/line.py +35 -0
  171. snappy/hyperboloid/point.py +9 -0
  172. snappy/hyperboloid/triangle.py +29 -0
  173. snappy/isometry_signature.py +382 -0
  174. snappy/len_spec/__init__.py +596 -0
  175. snappy/len_spec/geodesic_info.py +110 -0
  176. snappy/len_spec/geodesic_key_info_dict.py +117 -0
  177. snappy/len_spec/geodesic_piece.py +143 -0
  178. snappy/len_spec/geometric_structure.py +182 -0
  179. snappy/len_spec/geometry.py +80 -0
  180. snappy/len_spec/length_spectrum_geodesic_info.py +170 -0
  181. snappy/len_spec/spine.py +206 -0
  182. snappy/len_spec/test.py +24 -0
  183. snappy/len_spec/test_cases.py +69 -0
  184. snappy/len_spec/tile.py +275 -0
  185. snappy/len_spec/word.py +86 -0
  186. snappy/math_basics.py +39 -13
  187. snappy/matrix.py +52 -9
  188. snappy/number.py +12 -6
  189. snappy/numeric_output_checker.py +2 -3
  190. snappy/pari.py +6 -3
  191. snappy/polyviewer.py +8 -8
  192. snappy/ptolemy/__init__.py +1 -1
  193. snappy/ptolemy/component.py +2 -2
  194. snappy/ptolemy/coordinates.py +25 -25
  195. snappy/ptolemy/findLoops.py +9 -9
  196. snappy/ptolemy/manifoldMethods.py +27 -29
  197. snappy/ptolemy/polynomial.py +50 -57
  198. snappy/ptolemy/processFileBase.py +60 -0
  199. snappy/ptolemy/ptolemyVariety.py +109 -41
  200. snappy/ptolemy/reginaWrapper.py +4 -4
  201. snappy/ptolemy/rur.py +1 -1
  202. snappy/ptolemy/solutionsToPrimeIdealGroebnerBasis.py +9 -9
  203. snappy/ptolemy/test.py +99 -54
  204. snappy/ptolemy/utilities.py +1 -1
  205. snappy/raytracing/__init__.py +64 -0
  206. snappy/raytracing/additional_horospheres.py +64 -0
  207. snappy/raytracing/additional_len_spec_choices.py +63 -0
  208. snappy/raytracing/cohomology_fractal.py +0 -3
  209. snappy/raytracing/eyeball.py +123 -0
  210. snappy/raytracing/finite_raytracing_data.py +17 -17
  211. snappy/raytracing/finite_viewer.py +15 -15
  212. snappy/raytracing/geodesic_tube_info.py +93 -63
  213. snappy/raytracing/geodesics.py +94 -64
  214. snappy/raytracing/geodesics_window.py +56 -34
  215. snappy/raytracing/gui_utilities.py +21 -6
  216. snappy/raytracing/hyperboloid_navigation.py +29 -4
  217. snappy/raytracing/hyperboloid_utilities.py +73 -73
  218. snappy/raytracing/ideal_raytracing_data.py +121 -91
  219. snappy/raytracing/inside_viewer.py +199 -66
  220. snappy/raytracing/pack.py +22 -0
  221. snappy/raytracing/raytracing_data.py +37 -25
  222. snappy/raytracing/raytracing_view.py +70 -65
  223. snappy/raytracing/shaders/Eye.png +0 -0
  224. snappy/raytracing/shaders/NonGeometric.png +0 -0
  225. snappy/raytracing/shaders/__init__.py +39 -3
  226. snappy/raytracing/shaders/fragment.glsl +451 -133
  227. snappy/raytracing/test.py +29 -0
  228. snappy/raytracing/tooltip.py +146 -0
  229. snappy/raytracing/upper_halfspace_utilities.py +42 -9
  230. snappy/sage_helper.py +67 -134
  231. snappy/settings.py +90 -77
  232. snappy/shell.py +2 -0
  233. snappy/snap/character_varieties.py +2 -2
  234. snappy/snap/find_field.py +4 -3
  235. snappy/snap/fundamental_polyhedron.py +2 -2
  236. snappy/snap/kernel_structures.py +5 -1
  237. snappy/snap/nsagetools.py +9 -8
  238. snappy/snap/peripheral/dual_cellulation.py +4 -3
  239. snappy/snap/peripheral/peripheral.py +2 -2
  240. snappy/snap/peripheral/surface.py +5 -5
  241. snappy/snap/peripheral/test.py +1 -1
  242. snappy/snap/polished_reps.py +8 -8
  243. snappy/snap/slice_obs_HKL.py +16 -14
  244. snappy/snap/t3mlite/arrow.py +3 -3
  245. snappy/snap/t3mlite/edge.py +3 -3
  246. snappy/snap/t3mlite/homology.py +2 -2
  247. snappy/snap/t3mlite/mcomplex.py +3 -3
  248. snappy/snap/t3mlite/simplex.py +12 -0
  249. snappy/snap/t3mlite/spun.py +18 -17
  250. snappy/snap/t3mlite/test_vs_regina.py +4 -4
  251. snappy/snap/test.py +37 -53
  252. snappy/snap/utilities.py +4 -5
  253. snappy/test.py +121 -138
  254. snappy/test_cases.py +263 -0
  255. snappy/testing.py +131 -0
  256. snappy/tiling/__init__.py +2 -0
  257. snappy/tiling/canonical_key_dict.py +59 -0
  258. snappy/tiling/dict_based_set.py +79 -0
  259. snappy/tiling/floor.py +49 -0
  260. snappy/tiling/hyperboloid_dict.py +54 -0
  261. snappy/tiling/iter_utils.py +78 -0
  262. snappy/tiling/lifted_tetrahedron.py +22 -0
  263. snappy/tiling/lifted_tetrahedron_set.py +54 -0
  264. snappy/tiling/real_hash_dict.py +164 -0
  265. snappy/tiling/test.py +23 -0
  266. snappy/tiling/tile.py +215 -0
  267. snappy/tiling/triangle.py +33 -0
  268. snappy/tkterminal.py +113 -84
  269. snappy/twister/main.py +1 -7
  270. snappy/twister/twister_core.cp312-win_amd64.pyd +0 -0
  271. snappy/upper_halfspace/__init__.py +78 -17
  272. snappy/verify/__init__.py +3 -7
  273. snappy/verify/{verifyCanonical.py → canonical.py} +78 -70
  274. snappy/verify/complex_volume/adjust_torsion.py +1 -2
  275. snappy/verify/complex_volume/closed.py +13 -13
  276. snappy/verify/complex_volume/cusped.py +6 -6
  277. snappy/verify/complex_volume/extended_bloch.py +5 -8
  278. snappy/verify/{cuspTranslations.py → cusp_translations.py} +1 -1
  279. snappy/verify/edge_equations.py +80 -0
  280. snappy/verify/exceptions.py +0 -55
  281. snappy/verify/{verifyHyperbolicity.py → hyperbolicity.py} +3 -3
  282. snappy/verify/interval_newton_shapes_engine.py +7 -5
  283. snappy/verify/interval_tree.py +5 -5
  284. snappy/verify/krawczyk_shapes_engine.py +17 -18
  285. snappy/verify/maximal_cusp_area_matrix/__init__.py +7 -74
  286. snappy/verify/maximal_cusp_area_matrix/cusp_tiling_engine.py +3 -4
  287. snappy/verify/maximal_cusp_area_matrix/cusp_translate_engine.py +1 -1
  288. snappy/verify/{realAlgebra.py → real_algebra.py} +1 -1
  289. snappy/verify/shapes.py +5 -3
  290. snappy/verify/short_slopes.py +39 -41
  291. snappy/verify/{squareExtensions.py → square_extensions.py} +14 -11
  292. snappy/verify/test.py +57 -60
  293. snappy/verify/upper_halfspace/extended_matrix.py +1 -1
  294. snappy/verify/upper_halfspace/finite_point.py +3 -4
  295. snappy/verify/upper_halfspace/ideal_point.py +9 -9
  296. snappy/verify/volume.py +2 -2
  297. snappy/version.py +2 -2
  298. {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/METADATA +25 -11
  299. snappy-3.2.dist-info/RECORD +503 -0
  300. {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/WHEEL +1 -1
  301. {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/top_level.txt +6 -1
  302. snappy/__pycache__/__init__.cpython-312.pyc +0 -0
  303. snappy/__pycache__/browser.cpython-312.pyc +0 -0
  304. snappy/__pycache__/cache.cpython-312.pyc +0 -0
  305. snappy/__pycache__/database.cpython-312.pyc +0 -0
  306. snappy/__pycache__/db_utilities.cpython-312.pyc +0 -0
  307. snappy/__pycache__/decorated_isosig.cpython-312.pyc +0 -0
  308. snappy/__pycache__/exceptions.cpython-312.pyc +0 -0
  309. snappy/__pycache__/export_stl.cpython-312.pyc +0 -0
  310. snappy/__pycache__/filedialog.cpython-312.pyc +0 -0
  311. snappy/__pycache__/gui.cpython-312.pyc +0 -0
  312. snappy/__pycache__/horoviewer.cpython-312.pyc +0 -0
  313. snappy/__pycache__/math_basics.cpython-312.pyc +0 -0
  314. snappy/__pycache__/matrix.cpython-312.pyc +0 -0
  315. snappy/__pycache__/number.cpython-312.pyc +0 -0
  316. snappy/__pycache__/numeric_output_checker.cpython-312.pyc +0 -0
  317. snappy/__pycache__/pari.cpython-312.pyc +0 -0
  318. snappy/__pycache__/polyviewer.cpython-312.pyc +0 -0
  319. snappy/__pycache__/sage_helper.cpython-312.pyc +0 -0
  320. snappy/__pycache__/version.cpython-312.pyc +0 -0
  321. snappy/doc/_sources/verify_canon.rst.txt +0 -90
  322. snappy/doc/_static/js/html5shiv-printshiv.min.js +0 -4
  323. snappy/doc/_static/js/html5shiv.min.js +0 -4
  324. snappy/doc/verify_canon.html +0 -304
  325. snappy/drilling/__pycache__/__init__.cpython-312.pyc +0 -0
  326. snappy/drilling/__pycache__/constants.cpython-312.pyc +0 -0
  327. snappy/drilling/__pycache__/crush.cpython-312.pyc +0 -0
  328. snappy/drilling/__pycache__/cusps.cpython-312.pyc +0 -0
  329. snappy/drilling/__pycache__/debug.cpython-312.pyc +0 -0
  330. snappy/drilling/__pycache__/epsilons.cpython-312.pyc +0 -0
  331. snappy/drilling/__pycache__/exceptions.cpython-312.pyc +0 -0
  332. snappy/drilling/__pycache__/fixed_points.cpython-312.pyc +0 -0
  333. snappy/drilling/__pycache__/geodesic_info.cpython-312.pyc +0 -0
  334. snappy/drilling/__pycache__/geodesic_tube.cpython-312.pyc +0 -0
  335. snappy/drilling/__pycache__/geometric_structure.cpython-312.pyc +0 -0
  336. snappy/drilling/__pycache__/line.cpython-312.pyc +0 -0
  337. snappy/drilling/__pycache__/moves.cpython-312.pyc +0 -0
  338. snappy/drilling/__pycache__/peripheral_curves.cpython-312.pyc +0 -0
  339. snappy/drilling/__pycache__/perturb.cpython-312.pyc +0 -0
  340. snappy/drilling/__pycache__/quotient_space.cpython-312.pyc +0 -0
  341. snappy/drilling/__pycache__/spatial_dict.cpython-312.pyc +0 -0
  342. snappy/drilling/__pycache__/subdivide.cpython-312.pyc +0 -0
  343. snappy/drilling/__pycache__/tracing.cpython-312.pyc +0 -0
  344. snappy/drilling/geodesic_tube.py +0 -441
  345. snappy/drilling/geometric_structure.py +0 -366
  346. snappy/drilling/line.py +0 -122
  347. snappy/drilling/quotient_space.py +0 -94
  348. snappy/drilling/spatial_dict.py +0 -128
  349. snappy/exterior_to_link/__pycache__/__init__.cpython-312.pyc +0 -0
  350. snappy/exterior_to_link/__pycache__/barycentric_geometry.cpython-312.pyc +0 -0
  351. snappy/exterior_to_link/__pycache__/exceptions.cpython-312.pyc +0 -0
  352. snappy/exterior_to_link/__pycache__/hyp_utils.cpython-312.pyc +0 -0
  353. snappy/exterior_to_link/__pycache__/link_projection.cpython-312.pyc +0 -0
  354. snappy/exterior_to_link/__pycache__/main.cpython-312.pyc +0 -0
  355. snappy/exterior_to_link/__pycache__/mcomplex_with_expansion.cpython-312.pyc +0 -0
  356. snappy/exterior_to_link/__pycache__/mcomplex_with_link.cpython-312.pyc +0 -0
  357. snappy/exterior_to_link/__pycache__/mcomplex_with_memory.cpython-312.pyc +0 -0
  358. snappy/exterior_to_link/__pycache__/pl_utils.cpython-312.pyc +0 -0
  359. snappy/exterior_to_link/__pycache__/put_in_S3.cpython-312.pyc +0 -0
  360. snappy/exterior_to_link/__pycache__/rational_linear_algebra.cpython-312.pyc +0 -0
  361. snappy/exterior_to_link/__pycache__/simplify_to_base_tri.cpython-312.pyc +0 -0
  362. snappy/exterior_to_link/__pycache__/stored_moves.cpython-312.pyc +0 -0
  363. snappy/hyperboloid/__pycache__/__init__.cpython-312.pyc +0 -0
  364. snappy/manifolds/__pycache__/__init__.cpython-312.pyc +0 -0
  365. snappy/ptolemy/__pycache__/__init__.cpython-312.pyc +0 -0
  366. snappy/ptolemy/__pycache__/component.cpython-312.pyc +0 -0
  367. snappy/ptolemy/__pycache__/coordinates.cpython-312.pyc +0 -0
  368. snappy/ptolemy/__pycache__/fieldExtensions.cpython-312.pyc +0 -0
  369. snappy/ptolemy/__pycache__/findLoops.cpython-312.pyc +0 -0
  370. snappy/ptolemy/__pycache__/homology.cpython-312.pyc +0 -0
  371. snappy/ptolemy/__pycache__/manifoldMethods.cpython-312.pyc +0 -0
  372. snappy/ptolemy/__pycache__/matrix.cpython-312.pyc +0 -0
  373. snappy/ptolemy/__pycache__/numericalSolutionsToGroebnerBasis.cpython-312.pyc +0 -0
  374. snappy/ptolemy/__pycache__/polynomial.cpython-312.pyc +0 -0
  375. snappy/ptolemy/__pycache__/processComponents.cpython-312.pyc +0 -0
  376. snappy/ptolemy/__pycache__/processFileBase.cpython-312.pyc +0 -0
  377. snappy/ptolemy/__pycache__/processFileDispatch.cpython-312.pyc +0 -0
  378. snappy/ptolemy/__pycache__/processMagmaFile.cpython-312.pyc +0 -0
  379. snappy/ptolemy/__pycache__/processRurFile.cpython-312.pyc +0 -0
  380. snappy/ptolemy/__pycache__/ptolemyGeneralizedObstructionClass.cpython-312.pyc +0 -0
  381. snappy/ptolemy/__pycache__/ptolemyObstructionClass.cpython-312.pyc +0 -0
  382. snappy/ptolemy/__pycache__/ptolemyVariety.cpython-312.pyc +0 -0
  383. snappy/ptolemy/__pycache__/ptolemyVarietyPrimeIdealGroebnerBasis.cpython-312.pyc +0 -0
  384. snappy/ptolemy/__pycache__/rur.cpython-312.pyc +0 -0
  385. snappy/ptolemy/__pycache__/solutionsToPrimeIdealGroebnerBasis.cpython-312.pyc +0 -0
  386. snappy/ptolemy/__pycache__/utilities.cpython-312.pyc +0 -0
  387. snappy/snap/__pycache__/__init__.cpython-312.pyc +0 -0
  388. snappy/snap/__pycache__/character_varieties.cpython-312.pyc +0 -0
  389. snappy/snap/__pycache__/fundamental_polyhedron.cpython-312.pyc +0 -0
  390. snappy/snap/__pycache__/interval_reps.cpython-312.pyc +0 -0
  391. snappy/snap/__pycache__/kernel_structures.cpython-312.pyc +0 -0
  392. snappy/snap/__pycache__/mcomplex_base.cpython-312.pyc +0 -0
  393. snappy/snap/__pycache__/nsagetools.cpython-312.pyc +0 -0
  394. snappy/snap/__pycache__/polished_reps.cpython-312.pyc +0 -0
  395. snappy/snap/__pycache__/shapes.cpython-312.pyc +0 -0
  396. snappy/snap/__pycache__/slice_obs_HKL.cpython-312.pyc +0 -0
  397. snappy/snap/__pycache__/utilities.cpython-312.pyc +0 -0
  398. snappy/snap/peripheral/__pycache__/__init__.cpython-312.pyc +0 -0
  399. snappy/snap/peripheral/__pycache__/dual_cellulation.cpython-312.pyc +0 -0
  400. snappy/snap/peripheral/__pycache__/link.cpython-312.pyc +0 -0
  401. snappy/snap/peripheral/__pycache__/peripheral.cpython-312.pyc +0 -0
  402. snappy/snap/peripheral/__pycache__/surface.cpython-312.pyc +0 -0
  403. snappy/snap/t3mlite/__pycache__/__init__.cpython-312.pyc +0 -0
  404. snappy/snap/t3mlite/__pycache__/arrow.cpython-312.pyc +0 -0
  405. snappy/snap/t3mlite/__pycache__/corner.cpython-312.pyc +0 -0
  406. snappy/snap/t3mlite/__pycache__/edge.cpython-312.pyc +0 -0
  407. snappy/snap/t3mlite/__pycache__/face.cpython-312.pyc +0 -0
  408. snappy/snap/t3mlite/__pycache__/files.cpython-312.pyc +0 -0
  409. snappy/snap/t3mlite/__pycache__/homology.cpython-312.pyc +0 -0
  410. snappy/snap/t3mlite/__pycache__/linalg.cpython-312.pyc +0 -0
  411. snappy/snap/t3mlite/__pycache__/mcomplex.cpython-312.pyc +0 -0
  412. snappy/snap/t3mlite/__pycache__/perm4.cpython-312.pyc +0 -0
  413. snappy/snap/t3mlite/__pycache__/simplex.cpython-312.pyc +0 -0
  414. snappy/snap/t3mlite/__pycache__/spun.cpython-312.pyc +0 -0
  415. snappy/snap/t3mlite/__pycache__/surface.cpython-312.pyc +0 -0
  416. snappy/snap/t3mlite/__pycache__/tetrahedron.cpython-312.pyc +0 -0
  417. snappy/snap/t3mlite/__pycache__/vertex.cpython-312.pyc +0 -0
  418. snappy/togl/__init__.py +0 -3
  419. snappy/togl/darwin-tk8.6/Togl2.1/LICENSE +0 -28
  420. snappy/togl/darwin-tk8.6/Togl2.1/libTogl2.1.dylib +0 -0
  421. snappy/togl/darwin-tk8.6/Togl2.1/pkgIndex.tcl +0 -5
  422. snappy/togl/darwin-tk8.7/Togl2.1/LICENSE +0 -28
  423. snappy/togl/darwin-tk8.7/Togl2.1/libTogl2.1.dylib +0 -0
  424. snappy/togl/darwin-tk8.7/Togl2.1/pkgIndex.tcl +0 -5
  425. snappy/togl/linux2-x86_64-tk8.6/Togl2.1/LICENSE +0 -28
  426. snappy/togl/linux2-x86_64-tk8.6/Togl2.1/libTogl2.1.so +0 -0
  427. snappy/togl/linux2-x86_64-tk8.6/Togl2.1/pkgIndex.tcl +0 -5
  428. snappy/togl/win32VC-tk8.6/Togl2.1/LICENSE +0 -28
  429. snappy/togl/win32VC-tk8.6/Togl2.1/Togl21.dll +0 -0
  430. snappy/togl/win32VC-tk8.6/Togl2.1/Togl21.lib +0 -0
  431. snappy/togl/win32VC-tk8.6/Togl2.1/pkgIndex.tcl +0 -6
  432. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/LICENSE +0 -28
  433. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/Togl21.dll +0 -0
  434. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/Togl21.lib +0 -0
  435. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/pkgIndex.tcl +0 -6
  436. snappy/twister/__pycache__/__init__.cpython-312.pyc +0 -0
  437. snappy/twister/__pycache__/main.cpython-312.pyc +0 -0
  438. snappy/upper_halfspace/__pycache__/__init__.cpython-312.pyc +0 -0
  439. snappy/upper_halfspace/__pycache__/ideal_point.cpython-312.pyc +0 -0
  440. snappy/verify/__pycache__/__init__.cpython-312.pyc +0 -0
  441. snappy/verify/__pycache__/cuspCrossSection.cpython-312.pyc +0 -0
  442. snappy/verify/__pycache__/cuspTranslations.cpython-312.pyc +0 -0
  443. snappy/verify/__pycache__/cusp_areas.cpython-312.pyc +0 -0
  444. snappy/verify/__pycache__/cusp_shapes.cpython-312.pyc +0 -0
  445. snappy/verify/__pycache__/exceptions.cpython-312.pyc +0 -0
  446. snappy/verify/__pycache__/interval_newton_shapes_engine.cpython-312.pyc +0 -0
  447. snappy/verify/__pycache__/interval_tree.cpython-312.pyc +0 -0
  448. snappy/verify/__pycache__/krawczyk_shapes_engine.cpython-312.pyc +0 -0
  449. snappy/verify/__pycache__/realAlgebra.cpython-312.pyc +0 -0
  450. snappy/verify/__pycache__/shapes.cpython-312.pyc +0 -0
  451. snappy/verify/__pycache__/short_slopes.cpython-312.pyc +0 -0
  452. snappy/verify/__pycache__/squareExtensions.cpython-312.pyc +0 -0
  453. snappy/verify/__pycache__/verifyCanonical.cpython-312.pyc +0 -0
  454. snappy/verify/__pycache__/verifyHyperbolicity.cpython-312.pyc +0 -0
  455. snappy/verify/__pycache__/volume.cpython-312.pyc +0 -0
  456. snappy/verify/complex_volume/__pycache__/__init__.cpython-312.pyc +0 -0
  457. snappy/verify/complex_volume/__pycache__/adjust_torsion.cpython-312.pyc +0 -0
  458. snappy/verify/complex_volume/__pycache__/closed.cpython-312.pyc +0 -0
  459. snappy/verify/complex_volume/__pycache__/compute_ptolemys.cpython-312.pyc +0 -0
  460. snappy/verify/complex_volume/__pycache__/cusped.cpython-312.pyc +0 -0
  461. snappy/verify/complex_volume/__pycache__/extended_bloch.cpython-312.pyc +0 -0
  462. snappy/verify/cuspCrossSection.py +0 -1422
  463. snappy/verify/maximal_cusp_area_matrix/__pycache__/__init__.cpython-312.pyc +0 -0
  464. snappy/verify/maximal_cusp_area_matrix/__pycache__/cusp_tiling_engine.cpython-312.pyc +0 -0
  465. snappy/verify/maximal_cusp_area_matrix/__pycache__/cusp_translate_engine.cpython-312.pyc +0 -0
  466. snappy/verify/upper_halfspace/__pycache__/__init__.cpython-312.pyc +0 -0
  467. snappy/verify/upper_halfspace/__pycache__/extended_matrix.cpython-312.pyc +0 -0
  468. snappy/verify/upper_halfspace/__pycache__/finite_point.cpython-312.pyc +0 -0
  469. snappy/verify/upper_halfspace/__pycache__/ideal_point.cpython-312.pyc +0 -0
  470. snappy-3.1.1.dist-info/RECORD +0 -572
  471. {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/entry_points.txt +0 -0
@@ -1,1331 +1,1500 @@
1
- <!DOCTYPE html>
2
- <html class="writer-html5" lang="en" >
3
- <head>
4
- <meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
5
-
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
- <title>Additional Classes &mdash; SnapPy 3.1.1 documentation</title>
8
- <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
9
- <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
10
- <link rel="stylesheet" href="_static/snappy_sphinx_rtd_theme.css" type="text/css" />
11
- <link rel="shortcut icon" href="_static/SnapPy.ico"/>
12
- <!--[if lt IE 9]>
13
- <script src="_static/js/html5shiv.min.js"></script>
14
- <![endif]-->
15
-
16
- <script src="_static/jquery.js?v=5d32c60e"></script>
17
- <script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
18
- <script src="_static/documentation_options.js?v=796a81b5"></script>
19
- <script src="_static/doctools.js?v=888ff710"></script>
20
- <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
21
- <script src="_static/js/theme.js"></script>
22
- <link rel="index" title="Index" href="genindex.html" />
23
- <link rel="search" title="Search" href="search.html" />
24
- <link rel="next" title="Census manifolds" href="censuses.html" />
25
- <link rel="prev" title="Triangulation" href="triangulation.html" />
26
- </head>
27
-
28
- <body class="wy-body-for-nav">
29
- <div class="wy-grid-for-nav">
30
- <nav data-toggle="wy-nav-shift" class="wy-nav-side">
31
- <div class="wy-side-scroll">
32
- <div class="wy-side-nav-search" >
33
-
34
-
35
-
36
- <a href="index.html" class="icon icon-home">
37
- SnapPy
38
- <img src="_static/SnapPy-horizontal-128.png" class="logo" alt="Logo"/>
39
- </a>
40
- <div class="version">
41
- 3.1.1
42
- </div>
43
- <div role="search">
44
- <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
45
- <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
46
- <input type="hidden" name="check_keywords" value="yes" />
47
- <input type="hidden" name="area" value="default" />
48
- </form>
49
- </div>
50
- </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
51
- <ul class="current">
52
- <li class="toctree-l1"><a class="reference internal" href="installing.html">Installing SnapPy</a></li>
53
- <li class="toctree-l1"><a class="reference internal" href="screenshots.html">Screenshots: SnapPy in action</a></li>
54
- <li class="toctree-l1"><a class="reference internal" href="tutorial.html">Tutorial</a></li>
55
- <li class="toctree-l1 current"><a class="reference internal" href="snappy.html">The snappy module and its classes</a><ul class="current">
56
- <li class="toctree-l2"><a class="reference internal" href="manifold.html">Manifold: the main class</a></li>
57
- <li class="toctree-l2"><a class="reference internal" href="manifoldhp.html">ManifoldHP: High-precision variant</a></li>
58
- <li class="toctree-l2"><a class="reference internal" href="triangulation.html">Triangulation</a></li>
59
- <li class="toctree-l2 current"><a class="current reference internal" href="#">Additional Classes</a><ul>
60
- <li class="toctree-l3"><a class="reference internal" href="#abeliangroup">AbelianGroup</a><ul>
61
- <li class="toctree-l4"><a class="reference internal" href="#snappy.AbelianGroup"><code class="docutils literal notranslate"><span class="pre">AbelianGroup</span></code></a><ul>
62
- <li class="toctree-l5"><a class="reference internal" href="#snappy.AbelianGroup.betti_number"><code class="docutils literal notranslate"><span class="pre">AbelianGroup.betti_number()</span></code></a></li>
63
- <li class="toctree-l5"><a class="reference internal" href="#snappy.AbelianGroup.elementary_divisors"><code class="docutils literal notranslate"><span class="pre">AbelianGroup.elementary_divisors()</span></code></a></li>
64
- <li class="toctree-l5"><a class="reference internal" href="#snappy.AbelianGroup.order"><code class="docutils literal notranslate"><span class="pre">AbelianGroup.order()</span></code></a></li>
65
- <li class="toctree-l5"><a class="reference internal" href="#snappy.AbelianGroup.rank"><code class="docutils literal notranslate"><span class="pre">AbelianGroup.rank()</span></code></a></li>
66
- </ul>
67
- </li>
68
- </ul>
69
- </li>
70
- <li class="toctree-l3"><a class="reference internal" href="#fundamentalgroup">FundamentalGroup</a><ul>
71
- <li class="toctree-l4"><a class="reference internal" href="#snappy.HolonomyGroup"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup</span></code></a><ul>
72
- <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.O31"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.O31()</span></code></a></li>
73
- <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.SL2C"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.SL2C()</span></code></a></li>
74
- <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.character_variety_vars_and_polys"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.character_variety_vars_and_polys()</span></code></a></li>
75
- <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.complex_length"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.complex_length()</span></code></a></li>
76
- <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.gap_string"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.gap_string()</span></code></a></li>
77
- <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.generators"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.generators()</span></code></a></li>
78
- <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.generators_in_originals"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.generators_in_originals()</span></code></a></li>
79
- <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.longitude"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.longitude()</span></code></a></li>
80
- <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.magma_string"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.magma_string()</span></code></a></li>
81
- <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.meridian"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.meridian()</span></code></a></li>
82
- <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.num_generators"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.num_generators()</span></code></a></li>
83
- <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.num_original_generators"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.num_original_generators()</span></code></a></li>
84
- <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.num_relators"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.num_relators()</span></code></a></li>
85
- <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.original_generators"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.original_generators()</span></code></a></li>
86
- <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.peripheral_curves"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.peripheral_curves()</span></code></a></li>
87
- <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.relators"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.relators()</span></code></a></li>
88
- <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.sage"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.sage()</span></code></a></li>
89
- </ul>
90
- </li>
91
- </ul>
92
- </li>
93
- <li class="toctree-l3"><a class="reference internal" href="#symmetrygroup">SymmetryGroup</a><ul>
94
- <li class="toctree-l4"><a class="reference internal" href="#snappy.SymmetryGroup"><code class="docutils literal notranslate"><span class="pre">SymmetryGroup</span></code></a><ul>
95
- <li class="toctree-l5"><a class="reference internal" href="#snappy.SymmetryGroup.abelian_description"><code class="docutils literal notranslate"><span class="pre">SymmetryGroup.abelian_description()</span></code></a></li>
96
- <li class="toctree-l5"><a class="reference internal" href="#snappy.SymmetryGroup.abelianization"><code class="docutils literal notranslate"><span class="pre">SymmetryGroup.abelianization()</span></code></a></li>
97
- <li class="toctree-l5"><a class="reference internal" href="#snappy.SymmetryGroup.center"><code class="docutils literal notranslate"><span class="pre">SymmetryGroup.center()</span></code></a></li>
98
- <li class="toctree-l5"><a class="reference internal" href="#snappy.SymmetryGroup.commutator_subgroup"><code class="docutils literal notranslate"><span class="pre">SymmetryGroup.commutator_subgroup()</span></code></a></li>
99
- <li class="toctree-l5"><a class="reference internal" href="#snappy.SymmetryGroup.direct_product_description"><code class="docutils literal notranslate"><span class="pre">SymmetryGroup.direct_product_description()</span></code></a></li>
100
- <li class="toctree-l5"><a class="reference internal" href="#snappy.SymmetryGroup.is_S5"><code class="docutils literal notranslate"><span class="pre">SymmetryGroup.is_S5()</span></code></a></li>
101
- <li class="toctree-l5"><a class="reference internal" href="#snappy.SymmetryGroup.is_abelian"><code class="docutils literal notranslate"><span class="pre">SymmetryGroup.is_abelian()</span></code></a></li>
102
- <li class="toctree-l5"><a class="reference internal" href="#snappy.SymmetryGroup.is_amphicheiral"><code class="docutils literal notranslate"><span class="pre">SymmetryGroup.is_amphicheiral()</span></code></a></li>
103
- <li class="toctree-l5"><a class="reference internal" href="#snappy.SymmetryGroup.is_dihedral"><code class="docutils literal notranslate"><span class="pre">SymmetryGroup.is_dihedral()</span></code></a></li>
104
- <li class="toctree-l5"><a class="reference internal" href="#snappy.SymmetryGroup.is_direct_product"><code class="docutils literal notranslate"><span class="pre">SymmetryGroup.is_direct_product()</span></code></a></li>
105
- <li class="toctree-l5"><a class="reference internal" href="#snappy.SymmetryGroup.is_full_group"><code class="docutils literal notranslate"><span class="pre">SymmetryGroup.is_full_group()</span></code></a></li>
106
- <li class="toctree-l5"><a class="reference internal" href="#snappy.SymmetryGroup.is_invertible_knot"><code class="docutils literal notranslate"><span class="pre">SymmetryGroup.is_invertible_knot()</span></code></a></li>
107
- <li class="toctree-l5"><a class="reference internal" href="#snappy.SymmetryGroup.is_polyhedral"><code class="docutils literal notranslate"><span class="pre">SymmetryGroup.is_polyhedral()</span></code></a></li>
108
- <li class="toctree-l5"><a class="reference internal" href="#snappy.SymmetryGroup.isometries"><code class="docutils literal notranslate"><span class="pre">SymmetryGroup.isometries()</span></code></a></li>
109
- <li class="toctree-l5"><a class="reference internal" href="#snappy.SymmetryGroup.multiply_elements"><code class="docutils literal notranslate"><span class="pre">SymmetryGroup.multiply_elements()</span></code></a></li>
110
- <li class="toctree-l5"><a class="reference internal" href="#snappy.SymmetryGroup.order"><code class="docutils literal notranslate"><span class="pre">SymmetryGroup.order()</span></code></a></li>
111
- <li class="toctree-l5"><a class="reference internal" href="#snappy.SymmetryGroup.polyhedral_description"><code class="docutils literal notranslate"><span class="pre">SymmetryGroup.polyhedral_description()</span></code></a></li>
112
- </ul>
113
- </li>
114
- </ul>
115
- </li>
116
- <li class="toctree-l3"><a class="reference internal" href="#dirichletdomain">DirichletDomain</a><ul>
117
- <li class="toctree-l4"><a class="reference internal" href="#snappy.DirichletDomain"><code class="docutils literal notranslate"><span class="pre">DirichletDomain</span></code></a><ul>
118
- <li class="toctree-l5"><a class="reference internal" href="#snappy.DirichletDomain.edge_list"><code class="docutils literal notranslate"><span class="pre">DirichletDomain.edge_list()</span></code></a></li>
119
- <li class="toctree-l5"><a class="reference internal" href="#snappy.DirichletDomain.export_stl"><code class="docutils literal notranslate"><span class="pre">DirichletDomain.export_stl()</span></code></a></li>
120
- <li class="toctree-l5"><a class="reference internal" href="#snappy.DirichletDomain.face_list"><code class="docutils literal notranslate"><span class="pre">DirichletDomain.face_list()</span></code></a></li>
121
- <li class="toctree-l5"><a class="reference internal" href="#snappy.DirichletDomain.in_radius"><code class="docutils literal notranslate"><span class="pre">DirichletDomain.in_radius()</span></code></a></li>
122
- <li class="toctree-l5"><a class="reference internal" href="#snappy.DirichletDomain.length_spectrum_dicts"><code class="docutils literal notranslate"><span class="pre">DirichletDomain.length_spectrum_dicts()</span></code></a></li>
123
- <li class="toctree-l5"><a class="reference internal" href="#snappy.DirichletDomain.manifold"><code class="docutils literal notranslate"><span class="pre">DirichletDomain.manifold()</span></code></a></li>
124
- <li class="toctree-l5"><a class="reference internal" href="#snappy.DirichletDomain.num_edges"><code class="docutils literal notranslate"><span class="pre">DirichletDomain.num_edges()</span></code></a></li>
125
- <li class="toctree-l5"><a class="reference internal" href="#snappy.DirichletDomain.num_faces"><code class="docutils literal notranslate"><span class="pre">DirichletDomain.num_faces()</span></code></a></li>
126
- <li class="toctree-l5"><a class="reference internal" href="#snappy.DirichletDomain.num_finite_vertices"><code class="docutils literal notranslate"><span class="pre">DirichletDomain.num_finite_vertices()</span></code></a></li>
127
- <li class="toctree-l5"><a class="reference internal" href="#snappy.DirichletDomain.num_ideal_vertices"><code class="docutils literal notranslate"><span class="pre">DirichletDomain.num_ideal_vertices()</span></code></a></li>
128
- <li class="toctree-l5"><a class="reference internal" href="#snappy.DirichletDomain.num_vertices"><code class="docutils literal notranslate"><span class="pre">DirichletDomain.num_vertices()</span></code></a></li>
129
- <li class="toctree-l5"><a class="reference internal" href="#snappy.DirichletDomain.out_radius"><code class="docutils literal notranslate"><span class="pre">DirichletDomain.out_radius()</span></code></a></li>
130
- <li class="toctree-l5"><a class="reference internal" href="#snappy.DirichletDomain.pairing_matrices"><code class="docutils literal notranslate"><span class="pre">DirichletDomain.pairing_matrices()</span></code></a></li>
131
- <li class="toctree-l5"><a class="reference internal" href="#snappy.DirichletDomain.pairing_words"><code class="docutils literal notranslate"><span class="pre">DirichletDomain.pairing_words()</span></code></a></li>
132
- <li class="toctree-l5"><a class="reference internal" href="#snappy.DirichletDomain.save"><code class="docutils literal notranslate"><span class="pre">DirichletDomain.save()</span></code></a></li>
133
- <li class="toctree-l5"><a class="reference internal" href="#snappy.DirichletDomain.spine_radius"><code class="docutils literal notranslate"><span class="pre">DirichletDomain.spine_radius()</span></code></a></li>
134
- <li class="toctree-l5"><a class="reference internal" href="#snappy.DirichletDomain.triangulation"><code class="docutils literal notranslate"><span class="pre">DirichletDomain.triangulation()</span></code></a></li>
135
- <li class="toctree-l5"><a class="reference internal" href="#snappy.DirichletDomain.vertex_list"><code class="docutils literal notranslate"><span class="pre">DirichletDomain.vertex_list()</span></code></a></li>
136
- <li class="toctree-l5"><a class="reference internal" href="#snappy.DirichletDomain.view"><code class="docutils literal notranslate"><span class="pre">DirichletDomain.view()</span></code></a></li>
137
- <li class="toctree-l5"><a class="reference internal" href="#snappy.DirichletDomain.volume"><code class="docutils literal notranslate"><span class="pre">DirichletDomain.volume()</span></code></a></li>
138
- </ul>
139
- </li>
140
- </ul>
141
- </li>
142
- <li class="toctree-l3"><a class="reference internal" href="#cuspneighborhood">CuspNeighborhood</a><ul>
143
- <li class="toctree-l4"><a class="reference internal" href="#snappy.CuspNeighborhood"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood</span></code></a><ul>
144
- <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.Ford_domain"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.Ford_domain()</span></code></a></li>
145
- <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.all_translations"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.all_translations()</span></code></a></li>
146
- <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.check_index"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.check_index()</span></code></a></li>
147
- <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.get_displacement"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.get_displacement()</span></code></a></li>
148
- <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.get_tie"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.get_tie()</span></code></a></li>
149
- <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.horoballs"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.horoballs()</span></code></a></li>
150
- <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.manifold"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.manifold()</span></code></a></li>
151
- <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.max_reach"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.max_reach()</span></code></a></li>
152
- <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.num_cusps"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.num_cusps()</span></code></a></li>
153
- <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.original_index"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.original_index()</span></code></a></li>
154
- <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.reach"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.reach()</span></code></a></li>
155
- <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.set_displacement"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.set_displacement()</span></code></a></li>
156
- <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.set_tie"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.set_tie()</span></code></a></li>
157
- <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.stopper"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.stopper()</span></code></a></li>
158
- <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.stopping_displacement"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.stopping_displacement()</span></code></a></li>
159
- <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.topology"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.topology()</span></code></a></li>
160
- <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.translations"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.translations()</span></code></a></li>
161
- <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.triangulation"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.triangulation()</span></code></a></li>
162
- <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.view"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.view()</span></code></a></li>
163
- <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.volume"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.volume()</span></code></a></li>
164
- </ul>
165
- </li>
166
- </ul>
167
- </li>
168
- </ul>
169
- </li>
170
- <li class="toctree-l2"><a class="reference internal" href="censuses.html">Census manifolds</a></li>
171
- </ul>
172
- </li>
173
- <li class="toctree-l1"><a class="reference internal" href="plink.html">Using SnapPy’s link editor</a></li>
174
- <li class="toctree-l1"><a class="reference internal" href="spherogram.html">Links: planar diagrams and invariants</a></li>
175
- <li class="toctree-l1"><a class="reference internal" href="snap.html">Number theory of hyperbolic 3-manifolds</a></li>
176
- <li class="toctree-l1"><a class="reference internal" href="verify.html">Verified computations</a></li>
177
- <li class="toctree-l1"><a class="reference internal" href="other.html">Other components</a></li>
178
- <li class="toctree-l1"><a class="reference internal" href="news.html">News</a></li>
179
- <li class="toctree-l1"><a class="reference internal" href="credits.html">Credits</a></li>
180
- <li class="toctree-l1"><a class="reference internal" href="bugs.html">Reporting bugs and other problems</a></li>
181
- <li class="toctree-l1"><a class="reference internal" href="todo.html">To Do List</a></li>
182
- <li class="toctree-l1"><a class="reference internal" href="development.html">Development Basics</a></li>
183
- </ul>
184
-
185
- </div>
186
- </div>
187
- </nav>
188
-
189
- <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
190
- <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
191
- <a href="index.html">SnapPy</a>
192
- </nav>
193
-
194
- <div class="wy-nav-content">
195
- <div class="rst-content">
196
- <div role="navigation" aria-label="Page navigation">
197
- <ul class="wy-breadcrumbs">
198
- <li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
199
- <li class="breadcrumb-item"><a href="snappy.html">The snappy module and its classes</a></li>
200
- <li class="breadcrumb-item active">Additional Classes</li>
201
- <li class="wy-breadcrumbs-aside">
202
- </li>
203
- </ul>
204
- <hr/>
205
- </div>
206
- <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
207
- <div itemprop="articleBody">
208
-
209
- <section id="module-snappy">
210
- <span id="additional-classes"></span><h1>Additional Classes<a class="headerlink" href="#module-snappy" title="Link to this heading"></a></h1>
211
- <p>SnapPy is a Cython wrapping of Jeff Weeks’ SnapPea kernel.</p>
212
- <dl class="simple">
213
- <dt>The module defines the following classes:</dt><dd><p>Triangulation, Manifold, ManifoldHP, AbelianGroup, FundamentalGroup,
214
- HolonomyGroup, HolonomyGroupHP, DirichletDomain, DirichletDomainHP,
215
- CuspNeighborhood, CuspNeighborhoodHP, SymmetryGroup,
216
- AlternatingKnotExteriors, NonalternatingKnotExteriors, SnapPeaFatalError,
217
- InsufficientPrecisionError, pari, twister, OrientableCuspedCensus,
218
- NonorientableCuspedCensus, OrientableClosedCensus,
219
- NonorientableClosedCensus, LinkExteriors, CensusKnots, HTLinkExteriors,
220
- TetrahedralOrientableCuspedCensus, TetrahedralNonorientableCuspedCensus,
221
- OctahedralOrientableCuspedCensus, OctahedralNonorientableCuspedCensus,
222
- CubicalOrientableCuspedCensus, CubicalNonorientableCuspedCensus,
223
- DodecahedralOrientableCuspedCensus, DodecahedralNonorientableCuspedCensus,
224
- IcosahedralNonorientableClosedCensus, IcosahedralOrientableClosedCensus,
225
- CubicalNonorientableClosedCensus, CubicalOrientableClosedCensus,
226
- DodecahedralNonorientableClosedCensus, DodecahedralOrientableClosedCensus,
227
- Crossing, Strand, Link, Tangle, RationalTangle, ZeroTangle,
228
- InfinityTangle, IdentityBraid, random_link, DTcodec.</p>
229
- </dd>
230
- </dl>
231
- <section id="abeliangroup">
232
- <h2>AbelianGroup<a class="headerlink" href="#abeliangroup" title="Link to this heading"></a></h2>
233
- <dl class="py class">
234
- <dt class="sig sig-object py" id="snappy.AbelianGroup">
235
- <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">AbelianGroup</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">presentation</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">elementary_divisors</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.AbelianGroup" title="Link to this definition"></a></dt>
236
- <dd><p>An AbelianGroup object represents a finitely generated abelian group,
237
- usually the first homology group of a snappy Manifold.</p>
238
- <p>Instantiate an abelian group by its elementary divisors:</p>
239
- <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">AbelianGroup</span><span class="p">(</span><span class="n">elementary_divisors</span><span class="o">=</span><span class="p">[</span><span class="mi">5</span><span class="p">,</span><span class="mi">15</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">])</span>
240
- <span class="gp">&gt;&gt;&gt; </span><span class="n">A</span>
241
- <span class="go">Z/5 + Z/15 + Z + Z</span>
242
- <span class="gp">&gt;&gt;&gt; </span><span class="n">A</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
243
- <span class="go">5</span>
244
- </pre></div>
245
- </div>
246
- <p>Alternatively, instantiate an abelian group as AbelianGroup(P) where P is a
247
- presentation matrix given as a list of lists of integers.
248
- Snappy stores an abelian group as a list of elementary divisors:</p>
249
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">B</span> <span class="o">=</span> <span class="n">AbelianGroup</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">2</span><span class="p">],[</span><span class="mi">2</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">6</span><span class="p">]])</span>
250
- <span class="gp">&gt;&gt;&gt; </span><span class="n">B</span>
251
- <span class="go">Z/2 + Z</span>
252
- <span class="gp">&gt;&gt;&gt; </span><span class="n">B</span><span class="o">.</span><span class="n">elementary_divisors</span><span class="p">()</span>
253
- <span class="go">[2, 0]</span>
254
- <span class="gp">&gt;&gt;&gt; </span><span class="n">B</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
255
- <span class="go">0</span>
256
- <span class="gp">&gt;&gt;&gt; </span><span class="nb">len</span><span class="p">(</span><span class="n">B</span><span class="p">)</span>
257
- <span class="go">2</span>
258
- <span class="gp">&gt;&gt;&gt; </span><span class="n">B</span><span class="o">.</span><span class="n">rank</span><span class="p">()</span>
259
- <span class="go">2</span>
260
- <span class="gp">&gt;&gt;&gt; </span><span class="n">B</span><span class="o">.</span><span class="n">betti_number</span><span class="p">()</span>
261
- <span class="go">1</span>
262
- <span class="gp">&gt;&gt;&gt; </span><span class="n">B</span><span class="o">.</span><span class="n">order</span><span class="p">()</span>
263
- <span class="go">&#39;infinite&#39;</span>
264
- </pre></div>
265
- </div>
266
- <dl class="py method">
267
- <dt class="sig sig-object py" id="snappy.AbelianGroup.betti_number">
268
- <span class="sig-name descname"><span class="pre">betti_number</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.AbelianGroup.betti_number" title="Link to this definition"></a></dt>
269
- <dd><p>The rank of the maximal free abelian subgroup.</p>
270
- </dd></dl>
271
-
272
- <dl class="py method">
273
- <dt class="sig sig-object py" id="snappy.AbelianGroup.elementary_divisors">
274
- <span class="sig-name descname"><span class="pre">elementary_divisors</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.AbelianGroup.elementary_divisors" title="Link to this definition"></a></dt>
275
- <dd><p>The elementary divisors of this finitely generated abelian group.</p>
276
- </dd></dl>
277
-
278
- <dl class="py method">
279
- <dt class="sig sig-object py" id="snappy.AbelianGroup.order">
280
- <span class="sig-name descname"><span class="pre">order</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.AbelianGroup.order" title="Link to this definition"></a></dt>
281
- <dd><p>The order of the group. Returns the string ‘infinite’ if the
282
- group is infinite.</p>
283
- </dd></dl>
284
-
285
- <dl class="py method">
286
- <dt class="sig sig-object py" id="snappy.AbelianGroup.rank">
287
- <span class="sig-name descname"><span class="pre">rank</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.AbelianGroup.rank" title="Link to this definition"></a></dt>
288
- <dd><p>The rank of the group.</p>
289
- </dd></dl>
290
-
291
- </dd></dl>
292
-
293
- </section>
294
- <section id="fundamentalgroup">
295
- <h2>FundamentalGroup<a class="headerlink" href="#fundamentalgroup" title="Link to this heading"></a></h2>
296
- <dl class="py class">
297
- <dt class="sig sig-object py" id="snappy.HolonomyGroup">
298
- <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">HolonomyGroup</span></span><a class="headerlink" href="#snappy.HolonomyGroup" title="Link to this definition"></a></dt>
299
- <dd><p>A FundamentalGroup represents a presentation of the fundamental
300
- group of a SnapPea Triangulation. Group elements are described as
301
- words in the generators a,b,…, where the inverse of a is denoted
302
- A. Words are represented by python strings (and the concatenation
303
- operator is named ‘+’, according to Python conventions).</p>
304
- <p>Instantiate via <code class="docutils literal notranslate"><span class="pre">T.fundamental_group()</span></code>, where T is a triangulation:</p>
305
- <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;m125&#39;</span><span class="p">)</span>
306
- <span class="gp">&gt;&gt;&gt; </span><span class="n">T</span><span class="o">.</span><span class="n">fundamental_group</span><span class="p">()</span>
307
- <span class="go">Generators:</span>
308
- <span class="go"> a,b</span>
309
- <span class="go">Relators:</span>
310
- <span class="go"> aabaBBAABAbb</span>
311
- <span class="gp">&gt;&gt;&gt; </span><span class="nb">type</span><span class="p">(</span><span class="n">T</span><span class="o">.</span><span class="n">fundamental_group</span><span class="p">())</span>
312
- <span class="go">&lt;class &#39;SnapPy.FundamentalGroup&#39;&gt;</span>
313
- </pre></div>
314
- </div>
315
- <p>A HolonomyGroup is a FundamentalGroup with added structure
316
- consisting of a holonomy representation into O(3,1), and an
317
- arbitrarily chosen lift of the holonomy representation to SL(2,C).
318
- The holonomy is determined by the shapes of the tetrahedra, so a
319
- HolonomyGroup is associated to a Manifold, while a Triangulation
320
- only has a FundamentalGroup:</p>
321
- <p>Instantiate via <code class="docutils literal notranslate"><span class="pre">M.fundamental_group()</span></code>, where M is a Manifold:</p>
322
- <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>
323
- <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>
324
- <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span>
325
- <span class="go">Generators:</span>
326
- <span class="go"> a,b</span>
327
- <span class="go">Relators:</span>
328
- <span class="go"> aabaBBAABAbb</span>
329
- <span class="gp">&gt;&gt;&gt; </span><span class="nb">type</span><span class="p">(</span><span class="n">G</span><span class="p">)</span>
330
- <span class="go">&lt;class &#39;SnapPy.HolonomyGroup&#39;&gt;</span>
331
- </pre></div>
332
- </div>
333
- <p>In the class HolonomyGroup, methods are provided to evaluate the
334
- representations on a group element. Other methods are shared
335
- with the FundamentalGroup class.</p>
336
- <div class="doctest 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">O31</span><span class="p">(</span><span class="s1">&#39;a&#39;</span><span class="p">)</span>
337
- <span class="go">[ 2.50000000000000 -0.500000000000000 -2.12132034355964 -0.707106781186547]</span>
338
- <span class="go">[ 0.500000000000002 -0.500000000000001 -0.707106781186549 0.707106781186547]</span>
339
- <span class="go">[ -0.707106781186548 -0.707106781186547 1.00000000000000 0]</span>
340
- <span class="go">[ 2.12132034355964 -0.707106781186548 -2.00000000000000 -1.00000000000000]</span>
341
- <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;aaB&#39;</span><span class="p">)</span>
342
- <span class="go">[-1.00000000000000 + 4.00000000000000*I 2.12132034355964 - 0.707106781186545*I]</span>
343
- <span class="go">[2.12132034355964 - 0.707106781186549*I -1.00000000000000 - 1.00000000000000*I]</span>
344
- <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;ab&#39;</span><span class="p">)</span>
345
- <span class="go">1.06127506190504 - 2.23703575928741*I</span>
346
- </pre></div>
347
- </div>
348
- <dl class="py method">
349
- <dt class="sig sig-object py" id="snappy.HolonomyGroup.O31">
350
- <span class="sig-name descname"><span class="pre">O31</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">word</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.HolonomyGroup.O31" title="Link to this definition"></a></dt>
351
- <dd><p>Return the image of the element represented by the input word
352
- under the holonomy representation, where Isom(H^3) is
353
- identified with SO(3,1).</p>
354
- </dd></dl>
355
-
356
- <dl class="py method">
357
- <dt class="sig sig-object py" id="snappy.HolonomyGroup.SL2C">
358
- <span class="sig-name descname"><span class="pre">SL2C</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">word</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.HolonomyGroup.SL2C" title="Link to this definition"></a></dt>
359
- <dd><p>Return the image of the element represented by the input word
360
- under some SL(2,C) representation that lifts the holonomy
361
- representation. Note: the choice of lift is not guaranteed to
362
- vary continuously when filling coefficients are changed.</p>
363
- </dd></dl>
364
-
365
- <dl class="py method">
366
- <dt class="sig sig-object py" id="snappy.HolonomyGroup.character_variety_vars_and_polys">
367
- <span class="sig-name descname"><span class="pre">character_variety_vars_and_polys</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">as_ideal</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.HolonomyGroup.character_variety_vars_and_polys" title="Link to this definition"></a></dt>
368
- <dd><p>Returns a list of variables and a list polynomials where the
369
- polynomials generate the ideal defining the SL(2, C) character
370
- variety of this group. Each variable is of the form “Tw” where
371
- “w” is a word in the generators and “Tw” represents the trace
372
- function of that word.</p>
373
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">H</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;dLQacccbjkg&#39;</span><span class="p">)</span> <span class="c1"># Hopf link exterior.</span>
374
- <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span> <span class="o">=</span> <span class="n">H</span><span class="o">.</span><span class="n">fundamental_group</span><span class="p">()</span>
375
- <span class="gp">&gt;&gt;&gt; </span><span class="nb">vars</span><span class="p">,</span> <span class="n">polys</span> <span class="o">=</span> <span class="n">G</span><span class="o">.</span><span class="n">character_variety_vars_and_polys</span><span class="p">()</span>
376
- <span class="gp">&gt;&gt;&gt; </span><span class="nb">vars</span>
377
- <span class="go">[Ta, Tb, Tab]</span>
378
- <span class="gp">&gt;&gt;&gt; </span><span class="n">polys</span>
379
- <span class="go">[Ta^3 - Tab*Tb*Ta^2 + (Tb^2 + (Tab^2 - 4))*Ta,</span>
380
- <span class="go"> Ta^2 - Tab*Tb*Ta + (Tb^2 + (Tab^2 - 4))]</span>
381
- </pre></div>
382
- </div>
383
- <p>When used inside Sage, you can ask for the answer as a proper
384
- ideal:</p>
385
- <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;m000&#39;</span><span class="p">)</span> <span class="c1"># Gieseking manifold</span>
386
- <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">fundamental_group</span><span class="p">()</span>
387
- <span class="n">sage</span><span class="p">:</span> <span class="n">I</span> <span class="o">=</span> <span class="n">G</span><span class="o">.</span><span class="n">character_variety_vars_and_polys</span><span class="p">(</span><span class="n">as_ideal</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
388
- <span class="n">sage</span><span class="p">:</span> <span class="n">I</span>
389
- <span class="n">Ideal</span> <span class="p">(</span><span class="o">-</span><span class="n">Ta</span><span class="o">^</span><span class="mi">3</span><span class="o">*</span><span class="n">Tb</span><span class="o">^</span><span class="mi">2</span><span class="o">*</span><span class="n">Tab</span> <span class="o">+</span> <span class="n">Ta</span><span class="o">^</span><span class="mi">4</span><span class="o">*</span><span class="n">Tb</span> <span class="o">+</span> <span class="n">Ta</span><span class="o">^</span><span class="mi">2</span><span class="o">*</span><span class="n">Tb</span><span class="o">^</span><span class="mi">3</span> <span class="o">+</span> <span class="n">Ta</span><span class="o">^</span><span class="mi">2</span><span class="o">*</span><span class="n">Tb</span><span class="o">*</span><span class="n">Tab</span><span class="o">^</span><span class="mi">2</span> <span class="o">+</span> <span class="n">Ta</span><span class="o">*</span><span class="n">Tb</span><span class="o">^</span><span class="mi">2</span><span class="o">*</span><span class="n">Tab</span> <span class="o">-</span> <span class="mi">5</span><span class="o">*</span><span class="n">Ta</span><span class="o">^</span><span class="mi">2</span><span class="o">*</span><span class="n">Tb</span> <span class="o">-</span> <span class="n">Tb</span><span class="o">^</span><span class="mi">3</span> <span class="o">-</span> <span class="n">Tb</span><span class="o">*</span><span class="n">Tab</span><span class="o">^</span><span class="mi">2</span> <span class="o">+</span> <span class="n">Ta</span><span class="o">*</span><span class="n">Tab</span> <span class="o">-</span> <span class="n">Ta</span> <span class="o">+</span> <span class="mi">3</span><span class="o">*</span><span class="n">Tb</span><span class="p">,</span> <span class="n">Tb</span><span class="o">*</span><span class="n">Tab</span> <span class="o">-</span> <span class="n">Ta</span> <span class="o">-</span> <span class="n">Tb</span><span class="p">,</span> <span class="o">-</span><span class="n">Ta</span><span class="o">^</span><span class="mi">2</span><span class="o">*</span><span class="n">Tb</span><span class="o">^</span><span class="mi">2</span><span class="o">*</span><span class="n">Tab</span> <span class="o">+</span> <span class="n">Ta</span><span class="o">^</span><span class="mi">3</span><span class="o">*</span><span class="n">Tb</span> <span class="o">+</span> <span class="n">Ta</span><span class="o">*</span><span class="n">Tb</span><span class="o">^</span><span class="mi">3</span> <span class="o">+</span> <span class="n">Ta</span><span class="o">*</span><span class="n">Tb</span><span class="o">*</span><span class="n">Tab</span><span class="o">^</span><span class="mi">2</span> <span class="o">-</span> <span class="mi">4</span><span class="o">*</span><span class="n">Ta</span><span class="o">*</span><span class="n">Tb</span> <span class="o">+</span> <span class="n">Tab</span> <span class="o">-</span> <span class="mi">2</span><span class="p">)</span> <span class="n">of</span> <span class="n">Multivariate</span> <span class="n">Polynomial</span> <span class="n">Ring</span> <span class="ow">in</span> <span class="n">Ta</span><span class="p">,</span> <span class="n">Tb</span><span class="p">,</span> <span class="n">Tab</span> <span class="n">over</span> <span class="n">Rational</span> <span class="n">Field</span>
390
- <span class="n">sage</span><span class="p">:</span> <span class="n">I</span><span class="o">.</span><span class="n">dimension</span><span class="p">()</span>
391
- <span class="mi">1</span>
392
- </pre></div>
393
- </div>
394
- </dd></dl>
395
-
396
- <dl class="py method">
397
- <dt class="sig sig-object py" id="snappy.HolonomyGroup.complex_length">
398
- <span class="sig-name descname"><span class="pre">complex_length</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">word</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.HolonomyGroup.complex_length" title="Link to this definition"></a></dt>
399
- <dd><p>Return the complex length of the isometry represented by the
400
- input word.</p>
401
- </dd></dl>
402
-
403
- <dl class="py method">
404
- <dt class="sig sig-object py" id="snappy.HolonomyGroup.gap_string">
405
- <span class="sig-name descname"><span class="pre">gap_string</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.HolonomyGroup.gap_string" title="Link to this definition"></a></dt>
406
- <dd><p>Returns a string which will define this group within GAP:</p>
407
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;b++LLR&#39;</span><span class="p">)</span>
408
- <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>
409
- <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span>
410
- <span class="go">Generators:</span>
411
- <span class="go"> a,b</span>
412
- <span class="go">Relators:</span>
413
- <span class="go"> aaaaBAbbAB</span>
414
- <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span><span class="o">.</span><span class="n">gap_string</span><span class="p">()</span>
415
- <span class="go">&#39;CallFuncList(function() local F, a, b; F := FreeGroup(&quot;a&quot;, &quot;b&quot;); a := F.1; b := F.2; return F/[a*a*a*a*b^-1*a^-1*b*b*a^-1*b^-1]; end,[])&#39;</span>
416
- <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span><span class="o">.</span><span class="n">magma_string</span><span class="p">()</span>
417
- <span class="go">&#39;Group&lt;a,b|a*a*a*a*b^-1*a^-1*b*b*a^-1*b^-1&gt;&#39;</span>
418
- </pre></div>
419
- </div>
420
- </dd></dl>
421
-
422
- <dl class="py method">
423
- <dt class="sig sig-object py" id="snappy.HolonomyGroup.generators">
424
- <span class="sig-name descname"><span class="pre">generators</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.HolonomyGroup.generators" title="Link to this definition"></a></dt>
425
- <dd><p>Return the letters representing the generators in the presentation.</p>
426
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;9_42&#39;</span><span class="p">)</span>
427
- <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="c1">#Presentation simplified by default</span>
428
- <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span>
429
- <span class="go">Generators:</span>
430
- <span class="go"> a,b</span>
431
- <span class="go">Relators:</span>
432
- <span class="go"> aaaabbABBBAbb</span>
433
- <span class="gp">&gt;&gt;&gt; </span><span class="n">H</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="kc">False</span><span class="p">)</span> <span class="c1">#Unsimplified presentation</span>
434
- <span class="gp">&gt;&gt;&gt; </span><span class="n">H</span>
435
- <span class="go">Generators:</span>
436
- <span class="go"> a,b,c,d,e</span>
437
- <span class="go">Relators:</span>
438
- <span class="go"> ECbC</span>
439
- <span class="go"> dEb</span>
440
- <span class="go"> dAcaB</span>
441
- <span class="go"> dbaE</span>
442
- </pre></div>
443
- </div>
444
- <p>SnapPy stores a FundamentalGroup as a presentation of the group.
445
- The following commands demonstrate how generators in the unsimplified
446
- and simplified presentations above correspond:</p>
447
- <div class="doctest 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">generators</span><span class="p">()</span>
448
- <span class="go">[&#39;a&#39;, &#39;b&#39;]</span>
449
- <span class="gp">&gt;&gt;&gt; </span><span class="n">H</span><span class="o">.</span><span class="n">generators</span><span class="p">()</span>
450
- <span class="go">[&#39;a&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;]</span>
451
- <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span><span class="o">.</span><span class="n">generators_in_originals</span><span class="p">()</span>
452
- <span class="go">[&#39;BABcBcbCABcBcbCCbCba&#39;, &#39;BcBCbCbab&#39;]</span>
453
- <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span><span class="o">.</span><span class="n">original_generators</span><span class="p">()</span>
454
- <span class="go">[&#39;BBAbba&#39;, &#39;A&#39;, &#39;AB&#39;, &#39;abba&#39;, &#39;bba&#39;]</span>
455
- <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span><span class="o">.</span><span class="n">num_generators</span><span class="p">()</span>
456
- <span class="go">2</span>
457
- <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span><span class="o">.</span><span class="n">num_original_generators</span><span class="p">()</span>
458
- <span class="go">5</span>
459
- <span class="gp">&gt;&gt;&gt; </span><span class="n">H</span><span class="o">.</span><span class="n">num_generators</span><span class="p">()</span>
460
- <span class="go">5</span>
461
- </pre></div>
462
- </div>
463
- </dd></dl>
464
-
465
- <dl class="py method">
466
- <dt class="sig sig-object py" id="snappy.HolonomyGroup.generators_in_originals">
467
- <span class="sig-name descname"><span class="pre">generators_in_originals</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">verbose_form</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">raw_form</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">as_int_list</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.HolonomyGroup.generators_in_originals" title="Link to this definition"></a></dt>
468
- <dd><p>Return the current generators in terms of the original
469
- geometric generators. Note that by default fundamental_group()
470
- returns a simplified presentation of the group.</p>
471
- <p>If the flag “raw_form” is set to True, it returns a sequence of
472
- instructions for expressing the current generators in terms of
473
- the original ones. This is sometimes much more concise, though
474
- the format is somewhat obscure. See the source code of this
475
- function in fundamental_group.pyx for details.</p>
476
- <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;K7_1&#39;</span><span class="p">)</span>
477
- <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>
478
- <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span><span class="o">.</span><span class="n">generators_in_originals</span><span class="p">()</span>
479
- <span class="go">[&#39;DBcACbABcaCbDBcACbABcaCbACbaBcaCbd&#39;,</span>
480
- <span class="go"> &#39;DBcACbABcaCbDBcACbABcaCbCbDBcACbABcaBcACbaBcaCbdACbaBcaCbdBcBcACbaBcaCbd&#39;]</span>
481
- </pre></div>
482
- </div>
483
- </dd></dl>
484
-
485
- <dl class="py method">
486
- <dt class="sig sig-object py" id="snappy.HolonomyGroup.longitude">
487
- <span class="sig-name descname"><span class="pre">longitude</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">int</span> <span class="pre">which_cusp=0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">as_int_list=False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.HolonomyGroup.longitude" title="Link to this definition"></a></dt>
488
- <dd><p>Returns a word representing a conjugate of the current
489
- longitude for the given cusp. Guaranteed to commute with the
490
- meridian for the same cusp. Note: for Klein bottle cusps,
491
- the longitude must be defined carefully.</p>
492
- <div class="doctest 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">Manifold</span><span class="p">(</span><span class="s1">&#39;m004&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">fundamental_group</span><span class="p">()</span>
493
- <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span><span class="o">.</span><span class="n">longitude</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
494
- <span class="go">&#39;aBAbABab&#39;</span>
495
- <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span><span class="o">.</span><span class="n">longitude</span><span class="p">()</span> <span class="c1"># shortcut for the above.</span>
496
- <span class="go">&#39;aBAbABab&#39;</span>
497
- </pre></div>
498
- </div>
499
- </dd></dl>
500
-
501
- <dl class="py method">
502
- <dt class="sig sig-object py" id="snappy.HolonomyGroup.magma_string">
503
- <span class="sig-name descname"><span class="pre">magma_string</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.HolonomyGroup.magma_string" title="Link to this definition"></a></dt>
504
- <dd><p>Returns a string which will define this group within MAGMA.</p>
505
- </dd></dl>
506
-
507
- <dl class="py method">
508
- <dt class="sig sig-object py" id="snappy.HolonomyGroup.meridian">
509
- <span class="sig-name descname"><span class="pre">meridian</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">int</span> <span class="pre">which_cusp=0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">as_int_list=False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.HolonomyGroup.meridian" title="Link to this definition"></a></dt>
510
- <dd><p>Returns a word representing a conjugate of the current
511
- meridian for the given cusp. Guaranteed to commute with the
512
- longitude for the same cusp.</p>
513
- <div class="doctest 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">Manifold</span><span class="p">(</span><span class="s1">&#39;m125&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">fundamental_group</span><span class="p">()</span>
514
- <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span><span class="o">.</span><span class="n">meridian</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
515
- <span class="go">&#39;aaba&#39;</span>
516
- <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span><span class="o">.</span><span class="n">meridian</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="c1"># The last cusp</span>
517
- <span class="go">&#39;baaba&#39;</span>
518
- </pre></div>
519
- </div>
520
- </dd></dl>
521
-
522
- <dl class="py method">
523
- <dt class="sig sig-object py" id="snappy.HolonomyGroup.num_generators">
524
- <span class="sig-name descname"><span class="pre">num_generators</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.HolonomyGroup.num_generators" title="Link to this definition"></a></dt>
525
- <dd><p>Return the number of generators for the presentation.</p>
526
- </dd></dl>
527
-
528
- <dl class="py method">
529
- <dt class="sig sig-object py" id="snappy.HolonomyGroup.num_original_generators">
530
- <span class="sig-name descname"><span class="pre">num_original_generators</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.HolonomyGroup.num_original_generators" title="Link to this definition"></a></dt>
531
- <dd><p>Return the number of geometric generators (before simplification).</p>
532
- </dd></dl>
533
-
534
- <dl class="py method">
535
- <dt class="sig sig-object py" id="snappy.HolonomyGroup.num_relators">
536
- <span class="sig-name descname"><span class="pre">num_relators</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.HolonomyGroup.num_relators" title="Link to this definition"></a></dt>
537
- <dd><p>Return the number of generators for the presentation.</p>
538
- </dd></dl>
539
-
540
- <dl class="py method">
541
- <dt class="sig sig-object py" id="snappy.HolonomyGroup.original_generators">
542
- <span class="sig-name descname"><span class="pre">original_generators</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">verbose_form</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">as_int_list</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.HolonomyGroup.original_generators" title="Link to this definition"></a></dt>
543
- <dd><p>Return the original geometric generators (before
544
- simplification) in terms of the current generators.</p>
545
- <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;v0000&#39;</span><span class="p">)</span>
546
- <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>
547
- <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span><span class="o">.</span><span class="n">original_generators</span><span class="p">(</span><span class="n">as_int_list</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
548
- <span class="go">[[1], [-1, -2, 1, 2], [-1, 2], [-2, -1, 2], [2]]</span>
549
- </pre></div>
550
- </div>
551
- </dd></dl>
552
-
553
- <dl class="py method">
554
- <dt class="sig sig-object py" id="snappy.HolonomyGroup.peripheral_curves">
555
- <span class="sig-name descname"><span class="pre">peripheral_curves</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">as_int_list</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.HolonomyGroup.peripheral_curves" title="Link to this definition"></a></dt>
556
- <dd><p>Returns a list of meridian-longitude pairs for all cusps.</p>
557
- <div class="doctest 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">Manifold</span><span class="p">(</span><span class="s1">&#39;m125&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">fundamental_group</span><span class="p">()</span>
558
- <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>
559
- <span class="go">[(&#39;aaba&#39;, &#39;abb&#39;), (&#39;baaba&#39;, &#39;Ba&#39;)]</span>
560
- </pre></div>
561
- </div>
562
- </dd></dl>
563
-
564
- <dl class="py method">
565
- <dt class="sig sig-object py" id="snappy.HolonomyGroup.relators">
566
- <span class="sig-name descname"><span class="pre">relators</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">verbose_form</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">as_int_list</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.HolonomyGroup.relators" title="Link to this definition"></a></dt>
567
- <dd><p>Return a list of words representing the relators in the presentation.</p>
568
- <p>If the optional argument verbose_form is True, then the
569
- relator is returned in the form “a*b*a^-1*b^-1” instead of “abAB”.</p>
570
- </dd></dl>
571
-
572
- <dl class="py method">
573
- <dt class="sig sig-object py" id="snappy.HolonomyGroup.sage">
574
- <span class="sig-name descname"><span class="pre">sage</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.HolonomyGroup.sage" title="Link to this definition"></a></dt>
575
- <dd><p>Returns the corresponding Sage FinitelyPresentedGroup</p>
576
- </dd></dl>
577
-
578
- </dd></dl>
579
-
580
- </section>
581
- <section id="symmetrygroup">
582
- <h2>SymmetryGroup<a class="headerlink" href="#symmetrygroup" title="Link to this heading"></a></h2>
583
- <dl class="py class">
584
- <dt class="sig sig-object py" id="snappy.SymmetryGroup">
585
- <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">SymmetryGroup</span></span><a class="headerlink" href="#snappy.SymmetryGroup" title="Link to this definition"></a></dt>
586
- <dd><p>A SymmetryGroup is a group of self-isometries of hyperbolic
587
- 3-manifold. Instantiate as follows:</p>
588
- <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>
589
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">symmetry_group</span><span class="p">()</span>
590
- <span class="go">D4</span>
591
- </pre></div>
592
- </div>
593
- <dl class="py method">
594
- <dt class="sig sig-object py" id="snappy.SymmetryGroup.abelian_description">
595
- <span class="sig-name descname"><span class="pre">abelian_description</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.SymmetryGroup.abelian_description" title="Link to this definition"></a></dt>
596
- <dd><p>If the symmetry group is abelian, return it as an AbelianGroup</p>
597
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">S</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;v3379&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">symmetry_group</span><span class="p">()</span>
598
- <span class="gp">&gt;&gt;&gt; </span><span class="n">S</span><span class="o">.</span><span class="n">abelian_description</span><span class="p">()</span>
599
- <span class="go">Z/2 + Z/2 + Z/2</span>
600
- </pre></div>
601
- </div>
602
- </dd></dl>
603
-
604
- <dl class="py method">
605
- <dt class="sig sig-object py" id="snappy.SymmetryGroup.abelianization">
606
- <span class="sig-name descname"><span class="pre">abelianization</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.SymmetryGroup.abelianization" title="Link to this definition"></a></dt>
607
- <dd><p>Return the abelianization of the symmetry group</p>
608
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">S</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="o">.</span><span class="n">symmetry_group</span><span class="p">()</span>
609
- <span class="gp">&gt;&gt;&gt; </span><span class="n">S</span><span class="o">.</span><span class="n">abelianization</span><span class="p">()</span>
610
- <span class="go">Z/2 + Z/2</span>
611
- </pre></div>
612
- </div>
613
- </dd></dl>
614
-
615
- <dl class="py method">
616
- <dt class="sig sig-object py" id="snappy.SymmetryGroup.center">
617
- <span class="sig-name descname"><span class="pre">center</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.SymmetryGroup.center" title="Link to this definition"></a></dt>
618
- <dd><p>Return the center of the symmetry group</p>
619
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">S</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="o">.</span><span class="n">symmetry_group</span><span class="p">()</span>
620
- <span class="gp">&gt;&gt;&gt; </span><span class="n">S</span><span class="o">.</span><span class="n">center</span><span class="p">()</span>
621
- <span class="go">Z/2</span>
622
- </pre></div>
623
- </div>
624
- </dd></dl>
625
-
626
- <dl class="py method">
627
- <dt class="sig sig-object py" id="snappy.SymmetryGroup.commutator_subgroup">
628
- <span class="sig-name descname"><span class="pre">commutator_subgroup</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.SymmetryGroup.commutator_subgroup" title="Link to this definition"></a></dt>
629
- <dd><p>Return the commutator subgroup of the SymmetryGroup</p>
630
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">S</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="o">.</span><span class="n">symmetry_group</span><span class="p">()</span>
631
- <span class="gp">&gt;&gt;&gt; </span><span class="n">S</span>
632
- <span class="go">D4</span>
633
- <span class="gp">&gt;&gt;&gt; </span><span class="n">S</span><span class="o">.</span><span class="n">commutator_subgroup</span><span class="p">()</span>
634
- <span class="go">Z/2</span>
635
- </pre></div>
636
- </div>
637
- </dd></dl>
638
-
639
- <dl class="py method">
640
- <dt class="sig sig-object py" id="snappy.SymmetryGroup.direct_product_description">
641
- <span class="sig-name descname"><span class="pre">direct_product_description</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.SymmetryGroup.direct_product_description" title="Link to this definition"></a></dt>
642
- <dd><p>If the SymmetryGroup is a nontrivial direct product with at
643
- least one nonabelian factor, return a pair of SymmetryGroups
644
- consisting of the (two) factors.</p>
645
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">S</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;s960&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">symmetry_group</span><span class="p">()</span>
646
- <span class="gp">&gt;&gt;&gt; </span><span class="n">S</span><span class="o">.</span><span class="n">direct_product_description</span><span class="p">()</span>
647
- <span class="go">(Z/4, D3)</span>
648
- </pre></div>
649
- </div>
650
- </dd></dl>
651
-
652
- <dl class="py method">
653
- <dt class="sig sig-object py" id="snappy.SymmetryGroup.is_S5">
654
- <span class="sig-name descname"><span class="pre">is_S5</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.SymmetryGroup.is_S5" title="Link to this definition"></a></dt>
655
- <dd><p>Returns whether the group is the symmetric group on five things.</p>
656
- </dd></dl>
657
-
658
- <dl class="py method">
659
- <dt class="sig sig-object py" id="snappy.SymmetryGroup.is_abelian">
660
- <span class="sig-name descname"><span class="pre">is_abelian</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.SymmetryGroup.is_abelian" title="Link to this definition"></a></dt>
661
- <dd><p>Return whether the symmetry group is abelian.</p>
662
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">S</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="o">.</span><span class="n">symmetry_group</span><span class="p">()</span>
663
- <span class="gp">&gt;&gt;&gt; </span><span class="n">S</span><span class="o">.</span><span class="n">is_abelian</span><span class="p">()</span>
664
- <span class="go">False</span>
665
- </pre></div>
666
- </div>
667
- </dd></dl>
668
-
669
- <dl class="py method">
670
- <dt class="sig sig-object py" id="snappy.SymmetryGroup.is_amphicheiral">
671
- <span class="sig-name descname"><span class="pre">is_amphicheiral</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.SymmetryGroup.is_amphicheiral" title="Link to this definition"></a></dt>
672
- <dd><p>Return whether the manifold has an orientation reversing symmetry.</p>
673
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">S</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="o">.</span><span class="n">symmetry_group</span><span class="p">()</span>
674
- <span class="gp">&gt;&gt;&gt; </span><span class="n">S</span><span class="o">.</span><span class="n">is_amphicheiral</span><span class="p">()</span>
675
- <span class="go">True</span>
676
- </pre></div>
677
- </div>
678
- </dd></dl>
679
-
680
- <dl class="py method">
681
- <dt class="sig sig-object py" id="snappy.SymmetryGroup.is_dihedral">
682
- <span class="sig-name descname"><span class="pre">is_dihedral</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.SymmetryGroup.is_dihedral" title="Link to this definition"></a></dt>
683
- <dd><p>Return whether the symmetry group is dihedral.</p>
684
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">S</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="o">.</span><span class="n">symmetry_group</span><span class="p">()</span>
685
- <span class="gp">&gt;&gt;&gt; </span><span class="n">S</span><span class="o">.</span><span class="n">is_dihedral</span><span class="p">()</span>
686
- <span class="go">True</span>
687
- </pre></div>
688
- </div>
689
- </dd></dl>
690
-
691
- <dl class="py method">
692
- <dt class="sig sig-object py" id="snappy.SymmetryGroup.is_direct_product">
693
- <span class="sig-name descname"><span class="pre">is_direct_product</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.SymmetryGroup.is_direct_product" title="Link to this definition"></a></dt>
694
- <dd><p>Return whether the SymmetryGroup is a nontrivial direct
695
- product with at least one nonabelian factor.</p>
696
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">S</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;s960&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">symmetry_group</span><span class="p">()</span>
697
- <span class="gp">&gt;&gt;&gt; </span><span class="n">S</span><span class="o">.</span><span class="n">is_direct_product</span><span class="p">()</span>
698
- <span class="go">True</span>
699
- <span class="gp">&gt;&gt;&gt; </span><span class="n">S</span>
700
- <span class="go">Z/4 x D3</span>
701
- </pre></div>
702
- </div>
703
- </dd></dl>
704
-
705
- <dl class="py method">
706
- <dt class="sig sig-object py" id="snappy.SymmetryGroup.is_full_group">
707
- <span class="sig-name descname"><span class="pre">is_full_group</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.SymmetryGroup.is_full_group" title="Link to this definition"></a></dt>
708
- <dd><p>Return whether the full symmetry group has been found.</p>
709
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">S</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="o">.</span><span class="n">symmetry_group</span><span class="p">()</span>
710
- <span class="gp">&gt;&gt;&gt; </span><span class="n">S</span><span class="o">.</span><span class="n">is_full_group</span><span class="p">()</span>
711
- <span class="go">True</span>
712
- </pre></div>
713
- </div>
714
- </dd></dl>
715
-
716
- <dl class="py method">
717
- <dt class="sig sig-object py" id="snappy.SymmetryGroup.is_invertible_knot">
718
- <span class="sig-name descname"><span class="pre">is_invertible_knot</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.SymmetryGroup.is_invertible_knot" title="Link to this definition"></a></dt>
719
- <dd><p>Return whether a one-cusped has a symmetry that acts on the
720
- cusp via the matrix -I.</p>
721
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">S</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><span class="o">.</span><span class="n">symmetry_group</span><span class="p">()</span>
722
- <span class="gp">&gt;&gt;&gt; </span><span class="n">S</span><span class="o">.</span><span class="n">is_invertible_knot</span><span class="p">()</span>
723
- <span class="go">True</span>
724
- </pre></div>
725
- </div>
726
- </dd></dl>
727
-
728
- <dl class="py method">
729
- <dt class="sig sig-object py" id="snappy.SymmetryGroup.is_polyhedral">
730
- <span class="sig-name descname"><span class="pre">is_polyhedral</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.SymmetryGroup.is_polyhedral" title="Link to this definition"></a></dt>
731
- <dd><p>Returns whether the symmetry group is a (possibly binary)
732
- polyhedral group.</p>
733
- </dd></dl>
734
-
735
- <dl class="py method">
736
- <dt class="sig sig-object py" id="snappy.SymmetryGroup.isometries">
737
- <span class="sig-name descname"><span class="pre">isometries</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.SymmetryGroup.isometries" title="Link to this definition"></a></dt>
738
- <dd><p>Return a detailed list of all the isometries in the symmetry group.</p>
739
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">S</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;s959&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">symmetry_group</span><span class="p">()</span>
740
- <span class="gp">&gt;&gt;&gt; </span><span class="n">isoms</span> <span class="o">=</span> <span class="n">S</span><span class="o">.</span><span class="n">isometries</span><span class="p">()</span>
741
- <span class="gp">&gt;&gt;&gt; </span><span class="n">isoms</span><span class="p">[</span><span class="mi">8</span><span class="p">]</span>
742
- <span class="go">0 -&gt; 1 1 -&gt; 0</span>
743
- <span class="go">[-1 -1] [ 0 1]</span>
744
- <span class="go">[ 1 0] [-1 -1]</span>
745
- <span class="go">Does not extend to link</span>
746
- </pre></div>
747
- </div>
748
- </dd></dl>
749
-
750
- <dl class="py method">
751
- <dt class="sig sig-object py" id="snappy.SymmetryGroup.multiply_elements">
752
- <span class="sig-name descname"><span class="pre">multiply_elements</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">i</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">j</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.SymmetryGroup.multiply_elements" title="Link to this definition"></a></dt>
753
- <dd><p>Returns the product of group elements i and j. The convention
754
- is that products of symmetries read right to left. That is,
755
- the composition (symmetry[i] o symmetry[j]) acts by first
756
- doing symmetry[j], then symmetry[i].</p>
757
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">S</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="o">.</span><span class="n">symmetry_group</span><span class="p">()</span>
758
- <span class="gp">&gt;&gt;&gt; </span><span class="n">S</span><span class="o">.</span><span class="n">multiply_elements</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
759
- <span class="go">1</span>
760
- </pre></div>
761
- </div>
762
- </dd></dl>
763
-
764
- <dl class="py method">
765
- <dt class="sig sig-object py" id="snappy.SymmetryGroup.order">
766
- <span class="sig-name descname"><span class="pre">order</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.SymmetryGroup.order" title="Link to this definition"></a></dt>
767
- <dd><p>Return the order of the symmetry group</p>
768
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">S</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><span class="o">.</span><span class="n">symmetry_group</span><span class="p">()</span>
769
- <span class="gp">&gt;&gt;&gt; </span><span class="n">S</span><span class="o">.</span><span class="n">order</span><span class="p">()</span>
770
- <span class="go">4</span>
771
- </pre></div>
772
- </div>
773
- </dd></dl>
774
-
775
- <dl class="py method">
776
- <dt class="sig sig-object py" id="snappy.SymmetryGroup.polyhedral_description">
777
- <span class="sig-name descname"><span class="pre">polyhedral_description</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.SymmetryGroup.polyhedral_description" title="Link to this definition"></a></dt>
778
- <dd><p>If the symmetry group is a (possibly binary)
779
- polyhedral group, return a description of it.</p>
780
- </dd></dl>
781
-
782
- </dd></dl>
783
-
784
- </section>
785
- <section id="dirichletdomain">
786
- <h2>DirichletDomain<a class="headerlink" href="#dirichletdomain" title="Link to this heading"></a></h2>
787
- <dl class="py class">
788
- <dt class="sig sig-object py" id="snappy.DirichletDomain">
789
- <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">DirichletDomain</span></span><a class="headerlink" href="#snappy.DirichletDomain" title="Link to this definition"></a></dt>
790
- <dd><p>A DirichletDomain object represents a Dirichlet Domain of
791
- a hyperbolic manifold, typically centered at a point which
792
- is a local maximum of injectivity radius. It will have ideal
793
- vertices if the manifold is not closed.</p>
794
- <p>Instantiate as M.dirichlet_domain() where M is a Manifold to
795
- obtain a Dirichlet Domain centered at a point which maximizes
796
- injectivity radius.</p>
797
- <p>Other options can be provided to customize the computation, with
798
- the default values shown here</p>
799
- <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,-4)&#39;</span><span class="p">)</span>
800
- <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> <span class="n">displacement</span> <span class="o">=</span> <span class="p">[</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">],</span> <span class="n">centroid_at_origin</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">maximize_injectivity_radius</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
801
- <span class="go">40 finite vertices, 0 ideal vertices; 60 edges; 22 faces</span>
802
- </pre></div>
803
- </div>
804
- <p>You can also create a Dirichlet Domain from a file listing matrix
805
- generators for the group, in SnapPea’s “% Generator” format, via</p>
806
- <blockquote>
807
- <div><p>D = DirichletDomain(generator_file=’test.gens’)</p>
808
- </div></blockquote>
809
- <p>Or from matrices:</p>
810
- <div class="doctest 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">Manifold</span><span class="p">(</span><span class="s1">&#39;m004&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">fundamental_group</span><span class="p">(</span><span class="kc">False</span><span class="p">)</span>
811
- <span class="gp">&gt;&gt;&gt; </span><span class="n">matrices</span> <span class="o">=</span> <span class="p">[</span> <span class="n">G</span><span class="o">.</span><span class="n">O31</span><span class="p">(</span><span class="s1">&#39;a&#39;</span><span class="p">),</span> <span class="n">G</span><span class="o">.</span><span class="n">O31</span><span class="p">(</span><span class="s1">&#39;b&#39;</span><span class="p">),</span> <span class="n">G</span><span class="o">.</span><span class="n">O31</span><span class="p">(</span><span class="s1">&#39;c&#39;</span><span class="p">)</span> <span class="p">]</span> <span class="c1"># Note: some of the matrices contain (near) 0 entries and thus this tests that Object2Real converts small numbers fromatted by pari as &quot;1.0 E-10&quot; (note the pace before &quot;E&quot;) correctly when not in SageMath.</span>
812
- <span class="gp">&gt;&gt;&gt; </span><span class="n">DirichletDomain</span><span class="p">(</span><span class="n">O31_generators</span> <span class="o">=</span> <span class="n">matrices</span><span class="p">,</span>
813
- <span class="gp">... </span> <span class="n">maximize_injectivity_radius</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span>
814
- <span class="go">8 finite vertices, 2 ideal vertices; 20 edges; 12 faces</span>
815
- </pre></div>
816
- </div>
817
- <p>The group elements for the face-pairings of the Dirichlet domain
818
- can be given as words in the original generators by setting
819
- include_words = True.</p>
820
- <dl class="py method">
821
- <dt class="sig sig-object py" id="snappy.DirichletDomain.edge_list">
822
- <span class="sig-name descname"><span class="pre">edge_list</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.DirichletDomain.edge_list" title="Link to this definition"></a></dt>
823
- <dd><p>Return a list of edges, each represented as a dictionar with keys
824
- ‘tail_vertex_index’, ‘tip_vertex_index’, ‘edge_class’.</p>
825
- <p>The index (into vertex_data_list()) to the two vertices at the
826
- end of the edge are stored in ‘tail_vertex_index’ and
827
- ‘tip_vertex_index’. The index of the edge class this edge
828
- belongs to is stored in ‘edge_class’.</p>
829
- </dd></dl>
830
-
831
- <dl class="py method">
832
- <dt class="sig sig-object py" id="snappy.DirichletDomain.export_stl">
833
- <span class="sig-name descname"><span class="pre">export_stl</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">filename</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">model</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'klein'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">cutout</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">num_subdivisions</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">3</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">shrink_factor</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.9</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">cutoff_radius</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.9</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">callback</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.DirichletDomain.export_stl" title="Link to this definition"></a></dt>
834
- <dd><p>Export the Dirichlet domain as an stl file suitable for 3d printing.</p>
835
- <p>Arguments can be given to modify the model produced:</p>
836
- <ul class="simple">
837
- <li><p>model=’klein’ - (alt. ‘poincare’) the model of HH^3 to use.</p></li>
838
- <li><p>cutout=False - remove the interior of each face</p></li>
839
- <li><p>shrink_factor=0.9 - the fraction to cut out of each face</p></li>
840
- <li><p>cuttoff_radius=0.9 - maximum rescaling for projection into Poincare model</p></li>
841
- <li><p>num_subdivision=3 - number of times to subdivide for the Poincare model</p></li>
842
- </ul>
843
- <p>For printing domains in the Poincare model, cutoff_radius is critical for avoiding
844
- infinitely thin cusps, which cannot be printed.</p>
845
- <p>This can take a long time for finely subdivided domains. So we call UI_callback
846
- every so often if it is not None.</p>
847
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">D</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="o">.</span><span class="n">dirichlet_domain</span><span class="p">()</span>
848
- <span class="gp">&gt;&gt;&gt; </span><span class="n">D</span><span class="o">.</span><span class="n">export_stl</span><span class="p">(</span><span class="s1">&#39;fig-eight-klein.stl&#39;</span><span class="p">)</span>
849
- <span class="gp">&gt;&gt;&gt; </span><span class="n">D</span><span class="o">.</span><span class="n">export_stl</span><span class="p">(</span><span class="s1">&#39;fig-eight-poincare.stl&#39;</span><span class="p">,</span> <span class="n">model</span><span class="o">=</span><span class="s1">&#39;poincare&#39;</span><span class="p">)</span>
850
- <span class="gp">&gt;&gt;&gt; </span><span class="n">D</span><span class="o">.</span><span class="n">export_stl</span><span class="p">(</span><span class="s1">&#39;fig-eight-klein-wireframe.stl&#39;</span><span class="p">,</span> <span class="n">cutout</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
851
- <span class="gp">&gt;&gt;&gt; </span><span class="n">D</span><span class="o">.</span><span class="n">export_stl</span><span class="p">(</span><span class="s1">&#39;fig-eight-poincare-wireframe.stl&#39;</span><span class="p">,</span> <span class="n">model</span><span class="o">=</span><span class="s1">&#39;poincare&#39;</span><span class="p">,</span> <span class="n">cutout</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
852
- </pre></div>
853
- </div>
854
- </dd></dl>
855
-
856
- <dl class="py method">
857
- <dt class="sig sig-object py" id="snappy.DirichletDomain.face_list">
858
- <span class="sig-name descname"><span class="pre">face_list</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.DirichletDomain.face_list" title="Link to this definition"></a></dt>
859
- <dd><p>Return a list of faces, each represented as a dictionary with
860
- keys ‘vertices’, ‘distance’, ‘closest’, ‘hue’, ‘vertex_indices’,
861
- ‘edge_indices’, ‘vertex_image_indices’, ‘edge_image_indices’,
862
- ‘edge_orientations’.</p>
863
- <p>The distance from the origin is the value for ‘distance’, and
864
- the value for ‘closest’ is the orthogonal projection of the
865
- origin to the plane containing the face. The vertices of each
866
- face are listed in clockwise order, as viewed from outside the
867
- polyhedron.</p>
868
- <p>The coordinates of vertices are stored in ‘vertices’ and the
869
- corresponding index into vertex_data_list() is stored in
870
- ‘vertex_index’. The indices (in edge_list()) to the edges of
871
- the face (also in clockwise order) are stored in
872
- ‘edge_indices’ such that the first edge is adjacent to the
873
- first and second vertex. The respective value in
874
- ‘edge_orientations’ is +/-1 to indicate whether the
875
- orientation of the edge induced from the orientation of the face
876
- is the same or opposite than the edges orientation.</p>
877
- <p>To find the image of a vertex or edge adjacent to a face under
878
- the pairing matrix for this face, lookup the index in
879
- ‘vertex_image_indices’, respectively, ‘edge_image_indices’ at
880
- the respective position.</p>
881
- </dd></dl>
882
-
883
- <dl class="py method">
884
- <dt class="sig sig-object py" id="snappy.DirichletDomain.in_radius">
885
- <span class="sig-name descname"><span class="pre">in_radius</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.DirichletDomain.in_radius" title="Link to this definition"></a></dt>
886
- <dd><p>Return the radius of the largest inscribed sphere.</p>
887
- </dd></dl>
888
-
889
- <dl class="py method">
890
- <dt class="sig sig-object py" id="snappy.DirichletDomain.length_spectrum_dicts">
891
- <span class="sig-name descname"><span class="pre">length_spectrum_dicts</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cutoff_length</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1.0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">full_rigor</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">multiplicities</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">user_radius</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">grouped</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.DirichletDomain.length_spectrum_dicts" title="Link to this definition"></a></dt>
892
- <dd><p>Return a list of info objects describing the short
893
- geodesics up to the specified cutoff length. The keys are
894
- ‘length’, ‘parity’, ‘topology’, and ‘multiplicity’. The
895
- length is the complex length; the parity specifies whether
896
- orientation is preserved; and topology distinguishes between
897
- circles and mirrored intervals. Finally, the key ‘matrix’
898
- in the fundamental group realizing this element.</p>
899
- <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(1,2)&#39;</span><span class="p">)</span>
900
- <span class="gp">&gt;&gt;&gt; </span><span class="n">D</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">dirichlet_domain</span><span class="p">(</span><span class="n">maximize_injectivity_radius</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
901
- <span class="gp">&gt;&gt;&gt; </span><span class="n">lengths</span> <span class="o">=</span> <span class="n">D</span><span class="o">.</span><span class="n">length_spectrum_dicts</span><span class="p">()</span>
902
- <span class="gp">&gt;&gt;&gt; </span><span class="nb">len</span><span class="p">(</span><span class="n">lengths</span><span class="p">)</span>
903
- <span class="go">2</span>
904
- <span class="gp">&gt;&gt;&gt; </span><span class="n">lengths</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">matrix</span> <span class="ow">in</span> <span class="n">D</span><span class="o">.</span><span class="n">pairing_matrices</span><span class="p">()</span>
905
- <span class="go">True</span>
906
- </pre></div>
907
- </div>
908
- <p>If the flag ‘grouped’ is False, then each geodesic is returned as
909
- a separate item rather than collating by (length, parity, topology).
910
- If the flag ‘multiplicities’ is False, then the geodesics <em>are</em>
911
- collated but the multiplicity of each item is set to 0.</p>
912
- <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>
913
- <span class="gp">&gt;&gt;&gt; </span><span class="n">D</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">dirichlet_domain</span><span class="p">()</span>
914
- <span class="gp">&gt;&gt;&gt; </span><span class="p">[</span><span class="n">g</span><span class="o">.</span><span class="n">multiplicity</span> <span class="k">for</span> <span class="n">g</span> <span class="ow">in</span> <span class="n">D</span><span class="o">.</span><span class="n">length_spectrum_dicts</span><span class="p">()]</span>
915
- <span class="go">[3, 3]</span>
916
- <span class="gp">&gt;&gt;&gt; </span><span class="p">[</span><span class="n">g</span><span class="o">.</span><span class="n">multiplicity</span> <span class="k">for</span> <span class="n">g</span> <span class="ow">in</span> <span class="n">D</span><span class="o">.</span><span class="n">length_spectrum_dicts</span><span class="p">(</span><span class="n">grouped</span><span class="o">=</span><span class="kc">False</span><span class="p">)]</span>
917
- <span class="go">[1, 1, 1, 1, 1, 1]</span>
918
- </pre></div>
919
- </div>
920
- </dd></dl>
921
-
922
- <dl class="py method">
923
- <dt class="sig sig-object py" id="snappy.DirichletDomain.manifold">
924
- <span class="sig-name descname"><span class="pre">manifold</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.DirichletDomain.manifold" title="Link to this definition"></a></dt>
925
- <dd><p>Returns a Manifold computed directly from the Dirichlet
926
- domain, regarded as polyhedron with faces identified in pairs.
927
- Only works if this gives a manifold not an orbifold.</p>
928
- <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;7_3&#39;</span><span class="p">)</span>
929
- <span class="gp">&gt;&gt;&gt; </span><span class="n">D</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">dirichlet_domain</span><span class="p">()</span>
930
- <span class="gp">&gt;&gt;&gt; </span><span class="n">A</span> <span class="o">=</span> <span class="n">D</span><span class="o">.</span><span class="n">manifold</span><span class="p">()</span>
931
- <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">A</span><span class="p">)</span>
932
- <span class="go">True</span>
933
- </pre></div>
934
- </div>
935
- </dd></dl>
936
-
937
- <dl class="py method">
938
- <dt class="sig sig-object py" id="snappy.DirichletDomain.num_edges">
939
- <span class="sig-name descname"><span class="pre">num_edges</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.DirichletDomain.num_edges" title="Link to this definition"></a></dt>
940
- <dd><p>Return the number of edges.</p>
941
- </dd></dl>
942
-
943
- <dl class="py method">
944
- <dt class="sig sig-object py" id="snappy.DirichletDomain.num_faces">
945
- <span class="sig-name descname"><span class="pre">num_faces</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.DirichletDomain.num_faces" title="Link to this definition"></a></dt>
946
- <dd><p>Return the number of faces.</p>
947
- </dd></dl>
948
-
949
- <dl class="py method">
950
- <dt class="sig sig-object py" id="snappy.DirichletDomain.num_finite_vertices">
951
- <span class="sig-name descname"><span class="pre">num_finite_vertices</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.DirichletDomain.num_finite_vertices" title="Link to this definition"></a></dt>
952
- <dd><p>Return the number of finite (non-ideal) vertices.</p>
953
- </dd></dl>
954
-
955
- <dl class="py method">
956
- <dt class="sig sig-object py" id="snappy.DirichletDomain.num_ideal_vertices">
957
- <span class="sig-name descname"><span class="pre">num_ideal_vertices</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.DirichletDomain.num_ideal_vertices" title="Link to this definition"></a></dt>
958
- <dd><p>Return the number of ideal vertices.</p>
959
- </dd></dl>
960
-
961
- <dl class="py method">
962
- <dt class="sig sig-object py" id="snappy.DirichletDomain.num_vertices">
963
- <span class="sig-name descname"><span class="pre">num_vertices</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.DirichletDomain.num_vertices" title="Link to this definition"></a></dt>
964
- <dd><p>Return the number of vertices.</p>
965
- </dd></dl>
966
-
967
- <dl class="py method">
968
- <dt class="sig sig-object py" id="snappy.DirichletDomain.out_radius">
969
- <span class="sig-name descname"><span class="pre">out_radius</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.DirichletDomain.out_radius" title="Link to this definition"></a></dt>
970
- <dd><p>Return the radius of the smallest circubscribed sphere.</p>
971
- </dd></dl>
972
-
973
- <dl class="py method">
974
- <dt class="sig sig-object py" id="snappy.DirichletDomain.pairing_matrices">
975
- <span class="sig-name descname"><span class="pre">pairing_matrices</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.DirichletDomain.pairing_matrices" title="Link to this definition"></a></dt>
976
- <dd><p>Returns a list of the O31Matrices which pair the faces of
977
- this DirichletDomain.</p>
978
- <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;s345&#39;</span><span class="p">)</span>
979
- <span class="gp">&gt;&gt;&gt; </span><span class="n">D</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">dirichlet_domain</span><span class="p">()</span>
980
- <span class="gp">&gt;&gt;&gt; </span><span class="n">matrices</span> <span class="o">=</span> <span class="n">D</span><span class="o">.</span><span class="n">pairing_matrices</span><span class="p">()</span>
981
- <span class="gp">&gt;&gt;&gt; </span><span class="n">D1</span> <span class="o">=</span> <span class="n">DirichletDomain</span><span class="p">(</span><span class="n">O31_generators</span><span class="o">=</span><span class="n">matrices</span><span class="p">)</span>
982
- <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span> <span class="o">=</span> <span class="n">D1</span><span class="o">.</span><span class="n">manifold</span><span class="p">()</span>
983
- <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>
984
- <span class="go">True</span>
985
- </pre></div>
986
- </div>
987
- </dd></dl>
988
-
989
- <dl class="py method">
990
- <dt class="sig sig-object py" id="snappy.DirichletDomain.pairing_words">
991
- <span class="sig-name descname"><span class="pre">pairing_words</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.DirichletDomain.pairing_words" title="Link to this definition"></a></dt>
992
- <dd><p>Group elements which pair the faces of this DirichletDomain
993
- as words in the original generators:</p>
994
- <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>
995
- <span class="gp">&gt;&gt;&gt; </span><span class="n">D</span> <span class="o">=</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>
996
- <span class="gp">&gt;&gt;&gt; </span><span class="nb">sorted</span><span class="p">(</span><span class="n">D</span><span class="o">.</span><span class="n">pairing_words</span><span class="p">())</span>
997
- <span class="go">[&#39;A&#39;, ...]</span>
998
- </pre></div>
999
- </div>
1000
- <p>Requires that DirichletDomain was computed with
1001
- include_words = True.</p>
1002
- </dd></dl>
1003
-
1004
- <dl class="py method">
1005
- <dt class="sig sig-object py" id="snappy.DirichletDomain.save">
1006
- <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">filename</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.DirichletDomain.save" title="Link to this definition"></a></dt>
1007
- <dd><p>Save the Dirichlet domain as a text file in “% Generators” format.</p>
1008
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">snappy.number</span> <span class="kn">import</span> <span class="n">Number</span>
1009
- <span class="gp">&gt;&gt;&gt; </span><span class="n">acc</span><span class="p">,</span> <span class="n">Number</span><span class="o">.</span><span class="n">_accuracy_for_testing</span> <span class="o">=</span> <span class="n">Number</span><span class="o">.</span><span class="n">_accuracy_for_testing</span><span class="p">,</span> <span class="kc">None</span>
1010
- <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>
1011
- <span class="gp">&gt;&gt;&gt; </span><span class="n">D</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">dirichlet_domain</span><span class="p">()</span>
1012
- <span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">tempfile</span> <span class="kn">import</span> <span class="n">NamedTemporaryFile</span>
1013
- <span class="gp">&gt;&gt;&gt; </span><span class="n">f</span> <span class="o">=</span> <span class="n">NamedTemporaryFile</span><span class="p">(</span><span class="n">delete</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
1014
- <span class="gp">&gt;&gt;&gt; </span><span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
1015
- <span class="gp">&gt;&gt;&gt; </span><span class="n">D</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">f</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
1016
- <span class="gp">&gt;&gt;&gt; </span><span class="n">E</span> <span class="o">=</span> <span class="n">DirichletDomain</span><span class="p">(</span><span class="n">generator_file</span><span class="o">=</span><span class="n">f</span><span class="o">.</span><span class="n">name</span><span class="p">);</span> <span class="n">E</span>
1017
- <span class="go">30 finite vertices, 2 ideal vertices; 50 edges; 20 faces</span>
1018
- <span class="gp">&gt;&gt;&gt; </span><span class="n">os</span><span class="o">.</span><span class="n">unlink</span><span class="p">(</span><span class="n">f</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
1019
- <span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">pickle</span> <span class="kn">import</span> <span class="n">dumps</span><span class="p">,</span> <span class="n">loads</span>
1020
- <span class="gp">&gt;&gt;&gt; </span><span class="n">E</span> <span class="o">=</span> <span class="n">loads</span><span class="p">(</span><span class="n">dumps</span><span class="p">(</span><span class="n">D</span><span class="p">));</span> <span class="n">E</span>
1021
- <span class="go">30 finite vertices, 2 ideal vertices; 50 edges; 20 faces</span>
1022
- <span class="gp">&gt;&gt;&gt; </span><span class="n">Number</span><span class="o">.</span><span class="n">_accuracy_for_testing</span> <span class="o">=</span> <span class="n">acc</span>
1023
- </pre></div>
1024
- </div>
1025
- </dd></dl>
1026
-
1027
- <dl class="py method">
1028
- <dt class="sig sig-object py" id="snappy.DirichletDomain.spine_radius">
1029
- <span class="sig-name descname"><span class="pre">spine_radius</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.DirichletDomain.spine_radius" title="Link to this definition"></a></dt>
1030
- <dd><p>Return the infimum of the radii (measured from the origin) of all
1031
- spines dual to the Dirichlet domain.</p>
1032
- </dd></dl>
1033
-
1034
- <dl class="py method">
1035
- <dt class="sig sig-object py" id="snappy.DirichletDomain.triangulation">
1036
- <span class="sig-name descname"><span class="pre">triangulation</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.DirichletDomain.triangulation" title="Link to this definition"></a></dt>
1037
- <dd><p>Returns a Triangulation computed directly from the Dirichlet
1038
- domain, regarded as polyhedron with faces identified in pairs.
1039
- Only works if this gives a manifold not an orbifold.</p>
1040
- <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;7_3&#39;</span><span class="p">)</span>
1041
- <span class="gp">&gt;&gt;&gt; </span><span class="n">D</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">dirichlet_domain</span><span class="p">()</span>
1042
- <span class="gp">&gt;&gt;&gt; </span><span class="n">B</span> <span class="o">=</span> <span class="n">D</span><span class="o">.</span><span class="n">triangulation</span><span class="p">()</span>
1043
- <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">B</span><span class="o">.</span><span class="n">with_hyperbolic_structure</span><span class="p">())</span>
1044
- <span class="go">True</span>
1045
- </pre></div>
1046
- </div>
1047
- </dd></dl>
1048
-
1049
- <dl class="py method">
1050
- <dt class="sig sig-object py" id="snappy.DirichletDomain.vertex_list">
1051
- <span class="sig-name descname"><span class="pre">vertex_list</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">details</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.DirichletDomain.vertex_list" title="Link to this definition"></a></dt>
1052
- <dd><p>Return a list of the coordinates of the vertices. These are
1053
- the three space coordinates of a point in the time=1 slice of
1054
- Minkowski space. That is to say, these are the coordinates of
1055
- the image of the point under projection into the Klein model.</p>
1056
- <p>If <cite>details = True</cite> is passed, returns a list of vertices,
1057
- each represented by a dictionary with keys ‘position’,
1058
- ‘ideal’, ‘vertex_class’. The coordinates are the value for
1059
- ‘position’. The index of the vertex class this vertex belongs
1060
- to is the value for ‘vertex_class’. The value for ‘ideal’
1061
- is True if the vertex is an ideal point.</p>
1062
- </dd></dl>
1063
-
1064
- <dl class="py method">
1065
- <dt class="sig sig-object py" id="snappy.DirichletDomain.view">
1066
- <span class="sig-name descname"><span class="pre">view</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.DirichletDomain.view" title="Link to this definition"></a></dt>
1067
- <dd></dd></dl>
1068
-
1069
- <dl class="py method">
1070
- <dt class="sig sig-object py" id="snappy.DirichletDomain.volume">
1071
- <span class="sig-name descname"><span class="pre">volume</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.DirichletDomain.volume" title="Link to this definition"></a></dt>
1072
- <dd><p>Returns the approximate volume of the DirichletDomain.
1073
- Because matrices in O(3,1) tend to accumulate roundoff error,
1074
- it’s hard to get a good bound on the accuracy of the computed
1075
- volume. Nevertheless, the kernel computes the best value it
1076
- can, with the hope that it will aid the user in recognizing
1077
- manifolds defined by a set of generators.</p>
1078
- </dd></dl>
1079
-
1080
- </dd></dl>
1081
-
1082
- </section>
1083
- <section id="cuspneighborhood">
1084
- <h2>CuspNeighborhood<a class="headerlink" href="#cuspneighborhood" title="Link to this heading"></a></h2>
1085
- <dl class="py class">
1086
- <dt class="sig sig-object py" id="snappy.CuspNeighborhood">
1087
- <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">CuspNeighborhood</span></span><a class="headerlink" href="#snappy.CuspNeighborhood" title="Link to this definition"></a></dt>
1088
- <dd><p>A CuspNeighborhood object represents an equivariant collection of
1089
- disjoint horoballs that project to cusp neighborhoods.</p>
1090
- <p>Instantiate as M.cusp_neighborhood()</p>
1091
- <dl class="py method">
1092
- <dt class="sig sig-object py" id="snappy.CuspNeighborhood.Ford_domain">
1093
- <span class="sig-name descname"><span class="pre">Ford_domain</span></span><span class="sig-paren">(</span><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">high_precision</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.CuspNeighborhood.Ford_domain" title="Link to this definition"></a></dt>
1094
- <dd><p>Return a list of pairs of complex numbers describing the
1095
- endpoints of the segments obtained by projecting the edges of
1096
- the Ford domain to the xy-plane in the upper half space model.</p>
1097
- <p>If the high_precision flag is set to False (the default), the
1098
- coordinates are Python complex numbers. Otherwise they are
1099
- SnapPy Numbers.</p>
1100
- </dd></dl>
1101
-
1102
- <dl class="py method">
1103
- <dt class="sig sig-object py" id="snappy.CuspNeighborhood.all_translations">
1104
- <span class="sig-name descname"><span class="pre">all_translations</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">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.CuspNeighborhood.all_translations" title="Link to this definition"></a></dt>
1105
- <dd><p>Returns the (complex) Euclidean translations of the meridian
1106
- and longitude for each cusp measured with respect to the cusp neighborhood.</p>
1107
- <p>The result is a list of pairs, the second entry corresponding to a
1108
- longitude is always real:</p>
1109
- <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;v3227&quot;</span><span class="p">)</span>
1110
- <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">cusp_neighborhood</span><span class="p">()</span>
1111
- <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">all_translations</span><span class="p">()</span>
1112
- <span class="go">[(-0.152977162509284 + 0.747697694854404*I, 0.868692062725708), (-0.152977162509284 + 0.747697694854404*I, 0.868692062725708), (0.0961611977895952 + 0.725536253181650*I, 0.895226186134782)]</span>
1113
- </pre></div>
1114
- </div>
1115
- <p>Often, one is interested in making the cusp neighborhoods as large as possible first:</p>
1116
- <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">set_displacement</span><span class="p">(</span><span class="mi">100</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span>
1117
- <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">set_displacement</span><span class="p">(</span><span class="mi">100</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
1118
- <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">set_displacement</span><span class="p">(</span><span class="mi">100</span><span class="p">,</span><span class="mi">2</span><span class="p">)</span>
1119
- <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">all_translations</span><span class="p">()</span>
1120
- <span class="go">[(-0.477656250512815 + 2.33461303362557*I, 2.71240613125259), (-0.259696455247511 + 1.26930345526993*I, 1.47470541152065), (0.131389112265699 + 0.991330873713731*I, 1.22318540718077)]</span>
1121
- </pre></div>
1122
- </div>
1123
- <p>This can also be achieved by <a class="reference internal" href="manifold.html#snappy.Manifold.cusp_translations" title="snappy.Manifold.cusp_translations"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Manifold.cusp_translations()</span></code></a> which
1124
- would have made a different choice of disjoint cusp neighborhoods though:</p>
1125
- <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>
1126
- <span class="go">[(-0.315973594129651 + 1.54436599614183*I, 1.79427928161946), (-0.315973594129649 + 1.54436599614182*I, 1.79427928161946), (0.198620491993677 + 1.49859164484929*I, 1.84908538602825)]</span>
1127
- </pre></div>
1128
- </div>
1129
- <p>This method supports arbitrary precision</p>
1130
- <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.number</span> <span class="kn">import</span> <span class="n">Number</span>
1131
- <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">set_displacement</span><span class="p">(</span><span class="mf">1.125</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
1132
- <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">set_displacement</span><span class="p">(</span><span class="mf">0.515625</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
1133
- <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">set_displacement</span><span class="p">(</span><span class="mf">0.3125</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
1134
- <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">all_translations</span><span class="p">(</span><span class="n">bits_prec</span> <span class="o">=</span> <span class="mi">120</span><span class="p">)</span>
1135
- <span class="go">[(-0.47120283346076781167174343474008914 + 2.3030710375877078211095122873223488*I, 2.6757599281290843845710310925394911), (-0.25618853688042434043044508297577899 + 1.2521580040549576537090841783446072*I, 1.4547854392045669515377748986943560), (0.13143677360753666862808198126761923 + 0.99169047854575721271560179767750893*I, 1.2236291171413362101960100623801910)]</span>
1136
- </pre></div>
1137
- </div>
1138
- <p>and can return verified intervals</p>
1139
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: N.all_translations(verified = True) # doctest: +NUMERIC9
1140
- [(-0.47120283346? + 2.30307103759?*I, 2.67575992813?), (-0.256188536881? + 1.252158004055?*I, 1.454785439205?), (0.131436773608? + 0.991690478546?*I, 1.2236291171413?)]
1141
- sage: N.all_translations(verified = True, bits_prec = 120) # doctest: +NUMERIC30
1142
- [(-0.4712028334607678116717434347401? + 2.3030710375877078211095122873224?*I, 2.6757599281290843845710310925395?), (-0.25618853688042434043044508297578? + 1.25215800405495765370908417834461?*I, 1.454785439204566951537774898694356?), (0.131436773607536668628081981267619? + 0.991690478545757212715601797677509?*I, 1.223629117141336210196010062380191?)]
1143
- </pre></div>
1144
- </div>
1145
- <p>that are guaranteed to contain the true translations of disjoint cusp
1146
- neighborhoods (the element corresponding to a longitude is always
1147
- in a <code class="docutils literal notranslate"><span class="pre">RealIntervalField</span></code>). The verified translations might correspond
1148
- to cusp neighborhoods smaller than the given ones to be able to verify
1149
- that they are disjoint.</p>
1150
- <p><strong>Remark:</strong> Since the code is (potentially) non-deterministic, the result of</p>
1151
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span> <span class="n">N</span><span class="o">.</span><span class="n">all_translations</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">i</span><span class="p">]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">M</span><span class="o">.</span><span class="n">num_cusps</span><span class="p">())</span> <span class="p">]</span>
1152
- </pre></div>
1153
- </div>
1154
- <p>is not verified to correspond to disjoint cusp neighborhoods.</p>
1155
- </dd></dl>
1156
-
1157
- <dl class="py method">
1158
- <dt class="sig sig-object py" id="snappy.CuspNeighborhood.check_index">
1159
- <span class="sig-name descname"><span class="pre">check_index</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">which_cusp</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.CuspNeighborhood.check_index" title="Link to this definition"></a></dt>
1160
- <dd><p>Raises an IndexError if the cusp index is invalid.</p>
1161
- </dd></dl>
1162
-
1163
- <dl class="py method">
1164
- <dt class="sig sig-object py" id="snappy.CuspNeighborhood.get_displacement">
1165
- <span class="sig-name descname"><span class="pre">get_displacement</span></span><span class="sig-paren">(</span><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><span class="sig-paren">)</span><a class="headerlink" href="#snappy.CuspNeighborhood.get_displacement" title="Link to this definition"></a></dt>
1166
- <dd><p>Return the displacement of the horospherical boundary of the
1167
- specified cusp. The displacement is the hyperbolic distance
1168
- that the horospherical boundary has been displaced from its
1169
- “home” position, at which the area of the boundary is
1170
- 3sqrt(3)/8. (The translates of all of the horospheres are
1171
- guaranteed to be pairwise disjoint when each cusp has
1172
- displacement 0.)</p>
1173
- </dd></dl>
1174
-
1175
- <dl class="py method">
1176
- <dt class="sig sig-object py" id="snappy.CuspNeighborhood.get_tie">
1177
- <span class="sig-name descname"><span class="pre">get_tie</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">which_cusp</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.CuspNeighborhood.get_tie" title="Link to this definition"></a></dt>
1178
- <dd><p>Return True if the specified cusp is a member of the tied group.
1179
- The displacements of the tied cusps are all the same.</p>
1180
- </dd></dl>
1181
-
1182
- <dl class="py method">
1183
- <dt class="sig sig-object py" id="snappy.CuspNeighborhood.horoballs">
1184
- <span class="sig-name descname"><span class="pre">horoballs</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">0.1</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">full_list</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">high_precision</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.CuspNeighborhood.horoballs" title="Link to this definition"></a></dt>
1185
- <dd><p>Return a list of dictionaries describing the horoballs with
1186
- height at least cutoff. The keys are ‘center’, ‘radius’, ‘index’.</p>
1187
- <p>If the high_precision flag is set to the default value False, these
1188
- are Python complexes and floats. Otherwise they are SnapPy Numbers.</p>
1189
- </dd></dl>
1190
-
1191
- <dl class="py method">
1192
- <dt class="sig sig-object py" id="snappy.CuspNeighborhood.manifold">
1193
- <span class="sig-name descname"><span class="pre">manifold</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.CuspNeighborhood.manifold" title="Link to this definition"></a></dt>
1194
- <dd><p>Return a Manifold built from the current canonical triangulation.</p>
1195
- </dd></dl>
1196
-
1197
- <dl class="py method">
1198
- <dt class="sig sig-object py" id="snappy.CuspNeighborhood.max_reach">
1199
- <span class="sig-name descname"><span class="pre">max_reach</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.CuspNeighborhood.max_reach" title="Link to this definition"></a></dt>
1200
- <dd><p>Return the maximum reach over all cusps.</p>
1201
- </dd></dl>
1202
-
1203
- <dl class="py method">
1204
- <dt class="sig sig-object py" id="snappy.CuspNeighborhood.num_cusps">
1205
- <span class="sig-name descname"><span class="pre">num_cusps</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.CuspNeighborhood.num_cusps" title="Link to this definition"></a></dt>
1206
- <dd><p>Return the number of cusps.</p>
1207
- </dd></dl>
1208
-
1209
- <dl class="py method">
1210
- <dt class="sig sig-object py" id="snappy.CuspNeighborhood.original_index">
1211
- <span class="sig-name descname"><span class="pre">original_index</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">which_cusp</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.CuspNeighborhood.original_index" title="Link to this definition"></a></dt>
1212
- <dd><p>Returns the index by which the Manifold identifies this cusp.</p>
1213
- </dd></dl>
1214
-
1215
- <dl class="py method">
1216
- <dt class="sig sig-object py" id="snappy.CuspNeighborhood.reach">
1217
- <span class="sig-name descname"><span class="pre">reach</span></span><span class="sig-paren">(</span><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><span class="sig-paren">)</span><a class="headerlink" href="#snappy.CuspNeighborhood.reach" title="Link to this definition"></a></dt>
1218
- <dd><p>Return the displacement at which the specified cusp
1219
- neighborhood bumps into itself. (This is twice the
1220
- distance between nearest horoball lifts.)</p>
1221
- </dd></dl>
1222
-
1223
- <dl class="py method">
1224
- <dt class="sig sig-object py" id="snappy.CuspNeighborhood.set_displacement">
1225
- <span class="sig-name descname"><span class="pre">set_displacement</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">new_displacement</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><span class="sig-paren">)</span><a class="headerlink" href="#snappy.CuspNeighborhood.set_displacement" title="Link to this definition"></a></dt>
1226
- <dd><p>Set the displacement of the specified cusp.</p>
1227
- </dd></dl>
1228
-
1229
- <dl class="py method">
1230
- <dt class="sig sig-object py" id="snappy.CuspNeighborhood.set_tie">
1231
- <span class="sig-name descname"><span class="pre">set_tie</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">which_cusp</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">new_tie</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.CuspNeighborhood.set_tie" title="Link to this definition"></a></dt>
1232
- <dd><p>Mark the specified cusp as a member of the tied group.</p>
1233
- </dd></dl>
1234
-
1235
- <dl class="py method">
1236
- <dt class="sig sig-object py" id="snappy.CuspNeighborhood.stopper">
1237
- <span class="sig-name descname"><span class="pre">stopper</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">which_cusp</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.CuspNeighborhood.stopper" title="Link to this definition"></a></dt>
1238
- <dd><p>Return the index of the cusp which will be the first one that
1239
- the specified cusp neighborhood bumps into.
1240
- (Assumes the other displacements are fixed.)</p>
1241
- </dd></dl>
1242
-
1243
- <dl class="py method">
1244
- <dt class="sig sig-object py" id="snappy.CuspNeighborhood.stopping_displacement">
1245
- <span class="sig-name descname"><span class="pre">stopping_displacement</span></span><span class="sig-paren">(</span><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><span class="sig-paren">)</span><a class="headerlink" href="#snappy.CuspNeighborhood.stopping_displacement" title="Link to this definition"></a></dt>
1246
- <dd><p>Return the displacement at which the specified cusp
1247
- neighborhood bumps into itself or another cusp neighborhood.
1248
- (Assumes the other displacements are fixed.)</p>
1249
- </dd></dl>
1250
-
1251
- <dl class="py method">
1252
- <dt class="sig sig-object py" id="snappy.CuspNeighborhood.topology">
1253
- <span class="sig-name descname"><span class="pre">topology</span></span><span class="sig-paren">(</span><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><span class="sig-paren">)</span><a class="headerlink" href="#snappy.CuspNeighborhood.topology" title="Link to this definition"></a></dt>
1254
- <dd><p>Return the topological type of the specified cusp.</p>
1255
- </dd></dl>
1256
-
1257
- <dl class="py method">
1258
- <dt class="sig sig-object py" id="snappy.CuspNeighborhood.translations">
1259
- <span class="sig-name descname"><span class="pre">translations</span></span><span class="sig-paren">(</span><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><span class="sig-paren">)</span><a class="headerlink" href="#snappy.CuspNeighborhood.translations" title="Link to this definition"></a></dt>
1260
- <dd><p>Return the (complex) Euclidean translations of the meridian
1261
- and longitude of the specified cusp.</p>
1262
- <p>Also see <a class="reference internal" href="#snappy.CuspNeighborhood.all_translations" title="snappy.CuspNeighborhood.all_translations"><code class="xref py py-meth docutils literal notranslate"><span class="pre">CuspNeighborhood.all_translations()</span></code></a> which supports
1263
- arbitrary precision and verified results.</p>
1264
- </dd></dl>
1265
-
1266
- <dl class="py method">
1267
- <dt class="sig sig-object py" id="snappy.CuspNeighborhood.triangulation">
1268
- <span class="sig-name descname"><span class="pre">triangulation</span></span><span class="sig-paren">(</span><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">high_precision</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.CuspNeighborhood.triangulation" title="Link to this definition"></a></dt>
1269
- <dd><p>Return a list of dictionaries describing the endpoints of the
1270
- segments obtained by projecting the edges of the triangulation
1271
- dual to the Ford domain into the xy-plane in the upper half
1272
- space model. The keys are ‘endpoints’ and ‘indices’.</p>
1273
- </dd></dl>
1274
-
1275
- <dl class="py method">
1276
- <dt class="sig sig-object py" id="snappy.CuspNeighborhood.view">
1277
- <span class="sig-name descname"><span class="pre">view</span></span><span class="sig-paren">(</span><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">cutoff</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.CuspNeighborhood.view" title="Link to this definition"></a></dt>
1278
- <dd><p>Create a 3D picture of the horoball packing. One can specify
1279
- which cusp to put at infinity and how large of horoballs to
1280
- look at, e.g.</p>
1281
- <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>
1282
- <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_neighborhood</span><span class="p">()</span>
1283
- <span class="gp">&gt;&gt;&gt; </span><span class="n">C</span><span class="o">.</span><span class="n">view</span><span class="p">(</span><span class="n">which_cusp</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">cutoff</span><span class="o">=</span><span class="mf">0.2</span><span class="p">)</span>
1284
- </pre></div>
1285
- </div>
1286
- </dd></dl>
1287
-
1288
- <dl class="py method">
1289
- <dt class="sig sig-object py" id="snappy.CuspNeighborhood.volume">
1290
- <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">which_cusp</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.CuspNeighborhood.volume" title="Link to this definition"></a></dt>
1291
- <dd><p>Return the volume of the horoball neighborhood of the specified
1292
- cusp.</p>
1293
- </dd></dl>
1294
-
1295
- </dd></dl>
1296
-
1297
- </section>
1298
- </section>
1299
-
1300
-
1301
- </div>
1302
- </div>
1303
- <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
1304
- <a href="triangulation.html" class="btn btn-neutral float-left" title="Triangulation" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
1305
- <a href="censuses.html" class="btn btn-neutral float-right" title="Census manifolds" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
1306
- </div>
1307
-
1308
- <hr/>
1309
-
1310
- <div role="contentinfo">
1311
- <p>&#169; Copyright 2009-2023, by Marc Culler, Nathan Dunfield, Matthias Goerner, Jeffrey Weeks and others.</p>
1312
- </div>
1313
-
1314
- Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
1315
- <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
1316
- provided by <a href="https://readthedocs.org">Read the Docs</a>.
1317
-
1318
-
1319
- </footer>
1320
- </div>
1321
- </div>
1322
- </section>
1323
- </div>
1324
- <script>
1325
- jQuery(function () {
1326
- SphinxRtdTheme.Navigation.enable(true);
1327
- });
1328
- </script>
1329
-
1330
- </body>
1
+
2
+
3
+ <!DOCTYPE html>
4
+ <html class="writer-html5" lang="en" data-content_root="./">
5
+ <head>
6
+ <meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
7
+
8
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
9
+ <title>Additional Classes &mdash; SnapPy 3.2 documentation</title>
10
+ <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=fa44fd50" />
11
+ <link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=e59714d7" />
12
+ <link rel="stylesheet" type="text/css" href="_static/snappy_sphinx_rtd_theme.css?v=1b8ec2a8" />
13
+
14
+
15
+ <link rel="shortcut icon" href="_static/SnapPy.ico"/>
16
+ <script src="_static/jquery.js?v=5d32c60e"></script>
17
+ <script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
18
+ <script src="_static/documentation_options.js?v=828ea960"></script>
19
+ <script src="_static/doctools.js?v=9a2dae69"></script>
20
+ <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
21
+ <script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
22
+ <script src="_static/js/theme.js"></script>
23
+ <link rel="index" title="Index" href="genindex.html" />
24
+ <link rel="search" title="Search" href="search.html" />
25
+ <link rel="next" title="Census manifolds" href="censuses.html" />
26
+ <link rel="prev" title="Triangulation" href="triangulation.html" />
27
+ </head>
28
+
29
+ <body class="wy-body-for-nav">
30
+ <div class="wy-grid-for-nav">
31
+ <nav data-toggle="wy-nav-shift" class="wy-nav-side">
32
+ <div class="wy-side-scroll">
33
+ <div class="wy-side-nav-search" >
34
+
35
+
36
+
37
+ <a href="index.html" class="icon icon-home">
38
+ SnapPy
39
+ <img src="_static/SnapPy-horizontal-128.png" class="logo" alt="Logo"/>
40
+ </a>
41
+ <div role="search">
42
+ <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
43
+ <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
44
+ <input type="hidden" name="check_keywords" value="yes" />
45
+ <input type="hidden" name="area" value="default" />
46
+ </form>
47
+ </div>
48
+ </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
49
+ <ul class="current">
50
+ <li class="toctree-l1"><a class="reference internal" href="installing.html">Installing SnapPy</a></li>
51
+ <li class="toctree-l1"><a class="reference internal" href="screenshots.html">Screenshots: SnapPy in action</a></li>
52
+ <li class="toctree-l1"><a class="reference internal" href="tutorial.html">Tutorial</a></li>
53
+ <li class="toctree-l1 current"><a class="reference internal" href="snappy.html">The snappy module and its classes</a><ul class="current">
54
+ <li class="toctree-l2"><a class="reference internal" href="manifold.html">Manifold: the main class</a></li>
55
+ <li class="toctree-l2"><a class="reference internal" href="manifoldhp.html">ManifoldHP: High-precision variant</a></li>
56
+ <li class="toctree-l2"><a class="reference internal" href="triangulation.html">Triangulation</a></li>
57
+ <li class="toctree-l2 current"><a class="current reference internal" href="#">Additional Classes</a><ul>
58
+ <li class="toctree-l3"><a class="reference internal" href="#abeliangroup">AbelianGroup</a><ul>
59
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.AbelianGroup"><code class="docutils literal notranslate"><span class="pre">AbelianGroup</span></code></a><ul>
60
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.AbelianGroup.betti_number"><code class="docutils literal notranslate"><span class="pre">AbelianGroup.betti_number()</span></code></a></li>
61
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.AbelianGroup.elementary_divisors"><code class="docutils literal notranslate"><span class="pre">AbelianGroup.elementary_divisors()</span></code></a></li>
62
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.AbelianGroup.order"><code class="docutils literal notranslate"><span class="pre">AbelianGroup.order()</span></code></a></li>
63
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.AbelianGroup.rank"><code class="docutils literal notranslate"><span class="pre">AbelianGroup.rank()</span></code></a></li>
64
+ </ul>
65
+ </li>
66
+ </ul>
67
+ </li>
68
+ <li class="toctree-l3"><a class="reference internal" href="#fundamentalgroup">FundamentalGroup</a><ul>
69
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.HolonomyGroup"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup</span></code></a><ul>
70
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.O31"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.O31()</span></code></a></li>
71
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.SL2C"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.SL2C()</span></code></a></li>
72
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.category"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.category()</span></code></a></li>
73
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.character_variety_vars_and_polys"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.character_variety_vars_and_polys()</span></code></a></li>
74
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.complex_length"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.complex_length()</span></code></a></li>
75
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.dump"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.dump()</span></code></a></li>
76
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.dumps"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.dumps()</span></code></a></li>
77
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.gap_string"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.gap_string()</span></code></a></li>
78
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.generators"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.generators()</span></code></a></li>
79
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.generators_in_originals"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.generators_in_originals()</span></code></a></li>
80
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.get_custom_name"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.get_custom_name()</span></code></a></li>
81
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.longitude"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.longitude()</span></code></a></li>
82
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.magma_string"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.magma_string()</span></code></a></li>
83
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.meridian"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.meridian()</span></code></a></li>
84
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.num_generators"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.num_generators()</span></code></a></li>
85
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.num_original_generators"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.num_original_generators()</span></code></a></li>
86
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.num_relators"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.num_relators()</span></code></a></li>
87
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.original_generators"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.original_generators()</span></code></a></li>
88
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.parent"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.parent()</span></code></a></li>
89
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.peripheral_curves"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.peripheral_curves()</span></code></a></li>
90
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.relators"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.relators()</span></code></a></li>
91
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.rename"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.rename()</span></code></a></li>
92
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.reset_name"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.reset_name()</span></code></a></li>
93
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.sage"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.sage()</span></code></a></li>
94
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.HolonomyGroup.save"><code class="docutils literal notranslate"><span class="pre">HolonomyGroup.save()</span></code></a></li>
95
+ </ul>
96
+ </li>
97
+ </ul>
98
+ </li>
99
+ <li class="toctree-l3"><a class="reference internal" href="#symmetrygroup">SymmetryGroup</a><ul>
100
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.SymmetryGroup"><code class="docutils literal notranslate"><span class="pre">SymmetryGroup</span></code></a><ul>
101
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.SymmetryGroup.abelian_description"><code class="docutils literal notranslate"><span class="pre">SymmetryGroup.abelian_description()</span></code></a></li>
102
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.SymmetryGroup.abelianization"><code class="docutils literal notranslate"><span class="pre">SymmetryGroup.abelianization()</span></code></a></li>
103
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.SymmetryGroup.center"><code class="docutils literal notranslate"><span class="pre">SymmetryGroup.center()</span></code></a></li>
104
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.SymmetryGroup.commutator_subgroup"><code class="docutils literal notranslate"><span class="pre">SymmetryGroup.commutator_subgroup()</span></code></a></li>
105
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.SymmetryGroup.direct_product_description"><code class="docutils literal notranslate"><span class="pre">SymmetryGroup.direct_product_description()</span></code></a></li>
106
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.SymmetryGroup.is_S5"><code class="docutils literal notranslate"><span class="pre">SymmetryGroup.is_S5()</span></code></a></li>
107
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.SymmetryGroup.is_abelian"><code class="docutils literal notranslate"><span class="pre">SymmetryGroup.is_abelian()</span></code></a></li>
108
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.SymmetryGroup.is_amphicheiral"><code class="docutils literal notranslate"><span class="pre">SymmetryGroup.is_amphicheiral()</span></code></a></li>
109
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.SymmetryGroup.is_dihedral"><code class="docutils literal notranslate"><span class="pre">SymmetryGroup.is_dihedral()</span></code></a></li>
110
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.SymmetryGroup.is_direct_product"><code class="docutils literal notranslate"><span class="pre">SymmetryGroup.is_direct_product()</span></code></a></li>
111
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.SymmetryGroup.is_full_group"><code class="docutils literal notranslate"><span class="pre">SymmetryGroup.is_full_group()</span></code></a></li>
112
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.SymmetryGroup.is_invertible_knot"><code class="docutils literal notranslate"><span class="pre">SymmetryGroup.is_invertible_knot()</span></code></a></li>
113
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.SymmetryGroup.is_polyhedral"><code class="docutils literal notranslate"><span class="pre">SymmetryGroup.is_polyhedral()</span></code></a></li>
114
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.SymmetryGroup.isometries"><code class="docutils literal notranslate"><span class="pre">SymmetryGroup.isometries()</span></code></a></li>
115
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.SymmetryGroup.multiply_elements"><code class="docutils literal notranslate"><span class="pre">SymmetryGroup.multiply_elements()</span></code></a></li>
116
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.SymmetryGroup.order"><code class="docutils literal notranslate"><span class="pre">SymmetryGroup.order()</span></code></a></li>
117
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.SymmetryGroup.polyhedral_description"><code class="docutils literal notranslate"><span class="pre">SymmetryGroup.polyhedral_description()</span></code></a></li>
118
+ </ul>
119
+ </li>
120
+ </ul>
121
+ </li>
122
+ <li class="toctree-l3"><a class="reference internal" href="#dirichletdomain">DirichletDomain</a><ul>
123
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.DirichletDomain"><code class="docutils literal notranslate"><span class="pre">DirichletDomain</span></code></a><ul>
124
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.DirichletDomain.edge_list"><code class="docutils literal notranslate"><span class="pre">DirichletDomain.edge_list()</span></code></a></li>
125
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.DirichletDomain.export_stl"><code class="docutils literal notranslate"><span class="pre">DirichletDomain.export_stl()</span></code></a></li>
126
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.DirichletDomain.face_list"><code class="docutils literal notranslate"><span class="pre">DirichletDomain.face_list()</span></code></a></li>
127
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.DirichletDomain.in_radius"><code class="docutils literal notranslate"><span class="pre">DirichletDomain.in_radius()</span></code></a></li>
128
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.DirichletDomain.length_spectrum_dicts"><code class="docutils literal notranslate"><span class="pre">DirichletDomain.length_spectrum_dicts()</span></code></a></li>
129
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.DirichletDomain.manifold"><code class="docutils literal notranslate"><span class="pre">DirichletDomain.manifold()</span></code></a></li>
130
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.DirichletDomain.num_edges"><code class="docutils literal notranslate"><span class="pre">DirichletDomain.num_edges()</span></code></a></li>
131
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.DirichletDomain.num_faces"><code class="docutils literal notranslate"><span class="pre">DirichletDomain.num_faces()</span></code></a></li>
132
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.DirichletDomain.num_finite_vertices"><code class="docutils literal notranslate"><span class="pre">DirichletDomain.num_finite_vertices()</span></code></a></li>
133
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.DirichletDomain.num_ideal_vertices"><code class="docutils literal notranslate"><span class="pre">DirichletDomain.num_ideal_vertices()</span></code></a></li>
134
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.DirichletDomain.num_vertices"><code class="docutils literal notranslate"><span class="pre">DirichletDomain.num_vertices()</span></code></a></li>
135
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.DirichletDomain.out_radius"><code class="docutils literal notranslate"><span class="pre">DirichletDomain.out_radius()</span></code></a></li>
136
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.DirichletDomain.pairing_matrices"><code class="docutils literal notranslate"><span class="pre">DirichletDomain.pairing_matrices()</span></code></a></li>
137
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.DirichletDomain.pairing_words"><code class="docutils literal notranslate"><span class="pre">DirichletDomain.pairing_words()</span></code></a></li>
138
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.DirichletDomain.save"><code class="docutils literal notranslate"><span class="pre">DirichletDomain.save()</span></code></a></li>
139
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.DirichletDomain.spine_radius"><code class="docutils literal notranslate"><span class="pre">DirichletDomain.spine_radius()</span></code></a></li>
140
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.DirichletDomain.triangulation"><code class="docutils literal notranslate"><span class="pre">DirichletDomain.triangulation()</span></code></a></li>
141
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.DirichletDomain.vertex_list"><code class="docutils literal notranslate"><span class="pre">DirichletDomain.vertex_list()</span></code></a></li>
142
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.DirichletDomain.volume"><code class="docutils literal notranslate"><span class="pre">DirichletDomain.volume()</span></code></a></li>
143
+ </ul>
144
+ </li>
145
+ </ul>
146
+ </li>
147
+ <li class="toctree-l3"><a class="reference internal" href="#cuspneighborhood">CuspNeighborhood</a><ul>
148
+ <li class="toctree-l4"><a class="reference internal" href="#snappy.CuspNeighborhood"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood</span></code></a><ul>
149
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.Ford_domain"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.Ford_domain()</span></code></a></li>
150
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.all_translations"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.all_translations()</span></code></a></li>
151
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.check_index"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.check_index()</span></code></a></li>
152
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.get_displacement"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.get_displacement()</span></code></a></li>
153
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.get_tie"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.get_tie()</span></code></a></li>
154
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.horoballs"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.horoballs()</span></code></a></li>
155
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.manifold"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.manifold()</span></code></a></li>
156
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.max_reach"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.max_reach()</span></code></a></li>
157
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.num_cusps"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.num_cusps()</span></code></a></li>
158
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.original_index"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.original_index()</span></code></a></li>
159
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.reach"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.reach()</span></code></a></li>
160
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.set_displacement"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.set_displacement()</span></code></a></li>
161
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.set_tie"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.set_tie()</span></code></a></li>
162
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.stopper"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.stopper()</span></code></a></li>
163
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.stopping_displacement"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.stopping_displacement()</span></code></a></li>
164
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.topology"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.topology()</span></code></a></li>
165
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.translations"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.translations()</span></code></a></li>
166
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.triangulation"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.triangulation()</span></code></a></li>
167
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.view"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.view()</span></code></a></li>
168
+ <li class="toctree-l5"><a class="reference internal" href="#snappy.CuspNeighborhood.volume"><code class="docutils literal notranslate"><span class="pre">CuspNeighborhood.volume()</span></code></a></li>
169
+ </ul>
170
+ </li>
171
+ </ul>
172
+ </li>
173
+ </ul>
174
+ </li>
175
+ <li class="toctree-l2"><a class="reference internal" href="censuses.html">Census manifolds</a></li>
176
+ </ul>
177
+ </li>
178
+ <li class="toctree-l1"><a class="reference internal" href="plink.html">Using SnapPy’s link editor</a></li>
179
+ <li class="toctree-l1"><a class="reference internal" href="spherogram.html">Links: planar diagrams and invariants</a></li>
180
+ <li class="toctree-l1"><a class="reference internal" href="snap.html">Number theory of hyperbolic 3-manifolds</a></li>
181
+ <li class="toctree-l1"><a class="reference internal" href="verify.html">Verified computations</a></li>
182
+ <li class="toctree-l1"><a class="reference internal" href="other.html">Other components</a></li>
183
+ <li class="toctree-l1"><a class="reference internal" href="news.html">News</a></li>
184
+ <li class="toctree-l1"><a class="reference internal" href="credits.html">Credits</a></li>
185
+ <li class="toctree-l1"><a class="reference internal" href="bugs.html">Reporting bugs and other problems</a></li>
186
+ <li class="toctree-l1"><a class="reference internal" href="todo.html">To Do List</a></li>
187
+ <li class="toctree-l1"><a class="reference internal" href="development.html">Development Basics</a></li>
188
+ </ul>
189
+
190
+ </div>
191
+ </div>
192
+ </nav>
193
+
194
+ <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
195
+ <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
196
+ <a href="index.html">SnapPy</a>
197
+ </nav>
198
+
199
+ <div class="wy-nav-content">
200
+ <div class="rst-content">
201
+ <div role="navigation" aria-label="Page navigation">
202
+ <ul class="wy-breadcrumbs">
203
+ <li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
204
+ <li class="breadcrumb-item"><a href="snappy.html">The snappy module and its classes</a></li>
205
+ <li class="breadcrumb-item active">Additional Classes</li>
206
+ <li class="wy-breadcrumbs-aside">
207
+ </li>
208
+ </ul>
209
+ <hr/>
210
+ </div>
211
+ <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
212
+ <div itemprop="articleBody">
213
+
214
+ <section id="module-snappy">
215
+ <span id="additional-classes"></span><h1>Additional Classes<a class="headerlink" href="#module-snappy" title="Link to this heading"></a></h1>
216
+ <p>SnapPy is a Cython wrapping of Jeff Weeks’ SnapPea kernel.</p>
217
+ <dl class="simple">
218
+ <dt>The module defines the following classes:</dt><dd><p>Triangulation, Manifold, ManifoldHP, AbelianGroup, FundamentalGroup,
219
+ HolonomyGroup, HolonomyGroupHP, DirichletDomain, DirichletDomainHP,
220
+ CuspNeighborhood, CuspNeighborhoodHP, SymmetryGroup,
221
+ AlternatingKnotExteriors, NonalternatingKnotExteriors, SnapPeaFatalError,
222
+ InsufficientPrecisionError, pari, twister, OrientableCuspedCensus,
223
+ NonorientableCuspedCensus, OrientableClosedCensus,
224
+ NonorientableClosedCensus, LinkExteriors, CensusKnots, HTLinkExteriors,
225
+ TetrahedralOrientableCuspedCensus, TetrahedralNonorientableCuspedCensus,
226
+ OctahedralOrientableCuspedCensus, OctahedralNonorientableCuspedCensus,
227
+ CubicalOrientableCuspedCensus, CubicalNonorientableCuspedCensus,
228
+ DodecahedralOrientableCuspedCensus, DodecahedralNonorientableCuspedCensus,
229
+ IcosahedralNonorientableClosedCensus, IcosahedralOrientableClosedCensus,
230
+ CubicalNonorientableClosedCensus, CubicalOrientableClosedCensus,
231
+ DodecahedralNonorientableClosedCensus, DodecahedralOrientableClosedCensus,
232
+ Crossing, Strand, Link, Tangle, RationalTangle, ZeroTangle,
233
+ InfinityTangle, IdentityBraid, random_link, DTcodec.</p>
234
+ </dd>
235
+ </dl>
236
+ <section id="abeliangroup">
237
+ <h2>AbelianGroup<a class="headerlink" href="#abeliangroup" title="Link to this heading"></a></h2>
238
+ <dl class="py class">
239
+ <dt class="sig sig-object py" id="snappy.AbelianGroup">
240
+ <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">AbelianGroup</span></span><a class="headerlink" href="#snappy.AbelianGroup" title="Link to this definition"></a></dt>
241
+ <dd><p>An AbelianGroup object represents a finitely generated abelian group,
242
+ usually the first homology group of a snappy Manifold.</p>
243
+ <p>Instantiate an abelian group by its elementary divisors:</p>
244
+ <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">AbelianGroup</span><span class="p">(</span><span class="n">elementary_divisors</span><span class="o">=</span><span class="p">[</span><span class="mi">5</span><span class="p">,</span><span class="mi">15</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">])</span>
245
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">A</span>
246
+ <span class="go">Z/5 + Z/15 + Z + Z</span>
247
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">A</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
248
+ <span class="go">5</span>
249
+ </pre></div>
250
+ </div>
251
+ <p>Alternatively, instantiate an abelian group as AbelianGroup(P) where P is a
252
+ presentation matrix given as a list of lists of integers.
253
+ Snappy stores an abelian group as a list of elementary divisors:</p>
254
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">B</span> <span class="o">=</span> <span class="n">AbelianGroup</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">2</span><span class="p">],[</span><span class="mi">2</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">6</span><span class="p">]])</span>
255
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">B</span>
256
+ <span class="go">Z/2 + Z</span>
257
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">B</span><span class="o">.</span><span class="n">elementary_divisors</span><span class="p">()</span>
258
+ <span class="go">[2, 0]</span>
259
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">B</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
260
+ <span class="go">0</span>
261
+ <span class="gp">&gt;&gt;&gt; </span><span class="nb">len</span><span class="p">(</span><span class="n">B</span><span class="p">)</span>
262
+ <span class="go">2</span>
263
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">B</span><span class="o">.</span><span class="n">rank</span><span class="p">()</span>
264
+ <span class="go">2</span>
265
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">B</span><span class="o">.</span><span class="n">betti_number</span><span class="p">()</span>
266
+ <span class="go">1</span>
267
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">B</span><span class="o">.</span><span class="n">order</span><span class="p">()</span>
268
+ <span class="go">&#39;infinite&#39;</span>
269
+ </pre></div>
270
+ </div>
271
+ <dl class="py method">
272
+ <dt class="sig sig-object py" id="snappy.AbelianGroup.betti_number">
273
+ <span class="sig-name descname"><span class="pre">betti_number</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.AbelianGroup.betti_number" title="Link to this definition"></a></dt>
274
+ <dd><p>The rank of the maximal free abelian subgroup.</p>
275
+ </dd></dl>
276
+
277
+ <dl class="py method">
278
+ <dt class="sig sig-object py" id="snappy.AbelianGroup.elementary_divisors">
279
+ <span class="sig-name descname"><span class="pre">elementary_divisors</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.AbelianGroup.elementary_divisors" title="Link to this definition"></a></dt>
280
+ <dd><p>The elementary divisors of this finitely generated abelian group.</p>
281
+ </dd></dl>
282
+
283
+ <dl class="py method">
284
+ <dt class="sig sig-object py" id="snappy.AbelianGroup.order">
285
+ <span class="sig-name descname"><span class="pre">order</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.AbelianGroup.order" title="Link to this definition"></a></dt>
286
+ <dd><p>The order of the group. Returns the string ‘infinite’ if the
287
+ group is infinite.</p>
288
+ </dd></dl>
289
+
290
+ <dl class="py method">
291
+ <dt class="sig sig-object py" id="snappy.AbelianGroup.rank">
292
+ <span class="sig-name descname"><span class="pre">rank</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.AbelianGroup.rank" title="Link to this definition"></a></dt>
293
+ <dd><p>The rank of the group.</p>
294
+ </dd></dl>
295
+
296
+ </dd></dl>
297
+
298
+ </section>
299
+ <section id="fundamentalgroup">
300
+ <h2>FundamentalGroup<a class="headerlink" href="#fundamentalgroup" title="Link to this heading"></a></h2>
301
+ <dl class="py class">
302
+ <dt class="sig sig-object py" id="snappy.HolonomyGroup">
303
+ <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">HolonomyGroup</span></span><a class="headerlink" href="#snappy.HolonomyGroup" title="Link to this definition"></a></dt>
304
+ <dd><p>A FundamentalGroup represents a presentation of the fundamental
305
+ group of a SnapPea Triangulation. Group elements are described as
306
+ words in the generators a,b,…, where the inverse of a is denoted
307
+ A. Words are represented by python strings (and the concatenation
308
+ operator is named ‘+’, according to Python conventions).</p>
309
+ <p>Instantiate via <code class="docutils literal notranslate"><span class="pre">T.fundamental_group()</span></code>, where T is a triangulation:</p>
310
+ <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;m125&#39;</span><span class="p">)</span>
311
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">T</span><span class="o">.</span><span class="n">fundamental_group</span><span class="p">()</span>
312
+ <span class="go">Generators:</span>
313
+ <span class="go"> a,b</span>
314
+ <span class="go">Relators:</span>
315
+ <span class="go"> aabaBBAABAbb</span>
316
+ <span class="gp">&gt;&gt;&gt; </span><span class="nb">type</span><span class="p">(</span><span class="n">T</span><span class="o">.</span><span class="n">fundamental_group</span><span class="p">())</span>
317
+ <span class="go">&lt;class &#39;SnapPy.FundamentalGroup&#39;&gt;</span>
318
+ </pre></div>
319
+ </div>
320
+ <p>A HolonomyGroup is a FundamentalGroup with added structure
321
+ consisting of a holonomy representation into O(3,1), and an
322
+ arbitrarily chosen lift of the holonomy representation to SL(2,C).
323
+ The holonomy is determined by the shapes of the tetrahedra, so a
324
+ HolonomyGroup is associated to a Manifold, while a Triangulation
325
+ only has a FundamentalGroup:</p>
326
+ <p>Instantiate via <code class="docutils literal notranslate"><span class="pre">M.fundamental_group()</span></code>, where M is a Manifold:</p>
327
+ <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>
328
+ <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>
329
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span>
330
+ <span class="go">Generators:</span>
331
+ <span class="go"> a,b</span>
332
+ <span class="go">Relators:</span>
333
+ <span class="go"> aabaBBAABAbb</span>
334
+ <span class="gp">&gt;&gt;&gt; </span><span class="nb">type</span><span class="p">(</span><span class="n">G</span><span class="p">)</span>
335
+ <span class="go">&lt;class &#39;SnapPy.HolonomyGroup&#39;&gt;</span>
336
+ </pre></div>
337
+ </div>
338
+ <p>In the class HolonomyGroup, methods are provided to evaluate the
339
+ representations on a group element. Other methods are shared
340
+ with the FundamentalGroup class.</p>
341
+ <div class="doctest 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">O31</span><span class="p">(</span><span class="s1">&#39;a&#39;</span><span class="p">)</span>
342
+ <span class="go">[ 2.50000000000000 -0.500000000000000 -2.12132034355964 -0.707106781186547]</span>
343
+ <span class="go">[ 0.500000000000002 -0.500000000000001 -0.707106781186549 0.707106781186547]</span>
344
+ <span class="go">[ -0.707106781186548 -0.707106781186547 1.00000000000000 0]</span>
345
+ <span class="go">[ 2.12132034355964 -0.707106781186548 -2.00000000000000 -1.00000000000000]</span>
346
+ <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;aaB&#39;</span><span class="p">)</span>
347
+ <span class="go">[-1.00000000000000 + 4.00000000000000*I 2.12132034355964 - 0.707106781186545*I]</span>
348
+ <span class="go">[2.12132034355964 - 0.707106781186549*I -1.00000000000000 - 1.00000000000000*I]</span>
349
+ <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;ab&#39;</span><span class="p">)</span>
350
+ <span class="go">1.06127506190504 - 2.23703575928741*I</span>
351
+ </pre></div>
352
+ </div>
353
+ <dl class="py method">
354
+ <dt class="sig sig-object py" id="snappy.HolonomyGroup.O31">
355
+ <span class="sig-name descname"><span class="pre">O31</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><span class="sig-paren">)</span><a class="headerlink" href="#snappy.HolonomyGroup.O31" title="Link to this definition"></a></dt>
356
+ <dd><p>Return the image of the element represented by the input word
357
+ under the holonomy representation, where
358
+ <span class="math notranslate nohighlight">\(\text{Isom}(\mathbb{H}^3)\)</span> is
359
+ identified with <span class="math notranslate nohighlight">\(\text{SO}(3,1)\)</span>.</p>
360
+ </dd></dl>
361
+
362
+ <dl class="py method">
363
+ <dt class="sig sig-object py" id="snappy.HolonomyGroup.SL2C">
364
+ <span class="sig-name descname"><span class="pre">SL2C</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><span class="sig-paren">)</span><a class="headerlink" href="#snappy.HolonomyGroup.SL2C" title="Link to this definition"></a></dt>
365
+ <dd><p>Return the image of the element represented by the input word
366
+ under some <span class="math notranslate nohighlight">\(\text{SL}(2,\mathbb{C})\)</span>-representation that
367
+ lifts the holonomy representation.
368
+ Note: the choice of lift is not guaranteed to
369
+ vary continuously when filling coefficients are changed.</p>
370
+ </dd></dl>
371
+
372
+ <dl class="py method">
373
+ <dt class="sig sig-object py" id="snappy.HolonomyGroup.category">
374
+ <span class="sig-name descname"><span class="pre">category</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.HolonomyGroup.category" title="Link to this definition"></a></dt>
375
+ <dd><p>File: sage/structure/sage_object.pyx (starting at line 514)</p>
376
+ </dd></dl>
377
+
378
+ <dl class="py method">
379
+ <dt class="sig sig-object py" id="snappy.HolonomyGroup.character_variety_vars_and_polys">
380
+ <span class="sig-name descname"><span class="pre">character_variety_vars_and_polys</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">as_ideal</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.HolonomyGroup.character_variety_vars_and_polys" title="Link to this definition"></a></dt>
381
+ <dd><p>Returns a list of variables and a list polynomials where the
382
+ polynomials generate the ideal defining the SL(2, C) character
383
+ variety of this group. Each variable is of the form “Tw” where
384
+ “w” is a word in the generators and “Tw” represents the trace
385
+ function of that word.</p>
386
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">H</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;dLQacccbjkg&#39;</span><span class="p">)</span> <span class="c1"># Hopf link exterior.</span>
387
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span> <span class="o">=</span> <span class="n">H</span><span class="o">.</span><span class="n">fundamental_group</span><span class="p">()</span>
388
+ <span class="gp">&gt;&gt;&gt; </span><span class="nb">vars</span><span class="p">,</span> <span class="n">polys</span> <span class="o">=</span> <span class="n">G</span><span class="o">.</span><span class="n">character_variety_vars_and_polys</span><span class="p">()</span>
389
+ <span class="gp">&gt;&gt;&gt; </span><span class="nb">vars</span>
390
+ <span class="go">[Ta, Tb, Tab]</span>
391
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">polys</span>
392
+ <span class="go">[Ta^3 - Tab*Tb*Ta^2 + (Tb^2 + (Tab^2 - 4))*Ta,</span>
393
+ <span class="go"> Ta^2 - Tab*Tb*Ta + (Tb^2 + (Tab^2 - 4))]</span>
394
+ </pre></div>
395
+ </div>
396
+ <p>When used inside Sage, you can ask for the answer as a proper
397
+ ideal:</p>
398
+ <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;m000&#39;</span><span class="p">)</span> <span class="c1"># Gieseking manifold</span>
399
+ <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">fundamental_group</span><span class="p">()</span>
400
+ <span class="n">sage</span><span class="p">:</span> <span class="n">I</span> <span class="o">=</span> <span class="n">G</span><span class="o">.</span><span class="n">character_variety_vars_and_polys</span><span class="p">(</span><span class="n">as_ideal</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
401
+ <span class="n">sage</span><span class="p">:</span> <span class="n">I</span>
402
+ <span class="n">Ideal</span> <span class="p">(</span><span class="o">-</span><span class="n">Ta</span><span class="o">^</span><span class="mi">3</span><span class="o">*</span><span class="n">Tb</span><span class="o">^</span><span class="mi">2</span><span class="o">*</span><span class="n">Tab</span> <span class="o">+</span> <span class="n">Ta</span><span class="o">^</span><span class="mi">4</span><span class="o">*</span><span class="n">Tb</span> <span class="o">+</span> <span class="n">Ta</span><span class="o">^</span><span class="mi">2</span><span class="o">*</span><span class="n">Tb</span><span class="o">^</span><span class="mi">3</span> <span class="o">+</span> <span class="n">Ta</span><span class="o">^</span><span class="mi">2</span><span class="o">*</span><span class="n">Tb</span><span class="o">*</span><span class="n">Tab</span><span class="o">^</span><span class="mi">2</span> <span class="o">+</span> <span class="n">Ta</span><span class="o">*</span><span class="n">Tb</span><span class="o">^</span><span class="mi">2</span><span class="o">*</span><span class="n">Tab</span> <span class="o">-</span> <span class="mi">5</span><span class="o">*</span><span class="n">Ta</span><span class="o">^</span><span class="mi">2</span><span class="o">*</span><span class="n">Tb</span> <span class="o">-</span> <span class="n">Tb</span><span class="o">^</span><span class="mi">3</span> <span class="o">-</span> <span class="n">Tb</span><span class="o">*</span><span class="n">Tab</span><span class="o">^</span><span class="mi">2</span> <span class="o">+</span> <span class="n">Ta</span><span class="o">*</span><span class="n">Tab</span> <span class="o">-</span> <span class="n">Ta</span> <span class="o">+</span> <span class="mi">3</span><span class="o">*</span><span class="n">Tb</span><span class="p">,</span> <span class="n">Tb</span><span class="o">*</span><span class="n">Tab</span> <span class="o">-</span> <span class="n">Ta</span> <span class="o">-</span> <span class="n">Tb</span><span class="p">,</span> <span class="o">-</span><span class="n">Ta</span><span class="o">^</span><span class="mi">2</span><span class="o">*</span><span class="n">Tb</span><span class="o">^</span><span class="mi">2</span><span class="o">*</span><span class="n">Tab</span> <span class="o">+</span> <span class="n">Ta</span><span class="o">^</span><span class="mi">3</span><span class="o">*</span><span class="n">Tb</span> <span class="o">+</span> <span class="n">Ta</span><span class="o">*</span><span class="n">Tb</span><span class="o">^</span><span class="mi">3</span> <span class="o">+</span> <span class="n">Ta</span><span class="o">*</span><span class="n">Tb</span><span class="o">*</span><span class="n">Tab</span><span class="o">^</span><span class="mi">2</span> <span class="o">-</span> <span class="mi">4</span><span class="o">*</span><span class="n">Ta</span><span class="o">*</span><span class="n">Tb</span> <span class="o">+</span> <span class="n">Tab</span> <span class="o">-</span> <span class="mi">2</span><span class="p">)</span> <span class="n">of</span> <span class="n">Multivariate</span> <span class="n">Polynomial</span> <span class="n">Ring</span> <span class="ow">in</span> <span class="n">Ta</span><span class="p">,</span> <span class="n">Tb</span><span class="p">,</span> <span class="n">Tab</span> <span class="n">over</span> <span class="n">Rational</span> <span class="n">Field</span>
403
+ <span class="n">sage</span><span class="p">:</span> <span class="n">I</span><span class="o">.</span><span class="n">dimension</span><span class="p">()</span>
404
+ <span class="mi">1</span>
405
+ </pre></div>
406
+ </div>
407
+ </dd></dl>
408
+
409
+ <dl class="py method">
410
+ <dt class="sig sig-object py" id="snappy.HolonomyGroup.complex_length">
411
+ <span class="sig-name descname"><span class="pre">complex_length</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><span class="sig-paren">)</span><a class="headerlink" href="#snappy.HolonomyGroup.complex_length" title="Link to this definition"></a></dt>
412
+ <dd><p>Return the complex length of the isometry represented by the
413
+ input word.</p>
414
+ </dd></dl>
415
+
416
+ <dl class="py method">
417
+ <dt class="sig sig-object py" id="snappy.HolonomyGroup.dump">
418
+ <span class="sig-name descname"><span class="pre">dump</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">filename</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">compress</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.HolonomyGroup.dump" title="Link to this definition"></a></dt>
419
+ <dd><p>File: sage/structure/sage_object.pyx (starting at line 475)</p>
420
+ <p>Same as self.save(filename, compress)</p>
421
+ </dd></dl>
422
+
423
+ <dl class="py method">
424
+ <dt class="sig sig-object py" id="snappy.HolonomyGroup.dumps">
425
+ <span class="sig-name descname"><span class="pre">dumps</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">compress</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.HolonomyGroup.dumps" title="Link to this definition"></a></dt>
426
+ <dd><p>File: sage/structure/sage_object.pyx (starting at line 481)</p>
427
+ <p>Dump <code class="docutils literal notranslate"><span class="pre">self</span></code> to a string <code class="docutils literal notranslate"><span class="pre">s</span></code>, which can later be reconstituted
428
+ as <code class="docutils literal notranslate"><span class="pre">self</span></code> using <code class="docutils literal notranslate"><span class="pre">loads(s)</span></code>.</p>
429
+ <p>There is an optional boolean argument <code class="docutils literal notranslate"><span class="pre">compress</span></code> which defaults to <code class="docutils literal notranslate"><span class="pre">True</span></code>.</p>
430
+ <p>EXAMPLES:</p>
431
+ <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.misc.persist</span> <span class="kn">import</span> <span class="n">comp</span>
432
+ <span class="n">sage</span><span class="p">:</span> <span class="n">O</span> <span class="o">=</span> <span class="n">SageObject</span><span class="p">()</span>
433
+ <span class="n">sage</span><span class="p">:</span> <span class="n">p_comp</span> <span class="o">=</span> <span class="n">O</span><span class="o">.</span><span class="n">dumps</span><span class="p">()</span>
434
+ <span class="n">sage</span><span class="p">:</span> <span class="n">p_uncomp</span> <span class="o">=</span> <span class="n">O</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">compress</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
435
+ <span class="n">sage</span><span class="p">:</span> <span class="n">comp</span><span class="o">.</span><span class="n">decompress</span><span class="p">(</span><span class="n">p_comp</span><span class="p">)</span> <span class="o">==</span> <span class="n">p_uncomp</span>
436
+ <span class="kc">True</span>
437
+ <span class="n">sage</span><span class="p">:</span> <span class="kn">import</span> <span class="nn">pickletools</span>
438
+ <span class="n">sage</span><span class="p">:</span> <span class="n">pickletools</span><span class="o">.</span><span class="n">dis</span><span class="p">(</span><span class="n">p_uncomp</span><span class="p">)</span>
439
+ <span class="mi">0</span><span class="p">:</span> \<span class="n">x80</span> <span class="n">PROTO</span> <span class="mi">2</span>
440
+ <span class="mi">2</span><span class="p">:</span> <span class="n">c</span> <span class="n">GLOBAL</span> <span class="s1">&#39;sage.structure.sage_object SageObject&#39;</span>
441
+ <span class="mi">41</span><span class="p">:</span> <span class="n">q</span> <span class="n">BINPUT</span> <span class="o">...</span>
442
+ <span class="mi">43</span><span class="p">:</span> <span class="p">)</span> <span class="n">EMPTY_TUPLE</span>
443
+ <span class="mi">44</span><span class="p">:</span> \<span class="n">x81</span> <span class="n">NEWOBJ</span>
444
+ <span class="mi">45</span><span class="p">:</span> <span class="n">q</span> <span class="n">BINPUT</span> <span class="o">...</span>
445
+ <span class="mi">47</span><span class="p">:</span> <span class="o">.</span> <span class="n">STOP</span>
446
+ <span class="n">highest</span> <span class="n">protocol</span> <span class="n">among</span> <span class="n">opcodes</span> <span class="o">=</span> <span class="mi">2</span>
447
+ </pre></div>
448
+ </div>
449
+ </dd></dl>
450
+
451
+ <dl class="py method">
452
+ <dt class="sig sig-object py" id="snappy.HolonomyGroup.gap_string">
453
+ <span class="sig-name descname"><span class="pre">gap_string</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.HolonomyGroup.gap_string" title="Link to this definition"></a></dt>
454
+ <dd><p>Returns a string which will define this group within GAP:</p>
455
+ <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;b++LLR&#39;</span><span class="p">)</span>
456
+ <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>
457
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span>
458
+ <span class="go">Generators:</span>
459
+ <span class="go"> a,b</span>
460
+ <span class="go">Relators:</span>
461
+ <span class="go"> aaaaBAbbAB</span>
462
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span><span class="o">.</span><span class="n">gap_string</span><span class="p">()</span>
463
+ <span class="go">&#39;CallFuncList(function() local F, a, b; F := FreeGroup(&quot;a&quot;, &quot;b&quot;); a := F.1; b := F.2; return F/[a*a*a*a*b^-1*a^-1*b*b*a^-1*b^-1]; end,[])&#39;</span>
464
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span><span class="o">.</span><span class="n">magma_string</span><span class="p">()</span>
465
+ <span class="go">&#39;Group&lt;a,b|a*a*a*a*b^-1*a^-1*b*b*a^-1*b^-1&gt;&#39;</span>
466
+ </pre></div>
467
+ </div>
468
+ </dd></dl>
469
+
470
+ <dl class="py method">
471
+ <dt class="sig sig-object py" id="snappy.HolonomyGroup.generators">
472
+ <span class="sig-name descname"><span class="pre">generators</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.HolonomyGroup.generators" title="Link to this definition"></a></dt>
473
+ <dd><p>Return the letters representing the generators in the presentation.</p>
474
+ <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>
475
+ <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="c1">#Presentation simplified by default</span>
476
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span>
477
+ <span class="go">Generators:</span>
478
+ <span class="go"> a,b</span>
479
+ <span class="go">Relators:</span>
480
+ <span class="go"> aaaabbABBBAbb</span>
481
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">H</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="kc">False</span><span class="p">)</span> <span class="c1">#Unsimplified presentation</span>
482
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">H</span>
483
+ <span class="go">Generators:</span>
484
+ <span class="go"> a,b,c,d,e</span>
485
+ <span class="go">Relators:</span>
486
+ <span class="go"> ECbC</span>
487
+ <span class="go"> dEb</span>
488
+ <span class="go"> dAcaB</span>
489
+ <span class="go"> dbaE</span>
490
+ </pre></div>
491
+ </div>
492
+ <p>SnapPy stores a FundamentalGroup as a presentation of the group.
493
+ The following commands demonstrate how generators in the unsimplified
494
+ and simplified presentations above correspond:</p>
495
+ <div class="doctest 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">generators</span><span class="p">()</span>
496
+ <span class="go">[&#39;a&#39;, &#39;b&#39;]</span>
497
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">H</span><span class="o">.</span><span class="n">generators</span><span class="p">()</span>
498
+ <span class="go">[&#39;a&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;]</span>
499
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span><span class="o">.</span><span class="n">generators_in_originals</span><span class="p">()</span>
500
+ <span class="go">[&#39;BABcBcbCABcBcbCCbCba&#39;, &#39;BcBCbCbab&#39;]</span>
501
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span><span class="o">.</span><span class="n">original_generators</span><span class="p">()</span>
502
+ <span class="go">[&#39;BBAbba&#39;, &#39;A&#39;, &#39;AB&#39;, &#39;abba&#39;, &#39;bba&#39;]</span>
503
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span><span class="o">.</span><span class="n">num_generators</span><span class="p">()</span>
504
+ <span class="go">2</span>
505
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span><span class="o">.</span><span class="n">num_original_generators</span><span class="p">()</span>
506
+ <span class="go">5</span>
507
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">H</span><span class="o">.</span><span class="n">num_generators</span><span class="p">()</span>
508
+ <span class="go">5</span>
509
+ </pre></div>
510
+ </div>
511
+ </dd></dl>
512
+
513
+ <dl class="py method">
514
+ <dt class="sig sig-object py" id="snappy.HolonomyGroup.generators_in_originals">
515
+ <span class="sig-name descname"><span class="pre">generators_in_originals</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">verbose_form</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">raw_form</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">as_int_list</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.HolonomyGroup.generators_in_originals" title="Link to this definition"></a></dt>
516
+ <dd><p>Return the current generators in terms of the original
517
+ geometric generators. Note that by default fundamental_group()
518
+ returns a simplified presentation of the group.</p>
519
+ <p>If the flag “raw_form” is set to True, it returns a sequence of
520
+ instructions for expressing the current generators in terms of
521
+ the original ones. This is sometimes much more concise, though
522
+ the format is somewhat obscure. See the source code of this
523
+ function in fundamental_group.pyx for details.</p>
524
+ <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;K7_1&#39;</span><span class="p">)</span>
525
+ <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>
526
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span><span class="o">.</span><span class="n">generators_in_originals</span><span class="p">()</span>
527
+ <span class="go">[&#39;DBcACbABcaCbDBcACbABcaCbACbaBcaCbd&#39;,</span>
528
+ <span class="go"> &#39;DBcACbABcaCbDBcACbABcaCbCbDBcACbABcaBcACbaBcaCbdACbaBcaCbdBcBcACbaBcaCbd&#39;]</span>
529
+ </pre></div>
530
+ </div>
531
+ </dd></dl>
532
+
533
+ <dl class="py method">
534
+ <dt class="sig sig-object py" id="snappy.HolonomyGroup.get_custom_name">
535
+ <span class="sig-name descname"><span class="pre">get_custom_name</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.HolonomyGroup.get_custom_name" title="Link to this definition"></a></dt>
536
+ <dd><p>File: sage/structure/sage_object.pyx (starting at line 150)</p>
537
+ <p>Return the custom name of this object, or <code class="docutils literal notranslate"><span class="pre">None</span></code> if it is not
538
+ renamed.</p>
539
+ <p>EXAMPLES:</p>
540
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">P</span><span class="o">.&lt;</span><span class="n">x</span><span class="o">&gt;</span> <span class="o">=</span> <span class="n">QQ</span><span class="p">[]</span>
541
+ <span class="n">sage</span><span class="p">:</span> <span class="n">P</span><span class="o">.</span><span class="n">get_custom_name</span><span class="p">()</span> <span class="ow">is</span> <span class="kc">None</span>
542
+ <span class="kc">True</span>
543
+ <span class="n">sage</span><span class="p">:</span> <span class="n">P</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="s1">&#39;A polynomial ring&#39;</span><span class="p">)</span>
544
+ <span class="n">sage</span><span class="p">:</span> <span class="n">P</span><span class="o">.</span><span class="n">get_custom_name</span><span class="p">()</span>
545
+ <span class="s1">&#39;A polynomial ring&#39;</span>
546
+ <span class="n">sage</span><span class="p">:</span> <span class="n">P</span><span class="o">.</span><span class="n">reset_name</span><span class="p">()</span>
547
+ <span class="n">sage</span><span class="p">:</span> <span class="n">P</span><span class="o">.</span><span class="n">get_custom_name</span><span class="p">()</span> <span class="ow">is</span> <span class="kc">None</span>
548
+ <span class="kc">True</span>
549
+ </pre></div>
550
+ </div>
551
+ </dd></dl>
552
+
553
+ <dl class="py method">
554
+ <dt class="sig sig-object py" id="snappy.HolonomyGroup.longitude">
555
+ <span class="sig-name descname"><span class="pre">longitude</span></span><span class="sig-paren">(</span><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">as_int_list</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.HolonomyGroup.longitude" title="Link to this definition"></a></dt>
556
+ <dd><p>Returns a word representing a conjugate of the current
557
+ longitude for the given cusp. Guaranteed to commute with the
558
+ meridian for the same cusp. Note: for Klein bottle cusps,
559
+ the longitude must be defined carefully.</p>
560
+ <div class="doctest 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">Manifold</span><span class="p">(</span><span class="s1">&#39;m004&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">fundamental_group</span><span class="p">()</span>
561
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span><span class="o">.</span><span class="n">longitude</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
562
+ <span class="go">&#39;aBAbABab&#39;</span>
563
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span><span class="o">.</span><span class="n">longitude</span><span class="p">()</span> <span class="c1"># shortcut for the above.</span>
564
+ <span class="go">&#39;aBAbABab&#39;</span>
565
+ </pre></div>
566
+ </div>
567
+ </dd></dl>
568
+
569
+ <dl class="py method">
570
+ <dt class="sig sig-object py" id="snappy.HolonomyGroup.magma_string">
571
+ <span class="sig-name descname"><span class="pre">magma_string</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.HolonomyGroup.magma_string" title="Link to this definition"></a></dt>
572
+ <dd><p>Returns a string which will define this group within MAGMA.</p>
573
+ </dd></dl>
574
+
575
+ <dl class="py method">
576
+ <dt class="sig sig-object py" id="snappy.HolonomyGroup.meridian">
577
+ <span class="sig-name descname"><span class="pre">meridian</span></span><span class="sig-paren">(</span><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">as_int_list</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.HolonomyGroup.meridian" title="Link to this definition"></a></dt>
578
+ <dd><p>Returns a word representing a conjugate of the current
579
+ meridian for the given cusp. Guaranteed to commute with the
580
+ longitude for the same cusp.</p>
581
+ <div class="doctest 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">Manifold</span><span class="p">(</span><span class="s1">&#39;m125&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">fundamental_group</span><span class="p">()</span>
582
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span><span class="o">.</span><span class="n">meridian</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
583
+ <span class="go">&#39;aaba&#39;</span>
584
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span><span class="o">.</span><span class="n">meridian</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="c1"># The last cusp</span>
585
+ <span class="go">&#39;baaba&#39;</span>
586
+ </pre></div>
587
+ </div>
588
+ </dd></dl>
589
+
590
+ <dl class="py method">
591
+ <dt class="sig sig-object py" id="snappy.HolonomyGroup.num_generators">
592
+ <span class="sig-name descname"><span class="pre">num_generators</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.HolonomyGroup.num_generators" title="Link to this definition"></a></dt>
593
+ <dd><p>Return the number of generators for the presentation.</p>
594
+ </dd></dl>
595
+
596
+ <dl class="py method">
597
+ <dt class="sig sig-object py" id="snappy.HolonomyGroup.num_original_generators">
598
+ <span class="sig-name descname"><span class="pre">num_original_generators</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.HolonomyGroup.num_original_generators" title="Link to this definition"></a></dt>
599
+ <dd><p>Return the number of geometric generators (before simplification).</p>
600
+ </dd></dl>
601
+
602
+ <dl class="py method">
603
+ <dt class="sig sig-object py" id="snappy.HolonomyGroup.num_relators">
604
+ <span class="sig-name descname"><span class="pre">num_relators</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.HolonomyGroup.num_relators" title="Link to this definition"></a></dt>
605
+ <dd><p>Return the number of generators for the presentation.</p>
606
+ </dd></dl>
607
+
608
+ <dl class="py method">
609
+ <dt class="sig sig-object py" id="snappy.HolonomyGroup.original_generators">
610
+ <span class="sig-name descname"><span class="pre">original_generators</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">verbose_form</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">as_int_list</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.HolonomyGroup.original_generators" title="Link to this definition"></a></dt>
611
+ <dd><p>Return the original geometric generators (before
612
+ simplification) in terms of the current generators.</p>
613
+ <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;v0000&#39;</span><span class="p">)</span>
614
+ <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>
615
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">G</span><span class="o">.</span><span class="n">original_generators</span><span class="p">(</span><span class="n">as_int_list</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
616
+ <span class="go">[[1], [-1, -2, 1, 2], [-1, 2], [-2, -1, 2], [2]]</span>
617
+ </pre></div>
618
+ </div>
619
+ </dd></dl>
620
+
621
+ <dl class="py method">
622
+ <dt class="sig sig-object py" id="snappy.HolonomyGroup.parent">
623
+ <span class="sig-name descname"><span class="pre">parent</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.HolonomyGroup.parent" title="Link to this definition"></a></dt>
624
+ <dd><p>File: sage/structure/sage_object.pyx (starting at line 549)</p>
625
+ <p>Return the type of <code class="docutils literal notranslate"><span class="pre">self</span></code> to support the coercion framework.</p>
626
+ <p>EXAMPLES:</p>
627
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: t = log(sqrt(2) - 1) + log(sqrt(2) + 1); t # needs sage.symbolic
628
+ log(sqrt(2) + 1) + log(sqrt(2) - 1)
629
+ sage: u = t.maxima_methods() # needs sage.symbolic
630
+ sage: u.parent() # needs sage.symbolic
631
+ &lt;class &#39;sage.symbolic.maxima_wrapper.MaximaWrapper&#39;&gt;
632
+ </pre></div>
633
+ </div>
634
+ </dd></dl>
635
+
636
+ <dl class="py method">
637
+ <dt class="sig sig-object py" id="snappy.HolonomyGroup.peripheral_curves">
638
+ <span class="sig-name descname"><span class="pre">peripheral_curves</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">as_int_list</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.HolonomyGroup.peripheral_curves" title="Link to this definition"></a></dt>
639
+ <dd><p>Returns a list of meridian-longitude pairs for all cusps.</p>
640
+ <div class="doctest 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">Manifold</span><span class="p">(</span><span class="s1">&#39;m125&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">fundamental_group</span><span class="p">()</span>
641
+ <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>
642
+ <span class="go">[(&#39;aaba&#39;, &#39;abb&#39;), (&#39;baaba&#39;, &#39;Ba&#39;)]</span>
643
+ </pre></div>
644
+ </div>
645
+ </dd></dl>
646
+
647
+ <dl class="py method">
648
+ <dt class="sig sig-object py" id="snappy.HolonomyGroup.relators">
649
+ <span class="sig-name descname"><span class="pre">relators</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">verbose_form</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">as_int_list</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.HolonomyGroup.relators" title="Link to this definition"></a></dt>
650
+ <dd><p>Return a list of words representing the relators in the presentation.</p>
651
+ <p>If the optional argument verbose_form is True, then the
652
+ relator is returned in the form “a*b*a^-1*b^-1” instead of “abAB”.</p>
653
+ </dd></dl>
654
+
655
+ <dl class="py method">
656
+ <dt class="sig sig-object py" id="snappy.HolonomyGroup.rename">
657
+ <span class="sig-name descname"><span class="pre">rename</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</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.HolonomyGroup.rename" title="Link to this definition"></a></dt>
658
+ <dd><p>File: sage/structure/sage_object.pyx (starting at line 68)</p>
659
+ <p>Change <code class="docutils literal notranslate"><span class="pre">self</span></code> so it prints as x, where x is a string.</p>
660
+ <p>If x is <code class="docutils literal notranslate"><span class="pre">None</span></code>, the existing custom name is removed.</p>
661
+ <div class="admonition note">
662
+ <p class="admonition-title">Note</p>
663
+ <p>This is <em>only</em> supported for Python classes that derive
664
+ from SageObject.</p>
665
+ </div>
666
+ <p>EXAMPLES:</p>
667
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">x</span> <span class="o">=</span> <span class="n">PolynomialRing</span><span class="p">(</span><span class="n">QQ</span><span class="p">,</span> <span class="s1">&#39;x&#39;</span><span class="p">,</span> <span class="n">sparse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="o">.</span><span class="n">gen</span><span class="p">()</span>
668
+ <span class="n">sage</span><span class="p">:</span> <span class="n">g</span> <span class="o">=</span> <span class="n">x</span><span class="o">^</span><span class="mi">3</span> <span class="o">+</span> <span class="n">x</span> <span class="o">-</span> <span class="mi">5</span>
669
+ <span class="n">sage</span><span class="p">:</span> <span class="n">g</span>
670
+ <span class="n">x</span><span class="o">^</span><span class="mi">3</span> <span class="o">+</span> <span class="n">x</span> <span class="o">-</span> <span class="mi">5</span>
671
+ <span class="n">sage</span><span class="p">:</span> <span class="n">g</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="s1">&#39;a polynomial&#39;</span><span class="p">)</span>
672
+ <span class="n">sage</span><span class="p">:</span> <span class="n">g</span>
673
+ <span class="n">a</span> <span class="n">polynomial</span>
674
+ <span class="n">sage</span><span class="p">:</span> <span class="n">g</span> <span class="o">+</span> <span class="n">x</span>
675
+ <span class="n">x</span><span class="o">^</span><span class="mi">3</span> <span class="o">+</span> <span class="mi">2</span><span class="o">*</span><span class="n">x</span> <span class="o">-</span> <span class="mi">5</span>
676
+ <span class="n">sage</span><span class="p">:</span> <span class="n">h</span> <span class="o">=</span> <span class="n">g</span><span class="o">^</span><span class="mi">100</span>
677
+ <span class="n">sage</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="n">h</span><span class="p">)[:</span><span class="mi">20</span><span class="p">]</span>
678
+ <span class="s1">&#39;x^300 + 100*x^298 - &#39;</span>
679
+ <span class="n">sage</span><span class="p">:</span> <span class="n">h</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="s1">&#39;x^300 + ...&#39;</span><span class="p">)</span>
680
+ <span class="n">sage</span><span class="p">:</span> <span class="n">h</span>
681
+ <span class="n">x</span><span class="o">^</span><span class="mi">300</span> <span class="o">+</span> <span class="o">...</span>
682
+ <span class="n">sage</span><span class="p">:</span> <span class="n">g</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
683
+ <span class="n">sage</span><span class="p">:</span> <span class="n">g</span>
684
+ <span class="n">x</span><span class="o">^</span><span class="mi">3</span> <span class="o">+</span> <span class="n">x</span> <span class="o">-</span> <span class="mi">5</span>
685
+ </pre></div>
686
+ </div>
687
+ <p>Real numbers are not Python classes, so rename is not supported:</p>
688
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">a</span> <span class="o">=</span> <span class="mf">3.14</span>
689
+ <span class="n">sage</span><span class="p">:</span> <span class="nb">type</span><span class="p">(</span><span class="n">a</span><span class="p">)</span> <span class="c1"># needs sage.rings.real_mpfr</span>
690
+ <span class="o">&lt;...</span> <span class="s1">&#39;sage.rings.real_mpfr.RealLiteral&#39;</span><span class="o">&gt;</span>
691
+ <span class="n">sage</span><span class="p">:</span> <span class="n">a</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="s1">&#39;pi&#39;</span><span class="p">)</span> <span class="c1"># needs sage.rings.real_mpfr</span>
692
+ <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>
693
+ <span class="o">...</span>
694
+ <span class="ne">NotImplementedError</span><span class="p">:</span> <span class="nb">object</span> <span class="n">does</span> <span class="ow">not</span> <span class="n">support</span> <span class="n">renaming</span><span class="p">:</span> <span class="mf">3.14000000000000</span>
695
+ </pre></div>
696
+ </div>
697
+ <div class="admonition note">
698
+ <p class="admonition-title">Note</p>
699
+ <p>The reason C-extension types are not supported by default
700
+ is if they were then every single one would have to carry
701
+ around an extra attribute, which would be slower and waste
702
+ a lot of memory.</p>
703
+ <p>To support them for a specific class, add a
704
+ <code class="docutils literal notranslate"><span class="pre">cdef</span> <span class="pre">public</span> <span class="pre">_SageObject__custom_name</span></code> attribute.</p>
705
+ </div>
706
+ </dd></dl>
707
+
708
+ <dl class="py method">
709
+ <dt class="sig sig-object py" id="snappy.HolonomyGroup.reset_name">
710
+ <span class="sig-name descname"><span class="pre">reset_name</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.HolonomyGroup.reset_name" title="Link to this definition"></a></dt>
711
+ <dd><p>File: sage/structure/sage_object.pyx (starting at line 131)</p>
712
+ <p>Remove the custom name of an object.</p>
713
+ <p>EXAMPLES:</p>
714
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="n">P</span><span class="o">.&lt;</span><span class="n">x</span><span class="o">&gt;</span> <span class="o">=</span> <span class="n">QQ</span><span class="p">[]</span>
715
+ <span class="n">sage</span><span class="p">:</span> <span class="n">P</span>
716
+ <span class="n">Univariate</span> <span class="n">Polynomial</span> <span class="n">Ring</span> <span class="ow">in</span> <span class="n">x</span> <span class="n">over</span> <span class="n">Rational</span> <span class="n">Field</span>
717
+ <span class="n">sage</span><span class="p">:</span> <span class="n">P</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="s1">&#39;A polynomial ring&#39;</span><span class="p">)</span>
718
+ <span class="n">sage</span><span class="p">:</span> <span class="n">P</span>
719
+ <span class="n">A</span> <span class="n">polynomial</span> <span class="n">ring</span>
720
+ <span class="n">sage</span><span class="p">:</span> <span class="n">P</span><span class="o">.</span><span class="n">reset_name</span><span class="p">()</span>
721
+ <span class="n">sage</span><span class="p">:</span> <span class="n">P</span>
722
+ <span class="n">Univariate</span> <span class="n">Polynomial</span> <span class="n">Ring</span> <span class="ow">in</span> <span class="n">x</span> <span class="n">over</span> <span class="n">Rational</span> <span class="n">Field</span>
723
+ </pre></div>
724
+ </div>
725
+ </dd></dl>
726
+
727
+ <dl class="py method">
728
+ <dt class="sig sig-object py" id="snappy.HolonomyGroup.sage">
729
+ <span class="sig-name descname"><span class="pre">sage</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.HolonomyGroup.sage" title="Link to this definition"></a></dt>
730
+ <dd><p>Returns the corresponding Sage FinitelyPresentedGroup</p>
731
+ </dd></dl>
732
+
733
+ <dl class="py method">
734
+ <dt class="sig sig-object py" id="snappy.HolonomyGroup.save">
735
+ <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">filename</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">compress</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.HolonomyGroup.save" title="Link to this definition"></a></dt>
736
+ <dd><p>File: sage/structure/sage_object.pyx (starting at line 446)</p>
737
+ <p>Save <code class="docutils literal notranslate"><span class="pre">self</span></code> to the given filename.</p>
738
+ <p>EXAMPLES:</p>
739
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sage</span><span class="p">:</span> <span class="c1"># needs sage.symbolic</span>
740
+ <span class="n">sage</span><span class="p">:</span> <span class="n">x</span> <span class="o">=</span> <span class="n">SR</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;x&quot;</span><span class="p">)</span>
741
+ <span class="n">sage</span><span class="p">:</span> <span class="n">f</span> <span class="o">=</span> <span class="n">x</span><span class="o">^</span><span class="mi">3</span> <span class="o">+</span> <span class="mi">5</span>
742
+ <span class="n">sage</span><span class="p">:</span> <span class="kn">from</span> <span class="nn">tempfile</span> <span class="kn">import</span> <span class="n">NamedTemporaryFile</span>
743
+ <span class="n">sage</span><span class="p">:</span> <span class="k">with</span> <span class="n">NamedTemporaryFile</span><span class="p">(</span><span class="n">suffix</span><span class="o">=</span><span class="s1">&#39;.sobj&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">t</span><span class="p">:</span>
744
+ <span class="o">....</span><span class="p">:</span> <span class="n">f</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
745
+ <span class="o">....</span><span class="p">:</span> <span class="n">load</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
746
+ <span class="n">x</span><span class="o">^</span><span class="mi">3</span> <span class="o">+</span> <span class="mi">5</span>
747
+ </pre></div>
748
+ </div>
749
+ </dd></dl>
750
+
751
+ </dd></dl>
752
+
753
+ </section>
754
+ <section id="symmetrygroup">
755
+ <h2>SymmetryGroup<a class="headerlink" href="#symmetrygroup" title="Link to this heading"></a></h2>
756
+ <dl class="py class">
757
+ <dt class="sig sig-object py" id="snappy.SymmetryGroup">
758
+ <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">SymmetryGroup</span></span><a class="headerlink" href="#snappy.SymmetryGroup" title="Link to this definition"></a></dt>
759
+ <dd><p>A SymmetryGroup is a group of self-isometries of hyperbolic
760
+ 3-manifold. Instantiate as follows:</p>
761
+ <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>
762
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">symmetry_group</span><span class="p">()</span>
763
+ <span class="go">D4</span>
764
+ </pre></div>
765
+ </div>
766
+ <dl class="py method">
767
+ <dt class="sig sig-object py" id="snappy.SymmetryGroup.abelian_description">
768
+ <span class="sig-name descname"><span class="pre">abelian_description</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.SymmetryGroup.abelian_description" title="Link to this definition"></a></dt>
769
+ <dd><p>If the symmetry group is abelian, return it as an AbelianGroup</p>
770
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">S</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;v3379&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">symmetry_group</span><span class="p">()</span>
771
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">S</span><span class="o">.</span><span class="n">abelian_description</span><span class="p">()</span>
772
+ <span class="go">Z/2 + Z/2 + Z/2</span>
773
+ </pre></div>
774
+ </div>
775
+ </dd></dl>
776
+
777
+ <dl class="py method">
778
+ <dt class="sig sig-object py" id="snappy.SymmetryGroup.abelianization">
779
+ <span class="sig-name descname"><span class="pre">abelianization</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.SymmetryGroup.abelianization" title="Link to this definition"></a></dt>
780
+ <dd><p>Return the abelianization of the symmetry group</p>
781
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">S</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="o">.</span><span class="n">symmetry_group</span><span class="p">()</span>
782
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">S</span><span class="o">.</span><span class="n">abelianization</span><span class="p">()</span>
783
+ <span class="go">Z/2 + Z/2</span>
784
+ </pre></div>
785
+ </div>
786
+ </dd></dl>
787
+
788
+ <dl class="py method">
789
+ <dt class="sig sig-object py" id="snappy.SymmetryGroup.center">
790
+ <span class="sig-name descname"><span class="pre">center</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.SymmetryGroup.center" title="Link to this definition"></a></dt>
791
+ <dd><p>Return the center of the symmetry group</p>
792
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">S</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="o">.</span><span class="n">symmetry_group</span><span class="p">()</span>
793
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">S</span><span class="o">.</span><span class="n">center</span><span class="p">()</span>
794
+ <span class="go">Z/2</span>
795
+ </pre></div>
796
+ </div>
797
+ </dd></dl>
798
+
799
+ <dl class="py method">
800
+ <dt class="sig sig-object py" id="snappy.SymmetryGroup.commutator_subgroup">
801
+ <span class="sig-name descname"><span class="pre">commutator_subgroup</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.SymmetryGroup.commutator_subgroup" title="Link to this definition"></a></dt>
802
+ <dd><p>Return the commutator subgroup of the SymmetryGroup</p>
803
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">S</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="o">.</span><span class="n">symmetry_group</span><span class="p">()</span>
804
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">S</span>
805
+ <span class="go">D4</span>
806
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">S</span><span class="o">.</span><span class="n">commutator_subgroup</span><span class="p">()</span>
807
+ <span class="go">Z/2</span>
808
+ </pre></div>
809
+ </div>
810
+ </dd></dl>
811
+
812
+ <dl class="py method">
813
+ <dt class="sig sig-object py" id="snappy.SymmetryGroup.direct_product_description">
814
+ <span class="sig-name descname"><span class="pre">direct_product_description</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.SymmetryGroup.direct_product_description" title="Link to this definition"></a></dt>
815
+ <dd><p>If the SymmetryGroup is a nontrivial direct product with at
816
+ least one nonabelian factor, return a pair of SymmetryGroups
817
+ consisting of the (two) factors.</p>
818
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">S</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;s960&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">symmetry_group</span><span class="p">()</span>
819
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">S</span><span class="o">.</span><span class="n">direct_product_description</span><span class="p">()</span>
820
+ <span class="go">(Z/4, D3)</span>
821
+ </pre></div>
822
+ </div>
823
+ </dd></dl>
824
+
825
+ <dl class="py method">
826
+ <dt class="sig sig-object py" id="snappy.SymmetryGroup.is_S5">
827
+ <span class="sig-name descname"><span class="pre">is_S5</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.SymmetryGroup.is_S5" title="Link to this definition"></a></dt>
828
+ <dd><p>Returns whether the group is the symmetric group on five things.</p>
829
+ </dd></dl>
830
+
831
+ <dl class="py method">
832
+ <dt class="sig sig-object py" id="snappy.SymmetryGroup.is_abelian">
833
+ <span class="sig-name descname"><span class="pre">is_abelian</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.SymmetryGroup.is_abelian" title="Link to this definition"></a></dt>
834
+ <dd><p>Return whether the symmetry group is abelian.</p>
835
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">S</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="o">.</span><span class="n">symmetry_group</span><span class="p">()</span>
836
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">S</span><span class="o">.</span><span class="n">is_abelian</span><span class="p">()</span>
837
+ <span class="go">False</span>
838
+ </pre></div>
839
+ </div>
840
+ </dd></dl>
841
+
842
+ <dl class="py method">
843
+ <dt class="sig sig-object py" id="snappy.SymmetryGroup.is_amphicheiral">
844
+ <span class="sig-name descname"><span class="pre">is_amphicheiral</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.SymmetryGroup.is_amphicheiral" title="Link to this definition"></a></dt>
845
+ <dd><p>Return whether the manifold has an orientation reversing symmetry.</p>
846
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">S</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="o">.</span><span class="n">symmetry_group</span><span class="p">()</span>
847
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">S</span><span class="o">.</span><span class="n">is_amphicheiral</span><span class="p">()</span>
848
+ <span class="go">True</span>
849
+ </pre></div>
850
+ </div>
851
+ </dd></dl>
852
+
853
+ <dl class="py method">
854
+ <dt class="sig sig-object py" id="snappy.SymmetryGroup.is_dihedral">
855
+ <span class="sig-name descname"><span class="pre">is_dihedral</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.SymmetryGroup.is_dihedral" title="Link to this definition"></a></dt>
856
+ <dd><p>Return whether the symmetry group is dihedral.</p>
857
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">S</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="o">.</span><span class="n">symmetry_group</span><span class="p">()</span>
858
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">S</span><span class="o">.</span><span class="n">is_dihedral</span><span class="p">()</span>
859
+ <span class="go">True</span>
860
+ </pre></div>
861
+ </div>
862
+ </dd></dl>
863
+
864
+ <dl class="py method">
865
+ <dt class="sig sig-object py" id="snappy.SymmetryGroup.is_direct_product">
866
+ <span class="sig-name descname"><span class="pre">is_direct_product</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.SymmetryGroup.is_direct_product" title="Link to this definition"></a></dt>
867
+ <dd><p>Return whether the SymmetryGroup is a nontrivial direct
868
+ product with at least one nonabelian factor.</p>
869
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">S</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;s960&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">symmetry_group</span><span class="p">()</span>
870
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">S</span><span class="o">.</span><span class="n">is_direct_product</span><span class="p">()</span>
871
+ <span class="go">True</span>
872
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">S</span>
873
+ <span class="go">Z/4 x D3</span>
874
+ </pre></div>
875
+ </div>
876
+ </dd></dl>
877
+
878
+ <dl class="py method">
879
+ <dt class="sig sig-object py" id="snappy.SymmetryGroup.is_full_group">
880
+ <span class="sig-name descname"><span class="pre">is_full_group</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.SymmetryGroup.is_full_group" title="Link to this definition"></a></dt>
881
+ <dd><p>Return whether the full symmetry group has been found.</p>
882
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">S</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="o">.</span><span class="n">symmetry_group</span><span class="p">()</span>
883
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">S</span><span class="o">.</span><span class="n">is_full_group</span><span class="p">()</span>
884
+ <span class="go">True</span>
885
+ </pre></div>
886
+ </div>
887
+ </dd></dl>
888
+
889
+ <dl class="py method">
890
+ <dt class="sig sig-object py" id="snappy.SymmetryGroup.is_invertible_knot">
891
+ <span class="sig-name descname"><span class="pre">is_invertible_knot</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.SymmetryGroup.is_invertible_knot" title="Link to this definition"></a></dt>
892
+ <dd><p>Return whether a one-cusped has a symmetry that acts on the
893
+ cusp via the matrix -I.</p>
894
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">S</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><span class="o">.</span><span class="n">symmetry_group</span><span class="p">()</span>
895
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">S</span><span class="o">.</span><span class="n">is_invertible_knot</span><span class="p">()</span>
896
+ <span class="go">True</span>
897
+ </pre></div>
898
+ </div>
899
+ </dd></dl>
900
+
901
+ <dl class="py method">
902
+ <dt class="sig sig-object py" id="snappy.SymmetryGroup.is_polyhedral">
903
+ <span class="sig-name descname"><span class="pre">is_polyhedral</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.SymmetryGroup.is_polyhedral" title="Link to this definition"></a></dt>
904
+ <dd><p>Returns whether the symmetry group is a (possibly binary)
905
+ polyhedral group.</p>
906
+ </dd></dl>
907
+
908
+ <dl class="py method">
909
+ <dt class="sig sig-object py" id="snappy.SymmetryGroup.isometries">
910
+ <span class="sig-name descname"><span class="pre">isometries</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.SymmetryGroup.isometries" title="Link to this definition"></a></dt>
911
+ <dd><p>Return a detailed list of all the isometries in the symmetry group.</p>
912
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">S</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;s959&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">symmetry_group</span><span class="p">()</span>
913
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">isoms</span> <span class="o">=</span> <span class="n">S</span><span class="o">.</span><span class="n">isometries</span><span class="p">()</span>
914
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">isoms</span><span class="p">[</span><span class="mi">8</span><span class="p">]</span>
915
+ <span class="go">0 -&gt; 1 1 -&gt; 0</span>
916
+ <span class="go">[-1 -1] [ 0 1]</span>
917
+ <span class="go">[ 1 0] [-1 -1]</span>
918
+ <span class="go">Does not extend to link</span>
919
+ </pre></div>
920
+ </div>
921
+ </dd></dl>
922
+
923
+ <dl class="py method">
924
+ <dt class="sig sig-object py" id="snappy.SymmetryGroup.multiply_elements">
925
+ <span class="sig-name descname"><span class="pre">multiply_elements</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">i</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">j</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.SymmetryGroup.multiply_elements" title="Link to this definition"></a></dt>
926
+ <dd><p>Returns the product of group elements i and j. The convention
927
+ is that products of symmetries read right to left. That is,
928
+ the composition (symmetry[i] o symmetry[j]) acts by first
929
+ doing symmetry[j], then symmetry[i].</p>
930
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">S</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="o">.</span><span class="n">symmetry_group</span><span class="p">()</span>
931
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">S</span><span class="o">.</span><span class="n">multiply_elements</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
932
+ <span class="go">1</span>
933
+ </pre></div>
934
+ </div>
935
+ </dd></dl>
936
+
937
+ <dl class="py method">
938
+ <dt class="sig sig-object py" id="snappy.SymmetryGroup.order">
939
+ <span class="sig-name descname"><span class="pre">order</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.SymmetryGroup.order" title="Link to this definition"></a></dt>
940
+ <dd><p>Return the order of the symmetry group</p>
941
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">S</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><span class="o">.</span><span class="n">symmetry_group</span><span class="p">()</span>
942
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">S</span><span class="o">.</span><span class="n">order</span><span class="p">()</span>
943
+ <span class="go">4</span>
944
+ </pre></div>
945
+ </div>
946
+ </dd></dl>
947
+
948
+ <dl class="py method">
949
+ <dt class="sig sig-object py" id="snappy.SymmetryGroup.polyhedral_description">
950
+ <span class="sig-name descname"><span class="pre">polyhedral_description</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.SymmetryGroup.polyhedral_description" title="Link to this definition"></a></dt>
951
+ <dd><p>If the symmetry group is a (possibly binary)
952
+ polyhedral group, return a description of it.</p>
953
+ </dd></dl>
954
+
955
+ </dd></dl>
956
+
957
+ </section>
958
+ <section id="dirichletdomain">
959
+ <h2>DirichletDomain<a class="headerlink" href="#dirichletdomain" title="Link to this heading"></a></h2>
960
+ <dl class="py class">
961
+ <dt class="sig sig-object py" id="snappy.DirichletDomain">
962
+ <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">DirichletDomain</span></span><a class="headerlink" href="#snappy.DirichletDomain" title="Link to this definition"></a></dt>
963
+ <dd><p>A DirichletDomain object represents a Dirichlet Domain of
964
+ a hyperbolic manifold, typically centered at a point which
965
+ is a local maximum of injectivity radius. It will have ideal
966
+ vertices if the manifold is not closed.</p>
967
+ <p>Instantiate as M.dirichlet_domain()
968
+ where M is a Manifold to
969
+ obtain a Dirichlet Domain centered at a point which maximizes
970
+ injectivity radius.</p>
971
+ <p>Other options can be provided to customize the computation, with
972
+ the default values shown here</p>
973
+ <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,-4)&#39;</span><span class="p">)</span>
974
+ <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> <span class="n">displacement</span> <span class="o">=</span> <span class="p">[</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">],</span> <span class="n">centroid_at_origin</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">maximize_injectivity_radius</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
975
+ <span class="go">40 finite vertices, 0 ideal vertices; 60 edges; 22 faces</span>
976
+ </pre></div>
977
+ </div>
978
+ <p>You can also create a Dirichlet Domain from a file listing matrix
979
+ generators for the group, in SnapPea’s “% Generator” format, via</p>
980
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">D</span> <span class="o">=</span> <span class="n">DirichletDomain</span><span class="p">(</span><span class="n">generator_file</span><span class="o">=</span><span class="s1">&#39;test.gens&#39;</span><span class="p">)</span>
981
+ </pre></div>
982
+ </div>
983
+ <p>Or from matrices:</p>
984
+ <div class="doctest 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">Manifold</span><span class="p">(</span><span class="s1">&#39;m004&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">fundamental_group</span><span class="p">(</span><span class="kc">False</span><span class="p">)</span>
985
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">matrices</span> <span class="o">=</span> <span class="p">[</span> <span class="n">G</span><span class="o">.</span><span class="n">O31</span><span class="p">(</span><span class="s1">&#39;a&#39;</span><span class="p">),</span> <span class="n">G</span><span class="o">.</span><span class="n">O31</span><span class="p">(</span><span class="s1">&#39;b&#39;</span><span class="p">),</span> <span class="n">G</span><span class="o">.</span><span class="n">O31</span><span class="p">(</span><span class="s1">&#39;c&#39;</span><span class="p">)</span> <span class="p">]</span> <span class="c1"># Note: some of the matrices contain (near) 0 entries and thus this tests that Object2Real converts small numbers fromatted by pari as &quot;1.0 E-10&quot; (note the pace before &quot;E&quot;) correctly when not in SageMath.</span>
986
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">DirichletDomain</span><span class="p">(</span><span class="n">O31_generators</span> <span class="o">=</span> <span class="n">matrices</span><span class="p">,</span>
987
+ <span class="gp">... </span> <span class="n">maximize_injectivity_radius</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span>
988
+ <span class="go">8 finite vertices, 2 ideal vertices; 20 edges; 12 faces</span>
989
+ </pre></div>
990
+ </div>
991
+ <p>The group elements for the face-pairings of the Dirichlet domain
992
+ can be given as words in the original generators by setting
993
+ <code class="docutils literal notranslate"><span class="pre">include_words</span> <span class="pre">=</span> <span class="pre">True</span></code>.</p>
994
+ <dl class="py method">
995
+ <dt class="sig sig-object py" id="snappy.DirichletDomain.edge_list">
996
+ <span class="sig-name descname"><span class="pre">edge_list</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.DirichletDomain.edge_list" title="Link to this definition"></a></dt>
997
+ <dd><p>Return a list of edges, each represented as a dictionar with keys
998
+ ‘tail_vertex_index’, ‘tip_vertex_index’, ‘edge_class’.</p>
999
+ <p>The index (into vertex_data_list()) to the two vertices at the
1000
+ end of the edge are stored in ‘tail_vertex_index’ and
1001
+ ‘tip_vertex_index’. The index of the edge class this edge
1002
+ belongs to is stored in ‘edge_class’.</p>
1003
+ </dd></dl>
1004
+
1005
+ <dl class="py method">
1006
+ <dt class="sig sig-object py" id="snappy.DirichletDomain.export_stl">
1007
+ <span class="sig-name descname"><span class="pre">export_stl</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">filename</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">model</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'klein'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">cutout</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">num_subdivisions</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">3</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">shrink_factor</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.9</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">cutoff_radius</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.9</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">callback</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.DirichletDomain.export_stl" title="Link to this definition"></a></dt>
1008
+ <dd><p>Export the Dirichlet domain as an stl file suitable for 3d printing.</p>
1009
+ <p>Arguments can be given to modify the model produced:</p>
1010
+ <ul class="simple">
1011
+ <li><p>model=’klein’ - (alt. ‘poincare’) the model of HH^3 to use.</p></li>
1012
+ <li><p>cutout=False - remove the interior of each face</p></li>
1013
+ <li><p>shrink_factor=0.9 - the fraction to cut out of each face</p></li>
1014
+ <li><p>cuttoff_radius=0.9 - maximum rescaling for projection into Poincare model</p></li>
1015
+ <li><p>num_subdivision=3 - number of times to subdivide for the Poincare model</p></li>
1016
+ </ul>
1017
+ <p>For printing domains in the Poincare model, cutoff_radius is critical for avoiding
1018
+ infinitely thin cusps, which cannot be printed.</p>
1019
+ <p>This can take a long time for finely subdivided domains. So we call UI_callback
1020
+ every so often if it is not None.</p>
1021
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">D</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="o">.</span><span class="n">dirichlet_domain</span><span class="p">()</span>
1022
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">D</span><span class="o">.</span><span class="n">export_stl</span><span class="p">(</span><span class="s1">&#39;fig-eight-klein.stl&#39;</span><span class="p">)</span>
1023
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">D</span><span class="o">.</span><span class="n">export_stl</span><span class="p">(</span><span class="s1">&#39;fig-eight-poincare.stl&#39;</span><span class="p">,</span> <span class="n">model</span><span class="o">=</span><span class="s1">&#39;poincare&#39;</span><span class="p">)</span>
1024
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">D</span><span class="o">.</span><span class="n">export_stl</span><span class="p">(</span><span class="s1">&#39;fig-eight-klein-wireframe.stl&#39;</span><span class="p">,</span> <span class="n">cutout</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
1025
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">D</span><span class="o">.</span><span class="n">export_stl</span><span class="p">(</span><span class="s1">&#39;fig-eight-poincare-wireframe.stl&#39;</span><span class="p">,</span> <span class="n">model</span><span class="o">=</span><span class="s1">&#39;poincare&#39;</span><span class="p">,</span> <span class="n">cutout</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
1026
+ </pre></div>
1027
+ </div>
1028
+ </dd></dl>
1029
+
1030
+ <dl class="py method">
1031
+ <dt class="sig sig-object py" id="snappy.DirichletDomain.face_list">
1032
+ <span class="sig-name descname"><span class="pre">face_list</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.DirichletDomain.face_list" title="Link to this definition"></a></dt>
1033
+ <dd><p>Return a list of faces, each represented as a dictionary with
1034
+ keys ‘vertices’, ‘distance’, ‘closest’, ‘hue’, ‘vertex_indices’,
1035
+ ‘edge_indices’, ‘vertex_image_indices’, ‘edge_image_indices’,
1036
+ ‘edge_orientations’.</p>
1037
+ <p>The distance from the origin is the value for ‘distance’, and
1038
+ the value for ‘closest’ is the orthogonal projection of the
1039
+ origin to the plane containing the face. The vertices of each
1040
+ face are listed in clockwise order, as viewed from outside the
1041
+ polyhedron.</p>
1042
+ <p>The coordinates of vertices are stored in ‘vertices’ and the
1043
+ corresponding index into vertex_data_list() is stored in
1044
+ ‘vertex_index’. The indices (in edge_list()) to the edges of
1045
+ the face (also in clockwise order) are stored in
1046
+ ‘edge_indices’ such that the first edge is adjacent to the
1047
+ first and second vertex. The respective value in
1048
+ ‘edge_orientations’ is +/-1 to indicate whether the
1049
+ orientation of the edge induced from the orientation of the face
1050
+ is the same or opposite than the edges orientation.</p>
1051
+ <p>To find the image of a vertex or edge adjacent to a face under
1052
+ the pairing matrix for this face, lookup the index in
1053
+ ‘vertex_image_indices’, respectively, ‘edge_image_indices’ at
1054
+ the respective position.</p>
1055
+ </dd></dl>
1056
+
1057
+ <dl class="py method">
1058
+ <dt class="sig sig-object py" id="snappy.DirichletDomain.in_radius">
1059
+ <span class="sig-name descname"><span class="pre">in_radius</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.DirichletDomain.in_radius" title="Link to this definition"></a></dt>
1060
+ <dd><p>Return the radius of the largest inscribed sphere.</p>
1061
+ </dd></dl>
1062
+
1063
+ <dl class="py method">
1064
+ <dt class="sig sig-object py" id="snappy.DirichletDomain.length_spectrum_dicts">
1065
+ <span class="sig-name descname"><span class="pre">length_spectrum_dicts</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cutoff_length</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1.0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">full_rigor</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">multiplicities</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">user_radius</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">grouped</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.DirichletDomain.length_spectrum_dicts" title="Link to this definition"></a></dt>
1066
+ <dd><p>Return a list of info objects describing the short
1067
+ geodesics up to the specified cutoff length. The keys are
1068
+ ‘length’, ‘parity’, ‘topology’, and ‘multiplicity’. The
1069
+ length is the complex length; the parity specifies whether
1070
+ orientation is preserved; and topology distinguishes between
1071
+ circles and mirrored intervals. Finally, the key ‘matrix’
1072
+ in the fundamental group realizing this element.</p>
1073
+ <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(1,2)&#39;</span><span class="p">)</span>
1074
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">D</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">dirichlet_domain</span><span class="p">(</span><span class="n">maximize_injectivity_radius</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
1075
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">lengths</span> <span class="o">=</span> <span class="n">D</span><span class="o">.</span><span class="n">length_spectrum_dicts</span><span class="p">()</span>
1076
+ <span class="gp">&gt;&gt;&gt; </span><span class="nb">len</span><span class="p">(</span><span class="n">lengths</span><span class="p">)</span>
1077
+ <span class="go">2</span>
1078
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">lengths</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">matrix</span> <span class="ow">in</span> <span class="n">D</span><span class="o">.</span><span class="n">pairing_matrices</span><span class="p">()</span>
1079
+ <span class="go">True</span>
1080
+ </pre></div>
1081
+ </div>
1082
+ <p>If the flag ‘grouped’ is False, then each geodesic is returned as
1083
+ a separate item rather than collating by (length, parity, topology).
1084
+ If the flag ‘multiplicities’ is False, then the geodesics <em>are</em>
1085
+ collated but the multiplicity of each item is set to 0.</p>
1086
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s1">&#39;m003(-3, 1)&#39;</span><span class="p">)</span>
1087
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">D</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">dirichlet_domain</span><span class="p">()</span>
1088
+ <span class="gp">&gt;&gt;&gt; </span><span class="p">[</span><span class="n">g</span><span class="o">.</span><span class="n">multiplicity</span> <span class="k">for</span> <span class="n">g</span> <span class="ow">in</span> <span class="n">D</span><span class="o">.</span><span class="n">length_spectrum_dicts</span><span class="p">()]</span>
1089
+ <span class="go">[3, 3]</span>
1090
+ <span class="gp">&gt;&gt;&gt; </span><span class="p">[</span><span class="n">g</span><span class="o">.</span><span class="n">multiplicity</span> <span class="k">for</span> <span class="n">g</span> <span class="ow">in</span> <span class="n">D</span><span class="o">.</span><span class="n">length_spectrum_dicts</span><span class="p">(</span><span class="n">grouped</span><span class="o">=</span><span class="kc">False</span><span class="p">)]</span>
1091
+ <span class="go">[1, 1, 1, 1, 1, 1]</span>
1092
+ </pre></div>
1093
+ </div>
1094
+ </dd></dl>
1095
+
1096
+ <dl class="py method">
1097
+ <dt class="sig sig-object py" id="snappy.DirichletDomain.manifold">
1098
+ <span class="sig-name descname"><span class="pre">manifold</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.DirichletDomain.manifold" title="Link to this definition"></a></dt>
1099
+ <dd><p>Returns a Manifold computed directly from the Dirichlet
1100
+ domain, regarded as polyhedron with faces identified in pairs.
1101
+ Only works if this gives a manifold not an orbifold.</p>
1102
+ <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;7_3&#39;</span><span class="p">)</span>
1103
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">D</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">dirichlet_domain</span><span class="p">()</span>
1104
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">A</span> <span class="o">=</span> <span class="n">D</span><span class="o">.</span><span class="n">manifold</span><span class="p">()</span>
1105
+ <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">A</span><span class="p">)</span>
1106
+ <span class="go">True</span>
1107
+ </pre></div>
1108
+ </div>
1109
+ </dd></dl>
1110
+
1111
+ <dl class="py method">
1112
+ <dt class="sig sig-object py" id="snappy.DirichletDomain.num_edges">
1113
+ <span class="sig-name descname"><span class="pre">num_edges</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.DirichletDomain.num_edges" title="Link to this definition"></a></dt>
1114
+ <dd><p>Return the number of edges.</p>
1115
+ </dd></dl>
1116
+
1117
+ <dl class="py method">
1118
+ <dt class="sig sig-object py" id="snappy.DirichletDomain.num_faces">
1119
+ <span class="sig-name descname"><span class="pre">num_faces</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.DirichletDomain.num_faces" title="Link to this definition"></a></dt>
1120
+ <dd><p>Return the number of faces.</p>
1121
+ </dd></dl>
1122
+
1123
+ <dl class="py method">
1124
+ <dt class="sig sig-object py" id="snappy.DirichletDomain.num_finite_vertices">
1125
+ <span class="sig-name descname"><span class="pre">num_finite_vertices</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.DirichletDomain.num_finite_vertices" title="Link to this definition"></a></dt>
1126
+ <dd><p>Return the number of finite (non-ideal) vertices.</p>
1127
+ </dd></dl>
1128
+
1129
+ <dl class="py method">
1130
+ <dt class="sig sig-object py" id="snappy.DirichletDomain.num_ideal_vertices">
1131
+ <span class="sig-name descname"><span class="pre">num_ideal_vertices</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.DirichletDomain.num_ideal_vertices" title="Link to this definition"></a></dt>
1132
+ <dd><p>Return the number of ideal vertices.</p>
1133
+ </dd></dl>
1134
+
1135
+ <dl class="py method">
1136
+ <dt class="sig sig-object py" id="snappy.DirichletDomain.num_vertices">
1137
+ <span class="sig-name descname"><span class="pre">num_vertices</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.DirichletDomain.num_vertices" title="Link to this definition"></a></dt>
1138
+ <dd><p>Return the number of vertices.</p>
1139
+ </dd></dl>
1140
+
1141
+ <dl class="py method">
1142
+ <dt class="sig sig-object py" id="snappy.DirichletDomain.out_radius">
1143
+ <span class="sig-name descname"><span class="pre">out_radius</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.DirichletDomain.out_radius" title="Link to this definition"></a></dt>
1144
+ <dd><p>Return the radius of the smallest circubscribed sphere.</p>
1145
+ </dd></dl>
1146
+
1147
+ <dl class="py method">
1148
+ <dt class="sig sig-object py" id="snappy.DirichletDomain.pairing_matrices">
1149
+ <span class="sig-name descname"><span class="pre">pairing_matrices</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.DirichletDomain.pairing_matrices" title="Link to this definition"></a></dt>
1150
+ <dd><p>Returns a list of the O31Matrices which pair the faces of
1151
+ this DirichletDomain.</p>
1152
+ <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;s345&#39;</span><span class="p">)</span>
1153
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">D</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">dirichlet_domain</span><span class="p">()</span>
1154
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">matrices</span> <span class="o">=</span> <span class="n">D</span><span class="o">.</span><span class="n">pairing_matrices</span><span class="p">()</span>
1155
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">D1</span> <span class="o">=</span> <span class="n">DirichletDomain</span><span class="p">(</span><span class="n">O31_generators</span><span class="o">=</span><span class="n">matrices</span><span class="p">)</span>
1156
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span> <span class="o">=</span> <span class="n">D1</span><span class="o">.</span><span class="n">manifold</span><span class="p">()</span>
1157
+ <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>
1158
+ <span class="go">True</span>
1159
+ </pre></div>
1160
+ </div>
1161
+ </dd></dl>
1162
+
1163
+ <dl class="py method">
1164
+ <dt class="sig sig-object py" id="snappy.DirichletDomain.pairing_words">
1165
+ <span class="sig-name descname"><span class="pre">pairing_words</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.DirichletDomain.pairing_words" title="Link to this definition"></a></dt>
1166
+ <dd><p>Group elements which pair the faces of this DirichletDomain
1167
+ as words in the original generators:</p>
1168
+ <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>
1169
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">D</span> <span class="o">=</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>
1170
+ <span class="gp">&gt;&gt;&gt; </span><span class="nb">sorted</span><span class="p">(</span><span class="n">D</span><span class="o">.</span><span class="n">pairing_words</span><span class="p">())</span>
1171
+ <span class="go">[&#39;A&#39;, ...]</span>
1172
+ </pre></div>
1173
+ </div>
1174
+ <p>Requires that DirichletDomain was computed with
1175
+ include_words = True.</p>
1176
+ </dd></dl>
1177
+
1178
+ <dl class="py method">
1179
+ <dt class="sig sig-object py" id="snappy.DirichletDomain.save">
1180
+ <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">filename</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.DirichletDomain.save" title="Link to this definition"></a></dt>
1181
+ <dd><p>Save the Dirichlet domain as a text file in “% Generators” format.</p>
1182
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">snappy.number</span> <span class="kn">import</span> <span class="n">Number</span>
1183
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">acc</span><span class="p">,</span> <span class="n">Number</span><span class="o">.</span><span class="n">_accuracy_for_testing</span> <span class="o">=</span> <span class="n">Number</span><span class="o">.</span><span class="n">_accuracy_for_testing</span><span class="p">,</span> <span class="kc">None</span>
1184
+ <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>
1185
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">D</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">dirichlet_domain</span><span class="p">()</span>
1186
+ <span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">tempfile</span> <span class="kn">import</span> <span class="n">NamedTemporaryFile</span>
1187
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">f</span> <span class="o">=</span> <span class="n">NamedTemporaryFile</span><span class="p">(</span><span class="n">delete</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
1188
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
1189
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">D</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">f</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
1190
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">E</span> <span class="o">=</span> <span class="n">DirichletDomain</span><span class="p">(</span><span class="n">generator_file</span><span class="o">=</span><span class="n">f</span><span class="o">.</span><span class="n">name</span><span class="p">);</span> <span class="n">E</span>
1191
+ <span class="go">30 finite vertices, 2 ideal vertices; 50 edges; 20 faces</span>
1192
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">os</span><span class="o">.</span><span class="n">unlink</span><span class="p">(</span><span class="n">f</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
1193
+ <span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">pickle</span> <span class="kn">import</span> <span class="n">dumps</span><span class="p">,</span> <span class="n">loads</span>
1194
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">E</span> <span class="o">=</span> <span class="n">loads</span><span class="p">(</span><span class="n">dumps</span><span class="p">(</span><span class="n">D</span><span class="p">));</span> <span class="n">E</span>
1195
+ <span class="go">30 finite vertices, 2 ideal vertices; 50 edges; 20 faces</span>
1196
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">Number</span><span class="o">.</span><span class="n">_accuracy_for_testing</span> <span class="o">=</span> <span class="n">acc</span>
1197
+ </pre></div>
1198
+ </div>
1199
+ </dd></dl>
1200
+
1201
+ <dl class="py method">
1202
+ <dt class="sig sig-object py" id="snappy.DirichletDomain.spine_radius">
1203
+ <span class="sig-name descname"><span class="pre">spine_radius</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.DirichletDomain.spine_radius" title="Link to this definition"></a></dt>
1204
+ <dd><p>Return the infimum of the radii (measured from the origin) of all
1205
+ spines dual to the Dirichlet domain.</p>
1206
+ </dd></dl>
1207
+
1208
+ <dl class="py method">
1209
+ <dt class="sig sig-object py" id="snappy.DirichletDomain.triangulation">
1210
+ <span class="sig-name descname"><span class="pre">triangulation</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.DirichletDomain.triangulation" title="Link to this definition"></a></dt>
1211
+ <dd><p>Returns a Triangulation computed directly from the Dirichlet
1212
+ domain, regarded as polyhedron with faces identified in pairs.
1213
+ Only works if this gives a manifold not an orbifold.</p>
1214
+ <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;7_3&#39;</span><span class="p">)</span>
1215
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">D</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">dirichlet_domain</span><span class="p">()</span>
1216
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">B</span> <span class="o">=</span> <span class="n">D</span><span class="o">.</span><span class="n">triangulation</span><span class="p">()</span>
1217
+ <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">B</span><span class="o">.</span><span class="n">with_hyperbolic_structure</span><span class="p">())</span>
1218
+ <span class="go">True</span>
1219
+ </pre></div>
1220
+ </div>
1221
+ </dd></dl>
1222
+
1223
+ <dl class="py method">
1224
+ <dt class="sig sig-object py" id="snappy.DirichletDomain.vertex_list">
1225
+ <span class="sig-name descname"><span class="pre">vertex_list</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">details</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.DirichletDomain.vertex_list" title="Link to this definition"></a></dt>
1226
+ <dd><p>Return a list of the coordinates of the vertices. These are
1227
+ the three space coordinates of a point in the time=1 slice of
1228
+ Minkowski space. That is to say, these are the coordinates of
1229
+ the image of the point under projection into the Klein model.</p>
1230
+ <p>If <cite>details = True</cite> is passed, returns a list of vertices,
1231
+ each represented by a dictionary with keys ‘position’,
1232
+ ‘ideal’, ‘vertex_class’. The coordinates are the value for
1233
+ ‘position’. The index of the vertex class this vertex belongs
1234
+ to is the value for ‘vertex_class’. The value for ‘ideal’
1235
+ is True if the vertex is an ideal point.</p>
1236
+ </dd></dl>
1237
+
1238
+ <dl class="py method">
1239
+ <dt class="sig sig-object py" id="snappy.DirichletDomain.volume">
1240
+ <span class="sig-name descname"><span class="pre">volume</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.DirichletDomain.volume" title="Link to this definition"></a></dt>
1241
+ <dd><p>Returns the approximate volume of the DirichletDomain.
1242
+ Because matrices in O(3,1) tend to accumulate roundoff error,
1243
+ it’s hard to get a good bound on the accuracy of the computed
1244
+ volume. Nevertheless, the kernel computes the best value it
1245
+ can, with the hope that it will aid the user in recognizing
1246
+ manifolds defined by a set of generators.</p>
1247
+ </dd></dl>
1248
+
1249
+ </dd></dl>
1250
+
1251
+ </section>
1252
+ <section id="cuspneighborhood">
1253
+ <h2>CuspNeighborhood<a class="headerlink" href="#cuspneighborhood" title="Link to this heading"></a></h2>
1254
+ <dl class="py class">
1255
+ <dt class="sig sig-object py" id="snappy.CuspNeighborhood">
1256
+ <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">CuspNeighborhood</span></span><a class="headerlink" href="#snappy.CuspNeighborhood" title="Link to this definition"></a></dt>
1257
+ <dd><p>A CuspNeighborhood object represents an equivariant collection of
1258
+ disjoint horoballs that project to cusp neighborhoods.</p>
1259
+ <p>Instantiate as M.cusp_neighborhood()</p>
1260
+ <dl class="py method">
1261
+ <dt class="sig sig-object py" id="snappy.CuspNeighborhood.Ford_domain">
1262
+ <span class="sig-name descname"><span class="pre">Ford_domain</span></span><span class="sig-paren">(</span><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">high_precision</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.CuspNeighborhood.Ford_domain" title="Link to this definition"></a></dt>
1263
+ <dd><p>Return a list of pairs of complex numbers describing the
1264
+ endpoints of the segments obtained by projecting the edges of
1265
+ the Ford domain to the xy-plane in the upper half space model.</p>
1266
+ <p>If the high_precision flag is set to False (the default), the
1267
+ coordinates are Python complex numbers. Otherwise they are
1268
+ SnapPy Numbers.</p>
1269
+ </dd></dl>
1270
+
1271
+ <dl class="py method">
1272
+ <dt class="sig sig-object py" id="snappy.CuspNeighborhood.all_translations">
1273
+ <span class="sig-name descname"><span class="pre">all_translations</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">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.CuspNeighborhood.all_translations" title="Link to this definition"></a></dt>
1274
+ <dd><p>Returns the (complex) Euclidean translations of the meridian
1275
+ and longitude for each cusp measured with respect to the cusp neighborhood.</p>
1276
+ <p>The result is a list of pairs, the second entry corresponding to a
1277
+ longitude is always real:</p>
1278
+ <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;v3227&quot;</span><span class="p">)</span>
1279
+ <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">cusp_neighborhood</span><span class="p">()</span>
1280
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">all_translations</span><span class="p">()</span>
1281
+ <span class="go">[(-0.152977162509284 + 0.747697694854404*I, 0.868692062725708), (-0.152977162509284 + 0.747697694854404*I, 0.868692062725708), (0.0961611977895952 + 0.725536253181650*I, 0.895226186134782)]</span>
1282
+ </pre></div>
1283
+ </div>
1284
+ <p>Often, one is interested in making the cusp neighborhoods as large as possible first:</p>
1285
+ <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">set_displacement</span><span class="p">(</span><span class="mi">100</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span>
1286
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">set_displacement</span><span class="p">(</span><span class="mi">100</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
1287
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">set_displacement</span><span class="p">(</span><span class="mi">100</span><span class="p">,</span><span class="mi">2</span><span class="p">)</span>
1288
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">all_translations</span><span class="p">()</span>
1289
+ <span class="go">[(-0.477656250512815 + 2.33461303362557*I, 2.71240613125259), (-0.259696455247511 + 1.26930345526993*I, 1.47470541152065), (0.131389112265699 + 0.991330873713731*I, 1.22318540718077)]</span>
1290
+ </pre></div>
1291
+ </div>
1292
+ <p>This can also be achieved by <a class="reference internal" href="manifold.html#snappy.Manifold.cusp_translations" title="snappy.Manifold.cusp_translations"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Manifold.cusp_translations()</span></code></a> which
1293
+ would have made a different choice of disjoint cusp neighborhoods though:</p>
1294
+ <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>
1295
+ <span class="go">[(-0.315973594129651 + 1.54436599614183*I, 1.79427928161946), (-0.315973594129649 + 1.54436599614182*I, 1.79427928161946), (0.198620491993677 + 1.49859164484929*I, 1.84908538602825)]</span>
1296
+ </pre></div>
1297
+ </div>
1298
+ <p>This method supports arbitrary precision</p>
1299
+ <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.number</span> <span class="kn">import</span> <span class="n">Number</span>
1300
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">set_displacement</span><span class="p">(</span><span class="mf">1.125</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
1301
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">set_displacement</span><span class="p">(</span><span class="mf">0.515625</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
1302
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">set_displacement</span><span class="p">(</span><span class="mf">0.3125</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
1303
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">N</span><span class="o">.</span><span class="n">all_translations</span><span class="p">(</span><span class="n">bits_prec</span> <span class="o">=</span> <span class="mi">120</span><span class="p">)</span>
1304
+ <span class="go">[(-0.47120283346076781167174343474008914 + 2.3030710375877078211095122873223488*I, 2.6757599281290843845710310925394911), (-0.25618853688042434043044508297577899 + 1.2521580040549576537090841783446072*I, 1.4547854392045669515377748986943560), (0.13143677360753666862808198126761923 + 0.99169047854575721271560179767750893*I, 1.2236291171413362101960100623801910)]</span>
1305
+ </pre></div>
1306
+ </div>
1307
+ <p>and can return verified intervals</p>
1308
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>sage: N.all_translations(verified = True) # doctest: +NUMERIC9
1309
+ [(-0.47120283346? + 2.30307103759?*I, 2.67575992813?), (-0.256188536881? + 1.252158004055?*I, 1.454785439205?), (0.131436773608? + 0.991690478546?*I, 1.2236291171413?)]
1310
+ sage: N.all_translations(verified = True, bits_prec = 120) # doctest: +NUMERIC30
1311
+ [(-0.4712028334607678116717434347401? + 2.3030710375877078211095122873224?*I, 2.6757599281290843845710310925395?), (-0.25618853688042434043044508297578? + 1.25215800405495765370908417834461?*I, 1.454785439204566951537774898694356?), (0.131436773607536668628081981267619? + 0.991690478545757212715601797677509?*I, 1.223629117141336210196010062380191?)]
1312
+ </pre></div>
1313
+ </div>
1314
+ <p>that are guaranteed to contain the true translations of disjoint cusp
1315
+ neighborhoods (the element corresponding to a longitude is always
1316
+ in a <code class="docutils literal notranslate"><span class="pre">RealIntervalField</span></code>). The verified translations might correspond
1317
+ to cusp neighborhoods smaller than the given ones to be able to verify
1318
+ that they are disjoint.</p>
1319
+ <p><strong>Remark:</strong> Since the code is (potentially) non-deterministic, the result of</p>
1320
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span> <span class="n">N</span><span class="o">.</span><span class="n">all_translations</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">i</span><span class="p">]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">M</span><span class="o">.</span><span class="n">num_cusps</span><span class="p">())</span> <span class="p">]</span>
1321
+ </pre></div>
1322
+ </div>
1323
+ <p>is not verified to correspond to disjoint cusp neighborhoods.</p>
1324
+ </dd></dl>
1325
+
1326
+ <dl class="py method">
1327
+ <dt class="sig sig-object py" id="snappy.CuspNeighborhood.check_index">
1328
+ <span class="sig-name descname"><span class="pre">check_index</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">which_cusp</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.CuspNeighborhood.check_index" title="Link to this definition"></a></dt>
1329
+ <dd><p>Raises an IndexError if the cusp index is invalid.</p>
1330
+ </dd></dl>
1331
+
1332
+ <dl class="py method">
1333
+ <dt class="sig sig-object py" id="snappy.CuspNeighborhood.get_displacement">
1334
+ <span class="sig-name descname"><span class="pre">get_displacement</span></span><span class="sig-paren">(</span><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><span class="sig-paren">)</span><a class="headerlink" href="#snappy.CuspNeighborhood.get_displacement" title="Link to this definition"></a></dt>
1335
+ <dd><p>Return the displacement of the horospherical boundary of the
1336
+ specified cusp. The displacement is the hyperbolic distance
1337
+ that the horospherical boundary has been displaced from its
1338
+ “home” position, at which the area of the boundary is
1339
+ 3sqrt(3)/8. (The translates of all of the horospheres are
1340
+ guaranteed to be pairwise disjoint when each cusp has
1341
+ displacement 0.)</p>
1342
+ </dd></dl>
1343
+
1344
+ <dl class="py method">
1345
+ <dt class="sig sig-object py" id="snappy.CuspNeighborhood.get_tie">
1346
+ <span class="sig-name descname"><span class="pre">get_tie</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">which_cusp</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.CuspNeighborhood.get_tie" title="Link to this definition"></a></dt>
1347
+ <dd><p>Return True if the specified cusp is a member of the tied group.
1348
+ The displacements of the tied cusps are all the same.</p>
1349
+ </dd></dl>
1350
+
1351
+ <dl class="py method">
1352
+ <dt class="sig sig-object py" id="snappy.CuspNeighborhood.horoballs">
1353
+ <span class="sig-name descname"><span class="pre">horoballs</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">0.1</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">full_list</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">high_precision</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.CuspNeighborhood.horoballs" title="Link to this definition"></a></dt>
1354
+ <dd><p>Return a list of dictionaries describing the horoballs with
1355
+ height at least cutoff. The keys are ‘center’, ‘radius’, ‘index’.</p>
1356
+ <p>If the high_precision flag is set to the default value False, these
1357
+ are Python complexes and floats. Otherwise they are SnapPy Numbers.</p>
1358
+ </dd></dl>
1359
+
1360
+ <dl class="py method">
1361
+ <dt class="sig sig-object py" id="snappy.CuspNeighborhood.manifold">
1362
+ <span class="sig-name descname"><span class="pre">manifold</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.CuspNeighborhood.manifold" title="Link to this definition"></a></dt>
1363
+ <dd><p>Return a Manifold built from the current canonical triangulation.</p>
1364
+ </dd></dl>
1365
+
1366
+ <dl class="py method">
1367
+ <dt class="sig sig-object py" id="snappy.CuspNeighborhood.max_reach">
1368
+ <span class="sig-name descname"><span class="pre">max_reach</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.CuspNeighborhood.max_reach" title="Link to this definition"></a></dt>
1369
+ <dd><p>Return the maximum reach over all cusps.</p>
1370
+ </dd></dl>
1371
+
1372
+ <dl class="py method">
1373
+ <dt class="sig sig-object py" id="snappy.CuspNeighborhood.num_cusps">
1374
+ <span class="sig-name descname"><span class="pre">num_cusps</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#snappy.CuspNeighborhood.num_cusps" title="Link to this definition"></a></dt>
1375
+ <dd><p>Return the number of cusps.</p>
1376
+ </dd></dl>
1377
+
1378
+ <dl class="py method">
1379
+ <dt class="sig sig-object py" id="snappy.CuspNeighborhood.original_index">
1380
+ <span class="sig-name descname"><span class="pre">original_index</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">which_cusp</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.CuspNeighborhood.original_index" title="Link to this definition"></a></dt>
1381
+ <dd><p>Returns the index by which the Manifold identifies this cusp.</p>
1382
+ </dd></dl>
1383
+
1384
+ <dl class="py method">
1385
+ <dt class="sig sig-object py" id="snappy.CuspNeighborhood.reach">
1386
+ <span class="sig-name descname"><span class="pre">reach</span></span><span class="sig-paren">(</span><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><span class="sig-paren">)</span><a class="headerlink" href="#snappy.CuspNeighborhood.reach" title="Link to this definition"></a></dt>
1387
+ <dd><p>Return the displacement at which the specified cusp
1388
+ neighborhood bumps into itself. (This is twice the
1389
+ distance between nearest horoball lifts.)</p>
1390
+ </dd></dl>
1391
+
1392
+ <dl class="py method">
1393
+ <dt class="sig sig-object py" id="snappy.CuspNeighborhood.set_displacement">
1394
+ <span class="sig-name descname"><span class="pre">set_displacement</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">new_displacement</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><span class="sig-paren">)</span><a class="headerlink" href="#snappy.CuspNeighborhood.set_displacement" title="Link to this definition"></a></dt>
1395
+ <dd><p>Set the displacement of the specified cusp.</p>
1396
+ </dd></dl>
1397
+
1398
+ <dl class="py method">
1399
+ <dt class="sig sig-object py" id="snappy.CuspNeighborhood.set_tie">
1400
+ <span class="sig-name descname"><span class="pre">set_tie</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">which_cusp</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">new_tie</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.CuspNeighborhood.set_tie" title="Link to this definition"></a></dt>
1401
+ <dd><p>Mark the specified cusp as a member of the tied group.</p>
1402
+ </dd></dl>
1403
+
1404
+ <dl class="py method">
1405
+ <dt class="sig sig-object py" id="snappy.CuspNeighborhood.stopper">
1406
+ <span class="sig-name descname"><span class="pre">stopper</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">which_cusp</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.CuspNeighborhood.stopper" title="Link to this definition"></a></dt>
1407
+ <dd><p>Return the index of the cusp which will be the first one that
1408
+ the specified cusp neighborhood bumps into.
1409
+ (Assumes the other displacements are fixed.)</p>
1410
+ </dd></dl>
1411
+
1412
+ <dl class="py method">
1413
+ <dt class="sig sig-object py" id="snappy.CuspNeighborhood.stopping_displacement">
1414
+ <span class="sig-name descname"><span class="pre">stopping_displacement</span></span><span class="sig-paren">(</span><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><span class="sig-paren">)</span><a class="headerlink" href="#snappy.CuspNeighborhood.stopping_displacement" title="Link to this definition"></a></dt>
1415
+ <dd><p>Return the displacement at which the specified cusp
1416
+ neighborhood bumps into itself or another cusp neighborhood.
1417
+ (Assumes the other displacements are fixed.)</p>
1418
+ </dd></dl>
1419
+
1420
+ <dl class="py method">
1421
+ <dt class="sig sig-object py" id="snappy.CuspNeighborhood.topology">
1422
+ <span class="sig-name descname"><span class="pre">topology</span></span><span class="sig-paren">(</span><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><span class="sig-paren">)</span><a class="headerlink" href="#snappy.CuspNeighborhood.topology" title="Link to this definition"></a></dt>
1423
+ <dd><p>Return the topological type of the specified cusp.</p>
1424
+ </dd></dl>
1425
+
1426
+ <dl class="py method">
1427
+ <dt class="sig sig-object py" id="snappy.CuspNeighborhood.translations">
1428
+ <span class="sig-name descname"><span class="pre">translations</span></span><span class="sig-paren">(</span><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><span class="sig-paren">)</span><a class="headerlink" href="#snappy.CuspNeighborhood.translations" title="Link to this definition"></a></dt>
1429
+ <dd><p>Return the (complex) Euclidean translations of the meridian
1430
+ and longitude of the specified cusp.</p>
1431
+ <p>Also see <a class="reference internal" href="#snappy.CuspNeighborhood.all_translations" title="snappy.CuspNeighborhood.all_translations"><code class="xref py py-meth docutils literal notranslate"><span class="pre">CuspNeighborhood.all_translations()</span></code></a> which supports
1432
+ arbitrary precision and verified results.</p>
1433
+ </dd></dl>
1434
+
1435
+ <dl class="py method">
1436
+ <dt class="sig sig-object py" id="snappy.CuspNeighborhood.triangulation">
1437
+ <span class="sig-name descname"><span class="pre">triangulation</span></span><span class="sig-paren">(</span><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">high_precision</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.CuspNeighborhood.triangulation" title="Link to this definition"></a></dt>
1438
+ <dd><p>Return a list of dictionaries describing the endpoints of the
1439
+ segments obtained by projecting the edges of the triangulation
1440
+ dual to the Ford domain into the xy-plane in the upper half
1441
+ space model. The keys are ‘endpoints’ and ‘indices’.</p>
1442
+ </dd></dl>
1443
+
1444
+ <dl class="py method">
1445
+ <dt class="sig sig-object py" id="snappy.CuspNeighborhood.view">
1446
+ <span class="sig-name descname"><span class="pre">view</span></span><span class="sig-paren">(</span><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">cutoff</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.CuspNeighborhood.view" title="Link to this definition"></a></dt>
1447
+ <dd><p>Create a 3D picture of the horoball packing. One can specify
1448
+ which cusp to put at infinity and how large of horoballs to
1449
+ look at, e.g.</p>
1450
+ <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>
1451
+ <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_neighborhood</span><span class="p">()</span>
1452
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">C</span><span class="o">.</span><span class="n">view</span><span class="p">(</span><span class="n">which_cusp</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">cutoff</span><span class="o">=</span><span class="mf">0.2</span><span class="p">)</span>
1453
+ </pre></div>
1454
+ </div>
1455
+ </dd></dl>
1456
+
1457
+ <dl class="py method">
1458
+ <dt class="sig sig-object py" id="snappy.CuspNeighborhood.volume">
1459
+ <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">which_cusp</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#snappy.CuspNeighborhood.volume" title="Link to this definition"></a></dt>
1460
+ <dd><p>Return the volume of the horoball neighborhood of the specified
1461
+ cusp.</p>
1462
+ </dd></dl>
1463
+
1464
+ </dd></dl>
1465
+
1466
+ </section>
1467
+ </section>
1468
+
1469
+
1470
+ </div>
1471
+ </div>
1472
+ <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
1473
+ <a href="triangulation.html" class="btn btn-neutral float-left" title="Triangulation" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
1474
+ <a href="censuses.html" class="btn btn-neutral float-right" title="Census manifolds" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
1475
+ </div>
1476
+
1477
+ <hr/>
1478
+
1479
+ <div role="contentinfo">
1480
+ <p>&#169; Copyright 2009-2025, by Marc Culler, Nathan Dunfield, Matthias Goerner, Jeffrey Weeks and others.</p>
1481
+ </div>
1482
+
1483
+ Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
1484
+ <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
1485
+ provided by <a href="https://readthedocs.org">Read the Docs</a>.
1486
+
1487
+
1488
+ </footer>
1489
+ </div>
1490
+ </div>
1491
+ </section>
1492
+ </div>
1493
+ <script>
1494
+ jQuery(function () {
1495
+ SphinxRtdTheme.Navigation.enable(true);
1496
+ });
1497
+ </script>
1498
+
1499
+ </body>
1331
1500
  </html>