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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (476) hide show
  1. snappy/CyOpenGL.cp38-win_amd64.pyd +0 -0
  2. snappy/SnapPy.cp38-win_amd64.pyd +0 -0
  3. snappy/SnapPyHP.cp38-win_amd64.pyd +0 -0
  4. snappy/__init__.py +299 -402
  5. snappy/app.py +70 -20
  6. snappy/browser.py +18 -17
  7. snappy/canonical.py +249 -0
  8. snappy/{verify/cusp_shapes.py → cusps/__init__.py} +8 -18
  9. snappy/cusps/cusp_area_matrix.py +101 -0
  10. snappy/{verify/cusp_areas.py → cusps/cusp_areas_from_matrix.py} +23 -39
  11. snappy/cusps/maximal_cusp_area_matrix.py +136 -0
  12. snappy/cusps/test.py +21 -0
  13. snappy/cusps/trig_cusp_area_matrix.py +63 -0
  14. snappy/database.py +10 -9
  15. snappy/decorated_isosig.py +337 -114
  16. snappy/dev/extended_ptolemy/complexVolumesClosed.py +40 -7
  17. snappy/dev/extended_ptolemy/extended.py +3 -3
  18. snappy/dev/extended_ptolemy/phc_wrapper.py +10 -10
  19. snappy/dev/vericlosed/oneVertexTruncatedComplex.py +1 -1
  20. snappy/doc/_images/m004_paper_plane_on_systole.jpg +0 -0
  21. snappy/doc/_images/m125_paper_plane.jpg +0 -0
  22. snappy/doc/_images/o9_00000_systole_paper_plane.jpg +0 -0
  23. snappy/doc/_images/o9_00000_systole_paper_plane_closer.jpg +0 -0
  24. snappy/doc/_sources/additional_classes.rst.txt +40 -40
  25. snappy/doc/_sources/bugs.rst.txt +14 -14
  26. snappy/doc/_sources/censuses.rst.txt +51 -51
  27. snappy/doc/_sources/credits.rst.txt +75 -75
  28. snappy/doc/_sources/development.rst.txt +259 -239
  29. snappy/doc/_sources/index.rst.txt +182 -115
  30. snappy/doc/_sources/installing.rst.txt +247 -264
  31. snappy/doc/_sources/manifold.rst.txt +6 -6
  32. snappy/doc/_sources/manifoldhp.rst.txt +46 -46
  33. snappy/doc/_sources/news.rst.txt +355 -283
  34. snappy/doc/_sources/other.rst.txt +25 -25
  35. snappy/doc/_sources/platonic_census.rst.txt +20 -20
  36. snappy/doc/_sources/plink.rst.txt +102 -102
  37. snappy/doc/_sources/ptolemy.rst.txt +66 -66
  38. snappy/doc/_sources/ptolemy_classes.rst.txt +42 -42
  39. snappy/doc/_sources/ptolemy_examples1.rst.txt +298 -297
  40. snappy/doc/_sources/ptolemy_examples2.rst.txt +363 -363
  41. snappy/doc/_sources/ptolemy_examples3.rst.txt +301 -301
  42. snappy/doc/_sources/ptolemy_examples4.rst.txt +61 -61
  43. snappy/doc/_sources/ptolemy_prelim.rst.txt +105 -105
  44. snappy/doc/_sources/screenshots.rst.txt +21 -21
  45. snappy/doc/_sources/snap.rst.txt +87 -87
  46. snappy/doc/_sources/snappy.rst.txt +28 -28
  47. snappy/doc/_sources/spherogram.rst.txt +103 -103
  48. snappy/doc/_sources/todo.rst.txt +47 -47
  49. snappy/doc/_sources/triangulation.rst.txt +11 -11
  50. snappy/doc/_sources/tutorial.rst.txt +49 -49
  51. snappy/doc/_sources/verify.rst.txt +210 -150
  52. snappy/doc/_sources/verify_internals.rst.txt +79 -90
  53. snappy/doc/_static/basic.css +924 -902
  54. snappy/doc/_static/css/badge_only.css +1 -1
  55. snappy/doc/_static/css/theme.css +1 -1
  56. snappy/doc/_static/doctools.js +1 -1
  57. snappy/doc/_static/documentation_options.js +12 -13
  58. snappy/doc/_static/fonts/Lato/lato-bold.eot +0 -0
  59. snappy/doc/_static/fonts/Lato/lato-bold.ttf +0 -0
  60. snappy/doc/_static/fonts/Lato/lato-bold.woff +0 -0
  61. snappy/doc/_static/fonts/Lato/lato-bold.woff2 +0 -0
  62. snappy/doc/_static/fonts/Lato/lato-bolditalic.eot +0 -0
  63. snappy/doc/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
  64. snappy/doc/_static/fonts/Lato/lato-bolditalic.woff +0 -0
  65. snappy/doc/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
  66. snappy/doc/_static/fonts/Lato/lato-italic.eot +0 -0
  67. snappy/doc/_static/fonts/Lato/lato-italic.ttf +0 -0
  68. snappy/doc/_static/fonts/Lato/lato-italic.woff +0 -0
  69. snappy/doc/_static/fonts/Lato/lato-italic.woff2 +0 -0
  70. snappy/doc/_static/fonts/Lato/lato-regular.eot +0 -0
  71. snappy/doc/_static/fonts/Lato/lato-regular.ttf +0 -0
  72. snappy/doc/_static/fonts/Lato/lato-regular.woff +0 -0
  73. snappy/doc/_static/fonts/Lato/lato-regular.woff2 +0 -0
  74. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
  75. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
  76. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
  77. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
  78. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
  79. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
  80. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
  81. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
  82. snappy/doc/_static/js/versions.js +228 -0
  83. snappy/doc/_static/language_data.js +199 -199
  84. snappy/doc/_static/pygments.css +74 -73
  85. snappy/doc/_static/searchtools.js +125 -71
  86. snappy/doc/_static/snappy_furo.css +33 -33
  87. snappy/doc/_static/snappy_sphinx_rtd_theme.css +42 -42
  88. snappy/doc/_static/sphinx_highlight.js +13 -3
  89. snappy/doc/additional_classes.html +1499 -1330
  90. snappy/doc/bugs.html +131 -134
  91. snappy/doc/censuses.html +426 -445
  92. snappy/doc/credits.html +180 -183
  93. snappy/doc/development.html +383 -363
  94. snappy/doc/genindex.html +1330 -1409
  95. snappy/doc/index.html +261 -206
  96. snappy/doc/installing.html +345 -363
  97. snappy/doc/manifold.html +3451 -2839
  98. snappy/doc/manifoldhp.html +179 -182
  99. snappy/doc/news.html +387 -329
  100. snappy/doc/objects.inv +0 -0
  101. snappy/doc/other.html +160 -162
  102. snappy/doc/platonic_census.html +374 -377
  103. snappy/doc/plink.html +209 -212
  104. snappy/doc/ptolemy.html +253 -255
  105. snappy/doc/ptolemy_classes.html +1143 -1146
  106. snappy/doc/ptolemy_examples1.html +408 -410
  107. snappy/doc/ptolemy_examples2.html +470 -473
  108. snappy/doc/ptolemy_examples3.html +413 -416
  109. snappy/doc/ptolemy_examples4.html +194 -197
  110. snappy/doc/ptolemy_prelim.html +247 -250
  111. snappy/doc/py-modindex.html +164 -167
  112. snappy/doc/screenshots.html +140 -142
  113. snappy/doc/search.html +134 -137
  114. snappy/doc/searchindex.js +1 -1
  115. snappy/doc/snap.html +201 -204
  116. snappy/doc/snappy.html +180 -182
  117. snappy/doc/spherogram.html +1210 -1213
  118. snappy/doc/todo.html +165 -168
  119. snappy/doc/triangulation.html +1583 -1474
  120. snappy/doc/tutorial.html +158 -161
  121. snappy/doc/verify.html +329 -275
  122. snappy/doc/verify_internals.html +1234 -1691
  123. snappy/drilling/__init__.py +153 -235
  124. snappy/drilling/barycentric.py +103 -0
  125. snappy/drilling/constants.py +0 -2
  126. snappy/drilling/crush.py +56 -130
  127. snappy/drilling/cusps.py +12 -6
  128. snappy/drilling/debug.py +2 -1
  129. snappy/drilling/exceptions.py +7 -40
  130. snappy/drilling/moves.py +302 -243
  131. snappy/drilling/perturb.py +63 -37
  132. snappy/drilling/shorten.py +36 -0
  133. snappy/drilling/subdivide.py +0 -5
  134. snappy/drilling/test.py +23 -0
  135. snappy/drilling/test_cases.py +126 -0
  136. snappy/drilling/tracing.py +9 -37
  137. snappy/exceptions.py +18 -5
  138. snappy/exterior_to_link/barycentric_geometry.py +2 -4
  139. snappy/exterior_to_link/main.py +8 -7
  140. snappy/exterior_to_link/mcomplex_with_link.py +2 -2
  141. snappy/exterior_to_link/rational_linear_algebra.py +1 -1
  142. snappy/exterior_to_link/rational_linear_algebra_wrapped.py +1 -1
  143. snappy/exterior_to_link/test.py +21 -33
  144. snappy/geometric_structure/__init__.py +212 -0
  145. snappy/geometric_structure/cusp_neighborhood/__init__.py +3 -0
  146. snappy/geometric_structure/cusp_neighborhood/complex_cusp_cross_section.py +697 -0
  147. snappy/geometric_structure/cusp_neighborhood/cusp_cross_section_base.py +484 -0
  148. snappy/geometric_structure/cusp_neighborhood/exceptions.py +42 -0
  149. snappy/geometric_structure/cusp_neighborhood/real_cusp_cross_section.py +298 -0
  150. snappy/geometric_structure/cusp_neighborhood/tiles_for_cusp_neighborhood.py +159 -0
  151. snappy/geometric_structure/cusp_neighborhood/vertices.py +32 -0
  152. snappy/geometric_structure/geodesic/__init__.py +0 -0
  153. snappy/geometric_structure/geodesic/add_core_curves.py +152 -0
  154. snappy/geometric_structure/geodesic/avoid_core_curves.py +369 -0
  155. snappy/geometric_structure/geodesic/canonical_keys.py +52 -0
  156. snappy/geometric_structure/geodesic/check_away_from_core_curve.py +60 -0
  157. snappy/geometric_structure/geodesic/constants.py +6 -0
  158. snappy/geometric_structure/geodesic/exceptions.py +22 -0
  159. snappy/{drilling → geometric_structure/geodesic}/fixed_points.py +34 -9
  160. snappy/{drilling/geodesic_info.py → geometric_structure/geodesic/geodesic_start_point_info.py} +139 -180
  161. snappy/geometric_structure/geodesic/graph_trace_helper.py +67 -0
  162. snappy/geometric_structure/geodesic/line.py +30 -0
  163. snappy/geometric_structure/geodesic/multiplicity.py +127 -0
  164. snappy/geometric_structure/geodesic/tiles_for_geodesic.py +101 -0
  165. snappy/geometric_structure/test.py +22 -0
  166. snappy/gui.py +23 -13
  167. snappy/horoviewer.py +7 -7
  168. snappy/hyperboloid/__init__.py +96 -31
  169. snappy/hyperboloid/distances.py +245 -0
  170. snappy/hyperboloid/horoball.py +19 -0
  171. snappy/hyperboloid/line.py +35 -0
  172. snappy/hyperboloid/point.py +9 -0
  173. snappy/hyperboloid/triangle.py +29 -0
  174. snappy/isometry_signature.py +382 -0
  175. snappy/len_spec/__init__.py +596 -0
  176. snappy/len_spec/geodesic_info.py +110 -0
  177. snappy/len_spec/geodesic_key_info_dict.py +117 -0
  178. snappy/len_spec/geodesic_piece.py +143 -0
  179. snappy/len_spec/geometric_structure.py +182 -0
  180. snappy/len_spec/geometry.py +80 -0
  181. snappy/len_spec/length_spectrum_geodesic_info.py +170 -0
  182. snappy/len_spec/spine.py +206 -0
  183. snappy/len_spec/test.py +24 -0
  184. snappy/len_spec/test_cases.py +69 -0
  185. snappy/len_spec/tile.py +275 -0
  186. snappy/len_spec/word.py +86 -0
  187. snappy/math_basics.py +39 -13
  188. snappy/matrix.py +52 -9
  189. snappy/number.py +12 -6
  190. snappy/numeric_output_checker.py +2 -3
  191. snappy/pari.py +8 -4
  192. snappy/phone_home.py +2 -1
  193. snappy/polyviewer.py +8 -8
  194. snappy/ptolemy/__init__.py +1 -1
  195. snappy/ptolemy/component.py +2 -2
  196. snappy/ptolemy/coordinates.py +25 -25
  197. snappy/ptolemy/findLoops.py +9 -9
  198. snappy/ptolemy/manifoldMethods.py +27 -29
  199. snappy/ptolemy/polynomial.py +50 -57
  200. snappy/ptolemy/processFileBase.py +60 -0
  201. snappy/ptolemy/ptolemyVariety.py +109 -41
  202. snappy/ptolemy/reginaWrapper.py +4 -4
  203. snappy/ptolemy/rur.py +1 -1
  204. snappy/ptolemy/solutionsToPrimeIdealGroebnerBasis.py +9 -9
  205. snappy/ptolemy/test.py +99 -54
  206. snappy/ptolemy/utilities.py +1 -1
  207. snappy/raytracing/__init__.py +64 -0
  208. snappy/raytracing/additional_horospheres.py +64 -0
  209. snappy/raytracing/additional_len_spec_choices.py +63 -0
  210. snappy/raytracing/cohomology_fractal.py +0 -3
  211. snappy/raytracing/eyeball.py +123 -0
  212. snappy/raytracing/finite_raytracing_data.py +17 -17
  213. snappy/raytracing/finite_viewer.py +15 -15
  214. snappy/raytracing/geodesic_tube_info.py +93 -63
  215. snappy/raytracing/geodesics.py +94 -64
  216. snappy/raytracing/geodesics_window.py +56 -34
  217. snappy/raytracing/gui_utilities.py +21 -6
  218. snappy/raytracing/hyperboloid_navigation.py +29 -4
  219. snappy/raytracing/hyperboloid_utilities.py +73 -73
  220. snappy/raytracing/ideal_raytracing_data.py +121 -91
  221. snappy/raytracing/inside_viewer.py +199 -66
  222. snappy/raytracing/pack.py +22 -0
  223. snappy/raytracing/raytracing_data.py +37 -25
  224. snappy/raytracing/raytracing_view.py +70 -65
  225. snappy/raytracing/shaders/Eye.png +0 -0
  226. snappy/raytracing/shaders/NonGeometric.png +0 -0
  227. snappy/raytracing/shaders/__init__.py +39 -3
  228. snappy/raytracing/shaders/fragment.glsl +451 -133
  229. snappy/raytracing/test.py +29 -0
  230. snappy/raytracing/tooltip.py +146 -0
  231. snappy/raytracing/upper_halfspace_utilities.py +42 -9
  232. snappy/sage_helper.py +67 -134
  233. snappy/settings.py +90 -77
  234. snappy/shell.py +2 -0
  235. snappy/snap/character_varieties.py +2 -2
  236. snappy/snap/find_field.py +4 -3
  237. snappy/snap/fundamental_polyhedron.py +2 -2
  238. snappy/snap/kernel_structures.py +5 -1
  239. snappy/snap/nsagetools.py +9 -8
  240. snappy/snap/peripheral/dual_cellulation.py +4 -3
  241. snappy/snap/peripheral/peripheral.py +2 -2
  242. snappy/snap/peripheral/surface.py +5 -5
  243. snappy/snap/peripheral/test.py +1 -1
  244. snappy/snap/polished_reps.py +8 -8
  245. snappy/snap/slice_obs_HKL.py +16 -14
  246. snappy/snap/t3mlite/arrow.py +3 -3
  247. snappy/snap/t3mlite/edge.py +3 -3
  248. snappy/snap/t3mlite/homology.py +2 -2
  249. snappy/snap/t3mlite/mcomplex.py +3 -3
  250. snappy/snap/t3mlite/simplex.py +12 -0
  251. snappy/snap/t3mlite/spun.py +18 -17
  252. snappy/snap/t3mlite/test_vs_regina.py +4 -4
  253. snappy/snap/test.py +37 -53
  254. snappy/snap/utilities.py +4 -5
  255. snappy/test.py +121 -138
  256. snappy/test_cases.py +263 -0
  257. snappy/testing.py +131 -0
  258. snappy/tiling/__init__.py +2 -0
  259. snappy/tiling/canonical_key_dict.py +59 -0
  260. snappy/tiling/dict_based_set.py +79 -0
  261. snappy/tiling/floor.py +49 -0
  262. snappy/tiling/hyperboloid_dict.py +54 -0
  263. snappy/tiling/iter_utils.py +78 -0
  264. snappy/tiling/lifted_tetrahedron.py +22 -0
  265. snappy/tiling/lifted_tetrahedron_set.py +54 -0
  266. snappy/tiling/real_hash_dict.py +164 -0
  267. snappy/tiling/test.py +23 -0
  268. snappy/tiling/tile.py +215 -0
  269. snappy/tiling/triangle.py +33 -0
  270. snappy/tkterminal.py +113 -84
  271. snappy/twister/main.py +1 -7
  272. snappy/twister/twister_core.cp38-win_amd64.pyd +0 -0
  273. snappy/upper_halfspace/__init__.py +78 -17
  274. snappy/verify/__init__.py +3 -7
  275. snappy/verify/{verifyCanonical.py → canonical.py} +78 -70
  276. snappy/verify/complex_volume/adjust_torsion.py +1 -2
  277. snappy/verify/complex_volume/closed.py +13 -13
  278. snappy/verify/complex_volume/cusped.py +6 -6
  279. snappy/verify/complex_volume/extended_bloch.py +5 -8
  280. snappy/verify/{cuspTranslations.py → cusp_translations.py} +1 -1
  281. snappy/verify/edge_equations.py +80 -0
  282. snappy/verify/exceptions.py +0 -55
  283. snappy/verify/{verifyHyperbolicity.py → hyperbolicity.py} +3 -3
  284. snappy/verify/interval_newton_shapes_engine.py +7 -5
  285. snappy/verify/interval_tree.py +5 -5
  286. snappy/verify/krawczyk_shapes_engine.py +17 -18
  287. snappy/verify/maximal_cusp_area_matrix/__init__.py +7 -74
  288. snappy/verify/maximal_cusp_area_matrix/cusp_tiling_engine.py +3 -4
  289. snappy/verify/maximal_cusp_area_matrix/cusp_translate_engine.py +1 -1
  290. snappy/verify/{realAlgebra.py → real_algebra.py} +1 -1
  291. snappy/verify/shapes.py +5 -3
  292. snappy/verify/short_slopes.py +39 -41
  293. snappy/verify/{squareExtensions.py → square_extensions.py} +14 -11
  294. snappy/verify/test.py +57 -60
  295. snappy/verify/upper_halfspace/extended_matrix.py +1 -1
  296. snappy/verify/upper_halfspace/finite_point.py +3 -4
  297. snappy/verify/upper_halfspace/ideal_point.py +9 -9
  298. snappy/verify/volume.py +2 -2
  299. snappy/version.py +2 -2
  300. {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/METADATA +14 -10
  301. snappy-3.2.dist-info/RECORD +503 -0
  302. {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/WHEEL +1 -1
  303. {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/top_level.txt +6 -1
  304. snappy/__pycache__/__init__.cpython-38.pyc +0 -0
  305. snappy/__pycache__/browser.cpython-38.pyc +0 -0
  306. snappy/__pycache__/cache.cpython-38.pyc +0 -0
  307. snappy/__pycache__/database.cpython-38.pyc +0 -0
  308. snappy/__pycache__/db_utilities.cpython-38.pyc +0 -0
  309. snappy/__pycache__/decorated_isosig.cpython-38.pyc +0 -0
  310. snappy/__pycache__/exceptions.cpython-38.pyc +0 -0
  311. snappy/__pycache__/export_stl.cpython-38.pyc +0 -0
  312. snappy/__pycache__/filedialog.cpython-38.pyc +0 -0
  313. snappy/__pycache__/gui.cpython-38.pyc +0 -0
  314. snappy/__pycache__/horoviewer.cpython-38.pyc +0 -0
  315. snappy/__pycache__/math_basics.cpython-38.pyc +0 -0
  316. snappy/__pycache__/matrix.cpython-38.pyc +0 -0
  317. snappy/__pycache__/number.cpython-38.pyc +0 -0
  318. snappy/__pycache__/numeric_output_checker.cpython-38.pyc +0 -0
  319. snappy/__pycache__/pari.cpython-38.pyc +0 -0
  320. snappy/__pycache__/polyviewer.cpython-38.pyc +0 -0
  321. snappy/__pycache__/sage_helper.cpython-38.pyc +0 -0
  322. snappy/__pycache__/version.cpython-38.pyc +0 -0
  323. snappy/doc/_sources/verify_canon.rst.txt +0 -90
  324. snappy/doc/_static/jquery-3.6.0.js +0 -10881
  325. snappy/doc/_static/js/html5shiv-printshiv.min.js +0 -4
  326. snappy/doc/_static/js/html5shiv.min.js +0 -4
  327. snappy/doc/_static/underscore-1.13.1.js +0 -2042
  328. snappy/doc/_static/underscore.js +0 -6
  329. snappy/doc/verify_canon.html +0 -304
  330. snappy/drilling/__pycache__/__init__.cpython-38.pyc +0 -0
  331. snappy/drilling/__pycache__/constants.cpython-38.pyc +0 -0
  332. snappy/drilling/__pycache__/crush.cpython-38.pyc +0 -0
  333. snappy/drilling/__pycache__/cusps.cpython-38.pyc +0 -0
  334. snappy/drilling/__pycache__/debug.cpython-38.pyc +0 -0
  335. snappy/drilling/__pycache__/epsilons.cpython-38.pyc +0 -0
  336. snappy/drilling/__pycache__/exceptions.cpython-38.pyc +0 -0
  337. snappy/drilling/__pycache__/fixed_points.cpython-38.pyc +0 -0
  338. snappy/drilling/__pycache__/geodesic_info.cpython-38.pyc +0 -0
  339. snappy/drilling/__pycache__/geodesic_tube.cpython-38.pyc +0 -0
  340. snappy/drilling/__pycache__/geometric_structure.cpython-38.pyc +0 -0
  341. snappy/drilling/__pycache__/line.cpython-38.pyc +0 -0
  342. snappy/drilling/__pycache__/moves.cpython-38.pyc +0 -0
  343. snappy/drilling/__pycache__/peripheral_curves.cpython-38.pyc +0 -0
  344. snappy/drilling/__pycache__/perturb.cpython-38.pyc +0 -0
  345. snappy/drilling/__pycache__/quotient_space.cpython-38.pyc +0 -0
  346. snappy/drilling/__pycache__/spatial_dict.cpython-38.pyc +0 -0
  347. snappy/drilling/__pycache__/subdivide.cpython-38.pyc +0 -0
  348. snappy/drilling/__pycache__/tracing.cpython-38.pyc +0 -0
  349. snappy/drilling/geodesic_tube.py +0 -441
  350. snappy/drilling/geometric_structure.py +0 -366
  351. snappy/drilling/line.py +0 -122
  352. snappy/drilling/quotient_space.py +0 -94
  353. snappy/drilling/spatial_dict.py +0 -128
  354. snappy/exterior_to_link/__pycache__/__init__.cpython-38.pyc +0 -0
  355. snappy/exterior_to_link/__pycache__/barycentric_geometry.cpython-38.pyc +0 -0
  356. snappy/exterior_to_link/__pycache__/exceptions.cpython-38.pyc +0 -0
  357. snappy/exterior_to_link/__pycache__/hyp_utils.cpython-38.pyc +0 -0
  358. snappy/exterior_to_link/__pycache__/link_projection.cpython-38.pyc +0 -0
  359. snappy/exterior_to_link/__pycache__/main.cpython-38.pyc +0 -0
  360. snappy/exterior_to_link/__pycache__/mcomplex_with_expansion.cpython-38.pyc +0 -0
  361. snappy/exterior_to_link/__pycache__/mcomplex_with_link.cpython-38.pyc +0 -0
  362. snappy/exterior_to_link/__pycache__/mcomplex_with_memory.cpython-38.pyc +0 -0
  363. snappy/exterior_to_link/__pycache__/pl_utils.cpython-38.pyc +0 -0
  364. snappy/exterior_to_link/__pycache__/put_in_S3.cpython-38.pyc +0 -0
  365. snappy/exterior_to_link/__pycache__/rational_linear_algebra.cpython-38.pyc +0 -0
  366. snappy/exterior_to_link/__pycache__/simplify_to_base_tri.cpython-38.pyc +0 -0
  367. snappy/exterior_to_link/__pycache__/stored_moves.cpython-38.pyc +0 -0
  368. snappy/hyperboloid/__pycache__/__init__.cpython-38.pyc +0 -0
  369. snappy/manifolds/__pycache__/__init__.cpython-38.pyc +0 -0
  370. snappy/ptolemy/__pycache__/__init__.cpython-38.pyc +0 -0
  371. snappy/ptolemy/__pycache__/component.cpython-38.pyc +0 -0
  372. snappy/ptolemy/__pycache__/coordinates.cpython-38.pyc +0 -0
  373. snappy/ptolemy/__pycache__/fieldExtensions.cpython-38.pyc +0 -0
  374. snappy/ptolemy/__pycache__/findLoops.cpython-38.pyc +0 -0
  375. snappy/ptolemy/__pycache__/homology.cpython-38.pyc +0 -0
  376. snappy/ptolemy/__pycache__/manifoldMethods.cpython-38.pyc +0 -0
  377. snappy/ptolemy/__pycache__/matrix.cpython-38.pyc +0 -0
  378. snappy/ptolemy/__pycache__/numericalSolutionsToGroebnerBasis.cpython-38.pyc +0 -0
  379. snappy/ptolemy/__pycache__/polynomial.cpython-38.pyc +0 -0
  380. snappy/ptolemy/__pycache__/processComponents.cpython-38.pyc +0 -0
  381. snappy/ptolemy/__pycache__/processFileBase.cpython-38.pyc +0 -0
  382. snappy/ptolemy/__pycache__/processFileDispatch.cpython-38.pyc +0 -0
  383. snappy/ptolemy/__pycache__/processMagmaFile.cpython-38.pyc +0 -0
  384. snappy/ptolemy/__pycache__/processRurFile.cpython-38.pyc +0 -0
  385. snappy/ptolemy/__pycache__/ptolemyGeneralizedObstructionClass.cpython-38.pyc +0 -0
  386. snappy/ptolemy/__pycache__/ptolemyObstructionClass.cpython-38.pyc +0 -0
  387. snappy/ptolemy/__pycache__/ptolemyVariety.cpython-38.pyc +0 -0
  388. snappy/ptolemy/__pycache__/ptolemyVarietyPrimeIdealGroebnerBasis.cpython-38.pyc +0 -0
  389. snappy/ptolemy/__pycache__/rur.cpython-38.pyc +0 -0
  390. snappy/ptolemy/__pycache__/solutionsToPrimeIdealGroebnerBasis.cpython-38.pyc +0 -0
  391. snappy/ptolemy/__pycache__/utilities.cpython-38.pyc +0 -0
  392. snappy/snap/__pycache__/__init__.cpython-38.pyc +0 -0
  393. snappy/snap/__pycache__/character_varieties.cpython-38.pyc +0 -0
  394. snappy/snap/__pycache__/fundamental_polyhedron.cpython-38.pyc +0 -0
  395. snappy/snap/__pycache__/interval_reps.cpython-38.pyc +0 -0
  396. snappy/snap/__pycache__/kernel_structures.cpython-38.pyc +0 -0
  397. snappy/snap/__pycache__/mcomplex_base.cpython-38.pyc +0 -0
  398. snappy/snap/__pycache__/nsagetools.cpython-38.pyc +0 -0
  399. snappy/snap/__pycache__/polished_reps.cpython-38.pyc +0 -0
  400. snappy/snap/__pycache__/shapes.cpython-38.pyc +0 -0
  401. snappy/snap/__pycache__/slice_obs_HKL.cpython-38.pyc +0 -0
  402. snappy/snap/__pycache__/utilities.cpython-38.pyc +0 -0
  403. snappy/snap/peripheral/__pycache__/__init__.cpython-38.pyc +0 -0
  404. snappy/snap/peripheral/__pycache__/dual_cellulation.cpython-38.pyc +0 -0
  405. snappy/snap/peripheral/__pycache__/link.cpython-38.pyc +0 -0
  406. snappy/snap/peripheral/__pycache__/peripheral.cpython-38.pyc +0 -0
  407. snappy/snap/peripheral/__pycache__/surface.cpython-38.pyc +0 -0
  408. snappy/snap/t3mlite/__pycache__/__init__.cpython-38.pyc +0 -0
  409. snappy/snap/t3mlite/__pycache__/arrow.cpython-38.pyc +0 -0
  410. snappy/snap/t3mlite/__pycache__/corner.cpython-38.pyc +0 -0
  411. snappy/snap/t3mlite/__pycache__/edge.cpython-38.pyc +0 -0
  412. snappy/snap/t3mlite/__pycache__/face.cpython-38.pyc +0 -0
  413. snappy/snap/t3mlite/__pycache__/files.cpython-38.pyc +0 -0
  414. snappy/snap/t3mlite/__pycache__/homology.cpython-38.pyc +0 -0
  415. snappy/snap/t3mlite/__pycache__/linalg.cpython-38.pyc +0 -0
  416. snappy/snap/t3mlite/__pycache__/mcomplex.cpython-38.pyc +0 -0
  417. snappy/snap/t3mlite/__pycache__/perm4.cpython-38.pyc +0 -0
  418. snappy/snap/t3mlite/__pycache__/simplex.cpython-38.pyc +0 -0
  419. snappy/snap/t3mlite/__pycache__/spun.cpython-38.pyc +0 -0
  420. snappy/snap/t3mlite/__pycache__/surface.cpython-38.pyc +0 -0
  421. snappy/snap/t3mlite/__pycache__/tetrahedron.cpython-38.pyc +0 -0
  422. snappy/snap/t3mlite/__pycache__/vertex.cpython-38.pyc +0 -0
  423. snappy/togl/__init__.py +0 -3
  424. snappy/togl/darwin-tk8.6/Togl2.1/LICENSE +0 -28
  425. snappy/togl/darwin-tk8.6/Togl2.1/libTogl2.1.dylib +0 -0
  426. snappy/togl/darwin-tk8.6/Togl2.1/pkgIndex.tcl +0 -5
  427. snappy/togl/darwin-tk8.7/Togl2.1/LICENSE +0 -28
  428. snappy/togl/darwin-tk8.7/Togl2.1/libTogl2.1.dylib +0 -0
  429. snappy/togl/darwin-tk8.7/Togl2.1/pkgIndex.tcl +0 -5
  430. snappy/togl/linux2-x86_64-tk8.6/Togl2.1/LICENSE +0 -28
  431. snappy/togl/linux2-x86_64-tk8.6/Togl2.1/libTogl2.1.so +0 -0
  432. snappy/togl/linux2-x86_64-tk8.6/Togl2.1/pkgIndex.tcl +0 -5
  433. snappy/togl/win32VC-tk8.6/Togl2.1/LICENSE +0 -28
  434. snappy/togl/win32VC-tk8.6/Togl2.1/Togl21.dll +0 -0
  435. snappy/togl/win32VC-tk8.6/Togl2.1/Togl21.lib +0 -0
  436. snappy/togl/win32VC-tk8.6/Togl2.1/pkgIndex.tcl +0 -6
  437. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/LICENSE +0 -28
  438. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/Togl21.dll +0 -0
  439. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/Togl21.lib +0 -0
  440. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/pkgIndex.tcl +0 -6
  441. snappy/twister/__pycache__/__init__.cpython-38.pyc +0 -0
  442. snappy/twister/__pycache__/main.cpython-38.pyc +0 -0
  443. snappy/upper_halfspace/__pycache__/__init__.cpython-38.pyc +0 -0
  444. snappy/upper_halfspace/__pycache__/ideal_point.cpython-38.pyc +0 -0
  445. snappy/verify/__pycache__/__init__.cpython-38.pyc +0 -0
  446. snappy/verify/__pycache__/cuspCrossSection.cpython-38.pyc +0 -0
  447. snappy/verify/__pycache__/cuspTranslations.cpython-38.pyc +0 -0
  448. snappy/verify/__pycache__/cusp_areas.cpython-38.pyc +0 -0
  449. snappy/verify/__pycache__/cusp_shapes.cpython-38.pyc +0 -0
  450. snappy/verify/__pycache__/exceptions.cpython-38.pyc +0 -0
  451. snappy/verify/__pycache__/interval_newton_shapes_engine.cpython-38.pyc +0 -0
  452. snappy/verify/__pycache__/interval_tree.cpython-38.pyc +0 -0
  453. snappy/verify/__pycache__/krawczyk_shapes_engine.cpython-38.pyc +0 -0
  454. snappy/verify/__pycache__/realAlgebra.cpython-38.pyc +0 -0
  455. snappy/verify/__pycache__/shapes.cpython-38.pyc +0 -0
  456. snappy/verify/__pycache__/short_slopes.cpython-38.pyc +0 -0
  457. snappy/verify/__pycache__/squareExtensions.cpython-38.pyc +0 -0
  458. snappy/verify/__pycache__/verifyCanonical.cpython-38.pyc +0 -0
  459. snappy/verify/__pycache__/verifyHyperbolicity.cpython-38.pyc +0 -0
  460. snappy/verify/__pycache__/volume.cpython-38.pyc +0 -0
  461. snappy/verify/complex_volume/__pycache__/__init__.cpython-38.pyc +0 -0
  462. snappy/verify/complex_volume/__pycache__/adjust_torsion.cpython-38.pyc +0 -0
  463. snappy/verify/complex_volume/__pycache__/closed.cpython-38.pyc +0 -0
  464. snappy/verify/complex_volume/__pycache__/compute_ptolemys.cpython-38.pyc +0 -0
  465. snappy/verify/complex_volume/__pycache__/cusped.cpython-38.pyc +0 -0
  466. snappy/verify/complex_volume/__pycache__/extended_bloch.cpython-38.pyc +0 -0
  467. snappy/verify/cuspCrossSection.py +0 -1422
  468. snappy/verify/maximal_cusp_area_matrix/__pycache__/__init__.cpython-38.pyc +0 -0
  469. snappy/verify/maximal_cusp_area_matrix/__pycache__/cusp_tiling_engine.cpython-38.pyc +0 -0
  470. snappy/verify/maximal_cusp_area_matrix/__pycache__/cusp_translate_engine.cpython-38.pyc +0 -0
  471. snappy/verify/upper_halfspace/__pycache__/__init__.cpython-38.pyc +0 -0
  472. snappy/verify/upper_halfspace/__pycache__/extended_matrix.cpython-38.pyc +0 -0
  473. snappy/verify/upper_halfspace/__pycache__/finite_point.cpython-38.pyc +0 -0
  474. snappy/verify/upper_halfspace/__pycache__/ideal_point.cpython-38.pyc +0 -0
  475. snappy-3.1.1.dist-info/RECORD +0 -575
  476. {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/entry_points.txt +0 -0
@@ -1,366 +0,0 @@
1
- from .line import R13LineWithMatrix
2
-
3
- from ..verify.shapes import compute_hyperbolic_shapes # type: ignore
4
- from ..snap.fundamental_polyhedron import FundamentalPolyhedronEngine # type: ignore
5
- from ..snap.kernel_structures import TransferKernelStructuresEngine # type: ignore
6
- from ..snap.t3mlite import simplex, Mcomplex, Tetrahedron, Vertex # type: ignore
7
- from ..SnapPy import word_as_list # type: ignore
8
-
9
- from ..hyperboloid import (o13_inverse, # type: ignore
10
- space_r13_normalise,
11
- r13_dot,
12
- unnormalised_plane_eqn_from_r13_points)
13
- from ..upper_halfspace import sl2c_inverse, psl2c_to_o13 # type: ignore
14
- from ..upper_halfspace.ideal_point import ideal_point_to_r13 # type: ignore
15
- from ..matrix import vector, matrix, mat_solve # type: ignore
16
- from ..math_basics import prod, xgcd # type: ignore
17
-
18
- from collections import deque
19
-
20
- from typing import Tuple, Sequence, Optional, Any
21
-
22
- Filling = Tuple[int, int]
23
- FillingMatrix = Tuple[Filling, Filling]
24
-
25
-
26
- def compute_r13_planes_for_tet(tet : Tetrahedron):
27
- """
28
- Computes outward facing normals/plane equations from the vertices of
29
- positively oriented tetrahedra - all in the hyperboloid model.
30
- """
31
-
32
- tet.R13_unnormalised_planes = {
33
- f: unnormalised_plane_eqn_from_r13_points(
34
- [ tet.R13_vertices[v] for v in verts ])
35
- for f, verts in simplex.VerticesOfFaceCounterclockwise.items() }
36
- tet.R13_planes = {
37
- f : space_r13_normalise(plane)
38
- for f, plane in tet.R13_unnormalised_planes.items() }
39
-
40
-
41
- def word_to_psl2c_matrix(mcomplex : Mcomplex, word : str):
42
- """
43
- Given a triangulation with a R13 geometric structure (that is
44
- the structure attached by calling add_r13_geometry) and a word
45
- in the simplified fundamental group (given as string), returns
46
- the corresponding PSL(2,C)-matrix.
47
- """
48
-
49
- return word_list_to_psl2c_matrix(
50
- mcomplex, word_as_list(word, mcomplex.num_generators))
51
-
52
-
53
- def word_list_to_psl2c_matrix(mcomplex : Mcomplex, word_list : Sequence[int]):
54
- """
55
- Like word_to_psl2c_matrix, but taking the word as a sequence of
56
- non-zero integers with positive integers corresponding to generators and
57
- negative integers corresponding to their inverses.
58
- """
59
-
60
- return prod([mcomplex.GeneratorMatrices[g]
61
- for g in word_list])
62
-
63
-
64
- def add_r13_geometry(
65
- mcomplex : Mcomplex,
66
- manifold,
67
- verified : bool = False,
68
- bits_prec : Optional[int] = None):
69
- """
70
- Given the same triangulation once as Mcomplex and once as SnapPy Manifold,
71
- develops the vertices of the tetrahedra (using the same fundamental
72
- polyhedron as the SnapPea kernel), computes the face-pairing matrices and
73
- the matrices corresponding to the generators of the unsimplified
74
- fundamental group, computes the incenter of the base tetrahedron and
75
- the core curve for each vertex of each tetrahedron corresponding to a
76
- filled cusp.
77
-
78
- The precision can be given by bits_prec (if not given, the precision of
79
- the Manifold type is used, i.e., 53 for Manifold and 212 for ManifoldHP).
80
-
81
- If verified is True, intervals will be computed for all the above
82
- information.
83
- """
84
-
85
- shapes = compute_hyperbolic_shapes(
86
- manifold, verified=verified, bits_prec=bits_prec)
87
- z = shapes[0]
88
- RF = z.real().parent()
89
-
90
- # Develop the vertices in the upper half space model - we will
91
- # convert them to the hyperboloid model later.
92
- poly = FundamentalPolyhedronEngine.from_manifold_and_shapes(
93
- manifold, shapes, normalize_matrices=True)
94
-
95
- # Match the order of the mcomplex.Vertices to the one the SnapPea
96
- # kernel sees and copy meridians and longitudes to tet.PeripheralCurves.
97
- TransferKernelStructuresEngine(
98
- mcomplex, manifold).reindex_cusps_and_transfer_peripheral_curves()
99
- mcomplex.verified = verified
100
- mcomplex.RF = RF
101
- # PSL(2,C)-matrices corresponding to generators of fundamental group.
102
- # Positive integers map to the generators, negative integrs to their
103
- # inverses and 0 to the identity.
104
- mcomplex.GeneratorMatrices = {
105
- g : _to_matrix(m)
106
- for g, m in poly.mcomplex.GeneratorMatrices.items() }
107
- # Number of generators of the fundamental group.
108
- mcomplex.num_generators = len(mcomplex.GeneratorMatrices) // 2
109
-
110
- for tet, developed_tet in zip(mcomplex.Tetrahedra, poly.mcomplex):
111
- # Shape for each edge, keys are simplex.OneSubsimplices
112
- tet.ShapeParameters = developed_tet.ShapeParameters
113
- # Vertices in C union infinity on the boundary of
114
- # upper halfspace model
115
- tet.ideal_vertices = {
116
- V: developed_tet.Class[V].IdealPoint
117
- for V in simplex.ZeroSubsimplices }
118
- # Vertices in hyperboloid model
119
- tet.R13_vertices = {
120
- V: ideal_point_to_r13(z, RF)
121
- for V, z in tet.ideal_vertices.items() }
122
- # Add plane equations for faces
123
- compute_r13_planes_for_tet(tet)
124
- # Compute face-pairing matrices for hyperboloid model
125
- tet.O13_matrices = {
126
- F : psl2c_to_o13(mcomplex.GeneratorMatrices.get(-g))
127
- for F, g in developed_tet.GeneratorsInfo.items() }
128
- # Dict, keys are a subset of simplex.ZeroSubsimplices
129
- #
130
- # If a vertex of a tet corresponds to a filled cusp, this dictionary
131
- # will contain the appropriate lift of the core curve in the
132
- # hyperboloid model.
133
- tet.core_curves = { }
134
-
135
- # Set base tetrahedron and compute its in-radius and center.
136
- mcomplex.baseTet = mcomplex.Tetrahedra[
137
- poly.mcomplex.ChooseGenInitialTet.Index]
138
- mcomplex.baseTetInRadius, mcomplex.R13_baseTetInCenter = (
139
- _compute_inradius_and_incenter_from_planes(
140
- [ mcomplex.baseTet.R13_planes[f]
141
- for f in simplex.TwoSubsimplices]))
142
-
143
- # For each cusp, a pair of words for the meridian and longitude as
144
- # sequence of non-zero integers.
145
- #
146
- # Only computed when needed.
147
- all_peripheral_words : Optional[Sequence[Sequence[Sequence[int]]]] = None
148
-
149
- # For each cusp
150
- for v, info in zip(mcomplex.Vertices, manifold.cusp_info()):
151
- # v.filling_matrix is a matrix of integers (as list of lists) such that
152
- # v.filling_matrix[0] contains the filling coefficients
153
- # (e.g., [3,4] for m004(3,4)) and the determinant is 1 if the cusp is
154
- # filled. That is, v.filling_matrix[1] determines a curve intersecting
155
- # the filling curve once (as sum of a multiple of meridian and
156
- # longitude) and that is thus parallel to the core curve.
157
- # For an unfilled cusp, v.filling_matrix is ((0,0), (0,0))
158
-
159
- v.filling_matrix = _filling_matrix(info)
160
- if v.filling_matrix[0] != (0,0):
161
- if all_peripheral_words is None:
162
- # Make the SnapPea kernel compute peripheral curves the first
163
- # time when we need them.
164
- G = manifold.fundamental_group(False)
165
- all_peripheral_words = G.peripheral_curves(as_int_list=True)
166
- # Note that a cusp only determines the words for the meridian
167
- # and longitude only up to conjugacy, we need to pick a lift of the
168
- # cusp and a path from the basepoint to the lift.
169
- #
170
- # Similarly, the lift of the core curve of a filled cusp to the
171
- # hyperboloid model depends on a lift of a cusp a path from the
172
- # basepoint to the lift.
173
- #
174
- # We compute the lift for each vertex of each tetrahedron in the
175
- # fundamental domain corresponding to the cusp (with the path
176
- # connecting the basepoint to the vertex being the one contained
177
- # in the fundamental domain).
178
- #
179
- # Starting with the one choice the SnapPea kernel did and computing
180
- # the resulting lift of the core curve, we need to transfer it
181
- # to the other choices of vertices of tetrahedra corresponding to
182
- # the cusp by "developing" the cusp.
183
- #
184
- _develop_core_curve_cusp(
185
- mcomplex,
186
- v,
187
- _compute_core_curve(
188
- mcomplex,
189
- all_peripheral_words[v.Index],
190
- v.filling_matrix[1]))
191
-
192
- return mcomplex
193
-
194
- ###############################################################################
195
- # Helpers
196
-
197
-
198
- def _to_matrix(m):
199
- """
200
- Necesssary conversion when not SageMath.
201
-
202
- This is needed because we have two matrix types outside of Sage:
203
- SimpleMatrix and Matrix2x2. Convert to the former.
204
- """
205
- return matrix([[m[0,0],m[0,1]],
206
- [m[1,0],m[1,1]]])
207
-
208
-
209
- def _compute_core_curve(
210
- mcomplex : Mcomplex,
211
- peripheral_words : Sequence[Sequence[int]],
212
- core_curve_coefficients : Filling) -> R13LineWithMatrix:
213
- """
214
- Compute core curve given words for meridian and longitude and
215
- the integers determining a curve (as sum of a multiple of meridian
216
- and longitude) that is parallel to the core curve.
217
- """
218
-
219
- result = mcomplex.GeneratorMatrices[0]
220
-
221
- for word, f in zip(peripheral_words, core_curve_coefficients):
222
- if f != 0:
223
- m = word_list_to_psl2c_matrix(mcomplex, word)
224
- if f < 0:
225
- m = sl2c_inverse(m)
226
- for i in range(abs(f)):
227
- result = result * m
228
-
229
- return R13LineWithMatrix.from_psl2c_matrix(result)
230
-
231
-
232
- def _find_standard_basepoint(mcomplex : Mcomplex,
233
- vertex : Vertex) -> Tuple[Tetrahedron, int]:
234
- """
235
- Reimplements find_standard_basepoint in fundamental_group.c.
236
-
237
- That is, it finds the same tetrahedron and vertex of that tetrahedron
238
- in the fundamental domain that the SnapPea kernel used to compute the
239
- words for the meridian and longitude of the given cusp.
240
-
241
- The SnapPea kernel picks the first vertex it finds where the meridian
242
- and longitude intersect.
243
- """
244
-
245
- # Traverse tets and their vertices in the same order the SnapPea kernel
246
- # does
247
- for tet in mcomplex.Tetrahedra:
248
- for v in simplex.ZeroSubsimplices:
249
- # Only consider vertices corresponding to the given cusp
250
- if tet.Class[v] is vertex:
251
- for f in simplex.TwoSubsimplices:
252
- # Check that the meridian and longitude both
253
- # go through the same leg of the spine of the cusp
254
- # triangle.
255
- #
256
- # Note that we only support orientable manifolds,
257
- # so we only consider the 0-sheet of the orientation
258
- # double-cover of the cusp triangulation.
259
- if (tet.PeripheralCurves[0][0][v][f] != 0 and
260
- tet.PeripheralCurves[1][0][v][f] != 0):
261
- return tet, v
262
-
263
- raise Exception("Could not find basepoint for cusp. This is a bug.")
264
-
265
-
266
- def _develop_core_curve_cusp(
267
- mcomplex : Mcomplex,
268
- v : Vertex,
269
- core_curve : R13LineWithMatrix) -> None:
270
- """
271
- Given the core curve computed from the SnapPea kernel's given
272
- words for the meridian and longitude for the given cusp,
273
- compute the lift of the core curve for all vertices of the
274
- tetrahedra corresponding to the given cusp.
275
- """
276
-
277
- # Start with the tet and vertex that the SnapPea kernel used
278
- # to compute the words.
279
- tet, vertex = _find_standard_basepoint(mcomplex, v)
280
-
281
- tet.core_curves[vertex] = core_curve
282
- pending_tet_verts = deque([ (tet, vertex, core_curve) ])
283
-
284
- # Breadth-first traversal of cusp triangles to compute appropriate
285
- # transform of core curve.
286
- while pending_tet_verts:
287
- tet, vertex, core_curve = pending_tet_verts.popleft()
288
- for f in simplex.FacesAroundVertexCounterclockwise[vertex]:
289
- new_tet = tet.Neighbor[f]
290
- new_vertex = tet.Gluing[f].image(vertex)
291
- if new_vertex in new_tet.core_curves:
292
- continue
293
- new_core_curve = core_curve.transformed(tet.O13_matrices[f])
294
- new_tet.core_curves[new_vertex] = new_core_curve
295
- pending_tet_verts.append(
296
- (new_tet, new_vertex, new_core_curve))
297
-
298
- # Depending on whether we are using SnapPy inside SageMath or not, we
299
- # use different python classes to represent numbers, vectors and matrices.
300
- # Thus, using Any as type annotation for now :(
301
-
302
-
303
- def _compute_inradius_and_incenter_from_planes(planes) -> Tuple[Any, Any]:
304
- """
305
- Given outside-facing normals for the four faces of a
306
- tetrahedron, compute the hyperbolic inradius and the
307
- incenter (as unit time vector) of the tetrahedron (in the
308
- hyperboloid model).
309
- """
310
-
311
- # We need to c and r such that
312
- # * r13_dot(c, c) = -1 and
313
- # * r13_dot(plane, c) = -sinh(r) for every plane
314
- #
315
- # We instead solve for the following system of linear equations:
316
- # * r13_dot(plane, pt) = -1 for every plane
317
-
318
- RF = planes[0][0].parent()
319
- m = matrix([[-plane[0], plane[1], plane[2], plane[3]]
320
- for plane in planes])
321
- v = vector([RF(-1), RF(-1), RF(-1), RF(-1)])
322
-
323
- pt = mat_solve(m, v)
324
-
325
- # And then use the inverse length of pt to scale pt to be
326
- # a unit time vector and to compute the r.
327
- scale = 1 / (-r13_dot(pt, pt)).sqrt()
328
-
329
- return scale.arcsinh(), scale * pt
330
-
331
-
332
- def _filling_matrix(cusp_info : dict) -> FillingMatrix:
333
- """
334
- Given one of the dictionaries returned by Manifold.cusp_info(),
335
- returns the "filling matrix" filling_matrix.
336
-
337
- filling_matrix is a matrix of integers (as list of lists) such that
338
- filling_matrix[0] contains the filling coefficients
339
- (e.g., [3,4] for m004(3,4)) and the determinant is 1 if the cusp is
340
- filled. That is, filling_matrix[1] determines a curve intersecting
341
- the filling curve once (as sum of a multiple of meridian and
342
- longitude) and that is thus parallel to the core curve.
343
-
344
- For an unfilled cusp, filling_matrix is ((0,0), (0,0))
345
-
346
- Raises an exception if the filling coefficients are non-integral or
347
- not coprime.
348
- """
349
-
350
- float_m, float_l = cusp_info['filling']
351
- m = int(float_m)
352
- l = int(float_l)
353
- if float_m != m or float_l != l:
354
- raise ValueError("Filling coefficients (%r,%r) are not integral." % (
355
- float_m, float_l))
356
- if (m, l) == (0,0):
357
- return ((0,0),
358
- (0,0))
359
-
360
- n, a, b = xgcd(m, l)
361
- if n != 1:
362
- raise ValueError("Filling coefficients (%d,%d) are not co-prime." % (
363
- m, l))
364
-
365
- return(( m, l),
366
- (-b, a))
snappy/drilling/line.py DELETED
@@ -1,122 +0,0 @@
1
- from .fixed_points import r13_fixed_points_of_psl2c_matrix # type: ignore
2
-
3
- from ..hyperboloid import r13_dot, o13_inverse # type: ignore
4
- from ..upper_halfspace import psl2c_to_o13 # type: ignore
5
- from ..math_basics import is_RealIntervalFieldElement # type: ignore
6
- from ..sage_helper import _within_sage # type: ignore
7
-
8
- if _within_sage:
9
- import sage.all # type: ignore
10
-
11
- __all__ = [ 'R13Line',
12
- 'distance_r13_lines',
13
- 'R13LineWithMatrix' ]
14
-
15
- def _safe_sqrt(p):
16
- """
17
- Compute the sqrt of a number that is known to be non-negative
18
- though might not be non-negative because of floating point
19
- issues. When using interval arithmetic, this means that
20
- while the upper bound will be non-negative, the lower bound
21
- we computed might be negative because it is too conservative.
22
-
23
- Example of a quantity that can be given to this function:
24
- negative inner product of two vectors in the positive
25
- light cone. This is because we know that the inner product
26
- of two such vectors is always non-positive.
27
- """
28
-
29
- if is_RealIntervalFieldElement(p):
30
- RIF = p.parent()
31
- p = p.intersection(RIF(0, sage.all.Infinity))
32
- else:
33
- if p < 0:
34
- RF = p.parent()
35
- return RF(0)
36
- return p.sqrt()
37
-
38
- class R13Line:
39
- """
40
- A line in the hyperboloid model - represented by two
41
- like-like vectors spanning the line.
42
-
43
- For distance computations, the inner product between the two
44
- vectors is stored as well.
45
- """
46
-
47
- def __init__(self,
48
- points, # Two light-like vectors
49
- inner_product=None): # Optional: their inner product
50
- """
51
- inner_product can be given if known, otherwise, will be computed.
52
- """
53
- self.points = points
54
- if inner_product is None:
55
- self.inner_product = r13_dot(points[0], points[1])
56
- else:
57
- self.inner_product = inner_product
58
-
59
- def transformed(self,
60
- m): # O13-matrix
61
- """
62
- Returns image of the line under given O13-matrix m.
63
- """
64
-
65
- return R13Line(
66
- [ m * point for point in self.points],
67
- self.inner_product)
68
-
69
-
70
- def distance_r13_lines(line0 : R13Line, line1 : R13Line):
71
- """
72
- Computes distance between two hyperbolic lines.
73
- """
74
-
75
- p00 = r13_dot(line0.points[0], line1.points[0])
76
- p01 = r13_dot(line0.points[0], line1.points[1])
77
- p10 = r13_dot(line0.points[1], line1.points[0])
78
- p11 = r13_dot(line0.points[1], line1.points[1])
79
-
80
- pp = line0.inner_product * line1.inner_product
81
-
82
- t0 = _safe_sqrt((p00 * p11) / pp)
83
- t1 = _safe_sqrt((p01 * p10) / pp)
84
-
85
- p = (t0 + t1 - 1) / 2
86
-
87
- return 2 * _safe_sqrt(p).arcsinh()
88
-
89
-
90
- class R13LineWithMatrix:
91
- """
92
- A line in the hyperboloid model together with a O(1,3)-matrix fixing
93
- the line (set-wise).
94
- """
95
- def __init__(self,
96
- r13_line : R13Line,
97
- o13_matrix):
98
- self.r13_line = r13_line
99
- self.o13_matrix = o13_matrix
100
-
101
- @staticmethod
102
- def from_psl2c_matrix(m):
103
- """
104
- Given a loxodromic PSL(2,C)-matrix m, returns the line (together
105
- with the O(1,3)-matrix corresponding to m) fixed by m in
106
- the hyperboloid model.
107
- """
108
-
109
- return R13LineWithMatrix(
110
- R13Line(r13_fixed_points_of_psl2c_matrix(m)),
111
- psl2c_to_o13(m))
112
-
113
- def transformed(self, m):
114
- """
115
- Returns image of line with matrix under given O13-matrix m.
116
-
117
- That is, the matrix will be conjugated by m so that the new
118
- matrix will fix the image of the line (set-wise).
119
- """
120
- return R13LineWithMatrix(
121
- self.r13_line.transformed(m),
122
- m * self.o13_matrix * o13_inverse(m))
@@ -1,94 +0,0 @@
1
- from .spatial_dict import SpatialDict, floor_as_integers
2
- from .line import R13Line, R13LineWithMatrix
3
- from .geodesic_info import LiftedTetrahedron
4
-
5
- from ..hyperboloid import ( # type: ignore
6
- r13_dot, o13_inverse, distance_unit_time_r13_points)
7
- from ..snap.t3mlite import Mcomplex # type: ignore
8
- from ..matrix import matrix # type: ignore
9
-
10
-
11
- def balance_end_points_of_line(line_with_matrix : R13LineWithMatrix,
12
- point) -> R13LineWithMatrix:
13
- return R13LineWithMatrix(
14
- R13Line(
15
- [ endpoint / -r13_dot(point, endpoint)
16
- for endpoint in line_with_matrix.r13_line.points]),
17
- line_with_matrix.o13_matrix)
18
-
19
-
20
- class ZQuotientLiftedTetrahedronSet:
21
- def __init__(self,
22
- mcomplex : Mcomplex,
23
- line_with_matrix : R13LineWithMatrix):
24
- self._dict = _ZQuotientDict(mcomplex, line_with_matrix)
25
- self._mcomplex = mcomplex
26
-
27
- def add(self, lifted_tetrahedron : LiftedTetrahedron) -> bool:
28
- tets = self._dict.setdefault(
29
- lifted_tetrahedron.o13_matrix * self._mcomplex.R13_baseTetInCenter,
30
- set())
31
- if lifted_tetrahedron.tet in tets:
32
- return False
33
- tets.add(lifted_tetrahedron.tet)
34
- return True
35
-
36
-
37
- class _ZQuotientDict(SpatialDict):
38
- def __init__(self,
39
- mcomplex : Mcomplex,
40
- line_with_matrix : R13LineWithMatrix):
41
- super().__init__(mcomplex.baseTetInRadius, mcomplex.verified)
42
-
43
- self._line = line_with_matrix.r13_line
44
- self._power_cache = _O13MatrixPowerCache(line_with_matrix.o13_matrix)
45
-
46
- a = self._line.points[0][0]
47
- b = (line_with_matrix.o13_matrix * self._line.points[0])[0]
48
-
49
- self._log_scale_factor = 2 * (b / a).log()
50
-
51
- RF = a.parent()
52
- self._weights = [ RF(1.2003), RF(0.94553), RF(1.431112)]
53
-
54
- def distance(self, point_0, point_1):
55
- return distance_unit_time_r13_points(point_0, point_1)
56
-
57
- def representatives(self, point):
58
-
59
- a = r13_dot(point, self._line.points[0])
60
- b = r13_dot(point, self._line.points[1])
61
-
62
- r = (a / b).log() / self._log_scale_factor
63
-
64
- return [ self._power_cache.power(i) * point
65
- for i in floor_as_integers(r) ]
66
-
67
- def float_hash(self, pt):
68
- return (pt[0] * self._weights[0] +
69
- pt[1] * self._weights[1] +
70
- pt[2] * self._weights[2])
71
-
72
-
73
- class _O13MatrixPowerCache:
74
- def __init__(self, m):
75
- self._positive_cache = _MatrixNonNegativePowerCache(m)
76
- self._negative_cache = _MatrixNonNegativePowerCache(o13_inverse(m))
77
-
78
- def power(self, i):
79
- if i >= 0:
80
- return self._positive_cache.power( i)
81
- else:
82
- return self._negative_cache.power(-i)
83
-
84
-
85
- class _MatrixNonNegativePowerCache:
86
- def __init__(self, m):
87
- self._m = m
88
- self._powers = [ matrix.identity(ring=m.base_ring(),
89
- n=m.dimensions()[0]) ]
90
-
91
- def power(self, i):
92
- while not i < len(self._powers):
93
- self._powers.append(self._m * self._powers[-1])
94
- return self._powers[i]