Fix the numpy ptests by doing the following:
- Add meson to ptest RDEPENDS in the recipe;
- Add python3-unittest-automake-output as a ptest RDEPENDS;
- Convert run-ptest to a shell script that sets PYTEST_DEBUG_TEMPROOT to
a directory inside the same path that contains the script, create that
directory, and then invoke the tests with `pytest --automake` pointed
at the numpy path in site-packages (copying the tests into the normal
PTEST_DIRECTORY seems to cause module import breakages in some tests).
This also includes skipping two problematic tests which require a C
compiler and use up a lot of space, respectively;
- Set 'IMAGE_ROOTFS_EXTRA_SPACE = "
3048576"' for python3-numpy in
core-image-ptest.bb;
- Also set 'QB_MEM:virtclass-mcextend-python3-numpy = "-m 4096"' in
core-image-ptest.bb;
- Move python3-numpy from the PTESTS_PROBLEMS list to the PTESTS_SLOW
one.
Results on qemux86-64:
Testsuite summary
DURATION: 87
END: /usr/lib/python3-numpy/ptest
2025-04-29T17:35
STOP: ptest-runner
TOTAL: 1 FAIL: 0
Note that many of the skipped tests are due to the absence of
python3-mypy (which is currently in meta-python) and of a Fortran
compiler.
Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
python3-cffi \
python3-click \
python3-cryptography \
+ python3-numpy \
python3-xmltodict \
strace \
tar \
# libpam \ # Needs pam DISTRO_FEATURE
# mdadm \ # tests are flaky in AB.
# numactl \ # qemu not (yet) configured for numa; all tests are skipped
-# python3-numpy \ # requires even more RAM and (possibly) disk space; multiple failures
PTESTS_PROBLEMS = "\
ruby \
mdadm \
numactl \
python3-license-expression \
- python3-numpy \
"
# tar-ptest in particular needs more space
IMAGE_ROOTFS_EXTRA_SPACE:virtclass-mcextend-tar = "1524288"
+# python3-numpy-ptest requires a lot of extra space
+IMAGE_ROOTFS_EXTRA_SPACE:virtclass-mcextend-python3-numpy = "3048576"
+
# ptests need more memory than standard to avoid the OOM killer
QB_MEM = "-m 1024"
QB_MEM:virtclass-mcextend-lttng-tools = "-m 4096"
QB_MEM:virtclass-mcextend-python3 = "-m 2048"
QB_MEM:virtclass-mcextend-python3-cryptography = "-m 5100"
+QB_MEM:virtclass-mcextend-python3-numpy = "-m 4096"
QB_MEM:virtclass-mcextend-tcl = "-m 5100"
TEST_SUITES = "ping ssh parselogs ptest"
-#!/usr/bin/env python3
+#!/bin/sh
-import numpy
-numpy.test(label='full', verbose=2)
+# By default, numpy will use /tmp as the root path for temporary files used
+# during tests, but if this is a tmpfs it may fill up quickly and cause many of
+# the tests to report "no space left on device" errors. Create a custom
+# directory for these and point pytest at it so we can take advantage of the
+# storage provided in the rootfs.
+export PYTEST_DEBUG_TEMPROOT="/usr/lib/python3-numpy/ptest/tmp"
+mkdir -p "$PYTEST_DEBUG_TEMPROOT"
+# test_mem_policy fails if there's no C compiler present, but we don't want to
+# include gcc as a ptest dependency, so skip that. test_big_arrays uses up a
+# large amount of storage, so skip that too.
+pytest --automake -m "not slow" -k "not test_mem_policy and not test_big_arrays" /usr/lib/python3.*/site-packages/numpy
+rm -rf "$PYTEST_DEBUG_TEMPROOT"
"
# install what is needed for numpy.test()
-RDEPENDS:${PN} = "python3-unittest \
+RDEPENDS:${PN} = "\
+ python3-compression \
+ python3-ctypes \
+ python3-datetime \
python3-difflib \
- python3-pprint \
- python3-pickle \
- python3-shell \
python3-doctest \
- python3-datetime \
+ python3-email \
+ python3-json \
python3-misc \
python3-mmap \
+ python3-multiprocessing \
python3-netclient \
python3-numbers \
- python3-pydoc \
+ python3-pickle \
python3-pkgutil \
- python3-email \
- python3-compression \
- python3-ctypes \
+ python3-pprint \
+ python3-pydoc \
+ python3-shell \
python3-threading \
- python3-multiprocessing \
- python3-json \
+ python3-unittest \
"
-RDEPENDS:${PN}-ptest += "python3-pytest \
+RDEPENDS:${PN}-ptest += "\
+ ldd \
+ meson \
python3-hypothesis \
- python3-sortedcontainers \
+ python3-pytest \
python3-resource \
+ python3-sortedcontainers \
python3-typing-extensions \
- ldd \
+ python3-unittest-automake-output \
"
BBCLASSEXTEND = "native nativesdk"