snappy 3.2__cp310-cp310-macosx_10_12_x86_64.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (503) hide show
  1. snappy/CyOpenGL.cpython-310-darwin.so +0 -0
  2. snappy/SnapPy.cpython-310-darwin.so +0 -0
  3. snappy/SnapPy.ico +0 -0
  4. snappy/SnapPy.png +0 -0
  5. snappy/SnapPyHP.cpython-310-darwin.so +0 -0
  6. snappy/__init__.py +760 -0
  7. snappy/app.py +605 -0
  8. snappy/app_menus.py +372 -0
  9. snappy/browser.py +998 -0
  10. snappy/cache.py +25 -0
  11. snappy/canonical.py +249 -0
  12. snappy/cusps/__init__.py +38 -0
  13. snappy/cusps/cusp_area_matrix.py +101 -0
  14. snappy/cusps/cusp_areas_from_matrix.py +173 -0
  15. snappy/cusps/maximal_cusp_area_matrix.py +136 -0
  16. snappy/cusps/test.py +21 -0
  17. snappy/cusps/trig_cusp_area_matrix.py +63 -0
  18. snappy/database.py +454 -0
  19. snappy/db_utilities.py +79 -0
  20. snappy/decorated_isosig.py +710 -0
  21. snappy/dev/__init__.py +0 -0
  22. snappy/dev/extended_ptolemy/__init__.py +8 -0
  23. snappy/dev/extended_ptolemy/closed.py +106 -0
  24. snappy/dev/extended_ptolemy/complexVolumesClosed.py +149 -0
  25. snappy/dev/extended_ptolemy/direct.py +42 -0
  26. snappy/dev/extended_ptolemy/extended.py +406 -0
  27. snappy/dev/extended_ptolemy/giac_helper.py +43 -0
  28. snappy/dev/extended_ptolemy/giac_rur.py +129 -0
  29. snappy/dev/extended_ptolemy/gluing.py +46 -0
  30. snappy/dev/extended_ptolemy/phc_wrapper.py +220 -0
  31. snappy/dev/extended_ptolemy/printMatrices.py +70 -0
  32. snappy/dev/vericlosed/__init__.py +1 -0
  33. snappy/dev/vericlosed/computeApproxHyperbolicStructureNew.py +159 -0
  34. snappy/dev/vericlosed/computeApproxHyperbolicStructureOrb.py +90 -0
  35. snappy/dev/vericlosed/computeVerifiedHyperbolicStructure.py +111 -0
  36. snappy/dev/vericlosed/gimbalLoopFinder.py +130 -0
  37. snappy/dev/vericlosed/hyperbolicStructure.py +313 -0
  38. snappy/dev/vericlosed/krawczykCertifiedEdgeLengthsEngine.py +165 -0
  39. snappy/dev/vericlosed/oneVertexTruncatedComplex.py +122 -0
  40. snappy/dev/vericlosed/orb/__init__.py +1 -0
  41. snappy/dev/vericlosed/orb/orb_solution_for_snappea_finite_triangulation_mac +0 -0
  42. snappy/dev/vericlosed/parseVertexGramMatrixFile.py +47 -0
  43. snappy/dev/vericlosed/polishApproxHyperbolicStructure.py +61 -0
  44. snappy/dev/vericlosed/test.py +54 -0
  45. snappy/dev/vericlosed/truncatedComplex.py +176 -0
  46. snappy/dev/vericlosed/verificationError.py +58 -0
  47. snappy/dev/vericlosed/verifyHyperbolicStructureEngine.py +177 -0
  48. snappy/doc/_images/SnapPy-196.png +0 -0
  49. snappy/doc/_images/geodesics.jpg +0 -0
  50. snappy/doc/_images/m004_paper_plane_on_systole.jpg +0 -0
  51. snappy/doc/_images/m125_paper_plane.jpg +0 -0
  52. snappy/doc/_images/mac.png +0 -0
  53. snappy/doc/_images/o9_00000_systole_paper_plane.jpg +0 -0
  54. snappy/doc/_images/o9_00000_systole_paper_plane_closer.jpg +0 -0
  55. snappy/doc/_images/plink-action.png +0 -0
  56. snappy/doc/_images/ubuntu.png +0 -0
  57. snappy/doc/_images/win7.png +0 -0
  58. snappy/doc/_sources/additional_classes.rst.txt +40 -0
  59. snappy/doc/_sources/bugs.rst.txt +14 -0
  60. snappy/doc/_sources/censuses.rst.txt +51 -0
  61. snappy/doc/_sources/credits.rst.txt +75 -0
  62. snappy/doc/_sources/development.rst.txt +259 -0
  63. snappy/doc/_sources/index.rst.txt +182 -0
  64. snappy/doc/_sources/installing.rst.txt +247 -0
  65. snappy/doc/_sources/manifold.rst.txt +6 -0
  66. snappy/doc/_sources/manifoldhp.rst.txt +46 -0
  67. snappy/doc/_sources/news.rst.txt +355 -0
  68. snappy/doc/_sources/other.rst.txt +25 -0
  69. snappy/doc/_sources/platonic_census.rst.txt +20 -0
  70. snappy/doc/_sources/plink.rst.txt +102 -0
  71. snappy/doc/_sources/ptolemy.rst.txt +66 -0
  72. snappy/doc/_sources/ptolemy_classes.rst.txt +42 -0
  73. snappy/doc/_sources/ptolemy_examples1.rst.txt +298 -0
  74. snappy/doc/_sources/ptolemy_examples2.rst.txt +363 -0
  75. snappy/doc/_sources/ptolemy_examples3.rst.txt +301 -0
  76. snappy/doc/_sources/ptolemy_examples4.rst.txt +61 -0
  77. snappy/doc/_sources/ptolemy_prelim.rst.txt +105 -0
  78. snappy/doc/_sources/screenshots.rst.txt +21 -0
  79. snappy/doc/_sources/snap.rst.txt +87 -0
  80. snappy/doc/_sources/snappy.rst.txt +28 -0
  81. snappy/doc/_sources/spherogram.rst.txt +103 -0
  82. snappy/doc/_sources/todo.rst.txt +47 -0
  83. snappy/doc/_sources/triangulation.rst.txt +11 -0
  84. snappy/doc/_sources/tutorial.rst.txt +49 -0
  85. snappy/doc/_sources/verify.rst.txt +210 -0
  86. snappy/doc/_sources/verify_internals.rst.txt +79 -0
  87. snappy/doc/_static/SnapPy-horizontal-128.png +0 -0
  88. snappy/doc/_static/SnapPy.ico +0 -0
  89. snappy/doc/_static/_sphinx_javascript_frameworks_compat.js +123 -0
  90. snappy/doc/_static/basic.css +925 -0
  91. snappy/doc/_static/css/badge_only.css +1 -0
  92. snappy/doc/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
  93. snappy/doc/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
  94. snappy/doc/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
  95. snappy/doc/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
  96. snappy/doc/_static/css/fonts/fontawesome-webfont.eot +0 -0
  97. snappy/doc/_static/css/fonts/fontawesome-webfont.svg +2671 -0
  98. snappy/doc/_static/css/fonts/fontawesome-webfont.ttf +0 -0
  99. snappy/doc/_static/css/fonts/fontawesome-webfont.woff +0 -0
  100. snappy/doc/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
  101. snappy/doc/_static/css/fonts/lato-bold-italic.woff +0 -0
  102. snappy/doc/_static/css/fonts/lato-bold-italic.woff2 +0 -0
  103. snappy/doc/_static/css/fonts/lato-bold.woff +0 -0
  104. snappy/doc/_static/css/fonts/lato-bold.woff2 +0 -0
  105. snappy/doc/_static/css/fonts/lato-normal-italic.woff +0 -0
  106. snappy/doc/_static/css/fonts/lato-normal-italic.woff2 +0 -0
  107. snappy/doc/_static/css/fonts/lato-normal.woff +0 -0
  108. snappy/doc/_static/css/fonts/lato-normal.woff2 +0 -0
  109. snappy/doc/_static/css/theme.css +4 -0
  110. snappy/doc/_static/doctools.js +156 -0
  111. snappy/doc/_static/documentation_options.js +13 -0
  112. snappy/doc/_static/file.png +0 -0
  113. snappy/doc/_static/fonts/Lato/lato-bold.eot +0 -0
  114. snappy/doc/_static/fonts/Lato/lato-bold.ttf +0 -0
  115. snappy/doc/_static/fonts/Lato/lato-bold.woff +0 -0
  116. snappy/doc/_static/fonts/Lato/lato-bold.woff2 +0 -0
  117. snappy/doc/_static/fonts/Lato/lato-bolditalic.eot +0 -0
  118. snappy/doc/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
  119. snappy/doc/_static/fonts/Lato/lato-bolditalic.woff +0 -0
  120. snappy/doc/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
  121. snappy/doc/_static/fonts/Lato/lato-italic.eot +0 -0
  122. snappy/doc/_static/fonts/Lato/lato-italic.ttf +0 -0
  123. snappy/doc/_static/fonts/Lato/lato-italic.woff +0 -0
  124. snappy/doc/_static/fonts/Lato/lato-italic.woff2 +0 -0
  125. snappy/doc/_static/fonts/Lato/lato-regular.eot +0 -0
  126. snappy/doc/_static/fonts/Lato/lato-regular.ttf +0 -0
  127. snappy/doc/_static/fonts/Lato/lato-regular.woff +0 -0
  128. snappy/doc/_static/fonts/Lato/lato-regular.woff2 +0 -0
  129. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
  130. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
  131. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
  132. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
  133. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
  134. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
  135. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
  136. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
  137. snappy/doc/_static/jquery.js +2 -0
  138. snappy/doc/_static/js/badge_only.js +1 -0
  139. snappy/doc/_static/js/theme.js +1 -0
  140. snappy/doc/_static/js/versions.js +228 -0
  141. snappy/doc/_static/language_data.js +199 -0
  142. snappy/doc/_static/minus.png +0 -0
  143. snappy/doc/_static/plus.png +0 -0
  144. snappy/doc/_static/pygments.css +75 -0
  145. snappy/doc/_static/searchtools.js +620 -0
  146. snappy/doc/_static/snappy_furo.css +33 -0
  147. snappy/doc/_static/snappy_sphinx_rtd_theme.css +42 -0
  148. snappy/doc/_static/sphinx_highlight.js +154 -0
  149. snappy/doc/additional_classes.html +1500 -0
  150. snappy/doc/bugs.html +132 -0
  151. snappy/doc/censuses.html +427 -0
  152. snappy/doc/credits.html +181 -0
  153. snappy/doc/development.html +384 -0
  154. snappy/doc/genindex.html +1331 -0
  155. snappy/doc/index.html +262 -0
  156. snappy/doc/installing.html +346 -0
  157. snappy/doc/manifold.html +3452 -0
  158. snappy/doc/manifoldhp.html +180 -0
  159. snappy/doc/news.html +388 -0
  160. snappy/doc/objects.inv +0 -0
  161. snappy/doc/other.html +161 -0
  162. snappy/doc/platonic_census.html +375 -0
  163. snappy/doc/plink.html +210 -0
  164. snappy/doc/ptolemy.html +254 -0
  165. snappy/doc/ptolemy_classes.html +1144 -0
  166. snappy/doc/ptolemy_examples1.html +409 -0
  167. snappy/doc/ptolemy_examples2.html +471 -0
  168. snappy/doc/ptolemy_examples3.html +414 -0
  169. snappy/doc/ptolemy_examples4.html +195 -0
  170. snappy/doc/ptolemy_prelim.html +248 -0
  171. snappy/doc/py-modindex.html +165 -0
  172. snappy/doc/screenshots.html +141 -0
  173. snappy/doc/search.html +135 -0
  174. snappy/doc/searchindex.js +1 -0
  175. snappy/doc/snap.html +202 -0
  176. snappy/doc/snappy.html +181 -0
  177. snappy/doc/spherogram.html +1211 -0
  178. snappy/doc/todo.html +166 -0
  179. snappy/doc/triangulation.html +1584 -0
  180. snappy/doc/tutorial.html +159 -0
  181. snappy/doc/verify.html +330 -0
  182. snappy/doc/verify_internals.html +1235 -0
  183. snappy/drilling/__init__.py +456 -0
  184. snappy/drilling/barycentric.py +103 -0
  185. snappy/drilling/constants.py +5 -0
  186. snappy/drilling/crush.py +270 -0
  187. snappy/drilling/cusps.py +125 -0
  188. snappy/drilling/debug.py +242 -0
  189. snappy/drilling/epsilons.py +6 -0
  190. snappy/drilling/exceptions.py +55 -0
  191. snappy/drilling/moves.py +620 -0
  192. snappy/drilling/peripheral_curves.py +210 -0
  193. snappy/drilling/perturb.py +188 -0
  194. snappy/drilling/shorten.py +36 -0
  195. snappy/drilling/subdivide.py +274 -0
  196. snappy/drilling/test.py +23 -0
  197. snappy/drilling/test_cases.py +126 -0
  198. snappy/drilling/tracing.py +351 -0
  199. snappy/exceptions.py +26 -0
  200. snappy/export_stl.py +120 -0
  201. snappy/exterior_to_link/__init__.py +2 -0
  202. snappy/exterior_to_link/barycentric_geometry.py +463 -0
  203. snappy/exterior_to_link/exceptions.py +6 -0
  204. snappy/exterior_to_link/geodesic_map.json +14408 -0
  205. snappy/exterior_to_link/hyp_utils.py +112 -0
  206. snappy/exterior_to_link/link_projection.py +323 -0
  207. snappy/exterior_to_link/main.py +197 -0
  208. snappy/exterior_to_link/mcomplex_with_expansion.py +261 -0
  209. snappy/exterior_to_link/mcomplex_with_link.py +687 -0
  210. snappy/exterior_to_link/mcomplex_with_memory.py +162 -0
  211. snappy/exterior_to_link/pl_utils.py +491 -0
  212. snappy/exterior_to_link/put_in_S3.py +156 -0
  213. snappy/exterior_to_link/rational_linear_algebra.py +123 -0
  214. snappy/exterior_to_link/rational_linear_algebra_wrapped.py +135 -0
  215. snappy/exterior_to_link/simplify_to_base_tri.py +114 -0
  216. snappy/exterior_to_link/stored_moves.py +475 -0
  217. snappy/exterior_to_link/test.py +31 -0
  218. snappy/filedialog.py +28 -0
  219. snappy/geometric_structure/__init__.py +212 -0
  220. snappy/geometric_structure/cusp_neighborhood/__init__.py +3 -0
  221. snappy/geometric_structure/cusp_neighborhood/complex_cusp_cross_section.py +697 -0
  222. snappy/geometric_structure/cusp_neighborhood/cusp_cross_section_base.py +484 -0
  223. snappy/geometric_structure/cusp_neighborhood/exceptions.py +42 -0
  224. snappy/geometric_structure/cusp_neighborhood/real_cusp_cross_section.py +298 -0
  225. snappy/geometric_structure/cusp_neighborhood/tiles_for_cusp_neighborhood.py +159 -0
  226. snappy/geometric_structure/cusp_neighborhood/vertices.py +32 -0
  227. snappy/geometric_structure/geodesic/__init__.py +0 -0
  228. snappy/geometric_structure/geodesic/add_core_curves.py +152 -0
  229. snappy/geometric_structure/geodesic/avoid_core_curves.py +369 -0
  230. snappy/geometric_structure/geodesic/canonical_keys.py +52 -0
  231. snappy/geometric_structure/geodesic/check_away_from_core_curve.py +60 -0
  232. snappy/geometric_structure/geodesic/constants.py +6 -0
  233. snappy/geometric_structure/geodesic/exceptions.py +22 -0
  234. snappy/geometric_structure/geodesic/fixed_points.py +93 -0
  235. snappy/geometric_structure/geodesic/geodesic_start_point_info.py +435 -0
  236. snappy/geometric_structure/geodesic/graph_trace_helper.py +67 -0
  237. snappy/geometric_structure/geodesic/line.py +30 -0
  238. snappy/geometric_structure/geodesic/multiplicity.py +127 -0
  239. snappy/geometric_structure/geodesic/tiles_for_geodesic.py +101 -0
  240. snappy/geometric_structure/test.py +22 -0
  241. snappy/gui.py +121 -0
  242. snappy/horoviewer.py +443 -0
  243. snappy/hyperboloid/__init__.py +212 -0
  244. snappy/hyperboloid/distances.py +245 -0
  245. snappy/hyperboloid/horoball.py +19 -0
  246. snappy/hyperboloid/line.py +35 -0
  247. snappy/hyperboloid/point.py +9 -0
  248. snappy/hyperboloid/triangle.py +29 -0
  249. snappy/info_icon.gif +0 -0
  250. snappy/infowindow.py +65 -0
  251. snappy/isometry_signature.py +382 -0
  252. snappy/len_spec/__init__.py +596 -0
  253. snappy/len_spec/geodesic_info.py +110 -0
  254. snappy/len_spec/geodesic_key_info_dict.py +117 -0
  255. snappy/len_spec/geodesic_piece.py +143 -0
  256. snappy/len_spec/geometric_structure.py +182 -0
  257. snappy/len_spec/geometry.py +80 -0
  258. snappy/len_spec/length_spectrum_geodesic_info.py +170 -0
  259. snappy/len_spec/spine.py +206 -0
  260. snappy/len_spec/test.py +24 -0
  261. snappy/len_spec/test_cases.py +69 -0
  262. snappy/len_spec/tile.py +275 -0
  263. snappy/len_spec/word.py +86 -0
  264. snappy/manifolds/HTWKnots/alternating.gz +0 -0
  265. snappy/manifolds/HTWKnots/nonalternating.gz +0 -0
  266. snappy/manifolds/__init__.py +3 -0
  267. snappy/math_basics.py +176 -0
  268. snappy/matrix.py +525 -0
  269. snappy/number.py +657 -0
  270. snappy/numeric_output_checker.py +345 -0
  271. snappy/pari.py +41 -0
  272. snappy/phone_home.py +57 -0
  273. snappy/polyviewer.py +259 -0
  274. snappy/ptolemy/__init__.py +17 -0
  275. snappy/ptolemy/component.py +103 -0
  276. snappy/ptolemy/coordinates.py +2290 -0
  277. snappy/ptolemy/fieldExtensions.py +153 -0
  278. snappy/ptolemy/findLoops.py +473 -0
  279. snappy/ptolemy/geometricRep.py +59 -0
  280. snappy/ptolemy/homology.py +165 -0
  281. snappy/ptolemy/magma/default.magma_template +229 -0
  282. snappy/ptolemy/magma/radicalsOfPrimaryDecomposition.magma_template +79 -0
  283. snappy/ptolemy/manifoldMethods.py +395 -0
  284. snappy/ptolemy/matrix.py +350 -0
  285. snappy/ptolemy/numericalSolutionsToGroebnerBasis.py +113 -0
  286. snappy/ptolemy/polynomial.py +857 -0
  287. snappy/ptolemy/processComponents.py +173 -0
  288. snappy/ptolemy/processFileBase.py +247 -0
  289. snappy/ptolemy/processFileDispatch.py +46 -0
  290. snappy/ptolemy/processMagmaFile.py +392 -0
  291. snappy/ptolemy/processRurFile.py +150 -0
  292. snappy/ptolemy/ptolemyGeneralizedObstructionClass.py +102 -0
  293. snappy/ptolemy/ptolemyObstructionClass.py +64 -0
  294. snappy/ptolemy/ptolemyVariety.py +1029 -0
  295. snappy/ptolemy/ptolemyVarietyPrimeIdealGroebnerBasis.py +140 -0
  296. snappy/ptolemy/reginaWrapper.py +698 -0
  297. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c0.magma_out.bz2 +0 -0
  298. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c1.magma_out.bz2 +0 -0
  299. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c2.magma_out.bz2 +0 -0
  300. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c3.magma_out.bz2 +0 -0
  301. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c4.magma_out.bz2 +0 -0
  302. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c5.magma_out.bz2 +0 -0
  303. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c6.magma_out.bz2 +0 -0
  304. snappy/ptolemy/regina_testing_files/DT_mcbbiceaibjklmdfgh__sl2_c7.magma_out.bz2 +0 -0
  305. snappy/ptolemy/regina_testing_files_generalized/m003__sl3_c0.magma_out.bz2 +0 -0
  306. snappy/ptolemy/regina_testing_files_generalized/m003__sl3_c1.magma_out.bz2 +0 -0
  307. snappy/ptolemy/regina_testing_files_generalized/m015__sl2_c0.magma_out.bz2 +0 -0
  308. snappy/ptolemy/regina_testing_files_generalized/m015__sl2_c1.magma_out.bz2 +0 -0
  309. snappy/ptolemy/regina_testing_files_generalized/m015__sl3_c0.magma_out.bz2 +0 -0
  310. snappy/ptolemy/regina_testing_files_generalized/m015__sl3_c1.magma_out.bz2 +0 -0
  311. snappy/ptolemy/rur.py +545 -0
  312. snappy/ptolemy/solutionsToPrimeIdealGroebnerBasis.py +277 -0
  313. snappy/ptolemy/test.py +1126 -0
  314. snappy/ptolemy/testing_files/3_1__sl2_c0.magma_out.bz2 +0 -0
  315. snappy/ptolemy/testing_files/3_1__sl2_c1.magma_out.bz2 +0 -0
  316. snappy/ptolemy/testing_files/4_1__sl2_c0.magma_out.bz2 +0 -0
  317. snappy/ptolemy/testing_files/4_1__sl2_c1.magma_out.bz2 +0 -0
  318. snappy/ptolemy/testing_files/4_1__sl3_c0.magma_out.bz2 +0 -0
  319. snappy/ptolemy/testing_files/4_1__sl4_c0.magma_out.bz2 +0 -0
  320. snappy/ptolemy/testing_files/4_1__sl4_c1.magma_out.bz2 +0 -0
  321. snappy/ptolemy/testing_files/5_2__sl2_c0.magma_out.bz2 +0 -0
  322. snappy/ptolemy/testing_files/5_2__sl2_c1.magma_out.bz2 +0 -0
  323. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c0.magma_out.bz2 +0 -0
  324. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c1.magma_out.bz2 +0 -0
  325. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c2.magma_out.bz2 +0 -0
  326. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c3.magma_out.bz2 +0 -0
  327. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c4.magma_out.bz2 +0 -0
  328. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c5.magma_out.bz2 +0 -0
  329. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c6.magma_out.bz2 +0 -0
  330. snappy/ptolemy/testing_files/DT_mcbbiceaibjklmdfgh__sl2_c7.magma_out.bz2 +0 -0
  331. snappy/ptolemy/testing_files/data/pgl2/OrientableCuspedCensus/03_tetrahedra/m019__sl2_c0.magma_out +95 -0
  332. snappy/ptolemy/testing_files/data/pgl2/OrientableCuspedCensus/03_tetrahedra/m019__sl2_c1.magma_out +95 -0
  333. snappy/ptolemy/testing_files/m015__sl3_c0.magma_out.bz2 +0 -0
  334. snappy/ptolemy/testing_files/m135__sl2_c0.magma_out.bz2 +0 -0
  335. snappy/ptolemy/testing_files/m135__sl2_c1.magma_out.bz2 +0 -0
  336. snappy/ptolemy/testing_files/m135__sl2_c2.magma_out.bz2 +0 -0
  337. snappy/ptolemy/testing_files/m135__sl2_c3.magma_out.bz2 +0 -0
  338. snappy/ptolemy/testing_files/m135__sl2_c4.magma_out.bz2 +0 -0
  339. snappy/ptolemy/testing_files/m135__sl2_c5.magma_out.bz2 +0 -0
  340. snappy/ptolemy/testing_files/m135__sl2_c6.magma_out.bz2 +0 -0
  341. snappy/ptolemy/testing_files/m135__sl2_c7.magma_out.bz2 +0 -0
  342. snappy/ptolemy/testing_files/s000__sl2_c0.magma_out.bz2 +0 -0
  343. snappy/ptolemy/testing_files/s000__sl2_c1.magma_out.bz2 +0 -0
  344. snappy/ptolemy/testing_files/t00000__sl2_c0.magma_out.bz2 +0 -0
  345. snappy/ptolemy/testing_files/t00000__sl2_c1.magma_out.bz2 +0 -0
  346. snappy/ptolemy/testing_files/v0000__sl2_c0.magma_out.bz2 +0 -0
  347. snappy/ptolemy/testing_files/v0000__sl2_c1.magma_out.bz2 +0 -0
  348. snappy/ptolemy/testing_files/v0000__sl2_c2.magma_out.bz2 +0 -0
  349. snappy/ptolemy/testing_files/v0000__sl2_c3.magma_out.bz2 +0 -0
  350. snappy/ptolemy/testing_files_generalized/m003__sl2_c0.magma_out.bz2 +0 -0
  351. snappy/ptolemy/testing_files_generalized/m003__sl2_c1.magma_out.bz2 +0 -0
  352. snappy/ptolemy/testing_files_generalized/m003__sl3_c0.magma_out.bz2 +0 -0
  353. snappy/ptolemy/testing_files_generalized/m003__sl3_c1.magma_out.bz2 +0 -0
  354. snappy/ptolemy/testing_files_generalized/m004__sl2_c0.magma_out.bz2 +0 -0
  355. snappy/ptolemy/testing_files_generalized/m004__sl2_c1.magma_out.bz2 +0 -0
  356. snappy/ptolemy/testing_files_generalized/m015__sl2_c1.magma_out.bz2 +0 -0
  357. snappy/ptolemy/testing_files_generalized/m015__sl3_c0.magma_out.bz2 +0 -0
  358. snappy/ptolemy/testing_files_rur/m052__sl3_c0.rur.bz2 +0 -0
  359. snappy/ptolemy/utilities.py +236 -0
  360. snappy/raytracing/__init__.py +64 -0
  361. snappy/raytracing/additional_horospheres.py +64 -0
  362. snappy/raytracing/additional_len_spec_choices.py +63 -0
  363. snappy/raytracing/cohomology_fractal.py +197 -0
  364. snappy/raytracing/eyeball.py +123 -0
  365. snappy/raytracing/finite_raytracing_data.py +237 -0
  366. snappy/raytracing/finite_viewer.py +590 -0
  367. snappy/raytracing/geodesic_tube_info.py +174 -0
  368. snappy/raytracing/geodesics.py +246 -0
  369. snappy/raytracing/geodesics_window.py +258 -0
  370. snappy/raytracing/gui_utilities.py +293 -0
  371. snappy/raytracing/hyperboloid_navigation.py +556 -0
  372. snappy/raytracing/hyperboloid_utilities.py +234 -0
  373. snappy/raytracing/ideal_raytracing_data.py +592 -0
  374. snappy/raytracing/inside_viewer.py +974 -0
  375. snappy/raytracing/pack.py +22 -0
  376. snappy/raytracing/raytracing_data.py +126 -0
  377. snappy/raytracing/raytracing_view.py +454 -0
  378. snappy/raytracing/shaders/Eye.png +0 -0
  379. snappy/raytracing/shaders/NonGeometric.png +0 -0
  380. snappy/raytracing/shaders/__init__.py +101 -0
  381. snappy/raytracing/shaders/fragment.glsl +1744 -0
  382. snappy/raytracing/test.py +29 -0
  383. snappy/raytracing/tooltip.py +146 -0
  384. snappy/raytracing/upper_halfspace_utilities.py +98 -0
  385. snappy/raytracing/view_scale_controller.py +98 -0
  386. snappy/raytracing/zoom_slider/__init__.py +263 -0
  387. snappy/raytracing/zoom_slider/inward.png +0 -0
  388. snappy/raytracing/zoom_slider/inward18.png +0 -0
  389. snappy/raytracing/zoom_slider/outward.png +0 -0
  390. snappy/raytracing/zoom_slider/outward18.png +0 -0
  391. snappy/raytracing/zoom_slider/test.py +20 -0
  392. snappy/sage_helper.py +117 -0
  393. snappy/settings.py +409 -0
  394. snappy/shell.py +53 -0
  395. snappy/snap/__init__.py +114 -0
  396. snappy/snap/character_varieties.py +375 -0
  397. snappy/snap/find_field.py +372 -0
  398. snappy/snap/fundamental_polyhedron.py +569 -0
  399. snappy/snap/generators.py +39 -0
  400. snappy/snap/interval_reps.py +81 -0
  401. snappy/snap/kernel_structures.py +128 -0
  402. snappy/snap/mcomplex_base.py +18 -0
  403. snappy/snap/nsagetools.py +702 -0
  404. snappy/snap/peripheral/__init__.py +1 -0
  405. snappy/snap/peripheral/dual_cellulation.py +219 -0
  406. snappy/snap/peripheral/link.py +127 -0
  407. snappy/snap/peripheral/peripheral.py +159 -0
  408. snappy/snap/peripheral/surface.py +522 -0
  409. snappy/snap/peripheral/test.py +35 -0
  410. snappy/snap/polished_reps.py +335 -0
  411. snappy/snap/shapes.py +152 -0
  412. snappy/snap/slice_obs_HKL.py +668 -0
  413. snappy/snap/t3mlite/__init__.py +2 -0
  414. snappy/snap/t3mlite/arrow.py +243 -0
  415. snappy/snap/t3mlite/corner.py +22 -0
  416. snappy/snap/t3mlite/edge.py +172 -0
  417. snappy/snap/t3mlite/face.py +37 -0
  418. snappy/snap/t3mlite/files.py +211 -0
  419. snappy/snap/t3mlite/homology.py +53 -0
  420. snappy/snap/t3mlite/linalg.py +419 -0
  421. snappy/snap/t3mlite/mcomplex.py +1499 -0
  422. snappy/snap/t3mlite/perm4.py +320 -0
  423. snappy/snap/t3mlite/setup.py +12 -0
  424. snappy/snap/t3mlite/simplex.py +199 -0
  425. snappy/snap/t3mlite/spun.py +297 -0
  426. snappy/snap/t3mlite/surface.py +519 -0
  427. snappy/snap/t3mlite/test.py +20 -0
  428. snappy/snap/t3mlite/test_vs_regina.py +86 -0
  429. snappy/snap/t3mlite/tetrahedron.py +109 -0
  430. snappy/snap/t3mlite/vertex.py +42 -0
  431. snappy/snap/test.py +134 -0
  432. snappy/snap/utilities.py +288 -0
  433. snappy/test.py +209 -0
  434. snappy/test_cases.py +263 -0
  435. snappy/testing.py +131 -0
  436. snappy/tiling/__init__.py +2 -0
  437. snappy/tiling/canonical_key_dict.py +59 -0
  438. snappy/tiling/dict_based_set.py +79 -0
  439. snappy/tiling/floor.py +49 -0
  440. snappy/tiling/hyperboloid_dict.py +54 -0
  441. snappy/tiling/iter_utils.py +78 -0
  442. snappy/tiling/lifted_tetrahedron.py +22 -0
  443. snappy/tiling/lifted_tetrahedron_set.py +54 -0
  444. snappy/tiling/real_hash_dict.py +164 -0
  445. snappy/tiling/test.py +23 -0
  446. snappy/tiling/tile.py +215 -0
  447. snappy/tiling/triangle.py +33 -0
  448. snappy/tkterminal.py +920 -0
  449. snappy/twister/__init__.py +20 -0
  450. snappy/twister/main.py +646 -0
  451. snappy/twister/surfaces/S_0_1 +3 -0
  452. snappy/twister/surfaces/S_0_2 +3 -0
  453. snappy/twister/surfaces/S_0_4 +7 -0
  454. snappy/twister/surfaces/S_0_4_Lantern +8 -0
  455. snappy/twister/surfaces/S_1 +3 -0
  456. snappy/twister/surfaces/S_1_1 +4 -0
  457. snappy/twister/surfaces/S_1_2 +5 -0
  458. snappy/twister/surfaces/S_1_2_5 +6 -0
  459. snappy/twister/surfaces/S_2 +6 -0
  460. snappy/twister/surfaces/S_2_1 +8 -0
  461. snappy/twister/surfaces/S_2_heeg +10 -0
  462. snappy/twister/surfaces/S_3 +8 -0
  463. snappy/twister/surfaces/S_3_1 +10 -0
  464. snappy/twister/surfaces/S_4_1 +12 -0
  465. snappy/twister/surfaces/S_5_1 +14 -0
  466. snappy/twister/surfaces/heeg_fig8 +9 -0
  467. snappy/twister/twister_core.cpython-310-darwin.so +0 -0
  468. snappy/upper_halfspace/__init__.py +146 -0
  469. snappy/upper_halfspace/ideal_point.py +26 -0
  470. snappy/verify/__init__.py +13 -0
  471. snappy/verify/canonical.py +542 -0
  472. snappy/verify/complex_volume/__init__.py +18 -0
  473. snappy/verify/complex_volume/adjust_torsion.py +86 -0
  474. snappy/verify/complex_volume/closed.py +168 -0
  475. snappy/verify/complex_volume/compute_ptolemys.py +90 -0
  476. snappy/verify/complex_volume/cusped.py +56 -0
  477. snappy/verify/complex_volume/extended_bloch.py +201 -0
  478. snappy/verify/cusp_translations.py +85 -0
  479. snappy/verify/edge_equations.py +80 -0
  480. snappy/verify/exceptions.py +254 -0
  481. snappy/verify/hyperbolicity.py +224 -0
  482. snappy/verify/interval_newton_shapes_engine.py +523 -0
  483. snappy/verify/interval_tree.py +400 -0
  484. snappy/verify/krawczyk_shapes_engine.py +518 -0
  485. snappy/verify/maximal_cusp_area_matrix/__init__.py +46 -0
  486. snappy/verify/maximal_cusp_area_matrix/cusp_tiling_engine.py +419 -0
  487. snappy/verify/maximal_cusp_area_matrix/cusp_translate_engine.py +153 -0
  488. snappy/verify/real_algebra.py +286 -0
  489. snappy/verify/shapes.py +25 -0
  490. snappy/verify/short_slopes.py +200 -0
  491. snappy/verify/square_extensions.py +1005 -0
  492. snappy/verify/test.py +78 -0
  493. snappy/verify/upper_halfspace/__init__.py +9 -0
  494. snappy/verify/upper_halfspace/extended_matrix.py +100 -0
  495. snappy/verify/upper_halfspace/finite_point.py +283 -0
  496. snappy/verify/upper_halfspace/ideal_point.py +426 -0
  497. snappy/verify/volume.py +128 -0
  498. snappy/version.py +2 -0
  499. snappy-3.2.dist-info/METADATA +58 -0
  500. snappy-3.2.dist-info/RECORD +503 -0
  501. snappy-3.2.dist-info/WHEEL +5 -0
  502. snappy-3.2.dist-info/entry_points.txt +2 -0
  503. snappy-3.2.dist-info/top_level.txt +28 -0
@@ -0,0 +1,1500 @@
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>
1500
+ </html>