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

Sign up to get free protection for your applications and to get access to all the features.
Files changed (471) hide show
  1. snappy/CyOpenGL.cp312-win_amd64.pyd +0 -0
  2. snappy/SnapPy.cp312-win_amd64.pyd +0 -0
  3. snappy/SnapPyHP.cp312-win_amd64.pyd +0 -0
  4. snappy/__init__.py +271 -401
  5. snappy/app.py +70 -20
  6. snappy/browser.py +18 -17
  7. snappy/canonical.py +249 -0
  8. snappy/{verify/cusp_shapes.py → cusps/__init__.py} +8 -18
  9. snappy/cusps/cusp_area_matrix.py +101 -0
  10. snappy/{verify/cusp_areas.py → cusps/cusp_areas_from_matrix.py} +23 -39
  11. snappy/cusps/maximal_cusp_area_matrix.py +136 -0
  12. snappy/cusps/test.py +21 -0
  13. snappy/cusps/trig_cusp_area_matrix.py +63 -0
  14. snappy/database.py +10 -9
  15. snappy/decorated_isosig.py +337 -114
  16. snappy/dev/extended_ptolemy/complexVolumesClosed.py +40 -7
  17. snappy/dev/extended_ptolemy/extended.py +3 -3
  18. snappy/dev/extended_ptolemy/phc_wrapper.py +10 -10
  19. snappy/dev/vericlosed/oneVertexTruncatedComplex.py +1 -1
  20. snappy/doc/_images/m004_paper_plane_on_systole.jpg +0 -0
  21. snappy/doc/_images/m125_paper_plane.jpg +0 -0
  22. snappy/doc/_images/o9_00000_systole_paper_plane.jpg +0 -0
  23. snappy/doc/_images/o9_00000_systole_paper_plane_closer.jpg +0 -0
  24. snappy/doc/_sources/additional_classes.rst.txt +40 -40
  25. snappy/doc/_sources/bugs.rst.txt +14 -14
  26. snappy/doc/_sources/censuses.rst.txt +51 -51
  27. snappy/doc/_sources/credits.rst.txt +75 -75
  28. snappy/doc/_sources/development.rst.txt +259 -239
  29. snappy/doc/_sources/index.rst.txt +182 -115
  30. snappy/doc/_sources/installing.rst.txt +247 -264
  31. snappy/doc/_sources/manifold.rst.txt +6 -6
  32. snappy/doc/_sources/manifoldhp.rst.txt +46 -46
  33. snappy/doc/_sources/news.rst.txt +355 -283
  34. snappy/doc/_sources/other.rst.txt +25 -25
  35. snappy/doc/_sources/platonic_census.rst.txt +20 -20
  36. snappy/doc/_sources/plink.rst.txt +102 -102
  37. snappy/doc/_sources/ptolemy.rst.txt +66 -66
  38. snappy/doc/_sources/ptolemy_classes.rst.txt +42 -42
  39. snappy/doc/_sources/ptolemy_examples1.rst.txt +298 -297
  40. snappy/doc/_sources/ptolemy_examples2.rst.txt +363 -363
  41. snappy/doc/_sources/ptolemy_examples3.rst.txt +301 -301
  42. snappy/doc/_sources/ptolemy_examples4.rst.txt +61 -61
  43. snappy/doc/_sources/ptolemy_prelim.rst.txt +105 -105
  44. snappy/doc/_sources/screenshots.rst.txt +21 -21
  45. snappy/doc/_sources/snap.rst.txt +87 -87
  46. snappy/doc/_sources/snappy.rst.txt +28 -28
  47. snappy/doc/_sources/spherogram.rst.txt +103 -103
  48. snappy/doc/_sources/todo.rst.txt +47 -47
  49. snappy/doc/_sources/triangulation.rst.txt +11 -11
  50. snappy/doc/_sources/tutorial.rst.txt +49 -49
  51. snappy/doc/_sources/verify.rst.txt +210 -150
  52. snappy/doc/_sources/verify_internals.rst.txt +79 -90
  53. snappy/doc/_static/basic.css +924 -924
  54. snappy/doc/_static/css/badge_only.css +1 -1
  55. snappy/doc/_static/css/theme.css +1 -1
  56. snappy/doc/_static/doctools.js +1 -1
  57. snappy/doc/_static/documentation_options.js +12 -12
  58. snappy/doc/_static/fonts/Lato/lato-bold.eot +0 -0
  59. snappy/doc/_static/fonts/Lato/lato-bold.ttf +0 -0
  60. snappy/doc/_static/fonts/Lato/lato-bold.woff +0 -0
  61. snappy/doc/_static/fonts/Lato/lato-bold.woff2 +0 -0
  62. snappy/doc/_static/fonts/Lato/lato-bolditalic.eot +0 -0
  63. snappy/doc/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
  64. snappy/doc/_static/fonts/Lato/lato-bolditalic.woff +0 -0
  65. snappy/doc/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
  66. snappy/doc/_static/fonts/Lato/lato-italic.eot +0 -0
  67. snappy/doc/_static/fonts/Lato/lato-italic.ttf +0 -0
  68. snappy/doc/_static/fonts/Lato/lato-italic.woff +0 -0
  69. snappy/doc/_static/fonts/Lato/lato-italic.woff2 +0 -0
  70. snappy/doc/_static/fonts/Lato/lato-regular.eot +0 -0
  71. snappy/doc/_static/fonts/Lato/lato-regular.ttf +0 -0
  72. snappy/doc/_static/fonts/Lato/lato-regular.woff +0 -0
  73. snappy/doc/_static/fonts/Lato/lato-regular.woff2 +0 -0
  74. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
  75. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
  76. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
  77. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
  78. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
  79. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
  80. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
  81. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
  82. snappy/doc/_static/js/versions.js +228 -0
  83. snappy/doc/_static/language_data.js +199 -199
  84. snappy/doc/_static/pygments.css +74 -74
  85. snappy/doc/_static/searchtools.js +108 -62
  86. snappy/doc/_static/snappy_furo.css +33 -33
  87. snappy/doc/_static/snappy_sphinx_rtd_theme.css +42 -42
  88. snappy/doc/additional_classes.html +1499 -1330
  89. snappy/doc/bugs.html +131 -134
  90. snappy/doc/censuses.html +426 -445
  91. snappy/doc/credits.html +180 -183
  92. snappy/doc/development.html +383 -363
  93. snappy/doc/genindex.html +1330 -1409
  94. snappy/doc/index.html +261 -206
  95. snappy/doc/installing.html +345 -363
  96. snappy/doc/manifold.html +3451 -2839
  97. snappy/doc/manifoldhp.html +179 -182
  98. snappy/doc/news.html +387 -329
  99. snappy/doc/objects.inv +0 -0
  100. snappy/doc/other.html +160 -162
  101. snappy/doc/platonic_census.html +374 -377
  102. snappy/doc/plink.html +209 -212
  103. snappy/doc/ptolemy.html +253 -255
  104. snappy/doc/ptolemy_classes.html +1143 -1146
  105. snappy/doc/ptolemy_examples1.html +408 -410
  106. snappy/doc/ptolemy_examples2.html +470 -473
  107. snappy/doc/ptolemy_examples3.html +413 -416
  108. snappy/doc/ptolemy_examples4.html +194 -197
  109. snappy/doc/ptolemy_prelim.html +247 -250
  110. snappy/doc/py-modindex.html +164 -167
  111. snappy/doc/screenshots.html +140 -142
  112. snappy/doc/search.html +134 -137
  113. snappy/doc/searchindex.js +1 -1
  114. snappy/doc/snap.html +201 -204
  115. snappy/doc/snappy.html +180 -182
  116. snappy/doc/spherogram.html +1210 -1213
  117. snappy/doc/todo.html +165 -168
  118. snappy/doc/triangulation.html +1583 -1474
  119. snappy/doc/tutorial.html +158 -161
  120. snappy/doc/verify.html +329 -275
  121. snappy/doc/verify_internals.html +1234 -1691
  122. snappy/drilling/__init__.py +153 -235
  123. snappy/drilling/barycentric.py +103 -0
  124. snappy/drilling/constants.py +0 -2
  125. snappy/drilling/crush.py +56 -130
  126. snappy/drilling/cusps.py +12 -6
  127. snappy/drilling/debug.py +2 -1
  128. snappy/drilling/exceptions.py +7 -40
  129. snappy/drilling/moves.py +302 -243
  130. snappy/drilling/perturb.py +63 -37
  131. snappy/drilling/shorten.py +36 -0
  132. snappy/drilling/subdivide.py +0 -5
  133. snappy/drilling/test.py +23 -0
  134. snappy/drilling/test_cases.py +126 -0
  135. snappy/drilling/tracing.py +9 -37
  136. snappy/exceptions.py +18 -5
  137. snappy/exterior_to_link/barycentric_geometry.py +2 -4
  138. snappy/exterior_to_link/main.py +8 -7
  139. snappy/exterior_to_link/mcomplex_with_link.py +2 -2
  140. snappy/exterior_to_link/rational_linear_algebra.py +1 -1
  141. snappy/exterior_to_link/rational_linear_algebra_wrapped.py +1 -1
  142. snappy/exterior_to_link/test.py +21 -33
  143. snappy/geometric_structure/__init__.py +212 -0
  144. snappy/geometric_structure/cusp_neighborhood/__init__.py +3 -0
  145. snappy/geometric_structure/cusp_neighborhood/complex_cusp_cross_section.py +697 -0
  146. snappy/geometric_structure/cusp_neighborhood/cusp_cross_section_base.py +484 -0
  147. snappy/geometric_structure/cusp_neighborhood/exceptions.py +42 -0
  148. snappy/geometric_structure/cusp_neighborhood/real_cusp_cross_section.py +298 -0
  149. snappy/geometric_structure/cusp_neighborhood/tiles_for_cusp_neighborhood.py +159 -0
  150. snappy/geometric_structure/cusp_neighborhood/vertices.py +32 -0
  151. snappy/geometric_structure/geodesic/__init__.py +0 -0
  152. snappy/geometric_structure/geodesic/add_core_curves.py +152 -0
  153. snappy/geometric_structure/geodesic/avoid_core_curves.py +369 -0
  154. snappy/geometric_structure/geodesic/canonical_keys.py +52 -0
  155. snappy/geometric_structure/geodesic/check_away_from_core_curve.py +60 -0
  156. snappy/geometric_structure/geodesic/constants.py +6 -0
  157. snappy/geometric_structure/geodesic/exceptions.py +22 -0
  158. snappy/{drilling → geometric_structure/geodesic}/fixed_points.py +34 -9
  159. snappy/{drilling/geodesic_info.py → geometric_structure/geodesic/geodesic_start_point_info.py} +139 -180
  160. snappy/geometric_structure/geodesic/graph_trace_helper.py +67 -0
  161. snappy/geometric_structure/geodesic/line.py +30 -0
  162. snappy/geometric_structure/geodesic/multiplicity.py +127 -0
  163. snappy/geometric_structure/geodesic/tiles_for_geodesic.py +101 -0
  164. snappy/geometric_structure/test.py +22 -0
  165. snappy/gui.py +23 -13
  166. snappy/horoviewer.py +7 -7
  167. snappy/hyperboloid/__init__.py +96 -31
  168. snappy/hyperboloid/distances.py +245 -0
  169. snappy/hyperboloid/horoball.py +19 -0
  170. snappy/hyperboloid/line.py +35 -0
  171. snappy/hyperboloid/point.py +9 -0
  172. snappy/hyperboloid/triangle.py +29 -0
  173. snappy/isometry_signature.py +382 -0
  174. snappy/len_spec/__init__.py +596 -0
  175. snappy/len_spec/geodesic_info.py +110 -0
  176. snappy/len_spec/geodesic_key_info_dict.py +117 -0
  177. snappy/len_spec/geodesic_piece.py +143 -0
  178. snappy/len_spec/geometric_structure.py +182 -0
  179. snappy/len_spec/geometry.py +80 -0
  180. snappy/len_spec/length_spectrum_geodesic_info.py +170 -0
  181. snappy/len_spec/spine.py +206 -0
  182. snappy/len_spec/test.py +24 -0
  183. snappy/len_spec/test_cases.py +69 -0
  184. snappy/len_spec/tile.py +275 -0
  185. snappy/len_spec/word.py +86 -0
  186. snappy/math_basics.py +39 -13
  187. snappy/matrix.py +52 -9
  188. snappy/number.py +12 -6
  189. snappy/numeric_output_checker.py +2 -3
  190. snappy/pari.py +6 -3
  191. snappy/polyviewer.py +8 -8
  192. snappy/ptolemy/__init__.py +1 -1
  193. snappy/ptolemy/component.py +2 -2
  194. snappy/ptolemy/coordinates.py +25 -25
  195. snappy/ptolemy/findLoops.py +9 -9
  196. snappy/ptolemy/manifoldMethods.py +27 -29
  197. snappy/ptolemy/polynomial.py +50 -57
  198. snappy/ptolemy/processFileBase.py +60 -0
  199. snappy/ptolemy/ptolemyVariety.py +109 -41
  200. snappy/ptolemy/reginaWrapper.py +4 -4
  201. snappy/ptolemy/rur.py +1 -1
  202. snappy/ptolemy/solutionsToPrimeIdealGroebnerBasis.py +9 -9
  203. snappy/ptolemy/test.py +99 -54
  204. snappy/ptolemy/utilities.py +1 -1
  205. snappy/raytracing/__init__.py +64 -0
  206. snappy/raytracing/additional_horospheres.py +64 -0
  207. snappy/raytracing/additional_len_spec_choices.py +63 -0
  208. snappy/raytracing/cohomology_fractal.py +0 -3
  209. snappy/raytracing/eyeball.py +123 -0
  210. snappy/raytracing/finite_raytracing_data.py +17 -17
  211. snappy/raytracing/finite_viewer.py +15 -15
  212. snappy/raytracing/geodesic_tube_info.py +93 -63
  213. snappy/raytracing/geodesics.py +94 -64
  214. snappy/raytracing/geodesics_window.py +56 -34
  215. snappy/raytracing/gui_utilities.py +21 -6
  216. snappy/raytracing/hyperboloid_navigation.py +29 -4
  217. snappy/raytracing/hyperboloid_utilities.py +73 -73
  218. snappy/raytracing/ideal_raytracing_data.py +121 -91
  219. snappy/raytracing/inside_viewer.py +199 -66
  220. snappy/raytracing/pack.py +22 -0
  221. snappy/raytracing/raytracing_data.py +37 -25
  222. snappy/raytracing/raytracing_view.py +70 -65
  223. snappy/raytracing/shaders/Eye.png +0 -0
  224. snappy/raytracing/shaders/NonGeometric.png +0 -0
  225. snappy/raytracing/shaders/__init__.py +39 -3
  226. snappy/raytracing/shaders/fragment.glsl +451 -133
  227. snappy/raytracing/test.py +29 -0
  228. snappy/raytracing/tooltip.py +146 -0
  229. snappy/raytracing/upper_halfspace_utilities.py +42 -9
  230. snappy/sage_helper.py +67 -134
  231. snappy/settings.py +90 -77
  232. snappy/shell.py +2 -0
  233. snappy/snap/character_varieties.py +2 -2
  234. snappy/snap/find_field.py +4 -3
  235. snappy/snap/fundamental_polyhedron.py +2 -2
  236. snappy/snap/kernel_structures.py +5 -1
  237. snappy/snap/nsagetools.py +9 -8
  238. snappy/snap/peripheral/dual_cellulation.py +4 -3
  239. snappy/snap/peripheral/peripheral.py +2 -2
  240. snappy/snap/peripheral/surface.py +5 -5
  241. snappy/snap/peripheral/test.py +1 -1
  242. snappy/snap/polished_reps.py +8 -8
  243. snappy/snap/slice_obs_HKL.py +16 -14
  244. snappy/snap/t3mlite/arrow.py +3 -3
  245. snappy/snap/t3mlite/edge.py +3 -3
  246. snappy/snap/t3mlite/homology.py +2 -2
  247. snappy/snap/t3mlite/mcomplex.py +3 -3
  248. snappy/snap/t3mlite/simplex.py +12 -0
  249. snappy/snap/t3mlite/spun.py +18 -17
  250. snappy/snap/t3mlite/test_vs_regina.py +4 -4
  251. snappy/snap/test.py +37 -53
  252. snappy/snap/utilities.py +4 -5
  253. snappy/test.py +121 -138
  254. snappy/test_cases.py +263 -0
  255. snappy/testing.py +131 -0
  256. snappy/tiling/__init__.py +2 -0
  257. snappy/tiling/canonical_key_dict.py +59 -0
  258. snappy/tiling/dict_based_set.py +79 -0
  259. snappy/tiling/floor.py +49 -0
  260. snappy/tiling/hyperboloid_dict.py +54 -0
  261. snappy/tiling/iter_utils.py +78 -0
  262. snappy/tiling/lifted_tetrahedron.py +22 -0
  263. snappy/tiling/lifted_tetrahedron_set.py +54 -0
  264. snappy/tiling/real_hash_dict.py +164 -0
  265. snappy/tiling/test.py +23 -0
  266. snappy/tiling/tile.py +215 -0
  267. snappy/tiling/triangle.py +33 -0
  268. snappy/tkterminal.py +113 -84
  269. snappy/twister/main.py +1 -7
  270. snappy/twister/twister_core.cp312-win_amd64.pyd +0 -0
  271. snappy/upper_halfspace/__init__.py +78 -17
  272. snappy/verify/__init__.py +3 -7
  273. snappy/verify/{verifyCanonical.py → canonical.py} +78 -70
  274. snappy/verify/complex_volume/adjust_torsion.py +1 -2
  275. snappy/verify/complex_volume/closed.py +13 -13
  276. snappy/verify/complex_volume/cusped.py +6 -6
  277. snappy/verify/complex_volume/extended_bloch.py +5 -8
  278. snappy/verify/{cuspTranslations.py → cusp_translations.py} +1 -1
  279. snappy/verify/edge_equations.py +80 -0
  280. snappy/verify/exceptions.py +0 -55
  281. snappy/verify/{verifyHyperbolicity.py → hyperbolicity.py} +3 -3
  282. snappy/verify/interval_newton_shapes_engine.py +7 -5
  283. snappy/verify/interval_tree.py +5 -5
  284. snappy/verify/krawczyk_shapes_engine.py +17 -18
  285. snappy/verify/maximal_cusp_area_matrix/__init__.py +7 -74
  286. snappy/verify/maximal_cusp_area_matrix/cusp_tiling_engine.py +3 -4
  287. snappy/verify/maximal_cusp_area_matrix/cusp_translate_engine.py +1 -1
  288. snappy/verify/{realAlgebra.py → real_algebra.py} +1 -1
  289. snappy/verify/shapes.py +5 -3
  290. snappy/verify/short_slopes.py +39 -41
  291. snappy/verify/{squareExtensions.py → square_extensions.py} +14 -11
  292. snappy/verify/test.py +57 -60
  293. snappy/verify/upper_halfspace/extended_matrix.py +1 -1
  294. snappy/verify/upper_halfspace/finite_point.py +3 -4
  295. snappy/verify/upper_halfspace/ideal_point.py +9 -9
  296. snappy/verify/volume.py +2 -2
  297. snappy/version.py +2 -2
  298. {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/METADATA +25 -11
  299. snappy-3.2.dist-info/RECORD +503 -0
  300. {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/WHEEL +1 -1
  301. {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/top_level.txt +6 -1
  302. snappy/__pycache__/__init__.cpython-312.pyc +0 -0
  303. snappy/__pycache__/browser.cpython-312.pyc +0 -0
  304. snappy/__pycache__/cache.cpython-312.pyc +0 -0
  305. snappy/__pycache__/database.cpython-312.pyc +0 -0
  306. snappy/__pycache__/db_utilities.cpython-312.pyc +0 -0
  307. snappy/__pycache__/decorated_isosig.cpython-312.pyc +0 -0
  308. snappy/__pycache__/exceptions.cpython-312.pyc +0 -0
  309. snappy/__pycache__/export_stl.cpython-312.pyc +0 -0
  310. snappy/__pycache__/filedialog.cpython-312.pyc +0 -0
  311. snappy/__pycache__/gui.cpython-312.pyc +0 -0
  312. snappy/__pycache__/horoviewer.cpython-312.pyc +0 -0
  313. snappy/__pycache__/math_basics.cpython-312.pyc +0 -0
  314. snappy/__pycache__/matrix.cpython-312.pyc +0 -0
  315. snappy/__pycache__/number.cpython-312.pyc +0 -0
  316. snappy/__pycache__/numeric_output_checker.cpython-312.pyc +0 -0
  317. snappy/__pycache__/pari.cpython-312.pyc +0 -0
  318. snappy/__pycache__/polyviewer.cpython-312.pyc +0 -0
  319. snappy/__pycache__/sage_helper.cpython-312.pyc +0 -0
  320. snappy/__pycache__/version.cpython-312.pyc +0 -0
  321. snappy/doc/_sources/verify_canon.rst.txt +0 -90
  322. snappy/doc/_static/js/html5shiv-printshiv.min.js +0 -4
  323. snappy/doc/_static/js/html5shiv.min.js +0 -4
  324. snappy/doc/verify_canon.html +0 -304
  325. snappy/drilling/__pycache__/__init__.cpython-312.pyc +0 -0
  326. snappy/drilling/__pycache__/constants.cpython-312.pyc +0 -0
  327. snappy/drilling/__pycache__/crush.cpython-312.pyc +0 -0
  328. snappy/drilling/__pycache__/cusps.cpython-312.pyc +0 -0
  329. snappy/drilling/__pycache__/debug.cpython-312.pyc +0 -0
  330. snappy/drilling/__pycache__/epsilons.cpython-312.pyc +0 -0
  331. snappy/drilling/__pycache__/exceptions.cpython-312.pyc +0 -0
  332. snappy/drilling/__pycache__/fixed_points.cpython-312.pyc +0 -0
  333. snappy/drilling/__pycache__/geodesic_info.cpython-312.pyc +0 -0
  334. snappy/drilling/__pycache__/geodesic_tube.cpython-312.pyc +0 -0
  335. snappy/drilling/__pycache__/geometric_structure.cpython-312.pyc +0 -0
  336. snappy/drilling/__pycache__/line.cpython-312.pyc +0 -0
  337. snappy/drilling/__pycache__/moves.cpython-312.pyc +0 -0
  338. snappy/drilling/__pycache__/peripheral_curves.cpython-312.pyc +0 -0
  339. snappy/drilling/__pycache__/perturb.cpython-312.pyc +0 -0
  340. snappy/drilling/__pycache__/quotient_space.cpython-312.pyc +0 -0
  341. snappy/drilling/__pycache__/spatial_dict.cpython-312.pyc +0 -0
  342. snappy/drilling/__pycache__/subdivide.cpython-312.pyc +0 -0
  343. snappy/drilling/__pycache__/tracing.cpython-312.pyc +0 -0
  344. snappy/drilling/geodesic_tube.py +0 -441
  345. snappy/drilling/geometric_structure.py +0 -366
  346. snappy/drilling/line.py +0 -122
  347. snappy/drilling/quotient_space.py +0 -94
  348. snappy/drilling/spatial_dict.py +0 -128
  349. snappy/exterior_to_link/__pycache__/__init__.cpython-312.pyc +0 -0
  350. snappy/exterior_to_link/__pycache__/barycentric_geometry.cpython-312.pyc +0 -0
  351. snappy/exterior_to_link/__pycache__/exceptions.cpython-312.pyc +0 -0
  352. snappy/exterior_to_link/__pycache__/hyp_utils.cpython-312.pyc +0 -0
  353. snappy/exterior_to_link/__pycache__/link_projection.cpython-312.pyc +0 -0
  354. snappy/exterior_to_link/__pycache__/main.cpython-312.pyc +0 -0
  355. snappy/exterior_to_link/__pycache__/mcomplex_with_expansion.cpython-312.pyc +0 -0
  356. snappy/exterior_to_link/__pycache__/mcomplex_with_link.cpython-312.pyc +0 -0
  357. snappy/exterior_to_link/__pycache__/mcomplex_with_memory.cpython-312.pyc +0 -0
  358. snappy/exterior_to_link/__pycache__/pl_utils.cpython-312.pyc +0 -0
  359. snappy/exterior_to_link/__pycache__/put_in_S3.cpython-312.pyc +0 -0
  360. snappy/exterior_to_link/__pycache__/rational_linear_algebra.cpython-312.pyc +0 -0
  361. snappy/exterior_to_link/__pycache__/simplify_to_base_tri.cpython-312.pyc +0 -0
  362. snappy/exterior_to_link/__pycache__/stored_moves.cpython-312.pyc +0 -0
  363. snappy/hyperboloid/__pycache__/__init__.cpython-312.pyc +0 -0
  364. snappy/manifolds/__pycache__/__init__.cpython-312.pyc +0 -0
  365. snappy/ptolemy/__pycache__/__init__.cpython-312.pyc +0 -0
  366. snappy/ptolemy/__pycache__/component.cpython-312.pyc +0 -0
  367. snappy/ptolemy/__pycache__/coordinates.cpython-312.pyc +0 -0
  368. snappy/ptolemy/__pycache__/fieldExtensions.cpython-312.pyc +0 -0
  369. snappy/ptolemy/__pycache__/findLoops.cpython-312.pyc +0 -0
  370. snappy/ptolemy/__pycache__/homology.cpython-312.pyc +0 -0
  371. snappy/ptolemy/__pycache__/manifoldMethods.cpython-312.pyc +0 -0
  372. snappy/ptolemy/__pycache__/matrix.cpython-312.pyc +0 -0
  373. snappy/ptolemy/__pycache__/numericalSolutionsToGroebnerBasis.cpython-312.pyc +0 -0
  374. snappy/ptolemy/__pycache__/polynomial.cpython-312.pyc +0 -0
  375. snappy/ptolemy/__pycache__/processComponents.cpython-312.pyc +0 -0
  376. snappy/ptolemy/__pycache__/processFileBase.cpython-312.pyc +0 -0
  377. snappy/ptolemy/__pycache__/processFileDispatch.cpython-312.pyc +0 -0
  378. snappy/ptolemy/__pycache__/processMagmaFile.cpython-312.pyc +0 -0
  379. snappy/ptolemy/__pycache__/processRurFile.cpython-312.pyc +0 -0
  380. snappy/ptolemy/__pycache__/ptolemyGeneralizedObstructionClass.cpython-312.pyc +0 -0
  381. snappy/ptolemy/__pycache__/ptolemyObstructionClass.cpython-312.pyc +0 -0
  382. snappy/ptolemy/__pycache__/ptolemyVariety.cpython-312.pyc +0 -0
  383. snappy/ptolemy/__pycache__/ptolemyVarietyPrimeIdealGroebnerBasis.cpython-312.pyc +0 -0
  384. snappy/ptolemy/__pycache__/rur.cpython-312.pyc +0 -0
  385. snappy/ptolemy/__pycache__/solutionsToPrimeIdealGroebnerBasis.cpython-312.pyc +0 -0
  386. snappy/ptolemy/__pycache__/utilities.cpython-312.pyc +0 -0
  387. snappy/snap/__pycache__/__init__.cpython-312.pyc +0 -0
  388. snappy/snap/__pycache__/character_varieties.cpython-312.pyc +0 -0
  389. snappy/snap/__pycache__/fundamental_polyhedron.cpython-312.pyc +0 -0
  390. snappy/snap/__pycache__/interval_reps.cpython-312.pyc +0 -0
  391. snappy/snap/__pycache__/kernel_structures.cpython-312.pyc +0 -0
  392. snappy/snap/__pycache__/mcomplex_base.cpython-312.pyc +0 -0
  393. snappy/snap/__pycache__/nsagetools.cpython-312.pyc +0 -0
  394. snappy/snap/__pycache__/polished_reps.cpython-312.pyc +0 -0
  395. snappy/snap/__pycache__/shapes.cpython-312.pyc +0 -0
  396. snappy/snap/__pycache__/slice_obs_HKL.cpython-312.pyc +0 -0
  397. snappy/snap/__pycache__/utilities.cpython-312.pyc +0 -0
  398. snappy/snap/peripheral/__pycache__/__init__.cpython-312.pyc +0 -0
  399. snappy/snap/peripheral/__pycache__/dual_cellulation.cpython-312.pyc +0 -0
  400. snappy/snap/peripheral/__pycache__/link.cpython-312.pyc +0 -0
  401. snappy/snap/peripheral/__pycache__/peripheral.cpython-312.pyc +0 -0
  402. snappy/snap/peripheral/__pycache__/surface.cpython-312.pyc +0 -0
  403. snappy/snap/t3mlite/__pycache__/__init__.cpython-312.pyc +0 -0
  404. snappy/snap/t3mlite/__pycache__/arrow.cpython-312.pyc +0 -0
  405. snappy/snap/t3mlite/__pycache__/corner.cpython-312.pyc +0 -0
  406. snappy/snap/t3mlite/__pycache__/edge.cpython-312.pyc +0 -0
  407. snappy/snap/t3mlite/__pycache__/face.cpython-312.pyc +0 -0
  408. snappy/snap/t3mlite/__pycache__/files.cpython-312.pyc +0 -0
  409. snappy/snap/t3mlite/__pycache__/homology.cpython-312.pyc +0 -0
  410. snappy/snap/t3mlite/__pycache__/linalg.cpython-312.pyc +0 -0
  411. snappy/snap/t3mlite/__pycache__/mcomplex.cpython-312.pyc +0 -0
  412. snappy/snap/t3mlite/__pycache__/perm4.cpython-312.pyc +0 -0
  413. snappy/snap/t3mlite/__pycache__/simplex.cpython-312.pyc +0 -0
  414. snappy/snap/t3mlite/__pycache__/spun.cpython-312.pyc +0 -0
  415. snappy/snap/t3mlite/__pycache__/surface.cpython-312.pyc +0 -0
  416. snappy/snap/t3mlite/__pycache__/tetrahedron.cpython-312.pyc +0 -0
  417. snappy/snap/t3mlite/__pycache__/vertex.cpython-312.pyc +0 -0
  418. snappy/togl/__init__.py +0 -3
  419. snappy/togl/darwin-tk8.6/Togl2.1/LICENSE +0 -28
  420. snappy/togl/darwin-tk8.6/Togl2.1/libTogl2.1.dylib +0 -0
  421. snappy/togl/darwin-tk8.6/Togl2.1/pkgIndex.tcl +0 -5
  422. snappy/togl/darwin-tk8.7/Togl2.1/LICENSE +0 -28
  423. snappy/togl/darwin-tk8.7/Togl2.1/libTogl2.1.dylib +0 -0
  424. snappy/togl/darwin-tk8.7/Togl2.1/pkgIndex.tcl +0 -5
  425. snappy/togl/linux2-x86_64-tk8.6/Togl2.1/LICENSE +0 -28
  426. snappy/togl/linux2-x86_64-tk8.6/Togl2.1/libTogl2.1.so +0 -0
  427. snappy/togl/linux2-x86_64-tk8.6/Togl2.1/pkgIndex.tcl +0 -5
  428. snappy/togl/win32VC-tk8.6/Togl2.1/LICENSE +0 -28
  429. snappy/togl/win32VC-tk8.6/Togl2.1/Togl21.dll +0 -0
  430. snappy/togl/win32VC-tk8.6/Togl2.1/Togl21.lib +0 -0
  431. snappy/togl/win32VC-tk8.6/Togl2.1/pkgIndex.tcl +0 -6
  432. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/LICENSE +0 -28
  433. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/Togl21.dll +0 -0
  434. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/Togl21.lib +0 -0
  435. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/pkgIndex.tcl +0 -6
  436. snappy/twister/__pycache__/__init__.cpython-312.pyc +0 -0
  437. snappy/twister/__pycache__/main.cpython-312.pyc +0 -0
  438. snappy/upper_halfspace/__pycache__/__init__.cpython-312.pyc +0 -0
  439. snappy/upper_halfspace/__pycache__/ideal_point.cpython-312.pyc +0 -0
  440. snappy/verify/__pycache__/__init__.cpython-312.pyc +0 -0
  441. snappy/verify/__pycache__/cuspCrossSection.cpython-312.pyc +0 -0
  442. snappy/verify/__pycache__/cuspTranslations.cpython-312.pyc +0 -0
  443. snappy/verify/__pycache__/cusp_areas.cpython-312.pyc +0 -0
  444. snappy/verify/__pycache__/cusp_shapes.cpython-312.pyc +0 -0
  445. snappy/verify/__pycache__/exceptions.cpython-312.pyc +0 -0
  446. snappy/verify/__pycache__/interval_newton_shapes_engine.cpython-312.pyc +0 -0
  447. snappy/verify/__pycache__/interval_tree.cpython-312.pyc +0 -0
  448. snappy/verify/__pycache__/krawczyk_shapes_engine.cpython-312.pyc +0 -0
  449. snappy/verify/__pycache__/realAlgebra.cpython-312.pyc +0 -0
  450. snappy/verify/__pycache__/shapes.cpython-312.pyc +0 -0
  451. snappy/verify/__pycache__/short_slopes.cpython-312.pyc +0 -0
  452. snappy/verify/__pycache__/squareExtensions.cpython-312.pyc +0 -0
  453. snappy/verify/__pycache__/verifyCanonical.cpython-312.pyc +0 -0
  454. snappy/verify/__pycache__/verifyHyperbolicity.cpython-312.pyc +0 -0
  455. snappy/verify/__pycache__/volume.cpython-312.pyc +0 -0
  456. snappy/verify/complex_volume/__pycache__/__init__.cpython-312.pyc +0 -0
  457. snappy/verify/complex_volume/__pycache__/adjust_torsion.cpython-312.pyc +0 -0
  458. snappy/verify/complex_volume/__pycache__/closed.cpython-312.pyc +0 -0
  459. snappy/verify/complex_volume/__pycache__/compute_ptolemys.cpython-312.pyc +0 -0
  460. snappy/verify/complex_volume/__pycache__/cusped.cpython-312.pyc +0 -0
  461. snappy/verify/complex_volume/__pycache__/extended_bloch.cpython-312.pyc +0 -0
  462. snappy/verify/cuspCrossSection.py +0 -1422
  463. snappy/verify/maximal_cusp_area_matrix/__pycache__/__init__.cpython-312.pyc +0 -0
  464. snappy/verify/maximal_cusp_area_matrix/__pycache__/cusp_tiling_engine.cpython-312.pyc +0 -0
  465. snappy/verify/maximal_cusp_area_matrix/__pycache__/cusp_translate_engine.cpython-312.pyc +0 -0
  466. snappy/verify/upper_halfspace/__pycache__/__init__.cpython-312.pyc +0 -0
  467. snappy/verify/upper_halfspace/__pycache__/extended_matrix.cpython-312.pyc +0 -0
  468. snappy/verify/upper_halfspace/__pycache__/finite_point.cpython-312.pyc +0 -0
  469. snappy/verify/upper_halfspace/__pycache__/ideal_point.cpython-312.pyc +0 -0
  470. snappy-3.1.1.dist-info/RECORD +0 -572
  471. {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/entry_points.txt +0 -0
@@ -1,297 +1,298 @@
1
- Step-by-step examples: Part 1
2
- =============================
3
-
4
- .. _ptolemy-example-basic:
5
-
6
- The Ptolemy variety for SL(*N*, **C**)
7
- --------------------------------------
8
-
9
- Given a SnapPy triangulation, we obtain the reduced Ptolemy variety to find
10
- SL(2, **C**)-representations as follows::
11
-
12
- >>> M=Manifold("m003")
13
- >>> M.ptolemy_variety(N = 2)
14
- Ptolemy Variety for m003, N = 2
15
- c_0011_0 * c_0101_0 + c_0011_0^2 - c_0101_0^2
16
- c_0011_0 * c_0101_0 + c_0011_0^2 - c_0101_0^2
17
- - 1 + c_0011_0
18
-
19
- The result of ``M.ptolemy_variety(2)`` is an object of type ``PtolemyVariety``.
20
-
21
- **Remark:** The exact formatting of the output might change between SnapPy versions and sage.
22
-
23
- **Remark:** The first two equations are the two Ptolemy relations
24
- for the two tetrahedra in ``m003``. The last equation :ref:`reduces <ptolemy-reduced-variety>` the Ptolemy variety.
25
-
26
- Similar, we can obtain the Ptolemy variety for higher *N*, say SL(3, **C**)::
27
-
28
- >>> M=Manifold("m004")
29
- >>> M.ptolemy_variety(3)
30
- Ptolemy Variety for m003, N = 3
31
- c_0012_0 * c_1101_0 + c_0012_1 * c_0111_0 - c_0102_0 * c_1011_0
32
- c_0012_1 * c_1110_0 - c_0102_0 * c_0111_0 + c_0102_1 * c_1011_0
33
- c_0012_0 * c_0111_0 + c_0102_0 * c_1101_0 - c_0102_1 * c_1110_0
34
- c_0012_0 * c_1110_0 + c_0012_1 * c_1011_0 - c_0102_1 * c_1101_0
35
- - c_0012_0 * c_0111_0 - c_0012_1 * c_1101_0 + c_0102_1 * c_1011_0
36
- - c_0012_0 * c_1110_0 - c_0102_0 * c_1011_0 + c_0102_1 * c_0111_0
37
- - c_0012_1 * c_0111_0 + c_0102_0 * c_1110_0 - c_0102_1 * c_1101_0
38
- - c_0012_0 * c_1011_0 - c_0012_1 * c_1110_0 + c_0102_0 * c_1101_0
39
- - 1 + c_0012_0
40
- - 1 + c_0111_0
41
-
42
- **Remark:** Similarly, we obtain four Ptolemy relations for each of the two tetrahedra in ``m004`` corresponding to the four subsimplices of a tetrahedron we get for *N*\ =3 (see Figure 2 of [GTZ2011]_).
43
-
44
- Using auto-completion
45
- ---------------------
46
-
47
- Let us assign a Ptolemy variety to ``p`` and then type ``p.``::
48
-
49
- >>> p=Manifold("m003").ptolemy_variety(2)
50
- >>> p.
51
-
52
- If we are in SnapPy, sage or ipython, we can now hit the tab-key and see a list of attributes and methods available for a Ptolemy variety::
53
-
54
- >>> p.
55
- p.canonical_representative p.filename_base p.to_magma
56
- p.compute_decomposition p.path_to_file p.to_magma_file
57
- p.compute_solutions p.py_eval_section p.variables
58
- p.degree_to_shapes p.py_eval_variable_dict p.variables_with_non_zero_condition
59
- p.equations p.retrieve_decomposition
60
- p.equations_with_non_zero_condition p.retrieve_solutions
61
-
62
- We can get further help by using the ``?``::
63
-
64
- >>> p.filename_base?
65
- ...
66
- Definition: p.filename_base(self)
67
- Docstring:
68
- Preferred filename base for writing out this Ptolemy variety
69
- ...
70
-
71
- This is a general mechanism and works for all objects in SnapPy, sage or ipython.
72
-
73
- .. _ptolemy-example-retrieve-exact-solutions:
74
-
75
- Retrieving exact solutions from the database
76
- --------------------------------------------
77
-
78
- Given a Ptolemy variety, we can access the database at `ptolemy.unhyperbolic.org <http://ptolemy.unhyperbolic.org/>`_ to retrieve solutions for it with ``retrieve_solutions`` (if this is not working, please check your Internet connection)::
79
-
80
- >>> p=Manifold("m003").ptolemy_variety(2)
81
- >>> sols=p.retrieve_solutions()
82
- Trying to retrieve solutions from http://ptolemy.unhyperbolic.org/data/pgl2/OrientableCuspedCensus/02_tetrahedra/m003__sl2_c0.magma_out ...
83
- Parsing..
84
- >>> sols
85
- [PtolemyCoordinates(
86
- {'c_0011_0': 1,
87
- 'c_0011_1': -1,
88
- 'c_0101_0': Mod(x, x^2 - x - 1),
89
- 'c_0101_1': Mod(-x, x^2 - x - 1),
90
- 'c_0110_0': Mod(-x, x^2 - x - 1),
91
- 'c_0110_1': Mod(x, x^2 - x - 1),
92
- 'c_1001_0': -1,
93
- 'c_1001_1': 1,
94
- 'c_1010_0': Mod(x, x^2 - x - 1),
95
- 'c_1010_1': Mod(-x, x^2 - x - 1),
96
- 'c_1100_0': 1,
97
- 'c_1100_1': -1,
98
- 's_0_0': 1,
99
- 's_0_1': 1,
100
- 's_1_0': 1,
101
- 's_1_1': 1,
102
- 's_2_0': 1,
103
- 's_2_1': 1,
104
- 's_3_0': 1,
105
- 's_3_1': 1},
106
- is_numerical = False, ...)]
107
-
108
- The result is a list of solutions (up to Galois conjugation), here the list contains only one solution. Let us pick that one::
109
-
110
- >>> len(sols)
111
- 1
112
- >>> sol = sols[0]
113
- PtolemyCoordinates(
114
- {'c_0011_0': 1,
115
- 'c_0011_1': -1,
116
- 'c_0101_0': Mod(x, x^2 - x - 1),
117
- 'c_0101_1': Mod(-x, x^2 - x - 1),
118
- 'c_0110_0': Mod(-x, x^2 - x - 1),
119
- 'c_0110_1': Mod(x, x^2 - x - 1),
120
- 'c_1001_0': -1,
121
- 'c_1001_1': 1,
122
- 'c_1010_0': Mod(x, x^2 - x - 1),
123
- 'c_1010_1': Mod(-x, x^2 - x - 1),
124
- 'c_1100_0': 1,
125
- 'c_1100_1': -1,
126
- 's_0_0': 1,
127
- 's_0_1': 1,
128
- 's_1_0': 1,
129
- 's_1_1': 1,
130
- 's_2_0': 1,
131
- 's_2_1': 1,
132
- 's_3_0': 1,
133
- 's_3_1': 1},
134
- is_numerical = False, ...)
135
-
136
- As we can see, a solution assigns a value to each Ptolemy coordinate c\ :sub:`...`\ . It is of type ``PtolemyCoordinates`` (a subclass of python's ``dict``) and more details are discussed in :ref:`a later example <ptolemy-example-structure-of-solution>`.
137
-
138
- **Remark:** We can give the additional argument ``verbose=False`` to suppress the messages about the database access::
139
-
140
- >>> sols = Manifold("m003").ptolemy_variety(2).retrieve_solutions(verbose=False)
141
-
142
- .. _ptolemy-example-matrices:
143
-
144
- Compute the matrices for a representation
145
- -----------------------------------------
146
-
147
- **Remark:** Requires SnapPy 2.3 or later.
148
-
149
- Given a solution as above, we can take a word in the fundamental group and get its image under the representation using ``evaluate_word``. Here, we do it for the two generators::
150
-
151
- >>> M = Manifold("m003")
152
- >>> sol = M.ptolemy_variety(2).retrieve_solutions()[0]
153
- >>> sol.evaluate_word('a')
154
- [[0, Mod(1, x^2 - x - 1)], [Mod(-1, x^2 - x - 1), Mod(-x, x^2 - x - 1)]]
155
- >>> sol.evaluate_word('b')
156
- [[Mod(x, x^2 - x - 1), Mod(x, x^2 - x - 1)],
157
- [Mod(-x, x^2 - x - 1), Mod(-1, x^2 - x - 1)]]
158
-
159
- By default, this word is with respect to the presentation of the fundamental group that SnapPy computes when given no further arguments. Thus, we expect the identity matrix when we evaluate a relator (for PSL(*N*, **C**) the diagonal element will be an *N*-th root of unity)::
160
-
161
- >>> M.fundamental_group()
162
- Generators:
163
- a,b
164
- Relators:
165
- abAAbabbb
166
- >>> sol.evaluate_word('abAAbabbb')
167
- [[Mod(1, x^2 - x - 1), 0], [0, Mod(1, x^2 - x - 1)]]
168
-
169
- We revisit computing the matrices :ref:`here <ptolemy-detailed-example-matrices>` to explain how to use a different presentation of the fundamental group.
170
-
171
- **Remark:** The matrices are currently returned as a list of list of pari ``POLMOD`` objects. In the future, the ptolemy module should return the matrices as sage matrices over a `sage NumberField <http://doc.sagemath.org/html/en/reference/number_fields/sage/rings/number_field/number_field.html>`_.
172
-
173
- .. _ptolemy-example-traces:
174
-
175
- Compute the traces
176
- ------------------
177
-
178
- **Remark:** Requires SnapPy 2.3.2 or later.
179
-
180
- We can compute the traces of these matrices::
181
-
182
- >>> sol = Manifold("m003").ptolemy_variety(2).retrieve_solutions(verbose=False)[0]
183
- >>> from snappy.ptolemy.matrix import matrix_trace
184
- >>> matrix_trace(sol.evaluate_word('a'))
185
- Mod(-1, x^2 - x - 1)
186
- >>> matrix_trace(sol.evaluate_word('b'))
187
- Mod(-x -1, x^2 -x -1)
188
- >>> matrix_trace(sol.evaluate_word('ab'))
189
- Mod(-x + 2, x^2 + x + 1)
190
- >>> matrix_trace(sol.evaluate_word('ba'))
191
- Mod(-x + 2, x^2 + x + 1)
192
-
193
- **Remark:** Since this representation is irreducible, it is uniquely determined up to conjugacy by the above 4 traces, see Slide 30 of
194
- `Marc Culler's slides <http://www.math.illinois.edu/GEAR/resources/Culler/Culler-lecture3-slides.pdf>`_.
195
-
196
- .. _ptolemy-examples-trace-field:
197
-
198
- Compute the trace field for a PSL(*2*, **C**)-representation
199
- ------------------------------------------------------------
200
-
201
- >>> sol = Manifold("m003").ptolemy_variety(2).retrieve_solutions(verbose=False)[0]
202
- >>> sol.number_field()
203
- x^2 + x + 1
204
-
205
- This is the Ptolemy field which is equal to the trace field if *N*\ = 2 by results of [GGZ2014]_.
206
-
207
- .. _ptolemy-example-volume:
208
-
209
- Compute the volume
210
- ------------------
211
-
212
- We can also compute the volume of the representations::
213
-
214
- >>> sol = Manifold("m003").ptolemy_variety(2).retrieve_solutions(verbose=False)[0]
215
- >>> sol.volume_numerical()
216
- [0.E-38, 1.88266550875941 E-14]
217
-
218
- Recall that we had an algebraic solution in the number field with defining polynomial x\ :sup:`2`\ +x+1. This number field has two embeddings into **C**, yielding two representations. This is why the result is a list of two volumes. In this case, they are both zero up to numerical precision.
219
-
220
- .. _ptolemy-example-increase-precision:
221
-
222
- Increase precision
223
- ------------------
224
-
225
- We can get higher precision be setting it in pari (in decimal digits)::
226
-
227
- >>> sol = Manifold("m011").ptolemy_variety(2).retrieve_solutions(verbose=False)[0]
228
- >>> sol.volume_numerical()
229
- [-4.30211422042248 E-16, -0.942707362776931, 0.942707362776931]
230
- >>> pari.set_real_precision(40)
231
- 15
232
- >>> sol.volume_numerical()
233
- [-1.5819817649675358086 E-40,
234
- -0.9427073627769277209212996030922116475902,
235
- 0.9427073627769277209212996030922116475902]
236
-
237
- **Remark:** This is not using interval arithmetics (although this is planned for the future). For now, the computed value of a quantity might differ from the real value by far more than the number of displayed digits suggests. To be confident about the result, we can increase the precision and see how many digits of the result are stabilizing.
238
-
239
- .. _ptolemy-example-obstruction-class:
240
-
241
- Ptolemy varieties for PSL(*N*, **C**)-representations
242
- -----------------------------------------------------
243
-
244
- The representations of ``m003`` we detected so far had trivial volume and thus cannot include the geometric representation. This is because the geometric representation is a boundary-unipotent PSL(2, **C**)-representation but not a :ref:`boundary-unipotent SL(2, C)-representation <ptolemy-boundary-unipotent>` and we only detect the latter ones above.
245
-
246
- We can obtain the Ptolemy varieties for all :ref:`obstruction classes <obstruction-class>` to find the PSL(*N*, **C**)-representation that do not lift to boundary-unipotent SL(*N*, **C**)-representations as well::
247
-
248
- >>> M = Manifold("m003")
249
- >>> M.ptolemy_variety(N = 2, obstruction_class = 'all')
250
- [Ptolemy Variety for m003, N = 2, obstruction_class = 0
251
- c_0011_0 * c_0101_0 + c_0011_0^2 - c_0101_0^2
252
- c_0011_0 * c_0101_0 + c_0011_0^2 - c_0101_0^2
253
- - 1 + c_0011_0,
254
- Ptolemy Variety for m003, N = 2, obstruction_class = 1
255
- - c_0011_0 * c_0101_0 - c_0011_0^2 - c_0101_0^2
256
- - c_0011_0 * c_0101_0 - c_0011_0^2 - c_0101_0^2
257
- - 1 + c_0011_0]
258
-
259
- The first Ptolemy variety in this list always corresponds to the trivial obstruction class. Let us try the non-trivial obstruction class::
260
-
261
- >>> p = M.ptolemy_variety(2, 'all')[1]
262
- >>> sols=p.retrieve_solutions(verbose=False)
263
- >>> sols.volume_numerical()
264
- [[2.02988321281931, -2.02988321281931]]
265
-
266
- We now see a representation with volume twice that of a regular ideal tetrahedron. This is the geometric representation of ``m003``.
267
- Here is python code to iterate over all obstruction classes:
268
-
269
- >>> for p in Manifold("m003").ptolemy_variety(2,'all'):
270
- ... sols = p.retrieve_solutions(verbose=False)
271
- ... print(sols.volume_numerical())
272
- [[0.E-19, 1.88267370443418 E-14]]
273
- [[2.02988321281931, -2.02988321281931]]
274
-
275
- And in functional style::
276
-
277
- >>> [p.retrieve_solutions().volume_numerical() for p in Manifold("m003").ptolemy_variety(2,'all')]
278
- Trying to retrieve solutions from http://ptolemy.unhyperbolic.org/data/pgl2/OrientableCuspedCensus/02_tetrahedra/m003__sl2_c0.magma_out ...
279
- Parsing...
280
- Trying to retrieve solutions from http://ptolemy.unhyperbolic.org/data/pgl2/OrientableCuspedCensus/02_tetrahedra/m003__sl2_c1.magma_out ...
281
- Parsing...
282
- [[[0.E-19, 1.88267370443418 E-14]], [[2.02988321281931, -2.02988321281931]]]
283
-
284
- **Remark**: As we see, it is not necessary to use named arguments ``N = 2`` and ``obstruction_class = 'all'`` for faster typing. However, for better readability of our code, we recommend to include the names.
285
-
286
- A short cut for a PSL(*N*, **C**) Ptolemy variety
287
- -------------------------------------------------
288
-
289
- We have seen that ``M.ptolemy_variety(2, 'all')`` gives a Ptolemy variety for each obstruction class. We used ``M.ptolemy_variety(2, 'all')[3]`` to pick one, here the fourth, of those varieties. A shorter form of doing this is::
290
-
291
- >>> M = Manifold("m009")
292
- >>> M.ptolemy_variety(2, 3)
293
- Ptolemy Variety for m009, N = 2, obstruction_class = 3
294
- c_0011_0^2 + c_0101_0 * c_0101_1 + c_0101_1^2
295
- - c_0011_0^2 + c_0101_0^2 + c_0101_1^2
296
- - c_0011_0^2 - c_0101_0 * c_0101_1 - c_0101_1^2
297
- - 1 + c_0011_0
1
+ Step-by-step examples: Part 1
2
+ =============================
3
+
4
+ .. _ptolemy-example-basic:
5
+
6
+ The Ptolemy variety for SL(*N*, **C**)
7
+ --------------------------------------
8
+
9
+ Given a SnapPy triangulation, we obtain the reduced Ptolemy variety to find
10
+ SL(2, **C**)-representations as follows::
11
+
12
+ >>> M=Manifold("m003")
13
+ >>> M.ptolemy_variety(N = 2)
14
+ Ptolemy Variety for m003, N = 2
15
+ c_0011_0 * c_0101_0 + c_0011_0^2 - c_0101_0^2
16
+ c_0011_0 * c_0101_0 + c_0011_0^2 - c_0101_0^2
17
+ - 1 + c_0011_0
18
+
19
+ The result of ``M.ptolemy_variety(2)`` is an object of type ``PtolemyVariety``.
20
+
21
+ **Remark:** The exact formatting of the output might change between SnapPy versions and sage.
22
+
23
+ **Remark:** The first two equations are the two Ptolemy relations
24
+ for the two tetrahedra in ``m003``. The last equation :ref:`reduces <ptolemy-reduced-variety>` the Ptolemy variety.
25
+
26
+ Similar, we can obtain the Ptolemy variety for higher *N*, say SL(3, **C**)::
27
+
28
+ >>> M=Manifold("m004")
29
+ >>> M.ptolemy_variety(3)
30
+ Ptolemy Variety for m003, N = 3
31
+ c_0012_0 * c_1101_0 + c_0012_1 * c_0111_0 - c_0102_0 * c_1011_0
32
+ c_0012_1 * c_1110_0 - c_0102_0 * c_0111_0 + c_0102_1 * c_1011_0
33
+ c_0012_0 * c_0111_0 + c_0102_0 * c_1101_0 - c_0102_1 * c_1110_0
34
+ c_0012_0 * c_1110_0 + c_0012_1 * c_1011_0 - c_0102_1 * c_1101_0
35
+ - c_0012_0 * c_0111_0 - c_0012_1 * c_1101_0 + c_0102_1 * c_1011_0
36
+ - c_0012_0 * c_1110_0 - c_0102_0 * c_1011_0 + c_0102_1 * c_0111_0
37
+ - c_0012_1 * c_0111_0 + c_0102_0 * c_1110_0 - c_0102_1 * c_1101_0
38
+ - c_0012_0 * c_1011_0 - c_0012_1 * c_1110_0 + c_0102_0 * c_1101_0
39
+ - 1 + c_0012_0
40
+ - 1 + c_0111_0
41
+
42
+ **Remark:** Similarly, we obtain four Ptolemy relations for each of the two tetrahedra in ``m004`` corresponding to the four subsimplices of a tetrahedron we get for *N*\ =3 (see Figure 2 of [GTZ2011]_).
43
+
44
+ Using auto-completion
45
+ ---------------------
46
+
47
+ Let us assign a Ptolemy variety to ``p`` and then type ``p.``::
48
+
49
+ >>> p=Manifold("m003").ptolemy_variety(2)
50
+ >>> p.
51
+
52
+ If we are in SnapPy, sage or ipython, we can now hit the tab-key and see a list of attributes and methods available for a Ptolemy variety::
53
+
54
+ >>> p.
55
+ p.canonical_representative p.filename_base p.to_magma
56
+ p.compute_decomposition p.path_to_file p.to_magma_file
57
+ p.compute_solutions p.py_eval_section p.variables
58
+ p.degree_to_shapes p.py_eval_variable_dict p.variables_with_non_zero_condition
59
+ p.equations p.retrieve_decomposition
60
+ p.equations_with_non_zero_condition p.retrieve_solutions
61
+
62
+ We can get further help by using the ``?``::
63
+
64
+ >>> p.filename_base?
65
+ ...
66
+ Definition: p.filename_base(self)
67
+ Docstring:
68
+ Preferred filename base for writing out this Ptolemy variety
69
+ ...
70
+
71
+ This is a general mechanism and works for all objects in SnapPy, sage or ipython.
72
+
73
+ .. _ptolemy-example-retrieve-exact-solutions:
74
+
75
+ Retrieving exact solutions from the database
76
+ --------------------------------------------
77
+
78
+ Given a Ptolemy variety, we can access the database at `ptolemy.unhyperbolic.org <http://ptolemy.unhyperbolic.org/>`_ to retrieve solutions for it with ``retrieve_solutions`` (if this is not working, please check your Internet connection)::
79
+
80
+ >>> p=Manifold("m003").ptolemy_variety(2)
81
+ >>> sols=p.retrieve_solutions()
82
+ Trying to retrieve solutions from http://ptolemy.unhyperbolic.org/data/pgl2/OrientableCuspedCensus/02_tetrahedra/m003__sl2_c0.magma_out ...
83
+ Parsing..
84
+ >>> sols
85
+ [PtolemyCoordinates(
86
+ {'c_0011_0': 1,
87
+ 'c_0011_1': -1,
88
+ 'c_0101_0': Mod(x, x^2 - x - 1),
89
+ 'c_0101_1': Mod(-x, x^2 - x - 1),
90
+ 'c_0110_0': Mod(-x, x^2 - x - 1),
91
+ 'c_0110_1': Mod(x, x^2 - x - 1),
92
+ 'c_1001_0': -1,
93
+ 'c_1001_1': 1,
94
+ 'c_1010_0': Mod(x, x^2 - x - 1),
95
+ 'c_1010_1': Mod(-x, x^2 - x - 1),
96
+ 'c_1100_0': 1,
97
+ 'c_1100_1': -1,
98
+ 's_0_0': 1,
99
+ 's_0_1': 1,
100
+ 's_1_0': 1,
101
+ 's_1_1': 1,
102
+ 's_2_0': 1,
103
+ 's_2_1': 1,
104
+ 's_3_0': 1,
105
+ 's_3_1': 1},
106
+ is_numerical = False, ...)]
107
+
108
+ The result is a list of solutions (up to Galois conjugation), here the list contains only one solution. Let us pick that one::
109
+
110
+ >>> len(sols)
111
+ 1
112
+ >>> sol = sols[0]
113
+ PtolemyCoordinates(
114
+ {'c_0011_0': 1,
115
+ 'c_0011_1': -1,
116
+ 'c_0101_0': Mod(x, x^2 - x - 1),
117
+ 'c_0101_1': Mod(-x, x^2 - x - 1),
118
+ 'c_0110_0': Mod(-x, x^2 - x - 1),
119
+ 'c_0110_1': Mod(x, x^2 - x - 1),
120
+ 'c_1001_0': -1,
121
+ 'c_1001_1': 1,
122
+ 'c_1010_0': Mod(x, x^2 - x - 1),
123
+ 'c_1010_1': Mod(-x, x^2 - x - 1),
124
+ 'c_1100_0': 1,
125
+ 'c_1100_1': -1,
126
+ 's_0_0': 1,
127
+ 's_0_1': 1,
128
+ 's_1_0': 1,
129
+ 's_1_1': 1,
130
+ 's_2_0': 1,
131
+ 's_2_1': 1,
132
+ 's_3_0': 1,
133
+ 's_3_1': 1},
134
+ is_numerical = False, ...)
135
+
136
+ As we can see, a solution assigns a value to each Ptolemy coordinate c\ :sub:`...`\ . It is of type ``PtolemyCoordinates`` (a subclass of python's ``dict``) and more details are discussed in :ref:`a later example <ptolemy-example-structure-of-solution>`.
137
+
138
+ **Remark:** We can give the additional argument ``verbose=False`` to suppress the messages about the database access::
139
+
140
+ >>> sols = Manifold("m003").ptolemy_variety(2).retrieve_solutions(verbose=False)
141
+
142
+ .. _ptolemy-example-matrices:
143
+
144
+ Compute the matrices for a representation
145
+ -----------------------------------------
146
+
147
+ **Remark:** Requires SnapPy 2.3 or later.
148
+
149
+ Given a solution as above, we can take a word in the fundamental group and get its image under the representation using :py:meth:`~snappy.ptolemy.coordinates.PtolemyCoordinates.evaluate_word`. Here, we do it for the two generators::
150
+
151
+ >>> M = Manifold("m003")
152
+ >>> sol = M.ptolemy_variety(2).retrieve_solutions()[0]
153
+ >>> sol.evaluate_word('a')
154
+ [[0, Mod(1, x^2 - x - 1)], [Mod(-1, x^2 - x - 1), Mod(-x, x^2 - x - 1)]]
155
+ >>> sol.evaluate_word('b')
156
+ [[Mod(x, x^2 - x - 1), Mod(x, x^2 - x - 1)],
157
+ [Mod(-x, x^2 - x - 1), Mod(-1, x^2 - x - 1)]]
158
+
159
+ By default, this word is with respect to the unsimplified presentation of the fundamental group. Thus, we expect the identity matrix when we evaluate a relator (for PSL(*N*, **C**) the diagonal element will be an *N*-th root of unity)::
160
+
161
+ >>> M.fundamental_group(simplify_presentation=False)
162
+ Generators:
163
+ a,b,c
164
+ Relators:
165
+ BCaC
166
+ AbCbA
167
+ >>> sol.evaluate_word('BCaC')
168
+ [[Mod(1, x^2 - x - 1), 0], [0, Mod(1, x^2 - x - 1)]]
169
+
170
+ We revisit computing the matrices :ref:`here <ptolemy-detailed-example-matrices>` to explain how to use a different presentation of the fundamental group.
171
+
172
+ **Remark:** The matrices are currently returned as a list of list of pari ``POLMOD`` objects. In the future, the ptolemy module should return the matrices as sage matrices over a `sage NumberField <http://doc.sagemath.org/html/en/reference/number_fields/sage/rings/number_field/number_field.html>`_.
173
+
174
+ .. _ptolemy-example-traces:
175
+
176
+ Compute the traces
177
+ ------------------
178
+
179
+ **Remark:** Requires SnapPy 2.3.2 or later.
180
+
181
+ We can compute the traces of these matrices::
182
+
183
+ >>> sol = Manifold("m003").ptolemy_variety(2).retrieve_solutions(verbose=False)[0]
184
+ >>> from snappy.ptolemy.matrix import matrix_trace
185
+ >>> matrix_trace(sol.evaluate_word('a'))
186
+ Mod(-1, x^2 - x - 1)
187
+ >>> matrix_trace(sol.evaluate_word('b'))
188
+ Mod(-x -1, x^2 -x -1)
189
+ >>> matrix_trace(sol.evaluate_word('ab'))
190
+ Mod(-x + 2, x^2 + x + 1)
191
+ >>> matrix_trace(sol.evaluate_word('ba'))
192
+ Mod(-x + 2, x^2 + x + 1)
193
+
194
+ **Remark:** Since this representation is irreducible, it is uniquely determined up to conjugacy by the above 4 traces, see Slide 30 of
195
+ `Marc Culler's slides <http://www.math.illinois.edu/GEAR/resources/Culler/Culler-lecture3-slides.pdf>`_.
196
+
197
+ .. _ptolemy-examples-trace-field:
198
+
199
+ Compute the trace field for a PSL(*2*, **C**)-representation
200
+ ------------------------------------------------------------
201
+
202
+ >>> sol = Manifold("m003").ptolemy_variety(2).retrieve_solutions(verbose=False)[0]
203
+ >>> sol.number_field()
204
+ x^2 + x + 1
205
+
206
+ This is the Ptolemy field which is equal to the trace field if *N*\ = 2 by results of [GGZ2014]_.
207
+
208
+ .. _ptolemy-example-volume:
209
+
210
+ Compute the volume
211
+ ------------------
212
+
213
+ We can also compute the volume of the representations::
214
+
215
+ >>> sol = Manifold("m003").ptolemy_variety(2).retrieve_solutions(verbose=False)[0]
216
+ >>> sol.volume_numerical()
217
+ [0.E-38, 1.88266550875941 E-14]
218
+
219
+ Recall that we had an algebraic solution in the number field with defining polynomial x\ :sup:`2`\ +x+1. This number field has two embeddings into **C**, yielding two representations. This is why the result is a list of two volumes. In this case, they are both zero up to numerical precision.
220
+
221
+ .. _ptolemy-example-increase-precision:
222
+
223
+ Increase precision
224
+ ------------------
225
+
226
+ We can get higher precision be setting it in pari (in decimal digits)::
227
+
228
+ >>> sol = Manifold("m011").ptolemy_variety(2).retrieve_solutions(verbose=False)[0]
229
+ >>> sol.volume_numerical()
230
+ [-4.30211422042248 E-16, -0.942707362776931, 0.942707362776931]
231
+ >>> pari.set_real_precision(40)
232
+ 15
233
+ >>> sol.volume_numerical()
234
+ [-1.5819817649675358086 E-40,
235
+ -0.9427073627769277209212996030922116475902,
236
+ 0.9427073627769277209212996030922116475902]
237
+
238
+ **Remark:** This is not using interval arithmetics (although this is planned for the future). For now, the computed value of a quantity might differ from the real value by far more than the number of displayed digits suggests. To be confident about the result, we can increase the precision and see how many digits of the result are stabilizing.
239
+
240
+ .. _ptolemy-example-obstruction-class:
241
+
242
+ Ptolemy varieties for PSL(*N*, **C**)-representations
243
+ -----------------------------------------------------
244
+
245
+ The representations of ``m003`` we detected so far had trivial volume and thus cannot include the geometric representation. This is because the geometric representation is a boundary-unipotent PSL(2, **C**)-representation but not a :ref:`boundary-unipotent SL(2, C)-representation <ptolemy-boundary-unipotent>` and we only detect the latter ones above.
246
+
247
+ We can obtain the Ptolemy varieties for all :ref:`obstruction classes <obstruction-class>` to find the PSL(*N*, **C**)-representation that do not lift to boundary-unipotent SL(*N*, **C**)-representations as well::
248
+
249
+ >>> M = Manifold("m003")
250
+ >>> M.ptolemy_variety(N = 2, obstruction_class = 'all')
251
+ [Ptolemy Variety for m003, N = 2, obstruction_class = 0
252
+ c_0011_0 * c_0101_0 + c_0011_0^2 - c_0101_0^2
253
+ c_0011_0 * c_0101_0 + c_0011_0^2 - c_0101_0^2
254
+ - 1 + c_0011_0,
255
+ Ptolemy Variety for m003, N = 2, obstruction_class = 1
256
+ - c_0011_0 * c_0101_0 - c_0011_0^2 - c_0101_0^2
257
+ - c_0011_0 * c_0101_0 - c_0011_0^2 - c_0101_0^2
258
+ - 1 + c_0011_0]
259
+
260
+ The first Ptolemy variety in this list always corresponds to the trivial obstruction class. Let us try the non-trivial obstruction class::
261
+
262
+ >>> p = M.ptolemy_variety(2, 'all')[1]
263
+ >>> sols=p.retrieve_solutions(verbose=False)
264
+ >>> sols.volume_numerical()
265
+ [[2.02988321281931, -2.02988321281931]]
266
+
267
+ We now see a representation with volume twice that of a regular ideal tetrahedron. This is the geometric representation of ``m003``.
268
+ Here is python code to iterate over all obstruction classes:
269
+
270
+ >>> for p in Manifold("m003").ptolemy_variety(2,'all'):
271
+ ... sols = p.retrieve_solutions(verbose=False)
272
+ ... print(sols.volume_numerical())
273
+ [[0.E-19, 1.88267370443418 E-14]]
274
+ [[2.02988321281931, -2.02988321281931]]
275
+
276
+ And in functional style::
277
+
278
+ >>> [p.retrieve_solutions().volume_numerical() for p in Manifold("m003").ptolemy_variety(2,'all')]
279
+ Trying to retrieve solutions from http://ptolemy.unhyperbolic.org/data/pgl2/OrientableCuspedCensus/02_tetrahedra/m003__sl2_c0.magma_out ...
280
+ Parsing...
281
+ Trying to retrieve solutions from http://ptolemy.unhyperbolic.org/data/pgl2/OrientableCuspedCensus/02_tetrahedra/m003__sl2_c1.magma_out ...
282
+ Parsing...
283
+ [[[0.E-19, 1.88267370443418 E-14]], [[2.02988321281931, -2.02988321281931]]]
284
+
285
+ **Remark**: As we see, it is not necessary to use named arguments ``N = 2`` and ``obstruction_class = 'all'`` for faster typing. However, for better readability of our code, we recommend to include the names.
286
+
287
+ A short cut for a PSL(*N*, **C**) Ptolemy variety
288
+ -------------------------------------------------
289
+
290
+ We have seen that ``M.ptolemy_variety(2, 'all')`` gives a Ptolemy variety for each obstruction class. We used ``M.ptolemy_variety(2, 'all')[3]`` to pick one, here the fourth, of those varieties. A shorter form of doing this is::
291
+
292
+ >>> M = Manifold("m009")
293
+ >>> M.ptolemy_variety(2, 3)
294
+ Ptolemy Variety for m009, N = 2, obstruction_class = 3
295
+ c_0011_0^2 + c_0101_0 * c_0101_1 + c_0101_1^2
296
+ - c_0011_0^2 + c_0101_0^2 + c_0101_1^2
297
+ - c_0011_0^2 - c_0101_0 * c_0101_1 - c_0101_1^2
298
+ - 1 + c_0011_0