scipy 1.15.3__cp312-cp312-musllinux_1_2_aarch64.whl → 1.16.0rc2__cp312-cp312-musllinux_1_2_aarch64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (641) hide show
  1. scipy/__config__.py +10 -10
  2. scipy/__init__.py +3 -6
  3. scipy/_cyutility.cpython-312-aarch64-linux-musl.so +0 -0
  4. scipy/_lib/_array_api.py +486 -161
  5. scipy/_lib/_array_api_compat_vendor.py +9 -0
  6. scipy/_lib/_bunch.py +4 -0
  7. scipy/_lib/_ccallback_c.cpython-312-aarch64-linux-musl.so +0 -0
  8. scipy/_lib/_docscrape.py +1 -1
  9. scipy/_lib/_elementwise_iterative_method.py +15 -26
  10. scipy/_lib/_fpumode.cpython-312-aarch64-linux-musl.so +0 -0
  11. scipy/_lib/_sparse.py +41 -0
  12. scipy/_lib/_test_ccallback.cpython-312-aarch64-linux-musl.so +0 -0
  13. scipy/_lib/_test_deprecation_call.cpython-312-aarch64-linux-musl.so +0 -0
  14. scipy/_lib/_test_deprecation_def.cpython-312-aarch64-linux-musl.so +0 -0
  15. scipy/_lib/_testutils.py +6 -2
  16. scipy/_lib/_uarray/_uarray.cpython-312-aarch64-linux-musl.so +0 -0
  17. scipy/_lib/_util.py +222 -125
  18. scipy/_lib/array_api_compat/__init__.py +4 -4
  19. scipy/_lib/array_api_compat/_internal.py +19 -6
  20. scipy/_lib/array_api_compat/common/__init__.py +1 -1
  21. scipy/_lib/array_api_compat/common/_aliases.py +365 -193
  22. scipy/_lib/array_api_compat/common/_fft.py +94 -64
  23. scipy/_lib/array_api_compat/common/_helpers.py +413 -180
  24. scipy/_lib/array_api_compat/common/_linalg.py +116 -40
  25. scipy/_lib/array_api_compat/common/_typing.py +179 -10
  26. scipy/_lib/array_api_compat/cupy/__init__.py +1 -4
  27. scipy/_lib/array_api_compat/cupy/_aliases.py +61 -41
  28. scipy/_lib/array_api_compat/cupy/_info.py +16 -6
  29. scipy/_lib/array_api_compat/cupy/_typing.py +24 -39
  30. scipy/_lib/array_api_compat/dask/array/__init__.py +6 -3
  31. scipy/_lib/array_api_compat/dask/array/_aliases.py +267 -108
  32. scipy/_lib/array_api_compat/dask/array/_info.py +105 -34
  33. scipy/_lib/array_api_compat/dask/array/fft.py +5 -8
  34. scipy/_lib/array_api_compat/dask/array/linalg.py +21 -22
  35. scipy/_lib/array_api_compat/numpy/__init__.py +13 -15
  36. scipy/_lib/array_api_compat/numpy/_aliases.py +98 -49
  37. scipy/_lib/array_api_compat/numpy/_info.py +36 -16
  38. scipy/_lib/array_api_compat/numpy/_typing.py +27 -43
  39. scipy/_lib/array_api_compat/numpy/fft.py +11 -5
  40. scipy/_lib/array_api_compat/numpy/linalg.py +75 -22
  41. scipy/_lib/array_api_compat/torch/__init__.py +3 -5
  42. scipy/_lib/array_api_compat/torch/_aliases.py +262 -159
  43. scipy/_lib/array_api_compat/torch/_info.py +27 -16
  44. scipy/_lib/array_api_compat/torch/_typing.py +3 -0
  45. scipy/_lib/array_api_compat/torch/fft.py +17 -18
  46. scipy/_lib/array_api_compat/torch/linalg.py +16 -16
  47. scipy/_lib/array_api_extra/__init__.py +26 -3
  48. scipy/_lib/array_api_extra/_delegation.py +171 -0
  49. scipy/_lib/array_api_extra/_lib/__init__.py +1 -0
  50. scipy/_lib/array_api_extra/_lib/_at.py +463 -0
  51. scipy/_lib/array_api_extra/_lib/_backends.py +46 -0
  52. scipy/_lib/array_api_extra/_lib/_funcs.py +937 -0
  53. scipy/_lib/array_api_extra/_lib/_lazy.py +357 -0
  54. scipy/_lib/array_api_extra/_lib/_testing.py +278 -0
  55. scipy/_lib/array_api_extra/_lib/_utils/__init__.py +1 -0
  56. scipy/_lib/array_api_extra/_lib/_utils/_compat.py +74 -0
  57. scipy/_lib/array_api_extra/_lib/_utils/_compat.pyi +45 -0
  58. scipy/_lib/array_api_extra/_lib/_utils/_helpers.py +559 -0
  59. scipy/_lib/array_api_extra/_lib/_utils/_typing.py +10 -0
  60. scipy/_lib/array_api_extra/_lib/_utils/_typing.pyi +105 -0
  61. scipy/_lib/array_api_extra/testing.py +359 -0
  62. scipy/_lib/decorator.py +2 -2
  63. scipy/_lib/doccer.py +1 -7
  64. scipy/_lib/messagestream.cpython-312-aarch64-linux-musl.so +0 -0
  65. scipy/_lib/pyprima/__init__.py +212 -0
  66. scipy/_lib/pyprima/cobyla/__init__.py +0 -0
  67. scipy/_lib/pyprima/cobyla/cobyla.py +559 -0
  68. scipy/_lib/pyprima/cobyla/cobylb.py +714 -0
  69. scipy/_lib/pyprima/cobyla/geometry.py +226 -0
  70. scipy/_lib/pyprima/cobyla/initialize.py +215 -0
  71. scipy/_lib/pyprima/cobyla/trustregion.py +492 -0
  72. scipy/_lib/pyprima/cobyla/update.py +289 -0
  73. scipy/_lib/pyprima/common/__init__.py +0 -0
  74. scipy/_lib/pyprima/common/_bounds.py +34 -0
  75. scipy/_lib/pyprima/common/_linear_constraints.py +46 -0
  76. scipy/_lib/pyprima/common/_nonlinear_constraints.py +54 -0
  77. scipy/_lib/pyprima/common/_project.py +173 -0
  78. scipy/_lib/pyprima/common/checkbreak.py +93 -0
  79. scipy/_lib/pyprima/common/consts.py +47 -0
  80. scipy/_lib/pyprima/common/evaluate.py +99 -0
  81. scipy/_lib/pyprima/common/history.py +38 -0
  82. scipy/_lib/pyprima/common/infos.py +30 -0
  83. scipy/_lib/pyprima/common/linalg.py +435 -0
  84. scipy/_lib/pyprima/common/message.py +290 -0
  85. scipy/_lib/pyprima/common/powalg.py +131 -0
  86. scipy/_lib/pyprima/common/preproc.py +277 -0
  87. scipy/_lib/pyprima/common/present.py +5 -0
  88. scipy/_lib/pyprima/common/ratio.py +54 -0
  89. scipy/_lib/pyprima/common/redrho.py +47 -0
  90. scipy/_lib/pyprima/common/selectx.py +296 -0
  91. scipy/_lib/tests/test__util.py +105 -121
  92. scipy/_lib/tests/test_array_api.py +166 -35
  93. scipy/_lib/tests/test_bunch.py +7 -0
  94. scipy/_lib/tests/test_ccallback.py +2 -10
  95. scipy/_lib/tests/test_public_api.py +13 -0
  96. scipy/cluster/_hierarchy.cpython-312-aarch64-linux-musl.so +0 -0
  97. scipy/cluster/_optimal_leaf_ordering.cpython-312-aarch64-linux-musl.so +0 -0
  98. scipy/cluster/_vq.cpython-312-aarch64-linux-musl.so +0 -0
  99. scipy/cluster/hierarchy.py +393 -223
  100. scipy/cluster/tests/test_hierarchy.py +273 -335
  101. scipy/cluster/tests/test_vq.py +45 -61
  102. scipy/cluster/vq.py +39 -35
  103. scipy/conftest.py +263 -157
  104. scipy/constants/_constants.py +4 -1
  105. scipy/constants/tests/test_codata.py +2 -2
  106. scipy/constants/tests/test_constants.py +11 -18
  107. scipy/datasets/_download_all.py +15 -1
  108. scipy/datasets/_fetchers.py +7 -1
  109. scipy/datasets/_utils.py +1 -1
  110. scipy/differentiate/_differentiate.py +25 -25
  111. scipy/differentiate/tests/test_differentiate.py +24 -25
  112. scipy/fft/_basic.py +20 -0
  113. scipy/fft/_helper.py +3 -34
  114. scipy/fft/_pocketfft/helper.py +29 -1
  115. scipy/fft/_pocketfft/pypocketfft.cpython-312-aarch64-linux-musl.so +0 -0
  116. scipy/fft/_pocketfft/tests/test_basic.py +2 -4
  117. scipy/fft/_pocketfft/tests/test_real_transforms.py +4 -4
  118. scipy/fft/_realtransforms.py +13 -0
  119. scipy/fft/tests/test_basic.py +27 -25
  120. scipy/fft/tests/test_fftlog.py +16 -7
  121. scipy/fft/tests/test_helper.py +18 -34
  122. scipy/fft/tests/test_real_transforms.py +8 -10
  123. scipy/fftpack/convolve.cpython-312-aarch64-linux-musl.so +0 -0
  124. scipy/fftpack/tests/test_basic.py +2 -4
  125. scipy/fftpack/tests/test_real_transforms.py +8 -9
  126. scipy/integrate/_bvp.py +9 -3
  127. scipy/integrate/_cubature.py +3 -2
  128. scipy/integrate/_dop.cpython-312-aarch64-linux-musl.so +0 -0
  129. scipy/integrate/_lsoda.cpython-312-aarch64-linux-musl.so +0 -0
  130. scipy/integrate/_ode.py +9 -2
  131. scipy/integrate/_odepack.cpython-312-aarch64-linux-musl.so +0 -0
  132. scipy/integrate/_quad_vec.py +21 -29
  133. scipy/integrate/_quadpack.cpython-312-aarch64-linux-musl.so +0 -0
  134. scipy/integrate/_quadpack_py.py +11 -7
  135. scipy/integrate/_quadrature.py +3 -3
  136. scipy/integrate/_rules/_base.py +2 -2
  137. scipy/integrate/_tanhsinh.py +48 -47
  138. scipy/integrate/_test_multivariate.cpython-312-aarch64-linux-musl.so +0 -0
  139. scipy/integrate/_test_odeint_banded.cpython-312-aarch64-linux-musl.so +0 -0
  140. scipy/integrate/_vode.cpython-312-aarch64-linux-musl.so +0 -0
  141. scipy/integrate/tests/test__quad_vec.py +0 -6
  142. scipy/integrate/tests/test_banded_ode_solvers.py +85 -0
  143. scipy/integrate/tests/test_cubature.py +21 -35
  144. scipy/integrate/tests/test_quadrature.py +6 -8
  145. scipy/integrate/tests/test_tanhsinh.py +56 -48
  146. scipy/interpolate/__init__.py +70 -58
  147. scipy/interpolate/_bary_rational.py +22 -22
  148. scipy/interpolate/_bsplines.py +119 -66
  149. scipy/interpolate/_cubic.py +65 -50
  150. scipy/interpolate/_dfitpack.cpython-312-aarch64-linux-musl.so +0 -0
  151. scipy/interpolate/_dierckx.cpython-312-aarch64-linux-musl.so +0 -0
  152. scipy/interpolate/_fitpack.cpython-312-aarch64-linux-musl.so +0 -0
  153. scipy/interpolate/_fitpack2.py +9 -6
  154. scipy/interpolate/_fitpack_impl.py +32 -26
  155. scipy/interpolate/_fitpack_repro.py +23 -19
  156. scipy/interpolate/_interpnd.cpython-312-aarch64-linux-musl.so +0 -0
  157. scipy/interpolate/_interpolate.py +30 -12
  158. scipy/interpolate/_ndbspline.py +13 -18
  159. scipy/interpolate/_ndgriddata.py +5 -8
  160. scipy/interpolate/_polyint.py +95 -31
  161. scipy/interpolate/_ppoly.cpython-312-aarch64-linux-musl.so +0 -0
  162. scipy/interpolate/_rbf.py +2 -2
  163. scipy/interpolate/_rbfinterp.py +1 -1
  164. scipy/interpolate/_rbfinterp_pythran.cpython-312-aarch64-linux-musl.so +0 -0
  165. scipy/interpolate/_rgi.py +31 -26
  166. scipy/interpolate/_rgi_cython.cpython-312-aarch64-linux-musl.so +0 -0
  167. scipy/interpolate/dfitpack.py +0 -20
  168. scipy/interpolate/interpnd.py +1 -2
  169. scipy/interpolate/tests/test_bary_rational.py +2 -2
  170. scipy/interpolate/tests/test_bsplines.py +97 -1
  171. scipy/interpolate/tests/test_fitpack2.py +39 -1
  172. scipy/interpolate/tests/test_interpnd.py +32 -20
  173. scipy/interpolate/tests/test_interpolate.py +48 -4
  174. scipy/interpolate/tests/test_rgi.py +2 -1
  175. scipy/io/_fast_matrix_market/__init__.py +2 -0
  176. scipy/io/_fast_matrix_market/_fmm_core.cpython-312-aarch64-linux-musl.so +0 -0
  177. scipy/io/_harwell_boeing/_fortran_format_parser.py +19 -16
  178. scipy/io/_harwell_boeing/hb.py +7 -11
  179. scipy/io/_idl.py +5 -7
  180. scipy/io/_netcdf.py +15 -5
  181. scipy/io/_test_fortran.cpython-312-aarch64-linux-musl.so +0 -0
  182. scipy/io/arff/tests/test_arffread.py +3 -3
  183. scipy/io/matlab/__init__.py +5 -3
  184. scipy/io/matlab/_mio.py +4 -1
  185. scipy/io/matlab/_mio5.py +19 -13
  186. scipy/io/matlab/_mio5_utils.cpython-312-aarch64-linux-musl.so +0 -0
  187. scipy/io/matlab/_mio_utils.cpython-312-aarch64-linux-musl.so +0 -0
  188. scipy/io/matlab/_miobase.py +4 -1
  189. scipy/io/matlab/_streams.cpython-312-aarch64-linux-musl.so +0 -0
  190. scipy/io/matlab/tests/test_mio.py +46 -18
  191. scipy/io/matlab/tests/test_mio_funcs.py +1 -1
  192. scipy/io/tests/test_mmio.py +7 -1
  193. scipy/io/tests/test_wavfile.py +41 -0
  194. scipy/io/wavfile.py +57 -10
  195. scipy/linalg/_basic.py +113 -86
  196. scipy/linalg/_cythonized_array_utils.cpython-312-aarch64-linux-musl.so +0 -0
  197. scipy/linalg/_decomp.py +22 -9
  198. scipy/linalg/_decomp_cholesky.py +28 -13
  199. scipy/linalg/_decomp_cossin.py +45 -30
  200. scipy/linalg/_decomp_interpolative.cpython-312-aarch64-linux-musl.so +0 -0
  201. scipy/linalg/_decomp_ldl.py +4 -1
  202. scipy/linalg/_decomp_lu.py +18 -6
  203. scipy/linalg/_decomp_lu_cython.cpython-312-aarch64-linux-musl.so +0 -0
  204. scipy/linalg/_decomp_polar.py +2 -0
  205. scipy/linalg/_decomp_qr.py +6 -2
  206. scipy/linalg/_decomp_qz.py +3 -0
  207. scipy/linalg/_decomp_schur.py +3 -1
  208. scipy/linalg/_decomp_svd.py +13 -2
  209. scipy/linalg/_decomp_update.cpython-312-aarch64-linux-musl.so +0 -0
  210. scipy/linalg/_expm_frechet.py +4 -0
  211. scipy/linalg/_fblas.cpython-312-aarch64-linux-musl.so +0 -0
  212. scipy/linalg/_flapack.cpython-312-aarch64-linux-musl.so +0 -0
  213. scipy/linalg/_linalg_pythran.cpython-312-aarch64-linux-musl.so +0 -0
  214. scipy/linalg/_matfuncs.py +187 -4
  215. scipy/linalg/_matfuncs_expm.cpython-312-aarch64-linux-musl.so +0 -0
  216. scipy/linalg/_matfuncs_schur_sqrtm.cpython-312-aarch64-linux-musl.so +0 -0
  217. scipy/linalg/_matfuncs_sqrtm.py +1 -99
  218. scipy/linalg/_matfuncs_sqrtm_triu.cpython-312-aarch64-linux-musl.so +0 -0
  219. scipy/linalg/_procrustes.py +2 -0
  220. scipy/linalg/_sketches.py +17 -6
  221. scipy/linalg/_solve_toeplitz.cpython-312-aarch64-linux-musl.so +0 -0
  222. scipy/linalg/_solvers.py +7 -2
  223. scipy/linalg/_special_matrices.py +26 -36
  224. scipy/linalg/cython_blas.cpython-312-aarch64-linux-musl.so +0 -0
  225. scipy/linalg/cython_lapack.cpython-312-aarch64-linux-musl.so +0 -0
  226. scipy/linalg/lapack.py +22 -2
  227. scipy/linalg/tests/_cython_examples/meson.build +7 -0
  228. scipy/linalg/tests/test_basic.py +31 -16
  229. scipy/linalg/tests/test_batch.py +588 -0
  230. scipy/linalg/tests/test_cythonized_array_utils.py +0 -2
  231. scipy/linalg/tests/test_decomp.py +40 -3
  232. scipy/linalg/tests/test_decomp_cossin.py +14 -0
  233. scipy/linalg/tests/test_decomp_ldl.py +1 -1
  234. scipy/linalg/tests/test_lapack.py +115 -7
  235. scipy/linalg/tests/test_matfuncs.py +157 -102
  236. scipy/linalg/tests/test_procrustes.py +0 -7
  237. scipy/linalg/tests/test_solve_toeplitz.py +1 -1
  238. scipy/linalg/tests/test_special_matrices.py +1 -5
  239. scipy/ndimage/__init__.py +1 -0
  240. scipy/ndimage/_ctest.cpython-312-aarch64-linux-musl.so +0 -0
  241. scipy/ndimage/_cytest.cpython-312-aarch64-linux-musl.so +0 -0
  242. scipy/ndimage/_delegators.py +8 -2
  243. scipy/ndimage/_filters.py +453 -5
  244. scipy/ndimage/_interpolation.py +36 -6
  245. scipy/ndimage/_measurements.py +4 -2
  246. scipy/ndimage/_morphology.py +5 -0
  247. scipy/ndimage/_nd_image.cpython-312-aarch64-linux-musl.so +0 -0
  248. scipy/ndimage/_ni_docstrings.py +5 -1
  249. scipy/ndimage/_ni_label.cpython-312-aarch64-linux-musl.so +0 -0
  250. scipy/ndimage/_ni_support.py +1 -5
  251. scipy/ndimage/_rank_filter_1d.cpython-312-aarch64-linux-musl.so +0 -0
  252. scipy/ndimage/_support_alternative_backends.py +18 -6
  253. scipy/ndimage/tests/test_filters.py +370 -259
  254. scipy/ndimage/tests/test_fourier.py +7 -9
  255. scipy/ndimage/tests/test_interpolation.py +68 -61
  256. scipy/ndimage/tests/test_measurements.py +18 -35
  257. scipy/ndimage/tests/test_morphology.py +143 -131
  258. scipy/ndimage/tests/test_splines.py +1 -3
  259. scipy/odr/__odrpack.cpython-312-aarch64-linux-musl.so +0 -0
  260. scipy/optimize/_basinhopping.py +13 -7
  261. scipy/optimize/_bglu_dense.cpython-312-aarch64-linux-musl.so +0 -0
  262. scipy/optimize/_bracket.py +17 -24
  263. scipy/optimize/_chandrupatla.py +9 -10
  264. scipy/optimize/_cobyla_py.py +104 -123
  265. scipy/optimize/_constraints.py +14 -10
  266. scipy/optimize/_differentiable_functions.py +371 -230
  267. scipy/optimize/_differentialevolution.py +4 -3
  268. scipy/optimize/_direct.cpython-312-aarch64-linux-musl.so +0 -0
  269. scipy/optimize/_dual_annealing.py +1 -1
  270. scipy/optimize/_elementwise.py +1 -4
  271. scipy/optimize/_group_columns.cpython-312-aarch64-linux-musl.so +0 -0
  272. scipy/optimize/_highspy/_core.cpython-312-aarch64-linux-musl.so +0 -0
  273. scipy/optimize/_highspy/_highs_options.cpython-312-aarch64-linux-musl.so +0 -0
  274. scipy/optimize/_lbfgsb.cpython-312-aarch64-linux-musl.so +0 -0
  275. scipy/optimize/_lbfgsb_py.py +57 -16
  276. scipy/optimize/_linprog_doc.py +2 -2
  277. scipy/optimize/_linprog_highs.py +2 -2
  278. scipy/optimize/_linprog_ip.py +25 -10
  279. scipy/optimize/_linprog_util.py +14 -16
  280. scipy/optimize/_lsap.cpython-312-aarch64-linux-musl.so +0 -0
  281. scipy/optimize/_lsq/common.py +3 -3
  282. scipy/optimize/_lsq/dogbox.py +16 -2
  283. scipy/optimize/_lsq/givens_elimination.cpython-312-aarch64-linux-musl.so +0 -0
  284. scipy/optimize/_lsq/least_squares.py +198 -126
  285. scipy/optimize/_lsq/lsq_linear.py +6 -6
  286. scipy/optimize/_lsq/trf.py +35 -8
  287. scipy/optimize/_milp.py +3 -1
  288. scipy/optimize/_minimize.py +105 -36
  289. scipy/optimize/_minpack.cpython-312-aarch64-linux-musl.so +0 -0
  290. scipy/optimize/_minpack_py.py +21 -14
  291. scipy/optimize/_moduleTNC.cpython-312-aarch64-linux-musl.so +0 -0
  292. scipy/optimize/_nnls.py +20 -21
  293. scipy/optimize/_nonlin.py +34 -3
  294. scipy/optimize/_numdiff.py +288 -110
  295. scipy/optimize/_optimize.py +86 -48
  296. scipy/optimize/_pava_pybind.cpython-312-aarch64-linux-musl.so +0 -0
  297. scipy/optimize/_remove_redundancy.py +5 -5
  298. scipy/optimize/_root_scalar.py +1 -1
  299. scipy/optimize/_shgo.py +6 -0
  300. scipy/optimize/_shgo_lib/_complex.py +1 -1
  301. scipy/optimize/_slsqp_py.py +216 -124
  302. scipy/optimize/_slsqplib.cpython-312-aarch64-linux-musl.so +0 -0
  303. scipy/optimize/_spectral.py +1 -1
  304. scipy/optimize/_tnc.py +8 -1
  305. scipy/optimize/_trlib/_trlib.cpython-312-aarch64-linux-musl.so +0 -0
  306. scipy/optimize/_trustregion.py +20 -6
  307. scipy/optimize/_trustregion_constr/canonical_constraint.py +7 -7
  308. scipy/optimize/_trustregion_constr/equality_constrained_sqp.py +1 -1
  309. scipy/optimize/_trustregion_constr/minimize_trustregion_constr.py +11 -3
  310. scipy/optimize/_trustregion_constr/projections.py +12 -8
  311. scipy/optimize/_trustregion_constr/qp_subproblem.py +9 -9
  312. scipy/optimize/_trustregion_constr/tests/test_projections.py +7 -7
  313. scipy/optimize/_trustregion_constr/tests/test_qp_subproblem.py +77 -77
  314. scipy/optimize/_trustregion_constr/tr_interior_point.py +5 -5
  315. scipy/optimize/_trustregion_exact.py +0 -1
  316. scipy/optimize/_zeros.cpython-312-aarch64-linux-musl.so +0 -0
  317. scipy/optimize/_zeros_py.py +97 -17
  318. scipy/optimize/cython_optimize/_zeros.cpython-312-aarch64-linux-musl.so +0 -0
  319. scipy/optimize/slsqp.py +0 -1
  320. scipy/optimize/tests/test__basinhopping.py +1 -1
  321. scipy/optimize/tests/test__differential_evolution.py +4 -4
  322. scipy/optimize/tests/test__linprog_clean_inputs.py +5 -3
  323. scipy/optimize/tests/test__numdiff.py +66 -22
  324. scipy/optimize/tests/test__remove_redundancy.py +2 -2
  325. scipy/optimize/tests/test__shgo.py +9 -1
  326. scipy/optimize/tests/test_bracket.py +36 -46
  327. scipy/optimize/tests/test_chandrupatla.py +133 -135
  328. scipy/optimize/tests/test_cobyla.py +74 -45
  329. scipy/optimize/tests/test_constraints.py +1 -1
  330. scipy/optimize/tests/test_differentiable_functions.py +226 -6
  331. scipy/optimize/tests/test_lbfgsb_hessinv.py +22 -0
  332. scipy/optimize/tests/test_least_squares.py +125 -13
  333. scipy/optimize/tests/test_linear_assignment.py +3 -3
  334. scipy/optimize/tests/test_linprog.py +3 -3
  335. scipy/optimize/tests/test_lsq_linear.py +6 -6
  336. scipy/optimize/tests/test_minimize_constrained.py +2 -2
  337. scipy/optimize/tests/test_minpack.py +4 -4
  338. scipy/optimize/tests/test_nnls.py +43 -3
  339. scipy/optimize/tests/test_nonlin.py +36 -0
  340. scipy/optimize/tests/test_optimize.py +95 -17
  341. scipy/optimize/tests/test_slsqp.py +36 -4
  342. scipy/optimize/tests/test_zeros.py +34 -1
  343. scipy/signal/__init__.py +12 -23
  344. scipy/signal/_delegators.py +568 -0
  345. scipy/signal/_filter_design.py +459 -241
  346. scipy/signal/_fir_filter_design.py +262 -90
  347. scipy/signal/_lti_conversion.py +3 -2
  348. scipy/signal/_ltisys.py +118 -91
  349. scipy/signal/_max_len_seq_inner.cpython-312-aarch64-linux-musl.so +0 -0
  350. scipy/signal/_peak_finding_utils.cpython-312-aarch64-linux-musl.so +0 -0
  351. scipy/signal/_polyutils.py +172 -0
  352. scipy/signal/_short_time_fft.py +519 -70
  353. scipy/signal/_signal_api.py +30 -0
  354. scipy/signal/_signaltools.py +719 -399
  355. scipy/signal/_sigtools.cpython-312-aarch64-linux-musl.so +0 -0
  356. scipy/signal/_sosfilt.cpython-312-aarch64-linux-musl.so +0 -0
  357. scipy/signal/_spectral_py.py +230 -50
  358. scipy/signal/_spline.cpython-312-aarch64-linux-musl.so +0 -0
  359. scipy/signal/_spline_filters.py +108 -68
  360. scipy/signal/_support_alternative_backends.py +73 -0
  361. scipy/signal/_upfirdn.py +4 -1
  362. scipy/signal/_upfirdn_apply.cpython-312-aarch64-linux-musl.so +0 -0
  363. scipy/signal/_waveforms.py +2 -11
  364. scipy/signal/_wavelets.py +1 -1
  365. scipy/signal/fir_filter_design.py +1 -0
  366. scipy/signal/spline.py +4 -11
  367. scipy/signal/tests/_scipy_spectral_test_shim.py +2 -171
  368. scipy/signal/tests/test_bsplines.py +114 -79
  369. scipy/signal/tests/test_cont2discrete.py +9 -2
  370. scipy/signal/tests/test_filter_design.py +721 -481
  371. scipy/signal/tests/test_fir_filter_design.py +332 -140
  372. scipy/signal/tests/test_savitzky_golay.py +4 -3
  373. scipy/signal/tests/test_short_time_fft.py +221 -3
  374. scipy/signal/tests/test_signaltools.py +2144 -1348
  375. scipy/signal/tests/test_spectral.py +50 -6
  376. scipy/signal/tests/test_splines.py +161 -96
  377. scipy/signal/tests/test_upfirdn.py +84 -50
  378. scipy/signal/tests/test_waveforms.py +20 -0
  379. scipy/signal/tests/test_windows.py +607 -466
  380. scipy/signal/windows/_windows.py +287 -148
  381. scipy/sparse/__init__.py +23 -4
  382. scipy/sparse/_base.py +270 -108
  383. scipy/sparse/_bsr.py +7 -4
  384. scipy/sparse/_compressed.py +59 -231
  385. scipy/sparse/_construct.py +90 -38
  386. scipy/sparse/_coo.py +115 -181
  387. scipy/sparse/_csc.py +4 -4
  388. scipy/sparse/_csparsetools.cpython-312-aarch64-linux-musl.so +0 -0
  389. scipy/sparse/_csr.py +2 -2
  390. scipy/sparse/_data.py +48 -48
  391. scipy/sparse/_dia.py +105 -18
  392. scipy/sparse/_dok.py +0 -23
  393. scipy/sparse/_index.py +4 -4
  394. scipy/sparse/_matrix.py +23 -0
  395. scipy/sparse/_sparsetools.cpython-312-aarch64-linux-musl.so +0 -0
  396. scipy/sparse/_sputils.py +37 -22
  397. scipy/sparse/base.py +0 -9
  398. scipy/sparse/bsr.py +0 -14
  399. scipy/sparse/compressed.py +0 -23
  400. scipy/sparse/construct.py +0 -6
  401. scipy/sparse/coo.py +0 -14
  402. scipy/sparse/csc.py +0 -3
  403. scipy/sparse/csgraph/_flow.cpython-312-aarch64-linux-musl.so +0 -0
  404. scipy/sparse/csgraph/_matching.cpython-312-aarch64-linux-musl.so +0 -0
  405. scipy/sparse/csgraph/_min_spanning_tree.cpython-312-aarch64-linux-musl.so +0 -0
  406. scipy/sparse/csgraph/_reordering.cpython-312-aarch64-linux-musl.so +0 -0
  407. scipy/sparse/csgraph/_shortest_path.cpython-312-aarch64-linux-musl.so +0 -0
  408. scipy/sparse/csgraph/_tools.cpython-312-aarch64-linux-musl.so +0 -0
  409. scipy/sparse/csgraph/_traversal.cpython-312-aarch64-linux-musl.so +0 -0
  410. scipy/sparse/csgraph/tests/test_matching.py +14 -2
  411. scipy/sparse/csgraph/tests/test_pydata_sparse.py +4 -1
  412. scipy/sparse/csgraph/tests/test_shortest_path.py +83 -27
  413. scipy/sparse/csr.py +0 -5
  414. scipy/sparse/data.py +1 -6
  415. scipy/sparse/dia.py +0 -7
  416. scipy/sparse/dok.py +0 -10
  417. scipy/sparse/linalg/_dsolve/_superlu.cpython-312-aarch64-linux-musl.so +0 -0
  418. scipy/sparse/linalg/_dsolve/linsolve.py +9 -0
  419. scipy/sparse/linalg/_dsolve/tests/test_linsolve.py +35 -28
  420. scipy/sparse/linalg/_eigen/arpack/_arpack.cpython-312-aarch64-linux-musl.so +0 -0
  421. scipy/sparse/linalg/_eigen/arpack/arpack.py +23 -17
  422. scipy/sparse/linalg/_eigen/lobpcg/lobpcg.py +6 -6
  423. scipy/sparse/linalg/_interface.py +17 -18
  424. scipy/sparse/linalg/_isolve/_gcrotmk.py +4 -4
  425. scipy/sparse/linalg/_isolve/iterative.py +51 -45
  426. scipy/sparse/linalg/_isolve/lgmres.py +6 -6
  427. scipy/sparse/linalg/_isolve/minres.py +5 -5
  428. scipy/sparse/linalg/_isolve/tfqmr.py +7 -7
  429. scipy/sparse/linalg/_isolve/utils.py +2 -8
  430. scipy/sparse/linalg/_matfuncs.py +1 -1
  431. scipy/sparse/linalg/_norm.py +1 -1
  432. scipy/sparse/linalg/_propack/_cpropack.cpython-312-aarch64-linux-musl.so +0 -0
  433. scipy/sparse/linalg/_propack/_dpropack.cpython-312-aarch64-linux-musl.so +0 -0
  434. scipy/sparse/linalg/_propack/_spropack.cpython-312-aarch64-linux-musl.so +0 -0
  435. scipy/sparse/linalg/_propack/_zpropack.cpython-312-aarch64-linux-musl.so +0 -0
  436. scipy/sparse/linalg/_special_sparse_arrays.py +39 -38
  437. scipy/sparse/linalg/tests/test_pydata_sparse.py +14 -0
  438. scipy/sparse/tests/test_arithmetic1d.py +5 -2
  439. scipy/sparse/tests/test_base.py +214 -42
  440. scipy/sparse/tests/test_common1d.py +7 -7
  441. scipy/sparse/tests/test_construct.py +1 -1
  442. scipy/sparse/tests/test_coo.py +272 -4
  443. scipy/sparse/tests/test_sparsetools.py +5 -0
  444. scipy/sparse/tests/test_sputils.py +36 -7
  445. scipy/spatial/_ckdtree.cpython-312-aarch64-linux-musl.so +0 -0
  446. scipy/spatial/_distance_pybind.cpython-312-aarch64-linux-musl.so +0 -0
  447. scipy/spatial/_distance_wrap.cpython-312-aarch64-linux-musl.so +0 -0
  448. scipy/spatial/_hausdorff.cpython-312-aarch64-linux-musl.so +0 -0
  449. scipy/spatial/_qhull.cpython-312-aarch64-linux-musl.so +0 -0
  450. scipy/spatial/_voronoi.cpython-312-aarch64-linux-musl.so +0 -0
  451. scipy/spatial/distance.py +49 -42
  452. scipy/spatial/tests/test_distance.py +15 -1
  453. scipy/spatial/tests/test_kdtree.py +1 -0
  454. scipy/spatial/tests/test_qhull.py +7 -2
  455. scipy/spatial/transform/__init__.py +5 -3
  456. scipy/spatial/transform/_rigid_transform.cpython-312-aarch64-linux-musl.so +0 -0
  457. scipy/spatial/transform/_rotation.cpython-312-aarch64-linux-musl.so +0 -0
  458. scipy/spatial/transform/tests/test_rigid_transform.py +1221 -0
  459. scipy/spatial/transform/tests/test_rotation.py +1213 -832
  460. scipy/spatial/transform/tests/test_rotation_groups.py +3 -3
  461. scipy/spatial/transform/tests/test_rotation_spline.py +29 -8
  462. scipy/special/__init__.py +1 -47
  463. scipy/special/_add_newdocs.py +34 -772
  464. scipy/special/_basic.py +22 -25
  465. scipy/special/_comb.cpython-312-aarch64-linux-musl.so +0 -0
  466. scipy/special/_ellip_harm_2.cpython-312-aarch64-linux-musl.so +0 -0
  467. scipy/special/_gufuncs.cpython-312-aarch64-linux-musl.so +0 -0
  468. scipy/special/_logsumexp.py +67 -58
  469. scipy/special/_orthogonal.pyi +1 -1
  470. scipy/special/_specfun.cpython-312-aarch64-linux-musl.so +0 -0
  471. scipy/special/_special_ufuncs.cpython-312-aarch64-linux-musl.so +0 -0
  472. scipy/special/_spherical_bessel.py +4 -4
  473. scipy/special/_support_alternative_backends.py +212 -119
  474. scipy/special/_test_internal.cpython-312-aarch64-linux-musl.so +0 -0
  475. scipy/special/_testutils.py +4 -4
  476. scipy/special/_ufuncs.cpython-312-aarch64-linux-musl.so +0 -0
  477. scipy/special/_ufuncs.pyi +1 -0
  478. scipy/special/_ufuncs.pyx +215 -1400
  479. scipy/special/_ufuncs_cxx.cpython-312-aarch64-linux-musl.so +0 -0
  480. scipy/special/_ufuncs_cxx.pxd +2 -15
  481. scipy/special/_ufuncs_cxx.pyx +5 -44
  482. scipy/special/_ufuncs_cxx_defs.h +2 -16
  483. scipy/special/_ufuncs_defs.h +0 -8
  484. scipy/special/cython_special.cpython-312-aarch64-linux-musl.so +0 -0
  485. scipy/special/cython_special.pxd +1 -1
  486. scipy/special/tests/_cython_examples/meson.build +10 -1
  487. scipy/special/tests/test_basic.py +153 -20
  488. scipy/special/tests/test_boost_ufuncs.py +3 -0
  489. scipy/special/tests/test_cdflib.py +35 -11
  490. scipy/special/tests/test_gammainc.py +16 -0
  491. scipy/special/tests/test_hyp2f1.py +2 -2
  492. scipy/special/tests/test_log1mexp.py +85 -0
  493. scipy/special/tests/test_logsumexp.py +206 -64
  494. scipy/special/tests/test_mpmath.py +1 -0
  495. scipy/special/tests/test_nan_inputs.py +1 -1
  496. scipy/special/tests/test_orthogonal.py +17 -18
  497. scipy/special/tests/test_sf_error.py +3 -2
  498. scipy/special/tests/test_sph_harm.py +6 -7
  499. scipy/special/tests/test_support_alternative_backends.py +211 -76
  500. scipy/stats/__init__.py +4 -1
  501. scipy/stats/_ansari_swilk_statistics.cpython-312-aarch64-linux-musl.so +0 -0
  502. scipy/stats/_axis_nan_policy.py +5 -12
  503. scipy/stats/_biasedurn.cpython-312-aarch64-linux-musl.so +0 -0
  504. scipy/stats/_continued_fraction.py +387 -0
  505. scipy/stats/_continuous_distns.py +277 -310
  506. scipy/stats/_correlation.py +1 -1
  507. scipy/stats/_covariance.py +6 -3
  508. scipy/stats/_discrete_distns.py +39 -32
  509. scipy/stats/_distn_infrastructure.py +39 -12
  510. scipy/stats/_distribution_infrastructure.py +900 -238
  511. scipy/stats/_entropy.py +9 -10
  512. scipy/{_lib → stats}/_finite_differences.py +1 -1
  513. scipy/stats/_hypotests.py +83 -50
  514. scipy/stats/_kde.py +53 -49
  515. scipy/stats/_ksstats.py +1 -1
  516. scipy/stats/_levy_stable/__init__.py +7 -15
  517. scipy/stats/_levy_stable/levyst.cpython-312-aarch64-linux-musl.so +0 -0
  518. scipy/stats/_morestats.py +118 -73
  519. scipy/stats/_mstats_basic.py +13 -17
  520. scipy/stats/_mstats_extras.py +8 -8
  521. scipy/stats/_multivariate.py +89 -113
  522. scipy/stats/_new_distributions.py +97 -20
  523. scipy/stats/_page_trend_test.py +12 -5
  524. scipy/stats/_probability_distribution.py +265 -43
  525. scipy/stats/_qmc.py +14 -9
  526. scipy/stats/_qmc_cy.cpython-312-aarch64-linux-musl.so +0 -0
  527. scipy/stats/_qmvnt.py +16 -95
  528. scipy/stats/_qmvnt_cy.cpython-312-aarch64-linux-musl.so +0 -0
  529. scipy/stats/_quantile.py +335 -0
  530. scipy/stats/_rcont/rcont.cpython-312-aarch64-linux-musl.so +0 -0
  531. scipy/stats/_resampling.py +4 -29
  532. scipy/stats/_sampling.py +1 -1
  533. scipy/stats/_sobol.cpython-312-aarch64-linux-musl.so +0 -0
  534. scipy/stats/_stats.cpython-312-aarch64-linux-musl.so +0 -0
  535. scipy/stats/_stats_mstats_common.py +21 -2
  536. scipy/stats/_stats_py.py +550 -476
  537. scipy/stats/_stats_pythran.cpython-312-aarch64-linux-musl.so +0 -0
  538. scipy/stats/_unuran/unuran_wrapper.cpython-312-aarch64-linux-musl.so +0 -0
  539. scipy/stats/_unuran/unuran_wrapper.pyi +2 -1
  540. scipy/stats/_variation.py +6 -8
  541. scipy/stats/_wilcoxon.py +13 -7
  542. scipy/stats/tests/common_tests.py +6 -4
  543. scipy/stats/tests/test_axis_nan_policy.py +62 -24
  544. scipy/stats/tests/test_continued_fraction.py +173 -0
  545. scipy/stats/tests/test_continuous.py +379 -60
  546. scipy/stats/tests/test_continuous_basic.py +18 -12
  547. scipy/stats/tests/test_discrete_basic.py +14 -8
  548. scipy/stats/tests/test_discrete_distns.py +16 -16
  549. scipy/stats/tests/test_distributions.py +95 -75
  550. scipy/stats/tests/test_entropy.py +40 -48
  551. scipy/stats/tests/test_fit.py +4 -3
  552. scipy/stats/tests/test_hypotests.py +153 -24
  553. scipy/stats/tests/test_kdeoth.py +109 -41
  554. scipy/stats/tests/test_marray.py +289 -0
  555. scipy/stats/tests/test_morestats.py +79 -47
  556. scipy/stats/tests/test_mstats_basic.py +3 -3
  557. scipy/stats/tests/test_multivariate.py +434 -83
  558. scipy/stats/tests/test_qmc.py +13 -10
  559. scipy/stats/tests/test_quantile.py +199 -0
  560. scipy/stats/tests/test_rank.py +119 -112
  561. scipy/stats/tests/test_resampling.py +47 -56
  562. scipy/stats/tests/test_sampling.py +9 -4
  563. scipy/stats/tests/test_stats.py +799 -939
  564. scipy/stats/tests/test_variation.py +8 -6
  565. scipy/version.py +2 -2
  566. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/LICENSE.txt +4 -4
  567. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/METADATA +11 -11
  568. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/RECORD +1262 -1269
  569. scipy.libs/libgcc_s-69c45f16.so.1 +0 -0
  570. scipy.libs/libgfortran-db0b6589.so.5.0.0 +0 -0
  571. scipy.libs/{libstdc++-1b614e01.so.6.0.32 → libstdc++-1f1a71be.so.6.0.33} +0 -0
  572. scipy/_lib/array_api_extra/_funcs.py +0 -484
  573. scipy/_lib/array_api_extra/_typing.py +0 -8
  574. scipy/interpolate/_bspl.cpython-312-aarch64-linux-musl.so +0 -0
  575. scipy/optimize/_cobyla.cpython-312-aarch64-linux-musl.so +0 -0
  576. scipy/optimize/_cython_nnls.cpython-312-aarch64-linux-musl.so +0 -0
  577. scipy/optimize/_slsqp.cpython-312-aarch64-linux-musl.so +0 -0
  578. scipy/spatial/qhull_src/COPYING.txt +0 -38
  579. scipy/special/libsf_error_state.so +0 -0
  580. scipy/special/tests/test_log_softmax.py +0 -109
  581. scipy/special/tests/test_xsf_cuda.py +0 -114
  582. scipy/special/xsf/binom.h +0 -89
  583. scipy/special/xsf/cdflib.h +0 -100
  584. scipy/special/xsf/cephes/airy.h +0 -307
  585. scipy/special/xsf/cephes/besselpoly.h +0 -51
  586. scipy/special/xsf/cephes/beta.h +0 -257
  587. scipy/special/xsf/cephes/cbrt.h +0 -131
  588. scipy/special/xsf/cephes/chbevl.h +0 -85
  589. scipy/special/xsf/cephes/chdtr.h +0 -193
  590. scipy/special/xsf/cephes/const.h +0 -87
  591. scipy/special/xsf/cephes/ellie.h +0 -293
  592. scipy/special/xsf/cephes/ellik.h +0 -251
  593. scipy/special/xsf/cephes/ellpe.h +0 -107
  594. scipy/special/xsf/cephes/ellpk.h +0 -117
  595. scipy/special/xsf/cephes/expn.h +0 -260
  596. scipy/special/xsf/cephes/gamma.h +0 -398
  597. scipy/special/xsf/cephes/hyp2f1.h +0 -596
  598. scipy/special/xsf/cephes/hyperg.h +0 -361
  599. scipy/special/xsf/cephes/i0.h +0 -149
  600. scipy/special/xsf/cephes/i1.h +0 -158
  601. scipy/special/xsf/cephes/igam.h +0 -421
  602. scipy/special/xsf/cephes/igam_asymp_coeff.h +0 -195
  603. scipy/special/xsf/cephes/igami.h +0 -313
  604. scipy/special/xsf/cephes/j0.h +0 -225
  605. scipy/special/xsf/cephes/j1.h +0 -198
  606. scipy/special/xsf/cephes/jv.h +0 -715
  607. scipy/special/xsf/cephes/k0.h +0 -164
  608. scipy/special/xsf/cephes/k1.h +0 -163
  609. scipy/special/xsf/cephes/kn.h +0 -243
  610. scipy/special/xsf/cephes/lanczos.h +0 -112
  611. scipy/special/xsf/cephes/ndtr.h +0 -275
  612. scipy/special/xsf/cephes/poch.h +0 -85
  613. scipy/special/xsf/cephes/polevl.h +0 -167
  614. scipy/special/xsf/cephes/psi.h +0 -194
  615. scipy/special/xsf/cephes/rgamma.h +0 -111
  616. scipy/special/xsf/cephes/scipy_iv.h +0 -811
  617. scipy/special/xsf/cephes/shichi.h +0 -248
  618. scipy/special/xsf/cephes/sici.h +0 -224
  619. scipy/special/xsf/cephes/sindg.h +0 -221
  620. scipy/special/xsf/cephes/tandg.h +0 -139
  621. scipy/special/xsf/cephes/trig.h +0 -58
  622. scipy/special/xsf/cephes/unity.h +0 -186
  623. scipy/special/xsf/cephes/zeta.h +0 -172
  624. scipy/special/xsf/config.h +0 -304
  625. scipy/special/xsf/digamma.h +0 -205
  626. scipy/special/xsf/error.h +0 -57
  627. scipy/special/xsf/evalpoly.h +0 -47
  628. scipy/special/xsf/expint.h +0 -266
  629. scipy/special/xsf/hyp2f1.h +0 -694
  630. scipy/special/xsf/iv_ratio.h +0 -173
  631. scipy/special/xsf/lambertw.h +0 -150
  632. scipy/special/xsf/loggamma.h +0 -163
  633. scipy/special/xsf/sici.h +0 -200
  634. scipy/special/xsf/tools.h +0 -427
  635. scipy/special/xsf/trig.h +0 -164
  636. scipy/special/xsf/wright_bessel.h +0 -843
  637. scipy/special/xsf/zlog1.h +0 -35
  638. scipy/stats/_mvn.cpython-312-aarch64-linux-musl.so +0 -0
  639. scipy.libs/libgcc_s-7393e603.so.1 +0 -0
  640. scipy.libs/libgfortran-eb933d8e.so.5.0.0 +0 -0
  641. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/WHEEL +0 -0
@@ -1131,8 +1131,7 @@ class _BivariateSplineBase:
1131
1131
  newc, ier = dfitpack.pardtc(tx, ty, c, kx, ky, dx, dy)
1132
1132
  if ier != 0:
1133
1133
  # This should not happen under normal conditions.
1134
- raise ValueError("Unexpected error code returned by"
1135
- " pardtc: %d" % ier)
1134
+ raise ValueError(f"Unexpected error code returned by pardtc: {ier}")
1136
1135
  nx = len(tx)
1137
1136
  ny = len(ty)
1138
1137
  newtx = tx[dx:nx - dx]
@@ -1158,7 +1157,8 @@ Weighted sum of squared residuals does not satisfy abs(fp-s)/s < tol.""",
1158
1157
  the maximal number of iterations maxit (set to 20 by the program)
1159
1158
  allowed for finding a smoothing spline with fp=s has been reached:
1160
1159
  s too small.
1161
- Weighted sum of squared residuals does not satisfy abs(fp-s)/s < tol.""",
1160
+ Weighted sum of squared residuals does not satisfy abs(fp-s)/s < tol.
1161
+ Try increasing maxit by passing it as a keyword argument.""",
1162
1162
  4: """
1163
1163
  No more knots can be added because the number of b-spline coefficients
1164
1164
  (nx-kx-1)*(ny-ky-1) already exceeds the number of data points m:
@@ -1575,6 +1575,9 @@ class RectBivariateSpline(BivariateSpline):
1575
1575
  Positive smoothing factor defined for estimation condition:
1576
1576
  ``sum((z[i]-f(x[i], y[i]))**2, axis=0) <= s`` where f is a spline
1577
1577
  function. Default is ``s=0``, which is for interpolation.
1578
+ maxit : int, optional
1579
+ The maximal number of iterations maxit allowed for finding a
1580
+ smoothing spline with fp=s. Default is ``maxit=20``.
1578
1581
 
1579
1582
  See Also
1580
1583
  --------
@@ -1607,7 +1610,7 @@ class RectBivariateSpline(BivariateSpline):
1607
1610
 
1608
1611
  """
1609
1612
 
1610
- def __init__(self, x, y, z, bbox=[None] * 4, kx=3, ky=3, s=0):
1613
+ def __init__(self, x, y, z, bbox=[None] * 4, kx=3, ky=3, s=0, maxit=20):
1611
1614
  x, y, bbox = ravel(x), ravel(y), ravel(bbox)
1612
1615
  z = np.asarray(z)
1613
1616
  if not np.all(diff(x) > 0.0):
@@ -1629,7 +1632,7 @@ class RectBivariateSpline(BivariateSpline):
1629
1632
  xb, xe, yb, ye = bbox
1630
1633
  with FITPACK_LOCK:
1631
1634
  nx, tx, ny, ty, c, fp, ier = dfitpack.regrid_smth(x, y, z, xb, xe, yb,
1632
- ye, kx, ky, s)
1635
+ ye, kx, ky, s, maxit)
1633
1636
 
1634
1637
  if ier not in [0, -1, -2]:
1635
1638
  msg = _surfit_messages.get(ier, f'ier={ier}')
@@ -2313,7 +2316,7 @@ class RectSphereBivariateSpline(SphereBivariateSpline):
2313
2316
  ider = np.array([-1, 0, -1, 0], dtype=dfitpack_int)
2314
2317
  if pole_values is None:
2315
2318
  pole_values = (None, None)
2316
- elif isinstance(pole_values, (float, np.float32, np.float64)):
2319
+ elif isinstance(pole_values, float | np.float32 | np.float64):
2317
2320
  pole_values = (pole_values, pole_values)
2318
2321
  if isinstance(pole_continuity, bool):
2319
2322
  pole_continuity = (pole_continuity, pole_continuity)
@@ -117,9 +117,10 @@ def splprep(x, w=None, u=None, ub=None, ue=None, k=3, task=0, s=None, t=None,
117
117
  for i in range(idim):
118
118
  if x[i][0] != x[i][-1]:
119
119
  if not quiet:
120
- warnings.warn(RuntimeWarning('Setting x[%d][%d]=x[%d][0]' %
121
- (i, m, i)),
122
- stacklevel=2)
120
+ warnings.warn(
121
+ RuntimeWarning(f'Setting x[{i}][{m}]=x[{i}][0]'),
122
+ stacklevel=2
123
+ )
123
124
  x[i][-1] = x[i][0]
124
125
  if not 0 < idim < 11:
125
126
  raise TypeError('0 < idim < 11 must hold')
@@ -141,7 +142,7 @@ def splprep(x, w=None, u=None, ub=None, ue=None, k=3, task=0, s=None, t=None,
141
142
  else:
142
143
  _parcur_cache['u'] = zeros(m, float)
143
144
  if not (1 <= k <= 5):
144
- raise TypeError('1 <= k= %d <=5 must hold' % k)
145
+ raise TypeError(f'1 <= k= {k} <=5 must hold')
145
146
  if not (-1 <= task <= 1):
146
147
  raise TypeError('task must be -1, 0 or 1')
147
148
  if (not len(w) == m) or (ipar == 1 and (not len(u) == m)):
@@ -187,10 +188,12 @@ def splprep(x, w=None, u=None, ub=None, ue=None, k=3, task=0, s=None, t=None,
187
188
  c.shape = idim, n - k - 1
188
189
  tcku = [t, list(c), k], u
189
190
  if ier <= 0 and not quiet:
190
- warnings.warn(RuntimeWarning(_iermess[ier][0] +
191
- "\tk=%d n=%d m=%d fp=%f s=%f" %
192
- (k, len(t), m, fp, s)),
193
- stacklevel=2)
191
+ warnings.warn(
192
+ RuntimeWarning(
193
+ _iermess[ier][0] + f"\tk={k} n={len(t)} m={m} fp={fp} s={s}"
194
+ ),
195
+ stacklevel=2
196
+ )
194
197
  if ier > 0 and not full_output:
195
198
  if ier in [1, 2, 3]:
196
199
  warnings.warn(RuntimeWarning(_iermess[ier][0]), stacklevel=2)
@@ -228,13 +231,14 @@ def splrep(x, y, w=None, xb=None, xe=None, k=3, task=0, s=None, t=None,
228
231
  if s is None:
229
232
  s = m - sqrt(2*m)
230
233
  if not len(w) == m:
231
- raise TypeError('len(w)=%d is not equal to m=%d' % (len(w), m))
234
+ raise TypeError(f'len(w)={len(w)} is not equal to m={m}')
232
235
  if (m != len(y)) or (m != len(w)):
233
236
  raise TypeError('Lengths of the first three arguments (x,y,w) must '
234
237
  'be equal')
235
238
  if not (1 <= k <= 5):
236
- raise TypeError('Given degree of the spline (k=%d) is not supported. '
237
- '(1<=k<=5)' % k)
239
+ raise TypeError(
240
+ f'Given degree of the spline (k={k}) is not supported. (1<=k<=5)'
241
+ )
238
242
  if m <= k:
239
243
  raise TypeError('m > k must hold')
240
244
  if xb is None:
@@ -279,8 +283,7 @@ def splrep(x, y, w=None, xb=None, xe=None, k=3, task=0, s=None, t=None,
279
283
  n, c, fp, ier = dfitpack.percur(task, x, y, w, t, wrk, iwrk, k, s)
280
284
  tck = (t[:n], c[:n], k)
281
285
  if ier <= 0 and not quiet:
282
- _mess = (_iermess[ier][0] + "\tk=%d n=%d m=%d fp=%f s=%f" %
283
- (k, len(t), m, fp, s))
286
+ _mess = (_iermess[ier][0] + f"\tk={k} n={len(t)} m={m} fp={fp} s={s}")
284
287
  warnings.warn(RuntimeWarning(_mess), stacklevel=2)
285
288
  if ier > 0 and not full_output:
286
289
  if ier in [1, 2, 3]:
@@ -312,7 +315,7 @@ def splev(x, tck, der=0, ext=0):
312
315
  splev(x, [t, c, k], der, ext), c))
313
316
  else:
314
317
  if not (0 <= der <= k):
315
- raise ValueError("0<=der=%d<=k=%d must hold" % (der, k))
318
+ raise ValueError(f"0<=der={der}<=k={k} must hold")
316
319
  if ext not in (0, 1, 2, 3):
317
320
  raise ValueError(f"ext = {ext} not in (0, 1, 2, 3) ")
318
321
 
@@ -516,7 +519,7 @@ def bisplrep(x, y, z, w=None, xb=None, xe=None, yb=None, ye=None,
516
519
  else:
517
520
  w = atleast_1d(w)
518
521
  if not len(w) == m:
519
- raise TypeError('len(w)=%d is not equal to m=%d' % (len(w), m))
522
+ raise TypeError(f'len(w)={len(w)} is not equal to m={m}')
520
523
  if xb is None:
521
524
  xb = x.min()
522
525
  if xe is None:
@@ -544,8 +547,9 @@ def bisplrep(x, y, z, w=None, xb=None, xe=None, yb=None, ye=None,
544
547
  if task == -1 and ny < 2*ky+2:
545
548
  raise TypeError('There must be at least 2*ky+2 knots_x for task=-1')
546
549
  if not ((1 <= kx <= 5) and (1 <= ky <= 5)):
547
- raise TypeError('Given degree of the spline (kx,ky=%d,%d) is not '
548
- 'supported. (1<=k<=5)' % (kx, ky))
550
+ raise TypeError(
551
+ f'Given degree of the spline (kx,ky={kx},{ky}) is not supported. (1<=k<=5)'
552
+ )
549
553
  if m < (kx + 1)*(ky + 1):
550
554
  raise TypeError('m >= (kx+1)(ky+1) must hold')
551
555
  if nxest is None:
@@ -586,14 +590,16 @@ def bisplrep(x, y, z, w=None, xb=None, xe=None, yb=None, ye=None,
586
590
 
587
591
  ierm = min(11, max(-3, ier))
588
592
  if ierm <= 0 and not quiet:
589
- _mess = (_iermess2[ierm][0] +
590
- "\tkx,ky=%d,%d nx,ny=%d,%d m=%d fp=%f s=%f" %
591
- (kx, ky, len(tx), len(ty), m, fp, s))
593
+ _mess = (
594
+ _iermess2[ierm][0] +
595
+ f"\tkx,ky={kx},{ky} nx,ny={len(tx)},{len(ty)} m={m} fp={fp} s={s}"
596
+ )
592
597
  warnings.warn(RuntimeWarning(_mess), stacklevel=2)
593
598
  if ierm > 0 and not full_output:
594
599
  if ier in [1, 2, 3, 4, 5]:
595
- _mess = ("\n\tkx,ky=%d,%d nx,ny=%d,%d m=%d fp=%f s=%f" %
596
- (kx, ky, len(tx), len(ty), m, fp, s))
600
+ _mess = (
601
+ f"\n\tkx,ky={kx},{ky} nx,ny={len(tx)},{len(ty)} m={m} fp={fp} s={s}"
602
+ )
597
603
  warnings.warn(RuntimeWarning(_iermess2[ierm][0] + _mess), stacklevel=2)
598
604
  else:
599
605
  try:
@@ -663,9 +669,9 @@ def bisplev(x, y, tck, dx=0, dy=0):
663
669
  """
664
670
  tx, ty, c, kx, ky = tck
665
671
  if not (0 <= dx < kx):
666
- raise ValueError("0 <= dx = %d < kx = %d must hold" % (dx, kx))
672
+ raise ValueError(f"0 <= dx = {dx} < kx = {kx} must hold")
667
673
  if not (0 <= dy < ky):
668
- raise ValueError("0 <= dy = %d < ky = %d must hold" % (dy, ky))
674
+ raise ValueError(f"0 <= dy = {dy} < ky = {ky} must hold")
669
675
  x, y = map(atleast_1d, [x, y])
670
676
  if (len(x.shape) != 1) or (len(y.shape) != 1):
671
677
  raise ValueError("First two entries should be rank-1 arrays.")
@@ -771,8 +777,8 @@ def splder(tck, n=1):
771
777
  t = t[1:-1]
772
778
  k -= 1
773
779
  except FloatingPointError as e:
774
- raise ValueError(("The spline has internal repeated knots "
775
- "and is not differentiable %d times") % n) from e
780
+ raise ValueError("The spline has internal repeated knots "
781
+ f"and is not differentiable {n} times") from e
776
782
 
777
783
  return t, c, k
778
784
 
@@ -57,7 +57,11 @@ def _get_residuals(x, y, t, k, w):
57
57
  _, _, c = _lsq_solve_qr(x, y, t, k, w)
58
58
  c = np.ascontiguousarray(c)
59
59
  spl = BSpline(t, c, k)
60
- return _compute_residuals(w2, spl(x), y)
60
+ residuals = _compute_residuals(w2, spl(x), y)
61
+ fp = residuals.sum()
62
+ if np.isnan(fp):
63
+ raise ValueError(_iermesg[1])
64
+ return residuals, fp
61
65
 
62
66
 
63
67
  def _compute_residuals(w2, splx, y):
@@ -139,7 +143,7 @@ def _validate_inputs(x, y, w, k, s, xb, xe, parametric):
139
143
 
140
144
 
141
145
  def generate_knots(x, y, *, w=None, xb=None, xe=None, k=3, s=0, nest=None):
142
- """Replicate FITPACK's constructing the knot vector.
146
+ """Generate knot vectors until the Least SQuares (LSQ) criterion is satified.
143
147
 
144
148
  Parameters
145
149
  ----------
@@ -258,8 +262,7 @@ def _generate_knots_impl(x, y, *, w=None, xb=None, xe=None, k=3, s=0, nest=None)
258
262
 
259
263
  # construct the LSQ spline with this set of knots
260
264
  fpold = fp
261
- residuals = _get_residuals(x, y, t, k, w=w)
262
- fp = residuals.sum()
265
+ residuals, fp = _get_residuals(x, y, t, k, w=w)
263
266
  fpms = fp - s
264
267
 
265
268
  # c test whether the approximation sinf(x) is an acceptable solution.
@@ -300,7 +303,7 @@ def _generate_knots_impl(x, y, *, w=None, xb=None, xe=None, k=3, s=0, nest=None)
300
303
 
301
304
  # recompute if needed
302
305
  if j < nplus - 1:
303
- residuals = _get_residuals(x, y, t, k, w=w)
306
+ residuals, _ = _get_residuals(x, y, t, k, w=w)
304
307
 
305
308
  # this should never be reached
306
309
  return
@@ -536,11 +539,15 @@ class Bunch:
536
539
  self.__dict__.update(**kwargs)
537
540
 
538
541
 
539
- _iermesg = {
540
- 2: """error. a theoretically impossible result was found during
542
+ _iermesg1 = """error. a theoretically impossible result was found during
541
543
  the iteration process for finding a smoothing spline with
542
544
  fp = s. probably causes : s too small.
543
- there is an approximation returned but the corresponding
545
+ """
546
+
547
+ _iermesg = {
548
+ 1: _iermesg1 + """the weighted sum of squared residuals is becoming NaN
549
+ """,
550
+ 2: _iermesg1 + """there is an approximation returned but the corresponding
544
551
  weighted sum of squared residuals does not satisfy the
545
552
  condition abs(fp-s)/s < tol.
546
553
  """,
@@ -659,7 +666,7 @@ def _make_splrep_impl(x, y, *, w=None, xb=None, xe=None, k=3, s=0, t=None, nest=
659
666
  nest = max(m + k + 1, 2*k + 3)
660
667
  else:
661
668
  if nest < 2*(k + 1):
662
- raise ValueError(f"`nest` too small: {nest = } < 2*(k+1) = {2*(k+1)}.")
669
+ raise ValueError(f"`nest` too small: {nest = } < 2*(k+1) = {2*(k+1)}.")
663
670
  if t is not None:
664
671
  raise ValueError("Either supply `t` or `nest`.")
665
672
 
@@ -685,13 +692,11 @@ def _make_splrep_impl(x, y, *, w=None, xb=None, xe=None, k=3, s=0, t=None, nest=
685
692
  # ### bespoke solver ####
686
693
  # initial conditions
687
694
  # f(p=inf) : LSQ spline with knots t (XXX: reuse R, c)
688
- residuals = _get_residuals(x, y, t, k, w=w)
689
- fp = residuals.sum()
695
+ _, fp = _get_residuals(x, y, t, k, w=w)
690
696
  fpinf = fp - s
691
697
 
692
698
  # f(p=0): LSQ spline without internal knots
693
- residuals = _get_residuals(x, y, np.array([xb]*(k+1) + [xe]*(k+1)), k, w)
694
- fp0 = residuals.sum()
699
+ _, fp0 = _get_residuals(x, y, np.array([xb]*(k+1) + [xe]*(k+1)), k, w)
695
700
  fp0 = fp0 - s
696
701
 
697
702
  # solve
@@ -712,7 +717,7 @@ def _make_splrep_impl(x, y, *, w=None, xb=None, xe=None, k=3, s=0, t=None, nest=
712
717
 
713
718
 
714
719
  def make_splrep(x, y, *, w=None, xb=None, xe=None, k=3, s=0, t=None, nest=None):
715
- r"""Find the B-spline representation of a 1D function.
720
+ r"""Create a smoothing B-spline function with bounded error, minimizing derivative jumps.
716
721
 
717
722
  Given the set of data points ``(x[i], y[i])``, determine a smooth spline
718
723
  approximation of degree ``k`` on the interval ``xb <= x <= xe``.
@@ -736,7 +741,7 @@ def make_splrep(x, y, *, w=None, xb=None, xe=None, k=3, s=0, t=None, nest=None):
736
741
  especially with small `s` values.
737
742
  s : float, optional
738
743
  The smoothing condition. The amount of smoothness is determined by
739
- satisfying the conditions::
744
+ satisfying the LSQ (least-squares) constraint::
740
745
 
741
746
  sum((w * (g(x) - y))**2 ) <= s
742
747
 
@@ -829,7 +834,7 @@ def make_splrep(x, y, *, w=None, xb=None, xe=None, k=3, s=0, t=None, nest=None):
829
834
  for a spline function :math:`g(x)` with a _fixed_ knot vector ``t``.
830
835
 
831
836
  .. versionadded:: 1.15.0
832
- """
837
+ """ # noqa:E501
833
838
  if s == 0:
834
839
  if t is not None or w is not None or nest is not None:
835
840
  raise ValueError("s==0 is for interpolation only")
@@ -846,7 +851,7 @@ def make_splrep(x, y, *, w=None, xb=None, xe=None, k=3, s=0, t=None, nest=None):
846
851
 
847
852
  def make_splprep(x, *, w=None, u=None, ub=None, ue=None, k=3, s=0, t=None, nest=None):
848
853
  r"""
849
- Find a smoothed B-spline representation of a parametric N-D curve.
854
+ Create a smoothing parametric B-spline curve with bounded error, minimizing derivative jumps.
850
855
 
851
856
  Given a list of N 1D arrays, `x`, which represent a curve in
852
857
  N-dimensional space parametrized by `u`, find a smooth approximating
@@ -965,7 +970,7 @@ def make_splprep(x, *, w=None, u=None, ub=None, ue=None, k=3, s=0, t=None, nest=
965
970
  20 (1982) 171-184.
966
971
  .. [2] P. Dierckx, "Curve and surface fitting with splines", Monographs on
967
972
  Numerical Analysis, Oxford University Press, 1993.
968
- """
973
+ """ # noqa:E501
969
974
  x = np.stack(x, axis=1)
970
975
 
971
976
  # construct the default parametrization of the curve
@@ -989,4 +994,3 @@ def make_splprep(x, *, w=None, u=None, ub=None, ue=None, k=3, s=0, t=None, nest=
989
994
  spl1 = BSpline(spl.t, cc, spl.k, axis=1)
990
995
 
991
996
  return spl1, u
992
-
@@ -38,6 +38,23 @@ def lagrange(x, w):
38
38
  lagrange : `numpy.poly1d` instance
39
39
  The Lagrange interpolating polynomial.
40
40
 
41
+ Notes
42
+ -----
43
+ The name of this function refers to the fact that the returned object represents
44
+ a Lagrange polynomial, the unique polynomial of lowest degree that interpolates
45
+ a given set of data [1]_. It computes the polynomial using Newton's divided
46
+ differences formula [2]_; that is, it works with Newton basis polynomials rather
47
+ than Lagrange basis polynomials. For numerical calculations, the barycentric form
48
+ of Lagrange interpolation (`scipy.interpolate.BarycentricInterpolator`) is
49
+ typically more appropriate.
50
+
51
+ References
52
+ ----------
53
+ .. [1] Lagrange polynomial. *Wikipedia*.
54
+ https://en.wikipedia.org/wiki/Lagrange_polynomial
55
+ .. [2] Newton polynomial. *Wikipedia*.
56
+ https://en.wikipedia.org/wiki/Newton_polynomial
57
+
41
58
  Examples
42
59
  --------
43
60
  Interpolate :math:`f(x) = x^3` by 3 points.
@@ -48,7 +65,7 @@ def lagrange(x, w):
48
65
  >>> y = x**3
49
66
  >>> poly = lagrange(x, y)
50
67
 
51
- Since there are only 3 points, Lagrange polynomial has degree 2. Explicitly,
68
+ Since there are only 3 points, the Lagrange polynomial has degree 2. Explicitly,
52
69
  it is given by
53
70
 
54
71
  .. math::
@@ -110,6 +127,8 @@ class interp2d:
110
127
  interp2d(x, y, z, kind='linear', copy=True, bounds_error=False,
111
128
  fill_value=None)
112
129
 
130
+ Class for 2D interpolation (deprecated and removed)
131
+
113
132
  .. versionremoved:: 1.14.0
114
133
 
115
134
  `interp2d` has been removed in SciPy 1.14.0.
@@ -153,7 +172,7 @@ def _do_extrapolate(fill_value):
153
172
 
154
173
  class interp1d(_Interpolator1D):
155
174
  """
156
- Interpolate a 1-D function.
175
+ Interpolate a 1-D function (legacy).
157
176
 
158
177
  .. legacy:: class
159
178
 
@@ -402,8 +421,7 @@ class interp1d(_Interpolator1D):
402
421
  self._call = self.__class__._call_spline
403
422
 
404
423
  if len(self.x) < minval:
405
- raise ValueError("x and y arrays must have at "
406
- "least %d entries" % minval)
424
+ raise ValueError(f"x and y arrays must have at least {minval} entries")
407
425
 
408
426
  self.fill_value = fill_value # calls the setter, can modify bounds_err
409
427
 
@@ -796,8 +814,7 @@ class _PPolyBase:
796
814
 
797
815
 
798
816
  class PPoly(_PPolyBase):
799
- """
800
- Piecewise polynomial in terms of coefficients and breakpoints
817
+ """Piecewise polynomial in the power basis.
801
818
 
802
819
  The polynomial between ``x[i]`` and ``x[i + 1]`` is written in the
803
820
  local power basis::
@@ -1260,7 +1277,7 @@ class PPoly(_PPolyBase):
1260
1277
 
1261
1278
 
1262
1279
  class BPoly(_PPolyBase):
1263
- """Piecewise polynomial in terms of coefficients and breakpoints.
1280
+ """Piecewise polynomial in the Bernstein basis.
1264
1281
 
1265
1282
  The polynomial between ``x[i]`` and ``x[i + 1]`` is written in the
1266
1283
  Bernstein polynomial basis::
@@ -1650,7 +1667,7 @@ class BPoly(_PPolyBase):
1650
1667
  if orders is None:
1651
1668
  orders = [None] * m
1652
1669
  else:
1653
- if isinstance(orders, (int, np.integer)):
1670
+ if isinstance(orders, int | np.integer):
1654
1671
  orders = [orders] * m
1655
1672
  k = max(k, max(orders))
1656
1673
 
@@ -1667,10 +1684,11 @@ class BPoly(_PPolyBase):
1667
1684
  n1 = min(n//2, len(y1))
1668
1685
  n2 = min(n - n1, len(y2))
1669
1686
  n1 = min(n - n2, len(y2))
1670
- if n1+n2 != n:
1671
- mesg = ("Point %g has %d derivatives, point %g"
1672
- " has %d derivatives, but order %d requested" % (
1673
- xi[i], len(y1), xi[i+1], len(y2), orders[i]))
1687
+ if n1 + n2 != n:
1688
+ mesg = (
1689
+ f"Point {xi[i]} has {len(y1)} derivatives, point {xi[i+1]} has "
1690
+ f"{len(y2)} derivatives, but order {orders[i]} requested"
1691
+ )
1674
1692
  raise ValueError(mesg)
1675
1693
 
1676
1694
  if not (n1 <= len(y1) and n2 <= len(y2)):
@@ -5,7 +5,7 @@ import numpy as np
5
5
 
6
6
  from math import prod
7
7
 
8
- from . import _bspl # type: ignore[attr-defined]
8
+ from . import _dierckx # type: ignore[attr-defined]
9
9
 
10
10
  import scipy.sparse.linalg as ssl
11
11
  from scipy.sparse import csr_array
@@ -139,9 +139,9 @@ class NdBSpline:
139
139
  extrapolate = bool(extrapolate)
140
140
 
141
141
  if nu is None:
142
- nu = np.zeros((ndim,), dtype=np.intc)
142
+ nu = np.zeros((ndim,), dtype=np.int64)
143
143
  else:
144
- nu = np.asarray(nu, dtype=np.intc)
144
+ nu = np.asarray(nu, dtype=np.int64)
145
145
  if nu.ndim != 1 or nu.shape[0] != ndim:
146
146
  raise ValueError(
147
147
  f"invalid number of derivative orders {nu = } for "
@@ -173,12 +173,10 @@ class NdBSpline:
173
173
 
174
174
  # replacement for np.ravel_multi_index for indexing of `c1`:
175
175
  _strides_c1 = np.asarray([s // c1.dtype.itemsize
176
- for s in c1.strides], dtype=np.intp)
176
+ for s in c1.strides], dtype=np.int64)
177
177
 
178
178
  num_c_tr = c1.shape[-1] # # of trailing coefficients
179
- out = np.empty(xi.shape[:-1] + (num_c_tr,), dtype=c1.dtype)
180
-
181
- _bspl.evaluate_ndbspline(xi,
179
+ out = _dierckx.evaluate_ndbspline(xi,
182
180
  self._t,
183
181
  self._len_t,
184
182
  self._k,
@@ -188,7 +186,7 @@ class NdBSpline:
188
186
  num_c_tr,
189
187
  _strides_c1,
190
188
  self._indices_k1d,
191
- out,)
189
+ )
192
190
  out = out.view(self.c.dtype)
193
191
  return out.reshape(xi_shape[:-1] + self.c.shape[ndim:])
194
192
 
@@ -235,15 +233,12 @@ class NdBSpline:
235
233
  # The strides of the coeffs array: the computation is equivalent to
236
234
  # >>> cstrides = [s // 8 for s in np.empty(c_shape).strides]
237
235
  cs = c_shape[1:] + (1,)
238
- cstrides = np.cumprod(cs[::-1], dtype=np.intp)[::-1].copy()
236
+ cstrides = np.cumprod(cs[::-1], dtype=np.int64)[::-1].copy()
239
237
 
240
238
  # heavy lifting happens here
241
- data, indices, indptr = _bspl._colloc_nd(xvals,
242
- _t,
243
- len_t,
244
- k,
245
- _indices_k1d,
246
- cstrides)
239
+ data, indices, indptr = _dierckx._coloc_nd(xvals,
240
+ _t, len_t, k, _indices_k1d, cstrides)
241
+
247
242
  return csr_array((data, indices, indptr))
248
243
 
249
244
 
@@ -271,7 +266,7 @@ def _preprocess_inputs(k, t_tpl):
271
266
  # make k a tuple
272
267
  k = (k,)*ndim
273
268
 
274
- k = np.asarray([operator.index(ki) for ki in k], dtype=np.int32)
269
+ k = np.asarray([operator.index(ki) for ki in k], dtype=np.int64)
275
270
 
276
271
  if len(k) != ndim:
277
272
  raise ValueError(f"len(t) = {len(t_tpl)} != {len(k) = }.")
@@ -305,7 +300,7 @@ def _preprocess_inputs(k, t_tpl):
305
300
  # non-zero b-spline elements
306
301
  shape = tuple(kd + 1 for kd in k)
307
302
  indices = np.unravel_index(np.arange(prod(shape)), shape)
308
- _indices_k1d = np.asarray(indices, dtype=np.intp).T.copy()
303
+ _indices_k1d = np.asarray(indices, dtype=np.int64).T.copy()
309
304
 
310
305
  # 5. pack the knots into a single array:
311
306
  # ([1, 2, 3, 4], [5, 6], (7, 8, 9)) -->
@@ -318,7 +313,7 @@ def _preprocess_inputs(k, t_tpl):
318
313
  _t.fill(np.nan)
319
314
  for d in range(ndim):
320
315
  _t[d, :len(t_tpl[d])] = t_tpl[d]
321
- len_t = np.asarray(len_t, dtype=np.int32)
316
+ len_t = np.asarray(len_t, dtype=np.int64)
322
317
 
323
318
  return k, _indices_k1d, (_t, len_t)
324
319
 
@@ -18,11 +18,7 @@ __all__ = ['griddata', 'NearestNDInterpolator', 'LinearNDInterpolator',
18
18
 
19
19
 
20
20
  class NearestNDInterpolator(NDInterpolatorBase):
21
- """NearestNDInterpolator(x, y).
22
-
23
- Nearest-neighbor interpolator in N > 1 dimensions.
24
-
25
- .. versionadded:: 0.9
21
+ """Nearest-neighbor interpolator in N > 1 dimensions.
26
22
 
27
23
  Methods
28
24
  -------
@@ -174,7 +170,7 @@ class NearestNDInterpolator(NDInterpolatorBase):
174
170
  def griddata(points, values, xi, method='linear', fill_value=np.nan,
175
171
  rescale=False):
176
172
  """
177
- Interpolate unstructured D-D data.
173
+ Convenience function for interpolating unstructured data in multiple dimensions.
178
174
 
179
175
  Parameters
180
176
  ----------
@@ -328,5 +324,6 @@ def griddata(points, values, xi, method='linear', fill_value=np.nan,
328
324
  rescale=rescale)
329
325
  return ip(xi)
330
326
  else:
331
- raise ValueError("Unknown interpolation method %r for "
332
- "%d dimensional data" % (method, ndim))
327
+ raise ValueError(
328
+ f"Unknown interpolation method {method!r} for {ndim} dimensional data"
329
+ )