snappy 3.1.1__cp310-cp310-win_amd64.whl → 3.2__cp310-cp310-win_amd64.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (476) hide show
  1. snappy/CyOpenGL.cp310-win_amd64.pyd +0 -0
  2. snappy/SnapPy.cp310-win_amd64.pyd +0 -0
  3. snappy/SnapPyHP.cp310-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.cp310-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 +26 -11
  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-310.pyc +0 -0
  305. snappy/__pycache__/browser.cpython-310.pyc +0 -0
  306. snappy/__pycache__/cache.cpython-310.pyc +0 -0
  307. snappy/__pycache__/database.cpython-310.pyc +0 -0
  308. snappy/__pycache__/db_utilities.cpython-310.pyc +0 -0
  309. snappy/__pycache__/decorated_isosig.cpython-310.pyc +0 -0
  310. snappy/__pycache__/exceptions.cpython-310.pyc +0 -0
  311. snappy/__pycache__/export_stl.cpython-310.pyc +0 -0
  312. snappy/__pycache__/filedialog.cpython-310.pyc +0 -0
  313. snappy/__pycache__/gui.cpython-310.pyc +0 -0
  314. snappy/__pycache__/horoviewer.cpython-310.pyc +0 -0
  315. snappy/__pycache__/math_basics.cpython-310.pyc +0 -0
  316. snappy/__pycache__/matrix.cpython-310.pyc +0 -0
  317. snappy/__pycache__/number.cpython-310.pyc +0 -0
  318. snappy/__pycache__/numeric_output_checker.cpython-310.pyc +0 -0
  319. snappy/__pycache__/pari.cpython-310.pyc +0 -0
  320. snappy/__pycache__/polyviewer.cpython-310.pyc +0 -0
  321. snappy/__pycache__/sage_helper.cpython-310.pyc +0 -0
  322. snappy/__pycache__/version.cpython-310.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-310.pyc +0 -0
  331. snappy/drilling/__pycache__/constants.cpython-310.pyc +0 -0
  332. snappy/drilling/__pycache__/crush.cpython-310.pyc +0 -0
  333. snappy/drilling/__pycache__/cusps.cpython-310.pyc +0 -0
  334. snappy/drilling/__pycache__/debug.cpython-310.pyc +0 -0
  335. snappy/drilling/__pycache__/epsilons.cpython-310.pyc +0 -0
  336. snappy/drilling/__pycache__/exceptions.cpython-310.pyc +0 -0
  337. snappy/drilling/__pycache__/fixed_points.cpython-310.pyc +0 -0
  338. snappy/drilling/__pycache__/geodesic_info.cpython-310.pyc +0 -0
  339. snappy/drilling/__pycache__/geodesic_tube.cpython-310.pyc +0 -0
  340. snappy/drilling/__pycache__/geometric_structure.cpython-310.pyc +0 -0
  341. snappy/drilling/__pycache__/line.cpython-310.pyc +0 -0
  342. snappy/drilling/__pycache__/moves.cpython-310.pyc +0 -0
  343. snappy/drilling/__pycache__/peripheral_curves.cpython-310.pyc +0 -0
  344. snappy/drilling/__pycache__/perturb.cpython-310.pyc +0 -0
  345. snappy/drilling/__pycache__/quotient_space.cpython-310.pyc +0 -0
  346. snappy/drilling/__pycache__/spatial_dict.cpython-310.pyc +0 -0
  347. snappy/drilling/__pycache__/subdivide.cpython-310.pyc +0 -0
  348. snappy/drilling/__pycache__/tracing.cpython-310.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-310.pyc +0 -0
  355. snappy/exterior_to_link/__pycache__/barycentric_geometry.cpython-310.pyc +0 -0
  356. snappy/exterior_to_link/__pycache__/exceptions.cpython-310.pyc +0 -0
  357. snappy/exterior_to_link/__pycache__/hyp_utils.cpython-310.pyc +0 -0
  358. snappy/exterior_to_link/__pycache__/link_projection.cpython-310.pyc +0 -0
  359. snappy/exterior_to_link/__pycache__/main.cpython-310.pyc +0 -0
  360. snappy/exterior_to_link/__pycache__/mcomplex_with_expansion.cpython-310.pyc +0 -0
  361. snappy/exterior_to_link/__pycache__/mcomplex_with_link.cpython-310.pyc +0 -0
  362. snappy/exterior_to_link/__pycache__/mcomplex_with_memory.cpython-310.pyc +0 -0
  363. snappy/exterior_to_link/__pycache__/pl_utils.cpython-310.pyc +0 -0
  364. snappy/exterior_to_link/__pycache__/put_in_S3.cpython-310.pyc +0 -0
  365. snappy/exterior_to_link/__pycache__/rational_linear_algebra.cpython-310.pyc +0 -0
  366. snappy/exterior_to_link/__pycache__/simplify_to_base_tri.cpython-310.pyc +0 -0
  367. snappy/exterior_to_link/__pycache__/stored_moves.cpython-310.pyc +0 -0
  368. snappy/hyperboloid/__pycache__/__init__.cpython-310.pyc +0 -0
  369. snappy/manifolds/__pycache__/__init__.cpython-310.pyc +0 -0
  370. snappy/ptolemy/__pycache__/__init__.cpython-310.pyc +0 -0
  371. snappy/ptolemy/__pycache__/component.cpython-310.pyc +0 -0
  372. snappy/ptolemy/__pycache__/coordinates.cpython-310.pyc +0 -0
  373. snappy/ptolemy/__pycache__/fieldExtensions.cpython-310.pyc +0 -0
  374. snappy/ptolemy/__pycache__/findLoops.cpython-310.pyc +0 -0
  375. snappy/ptolemy/__pycache__/homology.cpython-310.pyc +0 -0
  376. snappy/ptolemy/__pycache__/manifoldMethods.cpython-310.pyc +0 -0
  377. snappy/ptolemy/__pycache__/matrix.cpython-310.pyc +0 -0
  378. snappy/ptolemy/__pycache__/numericalSolutionsToGroebnerBasis.cpython-310.pyc +0 -0
  379. snappy/ptolemy/__pycache__/polynomial.cpython-310.pyc +0 -0
  380. snappy/ptolemy/__pycache__/processComponents.cpython-310.pyc +0 -0
  381. snappy/ptolemy/__pycache__/processFileBase.cpython-310.pyc +0 -0
  382. snappy/ptolemy/__pycache__/processFileDispatch.cpython-310.pyc +0 -0
  383. snappy/ptolemy/__pycache__/processMagmaFile.cpython-310.pyc +0 -0
  384. snappy/ptolemy/__pycache__/processRurFile.cpython-310.pyc +0 -0
  385. snappy/ptolemy/__pycache__/ptolemyGeneralizedObstructionClass.cpython-310.pyc +0 -0
  386. snappy/ptolemy/__pycache__/ptolemyObstructionClass.cpython-310.pyc +0 -0
  387. snappy/ptolemy/__pycache__/ptolemyVariety.cpython-310.pyc +0 -0
  388. snappy/ptolemy/__pycache__/ptolemyVarietyPrimeIdealGroebnerBasis.cpython-310.pyc +0 -0
  389. snappy/ptolemy/__pycache__/rur.cpython-310.pyc +0 -0
  390. snappy/ptolemy/__pycache__/solutionsToPrimeIdealGroebnerBasis.cpython-310.pyc +0 -0
  391. snappy/ptolemy/__pycache__/utilities.cpython-310.pyc +0 -0
  392. snappy/snap/__pycache__/__init__.cpython-310.pyc +0 -0
  393. snappy/snap/__pycache__/character_varieties.cpython-310.pyc +0 -0
  394. snappy/snap/__pycache__/fundamental_polyhedron.cpython-310.pyc +0 -0
  395. snappy/snap/__pycache__/interval_reps.cpython-310.pyc +0 -0
  396. snappy/snap/__pycache__/kernel_structures.cpython-310.pyc +0 -0
  397. snappy/snap/__pycache__/mcomplex_base.cpython-310.pyc +0 -0
  398. snappy/snap/__pycache__/nsagetools.cpython-310.pyc +0 -0
  399. snappy/snap/__pycache__/polished_reps.cpython-310.pyc +0 -0
  400. snappy/snap/__pycache__/shapes.cpython-310.pyc +0 -0
  401. snappy/snap/__pycache__/slice_obs_HKL.cpython-310.pyc +0 -0
  402. snappy/snap/__pycache__/utilities.cpython-310.pyc +0 -0
  403. snappy/snap/peripheral/__pycache__/__init__.cpython-310.pyc +0 -0
  404. snappy/snap/peripheral/__pycache__/dual_cellulation.cpython-310.pyc +0 -0
  405. snappy/snap/peripheral/__pycache__/link.cpython-310.pyc +0 -0
  406. snappy/snap/peripheral/__pycache__/peripheral.cpython-310.pyc +0 -0
  407. snappy/snap/peripheral/__pycache__/surface.cpython-310.pyc +0 -0
  408. snappy/snap/t3mlite/__pycache__/__init__.cpython-310.pyc +0 -0
  409. snappy/snap/t3mlite/__pycache__/arrow.cpython-310.pyc +0 -0
  410. snappy/snap/t3mlite/__pycache__/corner.cpython-310.pyc +0 -0
  411. snappy/snap/t3mlite/__pycache__/edge.cpython-310.pyc +0 -0
  412. snappy/snap/t3mlite/__pycache__/face.cpython-310.pyc +0 -0
  413. snappy/snap/t3mlite/__pycache__/files.cpython-310.pyc +0 -0
  414. snappy/snap/t3mlite/__pycache__/homology.cpython-310.pyc +0 -0
  415. snappy/snap/t3mlite/__pycache__/linalg.cpython-310.pyc +0 -0
  416. snappy/snap/t3mlite/__pycache__/mcomplex.cpython-310.pyc +0 -0
  417. snappy/snap/t3mlite/__pycache__/perm4.cpython-310.pyc +0 -0
  418. snappy/snap/t3mlite/__pycache__/simplex.cpython-310.pyc +0 -0
  419. snappy/snap/t3mlite/__pycache__/spun.cpython-310.pyc +0 -0
  420. snappy/snap/t3mlite/__pycache__/surface.cpython-310.pyc +0 -0
  421. snappy/snap/t3mlite/__pycache__/tetrahedron.cpython-310.pyc +0 -0
  422. snappy/snap/t3mlite/__pycache__/vertex.cpython-310.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-310.pyc +0 -0
  442. snappy/twister/__pycache__/main.cpython-310.pyc +0 -0
  443. snappy/upper_halfspace/__pycache__/__init__.cpython-310.pyc +0 -0
  444. snappy/upper_halfspace/__pycache__/ideal_point.cpython-310.pyc +0 -0
  445. snappy/verify/__pycache__/__init__.cpython-310.pyc +0 -0
  446. snappy/verify/__pycache__/cuspCrossSection.cpython-310.pyc +0 -0
  447. snappy/verify/__pycache__/cuspTranslations.cpython-310.pyc +0 -0
  448. snappy/verify/__pycache__/cusp_areas.cpython-310.pyc +0 -0
  449. snappy/verify/__pycache__/cusp_shapes.cpython-310.pyc +0 -0
  450. snappy/verify/__pycache__/exceptions.cpython-310.pyc +0 -0
  451. snappy/verify/__pycache__/interval_newton_shapes_engine.cpython-310.pyc +0 -0
  452. snappy/verify/__pycache__/interval_tree.cpython-310.pyc +0 -0
  453. snappy/verify/__pycache__/krawczyk_shapes_engine.cpython-310.pyc +0 -0
  454. snappy/verify/__pycache__/realAlgebra.cpython-310.pyc +0 -0
  455. snappy/verify/__pycache__/shapes.cpython-310.pyc +0 -0
  456. snappy/verify/__pycache__/short_slopes.cpython-310.pyc +0 -0
  457. snappy/verify/__pycache__/squareExtensions.cpython-310.pyc +0 -0
  458. snappy/verify/__pycache__/verifyCanonical.cpython-310.pyc +0 -0
  459. snappy/verify/__pycache__/verifyHyperbolicity.cpython-310.pyc +0 -0
  460. snappy/verify/__pycache__/volume.cpython-310.pyc +0 -0
  461. snappy/verify/complex_volume/__pycache__/__init__.cpython-310.pyc +0 -0
  462. snappy/verify/complex_volume/__pycache__/adjust_torsion.cpython-310.pyc +0 -0
  463. snappy/verify/complex_volume/__pycache__/closed.cpython-310.pyc +0 -0
  464. snappy/verify/complex_volume/__pycache__/compute_ptolemys.cpython-310.pyc +0 -0
  465. snappy/verify/complex_volume/__pycache__/cusped.cpython-310.pyc +0 -0
  466. snappy/verify/complex_volume/__pycache__/extended_bloch.cpython-310.pyc +0 -0
  467. snappy/verify/cuspCrossSection.py +0 -1422
  468. snappy/verify/maximal_cusp_area_matrix/__pycache__/__init__.cpython-310.pyc +0 -0
  469. snappy/verify/maximal_cusp_area_matrix/__pycache__/cusp_tiling_engine.cpython-310.pyc +0 -0
  470. snappy/verify/maximal_cusp_area_matrix/__pycache__/cusp_translate_engine.cpython-310.pyc +0 -0
  471. snappy/verify/upper_halfspace/__pycache__/__init__.cpython-310.pyc +0 -0
  472. snappy/verify/upper_halfspace/__pycache__/extended_matrix.cpython-310.pyc +0 -0
  473. snappy/verify/upper_halfspace/__pycache__/finite_point.cpython-310.pyc +0 -0
  474. snappy/verify/upper_halfspace/__pycache__/ideal_point.cpython-310.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,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