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

Sign up to get free protection for your applications and to get access to all the features.
Files changed (464) hide show
  1. snappy/CyOpenGL.cpython-310-darwin.so +0 -0
  2. snappy/SnapPy.cpython-310-darwin.so +0 -0
  3. snappy/SnapPyHP.cpython-310-darwin.so +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/development.rst.txt +66 -46
  25. snappy/doc/_sources/index.rst.txt +72 -5
  26. snappy/doc/_sources/installing.rst.txt +145 -162
  27. snappy/doc/_sources/news.rst.txt +73 -1
  28. snappy/doc/_sources/ptolemy_examples1.rst.txt +8 -7
  29. snappy/doc/_sources/ptolemy_examples3.rst.txt +2 -2
  30. snappy/doc/_sources/triangulation.rst.txt +2 -2
  31. snappy/doc/_sources/verify.rst.txt +89 -29
  32. snappy/doc/_sources/verify_internals.rst.txt +5 -16
  33. snappy/doc/_static/basic.css +23 -1
  34. snappy/doc/_static/css/badge_only.css +1 -1
  35. snappy/doc/_static/css/theme.css +1 -1
  36. snappy/doc/_static/doctools.js +1 -1
  37. snappy/doc/_static/documentation_options.js +2 -3
  38. snappy/doc/_static/fonts/Lato/lato-bold.eot +0 -0
  39. snappy/doc/_static/fonts/Lato/lato-bold.ttf +0 -0
  40. snappy/doc/_static/fonts/Lato/lato-bold.woff +0 -0
  41. snappy/doc/_static/fonts/Lato/lato-bold.woff2 +0 -0
  42. snappy/doc/_static/fonts/Lato/lato-bolditalic.eot +0 -0
  43. snappy/doc/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
  44. snappy/doc/_static/fonts/Lato/lato-bolditalic.woff +0 -0
  45. snappy/doc/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
  46. snappy/doc/_static/fonts/Lato/lato-italic.eot +0 -0
  47. snappy/doc/_static/fonts/Lato/lato-italic.ttf +0 -0
  48. snappy/doc/_static/fonts/Lato/lato-italic.woff +0 -0
  49. snappy/doc/_static/fonts/Lato/lato-italic.woff2 +0 -0
  50. snappy/doc/_static/fonts/Lato/lato-regular.eot +0 -0
  51. snappy/doc/_static/fonts/Lato/lato-regular.ttf +0 -0
  52. snappy/doc/_static/fonts/Lato/lato-regular.woff +0 -0
  53. snappy/doc/_static/fonts/Lato/lato-regular.woff2 +0 -0
  54. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
  55. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
  56. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
  57. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
  58. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
  59. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
  60. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
  61. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
  62. snappy/doc/_static/js/versions.js +228 -0
  63. snappy/doc/_static/language_data.js +2 -2
  64. snappy/doc/_static/pygments.css +1 -0
  65. snappy/doc/_static/searchtools.js +125 -71
  66. snappy/doc/_static/sphinx_highlight.js +13 -3
  67. snappy/doc/additional_classes.html +291 -122
  68. snappy/doc/bugs.html +17 -20
  69. snappy/doc/censuses.html +34 -53
  70. snappy/doc/credits.html +18 -21
  71. snappy/doc/development.html +88 -68
  72. snappy/doc/genindex.html +66 -145
  73. snappy/doc/index.html +86 -31
  74. snappy/doc/installing.html +164 -182
  75. snappy/doc/manifold.html +1168 -556
  76. snappy/doc/manifoldhp.html +18 -21
  77. snappy/doc/news.html +91 -33
  78. snappy/doc/objects.inv +0 -0
  79. snappy/doc/other.html +20 -22
  80. snappy/doc/platonic_census.html +31 -34
  81. snappy/doc/plink.html +19 -22
  82. snappy/doc/ptolemy.html +20 -22
  83. snappy/doc/ptolemy_classes.html +102 -105
  84. snappy/doc/ptolemy_examples1.html +34 -36
  85. snappy/doc/ptolemy_examples2.html +28 -31
  86. snappy/doc/ptolemy_examples3.html +26 -29
  87. snappy/doc/ptolemy_examples4.html +20 -23
  88. snappy/doc/ptolemy_prelim.html +25 -28
  89. snappy/doc/py-modindex.html +16 -19
  90. snappy/doc/screenshots.html +22 -24
  91. snappy/doc/search.html +15 -18
  92. snappy/doc/searchindex.js +1 -1
  93. snappy/doc/snap.html +18 -21
  94. snappy/doc/snappy.html +18 -20
  95. snappy/doc/spherogram.html +84 -87
  96. snappy/doc/todo.html +17 -20
  97. snappy/doc/triangulation.html +324 -215
  98. snappy/doc/tutorial.html +17 -20
  99. snappy/doc/verify.html +100 -46
  100. snappy/doc/verify_internals.html +106 -563
  101. snappy/drilling/__init__.py +153 -235
  102. snappy/drilling/barycentric.py +103 -0
  103. snappy/drilling/constants.py +0 -2
  104. snappy/drilling/crush.py +56 -130
  105. snappy/drilling/cusps.py +12 -6
  106. snappy/drilling/debug.py +2 -1
  107. snappy/drilling/exceptions.py +7 -40
  108. snappy/drilling/moves.py +302 -243
  109. snappy/drilling/perturb.py +63 -37
  110. snappy/drilling/shorten.py +36 -0
  111. snappy/drilling/subdivide.py +0 -5
  112. snappy/drilling/test.py +23 -0
  113. snappy/drilling/test_cases.py +126 -0
  114. snappy/drilling/tracing.py +9 -37
  115. snappy/exceptions.py +18 -5
  116. snappy/exterior_to_link/barycentric_geometry.py +2 -4
  117. snappy/exterior_to_link/main.py +8 -7
  118. snappy/exterior_to_link/mcomplex_with_link.py +2 -2
  119. snappy/exterior_to_link/rational_linear_algebra.py +1 -1
  120. snappy/exterior_to_link/rational_linear_algebra_wrapped.py +1 -1
  121. snappy/exterior_to_link/test.py +21 -33
  122. snappy/geometric_structure/__init__.py +212 -0
  123. snappy/geometric_structure/cusp_neighborhood/__init__.py +3 -0
  124. snappy/geometric_structure/cusp_neighborhood/complex_cusp_cross_section.py +697 -0
  125. snappy/geometric_structure/cusp_neighborhood/cusp_cross_section_base.py +484 -0
  126. snappy/geometric_structure/cusp_neighborhood/exceptions.py +42 -0
  127. snappy/geometric_structure/cusp_neighborhood/real_cusp_cross_section.py +298 -0
  128. snappy/geometric_structure/cusp_neighborhood/tiles_for_cusp_neighborhood.py +159 -0
  129. snappy/geometric_structure/cusp_neighborhood/vertices.py +32 -0
  130. snappy/geometric_structure/geodesic/__init__.py +0 -0
  131. snappy/geometric_structure/geodesic/add_core_curves.py +152 -0
  132. snappy/geometric_structure/geodesic/avoid_core_curves.py +369 -0
  133. snappy/geometric_structure/geodesic/canonical_keys.py +52 -0
  134. snappy/geometric_structure/geodesic/check_away_from_core_curve.py +60 -0
  135. snappy/geometric_structure/geodesic/constants.py +6 -0
  136. snappy/geometric_structure/geodesic/exceptions.py +22 -0
  137. snappy/{drilling → geometric_structure/geodesic}/fixed_points.py +34 -9
  138. snappy/{drilling/geodesic_info.py → geometric_structure/geodesic/geodesic_start_point_info.py} +139 -180
  139. snappy/geometric_structure/geodesic/graph_trace_helper.py +67 -0
  140. snappy/geometric_structure/geodesic/line.py +30 -0
  141. snappy/geometric_structure/geodesic/multiplicity.py +127 -0
  142. snappy/geometric_structure/geodesic/tiles_for_geodesic.py +101 -0
  143. snappy/geometric_structure/test.py +22 -0
  144. snappy/gui.py +23 -13
  145. snappy/horoviewer.py +7 -7
  146. snappy/hyperboloid/__init__.py +96 -31
  147. snappy/hyperboloid/distances.py +245 -0
  148. snappy/hyperboloid/horoball.py +19 -0
  149. snappy/hyperboloid/line.py +35 -0
  150. snappy/hyperboloid/point.py +9 -0
  151. snappy/hyperboloid/triangle.py +29 -0
  152. snappy/isometry_signature.py +382 -0
  153. snappy/len_spec/__init__.py +596 -0
  154. snappy/len_spec/geodesic_info.py +110 -0
  155. snappy/len_spec/geodesic_key_info_dict.py +117 -0
  156. snappy/len_spec/geodesic_piece.py +143 -0
  157. snappy/len_spec/geometric_structure.py +182 -0
  158. snappy/len_spec/geometry.py +80 -0
  159. snappy/len_spec/length_spectrum_geodesic_info.py +170 -0
  160. snappy/len_spec/spine.py +206 -0
  161. snappy/len_spec/test.py +24 -0
  162. snappy/len_spec/test_cases.py +69 -0
  163. snappy/len_spec/tile.py +275 -0
  164. snappy/len_spec/word.py +86 -0
  165. snappy/math_basics.py +39 -13
  166. snappy/matrix.py +52 -9
  167. snappy/number.py +12 -6
  168. snappy/numeric_output_checker.py +2 -3
  169. snappy/pari.py +8 -4
  170. snappy/phone_home.py +2 -1
  171. snappy/polyviewer.py +8 -8
  172. snappy/ptolemy/__init__.py +1 -1
  173. snappy/ptolemy/component.py +2 -2
  174. snappy/ptolemy/coordinates.py +25 -25
  175. snappy/ptolemy/findLoops.py +9 -9
  176. snappy/ptolemy/manifoldMethods.py +27 -29
  177. snappy/ptolemy/polynomial.py +50 -57
  178. snappy/ptolemy/processFileBase.py +60 -0
  179. snappy/ptolemy/ptolemyVariety.py +109 -41
  180. snappy/ptolemy/reginaWrapper.py +4 -4
  181. snappy/ptolemy/rur.py +1 -1
  182. snappy/ptolemy/solutionsToPrimeIdealGroebnerBasis.py +9 -9
  183. snappy/ptolemy/test.py +99 -54
  184. snappy/ptolemy/utilities.py +1 -1
  185. snappy/raytracing/__init__.py +64 -0
  186. snappy/raytracing/additional_horospheres.py +64 -0
  187. snappy/raytracing/additional_len_spec_choices.py +63 -0
  188. snappy/raytracing/cohomology_fractal.py +0 -3
  189. snappy/raytracing/eyeball.py +123 -0
  190. snappy/raytracing/finite_raytracing_data.py +17 -17
  191. snappy/raytracing/finite_viewer.py +15 -15
  192. snappy/raytracing/geodesic_tube_info.py +93 -63
  193. snappy/raytracing/geodesics.py +94 -64
  194. snappy/raytracing/geodesics_window.py +56 -34
  195. snappy/raytracing/gui_utilities.py +21 -6
  196. snappy/raytracing/hyperboloid_navigation.py +29 -4
  197. snappy/raytracing/hyperboloid_utilities.py +73 -73
  198. snappy/raytracing/ideal_raytracing_data.py +121 -91
  199. snappy/raytracing/inside_viewer.py +199 -66
  200. snappy/raytracing/pack.py +22 -0
  201. snappy/raytracing/raytracing_data.py +37 -25
  202. snappy/raytracing/raytracing_view.py +70 -65
  203. snappy/raytracing/shaders/Eye.png +0 -0
  204. snappy/raytracing/shaders/NonGeometric.png +0 -0
  205. snappy/raytracing/shaders/__init__.py +39 -3
  206. snappy/raytracing/shaders/fragment.glsl +451 -133
  207. snappy/raytracing/test.py +29 -0
  208. snappy/raytracing/tooltip.py +146 -0
  209. snappy/raytracing/upper_halfspace_utilities.py +42 -9
  210. snappy/sage_helper.py +67 -134
  211. snappy/settings.py +90 -77
  212. snappy/shell.py +2 -0
  213. snappy/snap/character_varieties.py +2 -2
  214. snappy/snap/find_field.py +4 -3
  215. snappy/snap/fundamental_polyhedron.py +2 -2
  216. snappy/snap/kernel_structures.py +5 -1
  217. snappy/snap/nsagetools.py +9 -8
  218. snappy/snap/peripheral/dual_cellulation.py +4 -3
  219. snappy/snap/peripheral/peripheral.py +2 -2
  220. snappy/snap/peripheral/surface.py +5 -5
  221. snappy/snap/peripheral/test.py +1 -1
  222. snappy/snap/polished_reps.py +8 -8
  223. snappy/snap/slice_obs_HKL.py +16 -14
  224. snappy/snap/t3mlite/arrow.py +3 -3
  225. snappy/snap/t3mlite/edge.py +3 -3
  226. snappy/snap/t3mlite/homology.py +2 -2
  227. snappy/snap/t3mlite/mcomplex.py +3 -3
  228. snappy/snap/t3mlite/simplex.py +12 -0
  229. snappy/snap/t3mlite/spun.py +18 -17
  230. snappy/snap/t3mlite/test_vs_regina.py +4 -4
  231. snappy/snap/test.py +37 -53
  232. snappy/snap/utilities.py +4 -5
  233. snappy/test.py +121 -138
  234. snappy/test_cases.py +263 -0
  235. snappy/testing.py +131 -0
  236. snappy/tiling/__init__.py +2 -0
  237. snappy/tiling/canonical_key_dict.py +59 -0
  238. snappy/tiling/dict_based_set.py +79 -0
  239. snappy/tiling/floor.py +49 -0
  240. snappy/tiling/hyperboloid_dict.py +54 -0
  241. snappy/tiling/iter_utils.py +78 -0
  242. snappy/tiling/lifted_tetrahedron.py +22 -0
  243. snappy/tiling/lifted_tetrahedron_set.py +54 -0
  244. snappy/tiling/real_hash_dict.py +164 -0
  245. snappy/tiling/test.py +23 -0
  246. snappy/tiling/tile.py +215 -0
  247. snappy/tiling/triangle.py +33 -0
  248. snappy/tkterminal.py +113 -84
  249. snappy/twister/main.py +1 -7
  250. snappy/twister/twister_core.cpython-310-darwin.so +0 -0
  251. snappy/upper_halfspace/__init__.py +78 -17
  252. snappy/verify/__init__.py +3 -7
  253. snappy/verify/{verifyCanonical.py → canonical.py} +78 -70
  254. snappy/verify/complex_volume/adjust_torsion.py +1 -2
  255. snappy/verify/complex_volume/closed.py +13 -13
  256. snappy/verify/complex_volume/cusped.py +6 -6
  257. snappy/verify/complex_volume/extended_bloch.py +5 -8
  258. snappy/verify/{cuspTranslations.py → cusp_translations.py} +1 -1
  259. snappy/verify/edge_equations.py +80 -0
  260. snappy/verify/exceptions.py +0 -55
  261. snappy/verify/{verifyHyperbolicity.py → hyperbolicity.py} +3 -3
  262. snappy/verify/interval_newton_shapes_engine.py +7 -5
  263. snappy/verify/interval_tree.py +5 -5
  264. snappy/verify/krawczyk_shapes_engine.py +17 -18
  265. snappy/verify/maximal_cusp_area_matrix/__init__.py +7 -74
  266. snappy/verify/maximal_cusp_area_matrix/cusp_tiling_engine.py +3 -4
  267. snappy/verify/maximal_cusp_area_matrix/cusp_translate_engine.py +1 -1
  268. snappy/verify/{realAlgebra.py → real_algebra.py} +1 -1
  269. snappy/verify/shapes.py +5 -3
  270. snappy/verify/short_slopes.py +39 -41
  271. snappy/verify/{squareExtensions.py → square_extensions.py} +14 -11
  272. snappy/verify/test.py +57 -60
  273. snappy/verify/upper_halfspace/extended_matrix.py +1 -1
  274. snappy/verify/upper_halfspace/finite_point.py +3 -4
  275. snappy/verify/upper_halfspace/ideal_point.py +9 -9
  276. snappy/verify/volume.py +2 -2
  277. snappy/version.py +2 -2
  278. {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/METADATA +26 -11
  279. snappy-3.2.dist-info/RECORD +503 -0
  280. {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/WHEEL +1 -1
  281. {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/top_level.txt +6 -1
  282. snappy/__pycache__/__init__.cpython-310.pyc +0 -0
  283. snappy/__pycache__/browser.cpython-310.pyc +0 -0
  284. snappy/__pycache__/cache.cpython-310.pyc +0 -0
  285. snappy/__pycache__/database.cpython-310.pyc +0 -0
  286. snappy/__pycache__/db_utilities.cpython-310.pyc +0 -0
  287. snappy/__pycache__/decorated_isosig.cpython-310.pyc +0 -0
  288. snappy/__pycache__/exceptions.cpython-310.pyc +0 -0
  289. snappy/__pycache__/export_stl.cpython-310.pyc +0 -0
  290. snappy/__pycache__/filedialog.cpython-310.pyc +0 -0
  291. snappy/__pycache__/gui.cpython-310.pyc +0 -0
  292. snappy/__pycache__/horoviewer.cpython-310.pyc +0 -0
  293. snappy/__pycache__/infowindow.cpython-310.pyc +0 -0
  294. snappy/__pycache__/math_basics.cpython-310.pyc +0 -0
  295. snappy/__pycache__/matrix.cpython-310.pyc +0 -0
  296. snappy/__pycache__/number.cpython-310.pyc +0 -0
  297. snappy/__pycache__/numeric_output_checker.cpython-310.pyc +0 -0
  298. snappy/__pycache__/pari.cpython-310.pyc +0 -0
  299. snappy/__pycache__/polyviewer.cpython-310.pyc +0 -0
  300. snappy/__pycache__/sage_helper.cpython-310.pyc +0 -0
  301. snappy/__pycache__/version.cpython-310.pyc +0 -0
  302. snappy/doc/_sources/verify_canon.rst.txt +0 -90
  303. snappy/doc/_static/js/html5shiv-printshiv.min.js +0 -4
  304. snappy/doc/_static/js/html5shiv.min.js +0 -4
  305. snappy/doc/verify_canon.html +0 -304
  306. snappy/drilling/__pycache__/__init__.cpython-310.pyc +0 -0
  307. snappy/drilling/__pycache__/constants.cpython-310.pyc +0 -0
  308. snappy/drilling/__pycache__/crush.cpython-310.pyc +0 -0
  309. snappy/drilling/__pycache__/cusps.cpython-310.pyc +0 -0
  310. snappy/drilling/__pycache__/debug.cpython-310.pyc +0 -0
  311. snappy/drilling/__pycache__/epsilons.cpython-310.pyc +0 -0
  312. snappy/drilling/__pycache__/exceptions.cpython-310.pyc +0 -0
  313. snappy/drilling/__pycache__/fixed_points.cpython-310.pyc +0 -0
  314. snappy/drilling/__pycache__/geodesic_info.cpython-310.pyc +0 -0
  315. snappy/drilling/__pycache__/geodesic_tube.cpython-310.pyc +0 -0
  316. snappy/drilling/__pycache__/geometric_structure.cpython-310.pyc +0 -0
  317. snappy/drilling/__pycache__/line.cpython-310.pyc +0 -0
  318. snappy/drilling/__pycache__/moves.cpython-310.pyc +0 -0
  319. snappy/drilling/__pycache__/peripheral_curves.cpython-310.pyc +0 -0
  320. snappy/drilling/__pycache__/perturb.cpython-310.pyc +0 -0
  321. snappy/drilling/__pycache__/quotient_space.cpython-310.pyc +0 -0
  322. snappy/drilling/__pycache__/spatial_dict.cpython-310.pyc +0 -0
  323. snappy/drilling/__pycache__/subdivide.cpython-310.pyc +0 -0
  324. snappy/drilling/__pycache__/tracing.cpython-310.pyc +0 -0
  325. snappy/drilling/geodesic_tube.py +0 -441
  326. snappy/drilling/geometric_structure.py +0 -366
  327. snappy/drilling/line.py +0 -122
  328. snappy/drilling/quotient_space.py +0 -94
  329. snappy/drilling/spatial_dict.py +0 -128
  330. snappy/exterior_to_link/__pycache__/__init__.cpython-310.pyc +0 -0
  331. snappy/exterior_to_link/__pycache__/barycentric_geometry.cpython-310.pyc +0 -0
  332. snappy/exterior_to_link/__pycache__/exceptions.cpython-310.pyc +0 -0
  333. snappy/exterior_to_link/__pycache__/hyp_utils.cpython-310.pyc +0 -0
  334. snappy/exterior_to_link/__pycache__/link_projection.cpython-310.pyc +0 -0
  335. snappy/exterior_to_link/__pycache__/main.cpython-310.pyc +0 -0
  336. snappy/exterior_to_link/__pycache__/mcomplex_with_expansion.cpython-310.pyc +0 -0
  337. snappy/exterior_to_link/__pycache__/mcomplex_with_link.cpython-310.pyc +0 -0
  338. snappy/exterior_to_link/__pycache__/mcomplex_with_memory.cpython-310.pyc +0 -0
  339. snappy/exterior_to_link/__pycache__/pl_utils.cpython-310.pyc +0 -0
  340. snappy/exterior_to_link/__pycache__/put_in_S3.cpython-310.pyc +0 -0
  341. snappy/exterior_to_link/__pycache__/rational_linear_algebra.cpython-310.pyc +0 -0
  342. snappy/exterior_to_link/__pycache__/simplify_to_base_tri.cpython-310.pyc +0 -0
  343. snappy/exterior_to_link/__pycache__/stored_moves.cpython-310.pyc +0 -0
  344. snappy/hyperboloid/__pycache__/__init__.cpython-310.pyc +0 -0
  345. snappy/manifolds/__pycache__/__init__.cpython-310.pyc +0 -0
  346. snappy/ptolemy/__pycache__/__init__.cpython-310.pyc +0 -0
  347. snappy/ptolemy/__pycache__/component.cpython-310.pyc +0 -0
  348. snappy/ptolemy/__pycache__/coordinates.cpython-310.pyc +0 -0
  349. snappy/ptolemy/__pycache__/fieldExtensions.cpython-310.pyc +0 -0
  350. snappy/ptolemy/__pycache__/findLoops.cpython-310.pyc +0 -0
  351. snappy/ptolemy/__pycache__/homology.cpython-310.pyc +0 -0
  352. snappy/ptolemy/__pycache__/manifoldMethods.cpython-310.pyc +0 -0
  353. snappy/ptolemy/__pycache__/matrix.cpython-310.pyc +0 -0
  354. snappy/ptolemy/__pycache__/numericalSolutionsToGroebnerBasis.cpython-310.pyc +0 -0
  355. snappy/ptolemy/__pycache__/polynomial.cpython-310.pyc +0 -0
  356. snappy/ptolemy/__pycache__/processComponents.cpython-310.pyc +0 -0
  357. snappy/ptolemy/__pycache__/processFileBase.cpython-310.pyc +0 -0
  358. snappy/ptolemy/__pycache__/processFileDispatch.cpython-310.pyc +0 -0
  359. snappy/ptolemy/__pycache__/processMagmaFile.cpython-310.pyc +0 -0
  360. snappy/ptolemy/__pycache__/processRurFile.cpython-310.pyc +0 -0
  361. snappy/ptolemy/__pycache__/ptolemyGeneralizedObstructionClass.cpython-310.pyc +0 -0
  362. snappy/ptolemy/__pycache__/ptolemyObstructionClass.cpython-310.pyc +0 -0
  363. snappy/ptolemy/__pycache__/ptolemyVariety.cpython-310.pyc +0 -0
  364. snappy/ptolemy/__pycache__/ptolemyVarietyPrimeIdealGroebnerBasis.cpython-310.pyc +0 -0
  365. snappy/ptolemy/__pycache__/rur.cpython-310.pyc +0 -0
  366. snappy/ptolemy/__pycache__/solutionsToPrimeIdealGroebnerBasis.cpython-310.pyc +0 -0
  367. snappy/ptolemy/__pycache__/utilities.cpython-310.pyc +0 -0
  368. snappy/raytracing/__pycache__/__init__.cpython-310.pyc +0 -0
  369. snappy/raytracing/__pycache__/finite_raytracing_data.cpython-310.pyc +0 -0
  370. snappy/raytracing/__pycache__/gui_utilities.cpython-310.pyc +0 -0
  371. snappy/raytracing/__pycache__/hyperboloid_navigation.cpython-310.pyc +0 -0
  372. snappy/raytracing/__pycache__/hyperboloid_utilities.cpython-310.pyc +0 -0
  373. snappy/raytracing/__pycache__/ideal_raytracing_data.cpython-310.pyc +0 -0
  374. snappy/raytracing/__pycache__/inside_viewer.cpython-310.pyc +0 -0
  375. snappy/raytracing/__pycache__/raytracing_data.cpython-310.pyc +0 -0
  376. snappy/raytracing/__pycache__/raytracing_view.cpython-310.pyc +0 -0
  377. snappy/raytracing/__pycache__/upper_halfspace_utilities.cpython-310.pyc +0 -0
  378. snappy/raytracing/__pycache__/view_scale_controller.cpython-310.pyc +0 -0
  379. snappy/raytracing/zoom_slider/__pycache__/__init__.cpython-310.pyc +0 -0
  380. snappy/snap/__pycache__/__init__.cpython-310.pyc +0 -0
  381. snappy/snap/__pycache__/character_varieties.cpython-310.pyc +0 -0
  382. snappy/snap/__pycache__/fundamental_polyhedron.cpython-310.pyc +0 -0
  383. snappy/snap/__pycache__/interval_reps.cpython-310.pyc +0 -0
  384. snappy/snap/__pycache__/kernel_structures.cpython-310.pyc +0 -0
  385. snappy/snap/__pycache__/mcomplex_base.cpython-310.pyc +0 -0
  386. snappy/snap/__pycache__/nsagetools.cpython-310.pyc +0 -0
  387. snappy/snap/__pycache__/polished_reps.cpython-310.pyc +0 -0
  388. snappy/snap/__pycache__/shapes.cpython-310.pyc +0 -0
  389. snappy/snap/__pycache__/slice_obs_HKL.cpython-310.pyc +0 -0
  390. snappy/snap/__pycache__/utilities.cpython-310.pyc +0 -0
  391. snappy/snap/peripheral/__pycache__/__init__.cpython-310.pyc +0 -0
  392. snappy/snap/peripheral/__pycache__/dual_cellulation.cpython-310.pyc +0 -0
  393. snappy/snap/peripheral/__pycache__/link.cpython-310.pyc +0 -0
  394. snappy/snap/peripheral/__pycache__/peripheral.cpython-310.pyc +0 -0
  395. snappy/snap/peripheral/__pycache__/surface.cpython-310.pyc +0 -0
  396. snappy/snap/t3mlite/__pycache__/__init__.cpython-310.pyc +0 -0
  397. snappy/snap/t3mlite/__pycache__/arrow.cpython-310.pyc +0 -0
  398. snappy/snap/t3mlite/__pycache__/corner.cpython-310.pyc +0 -0
  399. snappy/snap/t3mlite/__pycache__/edge.cpython-310.pyc +0 -0
  400. snappy/snap/t3mlite/__pycache__/face.cpython-310.pyc +0 -0
  401. snappy/snap/t3mlite/__pycache__/files.cpython-310.pyc +0 -0
  402. snappy/snap/t3mlite/__pycache__/homology.cpython-310.pyc +0 -0
  403. snappy/snap/t3mlite/__pycache__/linalg.cpython-310.pyc +0 -0
  404. snappy/snap/t3mlite/__pycache__/mcomplex.cpython-310.pyc +0 -0
  405. snappy/snap/t3mlite/__pycache__/perm4.cpython-310.pyc +0 -0
  406. snappy/snap/t3mlite/__pycache__/simplex.cpython-310.pyc +0 -0
  407. snappy/snap/t3mlite/__pycache__/spun.cpython-310.pyc +0 -0
  408. snappy/snap/t3mlite/__pycache__/surface.cpython-310.pyc +0 -0
  409. snappy/snap/t3mlite/__pycache__/tetrahedron.cpython-310.pyc +0 -0
  410. snappy/snap/t3mlite/__pycache__/vertex.cpython-310.pyc +0 -0
  411. snappy/togl/__init__.py +0 -3
  412. snappy/togl/darwin-tk8.6/Togl2.1/LICENSE +0 -28
  413. snappy/togl/darwin-tk8.6/Togl2.1/libTogl2.1.dylib +0 -0
  414. snappy/togl/darwin-tk8.6/Togl2.1/pkgIndex.tcl +0 -5
  415. snappy/togl/darwin-tk8.7/Togl2.1/LICENSE +0 -28
  416. snappy/togl/darwin-tk8.7/Togl2.1/libTogl2.1.dylib +0 -0
  417. snappy/togl/darwin-tk8.7/Togl2.1/pkgIndex.tcl +0 -5
  418. snappy/togl/linux2-x86_64-tk8.6/Togl2.1/LICENSE +0 -28
  419. snappy/togl/linux2-x86_64-tk8.6/Togl2.1/libTogl2.1.so +0 -0
  420. snappy/togl/linux2-x86_64-tk8.6/Togl2.1/pkgIndex.tcl +0 -5
  421. snappy/togl/win32VC-tk8.6/Togl2.1/LICENSE +0 -28
  422. snappy/togl/win32VC-tk8.6/Togl2.1/Togl21.dll +0 -0
  423. snappy/togl/win32VC-tk8.6/Togl2.1/Togl21.lib +0 -0
  424. snappy/togl/win32VC-tk8.6/Togl2.1/pkgIndex.tcl +0 -6
  425. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/LICENSE +0 -28
  426. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/Togl21.dll +0 -0
  427. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/Togl21.lib +0 -0
  428. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/pkgIndex.tcl +0 -6
  429. snappy/twister/__pycache__/__init__.cpython-310.pyc +0 -0
  430. snappy/twister/__pycache__/main.cpython-310.pyc +0 -0
  431. snappy/upper_halfspace/__pycache__/__init__.cpython-310.pyc +0 -0
  432. snappy/upper_halfspace/__pycache__/ideal_point.cpython-310.pyc +0 -0
  433. snappy/verify/__pycache__/__init__.cpython-310.pyc +0 -0
  434. snappy/verify/__pycache__/cuspCrossSection.cpython-310.pyc +0 -0
  435. snappy/verify/__pycache__/cuspTranslations.cpython-310.pyc +0 -0
  436. snappy/verify/__pycache__/cusp_areas.cpython-310.pyc +0 -0
  437. snappy/verify/__pycache__/cusp_shapes.cpython-310.pyc +0 -0
  438. snappy/verify/__pycache__/exceptions.cpython-310.pyc +0 -0
  439. snappy/verify/__pycache__/interval_newton_shapes_engine.cpython-310.pyc +0 -0
  440. snappy/verify/__pycache__/interval_tree.cpython-310.pyc +0 -0
  441. snappy/verify/__pycache__/krawczyk_shapes_engine.cpython-310.pyc +0 -0
  442. snappy/verify/__pycache__/realAlgebra.cpython-310.pyc +0 -0
  443. snappy/verify/__pycache__/shapes.cpython-310.pyc +0 -0
  444. snappy/verify/__pycache__/short_slopes.cpython-310.pyc +0 -0
  445. snappy/verify/__pycache__/squareExtensions.cpython-310.pyc +0 -0
  446. snappy/verify/__pycache__/verifyCanonical.cpython-310.pyc +0 -0
  447. snappy/verify/__pycache__/verifyHyperbolicity.cpython-310.pyc +0 -0
  448. snappy/verify/__pycache__/volume.cpython-310.pyc +0 -0
  449. snappy/verify/complex_volume/__pycache__/__init__.cpython-310.pyc +0 -0
  450. snappy/verify/complex_volume/__pycache__/adjust_torsion.cpython-310.pyc +0 -0
  451. snappy/verify/complex_volume/__pycache__/closed.cpython-310.pyc +0 -0
  452. snappy/verify/complex_volume/__pycache__/compute_ptolemys.cpython-310.pyc +0 -0
  453. snappy/verify/complex_volume/__pycache__/cusped.cpython-310.pyc +0 -0
  454. snappy/verify/complex_volume/__pycache__/extended_bloch.cpython-310.pyc +0 -0
  455. snappy/verify/cuspCrossSection.py +0 -1422
  456. snappy/verify/maximal_cusp_area_matrix/__pycache__/__init__.cpython-310.pyc +0 -0
  457. snappy/verify/maximal_cusp_area_matrix/__pycache__/cusp_tiling_engine.cpython-310.pyc +0 -0
  458. snappy/verify/maximal_cusp_area_matrix/__pycache__/cusp_translate_engine.cpython-310.pyc +0 -0
  459. snappy/verify/upper_halfspace/__pycache__/__init__.cpython-310.pyc +0 -0
  460. snappy/verify/upper_halfspace/__pycache__/extended_matrix.cpython-310.pyc +0 -0
  461. snappy/verify/upper_halfspace/__pycache__/finite_point.cpython-310.pyc +0 -0
  462. snappy/verify/upper_halfspace/__pycache__/ideal_point.cpython-310.pyc +0 -0
  463. snappy-3.1.1.dist-info/RECORD +0 -585
  464. {snappy-3.1.1.dist-info → snappy-3.2.dist-info}/entry_points.txt +0 -0
@@ -1,12 +1,12 @@
1
- from snappy.snap import t3mlite as t3m
2
- from snappy import Triangulation
1
+ from ..snap import t3mlite as t3m
2
+ from ..snap.t3mlite import simplex
3
+ from .. import Triangulation
3
4
 
4
- from snappy.SnapPy import matrix, vector
5
-
6
- from snappy.snap.mcomplex_base import *
7
-
8
- from snappy.verify.cuspCrossSection import *
5
+ from ..matrix import make_matrix, make_vector
9
6
 
7
+ from ..snap.mcomplex_base import *
8
+ from ..geometric_structure.cusp_neighborhood.complex_cusp_cross_section import ComplexCuspCrossSection
9
+ from ..geometric_structure import add_r13_planes_to_tetrahedra
10
10
  from ..upper_halfspace import pgl2c_to_o13, sl2c_inverse
11
11
  from ..upper_halfspace.ideal_point import ideal_point_to_r13
12
12
 
@@ -15,8 +15,6 @@ from .upper_halfspace_utilities import *
15
15
 
16
16
  from .raytracing_data import *
17
17
 
18
- from math import sqrt
19
-
20
18
  __all__ = ['IdealRaytracingData']
21
19
 
22
20
 
@@ -25,7 +23,6 @@ class IdealRaytracingData(RaytracingData):
25
23
  Given a SnapPy manifold, computes data for the shader fragment.glsl
26
24
  to raytrace the inside view::
27
25
 
28
- >>> from snappy import *
29
26
  >>> data = IdealRaytracingData.from_manifold(Manifold("m004"))
30
27
  >>> data = IdealRaytracingData.from_manifold(ManifoldHP("m004"))
31
28
 
@@ -43,19 +40,19 @@ class IdealRaytracingData(RaytracingData):
43
40
  The shader needs to know in what tetrahedron and where in the tetrahedron
44
41
  the camera is. This is encoded as pair matrix and tetrahedron index::
45
42
 
46
- >>> view_state = (matrix([[ 1.0, 0.0, 0.0, 0.0],
47
- ... [ 0.0, 1.0, 0.0, 0.0],
48
- ... [ 0.0, 0.0, 0.0,-1.0],
49
- ... [ 0.0, 0.0, 1.0, 0.0]]), 0, 0.0)
43
+ >>> view_state = (make_matrix([[ 1.0, 0.0, 0.0, 0.0],
44
+ ... [ 0.0, 1.0, 0.0, 0.0],
45
+ ... [ 0.0, 0.0, 0.0,-1.0],
46
+ ... [ 0.0, 0.0, 1.0, 0.0]]), 0, 0.0)
50
47
 
51
48
  To move/rotate the camera which might potentially put the camera
52
49
  into a different tetrahedron, the new pair can be computed as
53
50
  follows::
54
51
 
55
- >>> m = matrix([[ 3.0 , 0.0 , 2.82, 0.0 ],
56
- ... [ 0.0 , 1.0 , 0.0 , 0.0 ],
57
- ... [ 2.82, 0.0 , 3.0 , 0.0 ],
58
- ... [ 0.0 , 0.0 , 0.0 , 1.0 ]])
52
+ >>> m = make_matrix([[ 3.0 , 0.0 , 2.82, 0.0 ],
53
+ ... [ 0.0 , 1.0 , 0.0 , 0.0 ],
54
+ ... [ 2.82, 0.0 , 3.0 , 0.0 ],
55
+ ... [ 0.0 , 0.0 , 0.0 , 1.0 ]])
59
56
  >>> view_state = data.update_view_state(view_state, m)
60
57
  >>> view_state # doctest: +NUMERIC6
61
58
  ([ 1.08997684 1e-16 0.43364676 1e-16 ]
@@ -70,8 +67,7 @@ class IdealRaytracingData(RaytracingData):
70
67
  areas=None, insphere_scale=0.05, weights=None):
71
68
 
72
69
  if manifold.solution_type() != 'all tetrahedra positively oriented':
73
- return NonGeometricRaytracingData(
74
- t3m.Mcomplex(manifold))
70
+ return NonGeometricRaytracingData.from_manifold(manifold)
75
71
 
76
72
  num_cusps = manifold.num_cusps()
77
73
 
@@ -107,15 +103,20 @@ class IdealRaytracingData(RaytracingData):
107
103
  r.peripheral_gluing_equations = snappy_trig.gluing_equations()[
108
104
  snappy_trig.num_tetrahedra():]
109
105
 
106
+ r.log_shapes = [
107
+ tet.ShapeParameters[e].log()
108
+ for tet in c.mcomplex.Tetrahedra
109
+ for e in [ t3m.E01, t3m.E02, t3m.E03 ] ]
110
+
110
111
  r._add_complex_vertices()
111
112
  r._add_R13_vertices()
112
113
  r._add_O13_matrices_to_faces()
113
- r._add_R13_planes_to_faces()
114
+ add_r13_planes_to_tetrahedra(c.mcomplex)
114
115
  r._add_R13_horosphere_scales_to_vertices()
115
116
  r._add_cusp_to_tet_matrices()
116
117
  r._add_margulis_tube_ends()
117
118
  r._add_inspheres()
118
- r._add_log_holonomies()
119
+ r._add_to_standard_torus_matrices()
119
120
 
120
121
  r._add_cusp_triangle_vertex_positions()
121
122
 
@@ -123,7 +124,7 @@ class IdealRaytracingData(RaytracingData):
123
124
  return r
124
125
 
125
126
  def __init__(self, mcomplex, snappy_manifold):
126
- super(IdealRaytracingData, self).__init__(mcomplex)
127
+ super().__init__(mcomplex)
127
128
  self.snappy_manifold = snappy_manifold
128
129
 
129
130
  def _add_O13_matrices_to_faces(self):
@@ -134,12 +135,10 @@ class IdealRaytracingData(RaytracingData):
134
135
 
135
136
  def _add_complex_vertices(self):
136
137
  for tet in self.mcomplex.Tetrahedra:
137
- tet.complex_vertices = {
138
- v : vert
139
- for v, vert in zip(
138
+ tet.complex_vertices = dict(zip(
140
139
  t3m.ZeroSubsimplices,
141
140
  symmetric_vertices_for_tetrahedron(
142
- tet.ShapeParameters[t3m.E01])) }
141
+ tet.ShapeParameters[t3m.E01])))
143
142
 
144
143
  def _add_R13_vertices(self):
145
144
  for tet in self.mcomplex.Tetrahedra:
@@ -147,19 +146,9 @@ class IdealRaytracingData(RaytracingData):
147
146
  V: ideal_point_to_r13(z, self.RF)
148
147
  for V, z in tet.complex_vertices.items() }
149
148
  tet.R13_vertex_products = {
150
- v0 | v1 : r13_dot(pt0, pt1)
151
- for v0, pt0 in tet.R13_vertices.items()
152
- for v1, pt1 in tet.R13_vertices.items()
153
- if v0 != v1 }
154
-
155
- def _add_R13_planes_to_faces(self):
156
- for tet in self.mcomplex.Tetrahedra:
157
- planes = make_tet_planes(
158
- [ tet.R13_vertices[v]
159
- for v in t3m.ZeroSubsimplices])
160
- tet.R13_planes = {
161
- F : plane
162
- for F, plane in zip(t3m.TwoSubsimplices, planes) }
149
+ e: r13_dot(tet.R13_vertices[simplex.Head[e]],
150
+ tet.R13_vertices[simplex.Tail[e]])
151
+ for e in simplex.OneSubsimplices }
163
152
 
164
153
  def _compute_R13_horosphere_scale_for_vertex(self, tet, V0):
165
154
  vertex = tet.Class[V0]
@@ -215,48 +204,75 @@ class IdealRaytracingData(RaytracingData):
215
204
 
216
205
  tet.cosh_sqr_inradius = tmp.cosh() ** 2
217
206
 
218
- def _add_log_holonomies_to_cusp(self, cusp, shapes):
207
+ def _add_to_standard_torus_matrix(self, cusp):
219
208
  i = cusp.Index
220
209
 
221
210
  if cusp.is_complete:
222
211
  m_param, l_param = cusp.Translations
223
212
  else:
224
- m_param, l_param = [
225
- sum(shape * expo
226
- for shape, expo
227
- in zip(shapes, self.peripheral_gluing_equations[2 * i + j]))
228
- for j in range(2) ]
213
+ m_param, l_param = (
214
+ sum(log_shape * expo
215
+ for log_shape, expo
216
+ in zip(self.log_shapes, self.peripheral_gluing_equations[2 * i + j]))
217
+ for j in range(2) )
229
218
 
230
219
  a, c = m_param.real(), m_param.imag()
231
220
  b, d = l_param.real(), l_param.imag()
232
221
 
233
222
  det = a*d - b * c
234
- cusp.mat_log = matrix([[d,-b], [-c, a]]) / det
223
+ cusp.to_standard_torus_matrix = make_matrix([[d,-b], [-c, a]]) / det
235
224
 
236
225
  if cusp.is_complete:
237
226
  cusp.margulisTubeRadiusParam = 0.0
238
227
  else:
239
- slope = 2 * self.areas[i] / abs(det)
240
-
241
- x = (slope ** 2 / (slope ** 2 + 1)).sqrt()
242
- y = (1 / (slope ** 2 + 1)).sqrt()
243
- rSqr = 1 + (x ** 2 + (1 - y) ** 2) / (2 * y)
244
- cusp.margulisTubeRadiusParam = 0.25 * (1.0 + rSqr)
245
-
246
- def _add_log_holonomies(self):
247
- shapes = [
248
- tet.ShapeParameters[e].log()
249
- for tet in self.mcomplex.Tetrahedra
250
- for e in [ t3m.E01, t3m.E02, t3m.E03 ] ]
251
-
252
- for cusp, cusp_info in zip(self.mcomplex.Vertices,
253
- self.snappy_manifold.cusp_info()):
254
- self._add_log_holonomies_to_cusp(cusp, shapes)
228
+ area_ratio = self.areas[i] / abs(det)
229
+
230
+ # Imagine a cone above 0 in the upper half space model with slope s
231
+ # that is, it intersects the plane at Euclidean height 1 in a circle
232
+ # of Euclidean radius s.
233
+ #
234
+ # Let C be the boundary of the upper half space without infinity.
235
+ # Consider a small rectangle with lengths dtheta and dr in C using
236
+ # polar coordinates.
237
+ # The intersection of extrusion of this rectangle with the
238
+ # boundary of the cone is spanned by two tangent vectors with
239
+ # Euclidean lengths
240
+ #
241
+ # r * dtheta and sqrt(1 + 1/s^2) * dr.
242
+ #
243
+ # The corresponding hyperbolic lengths are
244
+ #
245
+ # r / (r/s) * dtheta and sqrt(1 + 1/s^2) / (r/s) * dr
246
+ #
247
+ # Thus, the area of the intersection is
248
+ #
249
+ # dA = s * sqrt(1 + s^2) * dtheta * dr/r
250
+ #
251
+ # If m and l are the log lifts of the the holonomies of the
252
+ # meridian and longitudes in C^*, then we get for the area
253
+ #
254
+ # A = s * sqrt(1 + s^2) * (m wedge l)
255
+ #
256
+ # Recall that s = sinh R where R is the hyperbolic radius of the
257
+ # tube. The tube parameter we need to compute the intersection with
258
+ # a geodesic (in the shader) is given by T = cosh(R)^2/2.
259
+ #
260
+ # Letting A_0 = A / (m wedge l), we have
261
+ # A_0 = sinh R * cosh R = 1/2 sinh(2 * R)
262
+ # R = 1/2 arcsinh(A_0)
263
+ # T = 1/4 (1 + sqrt(1 + 4 * A_0^2))
264
+
265
+ a = 1 + 4 * area_ratio ** 2
266
+ cusp.margulisTubeRadiusParam = (1 + a.sqrt()) / 4
267
+
268
+ def _add_to_standard_torus_matrices(self):
269
+ for cusp in self.mcomplex.Vertices:
270
+ self._add_to_standard_torus_matrix(cusp)
255
271
 
256
272
  def get_uniform_bindings(self):
257
273
  # _check_consistency(self.mcomplex)
258
274
 
259
- d = super(IdealRaytracingData, self).get_uniform_bindings()
275
+ d = super().get_uniform_bindings()
260
276
 
261
277
  orientations = [
262
278
  +1 if tet.ShapeParameters[t3m.E01].imag() > 0 else -1
@@ -309,8 +325,8 @@ class IdealRaytracingData(RaytracingData):
309
325
  for V in t3m.ZeroSubsimplices
310
326
  ]
311
327
 
312
- mat_logs = [
313
- tet.Class[V].mat_log
328
+ toStandardTorusMatrices = [
329
+ tet.Class[V].to_standard_torus_matrix
314
330
  for tet in self.mcomplex.Tetrahedra
315
331
  for V in t3m.ZeroSubsimplices ]
316
332
 
@@ -331,23 +347,24 @@ class IdealRaytracingData(RaytracingData):
331
347
  d['cuspTranslations'] = ('mat2[]', cusp_translations)
332
348
  d['logAdjustments'] = ('vec2[]', logAdjustments)
333
349
  d['cuspTriangleVertexPositions'] = ('mat3x2[]', cuspTriangleVertexPositions)
334
- d['matLogs'] = ('mat2[]', mat_logs)
350
+ d['toStandardTorusMatrices'] = ('mat2[]', toStandardTorusMatrices)
335
351
  d['insphereRadiusParams'] = ('float[]', insphereRadiusParams)
336
352
  d['isNonGeometric'] = ('bool', isNonGeometric)
337
353
  d['nonGeometricTexture'] = ('int', 0)
354
+ d['eyeTexture'] = ('int', 1)
338
355
 
339
356
  return d
340
357
 
341
358
  def get_compile_time_constants(self):
342
- d = super(IdealRaytracingData, self).get_compile_time_constants()
359
+ d = super().get_compile_time_constants()
343
360
  d[b'##finiteTrig##'] = 0
344
361
  return d
345
362
 
346
363
  def initial_view_state(self):
347
- boost = matrix([[1.0,0.0,0.0,0.0],
348
- [0.0,1.0,0.0,0.0],
349
- [0.0,0.0,1.0,0.0],
350
- [0.0,0.0,0.0,1.0]])
364
+ boost = make_matrix([[1.0,0.0,0.0,0.0],
365
+ [0.0,1.0,0.0,0.0],
366
+ [0.0,0.0,1.0,0.0],
367
+ [0.0,0.0,0.0,1.0]])
351
368
  tet_num = 0
352
369
  weight = 0.0
353
370
  return (boost, tet_num, weight)
@@ -366,15 +383,28 @@ class IdealRaytracingData(RaytracingData):
366
383
  0.0)),
367
384
  _cusp_view_scale(tet, subsimplex, area))
368
385
 
369
-
370
386
  class NonGeometricRaytracingData(McomplexEngine):
371
- def __init__(self, mcomplex):
372
- super(NonGeometricRaytracingData, self).__init__(mcomplex)
387
+ @staticmethod
388
+ def from_manifold(manifold):
389
+ mcomplex = t3m.Mcomplex(manifold)
390
+ r = NonGeometricRaytracingData(mcomplex, manifold)
391
+ z = manifold.tetrahedra_shapes('rect')[0]
392
+ r.RF = z.real().parent()
393
+ return r
394
+
395
+ def __init__(self, mcomplex, manifold):
396
+ super().__init__(mcomplex)
397
+ self.manifold = manifold
398
+
399
+ def is_valid(self):
400
+ return False
373
401
 
374
402
  def get_compile_time_constants(self):
375
403
  return {
376
404
  b'##num_tets##' : len(self.mcomplex.Tetrahedra),
377
- b'##num_cusps##' : len(self.mcomplex.Vertices)
405
+ b'##num_cusps##' : len(self.mcomplex.Vertices),
406
+ b'##num_edges##' : len(self.mcomplex.Edges),
407
+ b'##finiteTrig##' : 0,
378
408
  }
379
409
 
380
410
  def get_uniform_bindings(self):
@@ -385,24 +415,23 @@ class NonGeometricRaytracingData(McomplexEngine):
385
415
  ('int', 0)}
386
416
 
387
417
  def initial_view_state(self):
388
- boost = matrix([[1.0,0.0,0.0,0.0],
389
- [0.0,1.0,0.0,0.0],
390
- [0.0,0.0,1.0,0.0],
391
- [0.0,0.0,0.0,1.0]])
418
+ boost = make_matrix([[1.0,0.0,0.0,0.0],
419
+ [0.0,1.0,0.0,0.0],
420
+ [0.0,0.0,1.0,0.0],
421
+ [0.0,0.0,0.0,1.0]])
392
422
  tet_num = 0
393
423
  weight = 0.0
394
424
  return (boost, tet_num, weight)
395
425
 
396
426
  def update_view_state(self, boost_tet_num_and_weight,
397
- m=matrix([[1.0, 0.0, 0.0, 0.0],
398
- [0.0, 1.0, 0.0, 0.0],
399
- [0.0, 0.0, 1.0, 0.0],
400
- [0.0, 0.0, 0.0, 1.0]])):
427
+ m=make_matrix([[1.0, 0.0, 0.0, 0.0],
428
+ [0.0, 1.0, 0.0, 0.0],
429
+ [0.0, 0.0, 1.0, 0.0],
430
+ [0.0, 0.0, 0.0, 1.0]])):
401
431
  boost, tet_num, weight = boost_tet_num_and_weight
402
432
  boost = boost * m
403
433
  return boost, tet_num, weight
404
434
 
405
-
406
435
  def _pgl2_matrix_for_face(tet, F):
407
436
  gluing = tet.Gluing[F]
408
437
  other_tet = tet.Neighbor[F]
@@ -444,7 +473,7 @@ def _compute_cusp_triangle_vertex_positions(tet, V, i):
444
473
  log_z0 = CF(0)
445
474
 
446
475
  # Inverting matrix here since SageMath screws up :(
447
- translations_to_ml = matrix([[d,-b], [-c, a]]) / (a*d - b * c)
476
+ translations_to_ml = make_matrix([[d,-b], [-c, a]]) / (a*d - b * c)
448
477
 
449
478
  vertex_positions = [ translations_to_ml * complex_to_pair(z)
450
479
  for z in vertex_positions ]
@@ -486,7 +515,7 @@ def _compute_margulis_tube_ends(tet, vertex):
486
515
  if tet.Class[vertex].is_complete:
487
516
  return [(0.0, 0.0, 0.0, 0.0), (0.0, 0.0, 0.0, 0.0)]
488
517
 
489
- return [ tet.cusp_to_tet_matrices[vertex] * vector([1.0, x, 0.0, 0.0])
518
+ return [ tet.cusp_to_tet_matrices[vertex] * make_vector([1.0, x, 0.0, 0.0])
490
519
  for x in [-1.0, 1.0] ]
491
520
 
492
521
 
@@ -515,10 +544,11 @@ def _cusp_view_matrix(tet, subsimplex, area):
515
544
  factor_to_move_inside = 1.0001
516
545
  rotation = l_translation / abs(l_translation)
517
546
  scale = factor_to_move_inside/area.sqrt()
518
- borel_transform = matrix([[ scale*rotation, translation ],
519
- [ 0, 1 ]], ring=CF)
547
+ borel_transform = make_matrix([[ scale*rotation, translation ],
548
+ [ 0, 1 ]],
549
+ ring=CF)
520
550
 
521
- base_camera_matrix = matrix(
551
+ base_camera_matrix = make_matrix(
522
552
  [[ 1, 0, 0, 0],
523
553
  [ 0, 0, 0, 1],
524
554
  [ 0, 1, 0, 0],
@@ -555,7 +585,7 @@ def _check_consistency(mcomplex):
555
585
  for F in t3m.TwoSubsimplices:
556
586
  for V in t3m.ZeroSubsimplices:
557
587
  if V & F:
558
- v0 = tet.O13_matrices[F] * vector(tet.R13_vertices[V])
588
+ v0 = tet.O13_matrices[F] * make_vector(tet.R13_vertices[V])
559
589
  v1 = tet.Neighbor[F].R13_vertices[tet.Gluing[F].image(V)]
560
590
  err = r13_dot(v0, v1)
561
591
  if err > 1e-10 or err < -1e-10: