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
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * Sphinx JavaScript utilities for the full-text search.
6
6
  *
7
- * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
7
+ * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS.
8
8
  * :license: BSD, see LICENSE for details.
9
9
  *
10
10
  */
@@ -57,12 +57,12 @@ const _removeChildren = (element) => {
57
57
  const _escapeRegExp = (string) =>
58
58
  string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
59
59
 
60
- const _displayItem = (item, searchTerms) => {
60
+ const _displayItem = (item, searchTerms, highlightTerms) => {
61
61
  const docBuilder = DOCUMENTATION_OPTIONS.BUILDER;
62
- const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT;
63
62
  const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX;
64
63
  const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX;
65
64
  const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY;
65
+ const contentRoot = document.documentElement.dataset.content_root;
66
66
 
67
67
  const [docName, title, anchor, descr, score, _filename] = item;
68
68
 
@@ -75,28 +75,35 @@ const _displayItem = (item, searchTerms) => {
75
75
  if (dirname.match(/\/index\/$/))
76
76
  dirname = dirname.substring(0, dirname.length - 6);
77
77
  else if (dirname === "index/") dirname = "";
78
- requestUrl = docUrlRoot + dirname;
78
+ requestUrl = contentRoot + dirname;
79
79
  linkUrl = requestUrl;
80
80
  } else {
81
81
  // normal html builders
82
- requestUrl = docUrlRoot + docName + docFileSuffix;
82
+ requestUrl = contentRoot + docName + docFileSuffix;
83
83
  linkUrl = docName + docLinkSuffix;
84
84
  }
85
85
  let linkEl = listItem.appendChild(document.createElement("a"));
86
86
  linkEl.href = linkUrl + anchor;
87
87
  linkEl.dataset.score = score;
88
88
  linkEl.innerHTML = title;
89
- if (descr)
89
+ if (descr) {
90
90
  listItem.appendChild(document.createElement("span")).innerHTML =
91
91
  " (" + descr + ")";
92
+ // highlight search terms in the description
93
+ if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js
94
+ highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted"));
95
+ }
92
96
  else if (showSearchSummary)
93
97
  fetch(requestUrl)
94
98
  .then((responseData) => responseData.text())
95
99
  .then((data) => {
96
100
  if (data)
97
101
  listItem.appendChild(
98
- Search.makeSearchSummary(data, searchTerms)
102
+ Search.makeSearchSummary(data, searchTerms, anchor)
99
103
  );
104
+ // highlight search terms in the summary
105
+ if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js
106
+ highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted"));
100
107
  });
101
108
  Search.output.appendChild(listItem);
102
109
  };
@@ -109,26 +116,43 @@ const _finishSearch = (resultCount) => {
109
116
  );
110
117
  else
111
118
  Search.status.innerText = _(
112
- `Search finished, found ${resultCount} page(s) matching the search query.`
113
- );
119
+ "Search finished, found ${resultCount} page(s) matching the search query."
120
+ ).replace('${resultCount}', resultCount);
114
121
  };
115
122
  const _displayNextItem = (
116
123
  results,
117
124
  resultCount,
118
- searchTerms
125
+ searchTerms,
126
+ highlightTerms,
119
127
  ) => {
120
128
  // results left, load the summary and display it
121
129
  // this is intended to be dynamic (don't sub resultsCount)
122
130
  if (results.length) {
123
- _displayItem(results.pop(), searchTerms);
131
+ _displayItem(results.pop(), searchTerms, highlightTerms);
124
132
  setTimeout(
125
- () => _displayNextItem(results, resultCount, searchTerms),
133
+ () => _displayNextItem(results, resultCount, searchTerms, highlightTerms),
126
134
  5
127
135
  );
128
136
  }
129
137
  // search finished, update title and status message
130
138
  else _finishSearch(resultCount);
131
139
  };
140
+ // Helper function used by query() to order search results.
141
+ // Each input is an array of [docname, title, anchor, descr, score, filename].
142
+ // Order the results by score (in opposite order of appearance, since the
143
+ // `_displayNextItem` function uses pop() to retrieve items) and then alphabetically.
144
+ const _orderResultsByScoreThenName = (a, b) => {
145
+ const leftScore = a[4];
146
+ const rightScore = b[4];
147
+ if (leftScore === rightScore) {
148
+ // same score: sort alphabetically
149
+ const leftTitle = a[1].toLowerCase();
150
+ const rightTitle = b[1].toLowerCase();
151
+ if (leftTitle === rightTitle) return 0;
152
+ return leftTitle > rightTitle ? -1 : 1; // inverted is intentional
153
+ }
154
+ return leftScore > rightScore ? 1 : -1;
155
+ };
132
156
 
133
157
  /**
134
158
  * Default splitQuery function. Can be overridden in ``sphinx.search`` with a
@@ -152,13 +176,26 @@ const Search = {
152
176
  _queued_query: null,
153
177
  _pulse_status: -1,
154
178
 
155
- htmlToText: (htmlString) => {
179
+ htmlToText: (htmlString, anchor) => {
156
180
  const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html');
157
- htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() });
181
+ for (const removalQuery of [".headerlink", "script", "style"]) {
182
+ htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() });
183
+ }
184
+ if (anchor) {
185
+ const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`);
186
+ if (anchorContent) return anchorContent.textContent;
187
+
188
+ console.warn(
189
+ `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.`
190
+ );
191
+ }
192
+
193
+ // if anchor not specified or not found, fall back to main content
158
194
  const docContent = htmlElement.querySelector('[role="main"]');
159
- if (docContent !== undefined) return docContent.textContent;
195
+ if (docContent) return docContent.textContent;
196
+
160
197
  console.warn(
161
- "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template."
198
+ "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template."
162
199
  );
163
200
  return "";
164
201
  },
@@ -231,16 +268,7 @@ const Search = {
231
268
  else Search.deferQuery(query);
232
269
  },
233
270
 
234
- /**
235
- * execute search (requires search index to be loaded)
236
- */
237
- query: (query) => {
238
- const filenames = Search._index.filenames;
239
- const docNames = Search._index.docnames;
240
- const titles = Search._index.titles;
241
- const allTitles = Search._index.alltitles;
242
- const indexEntries = Search._index.indexentries;
243
-
271
+ _parseQuery: (query) => {
244
272
  // stem the search terms and add them to the correct list
245
273
  const stemmer = new Stemmer();
246
274
  const searchTerms = new Set();
@@ -276,21 +304,38 @@ const Search = {
276
304
  // console.info("required: ", [...searchTerms]);
277
305
  // console.info("excluded: ", [...excludedTerms]);
278
306
 
279
- // array of [docname, title, anchor, descr, score, filename]
280
- let results = [];
307
+ return [query, searchTerms, excludedTerms, highlightTerms, objectTerms];
308
+ },
309
+
310
+ /**
311
+ * execute search (requires search index to be loaded)
312
+ */
313
+ _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => {
314
+ const filenames = Search._index.filenames;
315
+ const docNames = Search._index.docnames;
316
+ const titles = Search._index.titles;
317
+ const allTitles = Search._index.alltitles;
318
+ const indexEntries = Search._index.indexentries;
319
+
320
+ // Collect multiple result groups to be sorted separately and then ordered.
321
+ // Each is an array of [docname, title, anchor, descr, score, filename].
322
+ const normalResults = [];
323
+ const nonMainIndexResults = [];
324
+
281
325
  _removeChildren(document.getElementById("search-progress"));
282
326
 
283
- const queryLower = query.toLowerCase();
327
+ const queryLower = query.toLowerCase().trim();
284
328
  for (const [title, foundTitles] of Object.entries(allTitles)) {
285
- if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) {
329
+ if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) {
286
330
  for (const [file, id] of foundTitles) {
287
- let score = Math.round(100 * queryLower.length / title.length)
288
- results.push([
331
+ const score = Math.round(Scorer.title * queryLower.length / title.length);
332
+ const boost = titles[file] === title ? 1 : 0; // add a boost for document titles
333
+ normalResults.push([
289
334
  docNames[file],
290
335
  titles[file] !== title ? `${titles[file]} > ${title}` : title,
291
336
  id !== null ? "#" + id : "",
292
337
  null,
293
- score,
338
+ score + boost,
294
339
  filenames[file],
295
340
  ]);
296
341
  }
@@ -300,46 +345,47 @@ const Search = {
300
345
  // search for explicit entries in index directives
301
346
  for (const [entry, foundEntries] of Object.entries(indexEntries)) {
302
347
  if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) {
303
- for (const [file, id] of foundEntries) {
304
- let score = Math.round(100 * queryLower.length / entry.length)
305
- results.push([
348
+ for (const [file, id, isMain] of foundEntries) {
349
+ const score = Math.round(100 * queryLower.length / entry.length);
350
+ const result = [
306
351
  docNames[file],
307
352
  titles[file],
308
353
  id ? "#" + id : "",
309
354
  null,
310
355
  score,
311
356
  filenames[file],
312
- ]);
357
+ ];
358
+ if (isMain) {
359
+ normalResults.push(result);
360
+ } else {
361
+ nonMainIndexResults.push(result);
362
+ }
313
363
  }
314
364
  }
315
365
  }
316
366
 
317
367
  // lookup as object
318
368
  objectTerms.forEach((term) =>
319
- results.push(...Search.performObjectSearch(term, objectTerms))
369
+ normalResults.push(...Search.performObjectSearch(term, objectTerms))
320
370
  );
321
371
 
322
372
  // lookup as search terms in fulltext
323
- results.push(...Search.performTermsSearch(searchTerms, excludedTerms));
373
+ normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms));
324
374
 
325
375
  // let the scorer override scores with a custom scoring function
326
- if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item)));
327
-
328
- // now sort the results by score (in opposite order of appearance, since the
329
- // display function below uses pop() to retrieve items) and then
330
- // alphabetically
331
- results.sort((a, b) => {
332
- const leftScore = a[4];
333
- const rightScore = b[4];
334
- if (leftScore === rightScore) {
335
- // same score: sort alphabetically
336
- const leftTitle = a[1].toLowerCase();
337
- const rightTitle = b[1].toLowerCase();
338
- if (leftTitle === rightTitle) return 0;
339
- return leftTitle > rightTitle ? -1 : 1; // inverted is intentional
340
- }
341
- return leftScore > rightScore ? 1 : -1;
342
- });
376
+ if (Scorer.score) {
377
+ normalResults.forEach((item) => (item[4] = Scorer.score(item)));
378
+ nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item)));
379
+ }
380
+
381
+ // Sort each group of results by score and then alphabetically by name.
382
+ normalResults.sort(_orderResultsByScoreThenName);
383
+ nonMainIndexResults.sort(_orderResultsByScoreThenName);
384
+
385
+ // Combine the result groups in (reverse) order.
386
+ // Non-main index entries are typically arbitrary cross-references,
387
+ // so display them after other results.
388
+ let results = [...nonMainIndexResults, ...normalResults];
343
389
 
344
390
  // remove duplicate search results
345
391
  // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept
@@ -353,14 +399,19 @@ const Search = {
353
399
  return acc;
354
400
  }, []);
355
401
 
356
- results = results.reverse();
402
+ return results.reverse();
403
+ },
404
+
405
+ query: (query) => {
406
+ const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query);
407
+ const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms);
357
408
 
358
409
  // for debugging
359
410
  //Search.lastresults = results.slice(); // a copy
360
411
  // console.info("search results:", Search.lastresults);
361
412
 
362
413
  // print the results
363
- _displayNextItem(results, results.length, searchTerms);
414
+ _displayNextItem(results, results.length, searchTerms, highlightTerms);
364
415
  },
365
416
 
366
417
  /**
@@ -458,14 +509,18 @@ const Search = {
458
509
  // add support for partial matches
459
510
  if (word.length > 2) {
460
511
  const escapedWord = _escapeRegExp(word);
461
- Object.keys(terms).forEach((term) => {
462
- if (term.match(escapedWord) && !terms[word])
463
- arr.push({ files: terms[term], score: Scorer.partialTerm });
464
- });
465
- Object.keys(titleTerms).forEach((term) => {
466
- if (term.match(escapedWord) && !titleTerms[word])
467
- arr.push({ files: titleTerms[word], score: Scorer.partialTitle });
468
- });
512
+ if (!terms.hasOwnProperty(word)) {
513
+ Object.keys(terms).forEach((term) => {
514
+ if (term.match(escapedWord))
515
+ arr.push({ files: terms[term], score: Scorer.partialTerm });
516
+ });
517
+ }
518
+ if (!titleTerms.hasOwnProperty(word)) {
519
+ Object.keys(titleTerms).forEach((term) => {
520
+ if (term.match(escapedWord))
521
+ arr.push({ files: titleTerms[term], score: Scorer.partialTitle });
522
+ });
523
+ }
469
524
  }
470
525
 
471
526
  // no match but word was a required one
@@ -488,9 +543,8 @@ const Search = {
488
543
 
489
544
  // create the mapping
490
545
  files.forEach((file) => {
491
- if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1)
492
- fileMap.get(file).push(word);
493
- else fileMap.set(file, [word]);
546
+ if (!fileMap.has(file)) fileMap.set(file, [word]);
547
+ else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word);
494
548
  });
495
549
  });
496
550
 
@@ -541,8 +595,8 @@ const Search = {
541
595
  * search summary for a given text. keywords is a list
542
596
  * of stemmed words.
543
597
  */
544
- makeSearchSummary: (htmlText, keywords) => {
545
- const text = Search.htmlToText(htmlText);
598
+ makeSearchSummary: (htmlText, keywords, anchor) => {
599
+ const text = Search.htmlToText(htmlText, anchor);
546
600
  if (text === "") return null;
547
601
 
548
602
  const textLower = text.toLowerCase();
@@ -1,33 +1,33 @@
1
-
2
- /* Downsize the headings, e.g. for furo */
3
-
4
- h1 {
5
- font-size: 1.75em;
6
- margin-bottom: 1rem
7
- }
8
-
9
- h1,h2 {
10
- margin-top: 1.75rem
11
- }
12
-
13
- h2 {
14
- font-size: 1.5em
15
- }
16
-
17
- h3 {
18
- font-size: 1.3em
19
- }
20
-
21
- h4 {
22
- font-size: 1.2em
23
- }
24
-
25
- h5 {
26
- font-size: 1.1em
27
- }
28
-
29
- h6 {
30
- font-size: 1em
31
- }
32
-
33
- /* end downsized headings */
1
+
2
+ /* Downsize the headings, e.g. for furo */
3
+
4
+ h1 {
5
+ font-size: 1.75em;
6
+ margin-bottom: 1rem
7
+ }
8
+
9
+ h1,h2 {
10
+ margin-top: 1.75rem
11
+ }
12
+
13
+ h2 {
14
+ font-size: 1.5em
15
+ }
16
+
17
+ h3 {
18
+ font-size: 1.3em
19
+ }
20
+
21
+ h4 {
22
+ font-size: 1.2em
23
+ }
24
+
25
+ h5 {
26
+ font-size: 1.1em
27
+ }
28
+
29
+ h6 {
30
+ font-size: 1em
31
+ }
32
+
33
+ /* end downsized headings */
@@ -1,42 +1,42 @@
1
- h1, h2, h3, h4, h5, h6 {
2
- font-family: Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;
3
- }
4
-
5
- .wy-side-nav-search>a {
6
- color: black;
7
- }
8
-
9
- .wy-side-nav-search>div.version{
10
- color: black;
11
- }
12
-
13
- .wy-side-nav-search {
14
- color: black;
15
- background-color: #e8f8e8;
16
- }
17
-
18
- .wy-nav-top {
19
- background-color: #80a080;
20
- }
21
-
22
- .wy-nav-side {
23
- background-color: #80a080;
24
- }
25
-
26
- .wy-menu-vertical a {
27
- color: white;
28
- }
29
-
30
- .wy-menu-vertical li.current>a {
31
- color: black;
32
- }
33
-
34
- .wy-nav-content {
35
- max-width: none;
36
- background-color: white;
37
- color: black;
38
- }
39
-
40
- footer {
41
- color: black;
42
- }
1
+ h1, h2, h3, h4, h5, h6 {
2
+ font-family: Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;
3
+ }
4
+
5
+ .wy-side-nav-search>a {
6
+ color: black;
7
+ }
8
+
9
+ .wy-side-nav-search>div.version{
10
+ color: black;
11
+ }
12
+
13
+ .wy-side-nav-search {
14
+ color: black;
15
+ background-color: #e8f8e8;
16
+ }
17
+
18
+ .wy-nav-top {
19
+ background-color: #80a080;
20
+ }
21
+
22
+ .wy-nav-side {
23
+ background-color: #80a080;
24
+ }
25
+
26
+ .wy-menu-vertical a {
27
+ color: white;
28
+ }
29
+
30
+ .wy-menu-vertical li.current>a {
31
+ color: black;
32
+ }
33
+
34
+ .wy-nav-content {
35
+ max-width: none;
36
+ background-color: white;
37
+ color: black;
38
+ }
39
+
40
+ footer {
41
+ color: black;
42
+ }
@@ -29,14 +29,19 @@ const _highlight = (node, addItems, text, className) => {
29
29
  }
30
30
 
31
31
  span.appendChild(document.createTextNode(val.substr(pos, text.length)));
32
+ const rest = document.createTextNode(val.substr(pos + text.length));
32
33
  parent.insertBefore(
33
34
  span,
34
35
  parent.insertBefore(
35
- document.createTextNode(val.substr(pos + text.length)),
36
+ rest,
36
37
  node.nextSibling
37
38
  )
38
39
  );
39
40
  node.nodeValue = val.substr(0, pos);
41
+ /* There may be more occurrences of search term in this node. So call this
42
+ * function recursively on the remaining fragment.
43
+ */
44
+ _highlight(rest, addItems, text, className);
40
45
 
41
46
  if (isInSVG) {
42
47
  const rect = document.createElementNS(
@@ -140,5 +145,10 @@ const SphinxHighlight = {
140
145
  },
141
146
  };
142
147
 
143
- _ready(SphinxHighlight.highlightSearchWords);
144
- _ready(SphinxHighlight.initEscapeListener);
148
+ _ready(() => {
149
+ /* Do not call highlightSearchWords() when we are on the search page.
150
+ * It will highlight words from the *previous* search query.
151
+ */
152
+ if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords();
153
+ SphinxHighlight.initEscapeListener();
154
+ });