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,9 +1,9 @@
1
1
  from snappy.snap import t3mlite as t3m
2
2
  from snappy import Triangulation
3
3
 
4
- from snappy.SnapPy import matrix, vector
4
+ from ..matrix import make_matrix, make_vector
5
5
 
6
- from snappy.upper_halfspace import pgl2c_to_o13
6
+ from ..upper_halfspace import pgl2c_to_o13
7
7
 
8
8
  # We could use
9
9
  #
@@ -60,7 +60,7 @@ class FiniteRaytracingData(RaytracingData):
60
60
  return r
61
61
 
62
62
  def __init__(self, hyperbolic_structure):
63
- super(FiniteRaytracingData, self).__init__(
63
+ super().__init__(
64
64
  hyperbolic_structure.mcomplex)
65
65
 
66
66
  def _compute_matrices(self, hyperbolic_structure):
@@ -69,7 +69,7 @@ class FiniteRaytracingData(RaytracingData):
69
69
  hyperbolic_structure, tet.Index)
70
70
 
71
71
  def _compute_tet_vertices(self):
72
- c = vector(self.RF, [1, 0, 0, 0])
72
+ c = make_vector([1, 0, 0, 0], ring=self.RF)
73
73
 
74
74
  def _compute_vertex(tet, perm):
75
75
  m = tet.permutahedron_matrices[perm]
@@ -83,8 +83,8 @@ class FiniteRaytracingData(RaytracingData):
83
83
  t3m.V3 : _compute_vertex(tet, (3,0,1,2)) }
84
84
 
85
85
  def _compute_edge_ends(self):
86
- cs = [ vector(self.RF,[1, 1, 0, 0]),
87
- vector(self.RF,[1, -1, 0, 0]) ]
86
+ cs = [ make_vector([1, 1, 0, 0], ring=self.RF),
87
+ make_vector([1, -1, 0, 0], ring=self.RF) ]
88
88
 
89
89
  def _compute_edge_ends(tet, perm):
90
90
  m = tet.permutahedron_matrices[perm]
@@ -100,12 +100,12 @@ class FiniteRaytracingData(RaytracingData):
100
100
  t3m.E23 : _compute_edge_ends(tet, (2,3,0,1)) }
101
101
 
102
102
  def _compute_planes(self):
103
- c = vector(self.RF, [0.0, 0.0, 0.0, -1.0])
103
+ c = make_vector([0.0, 0.0, 0.0, -1.0], ring=self.RF)
104
104
 
105
105
  def _compute_plane(tet, perm):
106
106
  m = tet.permutahedron_matrices[perm]
107
107
  v = c * pgl2c_to_o13(m)
108
- return vector([-v[0], v[1], v[2], v[3]])
108
+ return make_vector([-v[0], v[1], v[2], v[3]])
109
109
 
110
110
  for tet in self.mcomplex.Tetrahedra:
111
111
  tet.R13_planes = {
@@ -125,7 +125,7 @@ class FiniteRaytracingData(RaytracingData):
125
125
  for F in t3m.TwoSubsimplices:
126
126
  for V in t3m.ZeroSubsimplices:
127
127
  if V & F:
128
- v0 = tet.O13_matrices[F] * vector(tet.R13_vertices[V])
128
+ v0 = tet.O13_matrices[F] * make_vector(tet.R13_vertices[V])
129
129
  v1 = tet.Neighbor[F].R13_vertices[tet.Gluing[F].image(V)]
130
130
 
131
131
  if abs(r13_dot(v0, v1) - (-1.0)) > 1e-6:
@@ -136,7 +136,7 @@ class FiniteRaytracingData(RaytracingData):
136
136
  def get_uniform_bindings(self):
137
137
  # self._check_consistency()
138
138
 
139
- d = super(FiniteRaytracingData, self).get_uniform_bindings()
139
+ d = super().get_uniform_bindings()
140
140
  d['TetrahedraEdges.R13EdgeEnds'] = (
141
141
  'vec4[]',
142
142
  [ edge_end
@@ -153,15 +153,15 @@ class FiniteRaytracingData(RaytracingData):
153
153
  return d
154
154
 
155
155
  def get_compile_time_constants(self):
156
- d = super(FiniteRaytracingData, self).get_compile_time_constants()
156
+ d = super().get_compile_time_constants()
157
157
  d[b'##finiteTrig##'] = 1
158
158
  return d
159
159
 
160
160
  def initial_view_state(self):
161
- boost = matrix([[1.0,0.0,0.0,0.0],
162
- [0.0,1.0,0.0,0.0],
163
- [0.0,0.0,1.0,0.0],
164
- [0.0,0.0,0.0,1.0]])
161
+ boost = make_matrix([[1.0,0.0,0.0,0.0],
162
+ [0.0,1.0,0.0,0.0],
163
+ [0.0,0.0,1.0,0.0],
164
+ [0.0,0.0,0.0,1.0]])
165
165
  tet_num = 0
166
166
  weight = 0.0
167
167
  return (boost, tet_num, weight)
@@ -191,8 +191,8 @@ def _compute_face_pairing(tet, F):
191
191
 
192
192
 
193
193
  def _adjoint(m):
194
- return matrix([[ m[1,1],-m[0,1]],
195
- [-m[1,0], m[0,0]]])
194
+ return make_matrix([[ m[1,1],-m[0,1]],
195
+ [-m[1,0], m[0,0]]])
196
196
 
197
197
 
198
198
  _new_perm_edge_type_old_perm = [
@@ -65,7 +65,7 @@ class FiniteViewer(ttk.Frame):
65
65
 
66
66
  UniformDictController(
67
67
  self.widget.ui_parameter_dict, 'fov',
68
- update_function=self.widget.redraw_if_initialized,
68
+ update_function=self.widget.draw,
69
69
  scale=self.fov_scale,
70
70
  label=self.fov_label,
71
71
  format_string='%.1f')
@@ -121,7 +121,7 @@ class FiniteViewer(ttk.Frame):
121
121
  return frame
122
122
 
123
123
  def checkbox_update(self):
124
- self.widget.redraw_if_initialized()
124
+ self.widget.draw()
125
125
  self.focus_viewer()
126
126
 
127
127
  def create_fillings_frame(self, parent):
@@ -207,7 +207,7 @@ class FiniteViewer(ttk.Frame):
207
207
  row=row,
208
208
  left_end=0.0,
209
209
  right_end=0.35,
210
- update_function=self.widget.redraw_if_initialized,
210
+ update_function=self.widget.draw,
211
211
  format_string='%.3f')
212
212
 
213
213
  row += 1
@@ -219,7 +219,7 @@ class FiniteViewer(ttk.Frame):
219
219
  row=row,
220
220
  left_end=0.0,
221
221
  right_end=1.35,
222
- update_function=self.widget.redraw_if_initialized,
222
+ update_function=self.widget.draw,
223
223
  format_string='%.3f')
224
224
 
225
225
  row += 1
@@ -231,7 +231,7 @@ class FiniteViewer(ttk.Frame):
231
231
  row=row,
232
232
  left_end=0.0,
233
233
  right_end=0.5,
234
- update_function=self.widget.redraw_if_initialized)
234
+ update_function=self.widget.draw)
235
235
 
236
236
  return frame
237
237
 
@@ -251,7 +251,7 @@ class FiniteViewer(ttk.Frame):
251
251
  row=row,
252
252
  left_end=1,
253
253
  right_end=100,
254
- update_function=self.widget.redraw_if_initialized)
254
+ update_function=self.widget.draw)
255
255
 
256
256
  row += 1
257
257
  UniformDictController.create_horizontal_scale(
@@ -262,7 +262,7 @@ class FiniteViewer(ttk.Frame):
262
262
  row=row,
263
263
  left_end=1.0,
264
264
  right_end=28.0,
265
- update_function=self.widget.redraw_if_initialized)
265
+ update_function=self.widget.draw)
266
266
 
267
267
  row += 1
268
268
  UniformDictController.create_horizontal_scale(
@@ -273,7 +273,7 @@ class FiniteViewer(ttk.Frame):
273
273
  row=row,
274
274
  left_end=1.0,
275
275
  right_end=4.25,
276
- update_function=self.widget.redraw_if_initialized)
276
+ update_function=self.widget.draw)
277
277
 
278
278
  return frame
279
279
 
@@ -295,7 +295,7 @@ class FiniteViewer(ttk.Frame):
295
295
  row=row,
296
296
  left_end=0.0,
297
297
  right_end=0.25,
298
- update_function=self.widget.redraw_if_initialized,
298
+ update_function=self.widget.draw,
299
299
  format_string='%.3f')
300
300
  row += 1
301
301
 
@@ -307,7 +307,7 @@ class FiniteViewer(ttk.Frame):
307
307
  row=row,
308
308
  left_end=0.3,
309
309
  right_end=4.0,
310
- update_function=self.widget.redraw_if_initialized)
310
+ update_function=self.widget.draw)
311
311
 
312
312
  row += 1
313
313
  UniformDictController.create_horizontal_scale(
@@ -318,7 +318,7 @@ class FiniteViewer(ttk.Frame):
318
318
  row=row,
319
319
  left_end=0.1,
320
320
  right_end=2.0,
321
- update_function=self.widget.redraw_if_initialized)
321
+ update_function=self.widget.draw)
322
322
 
323
323
  row += 1
324
324
  UniformDictController.create_horizontal_scale(
@@ -329,7 +329,7 @@ class FiniteViewer(ttk.Frame):
329
329
  row=row,
330
330
  left_end=0.3,
331
331
  right_end=3.0,
332
- update_function=self.widget.redraw_if_initialized)
332
+ update_function=self.widget.draw)
333
333
 
334
334
  return frame
335
335
 
@@ -364,7 +364,7 @@ class FiniteViewer(ttk.Frame):
364
364
  left_end=0.1,
365
365
  right_end=1.0)
366
366
 
367
- label = ttk.Label(frame, text=u"Keys: \u2190\u2191\u2192\u2193xz")
367
+ label = ttk.Label(frame, text="Keys: \u2190\u2191\u2192\u2193xz")
368
368
  label.grid(row=row, column=3, sticky=tkinter.NSEW)
369
369
 
370
370
  row += 1
@@ -540,7 +540,7 @@ def _maximal_cusp_area(mfd):
540
540
 
541
541
  def _mouse_gestures_text():
542
542
  if sys.platform == 'darwin':
543
- return u"Move: Click & Drag Rotate: Shift-Click & Drag Orbit: \u2318-Click & Drag"
543
+ return "Move: Click & Drag Rotate: Shift-Click & Drag Orbit: \u2318-Click & Drag"
544
544
  else:
545
545
  return "Move: Click & Drag Rotate: Shift-Click & Drag Orbit: Alt-Click & Drag"
546
546
 
@@ -578,7 +578,7 @@ class PerfTest:
578
578
  self.widget.view_state = self.widget.raytracing_data.update_view_state(
579
579
  self.widget.view_state, self.m)
580
580
 
581
- self.widget.redraw_if_initialized()
581
+ self.widget.draw()
582
582
  self.widget.after(250, self.redraw)
583
583
 
584
584
 
@@ -1,91 +1,121 @@
1
- from ..drilling import compute_geodesic_info
2
- from ..drilling.geodesic_tube import GeodesicTube
3
- from ..drilling.line import distance_r13_lines
1
+ from ..tiling.iter_utils import IteratorCache
2
+ from ..tiling.tile import Tile
3
+
4
+ from ..hyperboloid.distances import distance_r13_lines
5
+
6
+ from ..geometric_structure.geodesic.geodesic_start_point_info import compute_geodesic_start_point_info
7
+ from ..geometric_structure.geodesic.tiles_for_geodesic import compute_tiles_for_geodesic
4
8
 
5
9
  from ..snap.t3mlite import simplex # type: ignore
6
10
 
11
+ from typing import Sequence
12
+
13
+ # Do not draw line segments of geodesic that are fully within a tube
14
+ # about a core curve of this radius.
15
+ avoid_core_curve_tube_radius = 0.1
16
+
17
+ def tiles_up_to_core_curve(tiles : Sequence[Tile]) -> Sequence[Tile]:
18
+ """
19
+ Only develop tube until the radius is 98% of the distance to
20
+ a core curve
21
+ """
22
+
23
+ min_dist_to_core_curve = 1e50
24
+
25
+ for tile in tiles:
26
+ if (tile.lower_bound_distance > 0.0001 and
27
+ not tile.lower_bound_distance < min_dist_to_core_curve * 0.98):
28
+ break
29
+
30
+ for v in simplex.ZeroSubsimplices:
31
+ tet = tile.lifted_tetrahedron.tet
32
+ core_curve = tet.core_curves.get(v, None)
33
+ if core_curve is None:
34
+ continue
35
+
36
+ dist_to_core_curve = distance_r13_lines(
37
+ core_curve.r13_line, tile.inverse_lifted_geometric_object)
38
+
39
+ # We already drop the pieces that are too close to a core curve.
40
+ min_dist_to_core_curve = min(
41
+ min_dist_to_core_curve, dist_to_core_curve)
42
+
43
+ tile.dist_to_core_curve = min_dist_to_core_curve
44
+
45
+ yield tile
46
+
47
+ class GeodesicLinePieces:
48
+ def __init__(self,
49
+ tets_and_end_points,
50
+ covered_radius,
51
+ dist_to_core_curve):
52
+ self.tets_and_end_points = tets_and_end_points
53
+ self.covered_radius = covered_radius
54
+ self.dist_to_core_curve = dist_to_core_curve
7
55
 
8
56
  class GeodesicTubeInfo:
9
57
  def __init__(self, mcomplex, word, index, is_primitive=None):
10
58
  # Compute GeodesicTube
11
- self.geodesic_info = compute_geodesic_info(mcomplex, word)
12
-
13
- if not self.geodesic_info.core_curve_cusp:
14
- self.geodesic_tube = GeodesicTube(mcomplex, self.geodesic_info)
59
+ self.geodesic_start_point_info = compute_geodesic_start_point_info(mcomplex, word)
60
+
61
+ for tet in mcomplex.Tetrahedra:
62
+ for v, core_curve in tet.core_curves.items():
63
+ tet.Class[v].core_curve_tube_radius = mcomplex.RF(avoid_core_curve_tube_radius)
64
+
65
+ if not self.geodesic_start_point_info.core_curve_cusp:
66
+ self.tiles = IteratorCache(
67
+ tiles_up_to_core_curve(
68
+ compute_tiles_for_geodesic(
69
+ mcomplex,
70
+ self.geodesic_start_point_info,
71
+ avoid_core_curves=True,
72
+ for_raytracing=True)))
73
+ self._tiles_to_cover = []
15
74
 
16
75
  # Compute complex length from trace
17
- t = self.geodesic_info.trace
76
+ t = self.geodesic_start_point_info.trace
18
77
  self.complex_length = _normalize_complex_length(2 * (t / 2).arccosh())
19
78
 
20
79
  self.words = [ word ]
21
80
  self.index = index
22
81
 
23
82
  RF = t.real().parent()
24
- self.dist_to_core_curve = RF(1e50)
25
-
26
- # Caches enough pieces so that we can compare tetrahedra.
27
- self._pieces_covering_geodesic = []
28
83
 
29
84
  self._is_primitive = is_primitive
30
85
 
31
- def compute_tets_and_R13_endpoints_and_radius_for_tube(self, radius):
32
-
33
- # Only develop tube until the radius is 98% of the distance to
34
- # a core curve
35
- while True:
36
- safe_radius = self.dist_to_core_curve * 0.98
37
- if radius > safe_radius:
38
- # Stop. Tube is about to intersect a core curve.
39
- radius = safe_radius
40
- break
41
-
42
- if self.geodesic_tube.covered_radius() > radius:
43
- # Done. We covered the tube.
44
- break
45
-
46
- self.geodesic_tube._add_next_piece()
47
-
48
- # Get last piece. Compute distance of lifted geodesic to
49
- # to core curves.
50
- piece = self.geodesic_tube.pieces[-1]
51
- for v in simplex.ZeroSubsimplices:
52
- core_curve = piece.tet.core_curves.get(v, None)
53
- if core_curve:
54
- d = distance_r13_lines(
55
- core_curve.r13_line,
56
- piece.lifted_geodesic)
57
-
58
- if d < self.dist_to_core_curve:
59
- self.dist_to_core_curve = d
86
+ def compute_line_pieces(self, radius) -> GeodesicLinePieces:
60
87
 
61
- result = []
88
+ tets_and_end_points = []
62
89
 
63
- for piece in self.geodesic_tube.pieces:
64
- if piece.lower_bound > radius:
90
+ for tile in self.tiles:
91
+ if tile.lower_bound_distance > radius:
65
92
  break
66
- result.append(
67
- (piece.tet.Index,
68
- [ piece.tet.to_coordinates_in_symmetric_tet * pt
69
- for pt in piece.lifted_geodesic.points] ))
93
+ tet = tile.lifted_tetrahedron.tet
94
+ tets_and_end_points.append(
95
+ (tet.Index,
96
+ [ tet.to_coordinates_in_symmetric_tet * pt
97
+ for pt in tile.inverse_lifted_geometric_object.points] ))
70
98
 
71
- return result, radius
99
+ return GeodesicLinePieces(
100
+ tets_and_end_points,
101
+ tile.lower_bound_distance,
102
+ tile.dist_to_core_curve)
72
103
 
73
104
  def _get_pieces_covering_geodesic(self):
74
- if not self._pieces_covering_geodesic:
75
- self.geodesic_tube.add_pieces_for_radius(0)
76
- for piece in self.geodesic_tube.pieces:
77
- if piece.lower_bound > 0:
105
+ if not self._tiles_to_cover:
106
+ for tile in self.tiles:
107
+ if tile.lower_bound_distance > 0:
78
108
  break
79
- self._pieces_covering_geodesic.append(piece)
80
- return self._pieces_covering_geodesic
109
+ self._tiles_to_cover.append(tile)
110
+ return self._tiles_to_cover
81
111
 
82
112
  def __eq__(self, other):
83
113
  diff = _normalize_complex_length(self.complex_length - other.complex_length)
84
114
  if not abs(diff) < 1e-3:
85
115
  return False
86
116
 
87
- self_cusp = self.geodesic_info.core_curve_cusp
88
- other_cusp = other.geodesic_info.core_curve_cusp
117
+ self_cusp = self.geodesic_start_point_info.core_curve_cusp
118
+ other_cusp = other.geodesic_start_point_info.core_curve_cusp
89
119
 
90
120
  if self_cusp or other_cusp:
91
121
  if self_cusp and other_cusp:
@@ -96,10 +126,10 @@ class GeodesicTubeInfo:
96
126
  # We should ask snappy.drilling for the two tetrahedra adjacent to
97
127
  # a face.
98
128
  piece = self._get_pieces_covering_geodesic()[0]
99
- point = piece.lifted_geodesic.points[0]
129
+ point = piece.inverse_lifted_geometric_object.points[0]
100
130
  for other_piece in other._get_pieces_covering_geodesic():
101
- if piece.tet == other_piece.tet:
102
- for other_point in other_piece.lifted_geodesic.points:
131
+ if piece.lifted_tetrahedron.tet == other_piece.lifted_tetrahedron.tet:
132
+ for other_point in other_piece.inverse_lifted_geometric_object.points:
103
133
  if _are_parallel_light_vectors(point, other_point, 1e-5):
104
134
  return True
105
135
  return False
@@ -114,10 +144,10 @@ class GeodesicTubeInfo:
114
144
  for i, piece0 in enumerate(pieces):
115
145
  for j, piece1 in enumerate(pieces):
116
146
  if i < j:
117
- if piece0.tet == piece1.tet:
147
+ if piece0.lifted_tetrahedron.tet == piece1.lifted_tetrahedron.tet:
118
148
  if _are_parallel_light_vectors(
119
- piece0.lifted_geodesic.points[0],
120
- piece1.lifted_geodesic.points[0],
149
+ piece0.inverse_lifted_geometric_object.points[0],
150
+ piece1.inverse_lifted_geometric_object.points[0],
121
151
  1e-5):
122
152
  return False
123
153
  return True
@@ -1,21 +1,26 @@
1
- from .geodesic_tube_info import GeodesicTubeInfo
2
- from .upper_halfspace_utilities import *
3
-
4
- from ..drilling.geometric_structure import add_r13_geometry
5
- from ..drilling.geodesic_tube import add_structures_necessary_for_tube
1
+ from .geodesic_tube_info import (GeodesicTubeInfo,
2
+ GeodesicLinePieces,
3
+ avoid_core_curve_tube_radius)
4
+ from .pack import pack_tet_data
5
+ from .upper_halfspace_utilities import add_coordinate_transform_to_mcomplex
6
+ from .hyperboloid_utilities import O13_orthonormalise
7
+
8
+ from ..geometric_structure import (add_r13_geometry,
9
+ add_filling_information)
10
+ from ..geometric_structure.geodesic.add_core_curves import add_r13_core_curves
11
+ from ..tiling.triangle import add_triangles_to_tetrahedra
6
12
  from ..snap.t3mlite import Mcomplex, simplex
7
- from ..upper_halfspace import pgl2c_to_o13, sl2c_inverse
13
+ from ..matrix import make_matrix # type: ignore
8
14
 
15
+ import traceback
9
16
 
10
17
  class LengthSpectrumError(RuntimeError):
11
18
  pass
12
19
 
13
-
14
20
  class Geodesics:
15
21
  def __init__(self, manifold, words):
16
22
  """
17
23
 
18
- >>> from snappy import Manifold
19
24
  >>> M = Manifold("o9_00000")
20
25
  >>> g = Geodesics(M, ["b", "c"])
21
26
  >>> g.set_enables_and_radii_and_update([True, True], [0.3, 0.4])
@@ -40,11 +45,8 @@ class Geodesics:
40
45
  self.num_tetrahedra = manifold.num_tetrahedra()
41
46
  self.RF = manifold.tetrahedra_shapes('rect')[0].real().parent()
42
47
 
43
- self.data_heads = []
44
- self.data_tails = []
45
- self.data_indices = []
46
- self.data_radius_params = []
47
- self.data_offsets = (self.num_tetrahedra + 1) * [ 0 ]
48
+ self._uniform_bindings = {}
49
+ self._num = 0
48
50
 
49
51
  def set_enables_and_radii_and_update(self, enables, radii):
50
52
 
@@ -56,58 +58,55 @@ class Geodesics:
56
58
  if not self.geodesic_tube_infos:
57
59
  return success
58
60
 
59
- self.data_heads = []
60
- self.data_tails = []
61
- self.data_indices = []
62
- self.data_radius_params = []
63
- self.data_offsets = []
64
-
65
61
  tets_to_data = [ [] for i in range(self.num_tetrahedra) ]
66
62
 
63
+ a_radius = self.RF(avoid_core_curve_tube_radius)
64
+
67
65
  for i, (enable, radius, geodesic_tube) in enumerate(
68
66
  zip(enables, radii, self.geodesic_tube_infos)):
69
67
  if enable:
70
68
  radius = self.RF(radius)
71
69
 
72
- tets_and_endpoints, safe_radius = (
73
- geodesic_tube.compute_tets_and_R13_endpoints_and_radius_for_tube(radius))
70
+ line_pieces : GeodesicLinePieces = (
71
+ geodesic_tube.compute_line_pieces(radius))
74
72
 
75
- if safe_radius < radius:
73
+ if (line_pieces.covered_radius < radius or
74
+ line_pieces.dist_to_core_curve < radius or
75
+ line_pieces.dist_to_core_curve < a_radius):
76
76
  success = False
77
77
 
78
- radius_param = safe_radius.cosh() ** 2 / 2
78
+ # A user can always force the tube to have this radius.
79
+ # Even though it might be incomplete at that point.
80
+ min_user_radius = 0.1
79
81
 
80
- for tet, endpoints in tets_and_endpoints:
82
+ effective_radius = min(
83
+ radius,
84
+ max(line_pieces.covered_radius, self.RF(min_user_radius)))
85
+
86
+ radius_param = effective_radius.cosh() ** 2 / 2
87
+
88
+ for tet, (head, tail) in line_pieces.tets_and_end_points:
81
89
  tets_to_data[tet].append(
82
- (endpoints, i, radius_param))
90
+ {'Heads' : ('vec4', head),
91
+ 'Tails' : ('vec4', tail),
92
+ 'Index' : ('int', i),
93
+ 'TubeRadiusParam' : ('float', radius_param)})
83
94
 
84
- for data in tets_to_data:
85
- self.data_offsets.append(len(self.data_heads))
86
- for (head, tail), i, radius_param in data:
87
- self.data_heads.append(head)
88
- self.data_tails.append(tail)
89
- self.data_indices.append(i)
90
- self.data_radius_params.append(radius_param)
91
- self.data_offsets.append(len(self.data_heads))
95
+ self._uniform_bindings, self._num = pack_tet_data(
96
+ 'geodesics.geodesic', tets_to_data)
92
97
 
93
98
  return success
94
99
 
95
100
  def get_uniform_bindings(self):
96
- return {
97
- 'geodesics.geodesicHeads' : ('vec4[]', self.data_heads),
98
- 'geodesics.geodesicTails' : ('vec4[]', self.data_tails),
99
- 'geodesics.geodesicIndex' : ('int[]', self.data_indices),
100
- 'geodesics.geodesicTubeRadiusParam' : ('float[]', self.data_radius_params),
101
- 'geodesics.geodesicOffsets' : ('int[]', self.data_offsets) }
102
-
103
- def get_compile_time_constants(self):
104
- if self.data_heads:
105
- num = max(100, len(self.data_heads))
101
+ return self._uniform_bindings
102
+
103
+ def get_compile_time_defs(self):
104
+ if self._num > 0:
105
+ num = max(100, self._num)
106
106
  else:
107
107
  num = 0
108
108
 
109
- return {
110
- b'##num_geodesic_segments##' : num }
109
+ return { 'num_geodesic_segments' : num }
111
110
 
112
111
  def add_length_spectrum(self, l):
113
112
 
@@ -125,8 +124,8 @@ class Geodesics:
125
124
  try:
126
125
  self.add_word(g['word'], is_primitive=True)
127
126
  except Exception as e:
128
- print(dict(g))
129
- print(e)
127
+ traceback.print_exc()
128
+ print("Geodesic is ", dict(g))
130
129
  exception = e
131
130
 
132
131
  if exception:
@@ -158,21 +157,57 @@ class Geodesics:
158
157
  def get_mcomplex(self):
159
158
  if self.mcomplex is None:
160
159
  self.mcomplex = Mcomplex(self.manifold)
161
- add_r13_geometry(self.mcomplex,
162
- self.manifold)
163
- add_structures_necessary_for_tube(self.mcomplex)
164
-
165
- for tet in self.mcomplex.Tetrahedra:
166
- z = tet.ShapeParameters[simplex.E01]
167
- vert0 = [ tet.ideal_vertices[v]
168
- for v in simplex.ZeroSubsimplices[:3]]
169
- vert1 = symmetric_vertices_for_tetrahedron(z)[:3]
170
- tet.to_coordinates_in_symmetric_tet = (
171
- o13_matrix_taking_ideal_vertices_to_ideal_vertices(
172
- vert0, vert1))
160
+ add_r13_geometry(
161
+ self.mcomplex, self.manifold)
162
+ add_filling_information(
163
+ self.mcomplex, self.manifold)
164
+ add_r13_core_curves(
165
+ self.mcomplex, self.manifold)
166
+ add_triangles_to_tetrahedra(self.mcomplex)
167
+ add_coordinate_transform_to_mcomplex(self.mcomplex)
173
168
 
174
169
  return self.mcomplex
175
170
 
171
+ def view_state_for_geodesic(self, index):
172
+ geodesic_start_point_info = self.geodesic_tube_infos[index].geodesic_start_point_info
173
+ p0, p1 = geodesic_start_point_info.line.r13_line.points
174
+
175
+ ring = p0[0].parent()
176
+
177
+ # Rotate the camera so that it is looking down the x-Axis
178
+ r = make_matrix([[1, 0, 0, 0],
179
+ [0, 0, 0, 1],
180
+ [0, 1, 0, 0],
181
+ [0, 0, 1, 0]],
182
+ ring=ring)
183
+
184
+ # Create a transform that takes the origin to a point on the
185
+ # geodesic and takes the tangent vector at the origin parallel
186
+ # to the x-Axis to a vector tangent to the geodesic.
187
+ #
188
+ # Note that the orthonormalisation processes the columns from left
189
+ # to right. This is exactly what we want.
190
+ #
191
+ g = O13_orthonormalise(
192
+ make_matrix(
193
+ [ p0 + p1, # (Projective) point on the geodesic.
194
+ # Orthonormalisation just normalizes it
195
+ # so that it is on the hyperboloid.
196
+ p0 - p1, # Direction of geodesic.
197
+ # Orthonormalisation just projects it into
198
+ # the tangent space of the hyperboloid
199
+ # at the above point and normalizes it.
200
+ [ 0, 1, 0, 0], # Some other vectors so that
201
+ [ 0, 0, 1, 0]], # orthonormalisation produces a camera frame.
202
+ ring=ring).transpose())
203
+
204
+ # Change coordinate system used for computation of geodesics
205
+ # to the one used by the raytracing code.
206
+ tet_index = 0
207
+ tet = self.get_mcomplex().Tetrahedra[tet_index]
208
+ c = tet.to_coordinates_in_symmetric_tet
209
+
210
+ return c * g * r, tet_index, 0.0
176
211
 
177
212
  def compute_geodesic_tube_info_key(geodesic_tube_info):
178
213
  l = geodesic_tube_info.complex_length
@@ -209,8 +244,3 @@ def geodesic_index_to_color(i):
209
244
  return hsv2rgb(golden_angle_by_2_pi * i + 0.1, 1.0, 1.0)
210
245
 
211
246
 
212
- def o13_matrix_taking_ideal_vertices_to_ideal_vertices(verts0, verts1):
213
- m1 = pgl2_matrix_taking_0_1_inf_to_given_points(*verts0)
214
- m2 = pgl2_matrix_taking_0_1_inf_to_given_points(*verts1)
215
-
216
- return pgl2c_to_o13(m2 * sl2c_inverse(m1))