snappy 3.1__cp39-cp39-win_amd64.whl → 3.2__cp39-cp39-win_amd64.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (476) hide show
  1. snappy/CyOpenGL.cp39-win_amd64.pyd +0 -0
  2. snappy/SnapPy.cp39-win_amd64.pyd +0 -0
  3. snappy/SnapPyHP.cp39-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 -70
  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 -180
  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 +116 -86
  271. snappy/twister/main.py +1 -7
  272. snappy/twister/twister_core.cp39-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.dist-info → snappy-3.2.dist-info}/METADATA +26 -11
  301. snappy-3.2.dist-info/RECORD +503 -0
  302. {snappy-3.1.dist-info → snappy-3.2.dist-info}/WHEEL +1 -1
  303. {snappy-3.1.dist-info → snappy-3.2.dist-info}/top_level.txt +6 -1
  304. snappy/__pycache__/__init__.cpython-39.pyc +0 -0
  305. snappy/__pycache__/browser.cpython-39.pyc +0 -0
  306. snappy/__pycache__/cache.cpython-39.pyc +0 -0
  307. snappy/__pycache__/database.cpython-39.pyc +0 -0
  308. snappy/__pycache__/db_utilities.cpython-39.pyc +0 -0
  309. snappy/__pycache__/decorated_isosig.cpython-39.pyc +0 -0
  310. snappy/__pycache__/exceptions.cpython-39.pyc +0 -0
  311. snappy/__pycache__/export_stl.cpython-39.pyc +0 -0
  312. snappy/__pycache__/filedialog.cpython-39.pyc +0 -0
  313. snappy/__pycache__/gui.cpython-39.pyc +0 -0
  314. snappy/__pycache__/horoviewer.cpython-39.pyc +0 -0
  315. snappy/__pycache__/math_basics.cpython-39.pyc +0 -0
  316. snappy/__pycache__/matrix.cpython-39.pyc +0 -0
  317. snappy/__pycache__/number.cpython-39.pyc +0 -0
  318. snappy/__pycache__/numeric_output_checker.cpython-39.pyc +0 -0
  319. snappy/__pycache__/pari.cpython-39.pyc +0 -0
  320. snappy/__pycache__/polyviewer.cpython-39.pyc +0 -0
  321. snappy/__pycache__/sage_helper.cpython-39.pyc +0 -0
  322. snappy/__pycache__/version.cpython-39.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-39.pyc +0 -0
  331. snappy/drilling/__pycache__/constants.cpython-39.pyc +0 -0
  332. snappy/drilling/__pycache__/crush.cpython-39.pyc +0 -0
  333. snappy/drilling/__pycache__/cusps.cpython-39.pyc +0 -0
  334. snappy/drilling/__pycache__/debug.cpython-39.pyc +0 -0
  335. snappy/drilling/__pycache__/epsilons.cpython-39.pyc +0 -0
  336. snappy/drilling/__pycache__/exceptions.cpython-39.pyc +0 -0
  337. snappy/drilling/__pycache__/fixed_points.cpython-39.pyc +0 -0
  338. snappy/drilling/__pycache__/geodesic_info.cpython-39.pyc +0 -0
  339. snappy/drilling/__pycache__/geodesic_tube.cpython-39.pyc +0 -0
  340. snappy/drilling/__pycache__/geometric_structure.cpython-39.pyc +0 -0
  341. snappy/drilling/__pycache__/line.cpython-39.pyc +0 -0
  342. snappy/drilling/__pycache__/moves.cpython-39.pyc +0 -0
  343. snappy/drilling/__pycache__/peripheral_curves.cpython-39.pyc +0 -0
  344. snappy/drilling/__pycache__/perturb.cpython-39.pyc +0 -0
  345. snappy/drilling/__pycache__/quotient_space.cpython-39.pyc +0 -0
  346. snappy/drilling/__pycache__/spatial_dict.cpython-39.pyc +0 -0
  347. snappy/drilling/__pycache__/subdivide.cpython-39.pyc +0 -0
  348. snappy/drilling/__pycache__/tracing.cpython-39.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-39.pyc +0 -0
  355. snappy/exterior_to_link/__pycache__/barycentric_geometry.cpython-39.pyc +0 -0
  356. snappy/exterior_to_link/__pycache__/exceptions.cpython-39.pyc +0 -0
  357. snappy/exterior_to_link/__pycache__/hyp_utils.cpython-39.pyc +0 -0
  358. snappy/exterior_to_link/__pycache__/link_projection.cpython-39.pyc +0 -0
  359. snappy/exterior_to_link/__pycache__/main.cpython-39.pyc +0 -0
  360. snappy/exterior_to_link/__pycache__/mcomplex_with_expansion.cpython-39.pyc +0 -0
  361. snappy/exterior_to_link/__pycache__/mcomplex_with_link.cpython-39.pyc +0 -0
  362. snappy/exterior_to_link/__pycache__/mcomplex_with_memory.cpython-39.pyc +0 -0
  363. snappy/exterior_to_link/__pycache__/pl_utils.cpython-39.pyc +0 -0
  364. snappy/exterior_to_link/__pycache__/put_in_S3.cpython-39.pyc +0 -0
  365. snappy/exterior_to_link/__pycache__/rational_linear_algebra.cpython-39.pyc +0 -0
  366. snappy/exterior_to_link/__pycache__/simplify_to_base_tri.cpython-39.pyc +0 -0
  367. snappy/exterior_to_link/__pycache__/stored_moves.cpython-39.pyc +0 -0
  368. snappy/hyperboloid/__pycache__/__init__.cpython-39.pyc +0 -0
  369. snappy/manifolds/__pycache__/__init__.cpython-39.pyc +0 -0
  370. snappy/ptolemy/__pycache__/__init__.cpython-39.pyc +0 -0
  371. snappy/ptolemy/__pycache__/component.cpython-39.pyc +0 -0
  372. snappy/ptolemy/__pycache__/coordinates.cpython-39.pyc +0 -0
  373. snappy/ptolemy/__pycache__/fieldExtensions.cpython-39.pyc +0 -0
  374. snappy/ptolemy/__pycache__/findLoops.cpython-39.pyc +0 -0
  375. snappy/ptolemy/__pycache__/homology.cpython-39.pyc +0 -0
  376. snappy/ptolemy/__pycache__/manifoldMethods.cpython-39.pyc +0 -0
  377. snappy/ptolemy/__pycache__/matrix.cpython-39.pyc +0 -0
  378. snappy/ptolemy/__pycache__/numericalSolutionsToGroebnerBasis.cpython-39.pyc +0 -0
  379. snappy/ptolemy/__pycache__/polynomial.cpython-39.pyc +0 -0
  380. snappy/ptolemy/__pycache__/processComponents.cpython-39.pyc +0 -0
  381. snappy/ptolemy/__pycache__/processFileBase.cpython-39.pyc +0 -0
  382. snappy/ptolemy/__pycache__/processFileDispatch.cpython-39.pyc +0 -0
  383. snappy/ptolemy/__pycache__/processMagmaFile.cpython-39.pyc +0 -0
  384. snappy/ptolemy/__pycache__/processRurFile.cpython-39.pyc +0 -0
  385. snappy/ptolemy/__pycache__/ptolemyGeneralizedObstructionClass.cpython-39.pyc +0 -0
  386. snappy/ptolemy/__pycache__/ptolemyObstructionClass.cpython-39.pyc +0 -0
  387. snappy/ptolemy/__pycache__/ptolemyVariety.cpython-39.pyc +0 -0
  388. snappy/ptolemy/__pycache__/ptolemyVarietyPrimeIdealGroebnerBasis.cpython-39.pyc +0 -0
  389. snappy/ptolemy/__pycache__/rur.cpython-39.pyc +0 -0
  390. snappy/ptolemy/__pycache__/solutionsToPrimeIdealGroebnerBasis.cpython-39.pyc +0 -0
  391. snappy/ptolemy/__pycache__/utilities.cpython-39.pyc +0 -0
  392. snappy/snap/__pycache__/__init__.cpython-39.pyc +0 -0
  393. snappy/snap/__pycache__/character_varieties.cpython-39.pyc +0 -0
  394. snappy/snap/__pycache__/fundamental_polyhedron.cpython-39.pyc +0 -0
  395. snappy/snap/__pycache__/interval_reps.cpython-39.pyc +0 -0
  396. snappy/snap/__pycache__/kernel_structures.cpython-39.pyc +0 -0
  397. snappy/snap/__pycache__/mcomplex_base.cpython-39.pyc +0 -0
  398. snappy/snap/__pycache__/nsagetools.cpython-39.pyc +0 -0
  399. snappy/snap/__pycache__/polished_reps.cpython-39.pyc +0 -0
  400. snappy/snap/__pycache__/shapes.cpython-39.pyc +0 -0
  401. snappy/snap/__pycache__/slice_obs_HKL.cpython-39.pyc +0 -0
  402. snappy/snap/__pycache__/utilities.cpython-39.pyc +0 -0
  403. snappy/snap/peripheral/__pycache__/__init__.cpython-39.pyc +0 -0
  404. snappy/snap/peripheral/__pycache__/dual_cellulation.cpython-39.pyc +0 -0
  405. snappy/snap/peripheral/__pycache__/link.cpython-39.pyc +0 -0
  406. snappy/snap/peripheral/__pycache__/peripheral.cpython-39.pyc +0 -0
  407. snappy/snap/peripheral/__pycache__/surface.cpython-39.pyc +0 -0
  408. snappy/snap/t3mlite/__pycache__/__init__.cpython-39.pyc +0 -0
  409. snappy/snap/t3mlite/__pycache__/arrow.cpython-39.pyc +0 -0
  410. snappy/snap/t3mlite/__pycache__/corner.cpython-39.pyc +0 -0
  411. snappy/snap/t3mlite/__pycache__/edge.cpython-39.pyc +0 -0
  412. snappy/snap/t3mlite/__pycache__/face.cpython-39.pyc +0 -0
  413. snappy/snap/t3mlite/__pycache__/files.cpython-39.pyc +0 -0
  414. snappy/snap/t3mlite/__pycache__/homology.cpython-39.pyc +0 -0
  415. snappy/snap/t3mlite/__pycache__/linalg.cpython-39.pyc +0 -0
  416. snappy/snap/t3mlite/__pycache__/mcomplex.cpython-39.pyc +0 -0
  417. snappy/snap/t3mlite/__pycache__/perm4.cpython-39.pyc +0 -0
  418. snappy/snap/t3mlite/__pycache__/simplex.cpython-39.pyc +0 -0
  419. snappy/snap/t3mlite/__pycache__/spun.cpython-39.pyc +0 -0
  420. snappy/snap/t3mlite/__pycache__/surface.cpython-39.pyc +0 -0
  421. snappy/snap/t3mlite/__pycache__/tetrahedron.cpython-39.pyc +0 -0
  422. snappy/snap/t3mlite/__pycache__/vertex.cpython-39.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-39.pyc +0 -0
  442. snappy/twister/__pycache__/main.cpython-39.pyc +0 -0
  443. snappy/upper_halfspace/__pycache__/__init__.cpython-39.pyc +0 -0
  444. snappy/upper_halfspace/__pycache__/ideal_point.cpython-39.pyc +0 -0
  445. snappy/verify/__pycache__/__init__.cpython-39.pyc +0 -0
  446. snappy/verify/__pycache__/cuspCrossSection.cpython-39.pyc +0 -0
  447. snappy/verify/__pycache__/cuspTranslations.cpython-39.pyc +0 -0
  448. snappy/verify/__pycache__/cusp_areas.cpython-39.pyc +0 -0
  449. snappy/verify/__pycache__/cusp_shapes.cpython-39.pyc +0 -0
  450. snappy/verify/__pycache__/exceptions.cpython-39.pyc +0 -0
  451. snappy/verify/__pycache__/interval_newton_shapes_engine.cpython-39.pyc +0 -0
  452. snappy/verify/__pycache__/interval_tree.cpython-39.pyc +0 -0
  453. snappy/verify/__pycache__/krawczyk_shapes_engine.cpython-39.pyc +0 -0
  454. snappy/verify/__pycache__/realAlgebra.cpython-39.pyc +0 -0
  455. snappy/verify/__pycache__/shapes.cpython-39.pyc +0 -0
  456. snappy/verify/__pycache__/short_slopes.cpython-39.pyc +0 -0
  457. snappy/verify/__pycache__/squareExtensions.cpython-39.pyc +0 -0
  458. snappy/verify/__pycache__/verifyCanonical.cpython-39.pyc +0 -0
  459. snappy/verify/__pycache__/verifyHyperbolicity.cpython-39.pyc +0 -0
  460. snappy/verify/__pycache__/volume.cpython-39.pyc +0 -0
  461. snappy/verify/complex_volume/__pycache__/__init__.cpython-39.pyc +0 -0
  462. snappy/verify/complex_volume/__pycache__/adjust_torsion.cpython-39.pyc +0 -0
  463. snappy/verify/complex_volume/__pycache__/closed.cpython-39.pyc +0 -0
  464. snappy/verify/complex_volume/__pycache__/compute_ptolemys.cpython-39.pyc +0 -0
  465. snappy/verify/complex_volume/__pycache__/cusped.cpython-39.pyc +0 -0
  466. snappy/verify/complex_volume/__pycache__/extended_bloch.cpython-39.pyc +0 -0
  467. snappy/verify/cuspCrossSection.py +0 -1422
  468. snappy/verify/maximal_cusp_area_matrix/__pycache__/__init__.cpython-39.pyc +0 -0
  469. snappy/verify/maximal_cusp_area_matrix/__pycache__/cusp_tiling_engine.cpython-39.pyc +0 -0
  470. snappy/verify/maximal_cusp_area_matrix/__pycache__/cusp_translate_engine.cpython-39.pyc +0 -0
  471. snappy/verify/upper_halfspace/__pycache__/__init__.cpython-39.pyc +0 -0
  472. snappy/verify/upper_halfspace/__pycache__/extended_matrix.cpython-39.pyc +0 -0
  473. snappy/verify/upper_halfspace/__pycache__/finite_point.cpython-39.pyc +0 -0
  474. snappy/verify/upper_halfspace/__pycache__/ideal_point.cpython-39.pyc +0 -0
  475. snappy-3.1.dist-info/RECORD +0 -575
  476. {snappy-3.1.dist-info → snappy-3.2.dist-info}/entry_points.txt +0 -0
@@ -1,2042 +0,0 @@
1
- (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
3
- typeof define === 'function' && define.amd ? define('underscore', factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (function () {
5
- var current = global._;
6
- var exports = global._ = factory();
7
- exports.noConflict = function () { global._ = current; return exports; };
8
- }()));
9
- }(this, (function () {
10
- // Underscore.js 1.13.1
11
- // https://underscorejs.org
12
- // (c) 2009-2021 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors
13
- // Underscore may be freely distributed under the MIT license.
14
-
15
- // Current version.
16
- var VERSION = '1.13.1';
17
-
18
- // Establish the root object, `window` (`self`) in the browser, `global`
19
- // on the server, or `this` in some virtual machines. We use `self`
20
- // instead of `window` for `WebWorker` support.
21
- var root = typeof self == 'object' && self.self === self && self ||
22
- typeof global == 'object' && global.global === global && global ||
23
- Function('return this')() ||
24
- {};
25
-
26
- // Save bytes in the minified (but not gzipped) version:
27
- var ArrayProto = Array.prototype, ObjProto = Object.prototype;
28
- var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;
29
-
30
- // Create quick reference variables for speed access to core prototypes.
31
- var push = ArrayProto.push,
32
- slice = ArrayProto.slice,
33
- toString = ObjProto.toString,
34
- hasOwnProperty = ObjProto.hasOwnProperty;
35
-
36
- // Modern feature detection.
37
- var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined',
38
- supportsDataView = typeof DataView !== 'undefined';
39
-
40
- // All **ECMAScript 5+** native function implementations that we hope to use
41
- // are declared here.
42
- var nativeIsArray = Array.isArray,
43
- nativeKeys = Object.keys,
44
- nativeCreate = Object.create,
45
- nativeIsView = supportsArrayBuffer && ArrayBuffer.isView;
46
-
47
- // Create references to these builtin functions because we override them.
48
- var _isNaN = isNaN,
49
- _isFinite = isFinite;
50
-
51
- // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.
52
- var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');
53
- var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',
54
- 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];
55
-
56
- // The largest integer that can be represented exactly.
57
- var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;
58
-
59
- // Some functions take a variable number of arguments, or a few expected
60
- // arguments at the beginning and then a variable number of values to operate
61
- // on. This helper accumulates all remaining arguments past the function’s
62
- // argument length (or an explicit `startIndex`), into an array that becomes
63
- // the last argument. Similar to ES6’s "rest parameter".
64
- function restArguments(func, startIndex) {
65
- startIndex = startIndex == null ? func.length - 1 : +startIndex;
66
- return function() {
67
- var length = Math.max(arguments.length - startIndex, 0),
68
- rest = Array(length),
69
- index = 0;
70
- for (; index < length; index++) {
71
- rest[index] = arguments[index + startIndex];
72
- }
73
- switch (startIndex) {
74
- case 0: return func.call(this, rest);
75
- case 1: return func.call(this, arguments[0], rest);
76
- case 2: return func.call(this, arguments[0], arguments[1], rest);
77
- }
78
- var args = Array(startIndex + 1);
79
- for (index = 0; index < startIndex; index++) {
80
- args[index] = arguments[index];
81
- }
82
- args[startIndex] = rest;
83
- return func.apply(this, args);
84
- };
85
- }
86
-
87
- // Is a given variable an object?
88
- function isObject(obj) {
89
- var type = typeof obj;
90
- return type === 'function' || type === 'object' && !!obj;
91
- }
92
-
93
- // Is a given value equal to null?
94
- function isNull(obj) {
95
- return obj === null;
96
- }
97
-
98
- // Is a given variable undefined?
99
- function isUndefined(obj) {
100
- return obj === void 0;
101
- }
102
-
103
- // Is a given value a boolean?
104
- function isBoolean(obj) {
105
- return obj === true || obj === false || toString.call(obj) === '[object Boolean]';
106
- }
107
-
108
- // Is a given value a DOM element?
109
- function isElement(obj) {
110
- return !!(obj && obj.nodeType === 1);
111
- }
112
-
113
- // Internal function for creating a `toString`-based type tester.
114
- function tagTester(name) {
115
- var tag = '[object ' + name + ']';
116
- return function(obj) {
117
- return toString.call(obj) === tag;
118
- };
119
- }
120
-
121
- var isString = tagTester('String');
122
-
123
- var isNumber = tagTester('Number');
124
-
125
- var isDate = tagTester('Date');
126
-
127
- var isRegExp = tagTester('RegExp');
128
-
129
- var isError = tagTester('Error');
130
-
131
- var isSymbol = tagTester('Symbol');
132
-
133
- var isArrayBuffer = tagTester('ArrayBuffer');
134
-
135
- var isFunction = tagTester('Function');
136
-
137
- // Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old
138
- // v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).
139
- var nodelist = root.document && root.document.childNodes;
140
- if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {
141
- isFunction = function(obj) {
142
- return typeof obj == 'function' || false;
143
- };
144
- }
145
-
146
- var isFunction$1 = isFunction;
147
-
148
- var hasObjectTag = tagTester('Object');
149
-
150
- // In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`.
151
- // In IE 11, the most common among them, this problem also applies to
152
- // `Map`, `WeakMap` and `Set`.
153
- var hasStringTagBug = (
154
- supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8)))
155
- ),
156
- isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map));
157
-
158
- var isDataView = tagTester('DataView');
159
-
160
- // In IE 10 - Edge 13, we need a different heuristic
161
- // to determine whether an object is a `DataView`.
162
- function ie10IsDataView(obj) {
163
- return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer);
164
- }
165
-
166
- var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView);
167
-
168
- // Is a given value an array?
169
- // Delegates to ECMA5's native `Array.isArray`.
170
- var isArray = nativeIsArray || tagTester('Array');
171
-
172
- // Internal function to check whether `key` is an own property name of `obj`.
173
- function has$1(obj, key) {
174
- return obj != null && hasOwnProperty.call(obj, key);
175
- }
176
-
177
- var isArguments = tagTester('Arguments');
178
-
179
- // Define a fallback version of the method in browsers (ahem, IE < 9), where
180
- // there isn't any inspectable "Arguments" type.
181
- (function() {
182
- if (!isArguments(arguments)) {
183
- isArguments = function(obj) {
184
- return has$1(obj, 'callee');
185
- };
186
- }
187
- }());
188
-
189
- var isArguments$1 = isArguments;
190
-
191
- // Is a given object a finite number?
192
- function isFinite$1(obj) {
193
- return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj));
194
- }
195
-
196
- // Is the given value `NaN`?
197
- function isNaN$1(obj) {
198
- return isNumber(obj) && _isNaN(obj);
199
- }
200
-
201
- // Predicate-generating function. Often useful outside of Underscore.
202
- function constant(value) {
203
- return function() {
204
- return value;
205
- };
206
- }
207
-
208
- // Common internal logic for `isArrayLike` and `isBufferLike`.
209
- function createSizePropertyCheck(getSizeProperty) {
210
- return function(collection) {
211
- var sizeProperty = getSizeProperty(collection);
212
- return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX;
213
- }
214
- }
215
-
216
- // Internal helper to generate a function to obtain property `key` from `obj`.
217
- function shallowProperty(key) {
218
- return function(obj) {
219
- return obj == null ? void 0 : obj[key];
220
- };
221
- }
222
-
223
- // Internal helper to obtain the `byteLength` property of an object.
224
- var getByteLength = shallowProperty('byteLength');
225
-
226
- // Internal helper to determine whether we should spend extensive checks against
227
- // `ArrayBuffer` et al.
228
- var isBufferLike = createSizePropertyCheck(getByteLength);
229
-
230
- // Is a given value a typed array?
231
- var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/;
232
- function isTypedArray(obj) {
233
- // `ArrayBuffer.isView` is the most future-proof, so use it when available.
234
- // Otherwise, fall back on the above regular expression.
235
- return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) :
236
- isBufferLike(obj) && typedArrayPattern.test(toString.call(obj));
237
- }
238
-
239
- var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false);
240
-
241
- // Internal helper to obtain the `length` property of an object.
242
- var getLength = shallowProperty('length');
243
-
244
- // Internal helper to create a simple lookup structure.
245
- // `collectNonEnumProps` used to depend on `_.contains`, but this led to
246
- // circular imports. `emulatedSet` is a one-off solution that only works for
247
- // arrays of strings.
248
- function emulatedSet(keys) {
249
- var hash = {};
250
- for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true;
251
- return {
252
- contains: function(key) { return hash[key]; },
253
- push: function(key) {
254
- hash[key] = true;
255
- return keys.push(key);
256
- }
257
- };
258
- }
259
-
260
- // Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't
261
- // be iterated by `for key in ...` and thus missed. Extends `keys` in place if
262
- // needed.
263
- function collectNonEnumProps(obj, keys) {
264
- keys = emulatedSet(keys);
265
- var nonEnumIdx = nonEnumerableProps.length;
266
- var constructor = obj.constructor;
267
- var proto = isFunction$1(constructor) && constructor.prototype || ObjProto;
268
-
269
- // Constructor is a special case.
270
- var prop = 'constructor';
271
- if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop);
272
-
273
- while (nonEnumIdx--) {
274
- prop = nonEnumerableProps[nonEnumIdx];
275
- if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) {
276
- keys.push(prop);
277
- }
278
- }
279
- }
280
-
281
- // Retrieve the names of an object's own properties.
282
- // Delegates to **ECMAScript 5**'s native `Object.keys`.
283
- function keys(obj) {
284
- if (!isObject(obj)) return [];
285
- if (nativeKeys) return nativeKeys(obj);
286
- var keys = [];
287
- for (var key in obj) if (has$1(obj, key)) keys.push(key);
288
- // Ahem, IE < 9.
289
- if (hasEnumBug) collectNonEnumProps(obj, keys);
290
- return keys;
291
- }
292
-
293
- // Is a given array, string, or object empty?
294
- // An "empty" object has no enumerable own-properties.
295
- function isEmpty(obj) {
296
- if (obj == null) return true;
297
- // Skip the more expensive `toString`-based type checks if `obj` has no
298
- // `.length`.
299
- var length = getLength(obj);
300
- if (typeof length == 'number' && (
301
- isArray(obj) || isString(obj) || isArguments$1(obj)
302
- )) return length === 0;
303
- return getLength(keys(obj)) === 0;
304
- }
305
-
306
- // Returns whether an object has a given set of `key:value` pairs.
307
- function isMatch(object, attrs) {
308
- var _keys = keys(attrs), length = _keys.length;
309
- if (object == null) return !length;
310
- var obj = Object(object);
311
- for (var i = 0; i < length; i++) {
312
- var key = _keys[i];
313
- if (attrs[key] !== obj[key] || !(key in obj)) return false;
314
- }
315
- return true;
316
- }
317
-
318
- // If Underscore is called as a function, it returns a wrapped object that can
319
- // be used OO-style. This wrapper holds altered versions of all functions added
320
- // through `_.mixin`. Wrapped objects may be chained.
321
- function _$1(obj) {
322
- if (obj instanceof _$1) return obj;
323
- if (!(this instanceof _$1)) return new _$1(obj);
324
- this._wrapped = obj;
325
- }
326
-
327
- _$1.VERSION = VERSION;
328
-
329
- // Extracts the result from a wrapped and chained object.
330
- _$1.prototype.value = function() {
331
- return this._wrapped;
332
- };
333
-
334
- // Provide unwrapping proxies for some methods used in engine operations
335
- // such as arithmetic and JSON stringification.
336
- _$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value;
337
-
338
- _$1.prototype.toString = function() {
339
- return String(this._wrapped);
340
- };
341
-
342
- // Internal function to wrap or shallow-copy an ArrayBuffer,
343
- // typed array or DataView to a new view, reusing the buffer.
344
- function toBufferView(bufferSource) {
345
- return new Uint8Array(
346
- bufferSource.buffer || bufferSource,
347
- bufferSource.byteOffset || 0,
348
- getByteLength(bufferSource)
349
- );
350
- }
351
-
352
- // We use this string twice, so give it a name for minification.
353
- var tagDataView = '[object DataView]';
354
-
355
- // Internal recursive comparison function for `_.isEqual`.
356
- function eq(a, b, aStack, bStack) {
357
- // Identical objects are equal. `0 === -0`, but they aren't identical.
358
- // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal).
359
- if (a === b) return a !== 0 || 1 / a === 1 / b;
360
- // `null` or `undefined` only equal to itself (strict comparison).
361
- if (a == null || b == null) return false;
362
- // `NaN`s are equivalent, but non-reflexive.
363
- if (a !== a) return b !== b;
364
- // Exhaust primitive checks
365
- var type = typeof a;
366
- if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;
367
- return deepEq(a, b, aStack, bStack);
368
- }
369
-
370
- // Internal recursive comparison function for `_.isEqual`.
371
- function deepEq(a, b, aStack, bStack) {
372
- // Unwrap any wrapped objects.
373
- if (a instanceof _$1) a = a._wrapped;
374
- if (b instanceof _$1) b = b._wrapped;
375
- // Compare `[[Class]]` names.
376
- var className = toString.call(a);
377
- if (className !== toString.call(b)) return false;
378
- // Work around a bug in IE 10 - Edge 13.
379
- if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) {
380
- if (!isDataView$1(b)) return false;
381
- className = tagDataView;
382
- }
383
- switch (className) {
384
- // These types are compared by value.
385
- case '[object RegExp]':
386
- // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')
387
- case '[object String]':
388
- // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
389
- // equivalent to `new String("5")`.
390
- return '' + a === '' + b;
391
- case '[object Number]':
392
- // `NaN`s are equivalent, but non-reflexive.
393
- // Object(NaN) is equivalent to NaN.
394
- if (+a !== +a) return +b !== +b;
395
- // An `egal` comparison is performed for other numeric values.
396
- return +a === 0 ? 1 / +a === 1 / b : +a === +b;
397
- case '[object Date]':
398
- case '[object Boolean]':
399
- // Coerce dates and booleans to numeric primitive values. Dates are compared by their
400
- // millisecond representations. Note that invalid dates with millisecond representations
401
- // of `NaN` are not equivalent.
402
- return +a === +b;
403
- case '[object Symbol]':
404
- return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);
405
- case '[object ArrayBuffer]':
406
- case tagDataView:
407
- // Coerce to typed array so we can fall through.
408
- return deepEq(toBufferView(a), toBufferView(b), aStack, bStack);
409
- }
410
-
411
- var areArrays = className === '[object Array]';
412
- if (!areArrays && isTypedArray$1(a)) {
413
- var byteLength = getByteLength(a);
414
- if (byteLength !== getByteLength(b)) return false;
415
- if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true;
416
- areArrays = true;
417
- }
418
- if (!areArrays) {
419
- if (typeof a != 'object' || typeof b != 'object') return false;
420
-
421
- // Objects with different constructors are not equivalent, but `Object`s or `Array`s
422
- // from different frames are.
423
- var aCtor = a.constructor, bCtor = b.constructor;
424
- if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor &&
425
- isFunction$1(bCtor) && bCtor instanceof bCtor)
426
- && ('constructor' in a && 'constructor' in b)) {
427
- return false;
428
- }
429
- }
430
- // Assume equality for cyclic structures. The algorithm for detecting cyclic
431
- // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
432
-
433
- // Initializing stack of traversed objects.
434
- // It's done here since we only need them for objects and arrays comparison.
435
- aStack = aStack || [];
436
- bStack = bStack || [];
437
- var length = aStack.length;
438
- while (length--) {
439
- // Linear search. Performance is inversely proportional to the number of
440
- // unique nested structures.
441
- if (aStack[length] === a) return bStack[length] === b;
442
- }
443
-
444
- // Add the first object to the stack of traversed objects.
445
- aStack.push(a);
446
- bStack.push(b);
447
-
448
- // Recursively compare objects and arrays.
449
- if (areArrays) {
450
- // Compare array lengths to determine if a deep comparison is necessary.
451
- length = a.length;
452
- if (length !== b.length) return false;
453
- // Deep compare the contents, ignoring non-numeric properties.
454
- while (length--) {
455
- if (!eq(a[length], b[length], aStack, bStack)) return false;
456
- }
457
- } else {
458
- // Deep compare objects.
459
- var _keys = keys(a), key;
460
- length = _keys.length;
461
- // Ensure that both objects contain the same number of properties before comparing deep equality.
462
- if (keys(b).length !== length) return false;
463
- while (length--) {
464
- // Deep compare each member
465
- key = _keys[length];
466
- if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false;
467
- }
468
- }
469
- // Remove the first object from the stack of traversed objects.
470
- aStack.pop();
471
- bStack.pop();
472
- return true;
473
- }
474
-
475
- // Perform a deep comparison to check if two objects are equal.
476
- function isEqual(a, b) {
477
- return eq(a, b);
478
- }
479
-
480
- // Retrieve all the enumerable property names of an object.
481
- function allKeys(obj) {
482
- if (!isObject(obj)) return [];
483
- var keys = [];
484
- for (var key in obj) keys.push(key);
485
- // Ahem, IE < 9.
486
- if (hasEnumBug) collectNonEnumProps(obj, keys);
487
- return keys;
488
- }
489
-
490
- // Since the regular `Object.prototype.toString` type tests don't work for
491
- // some types in IE 11, we use a fingerprinting heuristic instead, based
492
- // on the methods. It's not great, but it's the best we got.
493
- // The fingerprint method lists are defined below.
494
- function ie11fingerprint(methods) {
495
- var length = getLength(methods);
496
- return function(obj) {
497
- if (obj == null) return false;
498
- // `Map`, `WeakMap` and `Set` have no enumerable keys.
499
- var keys = allKeys(obj);
500
- if (getLength(keys)) return false;
501
- for (var i = 0; i < length; i++) {
502
- if (!isFunction$1(obj[methods[i]])) return false;
503
- }
504
- // If we are testing against `WeakMap`, we need to ensure that
505
- // `obj` doesn't have a `forEach` method in order to distinguish
506
- // it from a regular `Map`.
507
- return methods !== weakMapMethods || !isFunction$1(obj[forEachName]);
508
- };
509
- }
510
-
511
- // In the interest of compact minification, we write
512
- // each string in the fingerprints only once.
513
- var forEachName = 'forEach',
514
- hasName = 'has',
515
- commonInit = ['clear', 'delete'],
516
- mapTail = ['get', hasName, 'set'];
517
-
518
- // `Map`, `WeakMap` and `Set` each have slightly different
519
- // combinations of the above sublists.
520
- var mapMethods = commonInit.concat(forEachName, mapTail),
521
- weakMapMethods = commonInit.concat(mapTail),
522
- setMethods = ['add'].concat(commonInit, forEachName, hasName);
523
-
524
- var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map');
525
-
526
- var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap');
527
-
528
- var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set');
529
-
530
- var isWeakSet = tagTester('WeakSet');
531
-
532
- // Retrieve the values of an object's properties.
533
- function values(obj) {
534
- var _keys = keys(obj);
535
- var length = _keys.length;
536
- var values = Array(length);
537
- for (var i = 0; i < length; i++) {
538
- values[i] = obj[_keys[i]];
539
- }
540
- return values;
541
- }
542
-
543
- // Convert an object into a list of `[key, value]` pairs.
544
- // The opposite of `_.object` with one argument.
545
- function pairs(obj) {
546
- var _keys = keys(obj);
547
- var length = _keys.length;
548
- var pairs = Array(length);
549
- for (var i = 0; i < length; i++) {
550
- pairs[i] = [_keys[i], obj[_keys[i]]];
551
- }
552
- return pairs;
553
- }
554
-
555
- // Invert the keys and values of an object. The values must be serializable.
556
- function invert(obj) {
557
- var result = {};
558
- var _keys = keys(obj);
559
- for (var i = 0, length = _keys.length; i < length; i++) {
560
- result[obj[_keys[i]]] = _keys[i];
561
- }
562
- return result;
563
- }
564
-
565
- // Return a sorted list of the function names available on the object.
566
- function functions(obj) {
567
- var names = [];
568
- for (var key in obj) {
569
- if (isFunction$1(obj[key])) names.push(key);
570
- }
571
- return names.sort();
572
- }
573
-
574
- // An internal function for creating assigner functions.
575
- function createAssigner(keysFunc, defaults) {
576
- return function(obj) {
577
- var length = arguments.length;
578
- if (defaults) obj = Object(obj);
579
- if (length < 2 || obj == null) return obj;
580
- for (var index = 1; index < length; index++) {
581
- var source = arguments[index],
582
- keys = keysFunc(source),
583
- l = keys.length;
584
- for (var i = 0; i < l; i++) {
585
- var key = keys[i];
586
- if (!defaults || obj[key] === void 0) obj[key] = source[key];
587
- }
588
- }
589
- return obj;
590
- };
591
- }
592
-
593
- // Extend a given object with all the properties in passed-in object(s).
594
- var extend = createAssigner(allKeys);
595
-
596
- // Assigns a given object with all the own properties in the passed-in
597
- // object(s).
598
- // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)
599
- var extendOwn = createAssigner(keys);
600
-
601
- // Fill in a given object with default properties.
602
- var defaults = createAssigner(allKeys, true);
603
-
604
- // Create a naked function reference for surrogate-prototype-swapping.
605
- function ctor() {
606
- return function(){};
607
- }
608
-
609
- // An internal function for creating a new object that inherits from another.
610
- function baseCreate(prototype) {
611
- if (!isObject(prototype)) return {};
612
- if (nativeCreate) return nativeCreate(prototype);
613
- var Ctor = ctor();
614
- Ctor.prototype = prototype;
615
- var result = new Ctor;
616
- Ctor.prototype = null;
617
- return result;
618
- }
619
-
620
- // Creates an object that inherits from the given prototype object.
621
- // If additional properties are provided then they will be added to the
622
- // created object.
623
- function create(prototype, props) {
624
- var result = baseCreate(prototype);
625
- if (props) extendOwn(result, props);
626
- return result;
627
- }
628
-
629
- // Create a (shallow-cloned) duplicate of an object.
630
- function clone(obj) {
631
- if (!isObject(obj)) return obj;
632
- return isArray(obj) ? obj.slice() : extend({}, obj);
633
- }
634
-
635
- // Invokes `interceptor` with the `obj` and then returns `obj`.
636
- // The primary purpose of this method is to "tap into" a method chain, in
637
- // order to perform operations on intermediate results within the chain.
638
- function tap(obj, interceptor) {
639
- interceptor(obj);
640
- return obj;
641
- }
642
-
643
- // Normalize a (deep) property `path` to array.
644
- // Like `_.iteratee`, this function can be customized.
645
- function toPath$1(path) {
646
- return isArray(path) ? path : [path];
647
- }
648
- _$1.toPath = toPath$1;
649
-
650
- // Internal wrapper for `_.toPath` to enable minification.
651
- // Similar to `cb` for `_.iteratee`.
652
- function toPath(path) {
653
- return _$1.toPath(path);
654
- }
655
-
656
- // Internal function to obtain a nested property in `obj` along `path`.
657
- function deepGet(obj, path) {
658
- var length = path.length;
659
- for (var i = 0; i < length; i++) {
660
- if (obj == null) return void 0;
661
- obj = obj[path[i]];
662
- }
663
- return length ? obj : void 0;
664
- }
665
-
666
- // Get the value of the (deep) property on `path` from `object`.
667
- // If any property in `path` does not exist or if the value is
668
- // `undefined`, return `defaultValue` instead.
669
- // The `path` is normalized through `_.toPath`.
670
- function get(object, path, defaultValue) {
671
- var value = deepGet(object, toPath(path));
672
- return isUndefined(value) ? defaultValue : value;
673
- }
674
-
675
- // Shortcut function for checking if an object has a given property directly on
676
- // itself (in other words, not on a prototype). Unlike the internal `has`
677
- // function, this public version can also traverse nested properties.
678
- function has(obj, path) {
679
- path = toPath(path);
680
- var length = path.length;
681
- for (var i = 0; i < length; i++) {
682
- var key = path[i];
683
- if (!has$1(obj, key)) return false;
684
- obj = obj[key];
685
- }
686
- return !!length;
687
- }
688
-
689
- // Keep the identity function around for default iteratees.
690
- function identity(value) {
691
- return value;
692
- }
693
-
694
- // Returns a predicate for checking whether an object has a given set of
695
- // `key:value` pairs.
696
- function matcher(attrs) {
697
- attrs = extendOwn({}, attrs);
698
- return function(obj) {
699
- return isMatch(obj, attrs);
700
- };
701
- }
702
-
703
- // Creates a function that, when passed an object, will traverse that object’s
704
- // properties down the given `path`, specified as an array of keys or indices.
705
- function property(path) {
706
- path = toPath(path);
707
- return function(obj) {
708
- return deepGet(obj, path);
709
- };
710
- }
711
-
712
- // Internal function that returns an efficient (for current engines) version
713
- // of the passed-in callback, to be repeatedly applied in other Underscore
714
- // functions.
715
- function optimizeCb(func, context, argCount) {
716
- if (context === void 0) return func;
717
- switch (argCount == null ? 3 : argCount) {
718
- case 1: return function(value) {
719
- return func.call(context, value);
720
- };
721
- // The 2-argument case is omitted because we’re not using it.
722
- case 3: return function(value, index, collection) {
723
- return func.call(context, value, index, collection);
724
- };
725
- case 4: return function(accumulator, value, index, collection) {
726
- return func.call(context, accumulator, value, index, collection);
727
- };
728
- }
729
- return function() {
730
- return func.apply(context, arguments);
731
- };
732
- }
733
-
734
- // An internal function to generate callbacks that can be applied to each
735
- // element in a collection, returning the desired result — either `_.identity`,
736
- // an arbitrary callback, a property matcher, or a property accessor.
737
- function baseIteratee(value, context, argCount) {
738
- if (value == null) return identity;
739
- if (isFunction$1(value)) return optimizeCb(value, context, argCount);
740
- if (isObject(value) && !isArray(value)) return matcher(value);
741
- return property(value);
742
- }
743
-
744
- // External wrapper for our callback generator. Users may customize
745
- // `_.iteratee` if they want additional predicate/iteratee shorthand styles.
746
- // This abstraction hides the internal-only `argCount` argument.
747
- function iteratee(value, context) {
748
- return baseIteratee(value, context, Infinity);
749
- }
750
- _$1.iteratee = iteratee;
751
-
752
- // The function we call internally to generate a callback. It invokes
753
- // `_.iteratee` if overridden, otherwise `baseIteratee`.
754
- function cb(value, context, argCount) {
755
- if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context);
756
- return baseIteratee(value, context, argCount);
757
- }
758
-
759
- // Returns the results of applying the `iteratee` to each element of `obj`.
760
- // In contrast to `_.map` it returns an object.
761
- function mapObject(obj, iteratee, context) {
762
- iteratee = cb(iteratee, context);
763
- var _keys = keys(obj),
764
- length = _keys.length,
765
- results = {};
766
- for (var index = 0; index < length; index++) {
767
- var currentKey = _keys[index];
768
- results[currentKey] = iteratee(obj[currentKey], currentKey, obj);
769
- }
770
- return results;
771
- }
772
-
773
- // Predicate-generating function. Often useful outside of Underscore.
774
- function noop(){}
775
-
776
- // Generates a function for a given object that returns a given property.
777
- function propertyOf(obj) {
778
- if (obj == null) return noop;
779
- return function(path) {
780
- return get(obj, path);
781
- };
782
- }
783
-
784
- // Run a function **n** times.
785
- function times(n, iteratee, context) {
786
- var accum = Array(Math.max(0, n));
787
- iteratee = optimizeCb(iteratee, context, 1);
788
- for (var i = 0; i < n; i++) accum[i] = iteratee(i);
789
- return accum;
790
- }
791
-
792
- // Return a random integer between `min` and `max` (inclusive).
793
- function random(min, max) {
794
- if (max == null) {
795
- max = min;
796
- min = 0;
797
- }
798
- return min + Math.floor(Math.random() * (max - min + 1));
799
- }
800
-
801
- // A (possibly faster) way to get the current timestamp as an integer.
802
- var now = Date.now || function() {
803
- return new Date().getTime();
804
- };
805
-
806
- // Internal helper to generate functions for escaping and unescaping strings
807
- // to/from HTML interpolation.
808
- function createEscaper(map) {
809
- var escaper = function(match) {
810
- return map[match];
811
- };
812
- // Regexes for identifying a key that needs to be escaped.
813
- var source = '(?:' + keys(map).join('|') + ')';
814
- var testRegexp = RegExp(source);
815
- var replaceRegexp = RegExp(source, 'g');
816
- return function(string) {
817
- string = string == null ? '' : '' + string;
818
- return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;
819
- };
820
- }
821
-
822
- // Internal list of HTML entities for escaping.
823
- var escapeMap = {
824
- '&': '&amp;',
825
- '<': '&lt;',
826
- '>': '&gt;',
827
- '"': '&quot;',
828
- "'": '&#x27;',
829
- '`': '&#x60;'
830
- };
831
-
832
- // Function for escaping strings to HTML interpolation.
833
- var _escape = createEscaper(escapeMap);
834
-
835
- // Internal list of HTML entities for unescaping.
836
- var unescapeMap = invert(escapeMap);
837
-
838
- // Function for unescaping strings from HTML interpolation.
839
- var _unescape = createEscaper(unescapeMap);
840
-
841
- // By default, Underscore uses ERB-style template delimiters. Change the
842
- // following template settings to use alternative delimiters.
843
- var templateSettings = _$1.templateSettings = {
844
- evaluate: /<%([\s\S]+?)%>/g,
845
- interpolate: /<%=([\s\S]+?)%>/g,
846
- escape: /<%-([\s\S]+?)%>/g
847
- };
848
-
849
- // When customizing `_.templateSettings`, if you don't want to define an
850
- // interpolation, evaluation or escaping regex, we need one that is
851
- // guaranteed not to match.
852
- var noMatch = /(.)^/;
853
-
854
- // Certain characters need to be escaped so that they can be put into a
855
- // string literal.
856
- var escapes = {
857
- "'": "'",
858
- '\\': '\\',
859
- '\r': 'r',
860
- '\n': 'n',
861
- '\u2028': 'u2028',
862
- '\u2029': 'u2029'
863
- };
864
-
865
- var escapeRegExp = /\\|'|\r|\n|\u2028|\u2029/g;
866
-
867
- function escapeChar(match) {
868
- return '\\' + escapes[match];
869
- }
870
-
871
- // In order to prevent third-party code injection through
872
- // `_.templateSettings.variable`, we test it against the following regular
873
- // expression. It is intentionally a bit more liberal than just matching valid
874
- // identifiers, but still prevents possible loopholes through defaults or
875
- // destructuring assignment.
876
- var bareIdentifier = /^\s*(\w|\$)+\s*$/;
877
-
878
- // JavaScript micro-templating, similar to John Resig's implementation.
879
- // Underscore templating handles arbitrary delimiters, preserves whitespace,
880
- // and correctly escapes quotes within interpolated code.
881
- // NB: `oldSettings` only exists for backwards compatibility.
882
- function template(text, settings, oldSettings) {
883
- if (!settings && oldSettings) settings = oldSettings;
884
- settings = defaults({}, settings, _$1.templateSettings);
885
-
886
- // Combine delimiters into one regular expression via alternation.
887
- var matcher = RegExp([
888
- (settings.escape || noMatch).source,
889
- (settings.interpolate || noMatch).source,
890
- (settings.evaluate || noMatch).source
891
- ].join('|') + '|$', 'g');
892
-
893
- // Compile the template source, escaping string literals appropriately.
894
- var index = 0;
895
- var source = "__p+='";
896
- text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {
897
- source += text.slice(index, offset).replace(escapeRegExp, escapeChar);
898
- index = offset + match.length;
899
-
900
- if (escape) {
901
- source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'";
902
- } else if (interpolate) {
903
- source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'";
904
- } else if (evaluate) {
905
- source += "';\n" + evaluate + "\n__p+='";
906
- }
907
-
908
- // Adobe VMs need the match returned to produce the correct offset.
909
- return match;
910
- });
911
- source += "';\n";
912
-
913
- var argument = settings.variable;
914
- if (argument) {
915
- // Insure against third-party code injection. (CVE-2021-23358)
916
- if (!bareIdentifier.test(argument)) throw new Error(
917
- 'variable is not a bare identifier: ' + argument
918
- );
919
- } else {
920
- // If a variable is not specified, place data values in local scope.
921
- source = 'with(obj||{}){\n' + source + '}\n';
922
- argument = 'obj';
923
- }
924
-
925
- source = "var __t,__p='',__j=Array.prototype.join," +
926
- "print=function(){__p+=__j.call(arguments,'');};\n" +
927
- source + 'return __p;\n';
928
-
929
- var render;
930
- try {
931
- render = new Function(argument, '_', source);
932
- } catch (e) {
933
- e.source = source;
934
- throw e;
935
- }
936
-
937
- var template = function(data) {
938
- return render.call(this, data, _$1);
939
- };
940
-
941
- // Provide the compiled source as a convenience for precompilation.
942
- template.source = 'function(' + argument + '){\n' + source + '}';
943
-
944
- return template;
945
- }
946
-
947
- // Traverses the children of `obj` along `path`. If a child is a function, it
948
- // is invoked with its parent as context. Returns the value of the final
949
- // child, or `fallback` if any child is undefined.
950
- function result(obj, path, fallback) {
951
- path = toPath(path);
952
- var length = path.length;
953
- if (!length) {
954
- return isFunction$1(fallback) ? fallback.call(obj) : fallback;
955
- }
956
- for (var i = 0; i < length; i++) {
957
- var prop = obj == null ? void 0 : obj[path[i]];
958
- if (prop === void 0) {
959
- prop = fallback;
960
- i = length; // Ensure we don't continue iterating.
961
- }
962
- obj = isFunction$1(prop) ? prop.call(obj) : prop;
963
- }
964
- return obj;
965
- }
966
-
967
- // Generate a unique integer id (unique within the entire client session).
968
- // Useful for temporary DOM ids.
969
- var idCounter = 0;
970
- function uniqueId(prefix) {
971
- var id = ++idCounter + '';
972
- return prefix ? prefix + id : id;
973
- }
974
-
975
- // Start chaining a wrapped Underscore object.
976
- function chain(obj) {
977
- var instance = _$1(obj);
978
- instance._chain = true;
979
- return instance;
980
- }
981
-
982
- // Internal function to execute `sourceFunc` bound to `context` with optional
983
- // `args`. Determines whether to execute a function as a constructor or as a
984
- // normal function.
985
- function executeBound(sourceFunc, boundFunc, context, callingContext, args) {
986
- if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);
987
- var self = baseCreate(sourceFunc.prototype);
988
- var result = sourceFunc.apply(self, args);
989
- if (isObject(result)) return result;
990
- return self;
991
- }
992
-
993
- // Partially apply a function by creating a version that has had some of its
994
- // arguments pre-filled, without changing its dynamic `this` context. `_` acts
995
- // as a placeholder by default, allowing any combination of arguments to be
996
- // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.
997
- var partial = restArguments(function(func, boundArgs) {
998
- var placeholder = partial.placeholder;
999
- var bound = function() {
1000
- var position = 0, length = boundArgs.length;
1001
- var args = Array(length);
1002
- for (var i = 0; i < length; i++) {
1003
- args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];
1004
- }
1005
- while (position < arguments.length) args.push(arguments[position++]);
1006
- return executeBound(func, bound, this, this, args);
1007
- };
1008
- return bound;
1009
- });
1010
-
1011
- partial.placeholder = _$1;
1012
-
1013
- // Create a function bound to a given object (assigning `this`, and arguments,
1014
- // optionally).
1015
- var bind = restArguments(function(func, context, args) {
1016
- if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function');
1017
- var bound = restArguments(function(callArgs) {
1018
- return executeBound(func, bound, context, this, args.concat(callArgs));
1019
- });
1020
- return bound;
1021
- });
1022
-
1023
- // Internal helper for collection methods to determine whether a collection
1024
- // should be iterated as an array or as an object.
1025
- // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength
1026
- // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094
1027
- var isArrayLike = createSizePropertyCheck(getLength);
1028
-
1029
- // Internal implementation of a recursive `flatten` function.
1030
- function flatten$1(input, depth, strict, output) {
1031
- output = output || [];
1032
- if (!depth && depth !== 0) {
1033
- depth = Infinity;
1034
- } else if (depth <= 0) {
1035
- return output.concat(input);
1036
- }
1037
- var idx = output.length;
1038
- for (var i = 0, length = getLength(input); i < length; i++) {
1039
- var value = input[i];
1040
- if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) {
1041
- // Flatten current level of array or arguments object.
1042
- if (depth > 1) {
1043
- flatten$1(value, depth - 1, strict, output);
1044
- idx = output.length;
1045
- } else {
1046
- var j = 0, len = value.length;
1047
- while (j < len) output[idx++] = value[j++];
1048
- }
1049
- } else if (!strict) {
1050
- output[idx++] = value;
1051
- }
1052
- }
1053
- return output;
1054
- }
1055
-
1056
- // Bind a number of an object's methods to that object. Remaining arguments
1057
- // are the method names to be bound. Useful for ensuring that all callbacks
1058
- // defined on an object belong to it.
1059
- var bindAll = restArguments(function(obj, keys) {
1060
- keys = flatten$1(keys, false, false);
1061
- var index = keys.length;
1062
- if (index < 1) throw new Error('bindAll must be passed function names');
1063
- while (index--) {
1064
- var key = keys[index];
1065
- obj[key] = bind(obj[key], obj);
1066
- }
1067
- return obj;
1068
- });
1069
-
1070
- // Memoize an expensive function by storing its results.
1071
- function memoize(func, hasher) {
1072
- var memoize = function(key) {
1073
- var cache = memoize.cache;
1074
- var address = '' + (hasher ? hasher.apply(this, arguments) : key);
1075
- if (!has$1(cache, address)) cache[address] = func.apply(this, arguments);
1076
- return cache[address];
1077
- };
1078
- memoize.cache = {};
1079
- return memoize;
1080
- }
1081
-
1082
- // Delays a function for the given number of milliseconds, and then calls
1083
- // it with the arguments supplied.
1084
- var delay = restArguments(function(func, wait, args) {
1085
- return setTimeout(function() {
1086
- return func.apply(null, args);
1087
- }, wait);
1088
- });
1089
-
1090
- // Defers a function, scheduling it to run after the current call stack has
1091
- // cleared.
1092
- var defer = partial(delay, _$1, 1);
1093
-
1094
- // Returns a function, that, when invoked, will only be triggered at most once
1095
- // during a given window of time. Normally, the throttled function will run
1096
- // as much as it can, without ever going more than once per `wait` duration;
1097
- // but if you'd like to disable the execution on the leading edge, pass
1098
- // `{leading: false}`. To disable execution on the trailing edge, ditto.
1099
- function throttle(func, wait, options) {
1100
- var timeout, context, args, result;
1101
- var previous = 0;
1102
- if (!options) options = {};
1103
-
1104
- var later = function() {
1105
- previous = options.leading === false ? 0 : now();
1106
- timeout = null;
1107
- result = func.apply(context, args);
1108
- if (!timeout) context = args = null;
1109
- };
1110
-
1111
- var throttled = function() {
1112
- var _now = now();
1113
- if (!previous && options.leading === false) previous = _now;
1114
- var remaining = wait - (_now - previous);
1115
- context = this;
1116
- args = arguments;
1117
- if (remaining <= 0 || remaining > wait) {
1118
- if (timeout) {
1119
- clearTimeout(timeout);
1120
- timeout = null;
1121
- }
1122
- previous = _now;
1123
- result = func.apply(context, args);
1124
- if (!timeout) context = args = null;
1125
- } else if (!timeout && options.trailing !== false) {
1126
- timeout = setTimeout(later, remaining);
1127
- }
1128
- return result;
1129
- };
1130
-
1131
- throttled.cancel = function() {
1132
- clearTimeout(timeout);
1133
- previous = 0;
1134
- timeout = context = args = null;
1135
- };
1136
-
1137
- return throttled;
1138
- }
1139
-
1140
- // When a sequence of calls of the returned function ends, the argument
1141
- // function is triggered. The end of a sequence is defined by the `wait`
1142
- // parameter. If `immediate` is passed, the argument function will be
1143
- // triggered at the beginning of the sequence instead of at the end.
1144
- function debounce(func, wait, immediate) {
1145
- var timeout, previous, args, result, context;
1146
-
1147
- var later = function() {
1148
- var passed = now() - previous;
1149
- if (wait > passed) {
1150
- timeout = setTimeout(later, wait - passed);
1151
- } else {
1152
- timeout = null;
1153
- if (!immediate) result = func.apply(context, args);
1154
- // This check is needed because `func` can recursively invoke `debounced`.
1155
- if (!timeout) args = context = null;
1156
- }
1157
- };
1158
-
1159
- var debounced = restArguments(function(_args) {
1160
- context = this;
1161
- args = _args;
1162
- previous = now();
1163
- if (!timeout) {
1164
- timeout = setTimeout(later, wait);
1165
- if (immediate) result = func.apply(context, args);
1166
- }
1167
- return result;
1168
- });
1169
-
1170
- debounced.cancel = function() {
1171
- clearTimeout(timeout);
1172
- timeout = args = context = null;
1173
- };
1174
-
1175
- return debounced;
1176
- }
1177
-
1178
- // Returns the first function passed as an argument to the second,
1179
- // allowing you to adjust arguments, run code before and after, and
1180
- // conditionally execute the original function.
1181
- function wrap(func, wrapper) {
1182
- return partial(wrapper, func);
1183
- }
1184
-
1185
- // Returns a negated version of the passed-in predicate.
1186
- function negate(predicate) {
1187
- return function() {
1188
- return !predicate.apply(this, arguments);
1189
- };
1190
- }
1191
-
1192
- // Returns a function that is the composition of a list of functions, each
1193
- // consuming the return value of the function that follows.
1194
- function compose() {
1195
- var args = arguments;
1196
- var start = args.length - 1;
1197
- return function() {
1198
- var i = start;
1199
- var result = args[start].apply(this, arguments);
1200
- while (i--) result = args[i].call(this, result);
1201
- return result;
1202
- };
1203
- }
1204
-
1205
- // Returns a function that will only be executed on and after the Nth call.
1206
- function after(times, func) {
1207
- return function() {
1208
- if (--times < 1) {
1209
- return func.apply(this, arguments);
1210
- }
1211
- };
1212
- }
1213
-
1214
- // Returns a function that will only be executed up to (but not including) the
1215
- // Nth call.
1216
- function before(times, func) {
1217
- var memo;
1218
- return function() {
1219
- if (--times > 0) {
1220
- memo = func.apply(this, arguments);
1221
- }
1222
- if (times <= 1) func = null;
1223
- return memo;
1224
- };
1225
- }
1226
-
1227
- // Returns a function that will be executed at most one time, no matter how
1228
- // often you call it. Useful for lazy initialization.
1229
- var once = partial(before, 2);
1230
-
1231
- // Returns the first key on an object that passes a truth test.
1232
- function findKey(obj, predicate, context) {
1233
- predicate = cb(predicate, context);
1234
- var _keys = keys(obj), key;
1235
- for (var i = 0, length = _keys.length; i < length; i++) {
1236
- key = _keys[i];
1237
- if (predicate(obj[key], key, obj)) return key;
1238
- }
1239
- }
1240
-
1241
- // Internal function to generate `_.findIndex` and `_.findLastIndex`.
1242
- function createPredicateIndexFinder(dir) {
1243
- return function(array, predicate, context) {
1244
- predicate = cb(predicate, context);
1245
- var length = getLength(array);
1246
- var index = dir > 0 ? 0 : length - 1;
1247
- for (; index >= 0 && index < length; index += dir) {
1248
- if (predicate(array[index], index, array)) return index;
1249
- }
1250
- return -1;
1251
- };
1252
- }
1253
-
1254
- // Returns the first index on an array-like that passes a truth test.
1255
- var findIndex = createPredicateIndexFinder(1);
1256
-
1257
- // Returns the last index on an array-like that passes a truth test.
1258
- var findLastIndex = createPredicateIndexFinder(-1);
1259
-
1260
- // Use a comparator function to figure out the smallest index at which
1261
- // an object should be inserted so as to maintain order. Uses binary search.
1262
- function sortedIndex(array, obj, iteratee, context) {
1263
- iteratee = cb(iteratee, context, 1);
1264
- var value = iteratee(obj);
1265
- var low = 0, high = getLength(array);
1266
- while (low < high) {
1267
- var mid = Math.floor((low + high) / 2);
1268
- if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;
1269
- }
1270
- return low;
1271
- }
1272
-
1273
- // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions.
1274
- function createIndexFinder(dir, predicateFind, sortedIndex) {
1275
- return function(array, item, idx) {
1276
- var i = 0, length = getLength(array);
1277
- if (typeof idx == 'number') {
1278
- if (dir > 0) {
1279
- i = idx >= 0 ? idx : Math.max(idx + length, i);
1280
- } else {
1281
- length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;
1282
- }
1283
- } else if (sortedIndex && idx && length) {
1284
- idx = sortedIndex(array, item);
1285
- return array[idx] === item ? idx : -1;
1286
- }
1287
- if (item !== item) {
1288
- idx = predicateFind(slice.call(array, i, length), isNaN$1);
1289
- return idx >= 0 ? idx + i : -1;
1290
- }
1291
- for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {
1292
- if (array[idx] === item) return idx;
1293
- }
1294
- return -1;
1295
- };
1296
- }
1297
-
1298
- // Return the position of the first occurrence of an item in an array,
1299
- // or -1 if the item is not included in the array.
1300
- // If the array is large and already in sort order, pass `true`
1301
- // for **isSorted** to use binary search.
1302
- var indexOf = createIndexFinder(1, findIndex, sortedIndex);
1303
-
1304
- // Return the position of the last occurrence of an item in an array,
1305
- // or -1 if the item is not included in the array.
1306
- var lastIndexOf = createIndexFinder(-1, findLastIndex);
1307
-
1308
- // Return the first value which passes a truth test.
1309
- function find(obj, predicate, context) {
1310
- var keyFinder = isArrayLike(obj) ? findIndex : findKey;
1311
- var key = keyFinder(obj, predicate, context);
1312
- if (key !== void 0 && key !== -1) return obj[key];
1313
- }
1314
-
1315
- // Convenience version of a common use case of `_.find`: getting the first
1316
- // object containing specific `key:value` pairs.
1317
- function findWhere(obj, attrs) {
1318
- return find(obj, matcher(attrs));
1319
- }
1320
-
1321
- // The cornerstone for collection functions, an `each`
1322
- // implementation, aka `forEach`.
1323
- // Handles raw objects in addition to array-likes. Treats all
1324
- // sparse array-likes as if they were dense.
1325
- function each(obj, iteratee, context) {
1326
- iteratee = optimizeCb(iteratee, context);
1327
- var i, length;
1328
- if (isArrayLike(obj)) {
1329
- for (i = 0, length = obj.length; i < length; i++) {
1330
- iteratee(obj[i], i, obj);
1331
- }
1332
- } else {
1333
- var _keys = keys(obj);
1334
- for (i = 0, length = _keys.length; i < length; i++) {
1335
- iteratee(obj[_keys[i]], _keys[i], obj);
1336
- }
1337
- }
1338
- return obj;
1339
- }
1340
-
1341
- // Return the results of applying the iteratee to each element.
1342
- function map(obj, iteratee, context) {
1343
- iteratee = cb(iteratee, context);
1344
- var _keys = !isArrayLike(obj) && keys(obj),
1345
- length = (_keys || obj).length,
1346
- results = Array(length);
1347
- for (var index = 0; index < length; index++) {
1348
- var currentKey = _keys ? _keys[index] : index;
1349
- results[index] = iteratee(obj[currentKey], currentKey, obj);
1350
- }
1351
- return results;
1352
- }
1353
-
1354
- // Internal helper to create a reducing function, iterating left or right.
1355
- function createReduce(dir) {
1356
- // Wrap code that reassigns argument variables in a separate function than
1357
- // the one that accesses `arguments.length` to avoid a perf hit. (#1991)
1358
- var reducer = function(obj, iteratee, memo, initial) {
1359
- var _keys = !isArrayLike(obj) && keys(obj),
1360
- length = (_keys || obj).length,
1361
- index = dir > 0 ? 0 : length - 1;
1362
- if (!initial) {
1363
- memo = obj[_keys ? _keys[index] : index];
1364
- index += dir;
1365
- }
1366
- for (; index >= 0 && index < length; index += dir) {
1367
- var currentKey = _keys ? _keys[index] : index;
1368
- memo = iteratee(memo, obj[currentKey], currentKey, obj);
1369
- }
1370
- return memo;
1371
- };
1372
-
1373
- return function(obj, iteratee, memo, context) {
1374
- var initial = arguments.length >= 3;
1375
- return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);
1376
- };
1377
- }
1378
-
1379
- // **Reduce** builds up a single result from a list of values, aka `inject`,
1380
- // or `foldl`.
1381
- var reduce = createReduce(1);
1382
-
1383
- // The right-associative version of reduce, also known as `foldr`.
1384
- var reduceRight = createReduce(-1);
1385
-
1386
- // Return all the elements that pass a truth test.
1387
- function filter(obj, predicate, context) {
1388
- var results = [];
1389
- predicate = cb(predicate, context);
1390
- each(obj, function(value, index, list) {
1391
- if (predicate(value, index, list)) results.push(value);
1392
- });
1393
- return results;
1394
- }
1395
-
1396
- // Return all the elements for which a truth test fails.
1397
- function reject(obj, predicate, context) {
1398
- return filter(obj, negate(cb(predicate)), context);
1399
- }
1400
-
1401
- // Determine whether all of the elements pass a truth test.
1402
- function every(obj, predicate, context) {
1403
- predicate = cb(predicate, context);
1404
- var _keys = !isArrayLike(obj) && keys(obj),
1405
- length = (_keys || obj).length;
1406
- for (var index = 0; index < length; index++) {
1407
- var currentKey = _keys ? _keys[index] : index;
1408
- if (!predicate(obj[currentKey], currentKey, obj)) return false;
1409
- }
1410
- return true;
1411
- }
1412
-
1413
- // Determine if at least one element in the object passes a truth test.
1414
- function some(obj, predicate, context) {
1415
- predicate = cb(predicate, context);
1416
- var _keys = !isArrayLike(obj) && keys(obj),
1417
- length = (_keys || obj).length;
1418
- for (var index = 0; index < length; index++) {
1419
- var currentKey = _keys ? _keys[index] : index;
1420
- if (predicate(obj[currentKey], currentKey, obj)) return true;
1421
- }
1422
- return false;
1423
- }
1424
-
1425
- // Determine if the array or object contains a given item (using `===`).
1426
- function contains(obj, item, fromIndex, guard) {
1427
- if (!isArrayLike(obj)) obj = values(obj);
1428
- if (typeof fromIndex != 'number' || guard) fromIndex = 0;
1429
- return indexOf(obj, item, fromIndex) >= 0;
1430
- }
1431
-
1432
- // Invoke a method (with arguments) on every item in a collection.
1433
- var invoke = restArguments(function(obj, path, args) {
1434
- var contextPath, func;
1435
- if (isFunction$1(path)) {
1436
- func = path;
1437
- } else {
1438
- path = toPath(path);
1439
- contextPath = path.slice(0, -1);
1440
- path = path[path.length - 1];
1441
- }
1442
- return map(obj, function(context) {
1443
- var method = func;
1444
- if (!method) {
1445
- if (contextPath && contextPath.length) {
1446
- context = deepGet(context, contextPath);
1447
- }
1448
- if (context == null) return void 0;
1449
- method = context[path];
1450
- }
1451
- return method == null ? method : method.apply(context, args);
1452
- });
1453
- });
1454
-
1455
- // Convenience version of a common use case of `_.map`: fetching a property.
1456
- function pluck(obj, key) {
1457
- return map(obj, property(key));
1458
- }
1459
-
1460
- // Convenience version of a common use case of `_.filter`: selecting only
1461
- // objects containing specific `key:value` pairs.
1462
- function where(obj, attrs) {
1463
- return filter(obj, matcher(attrs));
1464
- }
1465
-
1466
- // Return the maximum element (or element-based computation).
1467
- function max(obj, iteratee, context) {
1468
- var result = -Infinity, lastComputed = -Infinity,
1469
- value, computed;
1470
- if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {
1471
- obj = isArrayLike(obj) ? obj : values(obj);
1472
- for (var i = 0, length = obj.length; i < length; i++) {
1473
- value = obj[i];
1474
- if (value != null && value > result) {
1475
- result = value;
1476
- }
1477
- }
1478
- } else {
1479
- iteratee = cb(iteratee, context);
1480
- each(obj, function(v, index, list) {
1481
- computed = iteratee(v, index, list);
1482
- if (computed > lastComputed || computed === -Infinity && result === -Infinity) {
1483
- result = v;
1484
- lastComputed = computed;
1485
- }
1486
- });
1487
- }
1488
- return result;
1489
- }
1490
-
1491
- // Return the minimum element (or element-based computation).
1492
- function min(obj, iteratee, context) {
1493
- var result = Infinity, lastComputed = Infinity,
1494
- value, computed;
1495
- if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {
1496
- obj = isArrayLike(obj) ? obj : values(obj);
1497
- for (var i = 0, length = obj.length; i < length; i++) {
1498
- value = obj[i];
1499
- if (value != null && value < result) {
1500
- result = value;
1501
- }
1502
- }
1503
- } else {
1504
- iteratee = cb(iteratee, context);
1505
- each(obj, function(v, index, list) {
1506
- computed = iteratee(v, index, list);
1507
- if (computed < lastComputed || computed === Infinity && result === Infinity) {
1508
- result = v;
1509
- lastComputed = computed;
1510
- }
1511
- });
1512
- }
1513
- return result;
1514
- }
1515
-
1516
- // Sample **n** random values from a collection using the modern version of the
1517
- // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle).
1518
- // If **n** is not specified, returns a single random element.
1519
- // The internal `guard` argument allows it to work with `_.map`.
1520
- function sample(obj, n, guard) {
1521
- if (n == null || guard) {
1522
- if (!isArrayLike(obj)) obj = values(obj);
1523
- return obj[random(obj.length - 1)];
1524
- }
1525
- var sample = isArrayLike(obj) ? clone(obj) : values(obj);
1526
- var length = getLength(sample);
1527
- n = Math.max(Math.min(n, length), 0);
1528
- var last = length - 1;
1529
- for (var index = 0; index < n; index++) {
1530
- var rand = random(index, last);
1531
- var temp = sample[index];
1532
- sample[index] = sample[rand];
1533
- sample[rand] = temp;
1534
- }
1535
- return sample.slice(0, n);
1536
- }
1537
-
1538
- // Shuffle a collection.
1539
- function shuffle(obj) {
1540
- return sample(obj, Infinity);
1541
- }
1542
-
1543
- // Sort the object's values by a criterion produced by an iteratee.
1544
- function sortBy(obj, iteratee, context) {
1545
- var index = 0;
1546
- iteratee = cb(iteratee, context);
1547
- return pluck(map(obj, function(value, key, list) {
1548
- return {
1549
- value: value,
1550
- index: index++,
1551
- criteria: iteratee(value, key, list)
1552
- };
1553
- }).sort(function(left, right) {
1554
- var a = left.criteria;
1555
- var b = right.criteria;
1556
- if (a !== b) {
1557
- if (a > b || a === void 0) return 1;
1558
- if (a < b || b === void 0) return -1;
1559
- }
1560
- return left.index - right.index;
1561
- }), 'value');
1562
- }
1563
-
1564
- // An internal function used for aggregate "group by" operations.
1565
- function group(behavior, partition) {
1566
- return function(obj, iteratee, context) {
1567
- var result = partition ? [[], []] : {};
1568
- iteratee = cb(iteratee, context);
1569
- each(obj, function(value, index) {
1570
- var key = iteratee(value, index, obj);
1571
- behavior(result, value, key);
1572
- });
1573
- return result;
1574
- };
1575
- }
1576
-
1577
- // Groups the object's values by a criterion. Pass either a string attribute
1578
- // to group by, or a function that returns the criterion.
1579
- var groupBy = group(function(result, value, key) {
1580
- if (has$1(result, key)) result[key].push(value); else result[key] = [value];
1581
- });
1582
-
1583
- // Indexes the object's values by a criterion, similar to `_.groupBy`, but for
1584
- // when you know that your index values will be unique.
1585
- var indexBy = group(function(result, value, key) {
1586
- result[key] = value;
1587
- });
1588
-
1589
- // Counts instances of an object that group by a certain criterion. Pass
1590
- // either a string attribute to count by, or a function that returns the
1591
- // criterion.
1592
- var countBy = group(function(result, value, key) {
1593
- if (has$1(result, key)) result[key]++; else result[key] = 1;
1594
- });
1595
-
1596
- // Split a collection into two arrays: one whose elements all pass the given
1597
- // truth test, and one whose elements all do not pass the truth test.
1598
- var partition = group(function(result, value, pass) {
1599
- result[pass ? 0 : 1].push(value);
1600
- }, true);
1601
-
1602
- // Safely create a real, live array from anything iterable.
1603
- var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;
1604
- function toArray(obj) {
1605
- if (!obj) return [];
1606
- if (isArray(obj)) return slice.call(obj);
1607
- if (isString(obj)) {
1608
- // Keep surrogate pair characters together.
1609
- return obj.match(reStrSymbol);
1610
- }
1611
- if (isArrayLike(obj)) return map(obj, identity);
1612
- return values(obj);
1613
- }
1614
-
1615
- // Return the number of elements in a collection.
1616
- function size(obj) {
1617
- if (obj == null) return 0;
1618
- return isArrayLike(obj) ? obj.length : keys(obj).length;
1619
- }
1620
-
1621
- // Internal `_.pick` helper function to determine whether `key` is an enumerable
1622
- // property name of `obj`.
1623
- function keyInObj(value, key, obj) {
1624
- return key in obj;
1625
- }
1626
-
1627
- // Return a copy of the object only containing the allowed properties.
1628
- var pick = restArguments(function(obj, keys) {
1629
- var result = {}, iteratee = keys[0];
1630
- if (obj == null) return result;
1631
- if (isFunction$1(iteratee)) {
1632
- if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);
1633
- keys = allKeys(obj);
1634
- } else {
1635
- iteratee = keyInObj;
1636
- keys = flatten$1(keys, false, false);
1637
- obj = Object(obj);
1638
- }
1639
- for (var i = 0, length = keys.length; i < length; i++) {
1640
- var key = keys[i];
1641
- var value = obj[key];
1642
- if (iteratee(value, key, obj)) result[key] = value;
1643
- }
1644
- return result;
1645
- });
1646
-
1647
- // Return a copy of the object without the disallowed properties.
1648
- var omit = restArguments(function(obj, keys) {
1649
- var iteratee = keys[0], context;
1650
- if (isFunction$1(iteratee)) {
1651
- iteratee = negate(iteratee);
1652
- if (keys.length > 1) context = keys[1];
1653
- } else {
1654
- keys = map(flatten$1(keys, false, false), String);
1655
- iteratee = function(value, key) {
1656
- return !contains(keys, key);
1657
- };
1658
- }
1659
- return pick(obj, iteratee, context);
1660
- });
1661
-
1662
- // Returns everything but the last entry of the array. Especially useful on
1663
- // the arguments object. Passing **n** will return all the values in
1664
- // the array, excluding the last N.
1665
- function initial(array, n, guard) {
1666
- return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));
1667
- }
1668
-
1669
- // Get the first element of an array. Passing **n** will return the first N
1670
- // values in the array. The **guard** check allows it to work with `_.map`.
1671
- function first(array, n, guard) {
1672
- if (array == null || array.length < 1) return n == null || guard ? void 0 : [];
1673
- if (n == null || guard) return array[0];
1674
- return initial(array, array.length - n);
1675
- }
1676
-
1677
- // Returns everything but the first entry of the `array`. Especially useful on
1678
- // the `arguments` object. Passing an **n** will return the rest N values in the
1679
- // `array`.
1680
- function rest(array, n, guard) {
1681
- return slice.call(array, n == null || guard ? 1 : n);
1682
- }
1683
-
1684
- // Get the last element of an array. Passing **n** will return the last N
1685
- // values in the array.
1686
- function last(array, n, guard) {
1687
- if (array == null || array.length < 1) return n == null || guard ? void 0 : [];
1688
- if (n == null || guard) return array[array.length - 1];
1689
- return rest(array, Math.max(0, array.length - n));
1690
- }
1691
-
1692
- // Trim out all falsy values from an array.
1693
- function compact(array) {
1694
- return filter(array, Boolean);
1695
- }
1696
-
1697
- // Flatten out an array, either recursively (by default), or up to `depth`.
1698
- // Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively.
1699
- function flatten(array, depth) {
1700
- return flatten$1(array, depth, false);
1701
- }
1702
-
1703
- // Take the difference between one array and a number of other arrays.
1704
- // Only the elements present in just the first array will remain.
1705
- var difference = restArguments(function(array, rest) {
1706
- rest = flatten$1(rest, true, true);
1707
- return filter(array, function(value){
1708
- return !contains(rest, value);
1709
- });
1710
- });
1711
-
1712
- // Return a version of the array that does not contain the specified value(s).
1713
- var without = restArguments(function(array, otherArrays) {
1714
- return difference(array, otherArrays);
1715
- });
1716
-
1717
- // Produce a duplicate-free version of the array. If the array has already
1718
- // been sorted, you have the option of using a faster algorithm.
1719
- // The faster algorithm will not work with an iteratee if the iteratee
1720
- // is not a one-to-one function, so providing an iteratee will disable
1721
- // the faster algorithm.
1722
- function uniq(array, isSorted, iteratee, context) {
1723
- if (!isBoolean(isSorted)) {
1724
- context = iteratee;
1725
- iteratee = isSorted;
1726
- isSorted = false;
1727
- }
1728
- if (iteratee != null) iteratee = cb(iteratee, context);
1729
- var result = [];
1730
- var seen = [];
1731
- for (var i = 0, length = getLength(array); i < length; i++) {
1732
- var value = array[i],
1733
- computed = iteratee ? iteratee(value, i, array) : value;
1734
- if (isSorted && !iteratee) {
1735
- if (!i || seen !== computed) result.push(value);
1736
- seen = computed;
1737
- } else if (iteratee) {
1738
- if (!contains(seen, computed)) {
1739
- seen.push(computed);
1740
- result.push(value);
1741
- }
1742
- } else if (!contains(result, value)) {
1743
- result.push(value);
1744
- }
1745
- }
1746
- return result;
1747
- }
1748
-
1749
- // Produce an array that contains the union: each distinct element from all of
1750
- // the passed-in arrays.
1751
- var union = restArguments(function(arrays) {
1752
- return uniq(flatten$1(arrays, true, true));
1753
- });
1754
-
1755
- // Produce an array that contains every item shared between all the
1756
- // passed-in arrays.
1757
- function intersection(array) {
1758
- var result = [];
1759
- var argsLength = arguments.length;
1760
- for (var i = 0, length = getLength(array); i < length; i++) {
1761
- var item = array[i];
1762
- if (contains(result, item)) continue;
1763
- var j;
1764
- for (j = 1; j < argsLength; j++) {
1765
- if (!contains(arguments[j], item)) break;
1766
- }
1767
- if (j === argsLength) result.push(item);
1768
- }
1769
- return result;
1770
- }
1771
-
1772
- // Complement of zip. Unzip accepts an array of arrays and groups
1773
- // each array's elements on shared indices.
1774
- function unzip(array) {
1775
- var length = array && max(array, getLength).length || 0;
1776
- var result = Array(length);
1777
-
1778
- for (var index = 0; index < length; index++) {
1779
- result[index] = pluck(array, index);
1780
- }
1781
- return result;
1782
- }
1783
-
1784
- // Zip together multiple lists into a single array -- elements that share
1785
- // an index go together.
1786
- var zip = restArguments(unzip);
1787
-
1788
- // Converts lists into objects. Pass either a single array of `[key, value]`
1789
- // pairs, or two parallel arrays of the same length -- one of keys, and one of
1790
- // the corresponding values. Passing by pairs is the reverse of `_.pairs`.
1791
- function object(list, values) {
1792
- var result = {};
1793
- for (var i = 0, length = getLength(list); i < length; i++) {
1794
- if (values) {
1795
- result[list[i]] = values[i];
1796
- } else {
1797
- result[list[i][0]] = list[i][1];
1798
- }
1799
- }
1800
- return result;
1801
- }
1802
-
1803
- // Generate an integer Array containing an arithmetic progression. A port of
1804
- // the native Python `range()` function. See
1805
- // [the Python documentation](https://docs.python.org/library/functions.html#range).
1806
- function range(start, stop, step) {
1807
- if (stop == null) {
1808
- stop = start || 0;
1809
- start = 0;
1810
- }
1811
- if (!step) {
1812
- step = stop < start ? -1 : 1;
1813
- }
1814
-
1815
- var length = Math.max(Math.ceil((stop - start) / step), 0);
1816
- var range = Array(length);
1817
-
1818
- for (var idx = 0; idx < length; idx++, start += step) {
1819
- range[idx] = start;
1820
- }
1821
-
1822
- return range;
1823
- }
1824
-
1825
- // Chunk a single array into multiple arrays, each containing `count` or fewer
1826
- // items.
1827
- function chunk(array, count) {
1828
- if (count == null || count < 1) return [];
1829
- var result = [];
1830
- var i = 0, length = array.length;
1831
- while (i < length) {
1832
- result.push(slice.call(array, i, i += count));
1833
- }
1834
- return result;
1835
- }
1836
-
1837
- // Helper function to continue chaining intermediate results.
1838
- function chainResult(instance, obj) {
1839
- return instance._chain ? _$1(obj).chain() : obj;
1840
- }
1841
-
1842
- // Add your own custom functions to the Underscore object.
1843
- function mixin(obj) {
1844
- each(functions(obj), function(name) {
1845
- var func = _$1[name] = obj[name];
1846
- _$1.prototype[name] = function() {
1847
- var args = [this._wrapped];
1848
- push.apply(args, arguments);
1849
- return chainResult(this, func.apply(_$1, args));
1850
- };
1851
- });
1852
- return _$1;
1853
- }
1854
-
1855
- // Add all mutator `Array` functions to the wrapper.
1856
- each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
1857
- var method = ArrayProto[name];
1858
- _$1.prototype[name] = function() {
1859
- var obj = this._wrapped;
1860
- if (obj != null) {
1861
- method.apply(obj, arguments);
1862
- if ((name === 'shift' || name === 'splice') && obj.length === 0) {
1863
- delete obj[0];
1864
- }
1865
- }
1866
- return chainResult(this, obj);
1867
- };
1868
- });
1869
-
1870
- // Add all accessor `Array` functions to the wrapper.
1871
- each(['concat', 'join', 'slice'], function(name) {
1872
- var method = ArrayProto[name];
1873
- _$1.prototype[name] = function() {
1874
- var obj = this._wrapped;
1875
- if (obj != null) obj = method.apply(obj, arguments);
1876
- return chainResult(this, obj);
1877
- };
1878
- });
1879
-
1880
- // Named Exports
1881
-
1882
- var allExports = {
1883
- __proto__: null,
1884
- VERSION: VERSION,
1885
- restArguments: restArguments,
1886
- isObject: isObject,
1887
- isNull: isNull,
1888
- isUndefined: isUndefined,
1889
- isBoolean: isBoolean,
1890
- isElement: isElement,
1891
- isString: isString,
1892
- isNumber: isNumber,
1893
- isDate: isDate,
1894
- isRegExp: isRegExp,
1895
- isError: isError,
1896
- isSymbol: isSymbol,
1897
- isArrayBuffer: isArrayBuffer,
1898
- isDataView: isDataView$1,
1899
- isArray: isArray,
1900
- isFunction: isFunction$1,
1901
- isArguments: isArguments$1,
1902
- isFinite: isFinite$1,
1903
- isNaN: isNaN$1,
1904
- isTypedArray: isTypedArray$1,
1905
- isEmpty: isEmpty,
1906
- isMatch: isMatch,
1907
- isEqual: isEqual,
1908
- isMap: isMap,
1909
- isWeakMap: isWeakMap,
1910
- isSet: isSet,
1911
- isWeakSet: isWeakSet,
1912
- keys: keys,
1913
- allKeys: allKeys,
1914
- values: values,
1915
- pairs: pairs,
1916
- invert: invert,
1917
- functions: functions,
1918
- methods: functions,
1919
- extend: extend,
1920
- extendOwn: extendOwn,
1921
- assign: extendOwn,
1922
- defaults: defaults,
1923
- create: create,
1924
- clone: clone,
1925
- tap: tap,
1926
- get: get,
1927
- has: has,
1928
- mapObject: mapObject,
1929
- identity: identity,
1930
- constant: constant,
1931
- noop: noop,
1932
- toPath: toPath$1,
1933
- property: property,
1934
- propertyOf: propertyOf,
1935
- matcher: matcher,
1936
- matches: matcher,
1937
- times: times,
1938
- random: random,
1939
- now: now,
1940
- escape: _escape,
1941
- unescape: _unescape,
1942
- templateSettings: templateSettings,
1943
- template: template,
1944
- result: result,
1945
- uniqueId: uniqueId,
1946
- chain: chain,
1947
- iteratee: iteratee,
1948
- partial: partial,
1949
- bind: bind,
1950
- bindAll: bindAll,
1951
- memoize: memoize,
1952
- delay: delay,
1953
- defer: defer,
1954
- throttle: throttle,
1955
- debounce: debounce,
1956
- wrap: wrap,
1957
- negate: negate,
1958
- compose: compose,
1959
- after: after,
1960
- before: before,
1961
- once: once,
1962
- findKey: findKey,
1963
- findIndex: findIndex,
1964
- findLastIndex: findLastIndex,
1965
- sortedIndex: sortedIndex,
1966
- indexOf: indexOf,
1967
- lastIndexOf: lastIndexOf,
1968
- find: find,
1969
- detect: find,
1970
- findWhere: findWhere,
1971
- each: each,
1972
- forEach: each,
1973
- map: map,
1974
- collect: map,
1975
- reduce: reduce,
1976
- foldl: reduce,
1977
- inject: reduce,
1978
- reduceRight: reduceRight,
1979
- foldr: reduceRight,
1980
- filter: filter,
1981
- select: filter,
1982
- reject: reject,
1983
- every: every,
1984
- all: every,
1985
- some: some,
1986
- any: some,
1987
- contains: contains,
1988
- includes: contains,
1989
- include: contains,
1990
- invoke: invoke,
1991
- pluck: pluck,
1992
- where: where,
1993
- max: max,
1994
- min: min,
1995
- shuffle: shuffle,
1996
- sample: sample,
1997
- sortBy: sortBy,
1998
- groupBy: groupBy,
1999
- indexBy: indexBy,
2000
- countBy: countBy,
2001
- partition: partition,
2002
- toArray: toArray,
2003
- size: size,
2004
- pick: pick,
2005
- omit: omit,
2006
- first: first,
2007
- head: first,
2008
- take: first,
2009
- initial: initial,
2010
- last: last,
2011
- rest: rest,
2012
- tail: rest,
2013
- drop: rest,
2014
- compact: compact,
2015
- flatten: flatten,
2016
- without: without,
2017
- uniq: uniq,
2018
- unique: uniq,
2019
- union: union,
2020
- intersection: intersection,
2021
- difference: difference,
2022
- unzip: unzip,
2023
- transpose: unzip,
2024
- zip: zip,
2025
- object: object,
2026
- range: range,
2027
- chunk: chunk,
2028
- mixin: mixin,
2029
- 'default': _$1
2030
- };
2031
-
2032
- // Default Export
2033
-
2034
- // Add all of the Underscore functions to the wrapper object.
2035
- var _ = mixin(allExports);
2036
- // Legacy Node.js API.
2037
- _._ = _;
2038
-
2039
- return _;
2040
-
2041
- })));
2042
- //# sourceMappingURL=underscore-umd.js.map