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.
- scipy/__config__.py +10 -10
- scipy/__init__.py +3 -6
- scipy/_cyutility.cpython-312-aarch64-linux-musl.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-312-aarch64-linux-musl.so +0 -0
- scipy/_lib/_docscrape.py +1 -1
- scipy/_lib/_elementwise_iterative_method.py +15 -26
- scipy/_lib/_fpumode.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/_lib/_sparse.py +41 -0
- scipy/_lib/_test_ccallback.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/_lib/_test_deprecation_call.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/_lib/_test_deprecation_def.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/_lib/_testutils.py +6 -2
- scipy/_lib/_uarray/_uarray.cpython-312-aarch64-linux-musl.so +0 -0
- 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-312-aarch64-linux-musl.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-312-aarch64-linux-musl.so +0 -0
- scipy/cluster/_optimal_leaf_ordering.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/cluster/_vq.cpython-312-aarch64-linux-musl.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/pypocketfft.cpython-312-aarch64-linux-musl.so +0 -0
- 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-312-aarch64-linux-musl.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-312-aarch64-linux-musl.so +0 -0
- scipy/integrate/_lsoda.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/integrate/_ode.py +9 -2
- scipy/integrate/_odepack.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/integrate/_quad_vec.py +21 -29
- scipy/integrate/_quadpack.cpython-312-aarch64-linux-musl.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_multivariate.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/integrate/_test_odeint_banded.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/integrate/_vode.cpython-312-aarch64-linux-musl.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-312-aarch64-linux-musl.so +0 -0
- scipy/interpolate/_dierckx.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/interpolate/_fitpack.cpython-312-aarch64-linux-musl.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-312-aarch64-linux-musl.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-312-aarch64-linux-musl.so +0 -0
- scipy/interpolate/_rbf.py +2 -2
- scipy/interpolate/_rbfinterp.py +1 -1
- scipy/interpolate/_rbfinterp_pythran.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/interpolate/_rgi.py +31 -26
- scipy/interpolate/_rgi_cython.cpython-312-aarch64-linux-musl.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/_fast_matrix_market/_fmm_core.cpython-312-aarch64-linux-musl.so +0 -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-312-aarch64-linux-musl.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-312-aarch64-linux-musl.so +0 -0
- scipy/io/matlab/_mio_utils.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/io/matlab/_miobase.py +4 -1
- scipy/io/matlab/_streams.cpython-312-aarch64-linux-musl.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-312-aarch64-linux-musl.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-312-aarch64-linux-musl.so +0 -0
- scipy/linalg/_decomp_ldl.py +4 -1
- scipy/linalg/_decomp_lu.py +18 -6
- scipy/linalg/_decomp_lu_cython.cpython-312-aarch64-linux-musl.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-312-aarch64-linux-musl.so +0 -0
- scipy/linalg/_expm_frechet.py +4 -0
- scipy/linalg/_fblas.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/linalg/_flapack.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/linalg/_linalg_pythran.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/linalg/_matfuncs.py +187 -4
- scipy/linalg/_matfuncs_expm.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/linalg/_matfuncs_schur_sqrtm.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/linalg/_matfuncs_sqrtm.py +1 -99
- scipy/linalg/_matfuncs_sqrtm_triu.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/linalg/_procrustes.py +2 -0
- scipy/linalg/_sketches.py +17 -6
- scipy/linalg/_solve_toeplitz.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/linalg/_solvers.py +7 -2
- scipy/linalg/_special_matrices.py +26 -36
- scipy/linalg/cython_blas.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/linalg/cython_lapack.cpython-312-aarch64-linux-musl.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/_ctest.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/ndimage/_cytest.cpython-312-aarch64-linux-musl.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-312-aarch64-linux-musl.so +0 -0
- scipy/ndimage/_ni_docstrings.py +5 -1
- scipy/ndimage/_ni_label.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/ndimage/_ni_support.py +1 -5
- scipy/ndimage/_rank_filter_1d.cpython-312-aarch64-linux-musl.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-312-aarch64-linux-musl.so +0 -0
- scipy/optimize/_basinhopping.py +13 -7
- scipy/optimize/_bglu_dense.cpython-312-aarch64-linux-musl.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-312-aarch64-linux-musl.so +0 -0
- scipy/optimize/_dual_annealing.py +1 -1
- scipy/optimize/_elementwise.py +1 -4
- scipy/optimize/_group_columns.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/optimize/_highspy/_core.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/optimize/_highspy/_highs_options.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/optimize/_lbfgsb.cpython-312-aarch64-linux-musl.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-312-aarch64-linux-musl.so +0 -0
- scipy/optimize/_lsq/common.py +3 -3
- scipy/optimize/_lsq/dogbox.py +16 -2
- scipy/optimize/_lsq/givens_elimination.cpython-312-aarch64-linux-musl.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-312-aarch64-linux-musl.so +0 -0
- scipy/optimize/_minpack_py.py +21 -14
- scipy/optimize/_moduleTNC.cpython-312-aarch64-linux-musl.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-312-aarch64-linux-musl.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-312-aarch64-linux-musl.so +0 -0
- scipy/optimize/_spectral.py +1 -1
- scipy/optimize/_tnc.py +8 -1
- scipy/optimize/_trlib/_trlib.cpython-312-aarch64-linux-musl.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-312-aarch64-linux-musl.so +0 -0
- scipy/optimize/_zeros_py.py +97 -17
- scipy/optimize/cython_optimize/_zeros.cpython-312-aarch64-linux-musl.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-312-aarch64-linux-musl.so +0 -0
- scipy/signal/_peak_finding_utils.cpython-312-aarch64-linux-musl.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-312-aarch64-linux-musl.so +0 -0
- scipy/signal/_sosfilt.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/signal/_spectral_py.py +230 -50
- scipy/signal/_spline.cpython-312-aarch64-linux-musl.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-312-aarch64-linux-musl.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-312-aarch64-linux-musl.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-312-aarch64-linux-musl.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-312-aarch64-linux-musl.so +0 -0
- scipy/sparse/csgraph/_matching.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/sparse/csgraph/_reordering.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/sparse/csgraph/_shortest_path.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/sparse/csgraph/_tools.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/sparse/csgraph/_traversal.cpython-312-aarch64-linux-musl.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-312-aarch64-linux-musl.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-312-aarch64-linux-musl.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-312-aarch64-linux-musl.so +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/sparse/linalg/_propack/_spropack.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cpython-312-aarch64-linux-musl.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-312-aarch64-linux-musl.so +0 -0
- scipy/spatial/_distance_pybind.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/spatial/_distance_wrap.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/spatial/_hausdorff.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/spatial/_qhull.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/spatial/_voronoi.cpython-312-aarch64-linux-musl.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-312-aarch64-linux-musl.so +0 -0
- scipy/spatial/transform/_rotation.cpython-312-aarch64-linux-musl.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-312-aarch64-linux-musl.so +0 -0
- scipy/special/_ellip_harm_2.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/special/_gufuncs.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/special/_logsumexp.py +67 -58
- scipy/special/_orthogonal.pyi +1 -1
- scipy/special/_specfun.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/special/_special_ufuncs.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/special/_spherical_bessel.py +4 -4
- scipy/special/_support_alternative_backends.py +212 -119
- scipy/special/_test_internal.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/special/_testutils.py +4 -4
- scipy/special/_ufuncs.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/special/_ufuncs.pyi +1 -0
- scipy/special/_ufuncs.pyx +215 -1400
- scipy/special/_ufuncs_cxx.cpython-312-aarch64-linux-musl.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-312-aarch64-linux-musl.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-312-aarch64-linux-musl.so +0 -0
- scipy/stats/_axis_nan_policy.py +5 -12
- scipy/stats/_biasedurn.cpython-312-aarch64-linux-musl.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-312-aarch64-linux-musl.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-312-aarch64-linux-musl.so +0 -0
- scipy/stats/_qmvnt.py +16 -95
- scipy/stats/_qmvnt_cy.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/stats/_quantile.py +335 -0
- scipy/stats/_rcont/rcont.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/stats/_resampling.py +4 -29
- scipy/stats/_sampling.py +1 -1
- scipy/stats/_sobol.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/stats/_stats.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/stats/_stats_mstats_common.py +21 -2
- scipy/stats/_stats_py.py +550 -476
- scipy/stats/_stats_pythran.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/stats/_unuran/unuran_wrapper.cpython-312-aarch64-linux-musl.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 +1262 -1269
- scipy.libs/libgcc_s-69c45f16.so.1 +0 -0
- scipy.libs/libgfortran-db0b6589.so.5.0.0 +0 -0
- scipy.libs/{libstdc++-1b614e01.so.6.0.32 → libstdc++-1f1a71be.so.6.0.33} +0 -0
- scipy/_lib/array_api_extra/_funcs.py +0 -484
- scipy/_lib/array_api_extra/_typing.py +0 -8
- scipy/interpolate/_bspl.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/optimize/_cobyla.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/optimize/_cython_nnls.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/optimize/_slsqp.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/spatial/qhull_src/COPYING.txt +0 -38
- scipy/special/libsf_error_state.so +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-312-aarch64-linux-musl.so +0 -0
- scipy.libs/libgcc_s-7393e603.so.1 +0 -0
- scipy.libs/libgfortran-eb933d8e.so.5.0.0 +0 -0
- {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/WHEEL +0 -0
@@ -125,7 +125,8 @@ def _minimize_trustregion_constr(fun, x0, args, grad,
|
|
125
125
|
initial_barrier_parameter=0.1,
|
126
126
|
initial_barrier_tolerance=0.1,
|
127
127
|
factorization_method=None,
|
128
|
-
disp=False
|
128
|
+
disp=False,
|
129
|
+
workers=None):
|
129
130
|
"""Minimize a scalar function subject to constraints.
|
130
131
|
|
131
132
|
Parameters
|
@@ -224,6 +225,12 @@ def _minimize_trustregion_constr(fun, x0, args, grad,
|
|
224
225
|
|
225
226
|
disp : bool, optional
|
226
227
|
If True (default), then `verbose` will be set to 1 if it was 0.
|
228
|
+
workers : int, map-like callable, optional
|
229
|
+
A map-like callable, such as `multiprocessing.Pool.map` for evaluating
|
230
|
+
any numerical differentiation in parallel.
|
231
|
+
This evaluation is carried out as ``workers(fun, iterable)``.
|
232
|
+
|
233
|
+
.. versionadded:: 1.16.0
|
227
234
|
|
228
235
|
Returns
|
229
236
|
-------
|
@@ -265,7 +272,7 @@ def _minimize_trustregion_constr(fun, x0, args, grad,
|
|
265
272
|
Optimization method used.
|
266
273
|
constr : list of ndarray
|
267
274
|
List of constraint values at the solution.
|
268
|
-
jac : list of {ndarray, sparse
|
275
|
+
jac : list of {ndarray, sparse array}
|
269
276
|
List of the Jacobian matrices of the constraints at the solution.
|
270
277
|
v : list of ndarray
|
271
278
|
List of the Lagrange multipliers for the constraints at the solution.
|
@@ -343,7 +350,8 @@ def _minimize_trustregion_constr(fun, x0, args, grad,
|
|
343
350
|
|
344
351
|
# Define Objective Function
|
345
352
|
objective = ScalarFunction(fun, x0, args, grad, hess,
|
346
|
-
finite_diff_rel_step, finite_diff_bounds
|
353
|
+
finite_diff_rel_step, finite_diff_bounds,
|
354
|
+
workers=workers)
|
347
355
|
|
348
356
|
# Put constraints in list format when needed.
|
349
357
|
if isinstance(constraints, (NonlinearConstraint | LinearConstraint)):
|
@@ -1,17 +1,17 @@
|
|
1
1
|
"""Basic linear factorizations needed by the solver."""
|
2
2
|
|
3
|
-
from scipy.sparse import
|
3
|
+
from scipy.sparse import block_array, csc_array, eye_array, issparse
|
4
4
|
from scipy.sparse.linalg import LinearOperator
|
5
5
|
import scipy.linalg
|
6
6
|
import scipy.sparse.linalg
|
7
7
|
try:
|
8
|
-
from sksparse.cholmod import cholesky_AAt
|
8
|
+
from sksparse.cholmod import cholesky_AAt, CholmodTypeConversionWarning
|
9
9
|
sksparse_available = True
|
10
10
|
except ImportError:
|
11
11
|
import warnings
|
12
12
|
sksparse_available = False
|
13
13
|
import numpy as np
|
14
|
-
from warnings import warn
|
14
|
+
from warnings import warn, catch_warnings
|
15
15
|
|
16
16
|
__all__ = [
|
17
17
|
'orthogonality',
|
@@ -58,7 +58,11 @@ def normal_equation_projections(A, m, n, orth_tol, max_refin, tol):
|
|
58
58
|
"""Return linear operators for matrix A using ``NormalEquation`` approach.
|
59
59
|
"""
|
60
60
|
# Cholesky factorization
|
61
|
-
|
61
|
+
# TODO: revert this once the warning bug fix in sksparse is merged/released
|
62
|
+
# Add suppression of spurious warning bug from sksparse with csc_array gh-22089
|
63
|
+
# factor = cholesky_AAt(A)
|
64
|
+
with catch_warnings(action='ignore', category=CholmodTypeConversionWarning):
|
65
|
+
factor = cholesky_AAt(A)
|
62
66
|
|
63
67
|
# z = x - A.T inv(A A.T) A x
|
64
68
|
def null_space(x):
|
@@ -92,7 +96,7 @@ def normal_equation_projections(A, m, n, orth_tol, max_refin, tol):
|
|
92
96
|
def augmented_system_projections(A, m, n, orth_tol, max_refin, tol):
|
93
97
|
"""Return linear operators for matrix A - ``AugmentedSystem``."""
|
94
98
|
# Form augmented system
|
95
|
-
K =
|
99
|
+
K = block_array([[eye_array(n), A.T], [A, None]], format="csc")
|
96
100
|
# LU factorization
|
97
101
|
# TODO: Use a symmetric indefinite factorization
|
98
102
|
# to solve the system twice as fast (because
|
@@ -293,7 +297,7 @@ def projections(A, method=None, orth_tol=1e-12, max_refin=3, tol=1e-15):
|
|
293
297
|
|
294
298
|
Parameters
|
295
299
|
----------
|
296
|
-
A : sparse
|
300
|
+
A : sparse array (or ndarray), shape (m, n)
|
297
301
|
Matrix ``A`` used in the projection.
|
298
302
|
method : string, optional
|
299
303
|
Method used for compute the given linear
|
@@ -367,14 +371,14 @@ def projections(A, method=None, orth_tol=1e-12, max_refin=3, tol=1e-15):
|
|
367
371
|
# The factorization of an empty matrix
|
368
372
|
# only works for the sparse representation.
|
369
373
|
if m*n == 0:
|
370
|
-
A =
|
374
|
+
A = csc_array(A)
|
371
375
|
|
372
376
|
# Check Argument
|
373
377
|
if issparse(A):
|
374
378
|
if method is None:
|
375
379
|
method = "AugmentedSystem"
|
376
380
|
if method not in ("NormalEquation", "AugmentedSystem"):
|
377
|
-
raise ValueError("Method not allowed for sparse
|
381
|
+
raise ValueError("Method not allowed for sparse array.")
|
378
382
|
if method == "NormalEquation" and not sksparse_available:
|
379
383
|
warnings.warn("Only accepts 'NormalEquation' option when "
|
380
384
|
"scikit-sparse is available. Using "
|
@@ -1,6 +1,6 @@
|
|
1
1
|
"""Equality-constrained quadratic programming solvers."""
|
2
2
|
|
3
|
-
from scipy.sparse import
|
3
|
+
from scipy.sparse import linalg, block_array
|
4
4
|
from math import copysign
|
5
5
|
import numpy as np
|
6
6
|
from numpy.linalg import norm
|
@@ -25,11 +25,11 @@ def eqp_kktfact(H, c, A, b):
|
|
25
25
|
|
26
26
|
Parameters
|
27
27
|
----------
|
28
|
-
H : sparse
|
28
|
+
H : sparse array, shape (n, n)
|
29
29
|
Hessian matrix of the EQP problem.
|
30
30
|
c : array_like, shape (n,)
|
31
31
|
Gradient of the quadratic objective function.
|
32
|
-
A : sparse
|
32
|
+
A : sparse array
|
33
33
|
Jacobian matrix of the EQP problem.
|
34
34
|
b : array_like, shape (m,)
|
35
35
|
Right-hand side of the constraint equation.
|
@@ -47,7 +47,7 @@ def eqp_kktfact(H, c, A, b):
|
|
47
47
|
# Karush-Kuhn-Tucker matrix of coefficients.
|
48
48
|
# Defined as in Nocedal/Wright "Numerical
|
49
49
|
# Optimization" p.452 in Eq. (16.4).
|
50
|
-
kkt_matrix =
|
50
|
+
kkt_matrix = block_array([[H, A.T], [A, None]], format="csc")
|
51
51
|
# Vector of coefficients.
|
52
52
|
kkt_vec = np.hstack([-c, -b])
|
53
53
|
|
@@ -321,10 +321,10 @@ def modified_dogleg(A, Y, b, trust_radius, lb, ub):
|
|
321
321
|
|
322
322
|
Parameters
|
323
323
|
----------
|
324
|
-
A : LinearOperator (or sparse
|
324
|
+
A : LinearOperator (or sparse array or ndarray), shape (m, n)
|
325
325
|
Matrix ``A`` in the minimization problem. It should have
|
326
326
|
dimension ``(m, n)`` such that ``m < n``.
|
327
|
-
Y : LinearOperator (or sparse
|
327
|
+
Y : LinearOperator (or sparse array or ndarray), shape (n, m)
|
328
328
|
LinearOperator that apply the projection matrix
|
329
329
|
``Q = A.T inv(A A.T)`` to the vector. The obtained vector
|
330
330
|
``y = Q x`` being the minimum norm solution of ``A y = x``.
|
@@ -421,13 +421,13 @@ def projected_cg(H, c, Z, Y, b, trust_radius=np.inf,
|
|
421
421
|
|
422
422
|
Parameters
|
423
423
|
----------
|
424
|
-
H : LinearOperator (or sparse
|
424
|
+
H : LinearOperator (or sparse array or ndarray), shape (n, n)
|
425
425
|
Operator for computing ``H v``.
|
426
426
|
c : array_like, shape (n,)
|
427
427
|
Gradient of the quadratic objective function.
|
428
|
-
Z : LinearOperator (or sparse
|
428
|
+
Z : LinearOperator (or sparse array or ndarray), shape (n, n)
|
429
429
|
Operator for projecting ``x`` into the null space of A.
|
430
|
-
Y : LinearOperator, sparse
|
430
|
+
Y : LinearOperator, sparse array, ndarray, shape (n, m)
|
431
431
|
Operator that, for a given a vector ``b``, compute smallest
|
432
432
|
norm solution of ``A x + b = 0``.
|
433
433
|
b : array_like, shape (m,)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import numpy as np
|
2
2
|
import scipy.linalg
|
3
|
-
from scipy.sparse import
|
3
|
+
from scipy.sparse import csc_array
|
4
4
|
from scipy.optimize._trustregion_constr.projections \
|
5
5
|
import projections, orthogonality
|
6
6
|
from numpy.testing import (TestCase, assert_array_almost_equal,
|
@@ -23,7 +23,7 @@ class TestProjections(TestCase):
|
|
23
23
|
[0, 8, 7, 0, 1, 5, 9, 0],
|
24
24
|
[1, 0, 0, 0, 0, 1, 2, 3]])
|
25
25
|
At_dense = A_dense.T
|
26
|
-
A =
|
26
|
+
A = csc_array(A_dense)
|
27
27
|
test_points = ([1, 2, 3, 4, 5, 6, 7, 8],
|
28
28
|
[1, 10, 3, 0, 1, 6, 7, 8],
|
29
29
|
[1.12, 10, 0, 0, 100000, 6, 0.7, 8])
|
@@ -45,7 +45,7 @@ class TestProjections(TestCase):
|
|
45
45
|
A_dense = np.array([[1, 2, 3, 4, 0, 5, 0, 7],
|
46
46
|
[0, 8, 7, 0, 1, 5, 9, 0],
|
47
47
|
[1, 0, 0, 0, 0, 1, 2, 3]])
|
48
|
-
A =
|
48
|
+
A = csc_array(A_dense)
|
49
49
|
test_points = ([1, 2, 3, 4, 5, 6, 7, 8],
|
50
50
|
[1, 10, 3, 0, 1, 6, 7, 8],
|
51
51
|
[1.12, 10, 0, 0, 100000, 6, 0.7, 8],
|
@@ -65,7 +65,7 @@ class TestProjections(TestCase):
|
|
65
65
|
A_dense = np.array([[1, 2, 3, 4, 0, 5, 0, 7],
|
66
66
|
[0, 8, 7, 0, 1, 5, 9, 0],
|
67
67
|
[1, 0, 0, 0, 0, 1, 2, 3]])
|
68
|
-
A =
|
68
|
+
A = csc_array(A_dense)
|
69
69
|
test_points = ([1, 2, 3],
|
70
70
|
[1, 10, 3],
|
71
71
|
[1.12, 10, 0])
|
@@ -106,7 +106,7 @@ class TestProjections(TestCase):
|
|
106
106
|
def test_compare_dense_and_sparse(self):
|
107
107
|
D = np.diag(range(1, 101))
|
108
108
|
A = np.hstack([D, D, D, D])
|
109
|
-
A_sparse =
|
109
|
+
A_sparse = csc_array(A)
|
110
110
|
np.random.seed(0)
|
111
111
|
|
112
112
|
Z, LS, Y = projections(A)
|
@@ -123,7 +123,7 @@ class TestProjections(TestCase):
|
|
123
123
|
D2 = np.diag([1, -0.6, -0.3])
|
124
124
|
D3 = np.diag([-0.3, -1.5, 2])
|
125
125
|
A = np.hstack([D1, D2, D3])
|
126
|
-
A_sparse =
|
126
|
+
A_sparse = csc_array(A)
|
127
127
|
np.random.seed(0)
|
128
128
|
|
129
129
|
Z, LS, Y = projections(A)
|
@@ -197,7 +197,7 @@ class TestOrthogonality(TestCase):
|
|
197
197
|
A = np.array([[1, 2, 3, 4, 0, 5, 0, 7],
|
198
198
|
[0, 8, 7, 0, 1, 5, 9, 0],
|
199
199
|
[1, 0, 0, 0, 0, 1, 2, 3]])
|
200
|
-
A =
|
200
|
+
A = csc_array(A)
|
201
201
|
test_vectors = ([-1.98931144, -1.56363389,
|
202
202
|
-0.84115584, 2.2864762,
|
203
203
|
5.599141, 0.09286976,
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import numpy as np
|
2
|
-
from scipy.sparse import
|
2
|
+
from scipy.sparse import csc_array
|
3
3
|
from scipy.optimize._trustregion_constr.qp_subproblem \
|
4
4
|
import (eqp_kktfact,
|
5
5
|
projected_cg,
|
@@ -18,11 +18,11 @@ class TestEQPDirectFactorization(TestCase):
|
|
18
18
|
# From Example 16.2 Nocedal/Wright "Numerical
|
19
19
|
# Optimization" p.452.
|
20
20
|
def test_nocedal_example(self):
|
21
|
-
H =
|
22
|
-
|
23
|
-
|
24
|
-
A =
|
25
|
-
|
21
|
+
H = csc_array([[6, 2, 1],
|
22
|
+
[2, 5, 2],
|
23
|
+
[1, 2, 4]])
|
24
|
+
A = csc_array([[1, 0, 1],
|
25
|
+
[0, 1, 1]])
|
26
26
|
c = np.array([-8, -3, -3])
|
27
27
|
b = -np.array([3, 0])
|
28
28
|
x, lagrange_multipliers = eqp_kktfact(H, c, A, b)
|
@@ -424,11 +424,11 @@ class TestProjectCG(TestCase):
|
|
424
424
|
# From Example 16.2 Nocedal/Wright "Numerical
|
425
425
|
# Optimization" p.452.
|
426
426
|
def test_nocedal_example(self):
|
427
|
-
H =
|
428
|
-
|
429
|
-
|
430
|
-
A =
|
431
|
-
|
427
|
+
H = csc_array([[6, 2, 1],
|
428
|
+
[2, 5, 2],
|
429
|
+
[1, 2, 4]])
|
430
|
+
A = csc_array([[1, 0, 1],
|
431
|
+
[0, 1, 1]])
|
432
432
|
c = np.array([-8, -3, -3])
|
433
433
|
b = -np.array([3, 0])
|
434
434
|
Z, _, Y = projections(A)
|
@@ -438,12 +438,12 @@ class TestProjectCG(TestCase):
|
|
438
438
|
assert_array_almost_equal(x, [2, -1, 1])
|
439
439
|
|
440
440
|
def test_compare_with_direct_fact(self):
|
441
|
-
H =
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
A =
|
446
|
-
|
441
|
+
H = csc_array([[6, 2, 1, 3],
|
442
|
+
[2, 5, 2, 4],
|
443
|
+
[1, 2, 4, 5],
|
444
|
+
[3, 4, 5, 7]])
|
445
|
+
A = csc_array([[1, 0, 1, 0],
|
446
|
+
[0, 1, 1, 1]])
|
447
447
|
c = np.array([-2, -3, -3, 1])
|
448
448
|
b = -np.array([3, 0])
|
449
449
|
Z, _, Y = projections(A)
|
@@ -454,12 +454,12 @@ class TestProjectCG(TestCase):
|
|
454
454
|
assert_array_almost_equal(x, x_kkt)
|
455
455
|
|
456
456
|
def test_trust_region_infeasible(self):
|
457
|
-
H =
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
A =
|
462
|
-
|
457
|
+
H = csc_array([[6, 2, 1, 3],
|
458
|
+
[2, 5, 2, 4],
|
459
|
+
[1, 2, 4, 5],
|
460
|
+
[3, 4, 5, 7]])
|
461
|
+
A = csc_array([[1, 0, 1, 0],
|
462
|
+
[0, 1, 1, 1]])
|
463
463
|
c = np.array([-2, -3, -3, 1])
|
464
464
|
b = -np.array([3, 0])
|
465
465
|
trust_radius = 1
|
@@ -468,12 +468,12 @@ class TestProjectCG(TestCase):
|
|
468
468
|
projected_cg(H, c, Z, Y, b, trust_radius=trust_radius)
|
469
469
|
|
470
470
|
def test_trust_region_barely_feasible(self):
|
471
|
-
H =
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
A =
|
476
|
-
|
471
|
+
H = csc_array([[6, 2, 1, 3],
|
472
|
+
[2, 5, 2, 4],
|
473
|
+
[1, 2, 4, 5],
|
474
|
+
[3, 4, 5, 7]])
|
475
|
+
A = csc_array([[1, 0, 1, 0],
|
476
|
+
[0, 1, 1, 1]])
|
477
477
|
c = np.array([-2, -3, -3, 1])
|
478
478
|
b = -np.array([3, 0])
|
479
479
|
trust_radius = 2.32379000772445021283
|
@@ -487,12 +487,12 @@ class TestProjectCG(TestCase):
|
|
487
487
|
assert_array_almost_equal(x, -Y.dot(b))
|
488
488
|
|
489
489
|
def test_hits_boundary(self):
|
490
|
-
H =
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
A =
|
495
|
-
|
490
|
+
H = csc_array([[6, 2, 1, 3],
|
491
|
+
[2, 5, 2, 4],
|
492
|
+
[1, 2, 4, 5],
|
493
|
+
[3, 4, 5, 7]])
|
494
|
+
A = csc_array([[1, 0, 1, 0],
|
495
|
+
[0, 1, 1, 1]])
|
496
496
|
c = np.array([-2, -3, -3, 1])
|
497
497
|
b = -np.array([3, 0])
|
498
498
|
trust_radius = 3
|
@@ -505,12 +505,12 @@ class TestProjectCG(TestCase):
|
|
505
505
|
assert_array_almost_equal(np.linalg.norm(x), trust_radius)
|
506
506
|
|
507
507
|
def test_negative_curvature_unconstrained(self):
|
508
|
-
H =
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
A =
|
513
|
-
|
508
|
+
H = csc_array([[1, 2, 1, 3],
|
509
|
+
[2, 0, 2, 4],
|
510
|
+
[1, 2, 0, 2],
|
511
|
+
[3, 4, 2, 0]])
|
512
|
+
A = csc_array([[1, 0, 1, 0],
|
513
|
+
[0, 1, 0, 1]])
|
514
514
|
c = np.array([-2, -3, -3, 1])
|
515
515
|
b = -np.array([3, 0])
|
516
516
|
Z, _, Y = projections(A)
|
@@ -518,12 +518,12 @@ class TestProjectCG(TestCase):
|
|
518
518
|
projected_cg(H, c, Z, Y, b, tol=0)
|
519
519
|
|
520
520
|
def test_negative_curvature(self):
|
521
|
-
H =
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
A =
|
526
|
-
|
521
|
+
H = csc_array([[1, 2, 1, 3],
|
522
|
+
[2, 0, 2, 4],
|
523
|
+
[1, 2, 0, 2],
|
524
|
+
[3, 4, 2, 0]])
|
525
|
+
A = csc_array([[1, 0, 1, 0],
|
526
|
+
[0, 1, 0, 1]])
|
527
527
|
c = np.array([-2, -3, -3, 1])
|
528
528
|
b = -np.array([3, 0])
|
529
529
|
Z, _, Y = projections(A)
|
@@ -538,12 +538,12 @@ class TestProjectCG(TestCase):
|
|
538
538
|
# The box constraints are inactive at the solution but
|
539
539
|
# are active during the iterations.
|
540
540
|
def test_inactive_box_constraints(self):
|
541
|
-
H =
|
542
|
-
|
543
|
-
|
544
|
-
|
545
|
-
A =
|
546
|
-
|
541
|
+
H = csc_array([[6, 2, 1, 3],
|
542
|
+
[2, 5, 2, 4],
|
543
|
+
[1, 2, 4, 5],
|
544
|
+
[3, 4, 5, 7]])
|
545
|
+
A = csc_array([[1, 0, 1, 0],
|
546
|
+
[0, 1, 1, 1]])
|
547
547
|
c = np.array([-2, -3, -3, 1])
|
548
548
|
b = -np.array([3, 0])
|
549
549
|
Z, _, Y = projections(A)
|
@@ -560,12 +560,12 @@ class TestProjectCG(TestCase):
|
|
560
560
|
# The box constraints active and the termination is
|
561
561
|
# by maximum iterations (infeasible interaction).
|
562
562
|
def test_active_box_constraints_maximum_iterations_reached(self):
|
563
|
-
H =
|
564
|
-
|
565
|
-
|
566
|
-
|
567
|
-
A =
|
568
|
-
|
563
|
+
H = csc_array([[6, 2, 1, 3],
|
564
|
+
[2, 5, 2, 4],
|
565
|
+
[1, 2, 4, 5],
|
566
|
+
[3, 4, 5, 7]])
|
567
|
+
A = csc_array([[1, 0, 1, 0],
|
568
|
+
[0, 1, 1, 1]])
|
569
569
|
c = np.array([-2, -3, -3, 1])
|
570
570
|
b = -np.array([3, 0])
|
571
571
|
Z, _, Y = projections(A)
|
@@ -582,12 +582,12 @@ class TestProjectCG(TestCase):
|
|
582
582
|
# The box constraints are active and the termination is
|
583
583
|
# because it hits boundary (without infeasible interaction).
|
584
584
|
def test_active_box_constraints_hits_boundaries(self):
|
585
|
-
H =
|
586
|
-
|
587
|
-
|
588
|
-
|
589
|
-
A =
|
590
|
-
|
585
|
+
H = csc_array([[6, 2, 1, 3],
|
586
|
+
[2, 5, 2, 4],
|
587
|
+
[1, 2, 4, 5],
|
588
|
+
[3, 4, 5, 7]])
|
589
|
+
A = csc_array([[1, 0, 1, 0],
|
590
|
+
[0, 1, 1, 1]])
|
591
591
|
c = np.array([-2, -3, -3, 1])
|
592
592
|
b = -np.array([3, 0])
|
593
593
|
trust_radius = 3
|
@@ -604,12 +604,12 @@ class TestProjectCG(TestCase):
|
|
604
604
|
# The box constraints are active and the termination is
|
605
605
|
# because it hits boundary (infeasible interaction).
|
606
606
|
def test_active_box_constraints_hits_boundaries_infeasible_iter(self):
|
607
|
-
H =
|
608
|
-
|
609
|
-
|
610
|
-
|
611
|
-
A =
|
612
|
-
|
607
|
+
H = csc_array([[6, 2, 1, 3],
|
608
|
+
[2, 5, 2, 4],
|
609
|
+
[1, 2, 4, 5],
|
610
|
+
[3, 4, 5, 7]])
|
611
|
+
A = csc_array([[1, 0, 1, 0],
|
612
|
+
[0, 1, 1, 1]])
|
613
613
|
c = np.array([-2, -3, -3, 1])
|
614
614
|
b = -np.array([3, 0])
|
615
615
|
trust_radius = 4
|
@@ -626,12 +626,12 @@ class TestProjectCG(TestCase):
|
|
626
626
|
# The box constraints are active and the termination is
|
627
627
|
# because it hits boundary (no infeasible interaction).
|
628
628
|
def test_active_box_constraints_negative_curvature(self):
|
629
|
-
H =
|
630
|
-
|
631
|
-
|
632
|
-
|
633
|
-
A =
|
634
|
-
|
629
|
+
H = csc_array([[1, 2, 1, 3],
|
630
|
+
[2, 0, 2, 4],
|
631
|
+
[1, 2, 0, 2],
|
632
|
+
[3, 4, 2, 0]])
|
633
|
+
A = csc_array([[1, 0, 1, 0],
|
634
|
+
[0, 1, 0, 1]])
|
635
635
|
c = np.array([-2, -3, -3, 1])
|
636
636
|
b = -np.array([3, 0])
|
637
637
|
Z, _, Y = projections(A)
|
@@ -158,11 +158,11 @@ class BarrierSubproblem:
|
|
158
158
|
else:
|
159
159
|
if sps.issparse(J_eq) or sps.issparse(J_ineq):
|
160
160
|
# It is expected that J_eq and J_ineq
|
161
|
-
# are already `
|
161
|
+
# are already `csr_array` because of
|
162
162
|
# the way ``BoxConstraint``, ``NonlinearConstraint``
|
163
163
|
# and ``LinearConstraint`` are defined.
|
164
|
-
J_eq = sps.
|
165
|
-
J_ineq = sps.
|
164
|
+
J_eq = sps.csr_array(J_eq)
|
165
|
+
J_ineq = sps.csr_array(J_ineq)
|
166
166
|
return self._assemble_sparse_jacobian(J_eq, J_ineq, s)
|
167
167
|
else:
|
168
168
|
S = np.diag(s)
|
@@ -203,8 +203,8 @@ class BarrierSubproblem:
|
|
203
203
|
new_indices[~mask] = indices
|
204
204
|
new_data[mask] = s
|
205
205
|
new_data[~mask] = data
|
206
|
-
J = sps.
|
207
|
-
|
206
|
+
J = sps.csr_array((new_data, new_indices, new_indptr),
|
207
|
+
(n_eq + n_ineq, n_vars + n_ineq))
|
208
208
|
return J
|
209
209
|
|
210
210
|
def lagrangian_hessian_x(self, z, v):
|
@@ -29,7 +29,6 @@ def _minimize_trustregion_exact(fun, x0, args=(), jac=None, hess=None,
|
|
29
29
|
Gradient norm must be less than ``gtol`` before successful
|
30
30
|
termination.
|
31
31
|
"""
|
32
|
-
|
33
32
|
if jac is None:
|
34
33
|
raise ValueError('Jacobian is required for trust region '
|
35
34
|
'exact minimization.')
|
Binary file
|