snappy 3.0.3__cp38-cp38-macosx_11_0_arm64.whl → 3.2__cp38-cp38-macosx_11_0_arm64.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (401) hide show
  1. snappy/CyOpenGL.cpython-38-darwin.so +0 -0
  2. snappy/SnapPy.cpython-38-darwin.so +0 -0
  3. snappy/SnapPyHP.cpython-38-darwin.so +0 -0
  4. snappy/__init__.py +373 -426
  5. snappy/app.py +240 -75
  6. snappy/app_menus.py +93 -78
  7. snappy/browser.py +87 -63
  8. snappy/cache.py +5 -8
  9. snappy/canonical.py +249 -0
  10. snappy/{verify/cusp_shapes.py → cusps/__init__.py} +11 -19
  11. snappy/cusps/cusp_area_matrix.py +101 -0
  12. snappy/{verify/cusp_areas.py → cusps/cusp_areas_from_matrix.py} +39 -54
  13. snappy/cusps/maximal_cusp_area_matrix.py +136 -0
  14. snappy/cusps/test.py +21 -0
  15. snappy/cusps/trig_cusp_area_matrix.py +63 -0
  16. snappy/database.py +40 -31
  17. snappy/db_utilities.py +13 -14
  18. snappy/decorated_isosig.py +377 -133
  19. snappy/dev/extended_ptolemy/complexVolumesClosed.py +42 -9
  20. snappy/dev/extended_ptolemy/extended.py +32 -25
  21. snappy/dev/extended_ptolemy/giac_rur.py +23 -8
  22. snappy/dev/extended_ptolemy/phc_wrapper.py +10 -10
  23. snappy/dev/vericlosed/computeApproxHyperbolicStructureOrb.py +2 -1
  24. snappy/dev/vericlosed/gimbalLoopFinder.py +5 -5
  25. snappy/dev/vericlosed/hyperbolicStructure.py +3 -3
  26. snappy/dev/vericlosed/oneVertexTruncatedComplex.py +2 -2
  27. snappy/dev/vericlosed/truncatedComplex.py +3 -2
  28. snappy/dev/vericlosed/verifyHyperbolicStructureEngine.py +4 -3
  29. snappy/doc/_images/geodesics.jpg +0 -0
  30. snappy/doc/_images/m004_paper_plane_on_systole.jpg +0 -0
  31. snappy/doc/_images/m125_paper_plane.jpg +0 -0
  32. snappy/doc/_images/o9_00000_systole_paper_plane.jpg +0 -0
  33. snappy/doc/_images/o9_00000_systole_paper_plane_closer.jpg +0 -0
  34. snappy/doc/_sources/additional_classes.rst.txt +1 -0
  35. snappy/doc/_sources/credits.rst.txt +6 -1
  36. snappy/doc/_sources/development.rst.txt +69 -50
  37. snappy/doc/_sources/index.rst.txt +101 -66
  38. snappy/doc/_sources/installing.rst.txt +148 -165
  39. snappy/doc/_sources/news.rst.txt +136 -32
  40. snappy/doc/_sources/ptolemy.rst.txt +1 -1
  41. snappy/doc/_sources/ptolemy_examples1.rst.txt +9 -8
  42. snappy/doc/_sources/ptolemy_examples2.rst.txt +3 -3
  43. snappy/doc/_sources/ptolemy_examples3.rst.txt +14 -14
  44. snappy/doc/_sources/ptolemy_prelim.rst.txt +1 -1
  45. snappy/doc/_sources/snap.rst.txt +2 -2
  46. snappy/doc/_sources/snappy.rst.txt +1 -1
  47. snappy/doc/_sources/triangulation.rst.txt +3 -2
  48. snappy/doc/_sources/verify.rst.txt +89 -29
  49. snappy/doc/_sources/verify_internals.rst.txt +5 -16
  50. snappy/doc/_static/SnapPy-horizontal-128.png +0 -0
  51. snappy/doc/_static/SnapPy.ico +0 -0
  52. snappy/doc/_static/_sphinx_javascript_frameworks_compat.js +123 -0
  53. snappy/doc/_static/basic.css +47 -27
  54. snappy/doc/_static/css/badge_only.css +1 -0
  55. snappy/doc/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
  56. snappy/doc/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
  57. snappy/doc/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
  58. snappy/doc/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
  59. snappy/doc/_static/css/fonts/fontawesome-webfont.eot +0 -0
  60. snappy/doc/_static/css/fonts/fontawesome-webfont.svg +2671 -0
  61. snappy/doc/_static/css/fonts/fontawesome-webfont.ttf +0 -0
  62. snappy/doc/_static/css/fonts/fontawesome-webfont.woff +0 -0
  63. snappy/doc/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
  64. snappy/doc/_static/css/fonts/lato-bold-italic.woff +0 -0
  65. snappy/doc/_static/css/fonts/lato-bold-italic.woff2 +0 -0
  66. snappy/doc/_static/css/fonts/lato-bold.woff +0 -0
  67. snappy/doc/_static/css/fonts/lato-bold.woff2 +0 -0
  68. snappy/doc/_static/css/fonts/lato-normal-italic.woff +0 -0
  69. snappy/doc/_static/css/fonts/lato-normal-italic.woff2 +0 -0
  70. snappy/doc/_static/css/fonts/lato-normal.woff +0 -0
  71. snappy/doc/_static/css/fonts/lato-normal.woff2 +0 -0
  72. snappy/doc/_static/css/theme.css +4 -0
  73. snappy/doc/_static/doctools.js +107 -274
  74. snappy/doc/_static/documentation_options.js +6 -5
  75. snappy/doc/_static/fonts/Lato/lato-bold.eot +0 -0
  76. snappy/doc/_static/fonts/Lato/lato-bold.ttf +0 -0
  77. snappy/doc/_static/fonts/Lato/lato-bold.woff +0 -0
  78. snappy/doc/_static/fonts/Lato/lato-bold.woff2 +0 -0
  79. snappy/doc/_static/fonts/Lato/lato-bolditalic.eot +0 -0
  80. snappy/doc/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
  81. snappy/doc/_static/fonts/Lato/lato-bolditalic.woff +0 -0
  82. snappy/doc/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
  83. snappy/doc/_static/fonts/Lato/lato-italic.eot +0 -0
  84. snappy/doc/_static/fonts/Lato/lato-italic.ttf +0 -0
  85. snappy/doc/_static/fonts/Lato/lato-italic.woff +0 -0
  86. snappy/doc/_static/fonts/Lato/lato-italic.woff2 +0 -0
  87. snappy/doc/_static/fonts/Lato/lato-regular.eot +0 -0
  88. snappy/doc/_static/fonts/Lato/lato-regular.ttf +0 -0
  89. snappy/doc/_static/fonts/Lato/lato-regular.woff +0 -0
  90. snappy/doc/_static/fonts/Lato/lato-regular.woff2 +0 -0
  91. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
  92. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
  93. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
  94. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
  95. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
  96. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
  97. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
  98. snappy/doc/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
  99. snappy/doc/_static/jquery.js +2 -2
  100. snappy/doc/_static/js/badge_only.js +1 -0
  101. snappy/doc/_static/js/theme.js +1 -0
  102. snappy/doc/_static/js/versions.js +228 -0
  103. snappy/doc/_static/language_data.js +3 -101
  104. snappy/doc/_static/pygments.css +1 -0
  105. snappy/doc/_static/searchtools.js +489 -398
  106. snappy/doc/_static/snappy_furo.css +33 -0
  107. snappy/doc/_static/snappy_sphinx_rtd_theme.css +42 -0
  108. snappy/doc/_static/sphinx_highlight.js +154 -0
  109. snappy/doc/additional_classes.html +688 -263
  110. snappy/doc/bugs.html +107 -94
  111. snappy/doc/censuses.html +155 -127
  112. snappy/doc/credits.html +115 -104
  113. snappy/doc/development.html +184 -146
  114. snappy/doc/genindex.html +287 -204
  115. snappy/doc/index.html +189 -150
  116. snappy/doc/installing.html +259 -266
  117. snappy/doc/manifold.html +1626 -592
  118. snappy/doc/manifoldhp.html +119 -105
  119. snappy/doc/news.html +198 -104
  120. snappy/doc/objects.inv +0 -0
  121. snappy/doc/other.html +117 -105
  122. snappy/doc/platonic_census.html +161 -114
  123. snappy/doc/plink.html +113 -105
  124. snappy/doc/ptolemy.html +131 -108
  125. snappy/doc/ptolemy_classes.html +242 -223
  126. snappy/doc/ptolemy_examples1.html +144 -130
  127. snappy/doc/ptolemy_examples2.html +141 -129
  128. snappy/doc/ptolemy_examples3.html +148 -132
  129. snappy/doc/ptolemy_examples4.html +131 -111
  130. snappy/doc/ptolemy_prelim.html +162 -138
  131. snappy/doc/py-modindex.html +104 -69
  132. snappy/doc/screenshots.html +117 -108
  133. snappy/doc/search.html +115 -84
  134. snappy/doc/searchindex.js +1 -1
  135. snappy/doc/snap.html +109 -96
  136. snappy/doc/snappy.html +134 -97
  137. snappy/doc/spherogram.html +259 -187
  138. snappy/doc/todo.html +107 -94
  139. snappy/doc/triangulation.html +1380 -111
  140. snappy/doc/tutorial.html +107 -94
  141. snappy/doc/verify.html +194 -125
  142. snappy/doc/verify_internals.html +248 -686
  143. snappy/drilling/__init__.py +456 -0
  144. snappy/drilling/barycentric.py +103 -0
  145. snappy/drilling/constants.py +5 -0
  146. snappy/drilling/crush.py +270 -0
  147. snappy/drilling/cusps.py +125 -0
  148. snappy/drilling/debug.py +242 -0
  149. snappy/drilling/epsilons.py +6 -0
  150. snappy/drilling/exceptions.py +55 -0
  151. snappy/drilling/moves.py +620 -0
  152. snappy/drilling/peripheral_curves.py +210 -0
  153. snappy/drilling/perturb.py +188 -0
  154. snappy/drilling/shorten.py +36 -0
  155. snappy/drilling/subdivide.py +274 -0
  156. snappy/drilling/test.py +23 -0
  157. snappy/drilling/test_cases.py +126 -0
  158. snappy/drilling/tracing.py +351 -0
  159. snappy/exceptions.py +23 -3
  160. snappy/export_stl.py +20 -14
  161. snappy/exterior_to_link/__init__.py +2 -0
  162. snappy/exterior_to_link/barycentric_geometry.py +463 -0
  163. snappy/exterior_to_link/exceptions.py +6 -0
  164. snappy/exterior_to_link/geodesic_map.json +14408 -0
  165. snappy/exterior_to_link/hyp_utils.py +112 -0
  166. snappy/exterior_to_link/link_projection.py +323 -0
  167. snappy/exterior_to_link/main.py +197 -0
  168. snappy/exterior_to_link/mcomplex_with_expansion.py +261 -0
  169. snappy/exterior_to_link/mcomplex_with_link.py +687 -0
  170. snappy/exterior_to_link/mcomplex_with_memory.py +162 -0
  171. snappy/exterior_to_link/pl_utils.py +491 -0
  172. snappy/exterior_to_link/put_in_S3.py +156 -0
  173. snappy/exterior_to_link/rational_linear_algebra.py +123 -0
  174. snappy/exterior_to_link/rational_linear_algebra_wrapped.py +135 -0
  175. snappy/exterior_to_link/simplify_to_base_tri.py +114 -0
  176. snappy/exterior_to_link/stored_moves.py +475 -0
  177. snappy/exterior_to_link/test.py +31 -0
  178. snappy/geometric_structure/__init__.py +212 -0
  179. snappy/geometric_structure/cusp_neighborhood/__init__.py +3 -0
  180. snappy/geometric_structure/cusp_neighborhood/complex_cusp_cross_section.py +697 -0
  181. snappy/geometric_structure/cusp_neighborhood/cusp_cross_section_base.py +484 -0
  182. snappy/geometric_structure/cusp_neighborhood/exceptions.py +42 -0
  183. snappy/geometric_structure/cusp_neighborhood/real_cusp_cross_section.py +298 -0
  184. snappy/geometric_structure/cusp_neighborhood/tiles_for_cusp_neighborhood.py +159 -0
  185. snappy/geometric_structure/cusp_neighborhood/vertices.py +32 -0
  186. snappy/geometric_structure/geodesic/__init__.py +0 -0
  187. snappy/geometric_structure/geodesic/add_core_curves.py +152 -0
  188. snappy/geometric_structure/geodesic/avoid_core_curves.py +369 -0
  189. snappy/geometric_structure/geodesic/canonical_keys.py +52 -0
  190. snappy/geometric_structure/geodesic/check_away_from_core_curve.py +60 -0
  191. snappy/geometric_structure/geodesic/constants.py +6 -0
  192. snappy/geometric_structure/geodesic/exceptions.py +22 -0
  193. snappy/geometric_structure/geodesic/fixed_points.py +93 -0
  194. snappy/geometric_structure/geodesic/geodesic_start_point_info.py +435 -0
  195. snappy/geometric_structure/geodesic/graph_trace_helper.py +67 -0
  196. snappy/geometric_structure/geodesic/line.py +30 -0
  197. snappy/geometric_structure/geodesic/multiplicity.py +127 -0
  198. snappy/geometric_structure/geodesic/tiles_for_geodesic.py +101 -0
  199. snappy/geometric_structure/test.py +22 -0
  200. snappy/gui.py +36 -36
  201. snappy/horoviewer.py +50 -48
  202. snappy/hyperboloid/__init__.py +212 -0
  203. snappy/hyperboloid/distances.py +245 -0
  204. snappy/hyperboloid/horoball.py +19 -0
  205. snappy/hyperboloid/line.py +35 -0
  206. snappy/hyperboloid/point.py +9 -0
  207. snappy/hyperboloid/triangle.py +29 -0
  208. snappy/{infodialog.py → infowindow.py} +32 -33
  209. snappy/isometry_signature.py +382 -0
  210. snappy/len_spec/__init__.py +596 -0
  211. snappy/len_spec/geodesic_info.py +110 -0
  212. snappy/len_spec/geodesic_key_info_dict.py +117 -0
  213. snappy/len_spec/geodesic_piece.py +143 -0
  214. snappy/len_spec/geometric_structure.py +182 -0
  215. snappy/len_spec/geometry.py +80 -0
  216. snappy/len_spec/length_spectrum_geodesic_info.py +170 -0
  217. snappy/len_spec/spine.py +206 -0
  218. snappy/len_spec/test.py +24 -0
  219. snappy/len_spec/test_cases.py +69 -0
  220. snappy/len_spec/tile.py +275 -0
  221. snappy/len_spec/word.py +86 -0
  222. snappy/manifolds/__init__.py +1 -1
  223. snappy/math_basics.py +176 -0
  224. snappy/matrix.py +525 -0
  225. snappy/number.py +97 -21
  226. snappy/numeric_output_checker.py +37 -27
  227. snappy/pari.py +30 -69
  228. snappy/phone_home.py +25 -20
  229. snappy/polyviewer.py +39 -37
  230. snappy/ptolemy/__init__.py +4 -6
  231. snappy/ptolemy/component.py +14 -12
  232. snappy/ptolemy/coordinates.py +312 -295
  233. snappy/ptolemy/fieldExtensions.py +14 -12
  234. snappy/ptolemy/findLoops.py +43 -31
  235. snappy/ptolemy/geometricRep.py +24 -26
  236. snappy/ptolemy/homology.py +12 -7
  237. snappy/ptolemy/manifoldMethods.py +69 -70
  238. snappy/ptolemy/matrix.py +65 -26
  239. snappy/ptolemy/numericalSolutionsToGroebnerBasis.py +18 -14
  240. snappy/ptolemy/polynomial.py +125 -119
  241. snappy/ptolemy/processComponents.py +36 -30
  242. snappy/ptolemy/processFileBase.py +79 -18
  243. snappy/ptolemy/processFileDispatch.py +13 -14
  244. snappy/ptolemy/processMagmaFile.py +44 -39
  245. snappy/ptolemy/processRurFile.py +18 -11
  246. snappy/ptolemy/ptolemyGeneralizedObstructionClass.py +20 -17
  247. snappy/ptolemy/ptolemyObstructionClass.py +13 -17
  248. snappy/ptolemy/ptolemyVariety.py +190 -121
  249. snappy/ptolemy/ptolemyVarietyPrimeIdealGroebnerBasis.py +20 -19
  250. snappy/ptolemy/reginaWrapper.py +25 -29
  251. snappy/ptolemy/rur.py +6 -14
  252. snappy/ptolemy/solutionsToPrimeIdealGroebnerBasis.py +27 -22
  253. snappy/ptolemy/test.py +247 -188
  254. snappy/ptolemy/utilities.py +41 -43
  255. snappy/raytracing/__init__.py +64 -0
  256. snappy/raytracing/additional_horospheres.py +64 -0
  257. snappy/raytracing/additional_len_spec_choices.py +63 -0
  258. snappy/raytracing/cohomology_fractal.py +10 -6
  259. snappy/raytracing/eyeball.py +123 -0
  260. snappy/raytracing/finite_raytracing_data.py +48 -38
  261. snappy/raytracing/finite_viewer.py +218 -210
  262. snappy/raytracing/geodesic_tube_info.py +174 -0
  263. snappy/raytracing/geodesics.py +246 -0
  264. snappy/raytracing/geodesics_window.py +258 -0
  265. snappy/raytracing/gui_utilities.py +152 -40
  266. snappy/raytracing/hyperboloid_navigation.py +102 -52
  267. snappy/raytracing/hyperboloid_utilities.py +114 -261
  268. snappy/raytracing/ideal_raytracing_data.py +256 -179
  269. snappy/raytracing/inside_viewer.py +522 -253
  270. snappy/raytracing/pack.py +22 -0
  271. snappy/raytracing/raytracing_data.py +46 -34
  272. snappy/raytracing/raytracing_view.py +190 -109
  273. snappy/raytracing/shaders/Eye.png +0 -0
  274. snappy/raytracing/shaders/NonGeometric.png +0 -0
  275. snappy/raytracing/shaders/__init__.py +60 -4
  276. snappy/raytracing/shaders/fragment.glsl +575 -148
  277. snappy/raytracing/test.py +29 -0
  278. snappy/raytracing/tooltip.py +146 -0
  279. snappy/raytracing/upper_halfspace_utilities.py +98 -0
  280. snappy/raytracing/view_scale_controller.py +98 -0
  281. snappy/raytracing/zoom_slider/__init__.py +32 -29
  282. snappy/raytracing/zoom_slider/test.py +2 -0
  283. snappy/sage_helper.py +69 -123
  284. snappy/{preferences.py → settings.py} +167 -145
  285. snappy/shell.py +4 -0
  286. snappy/snap/__init__.py +12 -8
  287. snappy/snap/character_varieties.py +24 -18
  288. snappy/snap/find_field.py +35 -34
  289. snappy/snap/fundamental_polyhedron.py +99 -85
  290. snappy/snap/generators.py +6 -8
  291. snappy/snap/interval_reps.py +18 -6
  292. snappy/snap/kernel_structures.py +8 -3
  293. snappy/snap/mcomplex_base.py +1 -2
  294. snappy/snap/nsagetools.py +107 -53
  295. snappy/snap/peripheral/__init__.py +1 -1
  296. snappy/snap/peripheral/dual_cellulation.py +15 -7
  297. snappy/snap/peripheral/link.py +20 -16
  298. snappy/snap/peripheral/peripheral.py +22 -14
  299. snappy/snap/peripheral/surface.py +47 -50
  300. snappy/snap/peripheral/test.py +8 -8
  301. snappy/snap/polished_reps.py +65 -40
  302. snappy/snap/shapes.py +41 -22
  303. snappy/snap/slice_obs_HKL.py +64 -25
  304. snappy/snap/t3mlite/arrow.py +88 -51
  305. snappy/snap/t3mlite/corner.py +5 -6
  306. snappy/snap/t3mlite/edge.py +32 -21
  307. snappy/snap/t3mlite/face.py +7 -9
  308. snappy/snap/t3mlite/files.py +31 -23
  309. snappy/snap/t3mlite/homology.py +14 -10
  310. snappy/snap/t3mlite/linalg.py +158 -56
  311. snappy/snap/t3mlite/mcomplex.py +739 -291
  312. snappy/snap/t3mlite/perm4.py +236 -84
  313. snappy/snap/t3mlite/setup.py +9 -10
  314. snappy/snap/t3mlite/simplex.py +65 -48
  315. snappy/snap/t3mlite/spun.py +42 -30
  316. snappy/snap/t3mlite/surface.py +45 -45
  317. snappy/snap/t3mlite/test.py +3 -0
  318. snappy/snap/t3mlite/test_vs_regina.py +17 -13
  319. snappy/snap/t3mlite/tetrahedron.py +25 -24
  320. snappy/snap/t3mlite/vertex.py +8 -13
  321. snappy/snap/test.py +45 -52
  322. snappy/snap/utilities.py +66 -65
  323. snappy/test.py +155 -158
  324. snappy/test_cases.py +263 -0
  325. snappy/testing.py +131 -0
  326. snappy/tiling/__init__.py +2 -0
  327. snappy/tiling/canonical_key_dict.py +59 -0
  328. snappy/tiling/dict_based_set.py +79 -0
  329. snappy/tiling/floor.py +49 -0
  330. snappy/tiling/hyperboloid_dict.py +54 -0
  331. snappy/tiling/iter_utils.py +78 -0
  332. snappy/tiling/lifted_tetrahedron.py +22 -0
  333. snappy/tiling/lifted_tetrahedron_set.py +54 -0
  334. snappy/tiling/real_hash_dict.py +164 -0
  335. snappy/tiling/test.py +23 -0
  336. snappy/tiling/tile.py +215 -0
  337. snappy/tiling/triangle.py +33 -0
  338. snappy/tkterminal.py +313 -203
  339. snappy/twister/main.py +1 -8
  340. snappy/twister/twister_core.cpython-38-darwin.so +0 -0
  341. snappy/upper_halfspace/__init__.py +146 -0
  342. snappy/upper_halfspace/ideal_point.py +26 -0
  343. snappy/verify/__init__.py +4 -8
  344. snappy/verify/{verifyCanonical.py → canonical.py} +114 -97
  345. snappy/verify/complex_volume/__init__.py +3 -2
  346. snappy/verify/complex_volume/adjust_torsion.py +13 -11
  347. snappy/verify/complex_volume/closed.py +29 -24
  348. snappy/verify/complex_volume/compute_ptolemys.py +8 -6
  349. snappy/verify/complex_volume/cusped.py +10 -9
  350. snappy/verify/complex_volume/extended_bloch.py +14 -12
  351. snappy/verify/{cuspTranslations.py → cusp_translations.py} +15 -14
  352. snappy/verify/edge_equations.py +80 -0
  353. snappy/verify/exceptions.py +23 -56
  354. snappy/verify/{verifyHyperbolicity.py → hyperbolicity.py} +19 -15
  355. snappy/verify/interval_newton_shapes_engine.py +51 -211
  356. snappy/verify/interval_tree.py +27 -25
  357. snappy/verify/krawczyk_shapes_engine.py +47 -50
  358. snappy/verify/maximal_cusp_area_matrix/__init__.py +17 -86
  359. snappy/verify/maximal_cusp_area_matrix/cusp_tiling_engine.py +58 -48
  360. snappy/verify/maximal_cusp_area_matrix/cusp_translate_engine.py +53 -57
  361. snappy/verify/{realAlgebra.py → real_algebra.py} +26 -20
  362. snappy/verify/shapes.py +10 -7
  363. snappy/verify/short_slopes.py +41 -42
  364. snappy/verify/{squareExtensions.py → square_extensions.py} +96 -92
  365. snappy/verify/test.py +59 -57
  366. snappy/verify/upper_halfspace/extended_matrix.py +5 -5
  367. snappy/verify/upper_halfspace/finite_point.py +44 -31
  368. snappy/verify/upper_halfspace/ideal_point.py +69 -57
  369. snappy/verify/volume.py +15 -12
  370. snappy/version.py +2 -3
  371. {snappy-3.0.3.dist-info → snappy-3.2.dist-info}/METADATA +14 -12
  372. snappy-3.2.dist-info/RECORD +503 -0
  373. {snappy-3.0.3.dist-info → snappy-3.2.dist-info}/WHEEL +1 -1
  374. {snappy-3.0.3.dist-info → snappy-3.2.dist-info}/entry_points.txt +0 -1
  375. {snappy-3.0.3.dist-info → snappy-3.2.dist-info}/top_level.txt +10 -1
  376. snappy/doc/_sources/verify_canon.rst.txt +0 -90
  377. snappy/doc/_static/classic.css +0 -266
  378. snappy/doc/_static/jquery-3.5.1.js +0 -10872
  379. snappy/doc/_static/sidebar.js +0 -159
  380. snappy/doc/_static/underscore-1.13.1.js +0 -2042
  381. snappy/doc/_static/underscore.js +0 -6
  382. snappy/doc/verify_canon.html +0 -283
  383. snappy/ppm_to_png.py +0 -243
  384. snappy/togl/__init__.py +0 -3
  385. snappy/togl/darwin-tk8.6/Togl2.1/LICENSE +0 -28
  386. snappy/togl/darwin-tk8.6/Togl2.1/libTogl2.1.dylib +0 -0
  387. snappy/togl/darwin-tk8.6/Togl2.1/pkgIndex.tcl +0 -5
  388. snappy/togl/linux2-x86_64-tk8.6/Togl2.1/LICENSE +0 -28
  389. snappy/togl/linux2-x86_64-tk8.6/Togl2.1/libTogl2.1.so +0 -0
  390. snappy/togl/linux2-x86_64-tk8.6/Togl2.1/pkgIndex.tcl +0 -5
  391. snappy/togl/win32VC-tk8.6/Togl2.1/LICENSE +0 -28
  392. snappy/togl/win32VC-tk8.6/Togl2.1/Togl21.dll +0 -0
  393. snappy/togl/win32VC-tk8.6/Togl2.1/Togl21.lib +0 -0
  394. snappy/togl/win32VC-tk8.6/Togl2.1/pkgIndex.tcl +0 -6
  395. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/LICENSE +0 -28
  396. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/Togl21.dll +0 -0
  397. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/Togl21.lib +0 -0
  398. snappy/togl/win32VC-x86_64-tk8.6/Togl2.1/pkgIndex.tcl +0 -6
  399. snappy/verify/cuspCrossSection.py +0 -1413
  400. snappy/verify/mathHelpers.py +0 -64
  401. snappy-3.0.3.dist-info/RECORD +0 -360
@@ -1,16 +1,15 @@
1
- from snappy import snap
2
- from snappy.sage_helper import _within_sage, SageNotAvailable
1
+ from .. import snap
2
+ from ..matrix import make_identity_matrix, make_matrix, make_vector
3
+
4
+ from ..sage_helper import _within_sage, sage_method
3
5
 
4
6
  if _within_sage:
5
- from sage.rings.complex_interval_field import ComplexIntervalField
6
- from sage.rings.real_mpfi import RealIntervalField
7
- from sage.all import ComplexDoubleField
8
- from sage.all import matrix
9
- from sage.modules.free_module_element import vector
7
+ from ..sage_helper import ComplexDoubleField, ComplexIntervalField, RealIntervalField
10
8
  from snappy.pari import prec_dec_to_bits
11
9
 
12
10
  __all__ = ['KrawczykShapesEngine']
13
11
 
12
+
14
13
  class KrawczykShapesEngine:
15
14
 
16
15
  """
@@ -37,14 +36,14 @@ class KrawczykShapesEngine:
37
36
  We simply use Sage's complex interval type avoiding the need of
38
37
  converting n x n complex matrices into 2n x 2n real matrices as
39
38
  described Section 3.4 of the HIKMOT paper.
40
-
39
+
41
40
  2. We avoid automatic differentiation. We pick an independent set of
42
41
  equations of the following form and try to solve them:
43
42
 
44
43
  log(LHS) = 0
45
44
 
46
45
  where
47
-
46
+
48
47
  LHS = c * z0^a0 * (1-z0)^b0 * z1^a1 * (1-z1)^b1 * ...
49
48
 
50
49
  with a, b and c's as returned by Manifold.gluing_equations('rect').
@@ -52,14 +51,14 @@ class KrawczykShapesEngine:
52
51
  The derivative of log (LHS) with respect to zj is simply given by
53
52
 
54
53
  aj/zj - bj/(1-zj)
55
-
54
+
56
55
  and thus no need for automatic differentiation.
57
56
 
58
57
  3. For speed-up, the approximate inverse is always computed with
59
58
  double's. Some intermediate matrix computations are performed sparsely.
60
59
 
61
60
  In contrast to HIKMOT, we use and return Sage's native implementation of
62
- (complex) interval arithmetic here, which allows for increased interoperability.
61
+ (complex) interval arithmetic here, which allows for increased interoperability.
63
62
  Another advantage is that Sage supports arbitrary precision.
64
63
 
65
64
  Here is an example how to explicitly invoke the KrawczykShapesEngine::
@@ -72,15 +71,15 @@ class KrawczykShapesEngine:
72
71
  (0.6623589786223730129805? + 0.5622795120623012438992?*I, 0.6623589786223730129805? + 0.5622795120623012438992?*I, 0.6623589786223730129805? + 0.5622795120623012438992?*I)
73
72
 
74
73
  And here an example where the initial solution is somewhat off::
75
-
74
+
76
75
  sage: M = Manifold("m019")
77
- sage: shapes = [ 0.78+0.91j, 0.79+0.92j, 0.5 + 0.63j ]
78
- sage: C = KrawczykShapesEngine(M, shapes, bits_prec = 80)
76
+ sage: shapes = [0.780559+0.91449j, 0.780559+0.9144j, 0.46009+0.639j]
77
+ sage: C = KrawczykShapesEngine(M, shapes, bits_prec = 100)
79
78
  sage: C.expand_until_certified()
80
79
  True
81
- sage: C.certified_shapes
82
- (0.78? + 0.92?*I, 0.78? + 0.92?*I, 0.46? + 0.64?*I)
83
-
80
+ sage: C.certified_shapes # doctest: +ELLIPSIS
81
+ (0.7806? + 0.9145?*I, 0.7806? + 0.9145?*I, 0.460...? + 0.6326?*I)
82
+
84
83
  """
85
84
 
86
85
  def log_gluing_LHSs(self, shapes):
@@ -149,8 +148,8 @@ class KrawczykShapesEngine:
149
148
 
150
149
  # Take log of the entire product
151
150
  gluing_LHSs.append(prod.log())
152
-
153
- return vector(BaseField, gluing_LHSs)
151
+
152
+ return make_vector(gluing_LHSs, ring=BaseField)
154
153
 
155
154
  def log_gluing_LHS_derivatives(self, shapes):
156
155
  """
@@ -170,38 +169,38 @@ class KrawczykShapesEngine:
170
169
  [ 0.292? - 1.6666?*I 0.292? - 1.6666?*I 0.752? - 1.0340?*I]
171
170
  [ 0.5400? - 0.6327?*I 0.5400? - 0.6327?*I -1.561? - 1.8290?*I]
172
171
  [ 0.5400? - 0.6327?*I -0.5400? + 0.6327?*I 0]
173
-
172
+
174
173
  """
175
174
 
176
175
  # Similar to log_gluing_LHS
177
176
  BaseField = shapes[0].parent()
178
177
  zero = BaseField(0)
179
- one = BaseField(1)
180
-
178
+ one = BaseField(1)
179
+
181
180
  # 1 / z for each shape z
182
- shape_inverses = [ one / shape for shape in shapes ]
181
+ shape_inverses = [ one / shape for shape in shapes ]
183
182
 
184
183
  # 1 / (1-z) for each shape z
185
- one_minus_shape_inverses = [ one / (one - shape) for shape in shapes ]
184
+ one_minus_shape_inverses = [ one / (one - shape) for shape in shapes ]
186
185
 
187
186
  gluing_LHS_derivatives = []
188
187
  for A, B, c in self.equations:
189
188
  row = []
190
- for a, b, shape_inverse, one_minus_shape_inverse in zip(
189
+ for a, b, shape_inverse, one_minus_shape_inverse in zip(
191
190
  A, B, shape_inverses, one_minus_shape_inverses):
192
191
  # Equation for the derivative
193
192
  # derivative = ( a / z - b / (1-z) )
194
193
  derivative = zero
195
194
  if not a == 0:
196
- derivative = BaseField(int(a)) * shape_inverse
195
+ derivative = BaseField(int(a)) * shape_inverse
197
196
  if not b == 0:
198
197
  derivative -= BaseField(int(b)) * one_minus_shape_inverse
199
198
 
200
199
  row.append( derivative )
201
-
200
+
202
201
  gluing_LHS_derivatives.append(row)
203
-
204
- return matrix(BaseField, gluing_LHS_derivatives)
202
+
203
+ return make_matrix(gluing_LHS_derivatives, ring=BaseField)
205
204
 
206
205
  def log_gluing_LHS_derivatives_sparse(self, shapes):
207
206
  """
@@ -214,8 +213,8 @@ class KrawczykShapesEngine:
214
213
  # Similar to log_gluing_LHS
215
214
  BaseField = shapes[0].parent()
216
215
  zero = BaseField(0)
217
- one = BaseField(1)
218
-
216
+ one = BaseField(1)
217
+
219
218
  gluing_LHS_derivatives = []
220
219
 
221
220
  # For each shape z
@@ -228,13 +227,13 @@ class KrawczykShapesEngine:
228
227
  for r, (a, b) in eqns_column:
229
228
  derivative = zero
230
229
  if not a == 0:
231
- derivative = BaseField(int(a)) * shape_inverse
230
+ derivative = BaseField(int(a)) * shape_inverse
232
231
  if not b == 0:
233
232
  derivative -= BaseField(int(b)) * one_minus_shape_inverse
234
233
  column.append((r, derivative))
235
234
  gluing_LHS_derivatives.append(column)
236
235
  return gluing_LHS_derivatives
237
-
236
+
238
237
  @staticmethod
239
238
  def matrix_times_sparse(m, sparse_m):
240
239
  """
@@ -253,7 +252,7 @@ class KrawczykShapesEngine:
253
252
  v += d * row[r]
254
253
  result_row.append(v)
255
254
  rows.append(result_row)
256
- return matrix(CIF, rows)
255
+ return make_matrix(rows, ring=CIF)
257
256
 
258
257
  @staticmethod
259
258
  def interval_vector_mid_points(vec):
@@ -270,7 +269,7 @@ class KrawczykShapesEngine:
270
269
  """
271
270
  Compute the interval in the Krawczyk test.
272
271
 
273
- It is given as
272
+ It is given as
274
273
 
275
274
  K(z0, [z], f) := z0 - c * f(z0) + (Id - c * df([z])) * ([z] - z0)
276
275
 
@@ -280,7 +279,7 @@ class KrawczykShapesEngine:
280
279
  - f is the function taking the shapes to the errors of the logarithmic gluing equations
281
280
  - c is an approximate inverse of df
282
281
  - df([z]) is the derivative of f (interval-)evaluated for [z]
283
-
282
+
284
283
  Note that z0 in self.initial_shapes which are complex intervals
285
284
  containing only one value (the candidate solution given initially).
286
285
 
@@ -289,6 +288,7 @@ class KrawczykShapesEngine:
289
288
 
290
289
  Do several Krawczyk operations to get a better solution::
291
290
 
291
+ sage: from sage.all import vector
292
292
  sage: M = Manifold("m019")
293
293
  sage: shapes = vector(ComplexIntervalField(53), [ 0.5+0.8j, 0.5+0.8j, 0.5+0.8j])
294
294
  sage: for i in range(15):
@@ -307,7 +307,7 @@ class KrawczykShapesEngine:
307
307
  # Compute c * df([z])
308
308
  p = KrawczykShapesEngine.matrix_times_sparse(
309
309
  self.approx_inverse, derivative)
310
-
310
+
311
311
  # Compute Id - c * df([z])
312
312
  diff = self.identity - p
313
313
 
@@ -351,9 +351,10 @@ class KrawczykShapesEngine:
351
351
  i.e., the smallest interval containing both intervals.
352
352
  """
353
353
 
354
- return vector([a.union(b) for a, b in zip(vecA, vecB)])
354
+ return make_vector([a.union(b) for a, b in zip(vecA, vecB)])
355
355
 
356
- def __init__(self, M, initial_shapes, bits_prec = None, dec_prec = None):
356
+ @sage_method
357
+ def __init__(self, M, initial_shapes, bits_prec=None, dec_prec=None):
357
358
  """
358
359
  Initializes the KrawczykShapesEngine given an orientable SnapPy
359
360
  Manifold M, approximated solutions initial_shapes to the
@@ -388,18 +389,14 @@ class KrawczykShapesEngine:
388
389
 
389
390
 
390
391
  Or some non-hyperbolic manifolds::
391
-
392
- sage: Manifold("t02333(1,0)").tetrahedra_shapes(intervals = True)
392
+
393
+ sage: Manifold("t02333(1,0)").tetrahedra_shapes(intervals = True) # doctest: +SKIP
393
394
  Traceback (most recent call last):
394
395
  ...
395
396
  RuntimeError: Could not certify shape intervals, either there are degenerate shapes or the precision must be increased.
396
397
 
397
398
  """
398
399
 
399
- # Require sage
400
- if not _within_sage:
401
- raise SageNotAvailable("Sorry, the verify module can only be used within Sage")
402
-
403
400
  # Convert to precision in bits if necessary
404
401
  if dec_prec:
405
402
  self.prec = prec_dec_to_bits(dec_prec)
@@ -417,14 +414,14 @@ class KrawczykShapesEngine:
417
414
  raise Exception("Manifold needs to be orientable")
418
415
 
419
416
  # Initialize the shape intervals, they have zero length
420
- self.initial_shapes = vector(
417
+ self.initial_shapes = make_vector(
421
418
  [self.CIF(shape) for shape in initial_shapes])
422
-
419
+
423
420
  # Get an independent set of gluing equations from snap
424
421
  self.equations = snap.shapes.enough_gluing_equations(M)
425
422
  self._make_sparse_equations()
426
423
 
427
- self.identity = matrix.identity(self.CIF, len(self.initial_shapes))
424
+ self.identity = make_identity_matrix(ring=self.CIF, n=len(self.initial_shapes))
428
425
 
429
426
  CDF = ComplexDoubleField()
430
427
 
@@ -465,7 +462,7 @@ class KrawczykShapesEngine:
465
462
  """
466
463
  return shapes.apply_map(lambda z: z + (z - z) / 64)
467
464
 
468
- def expand_until_certified(self, verbose = False):
465
+ def expand_until_certified(self, verbose=False):
469
466
  """
470
467
  Try Krawczyk iterations (i.e., expanding the shape intervals [z]
471
468
  by the Krawczyk interval K(z0, [z], f)) until we can certify they
@@ -475,7 +472,7 @@ class KrawczykShapesEngine:
475
472
  certified_shapes.
476
473
  Set verbose = True for printing additional information.
477
474
  """
478
-
475
+
479
476
  # Initialize the interval shapes to be the initial shapes
480
477
  shapes = self.initial_shapes
481
478
 
@@ -1,32 +1,25 @@
1
- from ...sage_helper import _within_sage, sage_method
2
- from ..cuspCrossSection import ComplexCuspCrossSection
3
- from ..shapes import compute_hyperbolic_shapes
4
- from ..mathHelpers import interval_aware_min
5
- from .cusp_tiling_engine import *
1
+ from ...sage_helper import sage_method
2
+ from ...matrix import matrix
6
3
 
7
- if _within_sage:
8
- from sage.all import matrix
4
+ from .cusp_tiling_engine import *
9
5
 
10
- __all__ = ['verified_maximal_cusp_area_matrix',
11
- 'triangulation_dependent_cusp_area_matrix']
6
+ __all__ = ['legacy_verified_maximal_cusp_area_matrix']
12
7
 
13
8
  @sage_method
14
- def verified_maximal_cusp_area_matrix(snappy_manifold, bits_prec = None):
9
+ def legacy_verified_maximal_cusp_area_matrix(snappy_manifold, bits_prec=None):
15
10
  """
16
-
17
- sage: from snappy import Manifold
18
- sage: M = Manifold("s776")
19
- sage: verified_maximal_cusp_area_matrix(M) # doctest: +NUMERIC6
20
- [28.0000000000? 7.00000000000? 7.00000000000?]
21
- [7.00000000000? 28.000000000? 7.00000000000?]
22
- [7.00000000000? 7.00000000000? 28.000000000?]
23
-
11
+ TESTS::
12
+
13
+ sage: from snappy import Manifold
14
+ sage: M = Manifold("s776")
15
+ sage: legacy_verified_maximal_cusp_area_matrix(M) # doctest: +NUMERIC6
16
+ [28.0000000000? 7.00000000000? 7.00000000000?]
17
+ [7.00000000000? 28.000000000? 7.00000000000?]
18
+ [7.00000000000? 7.00000000000? 28.000000000?]
24
19
  """
25
-
26
-
27
20
  hyperbolic, shapes = snappy_manifold.verify_hyperbolicity(
28
- bits_prec = bits_prec)
29
-
21
+ bits_prec=bits_prec)
22
+
30
23
  if not hyperbolic:
31
24
  raise Exception("Could not compute shape intervals for: "
32
25
  "triangulation does not hyperbolic structure or "
@@ -42,74 +35,12 @@ def verified_maximal_cusp_area_matrix(snappy_manifold, bits_prec = None):
42
35
  rows[i][j] = v
43
36
  rows[j][i] = v
44
37
 
45
- return _to_matrix(rows)
46
-
47
- def triangulation_dependent_cusp_area_matrix(
48
- snappy_manifold, verified, bits_prec = None):
49
- """
50
-
51
- Interesting case: t12521
52
-
53
- Maximal cusp area matrix:
54
-
55
- [ 77.5537626509970512653317518641810890989543820290380458409? 11.40953140648583915022197187043644048603871960228564151087?]
56
- [11.40953140648583915022197187043644048603871960228564151087? 91.1461442179608339668518063027198489593908228325190920?]
57
-
58
- This result:
59
-
60
- [ 77.553762651? 11.409531407?]
61
- [ 11.409531407? 5.508968850234?]
62
-
63
- After M.canonize:
64
- [ 62.42018359? 11.409531407?]
65
- [ 11.409531407? 15.1140644993?]
38
+ return matrix(rows)
66
39
 
67
-
68
-
69
- """
70
-
71
- # Get shapes, as intervals if requested
72
- shapes = compute_hyperbolic_shapes(
73
- snappy_manifold, verified = verified, bits_prec = bits_prec)
74
-
75
- # Compute cusp cross section, the code is agnostic about whether
76
- # the numbers are floating-point or intervals.
77
- # Note that the constructed cusp cross section will always be too "large"
78
- # and we need to scale them down (since during construction the
79
- # cross-section of each cusp will have one edge of length 1, the
80
- # corresponding tetrahedron does not intersect in "standard" form.)
81
- c = ComplexCuspCrossSection.fromManifoldAndShapes(snappy_manifold, shapes)
82
-
83
- # If no areas are given, scale (up or down) all the cusps so that
84
- # they are in standard form.
85
- c.ensure_std_form(allow_scaling_up = True)
86
-
87
- areas = c.cusp_areas()
88
- RIF = areas[0].parent()
89
-
90
- def entry(i, j):
91
- if i > j:
92
- i, j = j, i
93
- result = areas[i] * areas[j]
94
- if (i, j) in c._edge_dict:
95
- result *= interval_aware_min(
96
- [ RIF(1), ComplexCuspCrossSection._exp_distance_of_edges(
97
- c._edge_dict[(i,j)])]) ** 2
98
- return result
99
-
100
- return _to_matrix([[entry(i, j) for i in range(len(areas))]
101
- for j in range(len(areas))])
102
-
103
- def _to_matrix(m):
104
- # delayed import to avoid cycles
105
- from snappy.SnapPy import matrix
106
-
107
- return matrix(m)
108
-
109
40
  def _doctest():
110
41
  import doctest
111
42
  doctest.testmod()
112
43
 
44
+
113
45
  if __name__ == '__main__':
114
46
  _doctest()
115
-