scipy 1.15.3__cp313-cp313-macosx_12_0_arm64.whl → 1.16.0rc2__cp313-cp313-macosx_12_0_arm64.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.
- scipy/.dylibs/libscipy_openblas.dylib +0 -0
- scipy/__config__.py +8 -8
- scipy/__init__.py +3 -6
- scipy/_cyutility.cpython-313-darwin.so +0 -0
- scipy/_lib/_array_api.py +486 -161
- scipy/_lib/_array_api_compat_vendor.py +9 -0
- scipy/_lib/_bunch.py +4 -0
- scipy/_lib/_ccallback_c.cpython-313-darwin.so +0 -0
- scipy/_lib/_docscrape.py +1 -1
- scipy/_lib/_elementwise_iterative_method.py +15 -26
- scipy/_lib/_sparse.py +41 -0
- scipy/_lib/_test_deprecation_call.cpython-313-darwin.so +0 -0
- scipy/_lib/_test_deprecation_def.cpython-313-darwin.so +0 -0
- scipy/_lib/_testutils.py +6 -2
- scipy/_lib/_util.py +222 -125
- scipy/_lib/array_api_compat/__init__.py +4 -4
- scipy/_lib/array_api_compat/_internal.py +19 -6
- scipy/_lib/array_api_compat/common/__init__.py +1 -1
- scipy/_lib/array_api_compat/common/_aliases.py +365 -193
- scipy/_lib/array_api_compat/common/_fft.py +94 -64
- scipy/_lib/array_api_compat/common/_helpers.py +413 -180
- scipy/_lib/array_api_compat/common/_linalg.py +116 -40
- scipy/_lib/array_api_compat/common/_typing.py +179 -10
- scipy/_lib/array_api_compat/cupy/__init__.py +1 -4
- scipy/_lib/array_api_compat/cupy/_aliases.py +61 -41
- scipy/_lib/array_api_compat/cupy/_info.py +16 -6
- scipy/_lib/array_api_compat/cupy/_typing.py +24 -39
- scipy/_lib/array_api_compat/dask/array/__init__.py +6 -3
- scipy/_lib/array_api_compat/dask/array/_aliases.py +267 -108
- scipy/_lib/array_api_compat/dask/array/_info.py +105 -34
- scipy/_lib/array_api_compat/dask/array/fft.py +5 -8
- scipy/_lib/array_api_compat/dask/array/linalg.py +21 -22
- scipy/_lib/array_api_compat/numpy/__init__.py +13 -15
- scipy/_lib/array_api_compat/numpy/_aliases.py +98 -49
- scipy/_lib/array_api_compat/numpy/_info.py +36 -16
- scipy/_lib/array_api_compat/numpy/_typing.py +27 -43
- scipy/_lib/array_api_compat/numpy/fft.py +11 -5
- scipy/_lib/array_api_compat/numpy/linalg.py +75 -22
- scipy/_lib/array_api_compat/torch/__init__.py +3 -5
- scipy/_lib/array_api_compat/torch/_aliases.py +262 -159
- scipy/_lib/array_api_compat/torch/_info.py +27 -16
- scipy/_lib/array_api_compat/torch/_typing.py +3 -0
- scipy/_lib/array_api_compat/torch/fft.py +17 -18
- scipy/_lib/array_api_compat/torch/linalg.py +16 -16
- scipy/_lib/array_api_extra/__init__.py +26 -3
- scipy/_lib/array_api_extra/_delegation.py +171 -0
- scipy/_lib/array_api_extra/_lib/__init__.py +1 -0
- scipy/_lib/array_api_extra/_lib/_at.py +463 -0
- scipy/_lib/array_api_extra/_lib/_backends.py +46 -0
- scipy/_lib/array_api_extra/_lib/_funcs.py +937 -0
- scipy/_lib/array_api_extra/_lib/_lazy.py +357 -0
- scipy/_lib/array_api_extra/_lib/_testing.py +278 -0
- scipy/_lib/array_api_extra/_lib/_utils/__init__.py +1 -0
- scipy/_lib/array_api_extra/_lib/_utils/_compat.py +74 -0
- scipy/_lib/array_api_extra/_lib/_utils/_compat.pyi +45 -0
- scipy/_lib/array_api_extra/_lib/_utils/_helpers.py +559 -0
- scipy/_lib/array_api_extra/_lib/_utils/_typing.py +10 -0
- scipy/_lib/array_api_extra/_lib/_utils/_typing.pyi +105 -0
- scipy/_lib/array_api_extra/testing.py +359 -0
- scipy/_lib/decorator.py +2 -2
- scipy/_lib/doccer.py +1 -7
- scipy/_lib/messagestream.cpython-313-darwin.so +0 -0
- scipy/_lib/pyprima/__init__.py +212 -0
- scipy/_lib/pyprima/cobyla/__init__.py +0 -0
- scipy/_lib/pyprima/cobyla/cobyla.py +559 -0
- scipy/_lib/pyprima/cobyla/cobylb.py +714 -0
- scipy/_lib/pyprima/cobyla/geometry.py +226 -0
- scipy/_lib/pyprima/cobyla/initialize.py +215 -0
- scipy/_lib/pyprima/cobyla/trustregion.py +492 -0
- scipy/_lib/pyprima/cobyla/update.py +289 -0
- scipy/_lib/pyprima/common/__init__.py +0 -0
- scipy/_lib/pyprima/common/_bounds.py +34 -0
- scipy/_lib/pyprima/common/_linear_constraints.py +46 -0
- scipy/_lib/pyprima/common/_nonlinear_constraints.py +54 -0
- scipy/_lib/pyprima/common/_project.py +173 -0
- scipy/_lib/pyprima/common/checkbreak.py +93 -0
- scipy/_lib/pyprima/common/consts.py +47 -0
- scipy/_lib/pyprima/common/evaluate.py +99 -0
- scipy/_lib/pyprima/common/history.py +38 -0
- scipy/_lib/pyprima/common/infos.py +30 -0
- scipy/_lib/pyprima/common/linalg.py +435 -0
- scipy/_lib/pyprima/common/message.py +290 -0
- scipy/_lib/pyprima/common/powalg.py +131 -0
- scipy/_lib/pyprima/common/preproc.py +277 -0
- scipy/_lib/pyprima/common/present.py +5 -0
- scipy/_lib/pyprima/common/ratio.py +54 -0
- scipy/_lib/pyprima/common/redrho.py +47 -0
- scipy/_lib/pyprima/common/selectx.py +296 -0
- scipy/_lib/tests/test__util.py +105 -121
- scipy/_lib/tests/test_array_api.py +166 -35
- scipy/_lib/tests/test_bunch.py +7 -0
- scipy/_lib/tests/test_ccallback.py +2 -10
- scipy/_lib/tests/test_public_api.py +13 -0
- scipy/cluster/_hierarchy.cpython-313-darwin.so +0 -0
- scipy/cluster/_optimal_leaf_ordering.cpython-313-darwin.so +0 -0
- scipy/cluster/_vq.cpython-313-darwin.so +0 -0
- scipy/cluster/hierarchy.py +393 -223
- scipy/cluster/tests/test_hierarchy.py +273 -335
- scipy/cluster/tests/test_vq.py +45 -61
- scipy/cluster/vq.py +39 -35
- scipy/conftest.py +263 -157
- scipy/constants/_constants.py +4 -1
- scipy/constants/tests/test_codata.py +2 -2
- scipy/constants/tests/test_constants.py +11 -18
- scipy/datasets/_download_all.py +15 -1
- scipy/datasets/_fetchers.py +7 -1
- scipy/datasets/_utils.py +1 -1
- scipy/differentiate/_differentiate.py +25 -25
- scipy/differentiate/tests/test_differentiate.py +24 -25
- scipy/fft/_basic.py +20 -0
- scipy/fft/_helper.py +3 -34
- scipy/fft/_pocketfft/helper.py +29 -1
- scipy/fft/_pocketfft/tests/test_basic.py +2 -4
- scipy/fft/_pocketfft/tests/test_real_transforms.py +4 -4
- scipy/fft/_realtransforms.py +13 -0
- scipy/fft/tests/test_basic.py +27 -25
- scipy/fft/tests/test_fftlog.py +16 -7
- scipy/fft/tests/test_helper.py +18 -34
- scipy/fft/tests/test_real_transforms.py +8 -10
- scipy/fftpack/convolve.cpython-313-darwin.so +0 -0
- scipy/fftpack/tests/test_basic.py +2 -4
- scipy/fftpack/tests/test_real_transforms.py +8 -9
- scipy/integrate/_bvp.py +9 -3
- scipy/integrate/_cubature.py +3 -2
- scipy/integrate/_dop.cpython-313-darwin.so +0 -0
- scipy/integrate/_lsoda.cpython-313-darwin.so +0 -0
- scipy/integrate/_ode.py +9 -2
- scipy/integrate/_odepack.cpython-313-darwin.so +0 -0
- scipy/integrate/_quad_vec.py +21 -29
- scipy/integrate/_quadpack.cpython-313-darwin.so +0 -0
- scipy/integrate/_quadpack_py.py +11 -7
- scipy/integrate/_quadrature.py +3 -3
- scipy/integrate/_rules/_base.py +2 -2
- scipy/integrate/_tanhsinh.py +48 -47
- scipy/integrate/_test_odeint_banded.cpython-313-darwin.so +0 -0
- scipy/integrate/_vode.cpython-313-darwin.so +0 -0
- scipy/integrate/tests/test__quad_vec.py +0 -6
- scipy/integrate/tests/test_banded_ode_solvers.py +85 -0
- scipy/integrate/tests/test_cubature.py +21 -35
- scipy/integrate/tests/test_quadrature.py +6 -8
- scipy/integrate/tests/test_tanhsinh.py +56 -48
- scipy/interpolate/__init__.py +70 -58
- scipy/interpolate/_bary_rational.py +22 -22
- scipy/interpolate/_bsplines.py +119 -66
- scipy/interpolate/_cubic.py +65 -50
- scipy/interpolate/_dfitpack.cpython-313-darwin.so +0 -0
- scipy/interpolate/_dierckx.cpython-313-darwin.so +0 -0
- scipy/interpolate/_fitpack.cpython-313-darwin.so +0 -0
- scipy/interpolate/_fitpack2.py +9 -6
- scipy/interpolate/_fitpack_impl.py +32 -26
- scipy/interpolate/_fitpack_repro.py +23 -19
- scipy/interpolate/_interpnd.cpython-313-darwin.so +0 -0
- scipy/interpolate/_interpolate.py +30 -12
- scipy/interpolate/_ndbspline.py +13 -18
- scipy/interpolate/_ndgriddata.py +5 -8
- scipy/interpolate/_polyint.py +95 -31
- scipy/interpolate/_ppoly.cpython-313-darwin.so +0 -0
- scipy/interpolate/_rbf.py +2 -2
- scipy/interpolate/_rbfinterp.py +1 -1
- scipy/interpolate/_rbfinterp_pythran.cpython-313-darwin.so +0 -0
- scipy/interpolate/_rgi.py +31 -26
- scipy/interpolate/_rgi_cython.cpython-313-darwin.so +0 -0
- scipy/interpolate/dfitpack.py +0 -20
- scipy/interpolate/interpnd.py +1 -2
- scipy/interpolate/tests/test_bary_rational.py +2 -2
- scipy/interpolate/tests/test_bsplines.py +97 -1
- scipy/interpolate/tests/test_fitpack2.py +39 -1
- scipy/interpolate/tests/test_interpnd.py +32 -20
- scipy/interpolate/tests/test_interpolate.py +48 -4
- scipy/interpolate/tests/test_rgi.py +2 -1
- scipy/io/_fast_matrix_market/__init__.py +2 -0
- scipy/io/_harwell_boeing/_fortran_format_parser.py +19 -16
- scipy/io/_harwell_boeing/hb.py +7 -11
- scipy/io/_idl.py +5 -7
- scipy/io/_netcdf.py +15 -5
- scipy/io/_test_fortran.cpython-313-darwin.so +0 -0
- scipy/io/arff/tests/test_arffread.py +3 -3
- scipy/io/matlab/__init__.py +5 -3
- scipy/io/matlab/_mio.py +4 -1
- scipy/io/matlab/_mio5.py +19 -13
- scipy/io/matlab/_mio5_utils.cpython-313-darwin.so +0 -0
- scipy/io/matlab/_mio_utils.cpython-313-darwin.so +0 -0
- scipy/io/matlab/_miobase.py +4 -1
- scipy/io/matlab/_streams.cpython-313-darwin.so +0 -0
- scipy/io/matlab/tests/test_mio.py +46 -18
- scipy/io/matlab/tests/test_mio_funcs.py +1 -1
- scipy/io/tests/test_mmio.py +7 -1
- scipy/io/tests/test_wavfile.py +41 -0
- scipy/io/wavfile.py +57 -10
- scipy/linalg/_basic.py +113 -86
- scipy/linalg/_cythonized_array_utils.cpython-313-darwin.so +0 -0
- scipy/linalg/_decomp.py +22 -9
- scipy/linalg/_decomp_cholesky.py +28 -13
- scipy/linalg/_decomp_cossin.py +45 -30
- scipy/linalg/_decomp_interpolative.cpython-313-darwin.so +0 -0
- scipy/linalg/_decomp_ldl.py +4 -1
- scipy/linalg/_decomp_lu.py +18 -6
- scipy/linalg/_decomp_lu_cython.cpython-313-darwin.so +0 -0
- scipy/linalg/_decomp_polar.py +2 -0
- scipy/linalg/_decomp_qr.py +6 -2
- scipy/linalg/_decomp_qz.py +3 -0
- scipy/linalg/_decomp_schur.py +3 -1
- scipy/linalg/_decomp_svd.py +13 -2
- scipy/linalg/_decomp_update.cpython-313-darwin.so +0 -0
- scipy/linalg/_expm_frechet.py +4 -0
- scipy/linalg/_fblas.cpython-313-darwin.so +0 -0
- scipy/linalg/_flapack.cpython-313-darwin.so +0 -0
- scipy/linalg/_linalg_pythran.cpython-313-darwin.so +0 -0
- scipy/linalg/_matfuncs.py +187 -4
- scipy/linalg/_matfuncs_expm.cpython-313-darwin.so +0 -0
- scipy/linalg/_matfuncs_schur_sqrtm.cpython-313-darwin.so +0 -0
- scipy/linalg/_matfuncs_sqrtm.py +1 -99
- scipy/linalg/_matfuncs_sqrtm_triu.cpython-313-darwin.so +0 -0
- scipy/linalg/_procrustes.py +2 -0
- scipy/linalg/_sketches.py +17 -6
- scipy/linalg/_solve_toeplitz.cpython-313-darwin.so +0 -0
- scipy/linalg/_solvers.py +7 -2
- scipy/linalg/_special_matrices.py +26 -36
- scipy/linalg/cython_blas.cpython-313-darwin.so +0 -0
- scipy/linalg/cython_lapack.cpython-313-darwin.so +0 -0
- scipy/linalg/lapack.py +22 -2
- scipy/linalg/tests/_cython_examples/meson.build +7 -0
- scipy/linalg/tests/test_basic.py +31 -16
- scipy/linalg/tests/test_batch.py +588 -0
- scipy/linalg/tests/test_cythonized_array_utils.py +0 -2
- scipy/linalg/tests/test_decomp.py +40 -3
- scipy/linalg/tests/test_decomp_cossin.py +14 -0
- scipy/linalg/tests/test_decomp_ldl.py +1 -1
- scipy/linalg/tests/test_lapack.py +115 -7
- scipy/linalg/tests/test_matfuncs.py +157 -102
- scipy/linalg/tests/test_procrustes.py +0 -7
- scipy/linalg/tests/test_solve_toeplitz.py +1 -1
- scipy/linalg/tests/test_special_matrices.py +1 -5
- scipy/ndimage/__init__.py +1 -0
- scipy/ndimage/_cytest.cpython-313-darwin.so +0 -0
- scipy/ndimage/_delegators.py +8 -2
- scipy/ndimage/_filters.py +453 -5
- scipy/ndimage/_interpolation.py +36 -6
- scipy/ndimage/_measurements.py +4 -2
- scipy/ndimage/_morphology.py +5 -0
- scipy/ndimage/_nd_image.cpython-313-darwin.so +0 -0
- scipy/ndimage/_ni_docstrings.py +5 -1
- scipy/ndimage/_ni_label.cpython-313-darwin.so +0 -0
- scipy/ndimage/_ni_support.py +1 -5
- scipy/ndimage/_rank_filter_1d.cpython-313-darwin.so +0 -0
- scipy/ndimage/_support_alternative_backends.py +18 -6
- scipy/ndimage/tests/test_filters.py +370 -259
- scipy/ndimage/tests/test_fourier.py +7 -9
- scipy/ndimage/tests/test_interpolation.py +68 -61
- scipy/ndimage/tests/test_measurements.py +18 -35
- scipy/ndimage/tests/test_morphology.py +143 -131
- scipy/ndimage/tests/test_splines.py +1 -3
- scipy/odr/__odrpack.cpython-313-darwin.so +0 -0
- scipy/optimize/_basinhopping.py +13 -7
- scipy/optimize/_bglu_dense.cpython-313-darwin.so +0 -0
- scipy/optimize/_bracket.py +17 -24
- scipy/optimize/_chandrupatla.py +9 -10
- scipy/optimize/_cobyla_py.py +104 -123
- scipy/optimize/_constraints.py +14 -10
- scipy/optimize/_differentiable_functions.py +371 -230
- scipy/optimize/_differentialevolution.py +4 -3
- scipy/optimize/_direct.cpython-313-darwin.so +0 -0
- scipy/optimize/_dual_annealing.py +1 -1
- scipy/optimize/_elementwise.py +1 -4
- scipy/optimize/_group_columns.cpython-313-darwin.so +0 -0
- scipy/optimize/_lbfgsb.cpython-313-darwin.so +0 -0
- scipy/optimize/_lbfgsb_py.py +57 -16
- scipy/optimize/_linprog_doc.py +2 -2
- scipy/optimize/_linprog_highs.py +2 -2
- scipy/optimize/_linprog_ip.py +25 -10
- scipy/optimize/_linprog_util.py +14 -16
- scipy/optimize/_lsap.cpython-313-darwin.so +0 -0
- scipy/optimize/_lsq/common.py +3 -3
- scipy/optimize/_lsq/dogbox.py +16 -2
- scipy/optimize/_lsq/givens_elimination.cpython-313-darwin.so +0 -0
- scipy/optimize/_lsq/least_squares.py +198 -126
- scipy/optimize/_lsq/lsq_linear.py +6 -6
- scipy/optimize/_lsq/trf.py +35 -8
- scipy/optimize/_milp.py +3 -1
- scipy/optimize/_minimize.py +105 -36
- scipy/optimize/_minpack.cpython-313-darwin.so +0 -0
- scipy/optimize/_minpack_py.py +21 -14
- scipy/optimize/_moduleTNC.cpython-313-darwin.so +0 -0
- scipy/optimize/_nnls.py +20 -21
- scipy/optimize/_nonlin.py +34 -3
- scipy/optimize/_numdiff.py +288 -110
- scipy/optimize/_optimize.py +86 -48
- scipy/optimize/_pava_pybind.cpython-313-darwin.so +0 -0
- scipy/optimize/_remove_redundancy.py +5 -5
- scipy/optimize/_root_scalar.py +1 -1
- scipy/optimize/_shgo.py +6 -0
- scipy/optimize/_shgo_lib/_complex.py +1 -1
- scipy/optimize/_slsqp_py.py +216 -124
- scipy/optimize/_slsqplib.cpython-313-darwin.so +0 -0
- scipy/optimize/_spectral.py +1 -1
- scipy/optimize/_tnc.py +8 -1
- scipy/optimize/_trlib/_trlib.cpython-313-darwin.so +0 -0
- scipy/optimize/_trustregion.py +20 -6
- scipy/optimize/_trustregion_constr/canonical_constraint.py +7 -7
- scipy/optimize/_trustregion_constr/equality_constrained_sqp.py +1 -1
- scipy/optimize/_trustregion_constr/minimize_trustregion_constr.py +11 -3
- scipy/optimize/_trustregion_constr/projections.py +12 -8
- scipy/optimize/_trustregion_constr/qp_subproblem.py +9 -9
- scipy/optimize/_trustregion_constr/tests/test_projections.py +7 -7
- scipy/optimize/_trustregion_constr/tests/test_qp_subproblem.py +77 -77
- scipy/optimize/_trustregion_constr/tr_interior_point.py +5 -5
- scipy/optimize/_trustregion_exact.py +0 -1
- scipy/optimize/_zeros.cpython-313-darwin.so +0 -0
- scipy/optimize/_zeros_py.py +97 -17
- scipy/optimize/cython_optimize/_zeros.cpython-313-darwin.so +0 -0
- scipy/optimize/slsqp.py +0 -1
- scipy/optimize/tests/test__basinhopping.py +1 -1
- scipy/optimize/tests/test__differential_evolution.py +4 -4
- scipy/optimize/tests/test__linprog_clean_inputs.py +5 -3
- scipy/optimize/tests/test__numdiff.py +66 -22
- scipy/optimize/tests/test__remove_redundancy.py +2 -2
- scipy/optimize/tests/test__shgo.py +9 -1
- scipy/optimize/tests/test_bracket.py +36 -46
- scipy/optimize/tests/test_chandrupatla.py +133 -135
- scipy/optimize/tests/test_cobyla.py +74 -45
- scipy/optimize/tests/test_constraints.py +1 -1
- scipy/optimize/tests/test_differentiable_functions.py +226 -6
- scipy/optimize/tests/test_lbfgsb_hessinv.py +22 -0
- scipy/optimize/tests/test_least_squares.py +125 -13
- scipy/optimize/tests/test_linear_assignment.py +3 -3
- scipy/optimize/tests/test_linprog.py +3 -3
- scipy/optimize/tests/test_lsq_linear.py +6 -6
- scipy/optimize/tests/test_minimize_constrained.py +2 -2
- scipy/optimize/tests/test_minpack.py +4 -4
- scipy/optimize/tests/test_nnls.py +43 -3
- scipy/optimize/tests/test_nonlin.py +36 -0
- scipy/optimize/tests/test_optimize.py +95 -17
- scipy/optimize/tests/test_slsqp.py +36 -4
- scipy/optimize/tests/test_zeros.py +34 -1
- scipy/signal/__init__.py +12 -23
- scipy/signal/_delegators.py +568 -0
- scipy/signal/_filter_design.py +459 -241
- scipy/signal/_fir_filter_design.py +262 -90
- scipy/signal/_lti_conversion.py +3 -2
- scipy/signal/_ltisys.py +118 -91
- scipy/signal/_max_len_seq_inner.cpython-313-darwin.so +0 -0
- scipy/signal/_peak_finding_utils.cpython-313-darwin.so +0 -0
- scipy/signal/_polyutils.py +172 -0
- scipy/signal/_short_time_fft.py +519 -70
- scipy/signal/_signal_api.py +30 -0
- scipy/signal/_signaltools.py +719 -399
- scipy/signal/_sigtools.cpython-313-darwin.so +0 -0
- scipy/signal/_sosfilt.cpython-313-darwin.so +0 -0
- scipy/signal/_spectral_py.py +230 -50
- scipy/signal/_spline.cpython-313-darwin.so +0 -0
- scipy/signal/_spline_filters.py +108 -68
- scipy/signal/_support_alternative_backends.py +73 -0
- scipy/signal/_upfirdn.py +4 -1
- scipy/signal/_upfirdn_apply.cpython-313-darwin.so +0 -0
- scipy/signal/_waveforms.py +2 -11
- scipy/signal/_wavelets.py +1 -1
- scipy/signal/fir_filter_design.py +1 -0
- scipy/signal/spline.py +4 -11
- scipy/signal/tests/_scipy_spectral_test_shim.py +2 -171
- scipy/signal/tests/test_bsplines.py +114 -79
- scipy/signal/tests/test_cont2discrete.py +9 -2
- scipy/signal/tests/test_filter_design.py +721 -481
- scipy/signal/tests/test_fir_filter_design.py +332 -140
- scipy/signal/tests/test_savitzky_golay.py +4 -3
- scipy/signal/tests/test_short_time_fft.py +221 -3
- scipy/signal/tests/test_signaltools.py +2144 -1348
- scipy/signal/tests/test_spectral.py +50 -6
- scipy/signal/tests/test_splines.py +161 -96
- scipy/signal/tests/test_upfirdn.py +84 -50
- scipy/signal/tests/test_waveforms.py +20 -0
- scipy/signal/tests/test_windows.py +607 -466
- scipy/signal/windows/_windows.py +287 -148
- scipy/sparse/__init__.py +23 -4
- scipy/sparse/_base.py +270 -108
- scipy/sparse/_bsr.py +7 -4
- scipy/sparse/_compressed.py +59 -231
- scipy/sparse/_construct.py +90 -38
- scipy/sparse/_coo.py +115 -181
- scipy/sparse/_csc.py +4 -4
- scipy/sparse/_csparsetools.cpython-313-darwin.so +0 -0
- scipy/sparse/_csr.py +2 -2
- scipy/sparse/_data.py +48 -48
- scipy/sparse/_dia.py +105 -18
- scipy/sparse/_dok.py +0 -23
- scipy/sparse/_index.py +4 -4
- scipy/sparse/_matrix.py +23 -0
- scipy/sparse/_sparsetools.cpython-313-darwin.so +0 -0
- scipy/sparse/_sputils.py +37 -22
- scipy/sparse/base.py +0 -9
- scipy/sparse/bsr.py +0 -14
- scipy/sparse/compressed.py +0 -23
- scipy/sparse/construct.py +0 -6
- scipy/sparse/coo.py +0 -14
- scipy/sparse/csc.py +0 -3
- scipy/sparse/csgraph/_flow.cpython-313-darwin.so +0 -0
- scipy/sparse/csgraph/_matching.cpython-313-darwin.so +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cpython-313-darwin.so +0 -0
- scipy/sparse/csgraph/_reordering.cpython-313-darwin.so +0 -0
- scipy/sparse/csgraph/_shortest_path.cpython-313-darwin.so +0 -0
- scipy/sparse/csgraph/_tools.cpython-313-darwin.so +0 -0
- scipy/sparse/csgraph/_traversal.cpython-313-darwin.so +0 -0
- scipy/sparse/csgraph/tests/test_matching.py +14 -2
- scipy/sparse/csgraph/tests/test_pydata_sparse.py +4 -1
- scipy/sparse/csgraph/tests/test_shortest_path.py +83 -27
- scipy/sparse/csr.py +0 -5
- scipy/sparse/data.py +1 -6
- scipy/sparse/dia.py +0 -7
- scipy/sparse/dok.py +0 -10
- scipy/sparse/linalg/_dsolve/_superlu.cpython-313-darwin.so +0 -0
- scipy/sparse/linalg/_dsolve/linsolve.py +9 -0
- scipy/sparse/linalg/_dsolve/tests/test_linsolve.py +35 -28
- scipy/sparse/linalg/_eigen/arpack/_arpack.cpython-313-darwin.so +0 -0
- scipy/sparse/linalg/_eigen/arpack/arpack.py +23 -17
- scipy/sparse/linalg/_eigen/lobpcg/lobpcg.py +6 -6
- scipy/sparse/linalg/_interface.py +17 -18
- scipy/sparse/linalg/_isolve/_gcrotmk.py +4 -4
- scipy/sparse/linalg/_isolve/iterative.py +51 -45
- scipy/sparse/linalg/_isolve/lgmres.py +6 -6
- scipy/sparse/linalg/_isolve/minres.py +5 -5
- scipy/sparse/linalg/_isolve/tfqmr.py +7 -7
- scipy/sparse/linalg/_isolve/utils.py +2 -8
- scipy/sparse/linalg/_matfuncs.py +1 -1
- scipy/sparse/linalg/_norm.py +1 -1
- scipy/sparse/linalg/_propack/_cpropack.cpython-313-darwin.so +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cpython-313-darwin.so +0 -0
- scipy/sparse/linalg/_propack/_spropack.cpython-313-darwin.so +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cpython-313-darwin.so +0 -0
- scipy/sparse/linalg/_special_sparse_arrays.py +39 -38
- scipy/sparse/linalg/tests/test_pydata_sparse.py +14 -0
- scipy/sparse/tests/test_arithmetic1d.py +5 -2
- scipy/sparse/tests/test_base.py +214 -42
- scipy/sparse/tests/test_common1d.py +7 -7
- scipy/sparse/tests/test_construct.py +1 -1
- scipy/sparse/tests/test_coo.py +272 -4
- scipy/sparse/tests/test_sparsetools.py +5 -0
- scipy/sparse/tests/test_sputils.py +36 -7
- scipy/spatial/_ckdtree.cpython-313-darwin.so +0 -0
- scipy/spatial/_distance_pybind.cpython-313-darwin.so +0 -0
- scipy/spatial/_distance_wrap.cpython-313-darwin.so +0 -0
- scipy/spatial/_hausdorff.cpython-313-darwin.so +0 -0
- scipy/spatial/_qhull.cpython-313-darwin.so +0 -0
- scipy/spatial/_voronoi.cpython-313-darwin.so +0 -0
- scipy/spatial/distance.py +49 -42
- scipy/spatial/tests/test_distance.py +15 -1
- scipy/spatial/tests/test_kdtree.py +1 -0
- scipy/spatial/tests/test_qhull.py +7 -2
- scipy/spatial/transform/__init__.py +5 -3
- scipy/spatial/transform/_rigid_transform.cpython-313-darwin.so +0 -0
- scipy/spatial/transform/_rotation.cpython-313-darwin.so +0 -0
- scipy/spatial/transform/tests/test_rigid_transform.py +1221 -0
- scipy/spatial/transform/tests/test_rotation.py +1213 -832
- scipy/spatial/transform/tests/test_rotation_groups.py +3 -3
- scipy/spatial/transform/tests/test_rotation_spline.py +29 -8
- scipy/special/__init__.py +1 -47
- scipy/special/_add_newdocs.py +34 -772
- scipy/special/_basic.py +22 -25
- scipy/special/_comb.cpython-313-darwin.so +0 -0
- scipy/special/_ellip_harm_2.cpython-313-darwin.so +0 -0
- scipy/special/_gufuncs.cpython-313-darwin.so +0 -0
- scipy/special/_logsumexp.py +67 -58
- scipy/special/_orthogonal.pyi +1 -1
- scipy/special/_specfun.cpython-313-darwin.so +0 -0
- scipy/special/_special_ufuncs.cpython-313-darwin.so +0 -0
- scipy/special/_spherical_bessel.py +4 -4
- scipy/special/_support_alternative_backends.py +212 -119
- scipy/special/_test_internal.cpython-313-darwin.so +0 -0
- scipy/special/_testutils.py +4 -4
- scipy/special/_ufuncs.cpython-313-darwin.so +0 -0
- scipy/special/_ufuncs.pyi +1 -0
- scipy/special/_ufuncs.pyx +215 -1400
- scipy/special/_ufuncs_cxx.cpython-313-darwin.so +0 -0
- scipy/special/_ufuncs_cxx.pxd +2 -15
- scipy/special/_ufuncs_cxx.pyx +5 -44
- scipy/special/_ufuncs_cxx_defs.h +2 -16
- scipy/special/_ufuncs_defs.h +0 -8
- scipy/special/cython_special.cpython-313-darwin.so +0 -0
- scipy/special/cython_special.pxd +1 -1
- scipy/special/tests/_cython_examples/meson.build +10 -1
- scipy/special/tests/test_basic.py +153 -20
- scipy/special/tests/test_boost_ufuncs.py +3 -0
- scipy/special/tests/test_cdflib.py +35 -11
- scipy/special/tests/test_gammainc.py +16 -0
- scipy/special/tests/test_hyp2f1.py +2 -2
- scipy/special/tests/test_log1mexp.py +85 -0
- scipy/special/tests/test_logsumexp.py +206 -64
- scipy/special/tests/test_mpmath.py +1 -0
- scipy/special/tests/test_nan_inputs.py +1 -1
- scipy/special/tests/test_orthogonal.py +17 -18
- scipy/special/tests/test_sf_error.py +3 -2
- scipy/special/tests/test_sph_harm.py +6 -7
- scipy/special/tests/test_support_alternative_backends.py +211 -76
- scipy/stats/__init__.py +4 -1
- scipy/stats/_ansari_swilk_statistics.cpython-313-darwin.so +0 -0
- scipy/stats/_axis_nan_policy.py +5 -12
- scipy/stats/_biasedurn.cpython-313-darwin.so +0 -0
- scipy/stats/_continued_fraction.py +387 -0
- scipy/stats/_continuous_distns.py +277 -310
- scipy/stats/_correlation.py +1 -1
- scipy/stats/_covariance.py +6 -3
- scipy/stats/_discrete_distns.py +39 -32
- scipy/stats/_distn_infrastructure.py +39 -12
- scipy/stats/_distribution_infrastructure.py +900 -238
- scipy/stats/_entropy.py +9 -10
- scipy/{_lib → stats}/_finite_differences.py +1 -1
- scipy/stats/_hypotests.py +83 -50
- scipy/stats/_kde.py +53 -49
- scipy/stats/_ksstats.py +1 -1
- scipy/stats/_levy_stable/__init__.py +7 -15
- scipy/stats/_levy_stable/levyst.cpython-313-darwin.so +0 -0
- scipy/stats/_morestats.py +118 -73
- scipy/stats/_mstats_basic.py +13 -17
- scipy/stats/_mstats_extras.py +8 -8
- scipy/stats/_multivariate.py +89 -113
- scipy/stats/_new_distributions.py +97 -20
- scipy/stats/_page_trend_test.py +12 -5
- scipy/stats/_probability_distribution.py +265 -43
- scipy/stats/_qmc.py +14 -9
- scipy/stats/_qmc_cy.cpython-313-darwin.so +0 -0
- scipy/stats/_qmvnt.py +16 -95
- scipy/stats/_qmvnt_cy.cpython-313-darwin.so +0 -0
- scipy/stats/_quantile.py +335 -0
- scipy/stats/_rcont/rcont.cpython-313-darwin.so +0 -0
- scipy/stats/_resampling.py +4 -29
- scipy/stats/_sampling.py +1 -1
- scipy/stats/_sobol.cpython-313-darwin.so +0 -0
- scipy/stats/_stats.cpython-313-darwin.so +0 -0
- scipy/stats/_stats_mstats_common.py +21 -2
- scipy/stats/_stats_py.py +550 -476
- scipy/stats/_stats_pythran.cpython-313-darwin.so +0 -0
- scipy/stats/_unuran/unuran_wrapper.cpython-313-darwin.so +0 -0
- scipy/stats/_unuran/unuran_wrapper.pyi +2 -1
- scipy/stats/_variation.py +6 -8
- scipy/stats/_wilcoxon.py +13 -7
- scipy/stats/tests/common_tests.py +6 -4
- scipy/stats/tests/test_axis_nan_policy.py +62 -24
- scipy/stats/tests/test_continued_fraction.py +173 -0
- scipy/stats/tests/test_continuous.py +379 -60
- scipy/stats/tests/test_continuous_basic.py +18 -12
- scipy/stats/tests/test_discrete_basic.py +14 -8
- scipy/stats/tests/test_discrete_distns.py +16 -16
- scipy/stats/tests/test_distributions.py +95 -75
- scipy/stats/tests/test_entropy.py +40 -48
- scipy/stats/tests/test_fit.py +4 -3
- scipy/stats/tests/test_hypotests.py +153 -24
- scipy/stats/tests/test_kdeoth.py +109 -41
- scipy/stats/tests/test_marray.py +289 -0
- scipy/stats/tests/test_morestats.py +79 -47
- scipy/stats/tests/test_mstats_basic.py +3 -3
- scipy/stats/tests/test_multivariate.py +434 -83
- scipy/stats/tests/test_qmc.py +13 -10
- scipy/stats/tests/test_quantile.py +199 -0
- scipy/stats/tests/test_rank.py +119 -112
- scipy/stats/tests/test_resampling.py +47 -56
- scipy/stats/tests/test_sampling.py +9 -4
- scipy/stats/tests/test_stats.py +799 -939
- scipy/stats/tests/test_variation.py +8 -6
- scipy/version.py +2 -2
- {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/LICENSE.txt +4 -4
- {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/METADATA +11 -11
- {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/RECORD +561 -568
- scipy-1.16.0rc2.dist-info/WHEEL +6 -0
- scipy/_lib/array_api_extra/_funcs.py +0 -484
- scipy/_lib/array_api_extra/_typing.py +0 -8
- scipy/interpolate/_bspl.cpython-313-darwin.so +0 -0
- scipy/optimize/_cobyla.cpython-313-darwin.so +0 -0
- scipy/optimize/_cython_nnls.cpython-313-darwin.so +0 -0
- scipy/optimize/_slsqp.cpython-313-darwin.so +0 -0
- scipy/spatial/qhull_src/COPYING.txt +0 -38
- scipy/special/libsf_error_state.dylib +0 -0
- scipy/special/tests/test_log_softmax.py +0 -109
- scipy/special/tests/test_xsf_cuda.py +0 -114
- scipy/special/xsf/binom.h +0 -89
- scipy/special/xsf/cdflib.h +0 -100
- scipy/special/xsf/cephes/airy.h +0 -307
- scipy/special/xsf/cephes/besselpoly.h +0 -51
- scipy/special/xsf/cephes/beta.h +0 -257
- scipy/special/xsf/cephes/cbrt.h +0 -131
- scipy/special/xsf/cephes/chbevl.h +0 -85
- scipy/special/xsf/cephes/chdtr.h +0 -193
- scipy/special/xsf/cephes/const.h +0 -87
- scipy/special/xsf/cephes/ellie.h +0 -293
- scipy/special/xsf/cephes/ellik.h +0 -251
- scipy/special/xsf/cephes/ellpe.h +0 -107
- scipy/special/xsf/cephes/ellpk.h +0 -117
- scipy/special/xsf/cephes/expn.h +0 -260
- scipy/special/xsf/cephes/gamma.h +0 -398
- scipy/special/xsf/cephes/hyp2f1.h +0 -596
- scipy/special/xsf/cephes/hyperg.h +0 -361
- scipy/special/xsf/cephes/i0.h +0 -149
- scipy/special/xsf/cephes/i1.h +0 -158
- scipy/special/xsf/cephes/igam.h +0 -421
- scipy/special/xsf/cephes/igam_asymp_coeff.h +0 -195
- scipy/special/xsf/cephes/igami.h +0 -313
- scipy/special/xsf/cephes/j0.h +0 -225
- scipy/special/xsf/cephes/j1.h +0 -198
- scipy/special/xsf/cephes/jv.h +0 -715
- scipy/special/xsf/cephes/k0.h +0 -164
- scipy/special/xsf/cephes/k1.h +0 -163
- scipy/special/xsf/cephes/kn.h +0 -243
- scipy/special/xsf/cephes/lanczos.h +0 -112
- scipy/special/xsf/cephes/ndtr.h +0 -275
- scipy/special/xsf/cephes/poch.h +0 -85
- scipy/special/xsf/cephes/polevl.h +0 -167
- scipy/special/xsf/cephes/psi.h +0 -194
- scipy/special/xsf/cephes/rgamma.h +0 -111
- scipy/special/xsf/cephes/scipy_iv.h +0 -811
- scipy/special/xsf/cephes/shichi.h +0 -248
- scipy/special/xsf/cephes/sici.h +0 -224
- scipy/special/xsf/cephes/sindg.h +0 -221
- scipy/special/xsf/cephes/tandg.h +0 -139
- scipy/special/xsf/cephes/trig.h +0 -58
- scipy/special/xsf/cephes/unity.h +0 -186
- scipy/special/xsf/cephes/zeta.h +0 -172
- scipy/special/xsf/config.h +0 -304
- scipy/special/xsf/digamma.h +0 -205
- scipy/special/xsf/error.h +0 -57
- scipy/special/xsf/evalpoly.h +0 -47
- scipy/special/xsf/expint.h +0 -266
- scipy/special/xsf/hyp2f1.h +0 -694
- scipy/special/xsf/iv_ratio.h +0 -173
- scipy/special/xsf/lambertw.h +0 -150
- scipy/special/xsf/loggamma.h +0 -163
- scipy/special/xsf/sici.h +0 -200
- scipy/special/xsf/tools.h +0 -427
- scipy/special/xsf/trig.h +0 -164
- scipy/special/xsf/wright_bessel.h +0 -843
- scipy/special/xsf/zlog1.h +0 -35
- scipy/stats/_mvn.cpython-313-darwin.so +0 -0
- scipy-1.15.3.dist-info/WHEEL +0 -4
@@ -7,6 +7,7 @@ Authors:
|
|
7
7
|
|
8
8
|
"""
|
9
9
|
import itertools
|
10
|
+
import inspect
|
10
11
|
import platform
|
11
12
|
import threading
|
12
13
|
import numpy as np
|
@@ -33,10 +34,11 @@ from scipy.optimize import rosen, rosen_der, rosen_hess
|
|
33
34
|
|
34
35
|
from scipy.sparse import (coo_matrix, csc_matrix, csr_matrix, coo_array,
|
35
36
|
csr_array, csc_array)
|
36
|
-
from scipy.
|
37
|
-
from scipy._lib.
|
37
|
+
from scipy._lib._array_api_no_0d import xp_assert_equal
|
38
|
+
from scipy._lib._array_api import make_xp_test_case
|
39
|
+
from scipy._lib._util import MapWrapper
|
38
40
|
|
39
|
-
|
41
|
+
lazy_xp_modules = [optimize]
|
40
42
|
|
41
43
|
|
42
44
|
def test_check_grad():
|
@@ -1318,6 +1320,8 @@ class TestOptimizeSimple(CheckOptimize):
|
|
1318
1320
|
|
1319
1321
|
if method == 'tnc':
|
1320
1322
|
kwargs['options'] = dict(maxfun=100)
|
1323
|
+
elif method == 'cobyla':
|
1324
|
+
kwargs['options'] = dict(maxiter=100)
|
1321
1325
|
else:
|
1322
1326
|
kwargs['options'] = dict(maxiter=5)
|
1323
1327
|
|
@@ -1552,7 +1556,7 @@ class TestOptimizeSimple(CheckOptimize):
|
|
1552
1556
|
|
1553
1557
|
@pytest.mark.parametrize('method', ['nelder-mead', 'powell', 'cg', 'bfgs',
|
1554
1558
|
'newton-cg', 'l-bfgs-b', 'tnc',
|
1555
|
-
'
|
1559
|
+
'cobyqa', 'slsqp',
|
1556
1560
|
'trust-constr', 'dogleg', 'trust-ncg',
|
1557
1561
|
'trust-exact', 'trust-krylov'])
|
1558
1562
|
def test_nan_values(self, method, num_parallel_threads):
|
@@ -1683,6 +1687,23 @@ class TestOptimizeSimple(CheckOptimize):
|
|
1683
1687
|
if method == 'cobyqa':
|
1684
1688
|
ref = optimize.minimize(**kwargs, options={'maxfev': maxiter})
|
1685
1689
|
assert res.nfev == ref.nfev == maxiter
|
1690
|
+
elif method == 'cobyla':
|
1691
|
+
# COBYLA calls the callback once per iteration, not once per function
|
1692
|
+
# evaluation, so this test is not applicable. However we can test
|
1693
|
+
# the COBYLA status to verify that res stopped back on the callback
|
1694
|
+
# and ref stopped based on the iteration limit.
|
1695
|
+
# COBYLA requires at least n+2 function evaluations
|
1696
|
+
maxiter = max(maxiter, len(kwargs['x0'])+2)
|
1697
|
+
ref = optimize.minimize(**kwargs, options={'maxiter': maxiter})
|
1698
|
+
assert res.status == 30
|
1699
|
+
assert res.message == ("Return from COBYLA because the callback function "
|
1700
|
+
"requested termination")
|
1701
|
+
assert ref.status == 3
|
1702
|
+
assert ref.message == ("Return from COBYLA because the objective function "
|
1703
|
+
"has been evaluated MAXFUN times.")
|
1704
|
+
# Return early because res/ref will be unequal for COBYLA for the reasons
|
1705
|
+
# mentioned above.
|
1706
|
+
return
|
1686
1707
|
else:
|
1687
1708
|
ref = optimize.minimize(**kwargs, options={'maxiter': maxiter})
|
1688
1709
|
assert res.nit == ref.nit == maxiter
|
@@ -2453,33 +2474,29 @@ def test_powell_output():
|
|
2453
2474
|
assert np.isscalar(res.fun)
|
2454
2475
|
|
2455
2476
|
|
2456
|
-
@array_api_compatible
|
2457
2477
|
class TestRosen:
|
2478
|
+
@make_xp_test_case(optimize.rosen)
|
2458
2479
|
def test_rosen(self, xp):
|
2459
2480
|
# integer input should be promoted to the default floating type
|
2460
2481
|
x = xp.asarray([1, 1, 1])
|
2461
2482
|
xp_assert_equal(optimize.rosen(x),
|
2462
2483
|
xp.asarray(0.))
|
2463
2484
|
|
2464
|
-
@
|
2465
|
-
reasons=["JAX arrays do not support item assignment"])
|
2466
|
-
@pytest.mark.usefixtures("skip_xp_backends")
|
2485
|
+
@make_xp_test_case(optimize.rosen_der)
|
2467
2486
|
def test_rosen_der(self, xp):
|
2468
2487
|
x = xp.asarray([1, 1, 1, 1])
|
2469
2488
|
xp_assert_equal(optimize.rosen_der(x),
|
2470
2489
|
xp.zeros_like(x, dtype=xp.asarray(1.).dtype))
|
2471
2490
|
|
2472
|
-
@
|
2473
|
-
reasons=["JAX arrays do not support item assignment"])
|
2474
|
-
@pytest.mark.usefixtures("skip_xp_backends")
|
2491
|
+
@make_xp_test_case(optimize.rosen_hess, optimize.rosen_hess_prod)
|
2475
2492
|
def test_hess_prod(self, xp):
|
2476
2493
|
one = xp.asarray(1.)
|
2477
|
-
|
2494
|
+
|
2478
2495
|
# Compare rosen_hess(x) times p with rosen_hess_prod(x,p). See gh-1775.
|
2479
2496
|
x = xp.asarray([3, 4, 5])
|
2480
2497
|
p = xp.asarray([2, 2, 2])
|
2481
2498
|
hp = optimize.rosen_hess_prod(x, p)
|
2482
|
-
p =
|
2499
|
+
p = xp.astype(p, one.dtype)
|
2483
2500
|
dothp = optimize.rosen_hess(x) @ p
|
2484
2501
|
xp_assert_equal(hp, dothp)
|
2485
2502
|
|
@@ -2907,6 +2924,10 @@ def setup_test_equal_bounds():
|
|
2907
2924
|
def callback(x, *args):
|
2908
2925
|
check_x(x)
|
2909
2926
|
|
2927
|
+
def callback2(intermediate_result):
|
2928
|
+
assert isinstance(intermediate_result, OptimizeResult)
|
2929
|
+
check_x(intermediate_result.x)
|
2930
|
+
|
2910
2931
|
def constraint1(x):
|
2911
2932
|
check_x(x, check_values=False)
|
2912
2933
|
return x[0:1] - 1
|
@@ -2957,7 +2978,7 @@ def setup_test_equal_bounds():
|
|
2957
2978
|
([c1b, c2b], [c1b, c2b]))
|
2958
2979
|
|
2959
2980
|
# test with and without callback function
|
2960
|
-
callbacks = (None, callback)
|
2981
|
+
callbacks = (None, callback, callback2)
|
2961
2982
|
|
2962
2983
|
data = {"methods": methods, "kwds": kwds, "bound_types": bound_types,
|
2963
2984
|
"constraints": constraints, "callbacks": callbacks,
|
@@ -2996,6 +3017,12 @@ def test_equal_bounds(method, kwds, bound_type, constraints, callback):
|
|
2996
3017
|
test_constraints, reference_constraints = constraints
|
2997
3018
|
if test_constraints and not method == 'SLSQP':
|
2998
3019
|
pytest.skip('Only SLSQP supports nonlinear constraints')
|
3020
|
+
|
3021
|
+
if method in ['SLSQP', 'TNC'] and callable(callback):
|
3022
|
+
sig = inspect.signature(callback)
|
3023
|
+
if 'intermediate_result' in set(sig.parameters):
|
3024
|
+
pytest.skip("SLSQP, TNC don't support intermediate_result")
|
3025
|
+
|
2999
3026
|
# reference constraints always have analytical jacobian
|
3000
3027
|
# if test constraints are not the same, we'll need finite differences
|
3001
3028
|
fd_needed = (test_constraints != reference_constraints)
|
@@ -3012,7 +3039,7 @@ def test_equal_bounds(method, kwds, bound_type, constraints, callback):
|
|
3012
3039
|
|
3013
3040
|
# compare the output of a solution with FD vs that of an analytic grad
|
3014
3041
|
assert res.success
|
3015
|
-
assert_allclose(res.fun, expected.fun, rtol=
|
3042
|
+
assert_allclose(res.fun, expected.fun, rtol=2e-6)
|
3016
3043
|
assert_allclose(res.x, expected.x, rtol=5e-4)
|
3017
3044
|
|
3018
3045
|
if fd_needed or kwds['jac'] is False:
|
@@ -3236,8 +3263,8 @@ def test_gh12594():
|
|
3236
3263
|
coo_array, csr_array, csc_array])
|
3237
3264
|
def test_sparse_hessian(method, sparse_type):
|
3238
3265
|
# gh-8792 reported an error for minimization with `newton_cg` when `hess`
|
3239
|
-
# returns a sparse
|
3240
|
-
# returns a dense or sparse
|
3266
|
+
# returns a sparse array. Check that results are the same whether `hess`
|
3267
|
+
# returns a dense or sparse array for optimization methods that accept
|
3241
3268
|
# sparse Hessian matrices.
|
3242
3269
|
|
3243
3270
|
def sparse_rosen_hess(x):
|
@@ -3255,3 +3282,54 @@ def test_sparse_hessian(method, sparse_type):
|
|
3255
3282
|
assert res_dense.nfev == res_sparse.nfev
|
3256
3283
|
assert res_dense.njev == res_sparse.njev
|
3257
3284
|
assert res_dense.nhev == res_sparse.nhev
|
3285
|
+
|
3286
|
+
|
3287
|
+
@pytest.mark.parametrize('workers', [None, 2])
|
3288
|
+
@pytest.mark.parametrize(
|
3289
|
+
'method',
|
3290
|
+
['l-bfgs-b',
|
3291
|
+
'bfgs',
|
3292
|
+
'slsqp',
|
3293
|
+
'trust-constr',
|
3294
|
+
'Newton-CG',
|
3295
|
+
'CG',
|
3296
|
+
'tnc',
|
3297
|
+
'trust-ncg',
|
3298
|
+
'trust-krylov'])
|
3299
|
+
class TestWorkers:
|
3300
|
+
|
3301
|
+
def setup_method(self):
|
3302
|
+
self.x0 = np.array([1.0, 2.0, 3.0])
|
3303
|
+
|
3304
|
+
def test_smoke(self, workers, method):
|
3305
|
+
# checks parallelised optimization output is same as serial
|
3306
|
+
workers = workers or map
|
3307
|
+
|
3308
|
+
kwds = {'jac': None, 'hess': None}
|
3309
|
+
if method in ['Newton-CG', 'trust-ncg', 'trust-krylov']:
|
3310
|
+
# methods that require a callable jac
|
3311
|
+
kwds['jac'] = rosen_der
|
3312
|
+
kwds['hess'] = '2-point'
|
3313
|
+
|
3314
|
+
with MapWrapper(workers) as mf:
|
3315
|
+
res = optimize.minimize(
|
3316
|
+
rosen, self.x0, options={"workers":mf}, method=method, **kwds
|
3317
|
+
)
|
3318
|
+
res_default = optimize.minimize(
|
3319
|
+
rosen, self.x0, method=method, **kwds
|
3320
|
+
)
|
3321
|
+
assert_equal(res.x, res_default.x)
|
3322
|
+
assert_equal(res.nfev, res_default.nfev)
|
3323
|
+
|
3324
|
+
def test_equal_bounds(self, workers, method):
|
3325
|
+
workers = workers or map
|
3326
|
+
if method not in ['l-bfgs-b', 'slsqp', 'trust-constr', 'tnc']:
|
3327
|
+
pytest.skip(f"{method} cannot use bounds")
|
3328
|
+
|
3329
|
+
bounds = Bounds([0, 2.0, 0.], [10., 2.0, 10.])
|
3330
|
+
with MapWrapper(workers) as mf:
|
3331
|
+
res = optimize.minimize(
|
3332
|
+
rosen, self.x0, bounds=bounds, options={"workers": mf}, method=method
|
3333
|
+
)
|
3334
|
+
assert res.success
|
3335
|
+
assert_allclose(res.x[1], 2.0)
|
@@ -592,7 +592,6 @@ class TestSLSQP:
|
|
592
592
|
# The problem is infeasible, so it cannot succeed
|
593
593
|
assert not res.success
|
594
594
|
|
595
|
-
@pytest.mark.thread_unsafe
|
596
595
|
def test_parameters_stay_within_bounds(self):
|
597
596
|
# gh11403. For some problems the SLSQP Fortran code suggests a step
|
598
597
|
# outside one of the lower/upper bounds. When this happens
|
@@ -607,7 +606,40 @@ class TestSLSQP:
|
|
607
606
|
def f(x):
|
608
607
|
assert (x >= bounds.lb).all()
|
609
608
|
return np.linalg.norm(x)
|
609
|
+
# The following should not raise any warnings which was the case, with the
|
610
|
+
# old Fortran code.
|
611
|
+
res = minimize(f, x0, method='SLSQP', bounds=bounds)
|
612
|
+
assert res.success
|
613
|
+
|
614
|
+
|
615
|
+
def test_slsqp_segfault_wrong_workspace_computation():
|
616
|
+
# See gh-14915
|
617
|
+
# This problem is not well-defined, however should not cause a segfault.
|
618
|
+
# The previous F77 workspace computation did not handle only equality-
|
619
|
+
# constrained problems correctly.
|
620
|
+
rng = np.random.default_rng(1742651087222879)
|
621
|
+
x = rng.uniform(size=[22,365])
|
622
|
+
target = np.linspace(0.9, 4.0, 50)
|
623
|
+
|
624
|
+
def metric(v, weights):
|
625
|
+
return [[0, 0],[1, 1]]
|
626
|
+
|
627
|
+
def efficient_metric(v, target):
|
628
|
+
def metric_a(weights):
|
629
|
+
return metric(v, weights)[1][0]
|
630
|
+
|
631
|
+
def metric_b(weights, v):
|
632
|
+
return metric(v, weights)[0][0]
|
633
|
+
|
634
|
+
constraints = ({'type': 'eq', 'fun': lambda x: metric_a(x) - target},
|
635
|
+
{'type': 'eq', 'fun': lambda x: np.sum(x) - 1})
|
636
|
+
weights = np.array([len(v)*[1./len(v)]])[0]
|
637
|
+
result = minimize(metric_b,
|
638
|
+
weights,
|
639
|
+
args=(v,),
|
640
|
+
method='SLSQP',
|
641
|
+
constraints=constraints)
|
642
|
+
return result
|
643
|
+
|
644
|
+
efficient_metric(x, target)
|
610
645
|
|
611
|
-
with pytest.warns(RuntimeWarning, match='x were outside bounds'):
|
612
|
-
res = minimize(f, x0, method='SLSQP', bounds=bounds)
|
613
|
-
assert res.success
|
@@ -225,6 +225,10 @@ class TestBracketMethods(TestScalarRootFinders):
|
|
225
225
|
assert r.converged
|
226
226
|
assert_allclose(root, 0)
|
227
227
|
|
228
|
+
def test_gh_22934(self):
|
229
|
+
with pytest.raises(ValueError, match="maxiter must be >= 0"):
|
230
|
+
zeros.brentq(lambda x: x**2 - 1, -2, 0, maxiter=-1)
|
231
|
+
|
228
232
|
|
229
233
|
class TestNewton(TestScalarRootFinders):
|
230
234
|
def test_newton_collections(self):
|
@@ -428,7 +432,7 @@ class TestNewton(TestScalarRootFinders):
|
|
428
432
|
if derivs == 1:
|
429
433
|
# Check that the correct Exception is raised and
|
430
434
|
# validate the start of the message.
|
431
|
-
msg = 'Failed to converge after
|
435
|
+
msg = f'Failed to converge after {iters} iterations, value is .*'
|
432
436
|
with pytest.raises(RuntimeError, match=msg):
|
433
437
|
x, r = zeros.newton(f1, x0, maxiter=iters, disp=True, **kwargs)
|
434
438
|
|
@@ -508,6 +512,18 @@ class TestNewton(TestScalarRootFinders):
|
|
508
512
|
assert_allclose(abs(res.root), 2**-0.5)
|
509
513
|
assert res.root.dtype == np.dtype(np.float64)
|
510
514
|
|
515
|
+
def test_newton_special_parameters(self):
|
516
|
+
# give zeros.newton() some strange parameters
|
517
|
+
# and check whether an exception appears
|
518
|
+
with pytest.raises(ValueError, match="tol too small"):
|
519
|
+
zeros.newton(f1, 3, tol=-1e-6)
|
520
|
+
|
521
|
+
with pytest.raises(ValueError, match="maxiter must be greater than 0"):
|
522
|
+
zeros.newton(f1, 3, tol=1e-6, maxiter=-50)
|
523
|
+
|
524
|
+
with pytest.raises(ValueError, match="x1 and x0 must be different" ):
|
525
|
+
zeros.newton(f1, 3, x1=3)
|
526
|
+
|
511
527
|
|
512
528
|
def test_gh_5555():
|
513
529
|
root = 0.1
|
@@ -963,3 +979,20 @@ def test_maxiter_int_check_gh10236(method):
|
|
963
979
|
message = "'float' object cannot be interpreted as an integer"
|
964
980
|
with pytest.raises(TypeError, match=message):
|
965
981
|
method(f1, 0.0, 1.0, maxiter=72.45)
|
982
|
+
|
983
|
+
@pytest.mark.parametrize("method", [zeros.bisect, zeros.ridder,
|
984
|
+
zeros.brentq, zeros.brenth])
|
985
|
+
def test_bisect_special_parameter(method):
|
986
|
+
# give some zeros method strange parameters
|
987
|
+
# and check whether an exception appears
|
988
|
+
root = 0.1
|
989
|
+
args = (1e-09, 0.004, 10, 0.27456)
|
990
|
+
rtolbad = 4 * np.finfo(float).eps / 2
|
991
|
+
|
992
|
+
def f(x):
|
993
|
+
return x - root
|
994
|
+
|
995
|
+
with pytest.raises(ValueError, match="xtol too small"):
|
996
|
+
method(f, -1e8, 1e7, args=args, xtol=-1e-6, rtol=TOL)
|
997
|
+
with pytest.raises(ValueError, match="rtol too small"):
|
998
|
+
method(f, -1e8, 1e7, args=args, xtol=1e-6, rtol=rtolbad)
|
scipy/signal/__init__.py
CHANGED
@@ -87,9 +87,12 @@ Filter design
|
|
87
87
|
-- defined as pass and stop bands.
|
88
88
|
firwin2 -- Windowed FIR filter design, with arbitrary frequency
|
89
89
|
-- response.
|
90
|
+
firwin_2d -- Windowed FIR filter design, with frequency response for
|
91
|
+
-- 2D using 1D design.
|
90
92
|
freqs -- Analog filter frequency response from TF coefficients.
|
91
93
|
freqs_zpk -- Analog filter frequency response from ZPK coefficients.
|
92
94
|
freqz -- Digital filter frequency response from TF coefficients.
|
95
|
+
sosfreqz -- Digital filter frequency response for SOS format filter (legacy).
|
93
96
|
freqz_sos -- Digital filter frequency response for SOS format filter.
|
94
97
|
freqz_zpk -- Digital filter frequency response from ZPK coefficients.
|
95
98
|
gammatone -- FIR and IIR gammatone filter design.
|
@@ -266,9 +269,11 @@ Spectral analysis
|
|
266
269
|
ShortTimeFFT -- Interface for calculating the \
|
267
270
|
:ref:`Short Time Fourier Transform <tutorial_stft>` and \
|
268
271
|
its inverse.
|
272
|
+
closest_STFT_dual_window -- Calculate the STFT dual window of a given window \
|
273
|
+
closest to a desired dual window.
|
269
274
|
stft -- Compute the Short Time Fourier Transform (legacy).
|
270
275
|
istft -- Compute the Inverse Short Time Fourier Transform (legacy).
|
271
|
-
check_COLA -- Check the COLA constraint for iSTFT reconstruction.
|
276
|
+
check_COLA -- Check the COLA constraint for iSTFT reconstruction (legacy).
|
272
277
|
check_NOLA -- Check the NOLA constraint for iSTFT reconstruction.
|
273
278
|
|
274
279
|
Chirp Z-transform and Zoom FFT
|
@@ -289,28 +294,15 @@ repeatedly generate the same chirp signal with every call. In these cases,
|
|
289
294
|
use the classes to create a reusable function instead.
|
290
295
|
|
291
296
|
"""
|
297
|
+
# bring in the public functionality from private namespaces
|
292
298
|
|
293
|
-
|
294
|
-
from ._waveforms import *
|
295
|
-
from ._max_len_seq import max_len_seq
|
296
|
-
from ._upfirdn import upfirdn
|
299
|
+
# mypy: ignore-errors
|
297
300
|
|
298
|
-
from .
|
299
|
-
|
300
|
-
|
301
|
+
from ._support_alternative_backends import *
|
302
|
+
from . import _support_alternative_backends
|
303
|
+
__all__ = _support_alternative_backends.__all__
|
304
|
+
del _support_alternative_backends, _signal_api, _delegators # noqa: F821
|
301
305
|
|
302
|
-
from ._spline_filters import *
|
303
|
-
from ._filter_design import *
|
304
|
-
from ._fir_filter_design import *
|
305
|
-
from ._ltisys import *
|
306
|
-
from ._lti_conversion import *
|
307
|
-
from ._signaltools import *
|
308
|
-
from ._savitzky_golay import savgol_coeffs, savgol_filter
|
309
|
-
from ._spectral_py import *
|
310
|
-
from ._short_time_fft import *
|
311
|
-
from ._peak_finding import *
|
312
|
-
from ._czt import *
|
313
|
-
from .windows import get_window # keep this one in signal namespace
|
314
306
|
|
315
307
|
# Deprecated namespaces, to be removed in v2.0.0
|
316
308
|
from . import (
|
@@ -318,9 +310,6 @@ from . import (
|
|
318
310
|
spectral, signaltools, waveforms, wavelets, spline
|
319
311
|
)
|
320
312
|
|
321
|
-
__all__ = [
|
322
|
-
s for s in dir() if not s.startswith("_")
|
323
|
-
]
|
324
313
|
|
325
314
|
from scipy._lib._testutils import PytestTester
|
326
315
|
test = PytestTester(__name__)
|