snappy 3.1.1__cp38-cp38-win_amd64.whl → 3.2__cp38-cp38-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (476) hide show
  1. snappy/CyOpenGL.cp38-win_amd64.pyd +0 -0
  2. snappy/SnapPy.cp38-win_amd64.pyd +0 -0
  3. snappy/SnapPyHP.cp38-win_amd64.pyd +0 -0
  4. snappy/__init__.py +299 -402
  5. snappy/app.py +70 -20
  6. snappy/browser.py +18 -17
  7. snappy/canonical.py +249 -0
  8. snappy/{verify/cusp_shapes.py → cusps/__init__.py} +8 -18
  9. snappy/cusps/cusp_area_matrix.py +101 -0
  10. snappy/{verify/cusp_areas.py → cusps/cusp_areas_from_matrix.py} +23 -39
  11. snappy/cusps/maximal_cusp_area_matrix.py +136 -0
  12. snappy/cusps/test.py +21 -0
  13. snappy/cusps/trig_cusp_area_matrix.py +63 -0
  14. snappy/database.py +10 -9
  15. snappy/decorated_isosig.py +337 -114
  16. snappy/dev/extended_ptolemy/complexVolumesClosed.py +40 -7
  17. snappy/dev/extended_ptolemy/extended.py +3 -3
  18. snappy/dev/extended_ptolemy/phc_wrapper.py +10 -10
  19. snappy/dev/vericlosed/oneVertexTruncatedComplex.py +1 -1
  20. snappy/doc/_images/m004_paper_plane_on_systole.jpg +0 -0
  21. snappy/doc/_images/m125_paper_plane.jpg +0 -0
  22. snappy/doc/_images/o9_00000_systole_paper_plane.jpg +0 -0
  23. snappy/doc/_images/o9_00000_systole_paper_plane_closer.jpg +0 -0
  24. snappy/doc/_sources/additional_classes.rst.txt +40 -40
  25. snappy/doc/_sources/bugs.rst.txt +14 -14
  26. snappy/doc/_sources/censuses.rst.txt +51 -51
  27. snappy/doc/_sources/credits.rst.txt +75 -75
  28. snappy/doc/_sources/development.rst.txt +259 -239
  29. snappy/doc/_sources/index.rst.txt +182 -115
  30. snappy/doc/_sources/installing.rst.txt +247 -264
  31. snappy/doc/_sources/manifold.rst.txt +6 -6
  32. snappy/doc/_sources/manifoldhp.rst.txt +46 -46
  33. snappy/doc/_sources/news.rst.txt +355 -283
  34. snappy/doc/_sources/other.rst.txt +25 -25
  35. snappy/doc/_sources/platonic_census.rst.txt +20 -20
  36. snappy/doc/_sources/plink.rst.txt +102 -102
  37. snappy/doc/_sources/ptolemy.rst.txt +66 -66
  38. snappy/doc/_sources/ptolemy_classes.rst.txt +42 -42
  39. snappy/doc/_sources/ptolemy_examples1.rst.txt +298 -297
  40. snappy/doc/_sources/ptolemy_examples2.rst.txt +363 -363
  41. snappy/doc/_sources/ptolemy_examples3.rst.txt +301 -301
  42. snappy/doc/_sources/ptolemy_examples4.rst.txt +61 -61
  43. snappy/doc/_sources/ptolemy_prelim.rst.txt +105 -105
  44. snappy/doc/_sources/screenshots.rst.txt +21 -21
  45. snappy/doc/_sources/snap.rst.txt +87 -87
  46. snappy/doc/_sources/snappy.rst.txt +28 -28
  47. snappy/doc/_sources/spherogram.rst.txt +103 -103
  48. snappy/doc/_sources/todo.rst.txt +47 -47
  49. snappy/doc/_sources/triangulation.rst.txt +11 -11
  50. snappy/doc/_sources/tutorial.rst.txt +49 -49
  51. snappy/doc/_sources/verify.rst.txt +210 -150
  52. snappy/doc/_sources/verify_internals.rst.txt +79 -90
  53. snappy/doc/_static/basic.css +924 -902
  54. snappy/doc/_static/css/badge_only.css +1 -1
  55. snappy/doc/_static/css/theme.css +1 -1
  56. snappy/doc/_static/doctools.js +1 -1
  57. snappy/doc/_static/documentation_options.js +12 -13
  58. snappy/doc/_static/fonts/Lato/lato-bold.eot +0 -0
  59. snappy/doc/_static/fonts/Lato/lato-bold.ttf +0 -0
  60. snappy/doc/_static/fonts/Lato/lato-bold.woff +0 -0
  61. snappy/doc/_static/fonts/Lato/lato-bold.woff2 +0 -0
  62. snappy/doc/_static/fonts/Lato/lato-bolditalic.eot +0 -0
  63. snappy/doc/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
  64. snappy/doc/_static/fonts/Lato/lato-bolditalic.woff +0 -0
  65. snappy/doc/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
  66. snappy/doc/_static/fonts/Lato/lato-italic.eot +0 -0
  67. snappy/doc/_static/fonts/Lato/lato-italic.ttf +0 -0
  68. snappy/doc/_static/fonts/Lato/lato-italic.woff +0 -0
  69. snappy/doc/_static/fonts/Lato/lato-italic.woff2 +0 -0
  70. snappy/doc/_static/fonts/Lato/lato-regular.eot +0 -0
  71. snappy/doc/_static/fonts/Lato/lato-regular.ttf +0 -0
  72. snappy/doc/_static/fonts/Lato/lato-regular.woff +0 -0
  73. snappy/doc/_static/fonts/Lato/lato-regular.woff2 +0 -0
  74. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
  75. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
  76. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
  77. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
  78. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
  79. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
  80. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
  81. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
  82. snappy/doc/_static/js/versions.js +228 -0
  83. snappy/doc/_static/language_data.js +199 -199
  84. snappy/doc/_static/pygments.css +74 -73
  85. snappy/doc/_static/searchtools.js +125 -71
  86. snappy/doc/_static/snappy_furo.css +33 -33
  87. snappy/doc/_static/snappy_sphinx_rtd_theme.css +42 -42
  88. snappy/doc/_static/sphinx_highlight.js +13 -3
  89. snappy/doc/additional_classes.html +1499 -1330
  90. snappy/doc/bugs.html +131 -134
  91. snappy/doc/censuses.html +426 -445
  92. snappy/doc/credits.html +180 -183
  93. snappy/doc/development.html +383 -363
  94. snappy/doc/genindex.html +1330 -1409
  95. snappy/doc/index.html +261 -206
  96. snappy/doc/installing.html +345 -363
  97. snappy/doc/manifold.html +3451 -2839
  98. snappy/doc/manifoldhp.html +179 -182
  99. snappy/doc/news.html +387 -329
  100. snappy/doc/objects.inv +0 -0
  101. snappy/doc/other.html +160 -162
  102. snappy/doc/platonic_census.html +374 -377
  103. snappy/doc/plink.html +209 -212
  104. snappy/doc/ptolemy.html +253 -255
  105. snappy/doc/ptolemy_classes.html +1143 -1146
  106. snappy/doc/ptolemy_examples1.html +408 -410
  107. snappy/doc/ptolemy_examples2.html +470 -473
  108. snappy/doc/ptolemy_examples3.html +413 -416
  109. snappy/doc/ptolemy_examples4.html +194 -197
  110. snappy/doc/ptolemy_prelim.html +247 -250
  111. snappy/doc/py-modindex.html +164 -167
  112. snappy/doc/screenshots.html +140 -142
  113. snappy/doc/search.html +134 -137
  114. snappy/doc/searchindex.js +1 -1
  115. snappy/doc/snap.html +201 -204
  116. snappy/doc/snappy.html +180 -182
  117. snappy/doc/spherogram.html +1210 -1213
  118. snappy/doc/todo.html +165 -168
  119. snappy/doc/triangulation.html +1583 -1474
  120. snappy/doc/tutorial.html +158 -161
  121. snappy/doc/verify.html +329 -275
  122. snappy/doc/verify_internals.html +1234 -1691
  123. snappy/drilling/__init__.py +153 -235
  124. snappy/drilling/barycentric.py +103 -0
  125. snappy/drilling/constants.py +0 -2
  126. snappy/drilling/crush.py +56 -130
  127. snappy/drilling/cusps.py +12 -6
  128. snappy/drilling/debug.py +2 -1
  129. snappy/drilling/exceptions.py +7 -40
  130. snappy/drilling/moves.py +302 -243
  131. snappy/drilling/perturb.py +63 -37
  132. snappy/drilling/shorten.py +36 -0
  133. snappy/drilling/subdivide.py +0 -5
  134. snappy/drilling/test.py +23 -0
  135. snappy/drilling/test_cases.py +126 -0
  136. snappy/drilling/tracing.py +9 -37
  137. snappy/exceptions.py +18 -5
  138. snappy/exterior_to_link/barycentric_geometry.py +2 -4
  139. snappy/exterior_to_link/main.py +8 -7
  140. snappy/exterior_to_link/mcomplex_with_link.py +2 -2
  141. snappy/exterior_to_link/rational_linear_algebra.py +1 -1
  142. snappy/exterior_to_link/rational_linear_algebra_wrapped.py +1 -1
  143. snappy/exterior_to_link/test.py +21 -33
  144. snappy/geometric_structure/__init__.py +212 -0
  145. snappy/geometric_structure/cusp_neighborhood/__init__.py +3 -0
  146. snappy/geometric_structure/cusp_neighborhood/complex_cusp_cross_section.py +697 -0
  147. snappy/geometric_structure/cusp_neighborhood/cusp_cross_section_base.py +484 -0
  148. snappy/geometric_structure/cusp_neighborhood/exceptions.py +42 -0
  149. snappy/geometric_structure/cusp_neighborhood/real_cusp_cross_section.py +298 -0
  150. snappy/geometric_structure/cusp_neighborhood/tiles_for_cusp_neighborhood.py +159 -0
  151. snappy/geometric_structure/cusp_neighborhood/vertices.py +32 -0
  152. snappy/geometric_structure/geodesic/__init__.py +0 -0
  153. snappy/geometric_structure/geodesic/add_core_curves.py +152 -0
  154. snappy/geometric_structure/geodesic/avoid_core_curves.py +369 -0
  155. snappy/geometric_structure/geodesic/canonical_keys.py +52 -0
  156. snappy/geometric_structure/geodesic/check_away_from_core_curve.py +60 -0
  157. snappy/geometric_structure/geodesic/constants.py +6 -0
  158. snappy/geometric_structure/geodesic/exceptions.py +22 -0
  159. snappy/{drilling → geometric_structure/geodesic}/fixed_points.py +34 -9
  160. snappy/{drilling/geodesic_info.py → geometric_structure/geodesic/geodesic_start_point_info.py} +139 -180
  161. snappy/geometric_structure/geodesic/graph_trace_helper.py +67 -0
  162. snappy/geometric_structure/geodesic/line.py +30 -0
  163. snappy/geometric_structure/geodesic/multiplicity.py +127 -0
  164. snappy/geometric_structure/geodesic/tiles_for_geodesic.py +101 -0
  165. snappy/geometric_structure/test.py +22 -0
  166. snappy/gui.py +23 -13
  167. snappy/horoviewer.py +7 -7
  168. snappy/hyperboloid/__init__.py +96 -31
  169. snappy/hyperboloid/distances.py +245 -0
  170. snappy/hyperboloid/horoball.py +19 -0
  171. snappy/hyperboloid/line.py +35 -0
  172. snappy/hyperboloid/point.py +9 -0
  173. snappy/hyperboloid/triangle.py +29 -0
  174. snappy/isometry_signature.py +382 -0
  175. snappy/len_spec/__init__.py +596 -0
  176. snappy/len_spec/geodesic_info.py +110 -0
  177. snappy/len_spec/geodesic_key_info_dict.py +117 -0
  178. snappy/len_spec/geodesic_piece.py +143 -0
  179. snappy/len_spec/geometric_structure.py +182 -0
  180. snappy/len_spec/geometry.py +80 -0
  181. snappy/len_spec/length_spectrum_geodesic_info.py +170 -0
  182. snappy/len_spec/spine.py +206 -0
  183. snappy/len_spec/test.py +24 -0
  184. snappy/len_spec/test_cases.py +69 -0
  185. snappy/len_spec/tile.py +275 -0
  186. snappy/len_spec/word.py +86 -0
  187. snappy/math_basics.py +39 -13
  188. snappy/matrix.py +52 -9
  189. snappy/number.py +12 -6
  190. snappy/numeric_output_checker.py +2 -3
  191. snappy/pari.py +8 -4
  192. snappy/phone_home.py +2 -1
  193. snappy/polyviewer.py +8 -8
  194. snappy/ptolemy/__init__.py +1 -1
  195. snappy/ptolemy/component.py +2 -2
  196. snappy/ptolemy/coordinates.py +25 -25
  197. snappy/ptolemy/findLoops.py +9 -9
  198. snappy/ptolemy/manifoldMethods.py +27 -29
  199. snappy/ptolemy/polynomial.py +50 -57
  200. snappy/ptolemy/processFileBase.py +60 -0
  201. snappy/ptolemy/ptolemyVariety.py +109 -41
  202. snappy/ptolemy/reginaWrapper.py +4 -4
  203. snappy/ptolemy/rur.py +1 -1
  204. snappy/ptolemy/solutionsToPrimeIdealGroebnerBasis.py +9 -9
  205. snappy/ptolemy/test.py +99 -54
  206. snappy/ptolemy/utilities.py +1 -1
  207. snappy/raytracing/__init__.py +64 -0
  208. snappy/raytracing/additional_horospheres.py +64 -0
  209. snappy/raytracing/additional_len_spec_choices.py +63 -0
  210. snappy/raytracing/cohomology_fractal.py +0 -3
  211. snappy/raytracing/eyeball.py +123 -0
  212. snappy/raytracing/finite_raytracing_data.py +17 -17
  213. snappy/raytracing/finite_viewer.py +15 -15
  214. snappy/raytracing/geodesic_tube_info.py +93 -63
  215. snappy/raytracing/geodesics.py +94 -64
  216. snappy/raytracing/geodesics_window.py +56 -34
  217. snappy/raytracing/gui_utilities.py +21 -6
  218. snappy/raytracing/hyperboloid_navigation.py +29 -4
  219. snappy/raytracing/hyperboloid_utilities.py +73 -73
  220. snappy/raytracing/ideal_raytracing_data.py +121 -91
  221. snappy/raytracing/inside_viewer.py +199 -66
  222. snappy/raytracing/pack.py +22 -0
  223. snappy/raytracing/raytracing_data.py +37 -25
  224. snappy/raytracing/raytracing_view.py +70 -65
  225. snappy/raytracing/shaders/Eye.png +0 -0
  226. snappy/raytracing/shaders/NonGeometric.png +0 -0
  227. snappy/raytracing/shaders/__init__.py +39 -3
  228. snappy/raytracing/shaders/fragment.glsl +451 -133
  229. snappy/raytracing/test.py +29 -0
  230. snappy/raytracing/tooltip.py +146 -0
  231. snappy/raytracing/upper_halfspace_utilities.py +42 -9
  232. snappy/sage_helper.py +67 -134
  233. snappy/settings.py +90 -77
  234. snappy/shell.py +2 -0
  235. snappy/snap/character_varieties.py +2 -2
  236. snappy/snap/find_field.py +4 -3
  237. snappy/snap/fundamental_polyhedron.py +2 -2
  238. snappy/snap/kernel_structures.py +5 -1
  239. snappy/snap/nsagetools.py +9 -8
  240. snappy/snap/peripheral/dual_cellulation.py +4 -3
  241. snappy/snap/peripheral/peripheral.py +2 -2
  242. snappy/snap/peripheral/surface.py +5 -5
  243. snappy/snap/peripheral/test.py +1 -1
  244. snappy/snap/polished_reps.py +8 -8
  245. snappy/snap/slice_obs_HKL.py +16 -14
  246. snappy/snap/t3mlite/arrow.py +3 -3
  247. snappy/snap/t3mlite/edge.py +3 -3
  248. snappy/snap/t3mlite/homology.py +2 -2
  249. snappy/snap/t3mlite/mcomplex.py +3 -3
  250. snappy/snap/t3mlite/simplex.py +12 -0
  251. snappy/snap/t3mlite/spun.py +18 -17
  252. snappy/snap/t3mlite/test_vs_regina.py +4 -4
  253. snappy/snap/test.py +37 -53
  254. snappy/snap/utilities.py +4 -5
  255. snappy/test.py +121 -138
  256. snappy/test_cases.py +263 -0
  257. snappy/testing.py +131 -0
  258. snappy/tiling/__init__.py +2 -0
  259. snappy/tiling/canonical_key_dict.py +59 -0
  260. snappy/tiling/dict_based_set.py +79 -0
  261. snappy/tiling/floor.py +49 -0
  262. snappy/tiling/hyperboloid_dict.py +54 -0
  263. snappy/tiling/iter_utils.py +78 -0
  264. snappy/tiling/lifted_tetrahedron.py +22 -0
  265. snappy/tiling/lifted_tetrahedron_set.py +54 -0
  266. snappy/tiling/real_hash_dict.py +164 -0
  267. snappy/tiling/test.py +23 -0
  268. snappy/tiling/tile.py +215 -0
  269. snappy/tiling/triangle.py +33 -0
  270. snappy/tkterminal.py +113 -84
  271. snappy/twister/main.py +1 -7
  272. snappy/twister/twister_core.cp38-win_amd64.pyd +0 -0
  273. snappy/upper_halfspace/__init__.py +78 -17
  274. snappy/verify/__init__.py +3 -7
  275. snappy/verify/{verifyCanonical.py → canonical.py} +78 -70
  276. snappy/verify/complex_volume/adjust_torsion.py +1 -2
  277. snappy/verify/complex_volume/closed.py +13 -13
  278. snappy/verify/complex_volume/cusped.py +6 -6
  279. snappy/verify/complex_volume/extended_bloch.py +5 -8
  280. snappy/verify/{cuspTranslations.py → cusp_translations.py} +1 -1
  281. snappy/verify/edge_equations.py +80 -0
  282. snappy/verify/exceptions.py +0 -55
  283. snappy/verify/{verifyHyperbolicity.py → hyperbolicity.py} +3 -3
  284. snappy/verify/interval_newton_shapes_engine.py +7 -5
  285. snappy/verify/interval_tree.py +5 -5
  286. snappy/verify/krawczyk_shapes_engine.py +17 -18
  287. snappy/verify/maximal_cusp_area_matrix/__init__.py +7 -74
  288. snappy/verify/maximal_cusp_area_matrix/cusp_tiling_engine.py +3 -4
  289. snappy/verify/maximal_cusp_area_matrix/cusp_translate_engine.py +1 -1
  290. snappy/verify/{realAlgebra.py → real_algebra.py} +1 -1
  291. snappy/verify/shapes.py +5 -3
  292. snappy/verify/short_slopes.py +39 -41
  293. snappy/verify/{squareExtensions.py → square_extensions.py} +14 -11
  294. snappy/verify/test.py +57 -60
  295. snappy/verify/upper_halfspace/extended_matrix.py +1 -1
  296. snappy/verify/upper_halfspace/finite_point.py +3 -4
  297. snappy/verify/upper_halfspace/ideal_point.py +9 -9
  298. snappy/verify/volume.py +2 -2
  299. snappy/version.py +2 -2
  300. {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/METADATA +14 -10
  301. snappy-3.2.dist-info/RECORD +503 -0
  302. {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/WHEEL +1 -1
  303. {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/top_level.txt +6 -1
  304. snappy/__pycache__/__init__.cpython-38.pyc +0 -0
  305. snappy/__pycache__/browser.cpython-38.pyc +0 -0
  306. snappy/__pycache__/cache.cpython-38.pyc +0 -0
  307. snappy/__pycache__/database.cpython-38.pyc +0 -0
  308. snappy/__pycache__/db_utilities.cpython-38.pyc +0 -0
  309. snappy/__pycache__/decorated_isosig.cpython-38.pyc +0 -0
  310. snappy/__pycache__/exceptions.cpython-38.pyc +0 -0
  311. snappy/__pycache__/export_stl.cpython-38.pyc +0 -0
  312. snappy/__pycache__/filedialog.cpython-38.pyc +0 -0
  313. snappy/__pycache__/gui.cpython-38.pyc +0 -0
  314. snappy/__pycache__/horoviewer.cpython-38.pyc +0 -0
  315. snappy/__pycache__/math_basics.cpython-38.pyc +0 -0
  316. snappy/__pycache__/matrix.cpython-38.pyc +0 -0
  317. snappy/__pycache__/number.cpython-38.pyc +0 -0
  318. snappy/__pycache__/numeric_output_checker.cpython-38.pyc +0 -0
  319. snappy/__pycache__/pari.cpython-38.pyc +0 -0
  320. snappy/__pycache__/polyviewer.cpython-38.pyc +0 -0
  321. snappy/__pycache__/sage_helper.cpython-38.pyc +0 -0
  322. snappy/__pycache__/version.cpython-38.pyc +0 -0
  323. snappy/doc/_sources/verify_canon.rst.txt +0 -90
  324. snappy/doc/_static/jquery-3.6.0.js +0 -10881
  325. snappy/doc/_static/js/html5shiv-printshiv.min.js +0 -4
  326. snappy/doc/_static/js/html5shiv.min.js +0 -4
  327. snappy/doc/_static/underscore-1.13.1.js +0 -2042
  328. snappy/doc/_static/underscore.js +0 -6
  329. snappy/doc/verify_canon.html +0 -304
  330. snappy/drilling/__pycache__/__init__.cpython-38.pyc +0 -0
  331. snappy/drilling/__pycache__/constants.cpython-38.pyc +0 -0
  332. snappy/drilling/__pycache__/crush.cpython-38.pyc +0 -0
  333. snappy/drilling/__pycache__/cusps.cpython-38.pyc +0 -0
  334. snappy/drilling/__pycache__/debug.cpython-38.pyc +0 -0
  335. snappy/drilling/__pycache__/epsilons.cpython-38.pyc +0 -0
  336. snappy/drilling/__pycache__/exceptions.cpython-38.pyc +0 -0
  337. snappy/drilling/__pycache__/fixed_points.cpython-38.pyc +0 -0
  338. snappy/drilling/__pycache__/geodesic_info.cpython-38.pyc +0 -0
  339. snappy/drilling/__pycache__/geodesic_tube.cpython-38.pyc +0 -0
  340. snappy/drilling/__pycache__/geometric_structure.cpython-38.pyc +0 -0
  341. snappy/drilling/__pycache__/line.cpython-38.pyc +0 -0
  342. snappy/drilling/__pycache__/moves.cpython-38.pyc +0 -0
  343. snappy/drilling/__pycache__/peripheral_curves.cpython-38.pyc +0 -0
  344. snappy/drilling/__pycache__/perturb.cpython-38.pyc +0 -0
  345. snappy/drilling/__pycache__/quotient_space.cpython-38.pyc +0 -0
  346. snappy/drilling/__pycache__/spatial_dict.cpython-38.pyc +0 -0
  347. snappy/drilling/__pycache__/subdivide.cpython-38.pyc +0 -0
  348. snappy/drilling/__pycache__/tracing.cpython-38.pyc +0 -0
  349. snappy/drilling/geodesic_tube.py +0 -441
  350. snappy/drilling/geometric_structure.py +0 -366
  351. snappy/drilling/line.py +0 -122
  352. snappy/drilling/quotient_space.py +0 -94
  353. snappy/drilling/spatial_dict.py +0 -128
  354. snappy/exterior_to_link/__pycache__/__init__.cpython-38.pyc +0 -0
  355. snappy/exterior_to_link/__pycache__/barycentric_geometry.cpython-38.pyc +0 -0
  356. snappy/exterior_to_link/__pycache__/exceptions.cpython-38.pyc +0 -0
  357. snappy/exterior_to_link/__pycache__/hyp_utils.cpython-38.pyc +0 -0
  358. snappy/exterior_to_link/__pycache__/link_projection.cpython-38.pyc +0 -0
  359. snappy/exterior_to_link/__pycache__/main.cpython-38.pyc +0 -0
  360. snappy/exterior_to_link/__pycache__/mcomplex_with_expansion.cpython-38.pyc +0 -0
  361. snappy/exterior_to_link/__pycache__/mcomplex_with_link.cpython-38.pyc +0 -0
  362. snappy/exterior_to_link/__pycache__/mcomplex_with_memory.cpython-38.pyc +0 -0
  363. snappy/exterior_to_link/__pycache__/pl_utils.cpython-38.pyc +0 -0
  364. snappy/exterior_to_link/__pycache__/put_in_S3.cpython-38.pyc +0 -0
  365. snappy/exterior_to_link/__pycache__/rational_linear_algebra.cpython-38.pyc +0 -0
  366. snappy/exterior_to_link/__pycache__/simplify_to_base_tri.cpython-38.pyc +0 -0
  367. snappy/exterior_to_link/__pycache__/stored_moves.cpython-38.pyc +0 -0
  368. snappy/hyperboloid/__pycache__/__init__.cpython-38.pyc +0 -0
  369. snappy/manifolds/__pycache__/__init__.cpython-38.pyc +0 -0
  370. snappy/ptolemy/__pycache__/__init__.cpython-38.pyc +0 -0
  371. snappy/ptolemy/__pycache__/component.cpython-38.pyc +0 -0
  372. snappy/ptolemy/__pycache__/coordinates.cpython-38.pyc +0 -0
  373. snappy/ptolemy/__pycache__/fieldExtensions.cpython-38.pyc +0 -0
  374. snappy/ptolemy/__pycache__/findLoops.cpython-38.pyc +0 -0
  375. snappy/ptolemy/__pycache__/homology.cpython-38.pyc +0 -0
  376. snappy/ptolemy/__pycache__/manifoldMethods.cpython-38.pyc +0 -0
  377. snappy/ptolemy/__pycache__/matrix.cpython-38.pyc +0 -0
  378. snappy/ptolemy/__pycache__/numericalSolutionsToGroebnerBasis.cpython-38.pyc +0 -0
  379. snappy/ptolemy/__pycache__/polynomial.cpython-38.pyc +0 -0
  380. snappy/ptolemy/__pycache__/processComponents.cpython-38.pyc +0 -0
  381. snappy/ptolemy/__pycache__/processFileBase.cpython-38.pyc +0 -0
  382. snappy/ptolemy/__pycache__/processFileDispatch.cpython-38.pyc +0 -0
  383. snappy/ptolemy/__pycache__/processMagmaFile.cpython-38.pyc +0 -0
  384. snappy/ptolemy/__pycache__/processRurFile.cpython-38.pyc +0 -0
  385. snappy/ptolemy/__pycache__/ptolemyGeneralizedObstructionClass.cpython-38.pyc +0 -0
  386. snappy/ptolemy/__pycache__/ptolemyObstructionClass.cpython-38.pyc +0 -0
  387. snappy/ptolemy/__pycache__/ptolemyVariety.cpython-38.pyc +0 -0
  388. snappy/ptolemy/__pycache__/ptolemyVarietyPrimeIdealGroebnerBasis.cpython-38.pyc +0 -0
  389. snappy/ptolemy/__pycache__/rur.cpython-38.pyc +0 -0
  390. snappy/ptolemy/__pycache__/solutionsToPrimeIdealGroebnerBasis.cpython-38.pyc +0 -0
  391. snappy/ptolemy/__pycache__/utilities.cpython-38.pyc +0 -0
  392. snappy/snap/__pycache__/__init__.cpython-38.pyc +0 -0
  393. snappy/snap/__pycache__/character_varieties.cpython-38.pyc +0 -0
  394. snappy/snap/__pycache__/fundamental_polyhedron.cpython-38.pyc +0 -0
  395. snappy/snap/__pycache__/interval_reps.cpython-38.pyc +0 -0
  396. snappy/snap/__pycache__/kernel_structures.cpython-38.pyc +0 -0
  397. snappy/snap/__pycache__/mcomplex_base.cpython-38.pyc +0 -0
  398. snappy/snap/__pycache__/nsagetools.cpython-38.pyc +0 -0
  399. snappy/snap/__pycache__/polished_reps.cpython-38.pyc +0 -0
  400. snappy/snap/__pycache__/shapes.cpython-38.pyc +0 -0
  401. snappy/snap/__pycache__/slice_obs_HKL.cpython-38.pyc +0 -0
  402. snappy/snap/__pycache__/utilities.cpython-38.pyc +0 -0
  403. snappy/snap/peripheral/__pycache__/__init__.cpython-38.pyc +0 -0
  404. snappy/snap/peripheral/__pycache__/dual_cellulation.cpython-38.pyc +0 -0
  405. snappy/snap/peripheral/__pycache__/link.cpython-38.pyc +0 -0
  406. snappy/snap/peripheral/__pycache__/peripheral.cpython-38.pyc +0 -0
  407. snappy/snap/peripheral/__pycache__/surface.cpython-38.pyc +0 -0
  408. snappy/snap/t3mlite/__pycache__/__init__.cpython-38.pyc +0 -0
  409. snappy/snap/t3mlite/__pycache__/arrow.cpython-38.pyc +0 -0
  410. snappy/snap/t3mlite/__pycache__/corner.cpython-38.pyc +0 -0
  411. snappy/snap/t3mlite/__pycache__/edge.cpython-38.pyc +0 -0
  412. snappy/snap/t3mlite/__pycache__/face.cpython-38.pyc +0 -0
  413. snappy/snap/t3mlite/__pycache__/files.cpython-38.pyc +0 -0
  414. snappy/snap/t3mlite/__pycache__/homology.cpython-38.pyc +0 -0
  415. snappy/snap/t3mlite/__pycache__/linalg.cpython-38.pyc +0 -0
  416. snappy/snap/t3mlite/__pycache__/mcomplex.cpython-38.pyc +0 -0
  417. snappy/snap/t3mlite/__pycache__/perm4.cpython-38.pyc +0 -0
  418. snappy/snap/t3mlite/__pycache__/simplex.cpython-38.pyc +0 -0
  419. snappy/snap/t3mlite/__pycache__/spun.cpython-38.pyc +0 -0
  420. snappy/snap/t3mlite/__pycache__/surface.cpython-38.pyc +0 -0
  421. snappy/snap/t3mlite/__pycache__/tetrahedron.cpython-38.pyc +0 -0
  422. snappy/snap/t3mlite/__pycache__/vertex.cpython-38.pyc +0 -0
  423. snappy/togl/__init__.py +0 -3
  424. snappy/togl/darwin-tk8.6/Togl2.1/LICENSE +0 -28
  425. snappy/togl/darwin-tk8.6/Togl2.1/libTogl2.1.dylib +0 -0
  426. snappy/togl/darwin-tk8.6/Togl2.1/pkgIndex.tcl +0 -5
  427. snappy/togl/darwin-tk8.7/Togl2.1/LICENSE +0 -28
  428. snappy/togl/darwin-tk8.7/Togl2.1/libTogl2.1.dylib +0 -0
  429. snappy/togl/darwin-tk8.7/Togl2.1/pkgIndex.tcl +0 -5
  430. snappy/togl/linux2-x86_64-tk8.6/Togl2.1/LICENSE +0 -28
  431. snappy/togl/linux2-x86_64-tk8.6/Togl2.1/libTogl2.1.so +0 -0
  432. snappy/togl/linux2-x86_64-tk8.6/Togl2.1/pkgIndex.tcl +0 -5
  433. snappy/togl/win32VC-tk8.6/Togl2.1/LICENSE +0 -28
  434. snappy/togl/win32VC-tk8.6/Togl2.1/Togl21.dll +0 -0
  435. snappy/togl/win32VC-tk8.6/Togl2.1/Togl21.lib +0 -0
  436. snappy/togl/win32VC-tk8.6/Togl2.1/pkgIndex.tcl +0 -6
  437. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/LICENSE +0 -28
  438. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/Togl21.dll +0 -0
  439. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/Togl21.lib +0 -0
  440. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/pkgIndex.tcl +0 -6
  441. snappy/twister/__pycache__/__init__.cpython-38.pyc +0 -0
  442. snappy/twister/__pycache__/main.cpython-38.pyc +0 -0
  443. snappy/upper_halfspace/__pycache__/__init__.cpython-38.pyc +0 -0
  444. snappy/upper_halfspace/__pycache__/ideal_point.cpython-38.pyc +0 -0
  445. snappy/verify/__pycache__/__init__.cpython-38.pyc +0 -0
  446. snappy/verify/__pycache__/cuspCrossSection.cpython-38.pyc +0 -0
  447. snappy/verify/__pycache__/cuspTranslations.cpython-38.pyc +0 -0
  448. snappy/verify/__pycache__/cusp_areas.cpython-38.pyc +0 -0
  449. snappy/verify/__pycache__/cusp_shapes.cpython-38.pyc +0 -0
  450. snappy/verify/__pycache__/exceptions.cpython-38.pyc +0 -0
  451. snappy/verify/__pycache__/interval_newton_shapes_engine.cpython-38.pyc +0 -0
  452. snappy/verify/__pycache__/interval_tree.cpython-38.pyc +0 -0
  453. snappy/verify/__pycache__/krawczyk_shapes_engine.cpython-38.pyc +0 -0
  454. snappy/verify/__pycache__/realAlgebra.cpython-38.pyc +0 -0
  455. snappy/verify/__pycache__/shapes.cpython-38.pyc +0 -0
  456. snappy/verify/__pycache__/short_slopes.cpython-38.pyc +0 -0
  457. snappy/verify/__pycache__/squareExtensions.cpython-38.pyc +0 -0
  458. snappy/verify/__pycache__/verifyCanonical.cpython-38.pyc +0 -0
  459. snappy/verify/__pycache__/verifyHyperbolicity.cpython-38.pyc +0 -0
  460. snappy/verify/__pycache__/volume.cpython-38.pyc +0 -0
  461. snappy/verify/complex_volume/__pycache__/__init__.cpython-38.pyc +0 -0
  462. snappy/verify/complex_volume/__pycache__/adjust_torsion.cpython-38.pyc +0 -0
  463. snappy/verify/complex_volume/__pycache__/closed.cpython-38.pyc +0 -0
  464. snappy/verify/complex_volume/__pycache__/compute_ptolemys.cpython-38.pyc +0 -0
  465. snappy/verify/complex_volume/__pycache__/cusped.cpython-38.pyc +0 -0
  466. snappy/verify/complex_volume/__pycache__/extended_bloch.cpython-38.pyc +0 -0
  467. snappy/verify/cuspCrossSection.py +0 -1422
  468. snappy/verify/maximal_cusp_area_matrix/__pycache__/__init__.cpython-38.pyc +0 -0
  469. snappy/verify/maximal_cusp_area_matrix/__pycache__/cusp_tiling_engine.cpython-38.pyc +0 -0
  470. snappy/verify/maximal_cusp_area_matrix/__pycache__/cusp_translate_engine.cpython-38.pyc +0 -0
  471. snappy/verify/upper_halfspace/__pycache__/__init__.cpython-38.pyc +0 -0
  472. snappy/verify/upper_halfspace/__pycache__/extended_matrix.cpython-38.pyc +0 -0
  473. snappy/verify/upper_halfspace/__pycache__/finite_point.cpython-38.pyc +0 -0
  474. snappy/verify/upper_halfspace/__pycache__/ideal_point.cpython-38.pyc +0 -0
  475. snappy-3.1.1.dist-info/RECORD +0 -575
  476. {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/entry_points.txt +0 -0
@@ -1,474 +1,471 @@
1
- <!DOCTYPE html>
2
- <html class="writer-html5" lang="en" >
3
- <head>
4
- <meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
5
-
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
- <title>Step-by-step examples: Part 2 &mdash; SnapPy 3.1.1 documentation</title>
8
- <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
9
- <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
10
- <link rel="stylesheet" href="_static/snappy_sphinx_rtd_theme.css" type="text/css" />
11
- <link rel="shortcut icon" href="_static/SnapPy.ico"/>
12
- <!--[if lt IE 9]>
13
- <script src="_static/js/html5shiv.min.js"></script>
14
- <![endif]-->
15
-
16
- <script src="_static/jquery.js"></script>
17
- <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
18
- <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
19
- <script src="_static/doctools.js"></script>
20
- <script src="_static/sphinx_highlight.js"></script>
21
- <script src="_static/js/theme.js"></script>
22
- <link rel="index" title="Index" href="genindex.html" />
23
- <link rel="search" title="Search" href="search.html" />
24
- <link rel="next" title="Step-by-step examples: Part 3" href="ptolemy_examples3.html" />
25
- <link rel="prev" title="Step-by-step examples: Part 1" href="ptolemy_examples1.html" />
26
- </head>
27
-
28
- <body class="wy-body-for-nav">
29
- <div class="wy-grid-for-nav">
30
- <nav data-toggle="wy-nav-shift" class="wy-nav-side">
31
- <div class="wy-side-scroll">
32
- <div class="wy-side-nav-search" >
33
-
34
-
35
-
36
- <a href="index.html" class="icon icon-home">
37
- SnapPy
38
- <img src="_static/SnapPy-horizontal-128.png" class="logo" alt="Logo"/>
39
- </a>
40
- <div class="version">
41
- 3.1.1
42
- </div>
43
- <div role="search">
44
- <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
45
- <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
46
- <input type="hidden" name="check_keywords" value="yes" />
47
- <input type="hidden" name="area" value="default" />
48
- </form>
49
- </div>
50
- </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
51
- <ul class="current">
52
- <li class="toctree-l1"><a class="reference internal" href="installing.html">Installing SnapPy</a></li>
53
- <li class="toctree-l1"><a class="reference internal" href="screenshots.html">Screenshots: SnapPy in action</a></li>
54
- <li class="toctree-l1"><a class="reference internal" href="tutorial.html">Tutorial</a></li>
55
- <li class="toctree-l1"><a class="reference internal" href="snappy.html">The snappy module and its classes</a></li>
56
- <li class="toctree-l1"><a class="reference internal" href="plink.html">Using SnapPy’s link editor</a></li>
57
- <li class="toctree-l1"><a class="reference internal" href="spherogram.html">Links: planar diagrams and invariants</a></li>
58
- <li class="toctree-l1"><a class="reference internal" href="snap.html">Number theory of hyperbolic 3-manifolds</a></li>
59
- <li class="toctree-l1"><a class="reference internal" href="verify.html">Verified computations</a></li>
60
- <li class="toctree-l1 current"><a class="reference internal" href="other.html">Other components</a><ul class="current">
61
- <li class="toctree-l2 current"><a class="reference internal" href="other.html#ptolemy-module">Ptolemy module</a><ul class="current">
62
- <li class="toctree-l3 current"><a class="reference internal" href="ptolemy.html">The ptolemy module</a><ul class="current">
63
- <li class="toctree-l4"><a class="reference internal" href="ptolemy.html#what-is-the-ptolemy-module">What is the ptolemy module?</a></li>
64
- <li class="toctree-l4 current"><a class="reference internal" href="ptolemy.html#documentation">Documentation</a><ul class="current">
65
- <li class="toctree-l5"><a class="reference internal" href="ptolemy_prelim.html">Mathematical preliminaries</a></li>
66
- <li class="toctree-l5"><a class="reference internal" href="ptolemy_examples1.html">Step-by-step examples: Part 1</a></li>
67
- <li class="toctree-l5 current"><a class="current reference internal" href="#">Step-by-step examples: Part 2</a></li>
68
- <li class="toctree-l5"><a class="reference internal" href="ptolemy_examples3.html">Step-by-step examples: Part 3</a></li>
69
- <li class="toctree-l5"><a class="reference internal" href="ptolemy_examples4.html">Step-by-step examples: Part 4</a></li>
70
- <li class="toctree-l5"><a class="reference internal" href="ptolemy_classes.html">Classes</a></li>
71
- </ul>
72
- </li>
73
- </ul>
74
- </li>
75
- </ul>
76
- </li>
77
- <li class="toctree-l2"><a class="reference internal" href="other.html#twister">Twister</a></li>
78
- </ul>
79
- </li>
80
- <li class="toctree-l1"><a class="reference internal" href="news.html">News</a></li>
81
- <li class="toctree-l1"><a class="reference internal" href="credits.html">Credits</a></li>
82
- <li class="toctree-l1"><a class="reference internal" href="bugs.html">Reporting bugs and other problems</a></li>
83
- <li class="toctree-l1"><a class="reference internal" href="todo.html">To Do List</a></li>
84
- <li class="toctree-l1"><a class="reference internal" href="development.html">Development Basics</a></li>
85
- </ul>
86
-
87
- </div>
88
- </div>
89
- </nav>
90
-
91
- <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
92
- <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
93
- <a href="index.html">SnapPy</a>
94
- </nav>
95
-
96
- <div class="wy-nav-content">
97
- <div class="rst-content">
98
- <div role="navigation" aria-label="Page navigation">
99
- <ul class="wy-breadcrumbs">
100
- <li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
101
- <li class="breadcrumb-item"><a href="other.html">Other components</a></li>
102
- <li class="breadcrumb-item"><a href="ptolemy.html">The ptolemy module</a></li>
103
- <li class="breadcrumb-item active">Step-by-step examples: Part 2</li>
104
- <li class="wy-breadcrumbs-aside">
105
- </li>
106
- </ul>
107
- <hr/>
108
- </div>
109
- <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
110
- <div itemprop="articleBody">
111
-
112
- <section id="step-by-step-examples-part-2">
113
- <h1>Step-by-step examples: Part 2<a class="headerlink" href="#step-by-step-examples-part-2" title="Permalink to this heading"></a></h1>
114
- <section id="the-ptolemy-list-type">
115
- <span id="ptolemy-example-smart-lists"></span><h2>The Ptolemy list type<a class="headerlink" href="#the-ptolemy-list-type" title="Permalink to this heading"></a></h2>
116
- <p>Recall that <code class="docutils literal notranslate"><span class="pre">ptolemy_variety</span></code> with <code class="docutils literal notranslate"><span class="pre">obstruction_class='all'</span></code> returns a list of varieties, one for each obstruction class:</p>
117
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;m003&quot;</span><span class="p">)</span>
118
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="n">obstruction_class</span> <span class="o">=</span> <span class="s1">&#39;all&#39;</span><span class="p">)</span>
119
- <span class="go">[Ptolemy Variety for m003, N = 2, obstruction_class = 0</span>
120
- <span class="go"> c_0011_0 * c_0101_0 + c_0011_0^2 - c_0101_0^2</span>
121
- <span class="go"> c_0011_0 * c_0101_0 + c_0011_0^2 - c_0101_0^2</span>
122
- <span class="go"> - 1 + c_0011_0,</span>
123
- <span class="go"> Ptolemy Variety for m003, N = 2, obstruction_class = 1</span>
124
- <span class="go"> - c_0011_0 * c_0101_0 - c_0011_0^2 - c_0101_0^2</span>
125
- <span class="go"> - c_0011_0 * c_0101_0 - c_0011_0^2 - c_0101_0^2</span>
126
- <span class="go"> - 1 + c_0011_0]</span>
127
- </pre></div>
128
- </div>
129
- <p>Also recall that <code class="docutils literal notranslate"><span class="pre">retrieve_solutions</span></code> was a method of a <code class="docutils literal notranslate"><span class="pre">PtolemyVariety</span></code>. Assume we want to call <code class="docutils literal notranslate"><span class="pre">retrieve_solutions</span></code> for each Ptolemy variety. As in the previous example, we could write a loop such as:</p>
130
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="p">[</span><span class="n">p</span><span class="o">.</span><span class="n">retrieve_solutions</span><span class="p">(</span><span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">M</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="s1">&#39;all&#39;</span><span class="p">)]</span>
131
- </pre></div>
132
- </div>
133
- <p>The ptolemy module allows to do this in a much shorter way:</p>
134
- <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">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="s1">&#39;all&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">retrieve_solutions</span><span class="p">(</span><span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
135
- <span class="go">[[PtolemyCoordinates(</span>
136
- <span class="go"> {&#39;c_0011_0&#39;: 1,</span>
137
- <span class="go"> &#39;c_0011_1&#39;: -1,</span>
138
- <span class="go"> &#39;c_0101_0&#39;: Mod(x, x^2 - x - 1),</span>
139
- <span class="go"> ...,</span>
140
- <span class="go"> &#39;s_3_1&#39;: 1},</span>
141
- <span class="go"> is_numerical = False, ...)],</span>
142
- <span class="go"> [PtolemyCoordinates(</span>
143
- <span class="go"> {&#39;c_0011_0&#39;: 1,</span>
144
- <span class="go"> &#39;c_0011_1&#39;: -1,</span>
145
- <span class="go"> &#39;c_0101_0&#39;: Mod(x, x^2 + x + 1),</span>
146
- <span class="go"> ...,</span>
147
- <span class="go"> &#39;s_3_1&#39;: 1},</span>
148
- <span class="go"> is_numerical = False, ...)]]</span>
149
- </pre></div>
150
- </div>
151
- <p>This behavior is specific to the ptolemy module. It works with many methods of the ptolemy module that
152
- can potentially return more than one object. These methods return a special kind of list (usually
153
- <code class="docutils literal notranslate"><span class="pre">MethodMappingList</span></code>, a subclass of python <code class="docutils literal notranslate"><span class="pre">list</span></code>) that tries to call the method of the given name (here <code class="docutils literal notranslate"><span class="pre">retrieve_solutions</span></code>) with
154
- the given arguments (here <code class="docutils literal notranslate"><span class="pre">verbose=False</span></code>) on each element in the list (here the two Ptolemy varieties).</p>
155
- <p>Since <code class="docutils literal notranslate"><span class="pre">retrieve_solutions</span></code> itself actually returns a list, the result is a list of lists of solutions which are of type <code class="docutils literal notranslate"><span class="pre">PtolemyCoordinates</span></code>. The first level groups the solutions by obstruction class. The inner lists contain the different (non-Galois conjugate) solutions for each obstruction class (here, for <code class="docutils literal notranslate"><span class="pre">m003</span></code>, each inner lists contains only one element).</p>
156
- </section>
157
- <section id="using-the-ptolemy-list-type-recursively">
158
- <h2>Using the Ptolemy list type recursively<a class="headerlink" href="#using-the-ptolemy-list-type-recursively" title="Permalink to this heading"></a></h2>
159
- <p>The list type described in the previous example works recursively. Recall that an algebraic solution to a Ptolemy variety (of type <code class="docutils literal notranslate"><span class="pre">PtolemyCoordinates</span></code>) has a method <code class="docutils literal notranslate"><span class="pre">volume_numerical</span></code> that returns a list of volumes:</p>
160
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">=</span><span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;m003&quot;</span><span class="p">)</span>
161
- <span class="gp">&gt;&gt;&gt; </span><span class="n">p</span><span class="o">=</span><span class="n">M</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
162
- <span class="gp">&gt;&gt;&gt; </span><span class="n">sol</span><span class="o">=</span><span class="n">p</span><span class="o">.</span><span class="n">retrieve_solutions</span><span class="p">(</span><span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
163
- <span class="gp">&gt;&gt;&gt; </span><span class="n">sol</span><span class="o">.</span><span class="n">volume_numerical</span><span class="p">()</span>
164
- <span class="go">[0.E-19, 1.88267370443418 E-14]</span>
165
- </pre></div>
166
- </div>
167
- <p>We can chain these commands together to retrieve the volumes of all boundary-unipotent PSL(2, <strong>C</strong>) (that are <a class="reference internal" href="ptolemy_prelim.html#ptolemy-generically-decorated"><span class="std std-ref">generically decorated</span></a> with respect to the triangulation) in just one line:</p>
168
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;m003&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="s1">&#39;all&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">retrieve_solutions</span><span class="p">(</span><span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span><span class="o">.</span><span class="n">volume_numerical</span><span class="p">()</span>
169
- <span class="go">[[[0.E-19, 1.88267370443418 E-14]], [[2.02988321281931, -2.02988321281931]]]</span>
170
- </pre></div>
171
- </div>
172
- <p>Note that the volumes of the representations are in a list of lists of lists. At the first level the volumes are grouped by obstruction class, then by Galois conjugacy.</p>
173
- <p><strong>Remark:</strong> There might be an extra level for witness points.</p>
174
- <p><strong>Remark:</strong> Unfortunately, this is not compatible with tab-autocompletion, see <a class="reference internal" href="#ptolemy-example-missing-auto-completion"><span class="std std-ref">later</span></a>.</p>
175
- </section>
176
- <section id="a-comparison-of-m003-and-m004">
177
- <h2>A comparison of <code class="docutils literal notranslate"><span class="pre">m003</span></code> and <code class="docutils literal notranslate"><span class="pre">m004</span></code><a class="headerlink" href="#a-comparison-of-m003-and-m004" title="Permalink to this heading"></a></h2>
178
- <p>We can now compare the set of volumes of <code class="docutils literal notranslate"><span class="pre">m003</span></code> and <code class="docutils literal notranslate"><span class="pre">m004</span></code>:</p>
179
- <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;m003&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="s1">&#39;all&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">retrieve_solutions</span><span class="p">(</span><span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span><span class="o">.</span><span class="n">volume_numerical</span><span class="p">()</span>
180
- <span class="go">[[[0.E-19, 1.88267370443418 E-14]], [[2.02988321281931, -2.02988321281931]]]</span>
181
- <span class="gp">&gt;&gt;&gt; </span><span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;m004&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="s1">&#39;all&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">retrieve_solutions</span><span class="p">(</span><span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span><span class="o">.</span><span class="n">volume_numerical</span><span class="p">()</span>
182
- <span class="go">[[], [[-2.02988321281931, 2.02988321281931]]]</span>
183
- </pre></div>
184
- </div>
185
- <p>We see that the two manifolds are distinguished by their volumes of boundary-unipotent representations: <code class="docutils literal notranslate"><span class="pre">m004</span></code> has no representation with trivial volume (this is not a proof as in theory, there could be such a representation which is not <a class="reference internal" href="ptolemy_prelim.html#ptolemy-generically-decorated"><span class="std std-ref">generically decorated</span></a> with respect to the given triangulation) and no representation that can be lifted to a boundary-unipotent SL(2, <strong>C</strong>)-representation.</p>
186
- </section>
187
- <section id="a-non-hyperbolic-example">
188
- <h2>A non-hyperbolic example<a class="headerlink" href="#a-non-hyperbolic-example" title="Permalink to this heading"></a></h2>
189
- <p>We can also compute the volumes for a manifold that might be non-hyperbolic, here the complement of the 5<sub>1</sub> knot:</p>
190
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;5_1&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="s1">&#39;all&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">retrieve_solutions</span><span class="p">(</span><span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span><span class="o">.</span><span class="n">volume_numerical</span><span class="p">()</span>
191
- <span class="go">[[], [[1.52310839130992 E-14, 0.E-37]]]</span>
192
- </pre></div>
193
- </div>
194
- <p>Note that one of the Ptolemy varieties is non-empty which proves that all edges of the triangulation are essential. We also see that all volumes are 0 and thus smaller than the volume 2.029883… of the figure-eight knot complement that is proven to be the smallest volume of any orientable cusped manifold. Thus, it follows from Theorem 1.3 and Remark 1.4 of <a class="reference internal" href="ptolemy_prelim.html#ggz2014" id="id1"><span>[GGZ2014]</span></a> that 5<sub>1</sub> is not hyperbolic.</p>
195
- <p><strong>Remark:</strong> The ptolemy module does not (yet) support interval arithmetics, otherwise, this would be a proof that 5<sub>1</sub> is not hyperbolic.</p>
196
- </section>
197
- <section id="flattening-nested-structures">
198
- <h2>Flattening nested structures<a class="headerlink" href="#flattening-nested-structures" title="Permalink to this heading"></a></h2>
199
- <p>If we want to loose some of the grouping, we can call <code class="docutils literal notranslate"><span class="pre">flatten</span></code> on the results. Here the grouping by obstruction class is lost:</p>
200
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;m003&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="s1">&#39;all&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">retrieve_solutions</span><span class="p">(</span><span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span><span class="o">.</span><span class="n">volume_numerical</span><span class="p">()</span><span class="o">.</span><span class="n">flatten</span><span class="p">()</span>
201
- <span class="go">[[0.E-19, 1.88267370443418 E-14], [2.02988321281931, -2.02988321281931]]</span>
202
- </pre></div>
203
- </div>
204
- <p>And now, the grouping by Galois conjugacy is lost as well, resulting in a flat list:</p>
205
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;m003&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="s1">&#39;all&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">retrieve_solutions</span><span class="p">(</span><span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span><span class="o">.</span><span class="n">volume_numerical</span><span class="p">()</span><span class="o">.</span><span class="n">flatten</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
206
- <span class="go">[0.E-19, 1.88267370443418 E-14, 2.02988321281931, -2.02988321281931]</span>
207
- </pre></div>
208
- </div>
209
- <p>So the result is just a flat list.</p>
210
- <p><strong>Remark:</strong> We cannot <cite>overflatten</cite>. If we give an even larger argument to flatten, the result will just stay a flat list.</p>
211
- </section>
212
- <section id="lack-of-tab-autocompletion-for-nested-structures">
213
- <span id="ptolemy-example-missing-auto-completion"></span><h2>Lack of tab-autocompletion for nested structures<a class="headerlink" href="#lack-of-tab-autocompletion-for-nested-structures" title="Permalink to this heading"></a></h2>
214
- <p>Unfortunately, the autocompletion does not list all the desired results when we have a nested structure. For example:</p>
215
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">sols</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;m003&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="s1">&#39;all&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">retrieve_solutions</span><span class="p">(</span><span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
216
- <span class="gp">&gt;&gt;&gt; </span><span class="n">sols</span><span class="o">.</span>
217
- </pre></div>
218
- </div>
219
- <p>When we now hit the tab key:</p>
220
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">sols</span><span class="o">.</span>
221
- <span class="go">sols.append sols.extend sols.index sols.pop sols.reverse</span>
222
- <span class="go">sols.count sols.flatten sols.insert sols.remove sols.sort</span>
223
- </pre></div>
224
- </div>
225
- <p>… we only get <code class="docutils literal notranslate"><span class="pre">list</span></code> methods, but not the desired <code class="docutils literal notranslate"><span class="pre">volume_numerical</span></code>. One way to discover the available methods is to pick a leaf of the nested structure and hit the tab key:</p>
226
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">sol</span> <span class="o">=</span> <span class="n">sols</span><span class="o">.</span><span class="n">flatten</span><span class="p">(</span><span class="mi">100</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
227
- <span class="gp">&gt;&gt;&gt; </span><span class="n">sol</span><span class="o">.</span>
228
- <span class="go">sol.N sol.keys</span>
229
- <span class="go">sol.check_against_manifold sol.long_edge</span>
230
- <span class="go">...</span>
231
- <span class="go">sol.itervalues sol.volume_numerical</span>
232
- </pre></div>
233
- </div>
234
- <p>The overview diagram might also be helpful.</p>
235
- </section>
236
- <section id="converting-exact-solutions-into-numerical-solutions">
237
- <h2>Converting exact solutions into numerical solutions<a class="headerlink" href="#converting-exact-solutions-into-numerical-solutions" title="Permalink to this heading"></a></h2>
238
- <p>We can turn exact solutions into numerical solutions by calling <code class="docutils literal notranslate"><span class="pre">numerical</span></code>:</p>
239
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">sol</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;m003&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span><span class="o">.</span><span class="n">retrieve_solutions</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
240
- <span class="gp">&gt;&gt;&gt; </span><span class="n">sol</span>
241
- <span class="go">PtolemyCoordinates(</span>
242
- <span class="go"> {&#39;c_0011_0&#39;: 1,</span>
243
- <span class="go"> &#39;c_0011_1&#39;: -1,</span>
244
- <span class="go"> &#39;c_0101_0&#39;: Mod(x, x^2 + x + 1),</span>
245
- <span class="go"> ...</span>
246
- <span class="go"> &#39;s_3_1&#39;: 1},</span>
247
- <span class="go"> is_numerical = False, ...)</span>
248
- <span class="gp">&gt;&gt;&gt; </span><span class="n">sol</span><span class="o">.</span><span class="n">numerical</span><span class="p">()</span>
249
- <span class="go">[PtolemyCoordinates(</span>
250
- <span class="go"> {&#39;c_0011_0&#39;: 1,</span>
251
- <span class="go"> &#39;c_0011_1&#39;: -1,</span>
252
- <span class="go"> &#39;c_0101_0&#39;: -0.500000000000000 - 0.866025403784439*I,</span>
253
- <span class="go"> ...,</span>
254
- <span class="go"> &#39;s_3_1&#39;: 1},</span>
255
- <span class="go"> is_numerical = True, ...),</span>
256
- <span class="go"> PtolemyCoordinates(</span>
257
- <span class="go"> {&#39;c_0011_0&#39;: 1,</span>
258
- <span class="go"> &#39;c_0011_1&#39;: -1,</span>
259
- <span class="go"> &#39;c_0101_0&#39;: -0.500000000000000 + 0.866025403784439*I,</span>
260
- <span class="go"> ...,</span>
261
- <span class="go"> &#39;s_3_1&#39;: 1},</span>
262
- <span class="go"> is_numerical = True, ...)]</span>
263
- </pre></div>
264
- </div>
265
- <p>Note that the one exact (algebraic) solution turns into a list of numerical solutions which are Galois conjugates.</p>
266
- <p><strong>Remark:</strong> This uses the current pari precision. See the <a class="reference internal" href="ptolemy_examples1.html#ptolemy-example-increase-precision"><span class="std std-ref">above example</span></a>, in particular, the comment about interval arithmetics.</p>
267
- <p><strong>Remark:</strong> Calling <code class="docutils literal notranslate"><span class="pre">numerical()</span></code> on a numerical solution does nothing.</p>
268
- <p><strong>Remark:</strong> <code class="docutils literal notranslate"><span class="pre">CrossRatios</span></code> also support <code class="docutils literal notranslate"><span class="pre">numerical</span></code>.</p>
269
- </section>
270
- <section id="working-with-exact-vs-numerical-solutions">
271
- <span id="ptolemy-example-numerical-matrix"></span><h2>Working with exact vs numerical solutions<a class="headerlink" href="#working-with-exact-vs-numerical-solutions" title="Permalink to this heading"></a></h2>
272
- <p>Most methods such as <code class="docutils literal notranslate"><span class="pre">evaluate_word</span></code> or <code class="docutils literal notranslate"><span class="pre">cross_ratios</span></code> work just the same way on an exact solution:</p>
273
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">exact_sol</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;m004&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span><span class="o">.</span><span class="n">retrieve_solutions</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
274
- <span class="gp">&gt;&gt;&gt; </span><span class="n">exact_sol</span>
275
- <span class="go">PtolemyCoordinates(</span>
276
- <span class="go"> {&#39;c_0011_0&#39;: 1,</span>
277
- <span class="go"> &#39;c_0011_1&#39;: -1,</span>
278
- <span class="go"> &#39;c_0101_0&#39;: 1,</span>
279
- <span class="go"> &#39;c_0101_1&#39;: Mod(x, x^2 + x + 1),</span>
280
- <span class="go"> ...,</span>
281
- <span class="go"> &#39;s_3_1&#39;: -1},</span>
282
- <span class="go"> is_numerical = False, ...)</span>
283
- <span class="gp">&gt;&gt;&gt; </span><span class="n">exact_sol</span><span class="o">.</span><span class="n">evaluate_word</span><span class="p">(</span><span class="s1">&#39;a&#39;</span><span class="p">)</span>
284
- <span class="go">[[Mod(-2*x, x^2 + x + 1), Mod(-x - 1, x^2 + x + 1)],</span>
285
- <span class="go"> [Mod(x, x^2 + x + 1), Mod(x + 1, x^2 + x + 1)]]</span>
286
- </pre></div>
287
- </div>
288
- <p>… as they do on a numerical solution:</p>
289
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">numerical_sol</span> <span class="o">=</span> <span class="n">sol</span><span class="o">.</span><span class="n">numerical</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
290
- <span class="gp">&gt;&gt;&gt; </span><span class="n">numerical_sol</span>
291
- <span class="go">PtolemyCoordinates(</span>
292
- <span class="go"> {&#39;c_0011_0&#39;: 1,</span>
293
- <span class="go"> &#39;c_0011_1&#39;: -1,</span>
294
- <span class="go"> &#39;c_0101_0&#39;: 1,</span>
295
- <span class="go"> &#39;c_0101_1&#39;: -0.500000000000000 - 0.866025403784439*I,</span>
296
- <span class="go"> ...,</span>
297
- <span class="go"> &#39;s_3_1&#39;: -1},</span>
298
- <span class="go"> is_numerical = False, ...)</span>
299
- <span class="gp">&gt;&gt;&gt; </span><span class="n">numerical_sol</span><span class="o">.</span><span class="n">evaluate_word</span><span class="p">(</span><span class="s1">&#39;a&#39;</span><span class="p">)</span>
300
- <span class="go">[[1.00000000000000 + 1.73205080756888*I,</span>
301
- <span class="go"> -0.500000000000000 + 0.866025403784439*I],</span>
302
- <span class="go"> [-0.500000000000000 - 0.866025403784439*I,</span>
303
- <span class="go"> 0.500000000000000 - 0.866025403784439*I]]</span>
304
- </pre></div>
305
- </div>
306
- <p>Methods with postfix <code class="docutils literal notranslate"><span class="pre">_numerical</span></code> are special: when applied to an exact solution, they implicitly convert it to a list
307
- of Galois conjugate numerical solutions first. <code class="docutils literal notranslate"><span class="pre">volume_numerical</span></code> is an example (because volume is a transcendental function):</p>
308
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">exact_sol</span><span class="o">.</span><span class="n">volume_numerical</span><span class="p">()</span>
309
- <span class="go">[-2.02988321281931, 2.02988321281931]</span>
310
- <span class="gp">&gt;&gt;&gt; </span><span class="n">numerical_sol</span><span class="o">.</span><span class="n">volume_numerical</span><span class="p">()</span>
311
- <span class="go">-2.02988321281931</span>
312
- </pre></div>
313
- </div>
314
- </section>
315
- <section id="computing-numerical-solutions-directly">
316
- <span id="ptolemy-example-retrieve-numerical-solutions"></span><h2>Computing numerical solutions directly<a class="headerlink" href="#computing-numerical-solutions-directly" title="Permalink to this heading"></a></h2>
317
- <p>We can also directly compute numerical solutions:</p>
318
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;m004&quot;</span><span class="p">)</span>
319
- <span class="gp">&gt;&gt;&gt; </span><span class="n">sols</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="s1">&#39;all&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">retrieve_solutions</span><span class="p">(</span><span class="n">numerical</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span>
320
- <span class="go">[[],</span>
321
- <span class="go"> [[PtolemyCoordinates(</span>
322
- <span class="go"> {&#39;c_0011_0&#39;: 1.00000000000000 + 0.E-19*I,</span>
323
- <span class="go"> &#39;c_0011_1&#39;: -1.00000000000000 + 0.E-19*I,</span>
324
- <span class="go"> &#39;c_0101_0&#39;: 1.00000000000000 + 0.E-19*I,</span>
325
- <span class="go"> &#39;c_0101_1&#39;: -0.500000000000000 - 0.866025403784439*I,</span>
326
- <span class="go"> ...,</span>
327
- <span class="go"> &#39;s_3_1&#39;: -1},</span>
328
- <span class="go"> is_numerical = True, ...),</span>
329
- <span class="go"> PtolemyCoordinates(</span>
330
- <span class="go"> {&#39;c_0011_0&#39;: 1.00000000000000 + 0.E-19*I,</span>
331
- <span class="go"> &#39;c_0011_1&#39;: -1.00000000000000 + 0.E-19*I,</span>
332
- <span class="go"> &#39;c_0101_0&#39;: 1.00000000000000 + 0.E-19*I,</span>
333
- <span class="go"> &#39;c_0101_1&#39;: -0.500000000000000 + 0.866025403784439*I,</span>
334
- <span class="go"> ...,</span>
335
- <span class="go"> &#39;s_3_1&#39;: -1},</span>
336
- <span class="go"> is_numerical = True, ...)]]]</span>
337
- </pre></div>
338
- </div>
339
- <p>The structure is as described earlier, a list of lists of lists: first solutions are grouped by obstruction class, then by Galois conjugacy.</p>
340
- <p>The advantage over going through the exact solutions is that it might be much faster
341
- (because it can avoid computing the number field from the lexicographic Groebner basis, see later). For example, many PSL(3, <strong>C</strong>) examples only work when using <code class="docutils literal notranslate"><span class="pre">numerical</span> <span class="pre">=</span> <span class="pre">True</span></code>.</p>
342
- </section>
343
- <section id="computing-cross-ratios-from-ptolemy-coordinates">
344
- <span id="ptolemy-example-cross-ratios"></span><h2>Computing cross ratios from Ptolemy coordinates<a class="headerlink" href="#computing-cross-ratios-from-ptolemy-coordinates" title="Permalink to this heading"></a></h2>
345
- <p>Given exact or numerical solutions to the Ptolemy variety, we can also compute the cross ratios/shape parameters:</p>
346
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">sols</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;m004&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="s1">&#39;all&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">retrieve_solutions</span><span class="p">(</span><span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
347
- <span class="gp">&gt;&gt;&gt; </span><span class="n">zs</span><span class="o">=</span><span class="n">sols</span><span class="o">.</span><span class="n">cross_ratios</span><span class="p">()</span>
348
- <span class="gp">&gt;&gt;&gt; </span><span class="n">zs</span>
349
- <span class="go">[[],</span>
350
- <span class="go"> [CrossRatios({&#39;z_0000_0&#39;: Mod(x + 1, x^2 + x + 1),</span>
351
- <span class="go"> &#39;z_0000_1&#39;: Mod(x + 1, x^2 + x + 1),</span>
352
- <span class="go"> &#39;zp_0000_0&#39;: Mod(x + 1, x^2 + x + 1),</span>
353
- <span class="go"> &#39;zp_0000_1&#39;: Mod(x + 1, x^2 + x + 1),</span>
354
- <span class="go"> &#39;zpp_0000_0&#39;: Mod(x + 1, x^2 + x + 1),</span>
355
- <span class="go"> &#39;zpp_0000_1&#39;: Mod(x + 1, x^2 + x + 1)},</span>
356
- <span class="go"> is_numerical = False, ...)]]</span>
357
- </pre></div>
358
- </div>
359
- <p><strong>Remark</strong>: The shapes will be given as element in the Ptolemy field with defining polynomial being the second argument to <code class="docutils literal notranslate"><span class="pre">Mod(...,</span> <span class="pre">...)</span></code>, here, x<sup>2</sup>+x+1. The Ptolemy field is a (possibly trivial) extension of the shape field. For <em>N</em> =2, the Ptolemy field is the trace field <a class="reference internal" href="ptolemy_prelim.html#ggz2014" id="id2"><span>[GGZ2014]</span></a> and an iterated square extension of the shape field which is the invariant trace field for a cusped manifold.</p>
360
- <p>And numerically, so that we can compare to SnapPy’s shapes:</p>
361
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">zs</span><span class="o">.</span><span class="n">numerical</span><span class="p">()</span>
362
- <span class="go">[[],</span>
363
- <span class="go"> [[CrossRatios(</span>
364
- <span class="go"> {&#39;z_0000_0&#39;: 0.500000000000000 - 0.866025403784439*I,</span>
365
- <span class="go"> &#39;z_0000_1&#39;: 0.500000000000000 - 0.866025403784439*I,</span>
366
- <span class="go"> &#39;zp_0000_0&#39;: 0.500000000000000 - 0.866025403784439*I,</span>
367
- <span class="go"> &#39;zp_0000_1&#39;: 0.500000000000000 - 0.866025403784439*I,</span>
368
- <span class="go"> &#39;zpp_0000_0&#39;: 0.500000000000000 - 0.866025403784439*I,</span>
369
- <span class="go"> &#39;zpp_0000_1&#39;: 0.500000000000000 - 0.866025403784439*I},</span>
370
- <span class="go"> is_numerical = True, ...),</span>
371
- <span class="go"> CrossRatios(</span>
372
- <span class="go"> {&#39;z_0000_0&#39;: 0.500000000000000 + 0.866025403784439*I,</span>
373
- <span class="go"> &#39;z_0000_1&#39;: 0.500000000000000 + 0.866025403784439*I,</span>
374
- <span class="go"> &#39;zp_0000_0&#39;: 0.500000000000000 + 0.866025403784439*I,</span>
375
- <span class="go"> &#39;zp_0000_1&#39;: 0.500000000000000 + 0.866025403784439*I,</span>
376
- <span class="go"> &#39;zpp_0000_0&#39;: 0.500000000000000 + 0.866025403784439*I,</span>
377
- <span class="go"> &#39;zpp_0000_1&#39;: 0.500000000000000 + 0.866025403784439*I},</span>
378
- <span class="go"> is_numerical = True, ...)]]]</span>
379
- <span class="gp">&gt;&gt;&gt; </span><span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;m004&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">tetrahedra_shapes</span><span class="p">(</span><span class="s1">&#39;rect&#39;</span><span class="p">)</span>
380
- <span class="go">[0.5000000000 + 0.8660254038*I, 0.5000000000 + 0.8660254038*I]</span>
381
- </pre></div>
382
- </div>
383
- <p>The result is of type <code class="docutils literal notranslate"><span class="pre">CrossRatios</span></code> and assigns z as well as z’=1/(1-z) and z’’=1-1/z a value.</p>
384
- </section>
385
- <section id="the-dimension-of-a-component">
386
- <span id="ptolemy-non-zero-dim-comp"></span><h2>The dimension of a component<a class="headerlink" href="#the-dimension-of-a-component" title="Permalink to this heading"></a></h2>
387
- <p>A Ptolemy variety might have positively dimensional components (note that this might or might not be a positively dimensional family of representations, see <a class="reference internal" href="ptolemy_prelim.html#ptolemy-generically-decorated"><span class="std std-ref">here</span></a>). For example, the Ptolemy variety for <code class="docutils literal notranslate"><span class="pre">m371</span></code> and the trivial obstruction class has a 1-dimensional component. This is indicated by:</p>
388
- <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">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span><span class="o">.</span><span class="n">retrieve_solutions</span><span class="p">()</span>
389
- <span class="go">[NonZeroDimensionalComponent(dimension = 1)]</span>
390
- </pre></div>
391
- </div>
392
- <p>Or:</p>
393
- <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;m371&quot;</span><span class="p">)</span>
394
- <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span><span class="o">.</span><span class="n">retrieve_solutions</span><span class="p">()</span>
395
- <span class="go">[[ PtolemyCoordinates(</span>
396
- <span class="go"> {&#39;c_0011_0&#39;: 1,</span>
397
- <span class="go"> &#39;c_0011_1&#39;: -1,</span>
398
- <span class="go"> &#39;c_0011_2&#39;: -1,</span>
399
- <span class="go"> &#39;c_0011_3&#39;: Mod(-x - 1, x^2 + x + 2),</span>
400
- <span class="go"> ...,</span>
401
- <span class="go"> &#39;s_3_4&#39;: 1},</span>
402
- <span class="go"> is_numerical = False, ...)</span>
403
- <span class="go"> (witnesses for NonZeroDimensionalComponent(dimension = 1, free_variables = [&#39;c_0110_2&#39;])) ]]</span>
404
- </pre></div>
405
- </div>
406
- <p>The latter actually also provides a sample point (<a class="reference internal" href="ptolemy_examples3.html#ptolemy-example-find-witness"><span class="std std-ref">witness</span></a> which we will use <a class="reference internal" href="ptolemy_examples3.html#ptolemy-example-non-zero-dim-rep"><span class="std std-ref">later</span></a> to determine whether this corresponds to a 1-dimensional family of representations or not) on the 1-dimensional component. A <code class="docutils literal notranslate"><span class="pre">NonZeroDimensionalComponent</span></code> as well as <code class="docutils literal notranslate"><span class="pre">PtolemyCoordinates</span></code> (that correspond to 0-dimensional components of the Ptolemy variety)) has a <code class="docutils literal notranslate"><span class="pre">dimension</span></code> attribute, so we can do:</p>
407
- <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;m371&quot;</span><span class="p">)</span>
408
- <span class="gp">&gt;&gt;&gt; </span><span class="n">sols</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="s1">&#39;all&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">retrieve_solutions</span><span class="p">()</span>
409
- <span class="gp">&gt;&gt;&gt; </span><span class="n">sols</span><span class="o">.</span><span class="n">dimension</span>
410
- <span class="go">[[1], [], [0], []]</span>
411
- </pre></div>
412
- </div>
413
- <p>This means that the Ptolemy variety for the trivial obstruction class has a 1-dimensional component and that the Ptolemy variety of one of the other obstruction classes a 0-dimensional component.</p>
414
- <p>A <code class="docutils literal notranslate"><span class="pre">NonZeroDimensionalComponent</span></code> is actually again a list whose elements will be witness points if witnesses have been computed for this Ptolemy variety.</p>
415
- <p><strong>Warning:</strong> This implies that if we <code class="docutils literal notranslate"><span class="pre">flatten</span></code> too much, the reported dimension becomes 0 which is the dimension of the witness point instead of 1:</p>
416
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">sols</span><span class="o">.</span><span class="n">flatten</span><span class="p">()</span>
417
- <span class="go">[1, 0]</span>
418
- </pre></div>
419
- </div>
420
- <p>Too much <code class="docutils literal notranslate"><span class="pre">flatten</span></code>:</p>
421
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">sols</span><span class="o">.</span><span class="n">flatten</span><span class="p">()</span>
422
- <span class="go">[0, 0]</span>
423
- </pre></div>
424
- </div>
425
- <p>The advantage is that we can still call methods such as <code class="docutils literal notranslate"><span class="pre">volume_numerical</span></code> and actually see the volume of a witness point (it is known that the volume stays constant on a component of boundary-unipotent representations, so one witness point can tell us the volume of all representation in that component):</p>
426
- <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">sols</span><span class="o">.</span><span class="n">volume_numerical</span><span class="p">()</span>
427
- <span class="go">[[[ [0.E-38, 0.E-38] (witnesses for NonZeroDimensionalComponent(dimension = 1, free_variables = [&#39;c_0110_2&#39;])) ]],</span>
428
- <span class="go"> [],</span>
429
- <span class="go"> [[4.75170196551790,</span>
430
- <span class="go"> -4.75170196551790,</span>
431
- <span class="go"> 4.75170196551790,</span>
432
- <span class="go"> -4.75170196551790,</span>
433
- <span class="go"> 1.17563301006556,</span>
434
- <span class="go"> -1.17563301006556,</span>
435
- <span class="go"> 1.17563301006556,</span>
436
- <span class="go"> -1.17563301006556]],</span>
437
- <span class="go"> []]</span>
438
- </pre></div>
439
- </div>
440
- </section>
441
- </section>
442
-
443
-
444
- </div>
445
- </div>
446
- <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
447
- <a href="ptolemy_examples1.html" class="btn btn-neutral float-left" title="Step-by-step examples: Part 1" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
448
- <a href="ptolemy_examples3.html" class="btn btn-neutral float-right" title="Step-by-step examples: Part 3" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
449
- </div>
450
-
451
- <hr/>
452
-
453
- <div role="contentinfo">
454
- <p>&#169; Copyright 2009-2023, by Marc Culler, Nathan Dunfield, Matthias Goerner, Jeffrey Weeks and others.</p>
455
- </div>
456
-
457
- Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
458
- <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
459
- provided by <a href="https://readthedocs.org">Read the Docs</a>.
460
-
461
-
462
- </footer>
463
- </div>
464
- </div>
465
- </section>
466
- </div>
467
- <script>
468
- jQuery(function () {
469
- SphinxRtdTheme.Navigation.enable(true);
470
- });
471
- </script>
472
-
473
- </body>
1
+
2
+
3
+ <!DOCTYPE html>
4
+ <html class="writer-html5" lang="en" data-content_root="./">
5
+ <head>
6
+ <meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
7
+
8
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
9
+ <title>Step-by-step examples: Part 2 &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 src="_static/js/theme.js"></script>
22
+ <link rel="index" title="Index" href="genindex.html" />
23
+ <link rel="search" title="Search" href="search.html" />
24
+ <link rel="next" title="Step-by-step examples: Part 3" href="ptolemy_examples3.html" />
25
+ <link rel="prev" title="Step-by-step examples: Part 1" href="ptolemy_examples1.html" />
26
+ </head>
27
+
28
+ <body class="wy-body-for-nav">
29
+ <div class="wy-grid-for-nav">
30
+ <nav data-toggle="wy-nav-shift" class="wy-nav-side">
31
+ <div class="wy-side-scroll">
32
+ <div class="wy-side-nav-search" >
33
+
34
+
35
+
36
+ <a href="index.html" class="icon icon-home">
37
+ SnapPy
38
+ <img src="_static/SnapPy-horizontal-128.png" class="logo" alt="Logo"/>
39
+ </a>
40
+ <div role="search">
41
+ <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
42
+ <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
43
+ <input type="hidden" name="check_keywords" value="yes" />
44
+ <input type="hidden" name="area" value="default" />
45
+ </form>
46
+ </div>
47
+ </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
48
+ <ul class="current">
49
+ <li class="toctree-l1"><a class="reference internal" href="installing.html">Installing SnapPy</a></li>
50
+ <li class="toctree-l1"><a class="reference internal" href="screenshots.html">Screenshots: SnapPy in action</a></li>
51
+ <li class="toctree-l1"><a class="reference internal" href="tutorial.html">Tutorial</a></li>
52
+ <li class="toctree-l1"><a class="reference internal" href="snappy.html">The snappy module and its classes</a></li>
53
+ <li class="toctree-l1"><a class="reference internal" href="plink.html">Using SnapPy’s link editor</a></li>
54
+ <li class="toctree-l1"><a class="reference internal" href="spherogram.html">Links: planar diagrams and invariants</a></li>
55
+ <li class="toctree-l1"><a class="reference internal" href="snap.html">Number theory of hyperbolic 3-manifolds</a></li>
56
+ <li class="toctree-l1"><a class="reference internal" href="verify.html">Verified computations</a></li>
57
+ <li class="toctree-l1 current"><a class="reference internal" href="other.html">Other components</a><ul class="current">
58
+ <li class="toctree-l2 current"><a class="reference internal" href="other.html#ptolemy-module">Ptolemy module</a><ul class="current">
59
+ <li class="toctree-l3 current"><a class="reference internal" href="ptolemy.html">The ptolemy module</a><ul class="current">
60
+ <li class="toctree-l4"><a class="reference internal" href="ptolemy.html#what-is-the-ptolemy-module">What is the ptolemy module?</a></li>
61
+ <li class="toctree-l4 current"><a class="reference internal" href="ptolemy.html#documentation">Documentation</a><ul class="current">
62
+ <li class="toctree-l5"><a class="reference internal" href="ptolemy_prelim.html">Mathematical preliminaries</a></li>
63
+ <li class="toctree-l5"><a class="reference internal" href="ptolemy_examples1.html">Step-by-step examples: Part 1</a></li>
64
+ <li class="toctree-l5 current"><a class="current reference internal" href="#">Step-by-step examples: Part 2</a></li>
65
+ <li class="toctree-l5"><a class="reference internal" href="ptolemy_examples3.html">Step-by-step examples: Part 3</a></li>
66
+ <li class="toctree-l5"><a class="reference internal" href="ptolemy_examples4.html">Step-by-step examples: Part 4</a></li>
67
+ <li class="toctree-l5"><a class="reference internal" href="ptolemy_classes.html">Classes</a></li>
68
+ </ul>
69
+ </li>
70
+ </ul>
71
+ </li>
72
+ </ul>
73
+ </li>
74
+ <li class="toctree-l2"><a class="reference internal" href="other.html#twister">Twister</a></li>
75
+ </ul>
76
+ </li>
77
+ <li class="toctree-l1"><a class="reference internal" href="news.html">News</a></li>
78
+ <li class="toctree-l1"><a class="reference internal" href="credits.html">Credits</a></li>
79
+ <li class="toctree-l1"><a class="reference internal" href="bugs.html">Reporting bugs and other problems</a></li>
80
+ <li class="toctree-l1"><a class="reference internal" href="todo.html">To Do List</a></li>
81
+ <li class="toctree-l1"><a class="reference internal" href="development.html">Development Basics</a></li>
82
+ </ul>
83
+
84
+ </div>
85
+ </div>
86
+ </nav>
87
+
88
+ <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
89
+ <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
90
+ <a href="index.html">SnapPy</a>
91
+ </nav>
92
+
93
+ <div class="wy-nav-content">
94
+ <div class="rst-content">
95
+ <div role="navigation" aria-label="Page navigation">
96
+ <ul class="wy-breadcrumbs">
97
+ <li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
98
+ <li class="breadcrumb-item"><a href="other.html">Other components</a></li>
99
+ <li class="breadcrumb-item"><a href="ptolemy.html">The ptolemy module</a></li>
100
+ <li class="breadcrumb-item active">Step-by-step examples: Part 2</li>
101
+ <li class="wy-breadcrumbs-aside">
102
+ </li>
103
+ </ul>
104
+ <hr/>
105
+ </div>
106
+ <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
107
+ <div itemprop="articleBody">
108
+
109
+ <section id="step-by-step-examples-part-2">
110
+ <h1>Step-by-step examples: Part 2<a class="headerlink" href="#step-by-step-examples-part-2" title="Link to this heading"></a></h1>
111
+ <section id="the-ptolemy-list-type">
112
+ <span id="ptolemy-example-smart-lists"></span><h2>The Ptolemy list type<a class="headerlink" href="#the-ptolemy-list-type" title="Link to this heading"></a></h2>
113
+ <p>Recall that <code class="docutils literal notranslate"><span class="pre">ptolemy_variety</span></code> with <code class="docutils literal notranslate"><span class="pre">obstruction_class='all'</span></code> returns a list of varieties, one for each obstruction class:</p>
114
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;m003&quot;</span><span class="p">)</span>
115
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="n">obstruction_class</span> <span class="o">=</span> <span class="s1">&#39;all&#39;</span><span class="p">)</span>
116
+ <span class="go">[Ptolemy Variety for m003, N = 2, obstruction_class = 0</span>
117
+ <span class="go"> c_0011_0 * c_0101_0 + c_0011_0^2 - c_0101_0^2</span>
118
+ <span class="go"> c_0011_0 * c_0101_0 + c_0011_0^2 - c_0101_0^2</span>
119
+ <span class="go"> - 1 + c_0011_0,</span>
120
+ <span class="go"> Ptolemy Variety for m003, N = 2, obstruction_class = 1</span>
121
+ <span class="go"> - c_0011_0 * c_0101_0 - c_0011_0^2 - c_0101_0^2</span>
122
+ <span class="go"> - c_0011_0 * c_0101_0 - c_0011_0^2 - c_0101_0^2</span>
123
+ <span class="go"> - 1 + c_0011_0]</span>
124
+ </pre></div>
125
+ </div>
126
+ <p>Also recall that <code class="docutils literal notranslate"><span class="pre">retrieve_solutions</span></code> was a method of a <code class="docutils literal notranslate"><span class="pre">PtolemyVariety</span></code>. Assume we want to call <code class="docutils literal notranslate"><span class="pre">retrieve_solutions</span></code> for each Ptolemy variety. As in the previous example, we could write a loop such as:</p>
127
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="p">[</span><span class="n">p</span><span class="o">.</span><span class="n">retrieve_solutions</span><span class="p">(</span><span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">M</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="s1">&#39;all&#39;</span><span class="p">)]</span>
128
+ </pre></div>
129
+ </div>
130
+ <p>The ptolemy module allows to do this in a much shorter way:</p>
131
+ <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">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="s1">&#39;all&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">retrieve_solutions</span><span class="p">(</span><span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
132
+ <span class="go">[[PtolemyCoordinates(</span>
133
+ <span class="go"> {&#39;c_0011_0&#39;: 1,</span>
134
+ <span class="go"> &#39;c_0011_1&#39;: -1,</span>
135
+ <span class="go"> &#39;c_0101_0&#39;: Mod(x, x^2 - x - 1),</span>
136
+ <span class="go"> ...,</span>
137
+ <span class="go"> &#39;s_3_1&#39;: 1},</span>
138
+ <span class="go"> is_numerical = False, ...)],</span>
139
+ <span class="go"> [PtolemyCoordinates(</span>
140
+ <span class="go"> {&#39;c_0011_0&#39;: 1,</span>
141
+ <span class="go"> &#39;c_0011_1&#39;: -1,</span>
142
+ <span class="go"> &#39;c_0101_0&#39;: Mod(x, x^2 + x + 1),</span>
143
+ <span class="go"> ...,</span>
144
+ <span class="go"> &#39;s_3_1&#39;: 1},</span>
145
+ <span class="go"> is_numerical = False, ...)]]</span>
146
+ </pre></div>
147
+ </div>
148
+ <p>This behavior is specific to the ptolemy module. It works with many methods of the ptolemy module that
149
+ can potentially return more than one object. These methods return a special kind of list (usually
150
+ <code class="docutils literal notranslate"><span class="pre">MethodMappingList</span></code>, a subclass of python <code class="docutils literal notranslate"><span class="pre">list</span></code>) that tries to call the method of the given name (here <code class="docutils literal notranslate"><span class="pre">retrieve_solutions</span></code>) with
151
+ the given arguments (here <code class="docutils literal notranslate"><span class="pre">verbose=False</span></code>) on each element in the list (here the two Ptolemy varieties).</p>
152
+ <p>Since <code class="docutils literal notranslate"><span class="pre">retrieve_solutions</span></code> itself actually returns a list, the result is a list of lists of solutions which are of type <code class="docutils literal notranslate"><span class="pre">PtolemyCoordinates</span></code>. The first level groups the solutions by obstruction class. The inner lists contain the different (non-Galois conjugate) solutions for each obstruction class (here, for <code class="docutils literal notranslate"><span class="pre">m003</span></code>, each inner lists contains only one element).</p>
153
+ </section>
154
+ <section id="using-the-ptolemy-list-type-recursively">
155
+ <h2>Using the Ptolemy list type recursively<a class="headerlink" href="#using-the-ptolemy-list-type-recursively" title="Link to this heading"></a></h2>
156
+ <p>The list type described in the previous example works recursively. Recall that an algebraic solution to a Ptolemy variety (of type <code class="docutils literal notranslate"><span class="pre">PtolemyCoordinates</span></code>) has a method <code class="docutils literal notranslate"><span class="pre">volume_numerical</span></code> that returns a list of volumes:</p>
157
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">=</span><span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;m003&quot;</span><span class="p">)</span>
158
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">p</span><span class="o">=</span><span class="n">M</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
159
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">sol</span><span class="o">=</span><span class="n">p</span><span class="o">.</span><span class="n">retrieve_solutions</span><span class="p">(</span><span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
160
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">sol</span><span class="o">.</span><span class="n">volume_numerical</span><span class="p">()</span>
161
+ <span class="go">[0.E-19, 1.88267370443418 E-14]</span>
162
+ </pre></div>
163
+ </div>
164
+ <p>We can chain these commands together to retrieve the volumes of all boundary-unipotent PSL(2, <strong>C</strong>) (that are <a class="reference internal" href="ptolemy_prelim.html#ptolemy-generically-decorated"><span class="std std-ref">generically decorated</span></a> with respect to the triangulation) in just one line:</p>
165
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;m003&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="s1">&#39;all&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">retrieve_solutions</span><span class="p">(</span><span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span><span class="o">.</span><span class="n">volume_numerical</span><span class="p">()</span>
166
+ <span class="go">[[[0.E-19, 1.88267370443418 E-14]], [[2.02988321281931, -2.02988321281931]]]</span>
167
+ </pre></div>
168
+ </div>
169
+ <p>Note that the volumes of the representations are in a list of lists of lists. At the first level the volumes are grouped by obstruction class, then by Galois conjugacy.</p>
170
+ <p><strong>Remark:</strong> There might be an extra level for witness points.</p>
171
+ <p><strong>Remark:</strong> Unfortunately, this is not compatible with tab-autocompletion, see <a class="reference internal" href="#ptolemy-example-missing-auto-completion"><span class="std std-ref">later</span></a>.</p>
172
+ </section>
173
+ <section id="a-comparison-of-m003-and-m004">
174
+ <h2>A comparison of <code class="docutils literal notranslate"><span class="pre">m003</span></code> and <code class="docutils literal notranslate"><span class="pre">m004</span></code><a class="headerlink" href="#a-comparison-of-m003-and-m004" title="Link to this heading"></a></h2>
175
+ <p>We can now compare the set of volumes of <code class="docutils literal notranslate"><span class="pre">m003</span></code> and <code class="docutils literal notranslate"><span class="pre">m004</span></code>:</p>
176
+ <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;m003&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="s1">&#39;all&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">retrieve_solutions</span><span class="p">(</span><span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span><span class="o">.</span><span class="n">volume_numerical</span><span class="p">()</span>
177
+ <span class="go">[[[0.E-19, 1.88267370443418 E-14]], [[2.02988321281931, -2.02988321281931]]]</span>
178
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;m004&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="s1">&#39;all&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">retrieve_solutions</span><span class="p">(</span><span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span><span class="o">.</span><span class="n">volume_numerical</span><span class="p">()</span>
179
+ <span class="go">[[], [[-2.02988321281931, 2.02988321281931]]]</span>
180
+ </pre></div>
181
+ </div>
182
+ <p>We see that the two manifolds are distinguished by their volumes of boundary-unipotent representations: <code class="docutils literal notranslate"><span class="pre">m004</span></code> has no representation with trivial volume (this is not a proof as in theory, there could be such a representation which is not <a class="reference internal" href="ptolemy_prelim.html#ptolemy-generically-decorated"><span class="std std-ref">generically decorated</span></a> with respect to the given triangulation) and no representation that can be lifted to a boundary-unipotent SL(2, <strong>C</strong>)-representation.</p>
183
+ </section>
184
+ <section id="a-non-hyperbolic-example">
185
+ <h2>A non-hyperbolic example<a class="headerlink" href="#a-non-hyperbolic-example" title="Link to this heading"></a></h2>
186
+ <p>We can also compute the volumes for a manifold that might be non-hyperbolic, here the complement of the 5<sub>1</sub> knot:</p>
187
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;5_1&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="s1">&#39;all&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">retrieve_solutions</span><span class="p">(</span><span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span><span class="o">.</span><span class="n">volume_numerical</span><span class="p">()</span>
188
+ <span class="go">[[], [[1.52310839130992 E-14, 0.E-37]]]</span>
189
+ </pre></div>
190
+ </div>
191
+ <p>Note that one of the Ptolemy varieties is non-empty which proves that all edges of the triangulation are essential. We also see that all volumes are 0 and thus smaller than the volume 2.029883… of the figure-eight knot complement that is proven to be the smallest volume of any orientable cusped manifold. Thus, it follows from Theorem 1.3 and Remark 1.4 of <a class="reference internal" href="ptolemy_prelim.html#ggz2014" id="id1"><span>[GGZ2014]</span></a> that 5<sub>1</sub> is not hyperbolic.</p>
192
+ <p><strong>Remark:</strong> The ptolemy module does not (yet) support interval arithmetics, otherwise, this would be a proof that 5<sub>1</sub> is not hyperbolic.</p>
193
+ </section>
194
+ <section id="flattening-nested-structures">
195
+ <h2>Flattening nested structures<a class="headerlink" href="#flattening-nested-structures" title="Link to this heading"></a></h2>
196
+ <p>If we want to loose some of the grouping, we can call <code class="docutils literal notranslate"><span class="pre">flatten</span></code> on the results. Here the grouping by obstruction class is lost:</p>
197
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;m003&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="s1">&#39;all&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">retrieve_solutions</span><span class="p">(</span><span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span><span class="o">.</span><span class="n">volume_numerical</span><span class="p">()</span><span class="o">.</span><span class="n">flatten</span><span class="p">()</span>
198
+ <span class="go">[[0.E-19, 1.88267370443418 E-14], [2.02988321281931, -2.02988321281931]]</span>
199
+ </pre></div>
200
+ </div>
201
+ <p>And now, the grouping by Galois conjugacy is lost as well, resulting in a flat list:</p>
202
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;m003&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="s1">&#39;all&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">retrieve_solutions</span><span class="p">(</span><span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span><span class="o">.</span><span class="n">volume_numerical</span><span class="p">()</span><span class="o">.</span><span class="n">flatten</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
203
+ <span class="go">[0.E-19, 1.88267370443418 E-14, 2.02988321281931, -2.02988321281931]</span>
204
+ </pre></div>
205
+ </div>
206
+ <p>So the result is just a flat list.</p>
207
+ <p><strong>Remark:</strong> We cannot <cite>overflatten</cite>. If we give an even larger argument to flatten, the result will just stay a flat list.</p>
208
+ </section>
209
+ <section id="lack-of-tab-autocompletion-for-nested-structures">
210
+ <span id="ptolemy-example-missing-auto-completion"></span><h2>Lack of tab-autocompletion for nested structures<a class="headerlink" href="#lack-of-tab-autocompletion-for-nested-structures" title="Link to this heading"></a></h2>
211
+ <p>Unfortunately, the autocompletion does not list all the desired results when we have a nested structure. For example:</p>
212
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">sols</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;m003&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="s1">&#39;all&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">retrieve_solutions</span><span class="p">(</span><span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
213
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">sols</span><span class="o">.</span>
214
+ </pre></div>
215
+ </div>
216
+ <p>When we now hit the tab key:</p>
217
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">sols</span><span class="o">.</span>
218
+ <span class="go">sols.append sols.extend sols.index sols.pop sols.reverse</span>
219
+ <span class="go">sols.count sols.flatten sols.insert sols.remove sols.sort</span>
220
+ </pre></div>
221
+ </div>
222
+ <p>… we only get <code class="docutils literal notranslate"><span class="pre">list</span></code> methods, but not the desired <code class="docutils literal notranslate"><span class="pre">volume_numerical</span></code>. One way to discover the available methods is to pick a leaf of the nested structure and hit the tab key:</p>
223
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">sol</span> <span class="o">=</span> <span class="n">sols</span><span class="o">.</span><span class="n">flatten</span><span class="p">(</span><span class="mi">100</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
224
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">sol</span><span class="o">.</span>
225
+ <span class="go">sol.N sol.keys</span>
226
+ <span class="go">sol.check_against_manifold sol.long_edge</span>
227
+ <span class="go">...</span>
228
+ <span class="go">sol.itervalues sol.volume_numerical</span>
229
+ </pre></div>
230
+ </div>
231
+ <p>The overview diagram might also be helpful.</p>
232
+ </section>
233
+ <section id="converting-exact-solutions-into-numerical-solutions">
234
+ <h2>Converting exact solutions into numerical solutions<a class="headerlink" href="#converting-exact-solutions-into-numerical-solutions" title="Link to this heading"></a></h2>
235
+ <p>We can turn exact solutions into numerical solutions by calling <code class="docutils literal notranslate"><span class="pre">numerical</span></code>:</p>
236
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">sol</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;m003&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span><span class="o">.</span><span class="n">retrieve_solutions</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
237
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">sol</span>
238
+ <span class="go">PtolemyCoordinates(</span>
239
+ <span class="go"> {&#39;c_0011_0&#39;: 1,</span>
240
+ <span class="go"> &#39;c_0011_1&#39;: -1,</span>
241
+ <span class="go"> &#39;c_0101_0&#39;: Mod(x, x^2 + x + 1),</span>
242
+ <span class="go"> ...</span>
243
+ <span class="go"> &#39;s_3_1&#39;: 1},</span>
244
+ <span class="go"> is_numerical = False, ...)</span>
245
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">sol</span><span class="o">.</span><span class="n">numerical</span><span class="p">()</span>
246
+ <span class="go">[PtolemyCoordinates(</span>
247
+ <span class="go"> {&#39;c_0011_0&#39;: 1,</span>
248
+ <span class="go"> &#39;c_0011_1&#39;: -1,</span>
249
+ <span class="go"> &#39;c_0101_0&#39;: -0.500000000000000 - 0.866025403784439*I,</span>
250
+ <span class="go"> ...,</span>
251
+ <span class="go"> &#39;s_3_1&#39;: 1},</span>
252
+ <span class="go"> is_numerical = True, ...),</span>
253
+ <span class="go"> PtolemyCoordinates(</span>
254
+ <span class="go"> {&#39;c_0011_0&#39;: 1,</span>
255
+ <span class="go"> &#39;c_0011_1&#39;: -1,</span>
256
+ <span class="go"> &#39;c_0101_0&#39;: -0.500000000000000 + 0.866025403784439*I,</span>
257
+ <span class="go"> ...,</span>
258
+ <span class="go"> &#39;s_3_1&#39;: 1},</span>
259
+ <span class="go"> is_numerical = True, ...)]</span>
260
+ </pre></div>
261
+ </div>
262
+ <p>Note that the one exact (algebraic) solution turns into a list of numerical solutions which are Galois conjugates.</p>
263
+ <p><strong>Remark:</strong> This uses the current pari precision. See the <a class="reference internal" href="ptolemy_examples1.html#ptolemy-example-increase-precision"><span class="std std-ref">above example</span></a>, in particular, the comment about interval arithmetics.</p>
264
+ <p><strong>Remark:</strong> Calling <code class="docutils literal notranslate"><span class="pre">numerical()</span></code> on a numerical solution does nothing.</p>
265
+ <p><strong>Remark:</strong> <code class="docutils literal notranslate"><span class="pre">CrossRatios</span></code> also support <code class="docutils literal notranslate"><span class="pre">numerical</span></code>.</p>
266
+ </section>
267
+ <section id="working-with-exact-vs-numerical-solutions">
268
+ <span id="ptolemy-example-numerical-matrix"></span><h2>Working with exact vs numerical solutions<a class="headerlink" href="#working-with-exact-vs-numerical-solutions" title="Link to this heading"></a></h2>
269
+ <p>Most methods such as <code class="docutils literal notranslate"><span class="pre">evaluate_word</span></code> or <code class="docutils literal notranslate"><span class="pre">cross_ratios</span></code> work just the same way on an exact solution:</p>
270
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">exact_sol</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;m004&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span><span class="o">.</span><span class="n">retrieve_solutions</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
271
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">exact_sol</span>
272
+ <span class="go">PtolemyCoordinates(</span>
273
+ <span class="go"> {&#39;c_0011_0&#39;: 1,</span>
274
+ <span class="go"> &#39;c_0011_1&#39;: -1,</span>
275
+ <span class="go"> &#39;c_0101_0&#39;: 1,</span>
276
+ <span class="go"> &#39;c_0101_1&#39;: Mod(x, x^2 + x + 1),</span>
277
+ <span class="go"> ...,</span>
278
+ <span class="go"> &#39;s_3_1&#39;: -1},</span>
279
+ <span class="go"> is_numerical = False, ...)</span>
280
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">exact_sol</span><span class="o">.</span><span class="n">evaluate_word</span><span class="p">(</span><span class="s1">&#39;a&#39;</span><span class="p">)</span>
281
+ <span class="go">[[Mod(-2*x, x^2 + x + 1), Mod(-x - 1, x^2 + x + 1)],</span>
282
+ <span class="go"> [Mod(x, x^2 + x + 1), Mod(x + 1, x^2 + x + 1)]]</span>
283
+ </pre></div>
284
+ </div>
285
+ <p>… as they do on a numerical solution:</p>
286
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">numerical_sol</span> <span class="o">=</span> <span class="n">sol</span><span class="o">.</span><span class="n">numerical</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
287
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">numerical_sol</span>
288
+ <span class="go">PtolemyCoordinates(</span>
289
+ <span class="go"> {&#39;c_0011_0&#39;: 1,</span>
290
+ <span class="go"> &#39;c_0011_1&#39;: -1,</span>
291
+ <span class="go"> &#39;c_0101_0&#39;: 1,</span>
292
+ <span class="go"> &#39;c_0101_1&#39;: -0.500000000000000 - 0.866025403784439*I,</span>
293
+ <span class="go"> ...,</span>
294
+ <span class="go"> &#39;s_3_1&#39;: -1},</span>
295
+ <span class="go"> is_numerical = False, ...)</span>
296
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">numerical_sol</span><span class="o">.</span><span class="n">evaluate_word</span><span class="p">(</span><span class="s1">&#39;a&#39;</span><span class="p">)</span>
297
+ <span class="go">[[1.00000000000000 + 1.73205080756888*I,</span>
298
+ <span class="go"> -0.500000000000000 + 0.866025403784439*I],</span>
299
+ <span class="go"> [-0.500000000000000 - 0.866025403784439*I,</span>
300
+ <span class="go"> 0.500000000000000 - 0.866025403784439*I]]</span>
301
+ </pre></div>
302
+ </div>
303
+ <p>Methods with postfix <code class="docutils literal notranslate"><span class="pre">_numerical</span></code> are special: when applied to an exact solution, they implicitly convert it to a list
304
+ of Galois conjugate numerical solutions first. <code class="docutils literal notranslate"><span class="pre">volume_numerical</span></code> is an example (because volume is a transcendental function):</p>
305
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">exact_sol</span><span class="o">.</span><span class="n">volume_numerical</span><span class="p">()</span>
306
+ <span class="go">[-2.02988321281931, 2.02988321281931]</span>
307
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">numerical_sol</span><span class="o">.</span><span class="n">volume_numerical</span><span class="p">()</span>
308
+ <span class="go">-2.02988321281931</span>
309
+ </pre></div>
310
+ </div>
311
+ </section>
312
+ <section id="computing-numerical-solutions-directly">
313
+ <span id="ptolemy-example-retrieve-numerical-solutions"></span><h2>Computing numerical solutions directly<a class="headerlink" href="#computing-numerical-solutions-directly" title="Link to this heading"></a></h2>
314
+ <p>We can also directly compute numerical solutions:</p>
315
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">M</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;m004&quot;</span><span class="p">)</span>
316
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">sols</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="s1">&#39;all&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">retrieve_solutions</span><span class="p">(</span><span class="n">numerical</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span>
317
+ <span class="go">[[],</span>
318
+ <span class="go"> [[PtolemyCoordinates(</span>
319
+ <span class="go"> {&#39;c_0011_0&#39;: 1.00000000000000 + 0.E-19*I,</span>
320
+ <span class="go"> &#39;c_0011_1&#39;: -1.00000000000000 + 0.E-19*I,</span>
321
+ <span class="go"> &#39;c_0101_0&#39;: 1.00000000000000 + 0.E-19*I,</span>
322
+ <span class="go"> &#39;c_0101_1&#39;: -0.500000000000000 - 0.866025403784439*I,</span>
323
+ <span class="go"> ...,</span>
324
+ <span class="go"> &#39;s_3_1&#39;: -1},</span>
325
+ <span class="go"> is_numerical = True, ...),</span>
326
+ <span class="go"> PtolemyCoordinates(</span>
327
+ <span class="go"> {&#39;c_0011_0&#39;: 1.00000000000000 + 0.E-19*I,</span>
328
+ <span class="go"> &#39;c_0011_1&#39;: -1.00000000000000 + 0.E-19*I,</span>
329
+ <span class="go"> &#39;c_0101_0&#39;: 1.00000000000000 + 0.E-19*I,</span>
330
+ <span class="go"> &#39;c_0101_1&#39;: -0.500000000000000 + 0.866025403784439*I,</span>
331
+ <span class="go"> ...,</span>
332
+ <span class="go"> &#39;s_3_1&#39;: -1},</span>
333
+ <span class="go"> is_numerical = True, ...)]]]</span>
334
+ </pre></div>
335
+ </div>
336
+ <p>The structure is as described earlier, a list of lists of lists: first solutions are grouped by obstruction class, then by Galois conjugacy.</p>
337
+ <p>The advantage over going through the exact solutions is that it might be much faster
338
+ (because it can avoid computing the number field from the lexicographic Groebner basis, see later). For example, many PSL(3, <strong>C</strong>) examples only work when using <code class="docutils literal notranslate"><span class="pre">numerical</span> <span class="pre">=</span> <span class="pre">True</span></code>.</p>
339
+ </section>
340
+ <section id="computing-cross-ratios-from-ptolemy-coordinates">
341
+ <span id="ptolemy-example-cross-ratios"></span><h2>Computing cross ratios from Ptolemy coordinates<a class="headerlink" href="#computing-cross-ratios-from-ptolemy-coordinates" title="Link to this heading"></a></h2>
342
+ <p>Given exact or numerical solutions to the Ptolemy variety, we can also compute the cross ratios/shape parameters:</p>
343
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">sols</span> <span class="o">=</span> <span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;m004&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="s1">&#39;all&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">retrieve_solutions</span><span class="p">(</span><span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
344
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">zs</span><span class="o">=</span><span class="n">sols</span><span class="o">.</span><span class="n">cross_ratios</span><span class="p">()</span>
345
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">zs</span>
346
+ <span class="go">[[],</span>
347
+ <span class="go"> [CrossRatios({&#39;z_0000_0&#39;: Mod(x + 1, x^2 + x + 1),</span>
348
+ <span class="go"> &#39;z_0000_1&#39;: Mod(x + 1, x^2 + x + 1),</span>
349
+ <span class="go"> &#39;zp_0000_0&#39;: Mod(x + 1, x^2 + x + 1),</span>
350
+ <span class="go"> &#39;zp_0000_1&#39;: Mod(x + 1, x^2 + x + 1),</span>
351
+ <span class="go"> &#39;zpp_0000_0&#39;: Mod(x + 1, x^2 + x + 1),</span>
352
+ <span class="go"> &#39;zpp_0000_1&#39;: Mod(x + 1, x^2 + x + 1)},</span>
353
+ <span class="go"> is_numerical = False, ...)]]</span>
354
+ </pre></div>
355
+ </div>
356
+ <p><strong>Remark</strong>: The shapes will be given as element in the Ptolemy field with defining polynomial being the second argument to <code class="docutils literal notranslate"><span class="pre">Mod(...,</span> <span class="pre">...)</span></code>, here, x<sup>2</sup>+x+1. The Ptolemy field is a (possibly trivial) extension of the shape field. For <em>N</em> =2, the Ptolemy field is the trace field <a class="reference internal" href="ptolemy_prelim.html#ggz2014" id="id2"><span>[GGZ2014]</span></a> and an iterated square extension of the shape field which is the invariant trace field for a cusped manifold.</p>
357
+ <p>And numerically, so that we can compare to SnapPy’s shapes:</p>
358
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">zs</span><span class="o">.</span><span class="n">numerical</span><span class="p">()</span>
359
+ <span class="go">[[],</span>
360
+ <span class="go"> [[CrossRatios(</span>
361
+ <span class="go"> {&#39;z_0000_0&#39;: 0.500000000000000 - 0.866025403784439*I,</span>
362
+ <span class="go"> &#39;z_0000_1&#39;: 0.500000000000000 - 0.866025403784439*I,</span>
363
+ <span class="go"> &#39;zp_0000_0&#39;: 0.500000000000000 - 0.866025403784439*I,</span>
364
+ <span class="go"> &#39;zp_0000_1&#39;: 0.500000000000000 - 0.866025403784439*I,</span>
365
+ <span class="go"> &#39;zpp_0000_0&#39;: 0.500000000000000 - 0.866025403784439*I,</span>
366
+ <span class="go"> &#39;zpp_0000_1&#39;: 0.500000000000000 - 0.866025403784439*I},</span>
367
+ <span class="go"> is_numerical = True, ...),</span>
368
+ <span class="go"> CrossRatios(</span>
369
+ <span class="go"> {&#39;z_0000_0&#39;: 0.500000000000000 + 0.866025403784439*I,</span>
370
+ <span class="go"> &#39;z_0000_1&#39;: 0.500000000000000 + 0.866025403784439*I,</span>
371
+ <span class="go"> &#39;zp_0000_0&#39;: 0.500000000000000 + 0.866025403784439*I,</span>
372
+ <span class="go"> &#39;zp_0000_1&#39;: 0.500000000000000 + 0.866025403784439*I,</span>
373
+ <span class="go"> &#39;zpp_0000_0&#39;: 0.500000000000000 + 0.866025403784439*I,</span>
374
+ <span class="go"> &#39;zpp_0000_1&#39;: 0.500000000000000 + 0.866025403784439*I},</span>
375
+ <span class="go"> is_numerical = True, ...)]]]</span>
376
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">Manifold</span><span class="p">(</span><span class="s2">&quot;m004&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">tetrahedra_shapes</span><span class="p">(</span><span class="s1">&#39;rect&#39;</span><span class="p">)</span>
377
+ <span class="go">[0.5000000000 + 0.8660254038*I, 0.5000000000 + 0.8660254038*I]</span>
378
+ </pre></div>
379
+ </div>
380
+ <p>The result is of type <code class="docutils literal notranslate"><span class="pre">CrossRatios</span></code> and assigns z as well as z’=1/(1-z) and z’’=1-1/z a value.</p>
381
+ </section>
382
+ <section id="the-dimension-of-a-component">
383
+ <span id="ptolemy-non-zero-dim-comp"></span><h2>The dimension of a component<a class="headerlink" href="#the-dimension-of-a-component" title="Link to this heading"></a></h2>
384
+ <p>A Ptolemy variety might have positively dimensional components (note that this might or might not be a positively dimensional family of representations, see <a class="reference internal" href="ptolemy_prelim.html#ptolemy-generically-decorated"><span class="std std-ref">here</span></a>). For example, the Ptolemy variety for <code class="docutils literal notranslate"><span class="pre">m371</span></code> and the trivial obstruction class has a 1-dimensional component. This is indicated by:</p>
385
+ <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">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span><span class="o">.</span><span class="n">retrieve_solutions</span><span class="p">()</span>
386
+ <span class="go">[NonZeroDimensionalComponent(dimension = 1)]</span>
387
+ </pre></div>
388
+ </div>
389
+ <p>Or:</p>
390
+ <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;m371&quot;</span><span class="p">)</span>
391
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">M</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span><span class="o">.</span><span class="n">retrieve_solutions</span><span class="p">()</span>
392
+ <span class="go">[[ PtolemyCoordinates(</span>
393
+ <span class="go"> {&#39;c_0011_0&#39;: 1,</span>
394
+ <span class="go"> &#39;c_0011_1&#39;: -1,</span>
395
+ <span class="go"> &#39;c_0011_2&#39;: -1,</span>
396
+ <span class="go"> &#39;c_0011_3&#39;: Mod(-x - 1, x^2 + x + 2),</span>
397
+ <span class="go"> ...,</span>
398
+ <span class="go"> &#39;s_3_4&#39;: 1},</span>
399
+ <span class="go"> is_numerical = False, ...)</span>
400
+ <span class="go"> (witnesses for NonZeroDimensionalComponent(dimension = 1, free_variables = [&#39;c_0110_2&#39;])) ]]</span>
401
+ </pre></div>
402
+ </div>
403
+ <p>The latter actually also provides a sample point (<a class="reference internal" href="ptolemy_examples3.html#ptolemy-example-find-witness"><span class="std std-ref">witness</span></a> which we will use <a class="reference internal" href="ptolemy_examples3.html#ptolemy-example-non-zero-dim-rep"><span class="std std-ref">later</span></a> to determine whether this corresponds to a 1-dimensional family of representations or not) on the 1-dimensional component. A <code class="docutils literal notranslate"><span class="pre">NonZeroDimensionalComponent</span></code> as well as <code class="docutils literal notranslate"><span class="pre">PtolemyCoordinates</span></code> (that correspond to 0-dimensional components of the Ptolemy variety)) has a <code class="docutils literal notranslate"><span class="pre">dimension</span></code> attribute, so we can do:</p>
404
+ <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;m371&quot;</span><span class="p">)</span>
405
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">sols</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">ptolemy_variety</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="s1">&#39;all&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">retrieve_solutions</span><span class="p">()</span>
406
+ <span class="gp">&gt;&gt;&gt; </span><span class="n">sols</span><span class="o">.</span><span class="n">dimension</span>
407
+ <span class="go">[[1], [], [0], []]</span>
408
+ </pre></div>
409
+ </div>
410
+ <p>This means that the Ptolemy variety for the trivial obstruction class has a 1-dimensional component and that the Ptolemy variety of one of the other obstruction classes a 0-dimensional component.</p>
411
+ <p>A <code class="docutils literal notranslate"><span class="pre">NonZeroDimensionalComponent</span></code> is actually again a list whose elements will be witness points if witnesses have been computed for this Ptolemy variety.</p>
412
+ <p><strong>Warning:</strong> This implies that if we <code class="docutils literal notranslate"><span class="pre">flatten</span></code> too much, the reported dimension becomes 0 which is the dimension of the witness point instead of 1:</p>
413
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">sols</span><span class="o">.</span><span class="n">flatten</span><span class="p">()</span>
414
+ <span class="go">[1, 0]</span>
415
+ </pre></div>
416
+ </div>
417
+ <p>Too much <code class="docutils literal notranslate"><span class="pre">flatten</span></code>:</p>
418
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">sols</span><span class="o">.</span><span class="n">flatten</span><span class="p">()</span>
419
+ <span class="go">[0, 0]</span>
420
+ </pre></div>
421
+ </div>
422
+ <p>The advantage is that we can still call methods such as <code class="docutils literal notranslate"><span class="pre">volume_numerical</span></code> and actually see the volume of a witness point (it is known that the volume stays constant on a component of boundary-unipotent representations, so one witness point can tell us the volume of all representation in that component):</p>
423
+ <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">sols</span><span class="o">.</span><span class="n">volume_numerical</span><span class="p">()</span>
424
+ <span class="go">[[[ [0.E-38, 0.E-38] (witnesses for NonZeroDimensionalComponent(dimension = 1, free_variables = [&#39;c_0110_2&#39;])) ]],</span>
425
+ <span class="go"> [],</span>
426
+ <span class="go"> [[4.75170196551790,</span>
427
+ <span class="go"> -4.75170196551790,</span>
428
+ <span class="go"> 4.75170196551790,</span>
429
+ <span class="go"> -4.75170196551790,</span>
430
+ <span class="go"> 1.17563301006556,</span>
431
+ <span class="go"> -1.17563301006556,</span>
432
+ <span class="go"> 1.17563301006556,</span>
433
+ <span class="go"> -1.17563301006556]],</span>
434
+ <span class="go"> []]</span>
435
+ </pre></div>
436
+ </div>
437
+ </section>
438
+ </section>
439
+
440
+
441
+ </div>
442
+ </div>
443
+ <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
444
+ <a href="ptolemy_examples1.html" class="btn btn-neutral float-left" title="Step-by-step examples: Part 1" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
445
+ <a href="ptolemy_examples3.html" class="btn btn-neutral float-right" title="Step-by-step examples: Part 3" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
446
+ </div>
447
+
448
+ <hr/>
449
+
450
+ <div role="contentinfo">
451
+ <p>&#169; Copyright 2009-2025, by Marc Culler, Nathan Dunfield, Matthias Goerner, Jeffrey Weeks and others.</p>
452
+ </div>
453
+
454
+ Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
455
+ <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
456
+ provided by <a href="https://readthedocs.org">Read the Docs</a>.
457
+
458
+
459
+ </footer>
460
+ </div>
461
+ </div>
462
+ </section>
463
+ </div>
464
+ <script>
465
+ jQuery(function () {
466
+ SphinxRtdTheme.Navigation.enable(true);
467
+ });
468
+ </script>
469
+
470
+ </body>
474
471
  </html>