scipy 1.15.2__cp310-cp310-win_amd64.whl → 1.15.3__cp310-cp310-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 +6 -6
- scipy/__init__.py +3 -3
- scipy/_lib/_array_api.py +11 -0
- scipy/_lib/_ccallback_c.cp310-win_amd64.dll.a +0 -0
- scipy/_lib/_ccallback_c.cp310-win_amd64.pyd +0 -0
- scipy/_lib/_fpumode.cp310-win_amd64.dll.a +0 -0
- scipy/_lib/_fpumode.cp310-win_amd64.pyd +0 -0
- scipy/_lib/_test_ccallback.cp310-win_amd64.dll.a +0 -0
- scipy/_lib/_test_ccallback.cp310-win_amd64.pyd +0 -0
- scipy/_lib/_test_deprecation_call.cp310-win_amd64.dll.a +0 -0
- scipy/_lib/_test_deprecation_call.cp310-win_amd64.pyd +0 -0
- scipy/_lib/_test_deprecation_def.cp310-win_amd64.dll.a +0 -0
- scipy/_lib/_test_deprecation_def.cp310-win_amd64.pyd +0 -0
- scipy/_lib/_uarray/_uarray.cp310-win_amd64.dll.a +0 -0
- scipy/_lib/_uarray/_uarray.cp310-win_amd64.pyd +0 -0
- scipy/_lib/messagestream.cp310-win_amd64.dll.a +0 -0
- scipy/_lib/messagestream.cp310-win_amd64.pyd +0 -0
- scipy/_lib/tests/test_array_api.py +5 -1
- scipy/cluster/_hierarchy.cp310-win_amd64.dll.a +0 -0
- scipy/cluster/_hierarchy.cp310-win_amd64.pyd +0 -0
- scipy/cluster/_optimal_leaf_ordering.cp310-win_amd64.dll.a +0 -0
- scipy/cluster/_optimal_leaf_ordering.cp310-win_amd64.pyd +0 -0
- scipy/cluster/_vq.cp310-win_amd64.dll.a +0 -0
- scipy/cluster/_vq.cp310-win_amd64.pyd +0 -0
- scipy/fft/_pocketfft/pypocketfft.cp310-win_amd64.dll.a +0 -0
- scipy/fft/_pocketfft/pypocketfft.cp310-win_amd64.pyd +0 -0
- scipy/fftpack/convolve.cp310-win_amd64.dll.a +0 -0
- scipy/fftpack/convolve.cp310-win_amd64.pyd +0 -0
- scipy/integrate/_dop.cp310-win_amd64.dll.a +0 -0
- scipy/integrate/_dop.cp310-win_amd64.pyd +0 -0
- scipy/integrate/_ivp/common.py +3 -3
- scipy/integrate/_ivp/ivp.py +9 -2
- scipy/integrate/_ivp/tests/test_ivp.py +19 -0
- scipy/integrate/_lsoda.cp310-win_amd64.dll.a +0 -0
- scipy/integrate/_lsoda.cp310-win_amd64.pyd +0 -0
- scipy/integrate/_odepack.cp310-win_amd64.dll.a +0 -0
- scipy/integrate/_odepack.cp310-win_amd64.pyd +0 -0
- scipy/integrate/_quadpack.cp310-win_amd64.dll.a +0 -0
- scipy/integrate/_quadpack.cp310-win_amd64.pyd +0 -0
- scipy/integrate/_tanhsinh.py +14 -12
- scipy/integrate/_test_multivariate.cp310-win_amd64.dll.a +0 -0
- scipy/integrate/_test_multivariate.cp310-win_amd64.pyd +0 -0
- scipy/integrate/_test_odeint_banded.cp310-win_amd64.dll.a +0 -0
- scipy/integrate/_test_odeint_banded.cp310-win_amd64.pyd +0 -0
- scipy/integrate/_vode.cp310-win_amd64.dll.a +0 -0
- scipy/integrate/_vode.cp310-win_amd64.pyd +0 -0
- scipy/integrate/tests/test_tanhsinh.py +10 -0
- scipy/interpolate/_bspl.cp310-win_amd64.dll.a +0 -0
- scipy/interpolate/_bspl.cp310-win_amd64.pyd +0 -0
- scipy/interpolate/_dfitpack.cp310-win_amd64.dll.a +0 -0
- scipy/interpolate/_dfitpack.cp310-win_amd64.pyd +0 -0
- scipy/interpolate/_dierckx.cp310-win_amd64.dll.a +0 -0
- scipy/interpolate/_dierckx.cp310-win_amd64.pyd +0 -0
- scipy/interpolate/_fitpack.cp310-win_amd64.dll.a +0 -0
- scipy/interpolate/_fitpack.cp310-win_amd64.pyd +0 -0
- scipy/interpolate/_interpnd.cp310-win_amd64.dll.a +0 -0
- scipy/interpolate/_interpnd.cp310-win_amd64.pyd +0 -0
- scipy/interpolate/_ppoly.cp310-win_amd64.dll.a +0 -0
- scipy/interpolate/_ppoly.cp310-win_amd64.pyd +0 -0
- scipy/interpolate/_rbfinterp_pythran.cp310-win_amd64.dll.a +0 -0
- scipy/interpolate/_rbfinterp_pythran.cp310-win_amd64.pyd +0 -0
- scipy/interpolate/_rgi_cython.cp310-win_amd64.dll.a +0 -0
- scipy/interpolate/_rgi_cython.cp310-win_amd64.pyd +0 -0
- scipy/io/_fast_matrix_market/_fmm_core.cp310-win_amd64.dll.a +0 -0
- scipy/io/_fast_matrix_market/_fmm_core.cp310-win_amd64.pyd +0 -0
- scipy/io/_test_fortran.cp310-win_amd64.dll.a +0 -0
- scipy/io/_test_fortran.cp310-win_amd64.pyd +0 -0
- scipy/io/matlab/_mio5_utils.cp310-win_amd64.dll.a +0 -0
- scipy/io/matlab/_mio5_utils.cp310-win_amd64.pyd +0 -0
- scipy/io/matlab/_mio_utils.cp310-win_amd64.dll.a +0 -0
- scipy/io/matlab/_mio_utils.cp310-win_amd64.pyd +0 -0
- scipy/io/matlab/_streams.cp310-win_amd64.dll.a +0 -0
- scipy/io/matlab/_streams.cp310-win_amd64.pyd +0 -0
- scipy/linalg/_cythonized_array_utils.cp310-win_amd64.dll.a +0 -0
- scipy/linalg/_cythonized_array_utils.cp310-win_amd64.pyd +0 -0
- scipy/linalg/_decomp_interpolative.cp310-win_amd64.dll.a +0 -0
- scipy/linalg/_decomp_interpolative.cp310-win_amd64.pyd +0 -0
- scipy/linalg/_decomp_lu_cython.cp310-win_amd64.dll.a +0 -0
- scipy/linalg/_decomp_lu_cython.cp310-win_amd64.pyd +0 -0
- scipy/linalg/_decomp_update.cp310-win_amd64.dll.a +0 -0
- scipy/linalg/_decomp_update.cp310-win_amd64.pyd +0 -0
- scipy/linalg/_fblas.cp310-win_amd64.dll.a +0 -0
- scipy/linalg/_fblas.cp310-win_amd64.pyd +0 -0
- scipy/linalg/_flapack.cp310-win_amd64.dll.a +0 -0
- scipy/linalg/_flapack.cp310-win_amd64.pyd +0 -0
- scipy/linalg/_linalg_pythran.cp310-win_amd64.dll.a +0 -0
- scipy/linalg/_linalg_pythran.cp310-win_amd64.pyd +0 -0
- scipy/linalg/_matfuncs_expm.cp310-win_amd64.dll.a +0 -0
- scipy/linalg/_matfuncs_expm.cp310-win_amd64.pyd +0 -0
- scipy/linalg/_matfuncs_sqrtm_triu.cp310-win_amd64.dll.a +0 -0
- scipy/linalg/_matfuncs_sqrtm_triu.cp310-win_amd64.pyd +0 -0
- scipy/linalg/_solve_toeplitz.cp310-win_amd64.dll.a +0 -0
- scipy/linalg/_solve_toeplitz.cp310-win_amd64.pyd +0 -0
- scipy/linalg/cython_blas.cp310-win_amd64.dll.a +0 -0
- scipy/linalg/cython_blas.cp310-win_amd64.pyd +0 -0
- scipy/linalg/cython_lapack.cp310-win_amd64.dll.a +0 -0
- scipy/linalg/cython_lapack.cp310-win_amd64.pyd +0 -0
- scipy/linalg/tests/test_interpolative.py +17 -0
- scipy/ndimage/_ctest.cp310-win_amd64.dll.a +0 -0
- scipy/ndimage/_ctest.cp310-win_amd64.pyd +0 -0
- scipy/ndimage/_cytest.cp310-win_amd64.dll.a +0 -0
- scipy/ndimage/_cytest.cp310-win_amd64.pyd +0 -0
- scipy/ndimage/_nd_image.cp310-win_amd64.dll.a +0 -0
- scipy/ndimage/_nd_image.cp310-win_amd64.pyd +0 -0
- scipy/ndimage/_ndimage_api.py +2 -1
- scipy/ndimage/_ni_label.cp310-win_amd64.dll.a +0 -0
- scipy/ndimage/_ni_label.cp310-win_amd64.pyd +0 -0
- scipy/ndimage/_rank_filter_1d.cp310-win_amd64.dll.a +0 -0
- scipy/ndimage/_rank_filter_1d.cp310-win_amd64.pyd +0 -0
- scipy/ndimage/tests/test_filters.py +14 -0
- scipy/odr/__odrpack.cp310-win_amd64.dll.a +0 -0
- scipy/odr/__odrpack.cp310-win_amd64.pyd +0 -0
- scipy/optimize/_bglu_dense.cp310-win_amd64.dll.a +0 -0
- scipy/optimize/_bglu_dense.cp310-win_amd64.pyd +0 -0
- scipy/optimize/_bracket.py +35 -8
- scipy/optimize/_cobyla.cp310-win_amd64.dll.a +0 -0
- scipy/optimize/_cobyla.cp310-win_amd64.pyd +0 -0
- scipy/optimize/_cython_nnls.cp310-win_amd64.dll.a +0 -0
- scipy/optimize/_cython_nnls.cp310-win_amd64.pyd +0 -0
- scipy/optimize/_direct.cp310-win_amd64.dll.a +0 -0
- scipy/optimize/_direct.cp310-win_amd64.pyd +0 -0
- scipy/optimize/_group_columns.cp310-win_amd64.dll.a +0 -0
- scipy/optimize/_group_columns.cp310-win_amd64.pyd +0 -0
- scipy/optimize/_highspy/_core.cp310-win_amd64.dll.a +0 -0
- scipy/optimize/_highspy/_core.cp310-win_amd64.pyd +0 -0
- scipy/optimize/_highspy/_highs_options.cp310-win_amd64.dll.a +0 -0
- scipy/optimize/_highspy/_highs_options.cp310-win_amd64.pyd +0 -0
- scipy/optimize/_highspy/_highs_wrapper.py +6 -4
- scipy/optimize/_lbfgsb.cp310-win_amd64.dll.a +0 -0
- scipy/optimize/_lbfgsb.cp310-win_amd64.pyd +0 -0
- scipy/optimize/_linprog_highs.py +9 -9
- scipy/optimize/_linprog_util.py +4 -3
- scipy/optimize/_lsap.cp310-win_amd64.dll.a +0 -0
- scipy/optimize/_lsap.cp310-win_amd64.pyd +0 -0
- scipy/optimize/_lsq/givens_elimination.cp310-win_amd64.dll.a +0 -0
- scipy/optimize/_lsq/givens_elimination.cp310-win_amd64.pyd +0 -0
- scipy/optimize/_minpack.cp310-win_amd64.dll.a +0 -0
- scipy/optimize/_minpack.cp310-win_amd64.pyd +0 -0
- scipy/optimize/_moduleTNC.cp310-win_amd64.dll.a +0 -0
- scipy/optimize/_moduleTNC.cp310-win_amd64.pyd +0 -0
- scipy/optimize/_pava_pybind.cp310-win_amd64.dll.a +0 -0
- scipy/optimize/_pava_pybind.cp310-win_amd64.pyd +0 -0
- scipy/optimize/_slsqp.cp310-win_amd64.dll.a +0 -0
- scipy/optimize/_slsqp.cp310-win_amd64.pyd +0 -0
- scipy/optimize/_trlib/_trlib.cp310-win_amd64.dll.a +0 -0
- scipy/optimize/_trlib/_trlib.cp310-win_amd64.pyd +0 -0
- scipy/optimize/_zeros.cp310-win_amd64.dll.a +0 -0
- scipy/optimize/_zeros.cp310-win_amd64.pyd +0 -0
- scipy/optimize/cython_optimize/_zeros.cp310-win_amd64.dll.a +0 -0
- scipy/optimize/cython_optimize/_zeros.cp310-win_amd64.pyd +0 -0
- scipy/optimize/tests/test_bracket.py +35 -0
- scipy/signal/_max_len_seq_inner.cp310-win_amd64.dll.a +0 -0
- scipy/signal/_max_len_seq_inner.cp310-win_amd64.pyd +0 -0
- scipy/signal/_peak_finding_utils.cp310-win_amd64.dll.a +0 -0
- scipy/signal/_peak_finding_utils.cp310-win_amd64.pyd +0 -0
- scipy/signal/_short_time_fft.py +34 -6
- scipy/signal/_signaltools.py +4 -1
- scipy/signal/_sigtools.cp310-win_amd64.dll.a +0 -0
- scipy/signal/_sigtools.cp310-win_amd64.pyd +0 -0
- scipy/signal/_sosfilt.cp310-win_amd64.dll.a +0 -0
- scipy/signal/_sosfilt.cp310-win_amd64.pyd +0 -0
- scipy/signal/_spline.cp310-win_amd64.dll.a +0 -0
- scipy/signal/_spline.cp310-win_amd64.pyd +0 -0
- scipy/signal/_upfirdn_apply.cp310-win_amd64.dll.a +0 -0
- scipy/signal/_upfirdn_apply.cp310-win_amd64.pyd +0 -0
- scipy/signal/tests/_scipy_spectral_test_shim.py +3 -11
- scipy/signal/tests/test_short_time_fft.py +10 -2
- scipy/signal/tests/test_signaltools.py +5 -0
- scipy/sparse/_base.py +2 -15
- scipy/sparse/_compressed.py +0 -3
- scipy/sparse/_csparsetools.cp310-win_amd64.dll.a +0 -0
- scipy/sparse/_csparsetools.cp310-win_amd64.pyd +0 -0
- scipy/sparse/_dia.py +0 -3
- scipy/sparse/_sparsetools.cp310-win_amd64.dll.a +0 -0
- scipy/sparse/_sparsetools.cp310-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_flow.cp310-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_flow.cp310-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_matching.cp310-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_matching.cp310-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cp310-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cp310-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_reordering.cp310-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_reordering.cp310-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_shortest_path.cp310-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_shortest_path.cp310-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_tools.cp310-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_tools.cp310-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_traversal.cp310-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_traversal.cp310-win_amd64.pyd +0 -0
- scipy/sparse/linalg/_dsolve/_superlu.cp310-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_dsolve/_superlu.cp310-win_amd64.pyd +0 -0
- scipy/sparse/linalg/_eigen/arpack/_arpack.cp310-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_eigen/arpack/_arpack.cp310-win_amd64.pyd +0 -0
- scipy/sparse/linalg/_eigen/arpack/arpack.py +5 -3
- scipy/sparse/linalg/_expm_multiply.py +8 -3
- scipy/sparse/linalg/_interface.py +12 -8
- scipy/sparse/linalg/_isolve/_gcrotmk.py +2 -1
- scipy/sparse/linalg/_propack/_cpropack.cp310-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_propack/_cpropack.cp310-win_amd64.pyd +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cp310-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cp310-win_amd64.pyd +0 -0
- scipy/sparse/linalg/_propack/_spropack.cp310-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_propack/_spropack.cp310-win_amd64.pyd +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cp310-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cp310-win_amd64.pyd +0 -0
- scipy/sparse/linalg/tests/test_expm_multiply.py +10 -0
- scipy/sparse/linalg/tests/test_interface.py +35 -0
- scipy/sparse/linalg/tests/test_pydata_sparse.py +4 -0
- scipy/sparse/tests/test_base.py +12 -0
- scipy/sparse/tests/test_common1d.py +11 -6
- scipy/spatial/_ckdtree.cp310-win_amd64.dll.a +0 -0
- scipy/spatial/_ckdtree.cp310-win_amd64.pyd +0 -0
- scipy/spatial/_distance_pybind.cp310-win_amd64.dll.a +0 -0
- scipy/spatial/_distance_pybind.cp310-win_amd64.pyd +0 -0
- scipy/spatial/_distance_wrap.cp310-win_amd64.dll.a +0 -0
- scipy/spatial/_distance_wrap.cp310-win_amd64.pyd +0 -0
- scipy/spatial/_hausdorff.cp310-win_amd64.dll.a +0 -0
- scipy/spatial/_hausdorff.cp310-win_amd64.pyd +0 -0
- scipy/spatial/_qhull.cp310-win_amd64.dll.a +0 -0
- scipy/spatial/_qhull.cp310-win_amd64.pyd +0 -0
- scipy/spatial/_voronoi.cp310-win_amd64.dll.a +0 -0
- scipy/spatial/_voronoi.cp310-win_amd64.pyd +0 -0
- scipy/spatial/tests/test_qhull.py +99 -0
- scipy/spatial/transform/_rotation.cp310-win_amd64.dll.a +0 -0
- scipy/spatial/transform/_rotation.cp310-win_amd64.pyd +0 -0
- scipy/spatial/transform/tests/test_rotation.py +181 -10
- scipy/special/_comb.cp310-win_amd64.dll.a +0 -0
- scipy/special/_comb.cp310-win_amd64.pyd +0 -0
- scipy/special/_ellip_harm_2.cp310-win_amd64.dll.a +0 -0
- scipy/special/_ellip_harm_2.cp310-win_amd64.pyd +0 -0
- scipy/special/_gufuncs.cp310-win_amd64.dll.a +0 -0
- scipy/special/_gufuncs.cp310-win_amd64.pyd +0 -0
- scipy/special/_logsumexp.py +21 -16
- scipy/special/_specfun.cp310-win_amd64.dll.a +0 -0
- scipy/special/_specfun.cp310-win_amd64.pyd +0 -0
- scipy/special/_special_ufuncs.cp310-win_amd64.dll.a +0 -0
- scipy/special/_special_ufuncs.cp310-win_amd64.pyd +0 -0
- scipy/special/_test_internal.cp310-win_amd64.dll.a +0 -0
- scipy/special/_test_internal.cp310-win_amd64.pyd +0 -0
- scipy/special/_ufuncs.cp310-win_amd64.dll.a +0 -0
- scipy/special/_ufuncs.cp310-win_amd64.pyd +0 -0
- scipy/special/_ufuncs_cxx.cp310-win_amd64.dll.a +0 -0
- scipy/special/_ufuncs_cxx.cp310-win_amd64.pyd +0 -0
- scipy/special/cython_special.cp310-win_amd64.dll.a +0 -0
- scipy/special/cython_special.cp310-win_amd64.pyd +0 -0
- scipy/special/libsf_error_state.dll +0 -0
- scipy/special/libsf_error_state.dll.a +0 -0
- scipy/special/tests/test_hyp2f1.py +21 -0
- scipy/special/tests/test_logsumexp.py +14 -0
- scipy/special/xsf/hyp2f1.h +3 -3
- scipy/stats/_ansari_swilk_statistics.cp310-win_amd64.dll.a +0 -0
- scipy/stats/_ansari_swilk_statistics.cp310-win_amd64.pyd +0 -0
- scipy/stats/_biasedurn.cp310-win_amd64.dll.a +0 -0
- scipy/stats/_biasedurn.cp310-win_amd64.pyd +0 -0
- scipy/stats/_continuous_distns.py +25 -15
- scipy/stats/_levy_stable/levyst.cp310-win_amd64.dll.a +0 -0
- scipy/stats/_levy_stable/levyst.cp310-win_amd64.pyd +0 -0
- scipy/stats/_mvn.cp310-win_amd64.dll.a +0 -0
- scipy/stats/_mvn.cp310-win_amd64.pyd +0 -0
- scipy/stats/_qmc_cy.cp310-win_amd64.dll.a +0 -0
- scipy/stats/_qmc_cy.cp310-win_amd64.pyd +0 -0
- scipy/stats/_rcont/rcont.cp310-win_amd64.dll.a +0 -0
- scipy/stats/_rcont/rcont.cp310-win_amd64.pyd +0 -0
- scipy/stats/_sobol.cp310-win_amd64.dll.a +0 -0
- scipy/stats/_sobol.cp310-win_amd64.pyd +0 -0
- scipy/stats/_stats.cp310-win_amd64.dll.a +0 -0
- scipy/stats/_stats.cp310-win_amd64.pyd +0 -0
- scipy/stats/_stats_pythran.cp310-win_amd64.dll.a +0 -0
- scipy/stats/_stats_pythran.cp310-win_amd64.pyd +0 -0
- scipy/stats/_unuran/unuran_wrapper.cp310-win_amd64.dll.a +0 -0
- scipy/stats/_unuran/unuran_wrapper.cp310-win_amd64.pyd +0 -0
- scipy/stats/tests/test_distributions.py +22 -0
- scipy/version.py +2 -2
- scipy-1.15.3.dist-info/DELVEWHEEL +2 -0
- {scipy-1.15.2.dist-info → scipy-1.15.3.dist-info}/METADATA +2 -2
- {scipy-1.15.2.dist-info → scipy-1.15.3.dist-info}/RECORD +279 -279
- scipy-1.15.2.dist-info/DELVEWHEEL +0 -2
- /scipy-1.15.2-cp310-cp310-win_amd64.whl → /scipy-1.15.3-cp310-cp310-win_amd64.whl +0 -0
- {scipy-1.15.2.dist-info → scipy-1.15.3.dist-info}/LICENSE.txt +0 -0
- {scipy-1.15.2.dist-info → scipy-1.15.3.dist-info}/WHEEL +0 -0
scipy/special/_logsumexp.py
CHANGED
@@ -5,9 +5,9 @@ from scipy._lib._array_api import (
|
|
5
5
|
array_namespace,
|
6
6
|
xp_size,
|
7
7
|
xp_broadcast_promote,
|
8
|
-
xp_real,
|
9
8
|
xp_copy,
|
10
9
|
xp_float_to_complex,
|
10
|
+
is_complex,
|
11
11
|
)
|
12
12
|
from scipy._lib import array_api_extra as xpx
|
13
13
|
|
@@ -219,25 +219,30 @@ def _logsumexp(a, b, axis, return_sign, xp):
|
|
219
219
|
s = xp.where(s == 0, s, s/m)
|
220
220
|
|
221
221
|
# Separate sign/magnitude information
|
222
|
-
|
223
|
-
if
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
222
|
+
# Originally, this was only performed if `return_sign=True`.
|
223
|
+
# However, this is also needed if any elements of `m < 0` or `s < -1`.
|
224
|
+
# An improvement would be to perform the calculations only on these entries.
|
225
|
+
|
226
|
+
# Use the numpy>=2.0 convention for sign.
|
227
|
+
# When all array libraries agree, this can become sng = xp.sign(s).
|
228
|
+
sgn = _sign(s + 1, xp=xp) * _sign(m, xp=xp)
|
229
|
+
|
230
|
+
if xp.isdtype(s.dtype, "real floating"):
|
231
|
+
# The log functions need positive arguments
|
232
|
+
s = xp.where(s < -1, -s - 2, s)
|
233
|
+
m = xp.abs(m)
|
234
|
+
else:
|
235
|
+
# `a_max` can have a sign component for complex input
|
236
|
+
sgn = sgn * xp.exp(xp.imag(a_max) * xp.asarray(1.0j, dtype=a_max.dtype))
|
236
237
|
|
237
238
|
# Take log and undo shift
|
238
239
|
out = xp.log1p(s) + xp.log(m) + a_max
|
239
240
|
|
240
|
-
|
241
|
+
if return_sign:
|
242
|
+
if is_complex(out, xp):
|
243
|
+
out = xp.real(out)
|
244
|
+
elif xp.isdtype(out.dtype, 'real floating'):
|
245
|
+
out[sgn < 0] = xp.nan
|
241
246
|
|
242
247
|
return out, sgn
|
243
248
|
|
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
|
@@ -2543,3 +2543,24 @@ class TestHyp2f1:
|
|
2543
2543
|
if mark.name == 'parametrize'
|
2544
2544
|
for case in mark.args[1]
|
2545
2545
|
]
|
2546
|
+
|
2547
|
+
class TestHyp2f1ExtremeInputs:
|
2548
|
+
|
2549
|
+
@pytest.mark.parametrize("a", [1.0, 2.0, 3.0, -np.inf, np.inf])
|
2550
|
+
@pytest.mark.parametrize("b", [3.0, 4.0, 5.0, -np.inf, np.inf])
|
2551
|
+
@pytest.mark.parametrize("c", [3.0, 5.0, 6.0, 7.0])
|
2552
|
+
@pytest.mark.parametrize("z", [4.0 + 1.0j])
|
2553
|
+
def test_inf_a_b(self, a, b, c, z):
|
2554
|
+
if np.any(np.isinf(np.asarray([a, b]))):
|
2555
|
+
assert(np.isnan(hyp2f1(a, b, c, z)))
|
2556
|
+
|
2557
|
+
def test_large_a_b(self):
|
2558
|
+
assert(np.isnan(hyp2f1(10**7, 1.0, 3.0, 4.0 + 1.0j)))
|
2559
|
+
assert(np.isnan(hyp2f1(-10**7, 1.0, 3.0, 4.0 + 1.0j)))
|
2560
|
+
|
2561
|
+
assert(np.isnan(hyp2f1(1.0, 10**7, 3.0, 4.0 + 1.0j)))
|
2562
|
+
assert(np.isnan(hyp2f1(1.0, -10**7, 3.0, 4.0 + 1.0j)))
|
2563
|
+
|
2564
|
+
# Already correct in main but testing for surety
|
2565
|
+
assert(np.isnan(hyp2f1(np.inf, 1.0, 3.0, 4.0)))
|
2566
|
+
assert(np.isnan(hyp2f1(1.0, np.inf, 3.0, 4.0)))
|
@@ -257,6 +257,20 @@ class TestLogSumExp:
|
|
257
257
|
xp_assert_close(xp.real(res), xp.real(ref))
|
258
258
|
xp_assert_close(xp.imag(res), xp.imag(ref), atol=0, rtol=1e-15)
|
259
259
|
|
260
|
+
def test_gh22903(self, xp):
|
261
|
+
# gh-22903 reported that `logsumexp` produced NaN where the weight associated
|
262
|
+
# with the max magnitude element was negative and `return_sign=False`, even if
|
263
|
+
# the net result should be the log of a positive number.
|
264
|
+
|
265
|
+
# result is log of positive number
|
266
|
+
a = xp.asarray([3.06409428, 0.37251854, 3.87471931])
|
267
|
+
b = xp.asarray([1.88190708, 2.84174795, -0.85016884])
|
268
|
+
xp_assert_close(logsumexp(a, b=b), logsumexp(a, b=b, return_sign=True)[0])
|
269
|
+
|
270
|
+
# result is log of negative number
|
271
|
+
b = xp.asarray([1.88190708, 2.84174795, -3.85016884])
|
272
|
+
xp_assert_close(logsumexp(a, b=b), xp.asarray(xp.nan))
|
273
|
+
|
260
274
|
|
261
275
|
class TestSoftmax:
|
262
276
|
def test_softmax_fixtures(self):
|
scipy/special/xsf/hyp2f1.h
CHANGED
@@ -553,7 +553,7 @@ XSF_HOST_DEVICE inline std::complex<double> hyp2f1(double a, double b, double c,
|
|
553
553
|
* the series at a or b of smaller magnitude. This is to ensure proper
|
554
554
|
* handling of situations like a < c < b <= 0, a, b, c all non-positive
|
555
555
|
* integers, where terminating at a would lead to a term of the form 0 / 0. */
|
556
|
-
|
556
|
+
double max_degree;
|
557
557
|
if (a_neg_int || b_neg_int) {
|
558
558
|
if (a_neg_int && b_neg_int) {
|
559
559
|
max_degree = a > b ? std::abs(a) : std::abs(b);
|
@@ -562,7 +562,7 @@ XSF_HOST_DEVICE inline std::complex<double> hyp2f1(double a, double b, double c,
|
|
562
562
|
} else {
|
563
563
|
max_degree = std::abs(b);
|
564
564
|
}
|
565
|
-
if (max_degree <= UINT64_MAX) {
|
565
|
+
if (max_degree <= (double) UINT64_MAX) {
|
566
566
|
auto series_generator = detail::HypergeometricSeriesGenerator(a, b, c, z);
|
567
567
|
return detail::series_eval_fixed_length(series_generator, std::complex<double>{0.0, 0.0}, max_degree + 1);
|
568
568
|
} else {
|
@@ -583,7 +583,7 @@ XSF_HOST_DEVICE inline std::complex<double> hyp2f1(double a, double b, double c,
|
|
583
583
|
* (DLMF 15.8.1) */
|
584
584
|
if (c_minus_a_neg_int || c_minus_b_neg_int) {
|
585
585
|
max_degree = c_minus_b_neg_int ? std::abs(c - b) : std::abs(c - a);
|
586
|
-
if (max_degree <= UINT64_MAX) {
|
586
|
+
if (max_degree <= (double) UINT64_MAX) {
|
587
587
|
result = std::pow(1.0 - z, c - a - b);
|
588
588
|
auto series_generator = detail::HypergeometricSeriesGenerator(c - a, c - b, c, z);
|
589
589
|
result *=
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -3432,29 +3432,39 @@ class genextreme_gen(rv_continuous):
|
|
3432
3432
|
g3 = g(3)
|
3433
3433
|
g4 = g(4)
|
3434
3434
|
g2mg12 = np.where(abs(c) < 1e-7, (c*np.pi)**2.0/6.0, g2-g1**2.0)
|
3435
|
-
|
3436
|
-
|
3435
|
+
def gam2k_f(c):
|
3436
|
+
return sc.expm1(sc.gammaln(2.0*c+1.0)-2*sc.gammaln(c + 1.0))/c**2.0
|
3437
|
+
gam2k = _lazywhere(abs(c) >= 1e-7, (c,), f=gam2k_f, fillvalue=np.pi**2.0/6.0)
|
3437
3438
|
eps = 1e-14
|
3438
|
-
|
3439
|
+
def gamk_f(c):
|
3440
|
+
return sc.expm1(sc.gammaln(c + 1))/c
|
3441
|
+
gamk = _lazywhere(abs(c) >= eps, (c,), f=gamk_f, fillvalue=-_EULER)
|
3439
3442
|
|
3443
|
+
# mean
|
3440
3444
|
m = np.where(c < -1.0, np.nan, -gamk)
|
3445
|
+
|
3446
|
+
# variance
|
3441
3447
|
v = np.where(c < -0.5, np.nan, g1**2.0*gam2k)
|
3442
3448
|
|
3443
3449
|
# skewness
|
3444
|
-
|
3445
|
-
|
3446
|
-
|
3447
|
-
|
3448
|
-
|
3449
|
-
|
3450
|
+
def sk1_eval(c, *args):
|
3451
|
+
def sk1_eval_f(c, g1, g2, g3, g2mg12):
|
3452
|
+
return np.sign(c)*(-g3 + (g2 + 2*g2mg12)*g1)/g2mg12**1.5
|
3453
|
+
return _lazywhere(c >= -1./3, (c,)+args, f=sk1_eval_f, fillvalue=np.nan)
|
3454
|
+
|
3455
|
+
sk_fill = 12*np.sqrt(6)*_ZETA3/np.pi**3
|
3456
|
+
args = (g1, g2, g3, g2mg12)
|
3457
|
+
sk = _lazywhere(abs(c) > eps**0.29, (c,)+args, f=sk1_eval, fillvalue=sk_fill)
|
3450
3458
|
|
3451
3459
|
# kurtosis
|
3452
|
-
|
3453
|
-
|
3454
|
-
|
3455
|
-
|
3456
|
-
|
3457
|
-
|
3460
|
+
def ku1_eval(c, *args):
|
3461
|
+
def ku1_eval_f(g1, g2, g3, g4, g2mg12):
|
3462
|
+
return (g4 + (-4*g3 + 3*(g2 + g2mg12)*g1)*g1)/g2mg12**2 - 3
|
3463
|
+
return _lazywhere(c >= -1./4, args, ku1_eval_f, fillvalue=np.nan)
|
3464
|
+
|
3465
|
+
args = (g1, g2, g3, g4, g2mg12)
|
3466
|
+
ku = _lazywhere(abs(c) > eps**0.23, (c,)+args, f=ku1_eval, fillvalue=12.0/5.0)
|
3467
|
+
|
3458
3468
|
return m, v, sk, ku
|
3459
3469
|
|
3460
3470
|
def _fitstart(self, data):
|
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
|
@@ -9251,6 +9251,28 @@ def test_genextreme_give_no_warnings():
|
|
9251
9251
|
assert_equal(number_of_warnings_thrown, 0)
|
9252
9252
|
|
9253
9253
|
|
9254
|
+
def test_moments_gh22400():
|
9255
|
+
# Regression test for gh-22400
|
9256
|
+
# Check for correct results at c=0 with no warnings. While we're at it,
|
9257
|
+
# check that NaN and sufficiently negative input produce NaNs, and output
|
9258
|
+
# with `c=1` also agrees with reference values.
|
9259
|
+
res = np.asarray(stats.genextreme.stats([0.0, np.nan, 1, -1.5], moments='mvsk'))
|
9260
|
+
|
9261
|
+
# Reference values for c=0 (Wikipedia)
|
9262
|
+
mean = np.euler_gamma
|
9263
|
+
var = np.pi**2 / 6
|
9264
|
+
skew = 12 * np.sqrt(6) * special.zeta(3) / np.pi**3
|
9265
|
+
kurt = 12 / 5
|
9266
|
+
ref_0 = [mean, var, skew, kurt]
|
9267
|
+
ref_1 = ref_3 = [np.nan]*4
|
9268
|
+
ref_2 = [0, 1, -2, 6] # Wolfram Alpha, MaxStableDistribution[0, 1, -1]
|
9269
|
+
|
9270
|
+
assert_allclose(res[:, 0], ref_0, rtol=1e-14)
|
9271
|
+
assert_equal(res[:, 1], ref_1)
|
9272
|
+
assert_allclose(res[:, 2], ref_2, rtol=1e-14)
|
9273
|
+
assert_equal(res[:, 3], ref_3)
|
9274
|
+
|
9275
|
+
|
9254
9276
|
def test_genextreme_entropy():
|
9255
9277
|
# regression test for gh-5181
|
9256
9278
|
euler_gamma = 0.5772156649015329
|
scipy/version.py
CHANGED
@@ -2,10 +2,10 @@
|
|
2
2
|
"""
|
3
3
|
Module to expose more detailed version info for the installed `scipy`
|
4
4
|
"""
|
5
|
-
version = "1.15.
|
5
|
+
version = "1.15.3"
|
6
6
|
full_version = version
|
7
7
|
short_version = version.split('.dev')[0]
|
8
|
-
git_revision = "
|
8
|
+
git_revision = "e29dcb65a2040f04819b426a04b60d44a8f69c04"
|
9
9
|
release = 'dev' not in version and '+' not in version
|
10
10
|
|
11
11
|
if not release:
|
@@ -0,0 +1,2 @@
|
|
1
|
+
Version: 1.10.1
|
2
|
+
Arguments: ['C:\\Users\\runneradmin\\AppData\\Local\\Temp\\cibw-run-6w_ufqtf\\cp310-win_amd64\\build\\venv\\Scripts\\delvewheel', 'repair', '--add-path', 'C:/Users/runneradmin/AppData/Local/Temp/cibw-run-6w_ufqtf/cp310-win_amd64/build/venv/Lib/site-packages/scipy_openblas32/lib', '--no-dll', 'libsf_error_state.dll', '-w', 'C:\\Users\\runneradmin\\AppData\\Local\\Temp\\cibw-run-6w_ufqtf\\cp310-win_amd64\\repaired_wheel', 'C:\\Users\\runneradmin\\AppData\\Local\\Temp\\cibw-run-6w_ufqtf\\cp310-win_amd64\\built_wheel\\scipy-1.15.3-cp310-cp310-win_amd64.whl']
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: scipy
|
3
|
-
Version: 1.15.
|
3
|
+
Version: 1.15.3
|
4
4
|
Summary: Fundamental algorithms for scientific computing in Python
|
5
5
|
Maintainer-Email: SciPy Developers <scipy-dev@python.org>
|
6
6
|
License: Copyright (c) 2001-2002 Enthought, Inc. 2003-2024, SciPy Developers.
|
@@ -968,7 +968,7 @@ Requires-Dist: numpydoc; extra == "doc"
|
|
968
968
|
Requires-Dist: jupytext; extra == "doc"
|
969
969
|
Requires-Dist: myst-nb; extra == "doc"
|
970
970
|
Requires-Dist: pooch; extra == "doc"
|
971
|
-
Requires-Dist: jupyterlite-sphinx>=0.
|
971
|
+
Requires-Dist: jupyterlite-sphinx>=0.19.1; extra == "doc"
|
972
972
|
Requires-Dist: jupyterlite-pyodide-kernel; extra == "doc"
|
973
973
|
Provides-Extra: dev
|
974
974
|
Requires-Dist: mypy==1.10.0; extra == "dev"
|