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,441 +0,0 @@
1
- from . import constants
2
- from . import exceptions
3
- from . import epsilons
4
- from .line import distance_r13_lines, R13Line, R13LineWithMatrix
5
- from .geodesic_info import GeodesicInfo, LiftedTetrahedron
6
- from .quotient_space import balance_end_points_of_line, ZQuotientLiftedTetrahedronSet
7
-
8
- from ..hyperboloid import ( # type: ignore
9
- r13_dot,
10
- o13_inverse,
11
- time_r13_normalise,
12
- space_r13_normalise,
13
- distance_unit_time_r13_points)
14
- from ..snap.t3mlite import simplex, Tetrahedron, Mcomplex # type: ignore
15
- from ..matrix import matrix # type: ignore
16
- from ..math_basics import is_RealIntervalFieldElement # type: ignore
17
- from ..exceptions import InsufficientPrecisionError # type: ignore
18
-
19
- import heapq
20
-
21
- from typing import Sequence, Any
22
-
23
-
24
- def add_structures_necessary_for_tube(mcomplex : Mcomplex) -> None:
25
- """
26
- A GeodesicTube can only be built from an Mcomplex if add_r13_geometry
27
- and this function (add_structure_necessary_for_tube) was called.
28
-
29
- This function adds R13Line objects for the edges of the tetrahedra.
30
- It also adds a bounding plane for each edge of each face of each
31
- tetrahedron. Such a bounding plane is perpendicular to the plane supporting
32
- the face and intersects the plane in an edge of face. That is, the
33
- bounding planes for a face cut out the triangle in the plane supporting
34
- the face.
35
-
36
- This information is used to compute the distance (or at least a lower bound
37
- for the distance) of a hyperbolic line L to a (triangular) face of a
38
- tetrahedron.
39
-
40
- In particular, we can check whether both endpoints of L fall "outside" of
41
- one of the bounding planes. In that case, the point of the triangle
42
- closest to the line is on edge corresponding to the bounding plane.
43
- """
44
-
45
- for tet in mcomplex.Tetrahedra:
46
- tet.R13_edges = {
47
- e: R13Line([tet.R13_vertices[simplex.Head[e]],
48
- tet.R13_vertices[simplex.Tail[e]]])
49
- for e in simplex.OneSubsimplices }
50
- tet.triangle_bounding_planes = {
51
- f : { e: triangle_bounding_plane(tet, f, e)
52
- for e in _face_to_edges[f] }
53
- for f in simplex.TwoSubsimplices }
54
-
55
-
56
- class _PendingPiece:
57
- """
58
- A lifted tetrahedron that still needs to be processed by GeodesicTube
59
- together with the face through which this lifted tetrahedron was
60
- reached.
61
-
62
- The lifted tetrahedron lives in the quotient space of the hyperboloid
63
- model by (powers of) the matrix corresponding to the closed geodesic,
64
- see ZQuotientLiftedTetrahedronSet.
65
-
66
- The algorithm in GeodesicTube might add the same lifted tetrahedron
67
- multiple times to the queue of pending pieces as there are four
68
- neighboring lifted tetrahedra from which this lifted tetrahedron can
69
- be reached.
70
-
71
- Let L be the line (in the quotient space) about which we develop the
72
- geodesic tube. lower_bound is a lower bound on the distance between
73
- L and the face through which this lifted tetrahedron was reached.
74
- Note that lower_bound might be larger than the distance between L and
75
- this lifted tetrahedron (which is the minimum of all distances between
76
- L and any of the faces of this lifted tetrahedron).
77
-
78
- The < operator is overloaded so that the piece with the lowest
79
- lower_bound will be picked up next by a priority queue.
80
-
81
- If pieces are processed in this order, then the lower_bound of the
82
- next piece will actually be a lower bound for the distance between L
83
- and the lifted tetrahedron (with other pending pieces for the same
84
- lifted tetrahedron having higher values for lower_bound and thus
85
- being further down the queue).
86
- """
87
-
88
- def __init__(self,
89
- lifted_tetrahedron : LiftedTetrahedron,
90
- lower_bound,
91
- entry_cell : int = simplex.T):
92
- self.lifted_tetrahedron = lifted_tetrahedron
93
- self.lower_bound = lower_bound
94
-
95
- # Either element of simplex.ZeroSubsimplices (if piece was reached
96
- # through another piece) or simplex.T (if this pending piece was
97
- # used to start tiling).
98
- self.entry_cell = entry_cell
99
-
100
- if is_RealIntervalFieldElement(lower_bound):
101
- # For convenience, lower_bound is an interval but it is only
102
- # the left value of the interval that is relevant and that we
103
- # should use: A < B can be False for two intervals even
104
- # when A's left value is lower than B's left value.
105
- if lower_bound.is_NaN():
106
- raise InsufficientPrecisionError(
107
- "A NaN was encountered while developing a tube about a "
108
- "geodesic. "
109
- "Increasing the precision will probably fix this.")
110
-
111
- self._key = lower_bound.lower()
112
- else:
113
- self._key = lower_bound
114
-
115
- def __lt__(self, other):
116
- return self._key < other._key
117
-
118
- # @dataclass
119
-
120
-
121
- class GeodesicTubePiece:
122
- """
123
- A class for the pieces produced by GeodesicTube to cover a tube T about
124
- the given geodesic of the given radius r in the given manifold.
125
-
126
- Such a piece is encoded as a tetrahedron and a line L in the
127
- hyperboloiod model. Imagine that tetrahedron as part of the
128
- fundamental domain and intersect it with a tube about L with
129
- radius r. The images of these intersections in the manifold
130
- cover T. Because we error on the side of rather adding than dropping
131
- a piece when using interval arithmetic, the union of the images might not
132
- be exactly T but a superset. A piece also stores a lower bound for the
133
- distance between its tetrahedron in the fundamental domain and L.
134
-
135
- In other words, GeodesicTube produces a piece for each tetrahedron
136
- in the fundamental domain and each lift of the closed geodesic
137
- to the hyperboloid model for which the above distance is less than r
138
- (or more accurately, could not be proven to be greater than r).
139
-
140
- When using verified computation, lower_bound is an interval for
141
- convenience, even though only the left value of the interval is
142
- relevant.
143
- """
144
-
145
- def __init__(self,
146
- tet : Tetrahedron,
147
- lifted_geodesic : R13Line,
148
- # A number or interval (even though only left value is relevant)
149
- # bounding the distance between tet and lifted_geodesic from
150
- # below
151
- lower_bound):
152
- self.tet = tet
153
- self.lifted_geodesic = lifted_geodesic
154
- self.lower_bound = lower_bound
155
-
156
-
157
- class GeodesicTube:
158
- """
159
- Computes all GeodesicPiece's needed to cover a tube about the
160
- given closed geodesic in the given manifold. The geodesic cannot be
161
- a core curve of a filled cusp.
162
-
163
- A GeodesicTube is constructed from a triangulation with a suitable
164
- geometric structure and a suitable GeodesicInfo object.
165
-
166
- To add the necessary geometric structure to a triangulation, call
167
- add_r13_geometry and add_structures_necessary_for_tube.
168
-
169
- The GeodesicInfo object needs to be constructed with a line and
170
- GeodesicInfo.find_tet_or_core_curve be called on it.
171
-
172
- Calling GeodesicInfo.add_pieces_for_radius will then add the
173
- necessary pieces to GeodesicInfo.pieces to cover the tube of the
174
- given radius.
175
- """
176
- def __init__(self, mcomplex : Mcomplex, geodesic : GeodesicInfo):
177
- self.mcomplex = mcomplex
178
-
179
- if geodesic.line is None:
180
- raise ValueError(
181
- "GeodesicTube expected GeodesicInfo with line set to start "
182
- "developing a tube about the geodesic.")
183
-
184
- if not geodesic.lifted_tetrahedra:
185
- raise ValueError(
186
- "GeodesicTube expected GeodesicInfo with lifted_tetrahedra "
187
- "set to start developing a tube about the geodesic.")
188
-
189
- self._line : R13Line = geodesic.line.r13_line
190
-
191
- # The pending pieces as priority queue - that is, a python list
192
- # but we use heapq to access it.
193
- self._pending_pieces : Sequence[_PendingPiece] = []
194
-
195
- # Start tiling the tube about the geodesic with the lifted
196
- # tetrahedra computed with GeodesicInfo.find_tet_or_core_curve.
197
- #
198
- # Note that that method guarantees that at least one of the
199
- # lifted tetrahedra it intersects the above line. Thus, the tiling
200
- # is seeded correctly. That is, we cannot fail in the following way:
201
- # assume that the given lifted tetrahedra are far away from the given
202
- # line. Then the algorithm below thinks we are done, before we
203
- # even started properly tiling - and we obviously get an incomplete
204
- # result.
205
- #
206
- for lifted_tetrahedron in geodesic.lifted_tetrahedra:
207
- heapq.heappush(
208
- self._pending_pieces,
209
- _PendingPiece(lifted_tetrahedron, mcomplex.RF(0)))
210
-
211
- # Initialize data structure recording which lifted tetrahedra have
212
- # already been visited and been added to the result while tiling
213
- # the quotient space.
214
- self._visited_lifted_tetrahedra = ZQuotientLiftedTetrahedronSet(
215
- mcomplex,
216
- balance_end_points_of_line(
217
- geodesic.line,
218
- geodesic.unnormalised_start_point))
219
-
220
- # The resulting pieces needed to cover the tube.
221
- self.pieces : Sequence[GeodesicTubePiece] = [ ]
222
-
223
- def add_pieces_for_radius(self, r):
224
- """
225
- Ensures that all pieces needed to cover a tube up to radius
226
- r are stored in GeodesicTube.pieces.
227
- """
228
-
229
- while not self.covered_radius() > r:
230
- self._add_next_piece()
231
-
232
- def covered_radius(self):
233
- """
234
- The pieces in GeodesicTube.pieces cover a tube of radius at least
235
- the value returned by this function.
236
-
237
- Note that, for convenience, an interval is returned even though
238
- only the left value is relevant.
239
- """
240
- return self._pending_pieces[0].lower_bound
241
-
242
- def _add_next_piece(self):
243
- """
244
- Finds the pending piece "closest" to the lifted closed geodesic,
245
- adds it to the result and marks the neighboring lifted tetrahedra
246
- to the pending queue.
247
-
248
- Here, "closest" is not quite precise because we pick the piece
249
- with the lowest lower bound for the distance. Also recall that the
250
- distance of a pending piece is the distance between the lifted
251
- geodesic L and the entry cell of the lifted tetrahedron, not between
252
- L and the lifted tetrahedron itself.
253
-
254
- So the right picture to have in mind is: imagine the 2-skeleton
255
- of the triangulation in the quotient space intersecting the boundary
256
- of a geodesic tube. As the geodesic tube grows, the intersection
257
- sweeps through the 2-skeleton. The pending pieces will be processed in
258
- the order the faces of the 2-skeleton are encountered during the
259
- sweep.
260
- """
261
-
262
- # Find "closest" pieces not yet visited
263
- while True:
264
- pending_piece = heapq.heappop(self._pending_pieces)
265
- if self._visited_lifted_tetrahedra.add(
266
- pending_piece.lifted_tetrahedron):
267
- break
268
-
269
- if self.mcomplex.verified:
270
- epsilon = 0
271
- else:
272
- epsilon = epsilons.compute_tube_injectivity_radius_epsilon(
273
- self.mcomplex.RF)
274
-
275
- tet = pending_piece.lifted_tetrahedron.tet
276
- m = pending_piece.lifted_tetrahedron.o13_matrix
277
-
278
- # Imagine the fixed lift of the given geodesic and how it
279
- # relates to the lifted tetrahedron which is the image of
280
- # the tetrahedron in the fundamental domain under the matrix.
281
- #
282
- # Applying the inverse matrix moves the tetrahedron back into
283
- # the fundamental domain and thus we obtain the line we want
284
- # to record in GeodesicTubePiece.
285
- #
286
- lifted_geodesic = self._line.transformed(o13_inverse(m))
287
-
288
- # Check that this line is not intersecting a core curve.
289
- for v in simplex.ZeroSubsimplices:
290
- core_curve = tet.core_curves.get(v, None)
291
- if core_curve:
292
- d = distance_r13_lines(
293
- core_curve.r13_line,
294
- lifted_geodesic)
295
- if not d > epsilon:
296
- raise exceptions.GeodesicCloseToCoreCurve()
297
-
298
- # Emit GeodesicTubePiece
299
- self.pieces.append(
300
- GeodesicTubePiece(
301
- tet=tet,
302
- lifted_geodesic=lifted_geodesic,
303
- lower_bound=pending_piece.lower_bound))
304
-
305
- # For all faces ...
306
- for f, new_tet in tet.Neighbor.items():
307
- # ... except the one that was used to reach this lifted tetrahedron
308
- if f == pending_piece.entry_cell:
309
- continue
310
- entry_face = tet.Gluing[f].image(f)
311
- heapq.heappush(
312
- self._pending_pieces,
313
- _PendingPiece(
314
- LiftedTetrahedron(
315
- new_tet,
316
- # Inverse of tet.O13_matrices[f]
317
- m * new_tet.O13_matrices[entry_face]),
318
- # Distance of this face to lifted geodesic
319
- # (equal to distance of face entry_face of
320
- # new_tet)
321
- lower_bound_for_distance_line_to_tet_face(
322
- lifted_geodesic,
323
- tet,
324
- f,
325
- self.mcomplex.verified),
326
- entry_cell=entry_face))
327
-
328
-
329
- def make_r13_unit_tangent_vector(direction, point):
330
- s = r13_dot(direction, point)
331
- return space_r13_normalise(direction + s * point)
332
-
333
-
334
- def triangle_bounding_plane(tet, face, edge):
335
- v = tet.R13_vertices[face - edge]
336
- v0 = tet.R13_vertices[simplex.Head[edge]]
337
- v1 = tet.R13_vertices[simplex.Tail[edge]]
338
-
339
- m = time_r13_normalise(
340
- v0 / -r13_dot(v0, v) + v1 / -r13_dot(v1, v))
341
-
342
- return make_r13_unit_tangent_vector(m - v, m)
343
-
344
-
345
- _face_to_edges = { f : [ e for e in simplex.OneSubsimplices
346
- if simplex.is_subset(e, f) ]
347
- for f in simplex.TwoSubsimplices }
348
-
349
-
350
- def lower_bound_for_distance_line_to_tet_face(
351
- line, tet, face, verified):
352
-
353
- RF = line.points[0][0].parent()
354
- if verified:
355
- epsilon = 0
356
- else:
357
- epsilon = epsilons.compute_epsilon(RF)
358
-
359
- a0 = r13_dot(tet.R13_planes[face], line.points[0])
360
- a1 = r13_dot(tet.R13_planes[face], line.points[1])
361
-
362
- abs0 = abs(a0)
363
- abs1 = abs(a1)
364
-
365
- if abs0 > epsilon and abs1 > epsilon:
366
- pt = line.points[0] / abs0 + line.points[1] / abs1
367
-
368
- for e in _face_to_edges[face]:
369
- if r13_dot(pt, tet.triangle_bounding_planes[face][e]) > epsilon:
370
- return distance_r13_lines(line, tet.R13_edges[e])
371
-
372
- p = a0 * a1
373
-
374
- if p > 0:
375
- return (-2 * p / line.inner_product).sqrt().arcsinh()
376
-
377
- return RF(0)
378
- else:
379
- for e in _face_to_edges[face]:
380
- p = tet.triangle_bounding_planes[face][e]
381
- b0 = r13_dot(line.points[0], p)
382
- b1 = r13_dot(line.points[1], p)
383
- if b0 > epsilon and b1 > epsilon:
384
- return distance_r13_lines(line, tet.R13_edges[e])
385
-
386
- return RF(0)
387
-
388
-
389
- if __name__ == '__main__':
390
- from snappy import *
391
- from snappy.dev.endpoints import *
392
- M = Manifold("m015")
393
- m = compute_mcomplex_with_R13_geometry(M, verified=True, bits_prec=100)
394
-
395
- g = GeodesicTube(m, 'b')
396
-
397
- inj = g.compute_injectivity_radius()
398
-
399
- for i in range(40):
400
- g.add_next_piece()
401
-
402
- print("============================")
403
-
404
- for p in g.pieces:
405
- print(p.lower_bound_distance)
406
-
407
- print("Injectivity radius:", inj)
408
-
409
- # Expected:
410
-
411
- """
412
- [0,
413
- 0.000000000000000,
414
- 0.157432650379166,
415
- 0.759562243855202,
416
- 0.759562243855203,
417
- 0.759562243855202,
418
- 0.759562243855203,
419
- 0.759562243855203,
420
- 0.759562243855203,
421
- 1.06170905665770,
422
- 1.06170905665770,
423
- 1.06170905665770,
424
- 1.06170905665770,
425
- 1.06170905665770,
426
- 1.06170905665770,
427
- 1.12951210091877,
428
- 1.12951210091877,
429
- 1.14163116050953,
430
- 1.14163116050953,
431
- 1.14163116050953,
432
- 1.14163116050953,
433
- 1.14163116050953,
434
- 1.26080401747415,
435
- 1.26080401747415,
436
- 1.26080401747415,
437
- 1.26080401747415,
438
- 1.35112753701695,
439
- 1.35112753701695,
440
- 1.46879789565717,
441
- """