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@gentoo.org>
This commit is contained in:
Sam James
2025-05-19 14:55:18 +01:00
parent 77765ea7f6
commit 6a2059bdf2
2 changed files with 64 additions and 20 deletions

View File

@@ -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() {

View File

@@ -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>