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
snappy/drilling/crush.py CHANGED
@@ -1,23 +1,20 @@
1
1
  from .cusps import CuspPostDrillInfo
2
- from .tracing import GeodesicPiece
3
2
  from .peripheral_curves import install_peripheral_curves
3
+ from .barycentric import transpositions, perm_to_index
4
4
 
5
5
  from ..snap.t3mlite import Tetrahedron, Perm4, Mcomplex, simplex
6
6
 
7
- from typing import Dict, Tuple, List, Sequence
8
-
7
+ from typing import Set, Sequence
9
8
 
10
9
  def crush_geodesic_pieces(tetrahedra : Sequence[Tetrahedron]) -> Mcomplex:
11
10
  """
12
11
  Given tetrahedra produced by traverse_geodesics_to_subdivide,
13
- compute the barycentric subdivision and crush all tetrahedra in the
14
- barycentric subdivision that are adjacent to an edge that coincides with a
15
- GeodesicPiece.
12
+ compute the barycentric subdivision and crush all subtetrahedra in the
13
+ barycentric subdivision that have been marked as being adjacent to an edge
14
+ that coincides with a GeodesicPiece.
16
15
 
17
- That is, the given tetrahedra are supposed to form a triangulation and
18
- have GeodesicPiece's stored in tet.geodesic_pieces such that all endpoints
19
- of all pieces are at vertices of the tetrahedron, that is the line
20
- segment the GeodesicPiece represents is an edge of the tetrahedron.
16
+ The function mark_subtetrahedra_about_geodesic_pieces marks the
17
+ subtetrahedra as described above.
21
18
  """
22
19
 
23
20
  # We call the tetrahedra in the barycentric subdivision subtetrahedra
@@ -38,16 +35,17 @@ def crush_geodesic_pieces(tetrahedra : Sequence[Tetrahedron]) -> Mcomplex:
38
35
  # Using the index i that p has in Perm4.S4, we index
39
36
  # a subtetrahedron by 24 * tet.Index + i.
40
37
 
41
- # Compute a bit mask of which subtetrahedra in the barycentric
42
- # subdivision will not be crushed.
38
+ # The subtetrahedra that are supposed to be curshed in the barycentric
39
+ # are assumed to be marked in tet.marked_subtetrahedra.
43
40
  #
44
- # Also pick a subtetrahedron for each simple closed curve that we can
45
- # use later to compute a new meridian and longitude.
46
- mask, peripheral_base_subtet_indices = (
47
- _tet_mask_and_peripheral_base_subtet_indices(tetrahedra))
41
+ # Later, we also pick a subtetrahedron for each simple closed curve to
42
+ # compute a new meridian and longitude.
48
43
 
49
44
  # Use bit mask to create the subtetrahedra surviving the crushing.
50
- subtetrahedra = [ Tetrahedron() if m else None for m in mask ]
45
+ subtetrahedra = [
46
+ Tetrahedron() if marked_subtet == 0 else None
47
+ for tet in tetrahedra
48
+ for marked_subtet in tet.marked_subtetrahedra ]
51
49
 
52
50
  _assign_orientations(subtetrahedra)
53
51
 
@@ -64,10 +62,10 @@ def crush_geodesic_pieces(tetrahedra : Sequence[Tetrahedron]) -> Mcomplex:
64
62
  # The gluings internal (between subtetrahedra of the
65
63
  # same tetrahedron)
66
64
  for face in range(3):
67
- other_perm = perm * _transpositions[face]
68
- j = _perm_to_index(other_perm)
65
+ other_perm = perm * transpositions[face]
66
+ j = perm_to_index(other_perm)
69
67
  other_subtet_index = 24 * tet.Index + j
70
- if face == 1 and not mask[other_subtet_index]:
68
+ if face == 1 and tet.marked_subtetrahedra[j] != 0:
71
69
  # We are processing subtetrahedron t and its
72
70
  # neighbor c is adjacent to a GeodesicPiece (=)
73
71
  # and thus it and its neighbor c' get crushed.
@@ -89,7 +87,7 @@ def crush_geodesic_pieces(tetrahedra : Sequence[Tetrahedron]) -> Mcomplex:
89
87
  # 0============1============0
90
88
  #
91
89
  other_perm = perm * Perm4((2,1,0,3))
92
- j = _perm_to_index(other_perm)
90
+ j = perm_to_index(other_perm)
93
91
  other_subtet_index = 24 * tet.Index + j
94
92
  # attach is working symmetrically also setting the Neighbors
95
93
  # and Gluings of the other tetrahedron, so only call it once
@@ -104,12 +102,12 @@ def crush_geodesic_pieces(tetrahedra : Sequence[Tetrahedron]) -> Mcomplex:
104
102
  face = perm.image(simplex.F3)
105
103
  other_tet = tet.Neighbor[face]
106
104
  other_perm = tet.Gluing[face] * perm
107
- j = _perm_to_index(other_perm)
105
+ j = perm_to_index(other_perm)
108
106
  other_subtet_index = 24 * other_tet.Index + j
109
107
  if other_subtet_index > subtet_index:
110
108
  subtet.attach(simplex.F3,
111
- subtetrahedra[other_subtet_index],
112
- (0,1,2,3))
109
+ subtetrahedra[other_subtet_index],
110
+ (0,1,2,3))
113
111
 
114
112
  # Only vertex 0 corresponds to an original vertex.
115
113
  # The other vertices will actually be finite, i.e., have
@@ -186,11 +184,41 @@ def crush_geodesic_pieces(tetrahedra : Sequence[Tetrahedron]) -> Mcomplex:
186
184
 
187
185
  _fix_all_peripheral_curves(subtetrahedra)
188
186
 
189
- # Find peripheral curves for the cusps created by crushing the simple
187
+ # Find peripheral curves for each cusps created by crushing the simple
190
188
  # closed curves.
191
- for i in peripheral_base_subtet_indices:
192
- install_peripheral_curves(subtetrahedra[i])
193
-
189
+ # Record which of these cusps was already processed to only do this once
190
+ # per cusp.
191
+ new_cusp_indices : Set[int] = set()
192
+ for tet in tetrahedra:
193
+ for perm, orientation in zip(Perm4.S4(), tet.marked_subtetrahedra):
194
+ # We found a subtetrahedron adjacent to a geodesic piece.
195
+ #
196
+ # Make sure its 0-1 edge is parallel and not anti-parallel to
197
+ # the geodesic piece. This way the longitude will be parallel to
198
+ # the geodesic piece.
199
+ if orientation != +1:
200
+ continue
201
+ # Check orientation of subtetrahedron so that the orientation of
202
+ # the meridian relative to the longitude matches the orientation of the
203
+ # cusp.
204
+ if perm.sign() == 1:
205
+ continue
206
+ v : int = perm.image(simplex.V0)
207
+ cusp_index : int = tet.post_drill_infos[v].index
208
+ if cusp_index is None:
209
+ raise Exception("Vertex on geodesic has no assigned cusp")
210
+ if cusp_index in new_cusp_indices:
211
+ continue
212
+ # First time we encounter this simple closed curve. Pick a base
213
+ # tet to install the meridian and longitude.
214
+ # This base tet better not be one of the subtetrahedra that is
215
+ # crushed. So pick a neighbor of the subtetrahedron adjacent
216
+ # to the geodesic piece.
217
+ other_perm = perm * transpositions[1]
218
+ subtet_index = 24 * tet.Index + perm_to_index(other_perm)
219
+ install_peripheral_curves(subtetrahedra[subtet_index])
220
+ new_cusp_indices.add(cusp_index)
221
+
194
222
  # To preserve the orientation, make sure that the first subtetrahedron
195
223
  # we pass to Mcomplex has the same orientation as the original tetrahedron
196
224
  # - since the SnapPea kernel will use the first tetrahedron of an
@@ -200,108 +228,6 @@ def crush_geodesic_pieces(tetrahedra : Sequence[Tetrahedron]) -> Mcomplex:
200
228
  for subtet in subtetrahedra
201
229
  if subtet and subtet.orientation == s ])
202
230
 
203
-
204
- _perm_tuple_to_index : Dict[Tuple[int, int, int, int], int] = {
205
- perm.tuple() : i for i, perm in enumerate(Perm4.S4()) }
206
-
207
- _transpositions : List[Perm4] = [ Perm4((1,0,2,3)),
208
- Perm4((0,2,1,3)),
209
- Perm4((0,1,3,2)) ]
210
-
211
-
212
- def _perm_to_index(perm : Perm4) -> int:
213
- return _perm_tuple_to_index[perm.tuple()]
214
-
215
-
216
- def _find_perm_for_piece(piece : GeodesicPiece):
217
- """
218
- Given a GeodesicPiece with endpoints being on the vertices
219
- of the tetrahedron and spanning an oriented edge of the tetrahedron,
220
- find an "edge embedding permutation" (similar to regina's
221
- edge embedding) that maps the 0-1 edge to the given edge.
222
-
223
- The subtetrahedron corresponding to this permutation is
224
- adjacent to half of this edge.
225
- """
226
-
227
- s0 = piece.endpoints[0].subsimplex
228
- s1 = piece.endpoints[1].subsimplex
229
-
230
- # Important to consistently always pick a permutation of the
231
- # same parity and respect the ordering of the vertices V0 and V1
232
- # since this affects which subtetrahedron will be chosen as peripheral
233
- # base subtetrahedron - and thus ultimately affects the orientation
234
- # of the meridian and longitude computed by install_peripheral_curves.
235
- for perm in Perm4.A4():
236
- if perm.image(simplex.V0) == s0 and perm.image(simplex.V1) == s1:
237
- return perm
238
-
239
-
240
- def _traverse_edge(tet0 : Tetrahedron, perm0 : Perm4, mask : List[bool]):
241
- """
242
- Given a subtetrahedron in the barycentric subdivision parametrized
243
- by a tetrahedron and permutation, find all subtetrahedra adjacent to the
244
- same edge in the original triangulation. Delete them from the bit mask.
245
- """
246
-
247
- tet = tet0
248
- perm = perm0
249
-
250
- while True:
251
- # All subtetrahedra touching the same edge in the current
252
- # tetrahedron.
253
- for p in [ perm,
254
- perm * _transpositions[0],
255
- perm * _transpositions[2],
256
- perm * _transpositions[0] * _transpositions[2] ]:
257
- subtet_index = 24 * tet.Index + _perm_to_index(p)
258
- mask[subtet_index] = False
259
-
260
- # Find the next "edge embedding"
261
- face = perm.image(simplex.F3)
262
- tet, perm = (
263
- tet.Neighbor[face],
264
- tet.Gluing[face] * perm * Perm4((0,1,3,2)))
265
- # Stop if back at the first "edge embedding"
266
- if tet is tet0 and perm.tuple() == perm0.tuple():
267
- return
268
-
269
-
270
- def _tet_mask_and_peripheral_base_subtet_indices(tetrahedra):
271
- """
272
- Given the same input as described in crush_geodesic_data,
273
- computes the bit mask of which subtetrahedra will not be
274
- crushed. Also return a set of indices, that is the index
275
- of one subtetrahedron for each simple closed curve that
276
- can be used later to compute a new meridian and longitude.
277
- """
278
-
279
- # The bit mask to compute
280
- mask = (24 * len(tetrahedra)) * [ True ]
281
-
282
- # Maps index of simple closed curve to index of subtetrahedron
283
- index_to_peripheral_base_subtet_index = { }
284
-
285
- # For each GeodesicPiece
286
- for tet in tetrahedra:
287
- for piece in tet.geodesic_pieces:
288
- # Find all subtetrahedra adjacent to it to delete
289
- # them from mask
290
- perm = _find_perm_for_piece(piece)
291
-
292
- _traverse_edge(tet, perm, mask)
293
-
294
- # And if this is the first time we encounter this
295
- # simple closed curve, compute a base tet.
296
- if piece.index not in index_to_peripheral_base_subtet_index:
297
- # Get the neighboring subtetrahedron that won't be crushed
298
- other_perm = perm * _transpositions[1]
299
- subtet_index = 24 * tet.Index + _perm_to_index(other_perm)
300
- index_to_peripheral_base_subtet_index[piece.index] = subtet_index
301
-
302
- return mask, index_to_peripheral_base_subtet_index.values()
303
-
304
-
305
231
  def _assign_orientations(subtetrahedra):
306
232
  for j in range(len(subtetrahedra) // 24):
307
233
  for i, perm in enumerate(Perm4.S4()):
snappy/drilling/cusps.py CHANGED
@@ -1,8 +1,10 @@
1
- from .geodesic_info import GeodesicInfo
2
- from .geometric_structure import Filling, FillingMatrix
1
+ from ..geometric_structure.geodesic.geodesic_start_point_info import GeodesicStartPointInfo
2
+ from ..geometric_structure import Filling, FillingMatrix
3
3
 
4
4
  from ..snap.t3mlite import Mcomplex, simplex
5
5
 
6
+ from . import exceptions
7
+
6
8
  from typing import Tuple, Optional, Sequence
7
9
 
8
10
  # @dataclass
@@ -49,11 +51,11 @@ class CuspPostDrillInfo:
49
51
 
50
52
 
51
53
  def index_geodesics_and_add_post_drill_infos(
52
- geodesics : Sequence[GeodesicInfo],
54
+ geodesics : Sequence[GeodesicStartPointInfo],
53
55
  mcomplex : Mcomplex) -> None:
54
56
 
55
- all_reindexed_verts = set(
56
- g.core_curve_cusp for g in geodesics if g.core_curve_cusp)
57
+ all_reindexed_verts = {
58
+ g.core_curve_cusp for g in geodesics if g.core_curve_cusp}
57
59
 
58
60
  old_vertices = [v for v in mcomplex.Vertices
59
61
  if v not in all_reindexed_verts]
@@ -66,11 +68,15 @@ def index_geodesics_and_add_post_drill_infos(
66
68
 
67
69
  for i, g in enumerate(geodesics):
68
70
  if g.core_curve_cusp:
71
+ if g.core_curve_multiplicity not in [-1, +1]:
72
+ raise exceptions.GeodesicMultipleOfCoreCurve(
73
+ g.word, g.core_curve_multiplicity)
74
+
69
75
  g.core_curve_cusp.post_drill_info = CuspPostDrillInfo(
70
76
  index=n + i,
71
77
  peripheral_matrix=_multiply_filling_matrix(
72
78
  g.core_curve_cusp.filling_matrix,
73
- g.core_curve_direction))
79
+ g.core_curve_multiplicity))
74
80
  else:
75
81
  g.index = n + i
76
82
 
snappy/drilling/debug.py CHANGED
@@ -1,4 +1,5 @@
1
1
  from ..snap.t3mlite import simplex
2
+ from ..matrix import make_identity_matrix
2
3
  from ..hyperboloid import *
3
4
 
4
5
 
@@ -82,7 +83,7 @@ def check_points_consistency(m):
82
83
 
83
84
  def check_edge_consistency(m):
84
85
  RF = m.Tetrahedra[0].O13_matrices[simplex.F0].base_ring()
85
- id_matrix = matrix.identity(ring=RF, n=4)
86
+ id_matrix = make_identity_matrix(ring=RF, n=4)
86
87
 
87
88
  for e in m.Edges:
88
89
  t = id_matrix
@@ -1,17 +1,6 @@
1
1
  class DrillGeodesicError(RuntimeError):
2
2
  pass
3
3
 
4
-
5
- class WordAppearsToBeParabolic(DrillGeodesicError):
6
- def __init__(self, word, trace):
7
- self.word = word
8
- self.trace = trace
9
- super().__init__(
10
- "Attempting to drill a geodesic corresponding to a matrix "
11
- "that could be parabolic. "
12
- "Word: %s, trace: %r." % (word, trace))
13
-
14
-
15
4
  class GeodesicSystemNotSimpleError(DrillGeodesicError):
16
5
  def __init__(self, maximal_tube_radius):
17
6
  self.maximal_tube_radius = maximal_tube_radius
@@ -21,26 +10,13 @@ class GeodesicSystemNotSimpleError(DrillGeodesicError):
21
10
  "The maximal tube radius about the given system of geodesics "
22
11
  "was estimated to be: %r." % maximal_tube_radius)
23
12
 
24
-
25
- class GeodesicCloseToCoreCurve(DrillGeodesicError):
26
- def __init__(self):
27
- super().__init__(
28
- "The given geodesic is very close to a core curve and might "
29
- "intersect it.")
30
-
31
-
32
- class UnfinishedGraphTraceGeodesicError(DrillGeodesicError):
33
- def __init__(self, steps):
34
- self.steps = steps
13
+ class GeodesicMultipleOfCoreCurve(DrillGeodesicError):
14
+ def __init__(self, word, multiplicity):
15
+ self.word = word
16
+ self.multiplicity = multiplicity
35
17
  super().__init__(
36
- "The line fixed by the given word could not be moved (by "
37
- "Decktransformations) to intersect the fundamental domain after "
38
- "%d steps. "
39
- "This is probably due to a pathology, e.g., a bad conjugate "
40
- "was picked and the line is very far away from the fundamental "
41
- "domain or the given geodesic is very close to a core curve of "
42
- "a filled cusp." % steps)
43
-
18
+ "The geodesic %s is a %d-fold multiple of a core curve." % (
19
+ word, multiplicity))
44
20
 
45
21
  class UnfinishedTraceGeodesicError(DrillGeodesicError):
46
22
  def __init__(self, steps):
@@ -51,15 +27,6 @@ class UnfinishedTraceGeodesicError(DrillGeodesicError):
51
27
  "e.g., the geodesic is very close to a core curve of "
52
28
  "filled cusp." % steps)
53
29
 
54
- class GeodesicStartingPiecesCrossSameFaceError(DrillGeodesicError):
55
- def __init__(self):
56
- super().__init__(
57
- "The first and last piece of the geodesic do not cross distinct "
58
- "faces. This can happen if the amount the start point was "
59
- "perturbed too much. Unfortunately, reducing this amount has "
60
- "not been implemented yet. If you run into this case, please "
61
- "report it giving the manifold and geodesic it occurred with.")
62
-
63
30
  class GeodesicHittingOneSkeletonError(DrillGeodesicError):
64
31
  """
65
32
  Base class for exceptions caused by the geodesic hitting the
@@ -69,7 +36,7 @@ class GeodesicHittingOneSkeletonError(DrillGeodesicError):
69
36
 
70
37
  class GeodesicStartPointOnTwoSkeletonError(GeodesicHittingOneSkeletonError):
71
38
  """
72
- Raised when the start point given to GeodesicInfo appears not to be in the
39
+ Raised when the start point given to GeodesicStartPointInfo appears not to be in the
73
40
  interior of a tetrahedron.
74
41
  """
75
42