scipy 1.15.2__cp312-cp312-win_amd64.whl → 1.15.3__cp312-cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/_lib/_ccallback_c.cp312-win_amd64.pyd +0 -0
- scipy/_lib/_fpumode.cp312-win_amd64.dll.a +0 -0
- scipy/_lib/_fpumode.cp312-win_amd64.pyd +0 -0
- scipy/_lib/_test_ccallback.cp312-win_amd64.dll.a +0 -0
- scipy/_lib/_test_ccallback.cp312-win_amd64.pyd +0 -0
- scipy/_lib/_test_deprecation_call.cp312-win_amd64.dll.a +0 -0
- scipy/_lib/_test_deprecation_call.cp312-win_amd64.pyd +0 -0
- scipy/_lib/_test_deprecation_def.cp312-win_amd64.dll.a +0 -0
- scipy/_lib/_test_deprecation_def.cp312-win_amd64.pyd +0 -0
- scipy/_lib/_uarray/_uarray.cp312-win_amd64.dll.a +0 -0
- scipy/_lib/_uarray/_uarray.cp312-win_amd64.pyd +0 -0
- scipy/_lib/messagestream.cp312-win_amd64.dll.a +0 -0
- scipy/_lib/messagestream.cp312-win_amd64.pyd +0 -0
- scipy/_lib/tests/test_array_api.py +5 -1
- scipy/cluster/_hierarchy.cp312-win_amd64.dll.a +0 -0
- scipy/cluster/_hierarchy.cp312-win_amd64.pyd +0 -0
- scipy/cluster/_optimal_leaf_ordering.cp312-win_amd64.dll.a +0 -0
- scipy/cluster/_optimal_leaf_ordering.cp312-win_amd64.pyd +0 -0
- scipy/cluster/_vq.cp312-win_amd64.dll.a +0 -0
- scipy/cluster/_vq.cp312-win_amd64.pyd +0 -0
- scipy/fft/_pocketfft/pypocketfft.cp312-win_amd64.dll.a +0 -0
- scipy/fft/_pocketfft/pypocketfft.cp312-win_amd64.pyd +0 -0
- scipy/fftpack/convolve.cp312-win_amd64.dll.a +0 -0
- scipy/fftpack/convolve.cp312-win_amd64.pyd +0 -0
- scipy/integrate/_dop.cp312-win_amd64.dll.a +0 -0
- scipy/integrate/_dop.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/integrate/_lsoda.cp312-win_amd64.pyd +0 -0
- scipy/integrate/_odepack.cp312-win_amd64.dll.a +0 -0
- scipy/integrate/_odepack.cp312-win_amd64.pyd +0 -0
- scipy/integrate/_quadpack.cp312-win_amd64.dll.a +0 -0
- scipy/integrate/_quadpack.cp312-win_amd64.pyd +0 -0
- scipy/integrate/_tanhsinh.py +14 -12
- scipy/integrate/_test_multivariate.cp312-win_amd64.dll.a +0 -0
- scipy/integrate/_test_multivariate.cp312-win_amd64.pyd +0 -0
- scipy/integrate/_test_odeint_banded.cp312-win_amd64.dll.a +0 -0
- scipy/integrate/_test_odeint_banded.cp312-win_amd64.pyd +0 -0
- scipy/integrate/_vode.cp312-win_amd64.dll.a +0 -0
- scipy/integrate/_vode.cp312-win_amd64.pyd +0 -0
- scipy/integrate/tests/test_tanhsinh.py +10 -0
- scipy/interpolate/_bspl.cp312-win_amd64.dll.a +0 -0
- scipy/interpolate/_bspl.cp312-win_amd64.pyd +0 -0
- scipy/interpolate/_dfitpack.cp312-win_amd64.dll.a +0 -0
- scipy/interpolate/_dfitpack.cp312-win_amd64.pyd +0 -0
- scipy/interpolate/_dierckx.cp312-win_amd64.dll.a +0 -0
- scipy/interpolate/_dierckx.cp312-win_amd64.pyd +0 -0
- scipy/interpolate/_fitpack.cp312-win_amd64.dll.a +0 -0
- scipy/interpolate/_fitpack.cp312-win_amd64.pyd +0 -0
- scipy/interpolate/_interpnd.cp312-win_amd64.dll.a +0 -0
- scipy/interpolate/_interpnd.cp312-win_amd64.pyd +0 -0
- scipy/interpolate/_ppoly.cp312-win_amd64.dll.a +0 -0
- scipy/interpolate/_ppoly.cp312-win_amd64.pyd +0 -0
- scipy/interpolate/_rbfinterp_pythran.cp312-win_amd64.dll.a +0 -0
- scipy/interpolate/_rbfinterp_pythran.cp312-win_amd64.pyd +0 -0
- scipy/interpolate/_rgi_cython.cp312-win_amd64.dll.a +0 -0
- scipy/interpolate/_rgi_cython.cp312-win_amd64.pyd +0 -0
- scipy/io/_fast_matrix_market/_fmm_core.cp312-win_amd64.dll.a +0 -0
- scipy/io/_fast_matrix_market/_fmm_core.cp312-win_amd64.pyd +0 -0
- scipy/io/_test_fortran.cp312-win_amd64.dll.a +0 -0
- scipy/io/_test_fortran.cp312-win_amd64.pyd +0 -0
- scipy/io/matlab/_mio5_utils.cp312-win_amd64.dll.a +0 -0
- scipy/io/matlab/_mio5_utils.cp312-win_amd64.pyd +0 -0
- scipy/io/matlab/_mio_utils.cp312-win_amd64.dll.a +0 -0
- scipy/io/matlab/_mio_utils.cp312-win_amd64.pyd +0 -0
- scipy/io/matlab/_streams.cp312-win_amd64.dll.a +0 -0
- scipy/io/matlab/_streams.cp312-win_amd64.pyd +0 -0
- scipy/linalg/_cythonized_array_utils.cp312-win_amd64.dll.a +0 -0
- scipy/linalg/_cythonized_array_utils.cp312-win_amd64.pyd +0 -0
- scipy/linalg/_decomp_interpolative.cp312-win_amd64.dll.a +0 -0
- scipy/linalg/_decomp_interpolative.cp312-win_amd64.pyd +0 -0
- scipy/linalg/_decomp_lu_cython.cp312-win_amd64.dll.a +0 -0
- scipy/linalg/_decomp_lu_cython.cp312-win_amd64.pyd +0 -0
- scipy/linalg/_decomp_update.cp312-win_amd64.dll.a +0 -0
- scipy/linalg/_decomp_update.cp312-win_amd64.pyd +0 -0
- scipy/linalg/_fblas.cp312-win_amd64.dll.a +0 -0
- scipy/linalg/_fblas.cp312-win_amd64.pyd +0 -0
- scipy/linalg/_flapack.cp312-win_amd64.dll.a +0 -0
- scipy/linalg/_flapack.cp312-win_amd64.pyd +0 -0
- scipy/linalg/_linalg_pythran.cp312-win_amd64.dll.a +0 -0
- scipy/linalg/_linalg_pythran.cp312-win_amd64.pyd +0 -0
- scipy/linalg/_matfuncs_expm.cp312-win_amd64.dll.a +0 -0
- scipy/linalg/_matfuncs_expm.cp312-win_amd64.pyd +0 -0
- scipy/linalg/_matfuncs_sqrtm_triu.cp312-win_amd64.dll.a +0 -0
- scipy/linalg/_matfuncs_sqrtm_triu.cp312-win_amd64.pyd +0 -0
- scipy/linalg/_solve_toeplitz.cp312-win_amd64.dll.a +0 -0
- scipy/linalg/_solve_toeplitz.cp312-win_amd64.pyd +0 -0
- scipy/linalg/cython_blas.cp312-win_amd64.dll.a +0 -0
- scipy/linalg/cython_blas.cp312-win_amd64.pyd +0 -0
- scipy/linalg/cython_lapack.cp312-win_amd64.dll.a +0 -0
- scipy/linalg/cython_lapack.cp312-win_amd64.pyd +0 -0
- scipy/linalg/tests/test_interpolative.py +17 -0
- scipy/ndimage/_ctest.cp312-win_amd64.dll.a +0 -0
- scipy/ndimage/_ctest.cp312-win_amd64.pyd +0 -0
- scipy/ndimage/_cytest.cp312-win_amd64.dll.a +0 -0
- scipy/ndimage/_cytest.cp312-win_amd64.pyd +0 -0
- scipy/ndimage/_nd_image.cp312-win_amd64.dll.a +0 -0
- scipy/ndimage/_nd_image.cp312-win_amd64.pyd +0 -0
- scipy/ndimage/_ndimage_api.py +2 -1
- scipy/ndimage/_ni_label.cp312-win_amd64.dll.a +0 -0
- scipy/ndimage/_ni_label.cp312-win_amd64.pyd +0 -0
- scipy/ndimage/_rank_filter_1d.cp312-win_amd64.dll.a +0 -0
- scipy/ndimage/_rank_filter_1d.cp312-win_amd64.pyd +0 -0
- scipy/ndimage/tests/test_filters.py +14 -0
- scipy/odr/__odrpack.cp312-win_amd64.dll.a +0 -0
- scipy/odr/__odrpack.cp312-win_amd64.pyd +0 -0
- scipy/optimize/_bglu_dense.cp312-win_amd64.dll.a +0 -0
- scipy/optimize/_bglu_dense.cp312-win_amd64.pyd +0 -0
- scipy/optimize/_bracket.py +35 -8
- scipy/optimize/_cobyla.cp312-win_amd64.dll.a +0 -0
- scipy/optimize/_cobyla.cp312-win_amd64.pyd +0 -0
- scipy/optimize/_cython_nnls.cp312-win_amd64.dll.a +0 -0
- scipy/optimize/_cython_nnls.cp312-win_amd64.pyd +0 -0
- scipy/optimize/_direct.cp312-win_amd64.dll.a +0 -0
- scipy/optimize/_direct.cp312-win_amd64.pyd +0 -0
- scipy/optimize/_group_columns.cp312-win_amd64.dll.a +0 -0
- scipy/optimize/_group_columns.cp312-win_amd64.pyd +0 -0
- scipy/optimize/_highspy/_core.cp312-win_amd64.dll.a +0 -0
- scipy/optimize/_highspy/_core.cp312-win_amd64.pyd +0 -0
- scipy/optimize/_highspy/_highs_options.cp312-win_amd64.dll.a +0 -0
- scipy/optimize/_highspy/_highs_options.cp312-win_amd64.pyd +0 -0
- scipy/optimize/_highspy/_highs_wrapper.py +6 -4
- scipy/optimize/_lbfgsb.cp312-win_amd64.dll.a +0 -0
- scipy/optimize/_lbfgsb.cp312-win_amd64.pyd +0 -0
- scipy/optimize/_linprog_highs.py +9 -9
- scipy/optimize/_linprog_util.py +4 -3
- scipy/optimize/_lsap.cp312-win_amd64.dll.a +0 -0
- scipy/optimize/_lsap.cp312-win_amd64.pyd +0 -0
- scipy/optimize/_lsq/givens_elimination.cp312-win_amd64.dll.a +0 -0
- scipy/optimize/_lsq/givens_elimination.cp312-win_amd64.pyd +0 -0
- scipy/optimize/_minpack.cp312-win_amd64.dll.a +0 -0
- scipy/optimize/_minpack.cp312-win_amd64.pyd +0 -0
- scipy/optimize/_moduleTNC.cp312-win_amd64.dll.a +0 -0
- scipy/optimize/_moduleTNC.cp312-win_amd64.pyd +0 -0
- scipy/optimize/_pava_pybind.cp312-win_amd64.dll.a +0 -0
- scipy/optimize/_pava_pybind.cp312-win_amd64.pyd +0 -0
- scipy/optimize/_slsqp.cp312-win_amd64.dll.a +0 -0
- scipy/optimize/_slsqp.cp312-win_amd64.pyd +0 -0
- scipy/optimize/_trlib/_trlib.cp312-win_amd64.dll.a +0 -0
- scipy/optimize/_trlib/_trlib.cp312-win_amd64.pyd +0 -0
- scipy/optimize/_zeros.cp312-win_amd64.dll.a +0 -0
- scipy/optimize/_zeros.cp312-win_amd64.pyd +0 -0
- scipy/optimize/cython_optimize/_zeros.cp312-win_amd64.dll.a +0 -0
- scipy/optimize/cython_optimize/_zeros.cp312-win_amd64.pyd +0 -0
- scipy/optimize/tests/test_bracket.py +35 -0
- scipy/signal/_max_len_seq_inner.cp312-win_amd64.dll.a +0 -0
- scipy/signal/_max_len_seq_inner.cp312-win_amd64.pyd +0 -0
- scipy/signal/_peak_finding_utils.cp312-win_amd64.dll.a +0 -0
- scipy/signal/_peak_finding_utils.cp312-win_amd64.pyd +0 -0
- scipy/signal/_short_time_fft.py +34 -6
- scipy/signal/_signaltools.py +4 -1
- scipy/signal/_sigtools.cp312-win_amd64.dll.a +0 -0
- scipy/signal/_sigtools.cp312-win_amd64.pyd +0 -0
- scipy/signal/_sosfilt.cp312-win_amd64.dll.a +0 -0
- scipy/signal/_sosfilt.cp312-win_amd64.pyd +0 -0
- scipy/signal/_spline.cp312-win_amd64.dll.a +0 -0
- scipy/signal/_spline.cp312-win_amd64.pyd +0 -0
- scipy/signal/_upfirdn_apply.cp312-win_amd64.dll.a +0 -0
- scipy/signal/_upfirdn_apply.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/sparse/_csparsetools.cp312-win_amd64.pyd +0 -0
- scipy/sparse/_dia.py +0 -3
- scipy/sparse/_sparsetools.cp312-win_amd64.dll.a +0 -0
- scipy/sparse/_sparsetools.cp312-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_flow.cp312-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_flow.cp312-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_matching.cp312-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_matching.cp312-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cp312-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cp312-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_reordering.cp312-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_reordering.cp312-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_shortest_path.cp312-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_shortest_path.cp312-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_tools.cp312-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_tools.cp312-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_traversal.cp312-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_traversal.cp312-win_amd64.pyd +0 -0
- scipy/sparse/linalg/_dsolve/_superlu.cp312-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_dsolve/_superlu.cp312-win_amd64.pyd +0 -0
- scipy/sparse/linalg/_eigen/arpack/_arpack.cp312-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_eigen/arpack/_arpack.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_propack/_cpropack.cp312-win_amd64.pyd +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cp312-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cp312-win_amd64.pyd +0 -0
- scipy/sparse/linalg/_propack/_spropack.cp312-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_propack/_spropack.cp312-win_amd64.pyd +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cp312-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/spatial/_ckdtree.cp312-win_amd64.pyd +0 -0
- scipy/spatial/_distance_pybind.cp312-win_amd64.dll.a +0 -0
- scipy/spatial/_distance_pybind.cp312-win_amd64.pyd +0 -0
- scipy/spatial/_distance_wrap.cp312-win_amd64.dll.a +0 -0
- scipy/spatial/_distance_wrap.cp312-win_amd64.pyd +0 -0
- scipy/spatial/_hausdorff.cp312-win_amd64.dll.a +0 -0
- scipy/spatial/_hausdorff.cp312-win_amd64.pyd +0 -0
- scipy/spatial/_qhull.cp312-win_amd64.dll.a +0 -0
- scipy/spatial/_qhull.cp312-win_amd64.pyd +0 -0
- scipy/spatial/_voronoi.cp312-win_amd64.dll.a +0 -0
- scipy/spatial/_voronoi.cp312-win_amd64.pyd +0 -0
- scipy/spatial/tests/test_qhull.py +99 -0
- scipy/spatial/transform/_rotation.cp312-win_amd64.dll.a +0 -0
- scipy/spatial/transform/_rotation.cp312-win_amd64.pyd +0 -0
- scipy/spatial/transform/tests/test_rotation.py +181 -10
- scipy/special/_comb.cp312-win_amd64.dll.a +0 -0
- scipy/special/_comb.cp312-win_amd64.pyd +0 -0
- scipy/special/_ellip_harm_2.cp312-win_amd64.dll.a +0 -0
- scipy/special/_ellip_harm_2.cp312-win_amd64.pyd +0 -0
- scipy/special/_gufuncs.cp312-win_amd64.dll.a +0 -0
- scipy/special/_gufuncs.cp312-win_amd64.pyd +0 -0
- scipy/special/_logsumexp.py +21 -16
- scipy/special/_specfun.cp312-win_amd64.dll.a +0 -0
- scipy/special/_specfun.cp312-win_amd64.pyd +0 -0
- scipy/special/_special_ufuncs.cp312-win_amd64.dll.a +0 -0
- scipy/special/_special_ufuncs.cp312-win_amd64.pyd +0 -0
- scipy/special/_test_internal.cp312-win_amd64.dll.a +0 -0
- scipy/special/_test_internal.cp312-win_amd64.pyd +0 -0
- scipy/special/_ufuncs.cp312-win_amd64.dll.a +0 -0
- scipy/special/_ufuncs.cp312-win_amd64.pyd +0 -0
- scipy/special/_ufuncs_cxx.cp312-win_amd64.dll.a +0 -0
- scipy/special/_ufuncs_cxx.cp312-win_amd64.pyd +0 -0
- scipy/special/cython_special.cp312-win_amd64.dll.a +0 -0
- scipy/special/cython_special.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/stats/_ansari_swilk_statistics.cp312-win_amd64.pyd +0 -0
- scipy/stats/_biasedurn.cp312-win_amd64.dll.a +0 -0
- scipy/stats/_biasedurn.cp312-win_amd64.pyd +0 -0
- scipy/stats/_continuous_distns.py +25 -15
- scipy/stats/_levy_stable/levyst.cp312-win_amd64.dll.a +0 -0
- scipy/stats/_levy_stable/levyst.cp312-win_amd64.pyd +0 -0
- scipy/stats/_mvn.cp312-win_amd64.dll.a +0 -0
- scipy/stats/_mvn.cp312-win_amd64.pyd +0 -0
- scipy/stats/_qmc_cy.cp312-win_amd64.dll.a +0 -0
- scipy/stats/_qmc_cy.cp312-win_amd64.pyd +0 -0
- scipy/stats/_rcont/rcont.cp312-win_amd64.dll.a +0 -0
- scipy/stats/_rcont/rcont.cp312-win_amd64.pyd +0 -0
- scipy/stats/_sobol.cp312-win_amd64.dll.a +0 -0
- scipy/stats/_sobol.cp312-win_amd64.pyd +0 -0
- scipy/stats/_stats.cp312-win_amd64.dll.a +0 -0
- scipy/stats/_stats.cp312-win_amd64.pyd +0 -0
- scipy/stats/_stats_pythran.cp312-win_amd64.dll.a +0 -0
- scipy/stats/_stats_pythran.cp312-win_amd64.pyd +0 -0
- scipy/stats/_unuran/unuran_wrapper.cp312-win_amd64.dll.a +0 -0
- scipy/stats/_unuran/unuran_wrapper.cp312-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-cp312-cp312-win_amd64.whl → /scipy-1.15.3-cp312-cp312-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/__config__.py
CHANGED
@@ -59,7 +59,7 @@ CONFIG = _cleanup(
|
|
59
59
|
},
|
60
60
|
"pythran": {
|
61
61
|
"version": r"0.17.0",
|
62
|
-
"include directory": r"C:\Users\runneradmin\AppData\Local\Temp\pip-build-env-
|
62
|
+
"include directory": r"C:\Users\runneradmin\AppData\Local\Temp\pip-build-env-dihuxz0e\overlay\Lib\site-packages/pythran"
|
63
63
|
},
|
64
64
|
},
|
65
65
|
"Machine Information": {
|
@@ -83,8 +83,8 @@ CONFIG = _cleanup(
|
|
83
83
|
"found": bool("True".lower().replace('false', '')),
|
84
84
|
"version": "0.3.28",
|
85
85
|
"detection method": "pkgconfig",
|
86
|
-
"include directory": r"C:/Users/runneradmin/AppData/Local/Temp/cibw-run-
|
87
|
-
"lib directory": r"C:/Users/runneradmin/AppData/Local/Temp/cibw-run-
|
86
|
+
"include directory": r"C:/Users/runneradmin/AppData/Local/Temp/cibw-run-3dk08vlg/cp312-win_amd64/build/venv/Lib/site-packages/scipy_openblas32/include",
|
87
|
+
"lib directory": r"C:/Users/runneradmin/AppData/Local/Temp/cibw-run-3dk08vlg/cp312-win_amd64/build/venv/Lib/site-packages/scipy_openblas32/lib",
|
88
88
|
"openblas configuration": r"OpenBLAS 0.3.28 DYNAMIC_ARCH NO_AFFINITY Haswell MAX_THREADS=24",
|
89
89
|
"pc file directory": r"D:/a/scipy/scipy",
|
90
90
|
},
|
@@ -93,8 +93,8 @@ CONFIG = _cleanup(
|
|
93
93
|
"found": bool("True".lower().replace('false', '')),
|
94
94
|
"version": "0.3.28",
|
95
95
|
"detection method": "pkgconfig",
|
96
|
-
"include directory": r"C:/Users/runneradmin/AppData/Local/Temp/cibw-run-
|
97
|
-
"lib directory": r"C:/Users/runneradmin/AppData/Local/Temp/cibw-run-
|
96
|
+
"include directory": r"C:/Users/runneradmin/AppData/Local/Temp/cibw-run-3dk08vlg/cp312-win_amd64/build/venv/Lib/site-packages/scipy_openblas32/include",
|
97
|
+
"lib directory": r"C:/Users/runneradmin/AppData/Local/Temp/cibw-run-3dk08vlg/cp312-win_amd64/build/venv/Lib/site-packages/scipy_openblas32/lib",
|
98
98
|
"openblas configuration": r"OpenBLAS 0.3.28 DYNAMIC_ARCH NO_AFFINITY Haswell MAX_THREADS=24",
|
99
99
|
"pc file directory": r"D:/a/scipy/scipy",
|
100
100
|
},
|
@@ -106,7 +106,7 @@ CONFIG = _cleanup(
|
|
106
106
|
},
|
107
107
|
},
|
108
108
|
"Python Information": {
|
109
|
-
"path": r"C:\Users\runneradmin\AppData\Local\Temp\cibw-run-
|
109
|
+
"path": r"C:\Users\runneradmin\AppData\Local\Temp\cibw-run-3dk08vlg\cp312-win_amd64\build\venv\Scripts\python.exe",
|
110
110
|
"version": "3.12",
|
111
111
|
},
|
112
112
|
}
|
scipy/__init__.py
CHANGED
@@ -44,14 +44,14 @@ Public API in the main SciPy namespace
|
|
44
44
|
|
45
45
|
|
46
46
|
# start delvewheel patch
|
47
|
-
def
|
47
|
+
def _delvewheel_patch_1_10_1():
|
48
48
|
import os
|
49
49
|
if os.path.isdir(libs_dir := os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir, 'scipy.libs'))):
|
50
50
|
os.add_dll_directory(libs_dir)
|
51
51
|
|
52
52
|
|
53
|
-
|
54
|
-
del
|
53
|
+
_delvewheel_patch_1_10_1()
|
54
|
+
del _delvewheel_patch_1_10_1
|
55
55
|
# end delvewheel patch
|
56
56
|
|
57
57
|
import importlib as _importlib
|
scipy/_lib/_array_api.py
CHANGED
@@ -593,3 +593,14 @@ def xp_float_to_complex(arr: Array, xp: ModuleType | None = None) -> Array:
|
|
593
593
|
arr = xp.astype(arr, xp.complex128)
|
594
594
|
|
595
595
|
return arr
|
596
|
+
|
597
|
+
|
598
|
+
def xp_default_dtype(xp):
|
599
|
+
"""Query the namespace-dependent default floating-point dtype.
|
600
|
+
"""
|
601
|
+
if is_torch(xp):
|
602
|
+
# historically, we allow pytorch to keep its default of float32
|
603
|
+
return xp.get_default_dtype()
|
604
|
+
else:
|
605
|
+
# we default to float64
|
606
|
+
return xp.float64
|
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
|
@@ -4,7 +4,7 @@ import pytest
|
|
4
4
|
from scipy.conftest import array_api_compatible
|
5
5
|
from scipy._lib._array_api import (
|
6
6
|
_GLOBAL_CONFIG, array_namespace, _asarray, xp_copy, xp_assert_equal, is_numpy,
|
7
|
-
np_compat,
|
7
|
+
np_compat, xp_default_dtype
|
8
8
|
)
|
9
9
|
from scipy._lib._array_api_no_0d import xp_assert_equal as xp_assert_equal_no_0d
|
10
10
|
|
@@ -185,3 +185,7 @@ class TestArrayAPI:
|
|
185
185
|
# scalars-vs-0d passes (if values match) also with regular python objects
|
186
186
|
xp_assert_equal_no_0d(0., xp.asarray(0.))
|
187
187
|
xp_assert_equal_no_0d(42, xp.asarray(42))
|
188
|
+
|
189
|
+
@array_api_compatible
|
190
|
+
def test_default_dtype(self, xp):
|
191
|
+
assert xp_default_dtype(xp) == xp.asarray(1.).dtype
|
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/integrate/_ivp/common.py
CHANGED
@@ -65,7 +65,7 @@ def norm(x):
|
|
65
65
|
return np.linalg.norm(x) / x.size ** 0.5
|
66
66
|
|
67
67
|
|
68
|
-
def select_initial_step(fun, t0, y0, t_bound,
|
68
|
+
def select_initial_step(fun, t0, y0, t_bound,
|
69
69
|
max_step, f0, direction, order, rtol, atol):
|
70
70
|
"""Empirically select a good initial step.
|
71
71
|
|
@@ -80,7 +80,7 @@ def select_initial_step(fun, t0, y0, t_bound,
|
|
80
80
|
y0 : ndarray, shape (n,)
|
81
81
|
Initial value of the dependent variable.
|
82
82
|
t_bound : float
|
83
|
-
End-point of integration interval; used to ensure that t0+step<=tbound
|
83
|
+
End-point of integration interval; used to ensure that t0+step<=tbound
|
84
84
|
and that fun is only evaluated in the interval [t0,tbound]
|
85
85
|
max_step : float
|
86
86
|
Maximum allowable step size.
|
@@ -112,7 +112,7 @@ def select_initial_step(fun, t0, y0, t_bound,
|
|
112
112
|
interval_length = abs(t_bound - t0)
|
113
113
|
if interval_length == 0.0:
|
114
114
|
return 0.0
|
115
|
-
|
115
|
+
|
116
116
|
scale = atol + np.abs(y0) * rtol
|
117
117
|
d0 = norm(y0 / scale)
|
118
118
|
d1 = norm(f0 / scale)
|
scipy/integrate/_ivp/ivp.py
CHANGED
@@ -694,8 +694,15 @@ def solve_ivp(fun, t_span, y0, method='RK45', t_eval=None, dense_output=False,
|
|
694
694
|
g = g_new
|
695
695
|
|
696
696
|
if t_eval is None:
|
697
|
-
ts
|
698
|
-
|
697
|
+
donot_append = (len(ts) > 1 and
|
698
|
+
ts[-1] == t and
|
699
|
+
dense_output)
|
700
|
+
if not donot_append:
|
701
|
+
ts.append(t)
|
702
|
+
ys.append(y)
|
703
|
+
else:
|
704
|
+
if len(interpolants) > 0:
|
705
|
+
interpolants.pop()
|
699
706
|
else:
|
700
707
|
# The value in t_eval equal to t will be included.
|
701
708
|
if solver.direction > 0:
|
@@ -151,6 +151,25 @@ def compute_error(y, y_true, rtol, atol):
|
|
151
151
|
e = (y - y_true) / (atol + rtol * np.abs(y_true))
|
152
152
|
return np.linalg.norm(e, axis=0) / np.sqrt(e.shape[0])
|
153
153
|
|
154
|
+
def test_duplicate_timestamps():
|
155
|
+
def upward_cannon(t, y):
|
156
|
+
return [y[1], -9.80665]
|
157
|
+
|
158
|
+
def hit_ground(t, y):
|
159
|
+
return y[0]
|
160
|
+
|
161
|
+
hit_ground.terminal = True
|
162
|
+
hit_ground.direction = -1
|
163
|
+
|
164
|
+
sol = solve_ivp(upward_cannon, [0, np.inf], [0, 0.01],
|
165
|
+
max_step=0.05 * 0.001 / 9.80665,
|
166
|
+
events=hit_ground, dense_output=True)
|
167
|
+
assert_allclose(sol.sol(0.01), np.asarray([-0.00039033, -0.08806632]),
|
168
|
+
rtol=1e-5, atol=1e-8)
|
169
|
+
assert_allclose(sol.t_events, np.asarray([[0.00203943]]), rtol=1e-5, atol=1e-8)
|
170
|
+
assert_allclose(sol.y_events, [np.asarray([[ 0.0, -0.01 ]])], atol=1e-9)
|
171
|
+
assert sol.success
|
172
|
+
assert_equal(sol.status, 1)
|
154
173
|
|
155
174
|
@pytest.mark.thread_unsafe
|
156
175
|
def test_integration():
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
scipy/integrate/_tanhsinh.py
CHANGED
@@ -98,8 +98,9 @@ def tanhsinh(f, a, b, *, args=(), log=False, maxlevel=None, minlevel=2,
|
|
98
98
|
Absolute termination tolerance (default: 0) and relative termination
|
99
99
|
tolerance (default: ``eps**0.75``, where ``eps`` is the precision of
|
100
100
|
the result dtype), respectively. Iteration will stop when
|
101
|
-
``res.error < atol
|
102
|
-
described in [1]_ Section 5
|
101
|
+
``res.error < atol`` or ``res.error < res.integral * rtol``. The error
|
102
|
+
estimate is as described in [1]_ Section 5 but with a lower bound of
|
103
|
+
``eps * res.integral``. While not theoretically rigorous or
|
103
104
|
conservative, it is said to work well in practice. Must be non-negative
|
104
105
|
and finite if `log` is False, and must be expressed as the log of a
|
105
106
|
non-negative and finite number if `log` is True.
|
@@ -445,9 +446,9 @@ def tanhsinh(f, a, b, *, args=(), log=False, maxlevel=None, minlevel=2,
|
|
445
446
|
stop[i] = True
|
446
447
|
else:
|
447
448
|
# Terminate if convergence criterion is met
|
448
|
-
|
449
|
-
i = (
|
450
|
-
|
449
|
+
rerr, aerr = _estimate_error(work, xp)
|
450
|
+
i = (rerr < rtol) | (aerr < atol)
|
451
|
+
work.aerr = xp.reshape(xp.astype(aerr, work.dtype), work.Sn.shape)
|
451
452
|
work.status[i] = eim._ECONVERGED
|
452
453
|
stop[i] = True
|
453
454
|
|
@@ -772,22 +773,23 @@ def _estimate_error(work, xp):
|
|
772
773
|
d2 = xp_real(special.logsumexp(xp.stack([work.Sn, Snm2 + work.pi*1j]), axis=0))
|
773
774
|
d3 = log_e1 + xp.max(xp_real(work.fjwj), axis=-1)
|
774
775
|
d4 = work.d4
|
775
|
-
|
776
|
+
d5 = log_e1 + xp.real(work.Sn)
|
777
|
+
temp = xp.where(d1 > -xp.inf, d1 ** 2 / d2, -xp.inf)
|
778
|
+
ds = xp.stack([temp, 2 * d1, d3, d4, d5])
|
776
779
|
aerr = xp.max(ds, axis=0)
|
777
|
-
rerr =
|
780
|
+
rerr = aerr - xp.real(work.Sn)
|
778
781
|
else:
|
779
782
|
# Note: explicit computation of log10 of each of these is unnecessary.
|
780
783
|
d1 = xp.abs(work.Sn - Snm1)
|
781
784
|
d2 = xp.abs(work.Sn - Snm2)
|
782
785
|
d3 = e1 * xp.max(xp.abs(work.fjwj), axis=-1)
|
783
786
|
d4 = work.d4
|
784
|
-
|
785
|
-
|
786
|
-
ds = xp.stack([
|
787
|
+
d5 = e1 * xp.abs(work.Sn)
|
788
|
+
temp = xp.where(d1 > 0, d1**(xp.log(d1)/xp.log(d2)), 0)
|
789
|
+
ds = xp.stack([temp, d1**2, d3, d4, d5])
|
787
790
|
aerr = xp.max(ds, axis=0)
|
788
|
-
rerr =
|
791
|
+
rerr = aerr/xp.abs(work.Sn)
|
789
792
|
|
790
|
-
aerr = xp.reshape(xp.astype(aerr, work.dtype), work.Sn.shape)
|
791
793
|
return rerr, aerr
|
792
794
|
|
793
795
|
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -753,6 +753,16 @@ class TestTanhSinh:
|
|
753
753
|
x[-1] = 1000
|
754
754
|
_tanhsinh(np.sin, 1, x)
|
755
755
|
|
756
|
+
def test_gh_22681_finite_error(self, xp):
|
757
|
+
# gh-22681 noted a case in which the error was NaN on some platforms;
|
758
|
+
# check that this does in fact fail in CI.
|
759
|
+
a = complex(12, -10)
|
760
|
+
b = complex(12, 39)
|
761
|
+
def f(t):
|
762
|
+
return xp.sin(a * (1 - t) + b * t)
|
763
|
+
res = _tanhsinh(f, xp.asarray(0.), xp.asarray(1.), atol=0, rtol=0, maxlevel=10)
|
764
|
+
assert xp.isfinite(res.error)
|
765
|
+
|
756
766
|
|
757
767
|
@array_api_compatible
|
758
768
|
@pytest.mark.usefixtures("skip_xp_backends")
|
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
|
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
|
@@ -213,3 +213,20 @@ class TestInterpolativeDecomposition:
|
|
213
213
|
B = A.copy()
|
214
214
|
interp_decomp(A.T, eps, rand=rand)
|
215
215
|
assert_array_equal(A, B)
|
216
|
+
|
217
|
+
def test_svd_aslinearoperator_shape_check(self):
|
218
|
+
# See gh-issue #22451
|
219
|
+
rng = np.random.default_rng(1744580941832515)
|
220
|
+
x = rng.uniform(size=[7, 5])
|
221
|
+
xl = aslinearoperator(x)
|
222
|
+
u, s, v = pymatrixid.svd(xl, 3)
|
223
|
+
assert_equal(u.shape, (7, 3))
|
224
|
+
assert_equal(s.shape, (3,))
|
225
|
+
assert_equal(v.shape, (5, 3))
|
226
|
+
|
227
|
+
x = rng.uniform(size=[4, 9])
|
228
|
+
xl = aslinearoperator(x)
|
229
|
+
u, s, v = pymatrixid.svd(xl, 2)
|
230
|
+
assert_equal(u.shape, (4, 2))
|
231
|
+
assert_equal(s.shape, (2,))
|
232
|
+
assert_equal(v.shape, (9, 2))
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
scipy/ndimage/_ndimage_api.py
CHANGED
@@ -12,4 +12,5 @@ from ._interpolation import * # noqa: F403
|
|
12
12
|
from ._measurements import * # noqa: F403
|
13
13
|
from ._morphology import * # noqa: F403
|
14
14
|
|
15
|
-
|
15
|
+
# '@' due to pytest bug, scipy/scipy#22236
|
16
|
+
__all__ = [s for s in dir() if not s.startswith(('_', '@'))]
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -6,6 +6,9 @@ import re
|
|
6
6
|
import numpy as np
|
7
7
|
import pytest
|
8
8
|
from numpy.testing import suppress_warnings, assert_allclose, assert_array_equal
|
9
|
+
from hypothesis import strategies as st
|
10
|
+
from hypothesis import given
|
11
|
+
import hypothesis.extra.numpy as npst
|
9
12
|
from pytest import raises as assert_raises
|
10
13
|
from scipy import ndimage
|
11
14
|
from scipy._lib._array_api import (
|
@@ -2904,3 +2907,14 @@ def test_gh_22333():
|
|
2904
2907
|
expected = [58, 67, 87, 108, 163, 108, 108, 108, 87]
|
2905
2908
|
actual = ndimage.median_filter(x, size=9, mode='constant')
|
2906
2909
|
assert_array_equal(actual, expected)
|
2910
|
+
|
2911
|
+
|
2912
|
+
@given(x=npst.arrays(dtype=np.float64,
|
2913
|
+
shape=st.integers(min_value=1, max_value=1000)),
|
2914
|
+
size=st.integers(min_value=1, max_value=50),
|
2915
|
+
mode=st.sampled_from(["constant", "mirror", "wrap", "reflect",
|
2916
|
+
"nearest"]),
|
2917
|
+
)
|
2918
|
+
def test_gh_22586_crash_property(x, size, mode):
|
2919
|
+
# property-based test for median_filter resilience to hard crashing
|
2920
|
+
ndimage.median_filter(x, size=size, mode=mode)
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|