scipy 1.16.0rc1__cp311-cp311-win_amd64.whl → 1.16.1__cp311-cp311-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- scipy/__config__.py +9 -9
- scipy/__init__.py +3 -3
- scipy/_cyutility.cp311-win_amd64.dll.a +0 -0
- scipy/_cyutility.cp311-win_amd64.pyd +0 -0
- scipy/_lib/_ccallback_c.cp311-win_amd64.dll.a +0 -0
- scipy/_lib/_ccallback_c.cp311-win_amd64.pyd +0 -0
- scipy/_lib/_fpumode.cp311-win_amd64.dll.a +0 -0
- scipy/_lib/_fpumode.cp311-win_amd64.pyd +0 -0
- scipy/_lib/_test_ccallback.cp311-win_amd64.dll.a +0 -0
- scipy/_lib/_test_ccallback.cp311-win_amd64.pyd +0 -0
- scipy/_lib/_test_deprecation_call.cp311-win_amd64.dll.a +0 -0
- scipy/_lib/_test_deprecation_call.cp311-win_amd64.pyd +0 -0
- scipy/_lib/_test_deprecation_def.cp311-win_amd64.dll.a +0 -0
- scipy/_lib/_test_deprecation_def.cp311-win_amd64.pyd +0 -0
- scipy/_lib/_uarray/_uarray.cp311-win_amd64.dll.a +0 -0
- scipy/_lib/_uarray/_uarray.cp311-win_amd64.pyd +0 -0
- scipy/_lib/_util.py +7 -0
- scipy/_lib/messagestream.cp311-win_amd64.dll.a +0 -0
- scipy/_lib/messagestream.cp311-win_amd64.pyd +0 -0
- scipy/cluster/_hierarchy.cp311-win_amd64.dll.a +0 -0
- scipy/cluster/_hierarchy.cp311-win_amd64.pyd +0 -0
- scipy/cluster/_optimal_leaf_ordering.cp311-win_amd64.dll.a +0 -0
- scipy/cluster/_optimal_leaf_ordering.cp311-win_amd64.pyd +0 -0
- scipy/cluster/_vq.cp311-win_amd64.dll.a +0 -0
- scipy/cluster/_vq.cp311-win_amd64.pyd +0 -0
- scipy/conftest.py +25 -0
- scipy/fft/_pocketfft/pypocketfft.cp311-win_amd64.dll.a +0 -0
- scipy/fft/_pocketfft/pypocketfft.cp311-win_amd64.pyd +0 -0
- scipy/fftpack/convolve.cp311-win_amd64.dll.a +0 -0
- scipy/fftpack/convolve.cp311-win_amd64.pyd +0 -0
- scipy/integrate/_dop.cp311-win_amd64.dll.a +0 -0
- scipy/integrate/_dop.cp311-win_amd64.pyd +0 -0
- scipy/integrate/_lsoda.cp311-win_amd64.dll.a +0 -0
- scipy/integrate/_lsoda.cp311-win_amd64.pyd +0 -0
- scipy/integrate/_odepack.cp311-win_amd64.dll.a +0 -0
- scipy/integrate/_odepack.cp311-win_amd64.pyd +0 -0
- scipy/integrate/_quadpack.cp311-win_amd64.dll.a +0 -0
- scipy/integrate/_quadpack.cp311-win_amd64.pyd +0 -0
- scipy/integrate/_test_multivariate.cp311-win_amd64.dll.a +0 -0
- scipy/integrate/_test_multivariate.cp311-win_amd64.pyd +0 -0
- scipy/integrate/_test_odeint_banded.cp311-win_amd64.dll.a +0 -0
- scipy/integrate/_test_odeint_banded.cp311-win_amd64.pyd +0 -0
- scipy/integrate/_vode.cp311-win_amd64.dll.a +0 -0
- scipy/integrate/_vode.cp311-win_amd64.pyd +0 -0
- scipy/interpolate/_dfitpack.cp311-win_amd64.dll.a +0 -0
- scipy/interpolate/_dfitpack.cp311-win_amd64.pyd +0 -0
- scipy/interpolate/_dierckx.cp311-win_amd64.dll.a +0 -0
- scipy/interpolate/_dierckx.cp311-win_amd64.pyd +0 -0
- scipy/interpolate/_fitpack.cp311-win_amd64.dll.a +0 -0
- scipy/interpolate/_fitpack.cp311-win_amd64.pyd +0 -0
- scipy/interpolate/_interpnd.cp311-win_amd64.dll.a +0 -0
- scipy/interpolate/_interpnd.cp311-win_amd64.pyd +0 -0
- scipy/interpolate/_ppoly.cp311-win_amd64.dll.a +0 -0
- scipy/interpolate/_ppoly.cp311-win_amd64.pyd +0 -0
- scipy/interpolate/_rbfinterp_pythran.cp311-win_amd64.dll.a +0 -0
- scipy/interpolate/_rbfinterp_pythran.cp311-win_amd64.pyd +0 -0
- scipy/interpolate/_rgi_cython.cp311-win_amd64.dll.a +0 -0
- scipy/interpolate/_rgi_cython.cp311-win_amd64.pyd +0 -0
- scipy/io/_fast_matrix_market/_fmm_core.cp311-win_amd64.dll.a +0 -0
- scipy/io/_fast_matrix_market/_fmm_core.cp311-win_amd64.pyd +0 -0
- scipy/io/_test_fortran.cp311-win_amd64.dll.a +0 -0
- scipy/io/_test_fortran.cp311-win_amd64.pyd +0 -0
- scipy/io/matlab/_mio5_utils.cp311-win_amd64.dll.a +0 -0
- scipy/io/matlab/_mio5_utils.cp311-win_amd64.pyd +0 -0
- scipy/io/matlab/_mio_utils.cp311-win_amd64.dll.a +0 -0
- scipy/io/matlab/_mio_utils.cp311-win_amd64.pyd +0 -0
- scipy/io/matlab/_streams.cp311-win_amd64.dll.a +0 -0
- scipy/io/matlab/_streams.cp311-win_amd64.pyd +0 -0
- scipy/io/matlab/tests/test_streams.py +9 -0
- scipy/linalg/_cythonized_array_utils.cp311-win_amd64.dll.a +0 -0
- scipy/linalg/_cythonized_array_utils.cp311-win_amd64.pyd +0 -0
- scipy/linalg/_decomp_interpolative.cp311-win_amd64.dll.a +0 -0
- scipy/linalg/_decomp_interpolative.cp311-win_amd64.pyd +0 -0
- scipy/linalg/_decomp_lu_cython.cp311-win_amd64.dll.a +0 -0
- scipy/linalg/_decomp_lu_cython.cp311-win_amd64.pyd +0 -0
- scipy/linalg/_decomp_update.cp311-win_amd64.dll.a +0 -0
- scipy/linalg/_decomp_update.cp311-win_amd64.pyd +0 -0
- scipy/linalg/_fblas.cp311-win_amd64.dll.a +0 -0
- scipy/linalg/_fblas.cp311-win_amd64.pyd +0 -0
- scipy/linalg/_flapack.cp311-win_amd64.dll.a +0 -0
- scipy/linalg/_flapack.cp311-win_amd64.pyd +0 -0
- scipy/linalg/_linalg_pythran.cp311-win_amd64.dll.a +0 -0
- scipy/linalg/_linalg_pythran.cp311-win_amd64.pyd +0 -0
- scipy/linalg/_matfuncs_expm.cp311-win_amd64.dll.a +0 -0
- scipy/linalg/_matfuncs_expm.cp311-win_amd64.pyd +0 -0
- scipy/linalg/_matfuncs_schur_sqrtm.cp311-win_amd64.dll.a +0 -0
- scipy/linalg/_matfuncs_schur_sqrtm.cp311-win_amd64.pyd +0 -0
- scipy/linalg/_matfuncs_sqrtm_triu.cp311-win_amd64.dll.a +0 -0
- scipy/linalg/_matfuncs_sqrtm_triu.cp311-win_amd64.pyd +0 -0
- scipy/linalg/_solve_toeplitz.cp311-win_amd64.dll.a +0 -0
- scipy/linalg/_solve_toeplitz.cp311-win_amd64.pyd +0 -0
- scipy/linalg/blas.py +35 -24
- scipy/linalg/cython_blas.cp311-win_amd64.dll.a +0 -0
- scipy/linalg/cython_blas.cp311-win_amd64.pyd +0 -0
- scipy/linalg/cython_lapack.cp311-win_amd64.dll.a +0 -0
- scipy/linalg/cython_lapack.cp311-win_amd64.pyd +0 -0
- scipy/linalg/tests/test_matfuncs.py +7 -0
- scipy/ndimage/_ctest.cp311-win_amd64.dll.a +0 -0
- scipy/ndimage/_ctest.cp311-win_amd64.pyd +0 -0
- scipy/ndimage/_cytest.cp311-win_amd64.dll.a +0 -0
- scipy/ndimage/_cytest.cp311-win_amd64.pyd +0 -0
- scipy/ndimage/_filters.py +52 -23
- scipy/ndimage/_nd_image.cp311-win_amd64.dll.a +0 -0
- scipy/ndimage/_nd_image.cp311-win_amd64.pyd +0 -0
- scipy/ndimage/_ni_label.cp311-win_amd64.dll.a +0 -0
- scipy/ndimage/_ni_label.cp311-win_amd64.pyd +0 -0
- scipy/ndimage/_rank_filter_1d.cp311-win_amd64.dll.a +0 -0
- scipy/ndimage/_rank_filter_1d.cp311-win_amd64.pyd +0 -0
- scipy/ndimage/tests/test_filters.py +94 -9
- scipy/odr/__odrpack.cp311-win_amd64.dll.a +0 -0
- scipy/odr/__odrpack.cp311-win_amd64.pyd +0 -0
- scipy/optimize/_bglu_dense.cp311-win_amd64.dll.a +0 -0
- scipy/optimize/_bglu_dense.cp311-win_amd64.pyd +0 -0
- scipy/optimize/_direct.cp311-win_amd64.dll.a +0 -0
- scipy/optimize/_direct.cp311-win_amd64.pyd +0 -0
- scipy/optimize/_group_columns.cp311-win_amd64.dll.a +0 -0
- scipy/optimize/_group_columns.cp311-win_amd64.pyd +0 -0
- scipy/optimize/_highspy/_core.cp311-win_amd64.dll.a +0 -0
- scipy/optimize/_highspy/_core.cp311-win_amd64.pyd +0 -0
- scipy/optimize/_highspy/_highs_options.cp311-win_amd64.dll.a +0 -0
- scipy/optimize/_highspy/_highs_options.cp311-win_amd64.pyd +0 -0
- scipy/optimize/_lbfgsb.cp311-win_amd64.dll.a +0 -0
- scipy/optimize/_lbfgsb.cp311-win_amd64.pyd +0 -0
- scipy/optimize/_lbfgsb_py.py +23 -8
- scipy/optimize/_lsap.cp311-win_amd64.dll.a +0 -0
- scipy/optimize/_lsap.cp311-win_amd64.pyd +0 -0
- scipy/optimize/_lsq/givens_elimination.cp311-win_amd64.dll.a +0 -0
- scipy/optimize/_lsq/givens_elimination.cp311-win_amd64.pyd +0 -0
- scipy/optimize/_lsq/least_squares.py +2 -2
- scipy/optimize/_minimize.py +0 -1
- scipy/optimize/_minpack.cp311-win_amd64.dll.a +0 -0
- scipy/optimize/_minpack.cp311-win_amd64.pyd +0 -0
- scipy/optimize/_moduleTNC.cp311-win_amd64.dll.a +0 -0
- scipy/optimize/_moduleTNC.cp311-win_amd64.pyd +0 -0
- scipy/optimize/_pava_pybind.cp311-win_amd64.dll.a +0 -0
- scipy/optimize/_pava_pybind.cp311-win_amd64.pyd +0 -0
- scipy/optimize/_shgo_lib/_complex.py +2 -2
- scipy/optimize/_slsqplib.cp311-win_amd64.dll.a +0 -0
- scipy/optimize/_slsqplib.cp311-win_amd64.pyd +0 -0
- scipy/optimize/_trlib/_trlib.cp311-win_amd64.dll.a +0 -0
- scipy/optimize/_trlib/_trlib.cp311-win_amd64.pyd +0 -0
- scipy/optimize/_zeros.cp311-win_amd64.dll.a +0 -0
- scipy/optimize/_zeros.cp311-win_amd64.pyd +0 -0
- scipy/optimize/cython_optimize/_zeros.cp311-win_amd64.dll.a +0 -0
- scipy/optimize/cython_optimize/_zeros.cp311-win_amd64.pyd +0 -0
- scipy/optimize/tests/test_lsq_linear.py +1 -1
- scipy/optimize/tests/test_optimize.py +3 -3
- scipy/signal/_filter_design.py +13 -1
- scipy/signal/_fir_filter_design.py +1 -1
- scipy/signal/_max_len_seq_inner.cp311-win_amd64.dll.a +0 -0
- scipy/signal/_max_len_seq_inner.cp311-win_amd64.pyd +0 -0
- scipy/signal/_peak_finding_utils.cp311-win_amd64.dll.a +0 -0
- scipy/signal/_peak_finding_utils.cp311-win_amd64.pyd +0 -0
- scipy/signal/_polyutils.py +1 -1
- scipy/signal/_sigtools.cp311-win_amd64.dll.a +0 -0
- scipy/signal/_sigtools.cp311-win_amd64.pyd +0 -0
- scipy/signal/_sosfilt.cp311-win_amd64.dll.a +0 -0
- scipy/signal/_sosfilt.cp311-win_amd64.pyd +0 -0
- scipy/signal/_spectral_py.py +9 -0
- scipy/signal/_spline.cp311-win_amd64.dll.a +0 -0
- scipy/signal/_spline.cp311-win_amd64.pyd +0 -0
- scipy/signal/_upfirdn_apply.cp311-win_amd64.dll.a +0 -0
- scipy/signal/_upfirdn_apply.cp311-win_amd64.pyd +0 -0
- scipy/signal/tests/test_filter_design.py +19 -0
- scipy/signal/tests/test_fir_filter_design.py +5 -0
- scipy/signal/tests/test_signaltools.py +1 -1
- scipy/signal/tests/test_spectral.py +31 -0
- scipy/sparse/_base.py +5 -2
- scipy/sparse/_csparsetools.cp311-win_amd64.dll.a +0 -0
- scipy/sparse/_csparsetools.cp311-win_amd64.pyd +0 -0
- scipy/sparse/_sparsetools.cp311-win_amd64.dll.a +0 -0
- scipy/sparse/_sparsetools.cp311-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_flow.cp311-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_flow.cp311-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_matching.cp311-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_matching.cp311-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cp311-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cp311-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_reordering.cp311-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_reordering.cp311-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_shortest_path.cp311-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_shortest_path.cp311-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_tools.cp311-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_tools.cp311-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_traversal.cp311-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_traversal.cp311-win_amd64.pyd +0 -0
- scipy/sparse/linalg/_dsolve/_superlu.cp311-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_dsolve/_superlu.cp311-win_amd64.pyd +0 -0
- scipy/sparse/linalg/_eigen/arpack/_arpack.cp311-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_eigen/arpack/_arpack.cp311-win_amd64.pyd +0 -0
- scipy/sparse/linalg/_propack/_cpropack.cp311-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_propack/_cpropack.cp311-win_amd64.pyd +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cp311-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cp311-win_amd64.pyd +0 -0
- scipy/sparse/linalg/_propack/_spropack.cp311-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_propack/_spropack.cp311-win_amd64.pyd +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cp311-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cp311-win_amd64.pyd +0 -0
- scipy/sparse/tests/test_base.py +10 -0
- scipy/spatial/_ckdtree.cp311-win_amd64.dll.a +0 -0
- scipy/spatial/_ckdtree.cp311-win_amd64.pyd +0 -0
- scipy/spatial/_distance_pybind.cp311-win_amd64.dll.a +0 -0
- scipy/spatial/_distance_pybind.cp311-win_amd64.pyd +0 -0
- scipy/spatial/_distance_wrap.cp311-win_amd64.dll.a +0 -0
- scipy/spatial/_distance_wrap.cp311-win_amd64.pyd +0 -0
- scipy/spatial/_hausdorff.cp311-win_amd64.dll.a +0 -0
- scipy/spatial/_hausdorff.cp311-win_amd64.pyd +0 -0
- scipy/spatial/_qhull.cp311-win_amd64.dll.a +0 -0
- scipy/spatial/_qhull.cp311-win_amd64.pyd +0 -0
- scipy/spatial/_voronoi.cp311-win_amd64.dll.a +0 -0
- scipy/spatial/_voronoi.cp311-win_amd64.pyd +0 -0
- scipy/spatial/tests/test_distance.py +12 -0
- scipy/spatial/transform/_rigid_transform.cp311-win_amd64.dll.a +0 -0
- scipy/spatial/transform/_rigid_transform.cp311-win_amd64.pyd +0 -0
- scipy/spatial/transform/_rotation.cp311-win_amd64.dll.a +0 -0
- scipy/spatial/transform/_rotation.cp311-win_amd64.pyd +0 -0
- scipy/special/_comb.cp311-win_amd64.dll.a +0 -0
- scipy/special/_comb.cp311-win_amd64.pyd +0 -0
- scipy/special/_ellip_harm_2.cp311-win_amd64.dll.a +0 -0
- scipy/special/_ellip_harm_2.cp311-win_amd64.pyd +0 -0
- scipy/special/_gufuncs.cp311-win_amd64.dll.a +0 -0
- scipy/special/_gufuncs.cp311-win_amd64.pyd +0 -0
- scipy/special/_specfun.cp311-win_amd64.dll.a +0 -0
- scipy/special/_specfun.cp311-win_amd64.pyd +0 -0
- scipy/special/_special_ufuncs.cp311-win_amd64.dll.a +0 -0
- scipy/special/_special_ufuncs.cp311-win_amd64.pyd +0 -0
- scipy/special/_test_internal.cp311-win_amd64.dll.a +0 -0
- scipy/special/_test_internal.cp311-win_amd64.pyd +0 -0
- scipy/special/_ufuncs.cp311-win_amd64.dll.a +0 -0
- scipy/special/_ufuncs.cp311-win_amd64.pyd +0 -0
- scipy/special/_ufuncs_cxx.cp311-win_amd64.dll.a +0 -0
- scipy/special/_ufuncs_cxx.cp311-win_amd64.pyd +0 -0
- scipy/special/cython_special.cp311-win_amd64.dll.a +0 -0
- scipy/special/cython_special.cp311-win_amd64.pyd +0 -0
- scipy/stats/_ansari_swilk_statistics.cp311-win_amd64.dll.a +0 -0
- scipy/stats/_ansari_swilk_statistics.cp311-win_amd64.pyd +0 -0
- scipy/stats/_axis_nan_policy.py +1 -9
- scipy/stats/_biasedurn.cp311-win_amd64.dll.a +0 -0
- scipy/stats/_biasedurn.cp311-win_amd64.pyd +0 -0
- scipy/stats/_continuous_distns.py +19 -16
- scipy/stats/_correlation.py +1 -1
- scipy/stats/_distribution_infrastructure.py +20 -0
- scipy/stats/_entropy.py +2 -2
- scipy/stats/_hypotests.py +1 -1
- scipy/stats/_levy_stable/levyst.cp311-win_amd64.dll.a +0 -0
- scipy/stats/_levy_stable/levyst.cp311-win_amd64.pyd +0 -0
- scipy/stats/_morestats.py +7 -7
- scipy/stats/_qmc_cy.cp311-win_amd64.dll.a +0 -0
- scipy/stats/_qmc_cy.cp311-win_amd64.pyd +0 -0
- scipy/stats/_qmvnt_cy.cp311-win_amd64.dll.a +0 -0
- scipy/stats/_qmvnt_cy.cp311-win_amd64.pyd +0 -0
- scipy/stats/_rcont/rcont.cp311-win_amd64.dll.a +0 -0
- scipy/stats/_rcont/rcont.cp311-win_amd64.pyd +0 -0
- scipy/stats/_resampling.py +1 -1
- scipy/stats/_sobol.cp311-win_amd64.dll.a +0 -0
- scipy/stats/_sobol.cp311-win_amd64.pyd +0 -0
- scipy/stats/_stats.cp311-win_amd64.dll.a +0 -0
- scipy/stats/_stats.cp311-win_amd64.pyd +0 -0
- scipy/stats/_stats_mstats_common.py +4 -2
- scipy/stats/_stats_py.py +19 -19
- scipy/stats/_stats_pythran.cp311-win_amd64.dll.a +0 -0
- scipy/stats/_stats_pythran.cp311-win_amd64.pyd +0 -0
- scipy/stats/_unuran/unuran_wrapper.cp311-win_amd64.dll.a +0 -0
- scipy/stats/_unuran/unuran_wrapper.cp311-win_amd64.pyd +0 -0
- scipy/stats/_variation.py +1 -1
- scipy/stats/tests/test_distributions.py +13 -0
- scipy/stats/tests/test_fast_gen_inversion.py +2 -0
- scipy/stats/tests/test_morestats.py +4 -4
- scipy/version.py +2 -2
- scipy-1.16.1.dist-info/DELVEWHEEL +2 -0
- {scipy-1.16.0rc1.dist-info → scipy-1.16.1.dist-info}/LICENSE.txt +3 -3
- {scipy-1.16.0rc1.dist-info → scipy-1.16.1.dist-info}/METADATA +5 -4
- {scipy-1.16.0rc1.dist-info → scipy-1.16.1.dist-info}/RECORD +276 -276
- scipy-1.16.0rc1.dist-info/DELVEWHEEL +0 -2
- /scipy-1.16.0rc1-cp311-cp311-win_amd64.whl → /scipy-1.16.1-cp311-cp311-win_amd64.whl +0 -0
- {scipy-1.16.0rc1.dist-info → scipy-1.16.1.dist-info}/WHEEL +0 -0
- /scipy.libs/{libscipy_openblas-f07f5a5d207a3a47104dca54d6d0c86a.dll → libscipy_openblas-6b2103f2ae4d8547998b5d188e9801fb.dll} +0 -0
Binary file
|
scipy/signal/_spectral_py.py
CHANGED
@@ -897,6 +897,15 @@ def csd(x, y, fs=1.0, window='hann', nperseg=None, noverlap=None, nfft=None,
|
|
897
897
|
if np.iscomplexobj(x) and return_onesided:
|
898
898
|
return_onesided = False
|
899
899
|
|
900
|
+
if x.shape[axis] < y.shape[axis]: # zero-pad x to shape of y:
|
901
|
+
z_shape = list(y.shape)
|
902
|
+
z_shape[axis] = y.shape[axis] - x.shape[axis]
|
903
|
+
x = np.concatenate((x, np.zeros(z_shape)), axis=axis)
|
904
|
+
elif y.shape[axis] < x.shape[axis]: # zero-pad y to shape of x:
|
905
|
+
z_shape = list(x.shape)
|
906
|
+
z_shape[axis] = x.shape[axis] - y.shape[axis]
|
907
|
+
y = np.concatenate((y, np.zeros(z_shape)), axis=axis)
|
908
|
+
|
900
909
|
# using cast() to make mypy happy:
|
901
910
|
fft_mode = cast(FFT_MODE_TYPE, 'onesided' if return_onesided else 'twosided')
|
902
911
|
if scaling not in (scales := {'spectrum': 'magnitude', 'density': 'psd'}):
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -382,6 +382,19 @@ class TestTf2Sos:
|
|
382
382
|
sos2 = tf2sos(b, a, analog=analog)
|
383
383
|
assert_array_almost_equal(sos, sos2, decimal=4)
|
384
384
|
|
385
|
+
def test_gh_23221(self):
|
386
|
+
# Tests that this tf2sos call below does not produce ComplexWarnings
|
387
|
+
# This test is specific for scipy==1.16.0: later scipy versions do not produce
|
388
|
+
# the warning.
|
389
|
+
with suppress_warnings():
|
390
|
+
warnings.simplefilter("error")
|
391
|
+
tf2sos([0.21860986786301265, -0.4372197357260253, -0.2186098678630126,
|
392
|
+
0.8744394714520509, -0.21860986786301248, -0.4372197357260253,
|
393
|
+
0.21860986786301265],
|
394
|
+
[1., -4.18323041786553, 6.829924151626914, -5.407777865686045,
|
395
|
+
2.0773105450802336, -0.33482732571537893, 0.0186009178695853 ]
|
396
|
+
)
|
397
|
+
|
385
398
|
|
386
399
|
@skip_xp_backends(
|
387
400
|
cpu_only=True, reason="XXX zpk2sos is numpy-only", exceptions=['cupy']
|
@@ -754,6 +767,12 @@ class TestFreqz:
|
|
754
767
|
xp_assert_equal(w, xp.asarray([0. , 0.1]))
|
755
768
|
xp_assert_equal(h, xp.asarray([1.+0.j, 1.+0.j]))
|
756
769
|
|
770
|
+
def test_gh_23277(self):
|
771
|
+
# backwards compatibility: `w` array must be real, not complex
|
772
|
+
filt = [0.5 + 0.0j, 0.5 + 0.0j]
|
773
|
+
w, _ = freqz(filt, worN=8)
|
774
|
+
assert w.dtype == np.float64
|
775
|
+
|
757
776
|
def test_basic(self, xp):
|
758
777
|
w, h = freqz(xp.asarray([1.0]), worN=8)
|
759
778
|
assert_array_almost_equal(w, xp.pi * xp.arange(8, dtype=w.dtype) / 8.)
|
@@ -546,6 +546,11 @@ class TestRemez:
|
|
546
546
|
with pytest.raises(ValueError, match="Sampling.*single scalar"):
|
547
547
|
remez(11, .1, 1, fs=np.array([10, 20]))
|
548
548
|
|
549
|
+
def test_gh_23266(self, xp):
|
550
|
+
bands = xp.asarray([0.0, 0.2, 0.3, 0.5])
|
551
|
+
desired = xp.asarray([1.0, 0.0])
|
552
|
+
weight = xp.asarray([1.0, 2.0])
|
553
|
+
remez(21, bands, desired, weight=weight)
|
549
554
|
|
550
555
|
|
551
556
|
@skip_xp_backends(cpu_only=True, reason="lstsq")
|
@@ -1295,7 +1295,7 @@ class TestMedFilt:
|
|
1295
1295
|
# us into wrong memory if used (but it does not need to be used)
|
1296
1296
|
dummy = xp.arange(10, dtype=xp.float64)
|
1297
1297
|
a = dummy[5:6]
|
1298
|
-
a.strides
|
1298
|
+
a = np.lib.stride_tricks.as_strided(a, strides=(16,))
|
1299
1299
|
xp_assert_close(signal.medfilt(a, 1), xp.asarray([5.]))
|
1300
1300
|
|
1301
1301
|
@skip_xp_backends(
|
@@ -8,6 +8,7 @@ import pytest
|
|
8
8
|
from pytest import raises as assert_raises
|
9
9
|
|
10
10
|
from scipy import signal
|
11
|
+
from scipy._lib._array_api import xp_assert_close
|
11
12
|
from scipy.fft import fftfreq, rfftfreq, fft, irfft
|
12
13
|
from scipy.integrate import trapezoid
|
13
14
|
from scipy.signal import (periodogram, welch, lombscargle, coherence, csd,
|
@@ -591,6 +592,36 @@ class TestCSD:
|
|
591
592
|
assert_allclose(f, f1)
|
592
593
|
assert_allclose(c, c1)
|
593
594
|
|
595
|
+
def test_unequal_length_input_1D(self):
|
596
|
+
"""Test zero-padding for input `x.shape[axis] != y.shape[axis]` for 1d arrays.
|
597
|
+
|
598
|
+
This test ensures that issue 23036 is fixed.
|
599
|
+
"""
|
600
|
+
x = np.tile([4, 0, -4, 0], 4)
|
601
|
+
|
602
|
+
kw = dict(fs=len(x), window='boxcar', nperseg=4)
|
603
|
+
X0 = signal.csd(x, np.copy(x), **kw)[1] # `x is x` must be False
|
604
|
+
X1 = signal.csd(x, x[:8], **kw)[1]
|
605
|
+
X2 = signal.csd(x[:8], x, **kw)[1]
|
606
|
+
xp_assert_close(X1, X0 / 2)
|
607
|
+
xp_assert_close(X2, X0 / 2)
|
608
|
+
|
609
|
+
def test_unequal_length_input_3D(self):
|
610
|
+
"""Test zero-padding for input `x.shape[axis] != y.shape[axis]` for 3d arrays.
|
611
|
+
|
612
|
+
This test ensures that issue 23036 is fixed.
|
613
|
+
"""
|
614
|
+
n = 8
|
615
|
+
x = np.zeros(2 * 3 * n).reshape(2, n, 3)
|
616
|
+
x[:, 0, :] = n
|
617
|
+
|
618
|
+
kw = dict(fs=n, window='boxcar', nperseg=n, detrend=None, axis=1)
|
619
|
+
X0 = signal.csd(x, x.copy(), **kw)[1] # `x is x` must be False
|
620
|
+
X1 = signal.csd(x, x[:, :2, :], **kw)[1]
|
621
|
+
X2 = signal.csd(x[:, :2, :], x, **kw)[1]
|
622
|
+
xp_assert_close(X1, X0)
|
623
|
+
xp_assert_close(X2, X0)
|
624
|
+
|
594
625
|
def test_real_onesided_even(self):
|
595
626
|
x = np.zeros(16)
|
596
627
|
x[0] = 1
|
scipy/sparse/_base.py
CHANGED
@@ -494,7 +494,10 @@ class _spbase(SparseABC):
|
|
494
494
|
return self._mul_scalar(other)
|
495
495
|
|
496
496
|
if self.ndim < 3:
|
497
|
-
|
497
|
+
try:
|
498
|
+
return self._multiply_2d_with_broadcasting(other)
|
499
|
+
except AttributeError:
|
500
|
+
return self.tocsr()._multiply_2d_with_broadcasting(other)
|
498
501
|
|
499
502
|
if not (issparse(other) or isdense(other)):
|
500
503
|
# If it's a list or whatever, treat it like an array
|
@@ -658,7 +661,7 @@ class _spbase(SparseABC):
|
|
658
661
|
# eq and ne return True or False instead of an array when the shapes
|
659
662
|
# don't match. Numpy doesn't do this. Is this what we want?
|
660
663
|
if op in (operator.eq, operator.ne):
|
661
|
-
return op
|
664
|
+
return op is operator.ne
|
662
665
|
raise ValueError("inconsistent shape")
|
663
666
|
|
664
667
|
csr_self = (self if self.ndim < 3 else self.reshape(1, -1)).tocsr()
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
scipy/sparse/tests/test_base.py
CHANGED
@@ -433,6 +433,13 @@ class _TestCommon:
|
|
433
433
|
for dtype in self.checked_dtypes:
|
434
434
|
check(dtype)
|
435
435
|
|
436
|
+
def test_eq_ne_different_shapes(self):
|
437
|
+
if self.datsp.format not in ['bsr', 'csc', 'csr']:
|
438
|
+
pytest.skip("Bool comparisons only implemented for BSR, CSC, and CSR.")
|
439
|
+
# Is this what we want? numpy raises when shape differs. we return False.
|
440
|
+
assert (self.datsp == self.datsp.T) is False
|
441
|
+
assert (self.datsp != self.datsp.T) is True
|
442
|
+
|
436
443
|
def test_lt(self):
|
437
444
|
sup = suppress_warnings()
|
438
445
|
sup.filter(SparseEfficiencyWarning)
|
@@ -1617,6 +1624,9 @@ class _TestCommon:
|
|
1617
1624
|
B = array([[0,7,0],[0,-4,0]])
|
1618
1625
|
Asp = self.spcreator(A)
|
1619
1626
|
Bsp = self.spcreator(B)
|
1627
|
+
# check output format
|
1628
|
+
out_fmt = Asp.format if Asp.format in ('csc', 'dia', 'bsr') else 'csr'
|
1629
|
+
assert (Asp.multiply(Bsp)).format == out_fmt
|
1620
1630
|
assert_almost_equal(Asp.multiply(Bsp).toarray(), A*B) # sparse/sparse
|
1621
1631
|
assert_almost_equal(Asp.multiply(B).toarray(), A*B) # sparse/dense
|
1622
1632
|
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -2231,6 +2231,18 @@ def test_immutable_input(metric):
|
|
2231
2231
|
getattr(scipy.spatial.distance, metric)(x, x, w=x)
|
2232
2232
|
|
2233
2233
|
|
2234
|
+
def test_gh_23109():
|
2235
|
+
a = np.array([0, 0, 1, 1])
|
2236
|
+
b = np.array([0, 1, 1, 0])
|
2237
|
+
w = np.asarray([1.5, 1.2, 0.7, 1.3])
|
2238
|
+
expected = yule(a, b, w=w)
|
2239
|
+
assert_allclose(expected, 1.1954022988505748)
|
2240
|
+
actual = cdist(np.atleast_2d(a),
|
2241
|
+
np.atleast_2d(b),
|
2242
|
+
metric='yule', w=w)
|
2243
|
+
assert_allclose(actual, expected)
|
2244
|
+
|
2245
|
+
|
2234
2246
|
class TestJaccard:
|
2235
2247
|
|
2236
2248
|
def test_pdist_jaccard_random(self):
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
scipy/stats/_axis_nan_policy.py
CHANGED
@@ -403,17 +403,9 @@ def _axis_nan_policy_factory(tuple_to_result, default_axis=0,
|
|
403
403
|
override.update(temp)
|
404
404
|
|
405
405
|
if result_to_tuple is None:
|
406
|
-
def result_to_tuple(res):
|
406
|
+
def result_to_tuple(res, _):
|
407
407
|
return res
|
408
408
|
|
409
|
-
# The only `result_to_tuple` that needs the second argument (number of
|
410
|
-
# outputs) is the one for `moment`, and this was realized very late.
|
411
|
-
# Rather than changing all `result_to_tuple` definitions, we wrap them
|
412
|
-
# here to accept a second argument if they don't already.
|
413
|
-
if len(inspect.signature(result_to_tuple).parameters) == 1:
|
414
|
-
def result_to_tuple(res, _, f=result_to_tuple):
|
415
|
-
return f(res)
|
416
|
-
|
417
409
|
if not callable(too_small):
|
418
410
|
def is_too_small(samples, *ts_args, axis=-1, **ts_kwargs):
|
419
411
|
for sample in samples:
|
Binary file
|
Binary file
|
@@ -935,23 +935,26 @@ class beta_gen(rv_continuous):
|
|
935
935
|
log_term = sum_ab*np.log1p(a/b) + np.log(b) - 2*np.log(sum_ab)
|
936
936
|
return t1 + t2 + log_term
|
937
937
|
|
938
|
-
def
|
939
|
-
if v == 1.0:
|
940
|
-
return 1000
|
941
|
-
|
942
|
-
j = np.log10(v)
|
943
|
-
digits = int(j)
|
944
|
-
d = int(v / 10 ** digits) + 2
|
945
|
-
return d*10**(7 + j)
|
946
|
-
|
947
|
-
if a >= 4.96e6 and b >= 4.96e6:
|
948
|
-
return asymptotic_ab_large(a, b)
|
949
|
-
elif a <= 4.9e6 and b - a >= 1e6 and b >= threshold_large(a):
|
950
|
-
return asymptotic_b_large(a, b)
|
951
|
-
elif b <= 4.9e6 and a - b >= 1e6 and a >= threshold_large(b):
|
938
|
+
def asymptotic_a_large(a, b):
|
952
939
|
return asymptotic_b_large(b, a)
|
953
|
-
|
954
|
-
|
940
|
+
|
941
|
+
def threshold_large(v):
|
942
|
+
j = np.floor(np.log10(v))
|
943
|
+
d = np.floor(v / 10 ** j) + 2
|
944
|
+
return xpx.apply_where(v != 1.0, (d, j), lambda d_, j_: d_ * 10**(7 + j_),
|
945
|
+
fill_value=1000)
|
946
|
+
|
947
|
+
threshold_a = threshold_large(a)
|
948
|
+
threshold_b = threshold_large(b)
|
949
|
+
return _lazyselect([(a >= 4.96e6) & (b >= 4.96e6),
|
950
|
+
(a <= 4.9e6) & (b - a >= 1e6) & (b >= threshold_a),
|
951
|
+
(b <= 4.9e6) & (a - b >= 1e6) & (a >= threshold_b),
|
952
|
+
(a < 4.9e6) & (b < 4.9e6)
|
953
|
+
],
|
954
|
+
[asymptotic_ab_large, asymptotic_b_large,
|
955
|
+
asymptotic_a_large, regular],
|
956
|
+
[a, b]
|
957
|
+
)
|
955
958
|
|
956
959
|
|
957
960
|
beta = beta_gen(a=0.0, b=1.0, name='beta')
|
scipy/stats/_correlation.py
CHANGED
@@ -5100,6 +5100,26 @@ class Mixture(_ProbabilityDistribution):
|
|
5100
5100
|
.. [1] Mixture distribution, *Wikipedia*,
|
5101
5101
|
https://en.wikipedia.org/wiki/Mixture_distribution
|
5102
5102
|
|
5103
|
+
|
5104
|
+
Examples
|
5105
|
+
--------
|
5106
|
+
A mixture of normal distributions:
|
5107
|
+
|
5108
|
+
>>> import numpy as np
|
5109
|
+
>>> from scipy import stats
|
5110
|
+
>>> import matplotlib.pyplot as plt
|
5111
|
+
>>> X1 = stats.Normal(mu=-2, sigma=1)
|
5112
|
+
>>> X2 = stats.Normal(mu=2, sigma=1)
|
5113
|
+
>>> mixture = stats.Mixture([X1, X2], weights=[0.4, 0.6])
|
5114
|
+
>>> print(f'mean: {mixture.mean():.2f}, '
|
5115
|
+
... f'median: {mixture.median():.2f}, '
|
5116
|
+
... f'mode: {mixture.mode():.2f}')
|
5117
|
+
mean: 0.40, median: 1.04, mode: 2.00
|
5118
|
+
>>> x = np.linspace(-10, 10, 300)
|
5119
|
+
>>> plt.plot(x, mixture.pdf(x))
|
5120
|
+
>>> plt.title('PDF of normal distribution mixture')
|
5121
|
+
>>> plt.show()
|
5122
|
+
|
5103
5123
|
"""
|
5104
5124
|
# Todo:
|
5105
5125
|
# Add support for array shapes, weights
|
scipy/stats/_entropy.py
CHANGED
@@ -20,7 +20,7 @@ __all__ = ['entropy', 'differential_entropy']
|
|
20
20
|
2 if ("qk" in kwgs and kwgs["qk"] is not None)
|
21
21
|
else 1
|
22
22
|
),
|
23
|
-
n_outputs=1, result_to_tuple=lambda x: (x,), paired=True,
|
23
|
+
n_outputs=1, result_to_tuple=lambda x, _: (x,), paired=True,
|
24
24
|
too_small=-1 # entropy doesn't have too small inputs
|
25
25
|
)
|
26
26
|
def entropy(pk: np.typing.ArrayLike,
|
@@ -170,7 +170,7 @@ def _differential_entropy_is_too_small(samples, kwargs, axis=-1):
|
|
170
170
|
|
171
171
|
|
172
172
|
@_axis_nan_policy_factory(
|
173
|
-
lambda x: x, n_outputs=1, result_to_tuple=lambda x: (x,),
|
173
|
+
lambda x: x, n_outputs=1, result_to_tuple=lambda x, _: (x,),
|
174
174
|
too_small=_differential_entropy_is_too_small
|
175
175
|
)
|
176
176
|
def differential_entropy(
|
scipy/stats/_hypotests.py
CHANGED
Binary file
|
Binary file
|
scipy/stats/_morestats.py
CHANGED
@@ -222,7 +222,7 @@ def mvsdist(data):
|
|
222
222
|
|
223
223
|
|
224
224
|
@_axis_nan_policy_factory(
|
225
|
-
lambda x: x, result_to_tuple=lambda x: (x,), n_outputs=1, default_axis=None
|
225
|
+
lambda x: x, result_to_tuple=lambda x, _: (x,), n_outputs=1, default_axis=None
|
226
226
|
)
|
227
227
|
def kstat(data, n=2, *, axis=None):
|
228
228
|
r"""
|
@@ -327,7 +327,7 @@ def kstat(data, n=2, *, axis=None):
|
|
327
327
|
|
328
328
|
|
329
329
|
@_axis_nan_policy_factory(
|
330
|
-
lambda x: x, result_to_tuple=lambda x: (x,), n_outputs=1, default_axis=None
|
330
|
+
lambda x: x, result_to_tuple=lambda x, _: (x,), n_outputs=1, default_axis=None
|
331
331
|
)
|
332
332
|
def kstatvar(data, n=2, *, axis=None):
|
333
333
|
r"""Return an unbiased estimator of the variance of the k-statistic.
|
@@ -984,7 +984,7 @@ def boxcox_llf(lmb, data, *, axis=0, keepdims=False, nan_policy='propagate'):
|
|
984
984
|
|
985
985
|
|
986
986
|
@_axis_nan_policy_factory(lambda x: x, n_outputs=1, default_axis=0,
|
987
|
-
result_to_tuple=lambda x: (x,))
|
987
|
+
result_to_tuple=lambda x, _: (x,))
|
988
988
|
def _boxcox_llf(data, axis=0, *, lmb):
|
989
989
|
xp = array_namespace(data)
|
990
990
|
lmb, data = xp_promote(lmb, data, force_floating=True, xp=xp)
|
@@ -3496,7 +3496,7 @@ def mood(x, y, axis=0, alternative="two-sided"):
|
|
3496
3496
|
WilcoxonResult = _make_tuple_bunch('WilcoxonResult', ['statistic', 'pvalue'])
|
3497
3497
|
|
3498
3498
|
|
3499
|
-
def wilcoxon_result_unpacker(res):
|
3499
|
+
def wilcoxon_result_unpacker(res, _):
|
3500
3500
|
if hasattr(res, 'zstatistic'):
|
3501
3501
|
return res.statistic, res.pvalue, res.zstatistic
|
3502
3502
|
else:
|
@@ -3993,7 +3993,7 @@ def _circfuncs_common(samples, period, xp=None):
|
|
3993
3993
|
|
3994
3994
|
@_axis_nan_policy_factory(
|
3995
3995
|
lambda x: x, n_outputs=1, default_axis=None,
|
3996
|
-
result_to_tuple=lambda x: (x,)
|
3996
|
+
result_to_tuple=lambda x, _: (x,)
|
3997
3997
|
)
|
3998
3998
|
def circmean(samples, high=2*pi, low=0, axis=None, nan_policy='propagate'):
|
3999
3999
|
r"""Compute the circular mean of a sample of angle observations.
|
@@ -4086,7 +4086,7 @@ def circmean(samples, high=2*pi, low=0, axis=None, nan_policy='propagate'):
|
|
4086
4086
|
|
4087
4087
|
@_axis_nan_policy_factory(
|
4088
4088
|
lambda x: x, n_outputs=1, default_axis=None,
|
4089
|
-
result_to_tuple=lambda x: (x,)
|
4089
|
+
result_to_tuple=lambda x, _: (x,)
|
4090
4090
|
)
|
4091
4091
|
def circvar(samples, high=2*pi, low=0, axis=None, nan_policy='propagate'):
|
4092
4092
|
r"""Compute the circular variance of a sample of angle observations.
|
@@ -4180,7 +4180,7 @@ def circvar(samples, high=2*pi, low=0, axis=None, nan_policy='propagate'):
|
|
4180
4180
|
|
4181
4181
|
@_axis_nan_policy_factory(
|
4182
4182
|
lambda x: x, n_outputs=1, default_axis=None,
|
4183
|
-
result_to_tuple=lambda x: (x,)
|
4183
|
+
result_to_tuple=lambda x, _: (x,)
|
4184
4184
|
)
|
4185
4185
|
def circstd(samples, high=2*pi, low=0, axis=None, nan_policy='propagate', *,
|
4186
4186
|
normalize=False):
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
scipy/stats/_resampling.py
CHANGED
@@ -942,7 +942,7 @@ def monte_carlo_test(data, rvs, statistic, *, vectorized=None,
|
|
942
942
|
for rvs_i, n_observations_i in zip(rvs, n_observations)]
|
943
943
|
null_distribution.append(statistic(*resamples, axis=-1))
|
944
944
|
null_distribution = xp.concat(null_distribution)
|
945
|
-
null_distribution = xp.reshape(null_distribution,
|
945
|
+
null_distribution = xp.reshape(null_distribution, (-1,) + (1,)*observed.ndim)
|
946
946
|
|
947
947
|
# relative tolerance for detecting numerically distinct but
|
948
948
|
# theoretically equal values in the null distribution
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -21,7 +21,8 @@ def _n_samples_optional_x(kwargs):
|
|
21
21
|
|
22
22
|
@_axis_nan_policy_factory(TheilslopesResult, default_axis=None, n_outputs=4,
|
23
23
|
n_samples=_n_samples_optional_x,
|
24
|
-
result_to_tuple=tuple, paired=True,
|
24
|
+
result_to_tuple=lambda x, _: tuple(x), paired=True,
|
25
|
+
too_small=1)
|
25
26
|
def theilslopes(y, x=None, alpha=0.95, method='separate'):
|
26
27
|
r"""
|
27
28
|
Computes the Theil-Sen estimator for a set of points (x, y).
|
@@ -204,7 +205,8 @@ def _find_repeats(arr):
|
|
204
205
|
|
205
206
|
@_axis_nan_policy_factory(SiegelslopesResult, default_axis=None, n_outputs=2,
|
206
207
|
n_samples=_n_samples_optional_x,
|
207
|
-
result_to_tuple=tuple, paired=True,
|
208
|
+
result_to_tuple=lambda x, _: tuple(x), paired=True,
|
209
|
+
too_small=1)
|
208
210
|
def siegelslopes(y, x=None, method="hierarchical"):
|
209
211
|
r"""
|
210
212
|
Computes the Siegel estimator for a set of points (x, y).
|