commit:     6a2059bdf28fe8fe2d9639ea26c7ae1a5cc52c6e
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Mon May 19 13:55:18 2025 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Mon May 19 14:00:04 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=6a2059bd

dev-python/cython: rework tests

* Make numpy conditional on USE=test-full

  numpy doesn't pass tests on some niche arches and maybe we'll even
  be able to destable it on the really niche arches at some point thanks
  to this.

* Make numpy conditional on PYTHON_FULLY_TESTED

  numpy depends on cython and porting numpy to a new Python impl often
  takes a while, so let's make it easy to get partial coverage.

* Fix numpy test dep (doesn't need to be <2 for a while now).

  Sent https://github.com/cython/cython/pull/6895 upstream as well.

* Enable tests for py3.13, py3.14, and pypy3_11

* More robust skips for coverage tests which have had problems before

  They're not interesting for us in packaging.

* Add some notes about other possible test deps we could add in future.

Signed-off-by: Sam James <sam <AT> gentoo.org>

 dev-python/cython/cython-3.1.1.ebuild | 78 ++++++++++++++++++++++++++---------
 dev-python/cython/metadata.xml        |  6 +++
 2 files changed, 64 insertions(+), 20 deletions(-)

diff --git a/dev-python/cython/cython-3.1.1.ebuild 
b/dev-python/cython/cython-3.1.1.ebuild
index 3931c3e0fe2e..51b147eecc22 100644
--- a/dev-python/cython/cython-3.1.1.ebuild
+++ b/dev-python/cython/cython-3.1.1.ebuild
@@ -5,8 +5,9 @@ EAPI=8
 
 DISTUTILS_EXT=1
 DISTUTILS_USE_PEP517=setuptools
-PYTHON_TESTED=( python3_{11..12} )
-PYTHON_COMPAT=( "${PYTHON_TESTED[@]}" pypy3_11 python3_13{,t} python3_14{,t} )
+PYTHON_FULLY_TESTED=( python3_{11..14} )
+PYTHON_TESTED=( "${PYTHON_FULLY_TESTED[@]}" pypy3_11 )
+PYTHON_COMPAT=( "${PYTHON_TESTED[@]}" python3_{13,14}t )
 PYTHON_REQ_USE="threads(+)"
 
 inherit distutils-r1 multiprocessing pypi toolchain-funcs
@@ -21,15 +22,17 @@ HOMEPAGE="
 LICENSE="Apache-2.0"
 SLOT="0"
 KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 
~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos 
~x64-macos ~x64-solaris"
-IUSE="test"
+IUSE="test test-full"
 RESTRICT="!test? ( test )"
 
 BDEPEND="
        ${RDEPEND}
        test? (
-               $(python_gen_cond_dep '
-                       <dev-python/numpy-2[${PYTHON_USEDEP}]
-               ' "${PYTHON_TESTED[@]}")
+               test-full? (
+                       $(python_gen_cond_dep '
+                               dev-python/numpy[${PYTHON_USEDEP}]
+                       ' "${PYTHON_FULLY_TESTED[@]}")
+               )
        )
 "
 
@@ -43,13 +46,6 @@ distutils_enable_sphinx docs \
        dev-python/sphinx-issues \
        dev-python/sphinx-tabs
 
-python_prepare_all() {
-       # Needs dev-python/pip and doesn't like 'externally-managed' (bug 
#927995)
-       rm tests/run/coverage_cmd_src_pkg_layout.srctree || die
-
-       distutils-r1_python_prepare_all
-}
-
 python_compile() {
        # Python gets confused when it is in sys.path before build.
        local -x PYTHONPATH=
@@ -58,6 +54,9 @@ python_compile() {
 }
 
 python_test() {
+       # PYTHON_TESTED controls whether we expect the testsuite to
+       # pass at all, while PYTHON_FULLY_TESTED allows skipping before
+       # numpy is ported (and possibly other deps in future).
        if ! has "${EPYTHON/./_}" "${PYTHON_TESTED[@]}"; then
                einfo "Skipping tests on ${EPYTHON} (xfail)"
                return
@@ -67,13 +66,52 @@ python_test() {
        unset CYTHON_FORCE_REGEN
 
        tc-export CC
-       "${PYTHON}" runtests.py \
-               -vv \
-               -j "$(makeopts_jobs)" \
-               --work-dir "${BUILD_DIR}"/tests \
-               --no-examples \
-               --no-code-style \
-               || die "Tests fail with ${EPYTHON}"
+
+       local testargs=(
+               -vv
+               -j "$(makeopts_jobs)"
+               --work-dir "${BUILD_DIR}"/tests
+
+               --no-examples
+               --no-code-style
+
+               # Fails to find embedded.c
+               --exclude 'embedded'
+               # coverage_installed_pkg needs dev-python/pip and doesn't like
+               # 'externally-managed' (bug #927995), but we don't really
+               # want automagic test dependencies at all, so just skip
+               # unimportant-for-us coverage tests entirely.
+               --exclude 'run.coverage*'
+               --exclude 'Cython.Coverage'
+               # Automagic on dev-python/python-tests, could add this in future
+               --exclude 'run.test_exceptions'
+               # TODO: Unpackaged dev-python/interpreters-pep-734 
(interpreters_backport)
+               # This only shows up as a failure with >=3.13.
+               --exclude 'subinterpreters_threading_stress_test'
+       )
+
+       if [[ ${EPYTHON} == pypy3* ]] ; then
+               testargs+=(
+                       # Recursion issue
+                       --exclude 'run.if_else_expr'
+                       --exclude 'run.test_patma*'
+                       # Slight output difference (missing '<')
+                       --exclude 'run.cpp_exception_ptr_just_handler'
+
+               )
+       fi
+
+       # Keep test-full for numpy as it's large and doesn't pass tests itself
+       # on niche arches.
+       if ! use test-full || ! has "${EPYTHON/./_}" 
"${PYTHON_FULLY_TESTED[@]}"; then
+               testargs+=(
+                       --exclude 'run.numpy*'
+                       --exclude 'run.ufunc'
+                       --exclude 'numpy*'
+               )
+       fi
+
+       "${PYTHON}" runtests.py "${testargs[@]}" || die "Tests fail with 
${EPYTHON}"
 }
 
 python_install_all() {

diff --git a/dev-python/cython/metadata.xml b/dev-python/cython/metadata.xml
index 4960428b8c6b..fd01ff3d8380 100644
--- a/dev-python/cython/metadata.xml
+++ b/dev-python/cython/metadata.xml
@@ -10,6 +10,12 @@
                language as easy as Python itself. It's based on Pyrex, but 
supports
                more cutting edge functionality and optimizations.
        </longdescription>
+       <use>
+               <flag name="test-full">
+                       Run test suite in full via additional (large) test
+                       dependencies, like dev-python/numpy.
+               </flag>
+       </use>
        <upstream>
                <remote-id type="pypi">Cython</remote-id>
                <remote-id type="github">cython/cython</remote-id>

Reply via email to