commit:     68ed3fe84fdbab8d929e70efe749d5c38fe77814
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Tue Aug 13 18:44:04 2024 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Tue Aug 13 20:07:47 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=68ed3fe8

dev-python/scipy: Backport a patch related to numpy-2

Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>

 dev-python/scipy/files/scipy-1.14.0-np2.patch |  68 ++++++++++
 dev-python/scipy/scipy-1.14.0-r1.ebuild       | 173 ++++++++++++++++++++++++++
 2 files changed, 241 insertions(+)

diff --git a/dev-python/scipy/files/scipy-1.14.0-np2.patch 
b/dev-python/scipy/files/scipy-1.14.0-np2.patch
new file mode 100644
index 000000000000..fdb81baa68a6
--- /dev/null
+++ b/dev-python/scipy/files/scipy-1.14.0-np2.patch
@@ -0,0 +1,68 @@
+From 87c4932ca0e4dbe10f918bc5e8096e30fc6557e7 Mon Sep 17 00:00:00 2001
+From: Lucas Colley <lucas.coll...@gmail.com>
+Date: Mon, 29 Jul 2024 17:57:11 +0100
+Subject: [PATCH 1/2] BUG: stats: adapt to `np.floor` type promotion removal
+
+`rv_discrete._cdf` relied on `np.floor` promoting its integer input to 
`np.float64`. This is no longer the case since numpy/numpy#26766.
+
+[skip cirrus] [skip circle]
+---
+ scipy/stats/_distn_infrastructure.py     |  2 +-
+ scipy/stats/tests/test_discrete_basic.py | 12 ++++++++++++
+ 2 files changed, 13 insertions(+), 1 deletion(-)
+
+diff --git a/scipy/stats/_distn_infrastructure.py 
b/scipy/stats/_distn_infrastructure.py
+index a7a0bb66b396..83954af2c11f 100644
+--- a/scipy/stats/_distn_infrastructure.py
++++ b/scipy/stats/_distn_infrastructure.py
+@@ -3392,7 +3392,7 @@ def _cdf_single(self, k, *args):
+         return np.sum(self._pmf(m, *args), axis=0)
+ 
+     def _cdf(self, x, *args):
+-        k = floor(x)
++        k = floor(x).astype(np.float64)
+         return self._cdfvec(k, *args)
+ 
+     # generic _logcdf, _sf, _logsf, _ppf, _isf, _rvs defined in rv_generic
+diff --git a/scipy/stats/tests/test_discrete_basic.py 
b/scipy/stats/tests/test_discrete_basic.py
+index 1ebc9371c075..3db2f0666dbd 100644
+--- a/scipy/stats/tests/test_discrete_basic.py
++++ b/scipy/stats/tests/test_discrete_basic.py
+@@ -549,3 +549,15 @@ def test_rv_sample():
+     rng = np.random.default_rng(98430143469)
+     rvs0 = dist.ppf(rng.random(size=100))
+     assert_allclose(rvs, rvs0)
++
++def test__pmf_float_input():
++    # gh-21272
++    # test that `rvs()` can be computed when `_pmf` requires float input
++    
++    class rv_exponential(stats.rv_discrete):
++        def _pmf(self, i):
++            return (2/3)*3**(1 - i)
++    
++    rv = rv_exponential(a=0.0, b=float('inf'))
++    rvs = rv.rvs() # should not crash due to integer input to `_pmf`
++    assert_allclose(rvs, 0)
+
+From fe924edb6564358df24de8b915861d6754c6e94d Mon Sep 17 00:00:00 2001
+From: Matt Haberland <mhabe...@calpoly.edu>
+Date: Sat, 10 Aug 2024 12:15:56 -0700
+Subject: [PATCH 2/2] Update scipy/stats/tests/test_discrete_basic.py
+
+[skip ci]
+---
+ scipy/stats/tests/test_discrete_basic.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/scipy/stats/tests/test_discrete_basic.py 
b/scipy/stats/tests/test_discrete_basic.py
+index 3db2f0666dbd..2bc53d95228a 100644
+--- a/scipy/stats/tests/test_discrete_basic.py
++++ b/scipy/stats/tests/test_discrete_basic.py
+@@ -559,5 +559,5 @@ def _pmf(self, i):
+             return (2/3)*3**(1 - i)
+     
+     rv = rv_exponential(a=0.0, b=float('inf'))
+-    rvs = rv.rvs() # should not crash due to integer input to `_pmf`
++    rvs = rv.rvs(random_state=42)  # should not crash due to integer input to 
`_pmf`
+     assert_allclose(rvs, 0)

diff --git a/dev-python/scipy/scipy-1.14.0-r1.ebuild 
b/dev-python/scipy/scipy-1.14.0-r1.ebuild
new file mode 100644
index 000000000000..1352c9c3bfbd
--- /dev/null
+++ b/dev-python/scipy/scipy-1.14.0-r1.ebuild
@@ -0,0 +1,173 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+FORTRAN_NEEDED=fortran
+DISTUTILS_EXT=1
+DISTUTILS_USE_PEP517=meson-python
+PYTHON_COMPAT=( pypy3 python3_{10..13} )
+PYTHON_REQ_USE="threads(+)"
+
+inherit flag-o-matic fortran-2 distutils-r1
+
+DESCRIPTION="Scientific algorithms library for Python"
+HOMEPAGE="
+       https://scipy.org/
+       https://github.com/scipy/scipy/
+       https://pypi.org/project/scipy/
+"
+
+if [[ ${PV} == *9999* ]] ; then
+       inherit git-r3
+
+       # Need submodules, so git for now.
+       EGIT_REPO_URI="https://github.com/scipy/scipy";
+       EGIT_BRANCH="maintenance/$(ver_cut 1-2).x"
+       EGIT_SUBMODULES=( '*' )
+else
+       inherit pypi
+
+       # Upstream is often behind with doc updates
+       DOC_PV=${PV}
+
+       SRC_URI+="
+               doc? (
+                       
https://docs.scipy.org/doc/${PN}-${DOC_PV}/${PN}-html-${DOC_PV}.zip
+               )"
+
+       if [[ ${PV} != *rc* ]] ; then
+               KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~s390 
~sparc ~x86"
+       fi
+fi
+
+LICENSE="BSD LGPL-2"
+SLOT="0"
+IUSE="doc +fortran test-rust"
+
+# umfpack is technically optional but it's preferred to have it available.
+DEPEND="
+       >=dev-python/numpy-1.23.5:=[lapack,${PYTHON_USEDEP}]
+       sci-libs/arpack:=
+       sci-libs/umfpack
+       virtual/cblas
+       >=virtual/lapack-3.8
+"
+RDEPEND="
+       ${DEPEND}
+       dev-python/pillow[${PYTHON_USEDEP}]
+"
+BDEPEND="
+       dev-lang/swig
+       >=dev-python/cython-3.0.8[${PYTHON_USEDEP}]
+       >=dev-python/meson-python-0.15.0[${PYTHON_USEDEP}]
+       >=dev-python/pybind11-2.12.0[${PYTHON_USEDEP}]
+       >=dev-build/meson-1.1.0
+       !kernel_Darwin? ( dev-util/patchelf )
+       virtual/pkgconfig
+       doc? ( app-arch/unzip )
+       fortran? (
+               >=dev-python/pythran-0.16.0[${PYTHON_USEDEP}]
+       )
+       test? (
+               >=dev-python/hypothesis-6.30[${PYTHON_USEDEP}]
+       )
+       test-rust? (
+               dev-python/pooch[${PYTHON_USEDEP}]
+       )
+"
+
+EPYTEST_XDIST=1
+distutils_enable_tests pytest
+
+PATCHES=(
+       # https://github.com/scipy/scipy/pull/21283
+       # (breaks test_sample_scipy in dev-python/sympy)
+       "${FILESDIR}/${P}-np2.patch"
+)
+
+src_unpack() {
+       default
+
+       if use doc; then
+               unzip -qo "${DISTDIR}"/${PN}-html-${DOC_PV}.zip -d html || die
+       fi
+}
+
+python_configure_all() {
+       DISTUTILS_ARGS=(
+               -Dblas=blas
+               -Dlapack=lapack
+               -Duse-pythran=$(usex fortran true false)
+       )
+
+       # https://bugs.gentoo.org/932721
+       has_version '>=dev-python/numpy-2.0.0' && filter-lto
+}
+
+python_test() {
+       cd "${BUILD_DIR}/install$(python_get_sitedir)" || die
+
+       local EPYTEST_DESELECT=(
+               # Network
+               
scipy/datasets/tests/test_data.py::TestDatasets::test_existence_all
+               scipy/datasets/tests/test_data.py::TestDatasets::test_ascent
+               scipy/datasets/tests/test_data.py::TestDatasets::test_face
+               
scipy/datasets/tests/test_data.py::TestDatasets::test_electrocardiogram
+
+               # Precision issue with diff. blas?
+               
scipy/optimize/tests/test__basinhopping.py::Test_Metropolis::test_gh7799
+
+               # Crashes with assertion, not a regression
+               # https://github.com/scipy/scipy/issues/19321
+               scipy/signal/tests/test_signaltools.py::test_lfilter_bad_object
+
+               # timeouts
+               scipy/sparse/linalg/tests/test_propack.py::test_examples
+               # hang or incredibly slow
+               
scipy/optimize/tests/test_lsq_linear.py::TestBVLS::test_large_rank_deficient
+               
scipy/optimize/tests/test_lsq_linear.py::TestTRF::test_large_rank_deficient
+
+               # TODO
+               
scipy/optimize/tests/test_minimize_constrained.py::TestTrustRegionConstr::test_list_of_problems
+       )
+       local EPYTEST_IGNORE=()
+
+       if ! has_version -b "dev-python/pooch[${PYTHON_USEDEP}]" ; then
+               EPYTEST_IGNORE+=(
+                       scipy/datasets/tests/test_data.py
+               )
+       fi
+
+       case ${EPYTHON} in
+               pypy3)
+                       EPYTEST_DESELECT+=(
+                               # fd leaks in tests
+                               # https://github.com/scipy/scipy/issues/19553
+                               
scipy/fft/_pocketfft/tests/test_real_transforms.py
+                               # TODO
+                               
'scipy/special/tests/test_data.py::test_boost[<Data for expi: 
expinti_data_long_ipp-expinti_data_long>]'
+                               # missing dict.__ror__
+                               # https://github.com/pypy/pypy/issues/4934
+                               
'scipy/sparse/tests/test_dok.py::test_dunder_ror[dok_matrix]'
+                               # mismatched exception message
+                               
scipy/optimize/tests/test_hessian_update_strategy.py::TestHessianUpdateStrategy::test_initialize_catch_illegal
+                       )
+                       ;;
+               python3.13)
+                       EPYTEST_DESELECT+=(
+                               # docstring formatting
+                               scipy/misc/tests/test_doccer.py::test_decorator
+                       )
+                       ;;
+       esac
+
+       local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
+       epytest scipy
+}
+
+python_install_all() {
+       use doc && local HTML_DOCS=( "${WORKDIR}"/html/. )
+
+       distutils-r1_python_install_all
+}

Reply via email to