* Package: dev-python/pytest-mpl-0.16.1:0 * Repository: gentoo * Maintainer: python@gentoo.org * USE: abi_x86_64 amd64 elibc_musl kernel_linux python_targets_python3_10 python_targets_python3_11 test * FEATURES: network-sandbox preserve-libs sandbox test userpriv usersandbox @@@@@ PLEASE PAY ATTENTION HERE!!! @@@@@ This information may help you to understand if this is a duplicate or if this bug exists after you pushed a fix; This ebuild was merged at the following commit: https://github.com/gentoo-mirror/gentoo/commit/eb3c3faa90390bd6987f7d08c981621d013b257b (Sun Jan 28 16:03:15 UTC 2024) @@@@@ END @@@@@ ################## # emerge --info: # ################## Portage 3.0.61 (python 3.11.7-final-0, default/linux/amd64/17.0/musl/hardened, gcc-13, musl-1.2.4-r1, 6.1.66-gentoo-dist x86_64) ================================================================= System uname: Linux-6.1.66-gentoo-dist-x86_64-AMD_EPYC_7513_32-Core_Processor-with-libc KiB Mem: 263452516 total, 75334828 free KiB Swap: 0 total, 0 free Timestamp of repository gentoo: Sun, 28 Jan 2024 16:03:15 +0000 sh bash 5.2_p26 ld GNU ld (Gentoo 2.41 p5) 2.41.0 app-misc/pax-utils: 1.3.7::gentoo app-shells/bash: 5.2_p26::gentoo dev-build/autoconf: 2.72-r1::gentoo dev-build/automake: 1.16.5-r1::gentoo dev-build/cmake: 3.28.1-r1::gentoo dev-build/libtool: 2.4.7-r2::gentoo dev-build/make: 4.4.1-r1::gentoo dev-build/meson: 1.3.1-r1::gentoo dev-lang/perl: 5.38.2-r1::gentoo dev-lang/python: 3.10.13::gentoo, 3.11.7::gentoo, 3.12.1_p1::gentoo sys-apps/baselayout: 2.14-r1::gentoo sys-apps/openrc: 0.53::gentoo sys-apps/sandbox: 2.38::gentoo sys-devel/binutils: 2.41-r5::gentoo sys-devel/binutils-config: 5.5::gentoo sys-devel/gcc: 13.2.1_p20240113-r1::gentoo sys-devel/gcc-config: 2.11::gentoo sys-kernel/linux-headers: 6.7::gentoo (virtual/os-headers) sys-libs/musl: 1.2.4-r1::gentoo Repositories: gentoo location: /usr/portage sync-type: rsync sync-uri: rsync://rsync.gentoo.org/gentoo-portage priority: -1000 volatile: True sync-rsync-verify-max-age: 3 sync-rsync-extra-opts: sync-rsync-verify-jobs: 1 sync-rsync-verify-metamanifest: yes ACCEPT_KEYWORDS="amd64 ~amd64" ACCEPT_LICENSE="* MIT" CBUILD="x86_64-gentoo-linux-musl" CFLAGS="-O2 -march=x86-64 -pipe -pipe -frecord-gcc-switches -fno-diagnostics-color -fmessage-length=0" CHOST="x86_64-gentoo-linux-musl" CONFIG_PROTECT="/etc /usr/share/gnupg/qualified.txt" CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/env.d /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/revdep-rebuild /etc/sandbox.d /etc/terminfo" CXXFLAGS="-O2 -march=x86-64 -pipe -pipe -frecord-gcc-switches -fno-diagnostics-color -fmessage-length=0" DISTDIR="/var/tmp/portage/dev-python/pytest-mpl-0.16.1/distdir" EMERGE_DEFAULT_OPTS="--with-bdeps=y -1 -k -b --backtrack=100" ENV_UNSET="CARGO_HOME DBUS_SESSION_BUS_ADDRESS DISPLAY GDK_PIXBUF_MODULE_FILE GOBIN GOPATH PERL5LIB PERL5OPT PERLPREFIX PERL_CORE PERL_MB_OPT PERL_MM_OPT XAUTHORITY XDG_CACHE_HOME XDG_CONFIG_HOME XDG_DATA_HOME XDG_RUNTIME_DIR XDG_STATE_HOME" FCFLAGS="-O2 -march=x86-64 -pipe -pipe -frecord-gcc-switches -fno-diagnostics-color -fmessage-length=0" FEATURES="assume-digests binpkg-docompress binpkg-dostrip binpkg-logs binpkg-multi-instance buildpkg buildpkg-live config-protect-if-modified distlocks ebuild-locks fixlafiles ipc-sandbox merge-sync network-sandbox news parallel-fetch pid-sandbox pkgdir-index-trusted preserve-libs protect-owned qa-unresolved-soname-deps sandbox sfperms sign split-log strict test unknown-features-warn unmerge-logs unmerge-orphans userfetch userpriv usersandbox usersync xattr" FFLAGS="-O2 -march=x86-64 -pipe -pipe -frecord-gcc-switches -fno-diagnostics-color -fmessage-length=0" GENTOO_MIRRORS="http://mirror.leaseweb.com/gentoo/ http://ftp.snt.utwente.nl/pub/os/linux/gentoo/ http://ftp.belnet.be/pub/rsync.gentoo.org/gentoo/ http://distfiles.gentoo.org" INSTALL_MASK="charset.alias /usr/share/locale/locale.alias" LANG="C.UTF8" LDFLAGS="-Wl,-O1 -Wl,--as-needed -Wl,--defsym=__gentoo_check_ldflags__=0" LEX="flex" MAKEOPTS="-j16" PKGDIR="/root/tbci/binpkg" PORTAGE_CONFIGROOT="/" PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --omit-dir-times --compress --force --whole-file --delete --stats --human-readable --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages --exclude=/.git" PORTAGE_TMPDIR="/var/tmp" SHELL="/bin/bash" USE="acl amd64 bzip2 cet cli crypt debug dri elogind fortran hardened iconv ipv6 jumbo-build libtirpc native-symlinks ncurses nls openmp pam pcre pic pie readline seccomp split-usr ssl ssp test test-rust unicode xattr xtpax zlib" ABI_X86="64" ELIBC="musl" KERNEL="linux" PYTHON_TARGETS="python3_10 python3_11" Unset: ADDR2LINE, AR, ARFLAGS, AS, ASFLAGS, CC, CCLD, CONFIG_SHELL, CPP, CPPFLAGS, CTARGET, CXX, CXXFILT, ELFEDIT, EXTRA_ECONF, F77FLAGS, FC, GCOV, GPROF, LC_ALL, LD, LFLAGS, LIBTOOL, LINGUAS, MAKE, MAKEFLAGS, NM, OBJCOPY, OBJDUMP, PORTAGE_BINHOST, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS, PYTHONPATH, RANLIB, READELF, RUSTFLAGS, SIZE, STRINGS, STRIP, YACC, YFLAGS ############################## # emerge history (qlop -mv): # ############################## 2024-01-28T16:05:06 >>> media-fonts/stix-fonts-2.11 2024-01-28T16:05:05 >>> media-fonts/dejavu-2.37 2024-01-28T16:05:15 >>> virtual/fortran-0-r1 2024-01-28T16:05:16 >>> dev-cpp/eigen-3.4.0-r2 2024-01-28T16:05:16 >>> sys-libs/timezone-data-2023d 2024-01-28T16:05:18 >>> dev-libs/libltdl-2.4.7-r1 2024-01-28T16:05:17 >>> dev-build/b2-5.0.0 2024-01-28T16:05:19 >>> media-libs/qhull-2020.2-r3 2024-01-28T16:05:20 >>> media-libs/libwebp-1.3.2 2024-01-28T16:05:19 >>> dev-cpp/catch-3.5.2 2024-01-28T16:05:37 >>> dev-util/patchelf-0.18.0 2024-01-28T16:05:39 >>> dev-python/pytz-2023.3_p1 2024-01-28T16:05:38 >>> media-gfx/imagemagick-7.1.1.25 2024-01-28T16:05:40 >>> dev-python/six-1.16.0-r1 2024-01-28T16:05:36 >>> sci-libs/lapack-3.12.0 2024-01-28T16:05:40 >>> dev-python/pillow-10.2.0 2024-01-28T16:05:37 >>> dev-libs/boost-1.84.0-r3 2024-01-28T16:05:58 >>> virtual/cblas-3.8 2024-01-28T16:05:59 >>> virtual/lapack-3.10 2024-01-28T16:06:00 >>> virtual/imagemagick-tools-0-r1 2024-01-28T16:06:01 >>> dev-python/cycler-0.12.1 2024-01-28T16:06:02 >>> dev-python/pyproject-metadata-0.7.1 2024-01-28T16:06:01 >>> dev-python/python-dateutil-2.8.2-r1 2024-01-28T16:06:03 >>> dev-python/cppy-1.2.1-r1 2024-01-28T16:06:04 >>> dev-python/commonmark-0.9.1-r1 2024-01-28T16:06:04 >>> dev-python/wurlitzer-3.0.3 2024-01-28T16:06:08 >>> dev-python/pybind11-2.11.1 2024-01-28T16:06:20 >>> dev-python/numpy-1.26.3 2024-01-28T16:06:20 >>> dev-python/meson-python-0.15.0 2024-01-28T16:06:23 >>> dev-python/kiwisolver-1.4.5 2024-01-28T16:06:25 >>> dev-python/fs-2.4.16 2024-01-28T16:06:26 >>> dev-python/recommonmark-0.7.1-r1 2024-01-28T16:06:41 >>> dev-python/contourpy-1.2.0 2024-01-28T16:06:42 >>> dev-python/fonttools-4.47.2 2024-01-28T16:06:47 >>> dev-python/matplotlib-3.8.2-r1 2024-01-28T16:06:54 >>> dev-python/pytest-mpl-0.16.1 ####################################### # installed packages (qlist -ICvUSS): # ####################################### acct-group/audio-0-r2:0 acct-group/cdrom-0-r2:0 acct-group/dialout-0-r2:0 acct-group/disk-0-r2:0 acct-group/floppy-0-r1:0 acct-group/input-0-r2:0 acct-group/kmem-0-r2:0 acct-group/kvm-0-r2:0 acct-group/lp-0-r2:0 acct-group/man-0-r2:0 acct-group/messagebus-0-r2:0 acct-group/portage-0-r1:0 acct-group/render-0-r2:0 acct-group/root-0-r1:0 acct-group/sgx-0-r1:0 acct-group/sshd-0-r2:0 acct-group/tape-0-r2:0 acct-group/tty-0-r2:0 acct-group/usb-0-r2:0 acct-group/video-0-r2:0 acct-user/man-1-r2:0 acct-user/messagebus-0-r2:0 acct-user/portage-0-r2:0 acct-user/sshd-0-r2:0 app-admin/eselect-1.4.27-r1:0 -doc -emacs -vim-syntax app-admin/perl-cleaner-2.31:0 -pkgcore app-alternatives/awk-4:0 -busybox gawk -mawk -nawk split-usr app-alternatives/bc-0:0 -gh gnu app-alternatives/bzip2-1:0 -lbzip2 -pbzip2 reference split-usr app-alternatives/cpio-0:0 gnu -libarchive split-usr app-alternatives/gzip-1:0 -pigz reference split-usr app-alternatives/lex-0-r1:0 flex -reflex app-alternatives/ninja-1:0 reference -samurai app-alternatives/sh-0:0 bash -busybox -dash -ksh -lksh -mksh app-alternatives/tar-0:0 gnu -libarchive split-usr app-alternatives/yacc-1-r2:0 bison -byacc -reference app-arch/bzip2-1.0.8-r4:0/1 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 split-usr -static -static-libs -verify-sig app-arch/cpio-2.15:0 nls app-arch/gzip-1.13:0 pic -static -verify-sig app-arch/libarchive-3.7.2:0/13 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 acl -blake2 bzip2 e2fsprogs -expat iconv -lz4 lzma -lzo -nettle -static-libs -verify-sig xattr -zstd app-arch/tar-1.35:0 acl -minimal nls -selinux -verify-sig xattr app-arch/unzip-6.0_p27-r1:0 bzip2 -natspec unicode app-arch/xz-utils-5.4.6:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc extra-filters nls -pgo split-usr -static-libs -verify-sig app-arch/zstd-1.5.5:0/1 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -lz4 lzma split-usr -static-libs -test zlib app-crypt/gnupg-2.4.3-r1:0 bzip2 -doc -ldap nls readline -selinux smartcard ssl -test tofu -tools -tpm -usb -user-socket -verify-sig -wks-server app-crypt/gpgme-1.23.2:1/11.6.15.2 -common-lisp cxx debug -python python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -qt5 -qt6 -static-libs -test -verify-sig app-crypt/libb2-0.98.1-r3:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -native-cflags openmp -static-libs app-crypt/libmd-1.1.0:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 app-crypt/pinentry-1.2.1-r4:0 -X -caps -efl -emacs -gtk -keyring ncurses -qt5 -verify-sig -wayland app-crypt/rhash-1.4.4-r1:0/1 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 debug nls ssl -static-libs app-editors/nano-7.2-r1:0 -debug -justify -magic -minimal ncurses nls spell -static unicode app-eselect/eselect-fontconfig-20220403:0 app-eselect/eselect-iptables-20220320:0 app-eselect/eselect-lib-bin-symlink-0.1.1-r1:0 app-eselect/eselect-pinentry-0.7.3:0 app-misc/ca-certificates-20230311.3.96.1:0 -cacert app-misc/editor-wrapper-4-r1:0 app-misc/mime-types-2.1.54:0 -nginx app-misc/pax-utils-1.3.7:0 -caps -man -python -python_single_target_python3_10 python_single_target_python3_11 -seccomp -test app-misc/tmux-3.3a-r1:0 debug -selinux -systemd -utempter -vim-syntax app-portage/eix-0.36.7:0 debug -doc nls -sqlite app-portage/elt-patches-20240116:0 app-portage/gemato-20.5:0 gpg -pretty-log -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test -tools app-portage/gentoolkit-0.6.5:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 app-portage/getuto-1.9.1:0 -test app-portage/portage-utils-0.96.1:0 openmp qmanifest qtegrity -static app-shells/bash-5.2_p26:0 -afs -bashlogger -examples -mem-scramble net nls -pgo -plugins readline -verify-sig app-shells/bash-completion-2.11:0 eselect -test app-shells/gentoo-bashcomp-20230313:0 app-shells/push-3.4:0 app-shells/quoter-4.2:0 app-text/ansifilter-2.20:0 -gui -verify-sig app-text/asciidoc-10.2.0:0 -python_single_target_pypy3 -python_single_target_python3_10 python_single_target_python3_11 -python_single_target_python3_12 app-text/build-docbook-catalog-2.4:0 app-text/docbook-xml-dtd-4.5-r2:4.5 app-text/docbook-xml-dtd-4.4-r3:4.4 app-text/docbook-xml-dtd-4.2-r3:4.2 app-text/docbook-xml-dtd-4.1.2-r7:4.1.2 app-text/docbook-xsl-ns-stylesheets-1.79.1:0 -ruby app-text/docbook-xsl-stylesheets-1.79.1-r4:0 -ruby app-text/manpager-1:0 app-text/sgml-common-0.6.3-r7:0 app-text/xmlto-0.0.28-r11:0 -latex text dev-build/autoconf-2.72-r1:2.72 -emacs -verify-sig dev-build/autoconf-archive-2023.02.20:0 dev-build/autoconf-wrapper-20231224:0 dev-build/automake-1.16.5-r1:1.16 -test dev-build/automake-wrapper-20221207:0 dev-build/b2-5.0.0:0 -examples dev-build/cmake-3.28.1-r1:0 -dap -doc -gui ncurses -qt6 -test -test -verify-sig dev-build/gtk-doc-am-1.33.2:0 dev-build/libtool-2.4.7-r2:2 -vanilla dev-build/make-4.4.1-r1:0 -guile nls -static -verify-sig dev-build/meson-1.3.1-r1:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test -verify-sig dev-build/meson-format-array-0:0 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 dev-build/ninja-1.11.1-r4:0 -doc -test dev-cpp/catch-3.5.2:0 -test dev-cpp/eigen-3.4.0-r2:3 -adolc -boost -cholmod -clang -cpu_flags_arm_neon -cpu_flags_ppc_altivec -cpu_flags_ppc_vsx cpu_flags_x86_avx cpu_flags_x86_avx2 -cpu_flags_x86_avx512dq -cpu_flags_x86_avx512f cpu_flags_x86_f16c cpu_flags_x86_fma3 cpu_flags_x86_popcnt cpu_flags_x86_sse cpu_flags_x86_sse2 cpu_flags_x86_sse3 cpu_flags_x86_sse4_1 cpu_flags_x86_sse4_2 cpu_flags_x86_ssse3 -cuda debug -doc -fftw -hip -klu -lapack -mathjax -opengl openmp -pastix -sparsehash -spqr -superlu -test -umfpack dev-db/sqlite-3.44.2-r2:3 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 debug -doc -icu readline -secure-delete -static-libs -tcl -test -tools dev-lang/nasm-2.16.01-r1:0 -doc dev-lang/perl-5.38.2-r1:0/5.38 -berkdb debug -doc -gdbm ithreads -minimal -quadmath dev-lang/python-3.12.1_p1:3.12 -bluetooth -build debug ensurepip -examples gdbm -libedit ncurses -pgo readline sqlite ssl -test -tk -valgrind -verify-sig dev-lang/python-3.11.7:3.11 -bluetooth -build debug ensurepip -examples gdbm -libedit ncurses -pgo readline sqlite ssl -test tk -valgrind -verify-sig dev-lang/python-3.10.13:3.10 -bluetooth -build debug ensurepip -examples gdbm -libedit ncurses -pgo readline sqlite ssl -test tk -valgrind -verify-sig xml dev-lang/python-exec-2.4.10:2 native-symlinks python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_12 -test dev-lang/python-exec-conf-2.4.6:2 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 dev-lang/tcl-8.6.13-r1:0/8.6 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 debug threads dev-lang/tk-8.6.13:0/8.6 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -aqua debug -test threads -truetype -xscreensaver dev-libs/boehm-gc-8.2.4:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -cxx large -static-libs threads dev-libs/boost-1.84.0-r3:0/1.84.0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 bzip2 context debug -doc -icu -lzma -mpi nls -numpy -python python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 stacktrace -tools zlib -zstd dev-libs/elfutils-0.190:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 bzip2 -debuginfod -lzma nls -static-libs -test utils -verify-sig -zstd dev-libs/expat-2.5.0:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -examples -static-libs -test unicode dev-libs/glib-2.78.4-r1:2 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -dbus debug elf -gtk-doc mime -selinux -static-libs -sysprof -systemtap -test -utils xattr dev-libs/gmp-6.3.0-r1:0/10.4 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 asm cpudetection cxx -doc pic -static-libs dev-libs/gobject-introspection-1.78.1:0 -doctool -gtk-doc -python_single_target_python3_10 python_single_target_python3_11 -test dev-libs/gobject-introspection-common-1.78.1:0 dev-libs/icu-74.1:0/74.1 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 debug -doc -examples -static-libs -test -verify-sig dev-libs/isl-0.24-r2:0/23 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -static-libs dev-libs/jsoncpp-1.9.5:0/25 -doc -test dev-libs/libassuan-2.5.6:0 -verify-sig dev-libs/libatomic_ops-7.8.2:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 dev-libs/libbsd-0.11.8:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -static-libs -verify-sig dev-libs/libevent-2.1.12-r1:0/2.1-7 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 clock-gettime debug -malloc-replacement ssl -static-libs -test -verbose-debug -verify-sig dev-libs/libffi-3.4.4-r4:0/8 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 debug -exec-static-trampoline -pax-kernel -static-libs -test dev-libs/libgcrypt-1.10.3-r1:0/20 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 asm -cpu_flags_arm_aes -cpu_flags_arm_neon -cpu_flags_arm_sha1 -cpu_flags_arm_sha2 -cpu_flags_ppc_altivec -cpu_flags_ppc_vsx2 -cpu_flags_ppc_vsx3 cpu_flags_x86_aes cpu_flags_x86_avx cpu_flags_x86_avx2 -cpu_flags_x86_padlock -cpu_flags_x86_sha cpu_flags_x86_sse4_1 -doc getentropy -static-libs -verify-sig dev-libs/libgpg-error-1.47-r1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -common-lisp nls -static-libs -test -verify-sig dev-libs/libksba-1.6.5:0 -static-libs -verify-sig dev-libs/libltdl-2.4.7-r1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -static-libs dev-libs/libpcre2-10.42-r1:0/3 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 bzip2 -jit -libedit pcre16 pcre32 readline split-usr -static-libs unicode -valgrind -verify-sig zlib dev-libs/libpipeline-1.5.7:0 -test dev-libs/libtasn1-4.19.0:0/6 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -static-libs -test -verify-sig dev-libs/libunistring-1.1-r1:0/5 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc -static-libs dev-libs/libuv-1.47.0-r1:0/1 dev-libs/libxml2-2.12.4:2 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -debug -examples ftp -icu -lzma python python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 readline -static-libs -test dev-libs/libxslt-1.1.39:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 crypt debug -examples -python python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -static-libs dev-libs/lzo-2.10:2 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -examples split-usr -static-libs dev-libs/mpc-1.3.1:0/3 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -static-libs dev-libs/mpfr-4.2.1:0/6 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -static-libs -verify-sig dev-libs/nettle-3.9.1:0/8-6 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 asm -cpu_flags_arm_aes -cpu_flags_arm_neon -cpu_flags_arm_sha1 -cpu_flags_arm_sha2 -cpu_flags_ppc_altivec -cpu_flags_ppc_vsx2 -cpu_flags_ppc_vsx3 cpu_flags_x86_aes cpu_flags_x86_pclmul -cpu_flags_x86_sha -doc gmp -static-libs -verify-sig dev-libs/npth-1.6-r2:0 -test dev-libs/openssl-3.1.4:0/3 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 asm cpu_flags_x86_sse2 -fips -ktls -rfc3779 -sctp -static-libs -test -tls-compression -vanilla -verify-sig -verify-sig -weak-ssl-ciphers dev-libs/popt-1.19-r1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 nls -static-libs dev-perl/Encode-Locale-1.50.0-r1:0 -test dev-perl/File-BaseDir-0.90.0:0 -test dev-perl/File-DesktopEntry-0.220.0-r1:0 -test dev-perl/File-MimeInfo-0.330.0:0 -test dev-perl/IO-Socket-SSL-2.83.0:0 -examples -idn -test dev-perl/IPC-System-Simple-1.300.0:0 -test dev-perl/Locale-gettext-1.70.0-r1:0 -test dev-perl/Mozilla-CA-20999999-r1:0 -test dev-perl/Net-SSLeay-1.920.0-r1:0 -examples -examples -minimal -test dev-perl/Regexp-IPv6-0.30.0-r2:0 -test dev-perl/URI-5.210.0:0 -test dev-python/alabaster-0.7.16:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 dev-python/appdirs-1.4.4-r3:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 dev-python/Babel-2.14.0:0 -doc -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/certifi-3021.3.16-r4:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/charset-normalizer-3.3.2:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/commonmark-0.9.1-r1:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/contourpy-1.2.0:0 debug -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 test dev-python/cppy-1.2.1-r1:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/cycler-0.12.1:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 test dev-python/cython-3.0.8:0 debug -doc -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/docutils-0.20.1-r1:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 dev-python/editables-0.5:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/ensurepip-pip-23.3.2:0 dev-python/ensurepip-setuptools-69.0.3:0 dev-python/ensurepip-wheels-100:0 dev-python/exceptiongroup-1.2.0:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/execnet-2.0.2:0 -doc -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/flit-core-3.9.0:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/flit_scm-1.7.0:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 dev-python/fonttools-4.47.2:0 debug native-extensions -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test -test dev-python/fs-2.4.16:0 doc -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/gentoo-common-1:0 dev-python/gpep517-15:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/hatch-vcs-0.4.0:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/hatchling-1.21.1:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/idna-3.6:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/imagesize-1.4.1:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/iniconfig-2.0.0:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/installer-0.7.0:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/jaraco-context-4.3.0:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/jaraco-functools-4.0.0:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/jaraco-text-3.12.0:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/jinja-3.1.3:0 -doc -examples -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/kiwisolver-1.4.5:0 debug -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 test dev-python/lxml-5.1.0:0 debug -doc -examples -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test threads dev-python/markupsafe-2.1.4:0 debug -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/matplotlib-3.8.2-r1:0 -cairo debug -doc -excel -gtk3 -latex -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -qt5 -test -test -tk -webagg -wxwidgets dev-python/meson-python-0.15.0:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/more-itertools-10.2.0:0 doc -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/nspektr-0.5.0:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 test dev-python/numpy-1.26.3:0 debug lapack -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/olefile-0.47:0 -doc -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/ordered-set-4.1.0:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 test dev-python/packaging-23.2:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/pathspec-0.12.1:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 test dev-python/pillow-10.2.0:0 debug -examples -imagequant jpeg -jpeg2k -lcms -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test -test -tiff -tk -truetype webp -xcb zlib dev-python/platformdirs-4.1.0:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 test dev-python/pluggy-1.4.0:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 test dev-python/psutil-5.9.8:0 debug -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/pybind11-2.11.1:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 test dev-python/pygments-2.17.2:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 test dev-python/pyparsing-3.1.1:0 -examples -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 test dev-python/pypax-0.9.5-r1:0 debug -ptpax python_targets_python3_10 python_targets_python3_11 xtpax dev-python/pyproject-metadata-0.7.1:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 test dev-python/PySocks-1.7.1-r2:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 dev-python/pytest-7.4.4:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/pytest-mock-3.12.0:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/pytest-mpl-0.16.1:0 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/pytest-xdist-3.5.0:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/python-dateutil-2.8.2-r1:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/pytz-2023.3_p1:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/recommonmark-0.7.1-r1:0 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/requests-2.31.0:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -socks5 -test test-rust dev-python/setuptools-69.0.3:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/setuptools-scm-8.0.4:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/six-1.16.0-r1:0 -doc -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/snowballstemmer-2.2.0-r1:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 dev-python/sphinx-7.2.6:0 -doc -latex -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/sphinx-rtd-theme-2.0.0:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/sphinxcontrib-applehelp-1.0.8:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/sphinxcontrib-devhelp-1.0.6:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/sphinxcontrib-htmlhelp-2.0.5:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/sphinxcontrib-jquery-4.1:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/sphinxcontrib-jsmath-1.0.1-r3:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/sphinxcontrib-qthelp-1.0.7:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/sphinxcontrib-serializinghtml-1.1.10:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/tomli-2.0.1-r1:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/trove-classifiers-2024.1.8:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/typing-extensions-4.9.0:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/unittest-or-fail-2:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 dev-python/urllib3-2.1.0:0 -brotli -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test -zstd dev-python/wcag-contrast-ratio-0.9-r1:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/wheel-0.42.0:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-python/wurlitzer-3.0.3:0 -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 -test dev-tcltk/blt-2.5.3-r3:0/25 -jpeg -static-libs dev-tcltk/tix-8.4.3-r4:0 dev-util/checkbashisms-2.23.5:0 dev-util/desktop-file-utils-0.27-r1:0 dev-util/glib-utils-2.78.4:0 -python_single_target_python3_10 python_single_target_python3_11 -python_single_target_python3_12 dev-util/gperf-3.1-r2:0 dev-util/patchelf-0.18.0:0 dev-util/pkgconf-2.1.0-r1:0/4 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -test dev-util/re2c-3.1:0 debug -test dev-vcs/git-2.43.0:0 blksha1 -cgi curl -cvs -doc gpg -highlight iconv -keyring -mediawiki nls pcre -perforce -perl -python_single_target_python3_10 python_single_target_python3_11 -python_single_target_python3_12 safe-directory -selinux -subversion -test -tk webdav -xinetd media-fonts/dejavu-2.37:0 -X -fontforge media-fonts/liberation-fonts-2.1.5:0 -X -X -fontforge media-fonts/stix-fonts-2.11:0 -X media-gfx/graphite2-1.3.14_p20210810-r3:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -perl -test media-gfx/imagemagick-7.1.1.25:0/7.1.1-18 -X bzip2 -corefonts cxx -djvu -fftw -fontconfig -fpx -graphviz hardened -hdri -heif -jbig jpeg -jpeg2k -jpegxl -lcms -lqr -lzma -opencl -openexr openmp -pango -perl png -postscript -q32 -q8 -raw -static-libs -svg -test tiff -truetype -webp -wmf -xml -zip zlib media-libs/fontconfig-2.15.0:1.0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc nls -test media-libs/freetype-2.13.2:2 -X -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 adobe-cff -brotli bzip2 cleartype-hinting debug -doc -fontforge harfbuzz png -static-libs -svg -utils media-libs/harfbuzz-8.3.0:0/6.0.0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 cairo debug -doc -experimental glib graphite icu introspection -test truetype media-libs/lcms-2.16:2 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc -jpeg -static-libs -tiff media-libs/libjpeg-turbo-3.0.1:0/0.2 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -cpu_flags_arm_neon -java -java -static-libs media-libs/libpng-1.6.41:0/16 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -apng -cpu_flags_arm_neon cpu_flags_x86_sse -static-libs -test media-libs/libwebp-1.3.2:0/7 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -cpu_flags_arm_neon cpu_flags_x86_sse2 cpu_flags_x86_sse4_1 -gif jpeg -opengl png -static-libs -swap-16bit-csp -tiff media-libs/openjpeg-2.5.0-r6:2/7 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc -test media-libs/qhull-2020.2-r3:0/8 -doc -static-libs media-libs/tiff-4.6.0:0/6 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 cxx -jbig jpeg -lzma -static-libs -test -verify-sig -webp zlib -zstd net-dns/c-ares-1.25.0-r1:0/2 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -static-libs -test -verify-sig net-dns/libidn2-2.3.4-r2:0/2 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 nls -static-libs -verify-sig net-firewall/iptables-1.8.10:0/1.8.3 -conntrack -netlink -nftables -pcap split-usr -static-libs net-libs/gnutls-3.8.3:0/30.30 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -brotli cxx -dane -doc -examples idn nls openssl -pkcs11 seccomp -sslv2 -sslv3 -static-libs -test -test-full tls-heartbeat -tools -verify-sig zlib -zstd net-libs/libmnl-1.0.5:0/0.2.0 -examples -verify-sig net-libs/libpsl-0.21.5:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -icu idn -test net-libs/nghttp2-1.58.0:0/1.14 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 debug -hpack-tools -jemalloc -static-libs -systemd -test -utils -xml net-misc/curl-8.5.0-r3:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 adns alt-svc -brotli -curl_ssl_gnutls -curl_ssl_mbedtls curl_ssl_openssl -curl_ssl_rustls ftp -gnutls -gopher hsts http2 -idn imap -kerberos -ldap -mbedtls -nghttp3 openssl pop3 progress-meter psl -rtmp -rustls -samba smtp -ssh ssl -sslv3 -static-libs -telnet -test tftp -verify-sig -websockets -zstd net-misc/dhcpcd-10.0.6-r1:0 debug embedded ipv6 -privsep udev net-misc/iputils-20231222:0 arping -caps -clockdiff -doc filecaps -idn nls -test -tracepath net-misc/netifrc-0.7.8:0 dhcp net-misc/openssh-contrib-9.5_p1:0 -X -X509 -abi_mips_n32 -audit debug -hpn -kerberos -ldns -libedit -livecd pam pie -security-key -selinux ssl -static -test -verify-sig -xmss net-misc/rsync-3.2.7-r4:0 acl -examples iconv -lz4 -python_single_target_python3_10 python_single_target_python3_11 -rrsync ssl -stunnel -system-zlib -verify-sig xattr -xxhash -zstd net-misc/wget-1.21.4:0 -cookie-check debug -gnutls -idn ipv6 -metalink nls -ntlm pcre ssl -static -test -uuid -verify-sig zlib perl-core/File-Temp-0.231.100:0 perl-core/Math-BigInt-1.999.842:0 -examples -test sci-libs/lapack-3.12.0:0 -deprecated -doc -eselect-ldso -lapacke -test sec-keys/openpgp-keys-gentoo-release-20230329:0 -test sys-apps/acl-2.3.2:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 nls split-usr -static-libs sys-apps/attr-2.5.2:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 debug nls split-usr -static-libs sys-apps/baselayout-2.14-r1:0 -build split-usr sys-apps/coreutils-9.4:0 acl -caps -gmp -hostname -kill -multicall nls openssl -selinux split-usr -static -test -vanilla -verify-sig xattr sys-apps/dbus-1.15.8:0 X -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 debug -doc elogind -selinux -static-libs -systemd -test -test -valgrind sys-apps/debianutils-5.14:0 installkernel -static sys-apps/diffutils-3.10:0 nls -verify-sig sys-apps/elfix-0.9.5:0 -ptpax -test xtpax sys-apps/file-5.45-r3:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 bzip2 -lzip -lzma -python python_targets_python3_10 python_targets_python3_11 -seccomp -static-libs -verify-sig zlib -zstd sys-apps/findutils-4.9.0-r2:0 nls -selinux -static -test -verify-sig sys-apps/gawk-5.3.0:0 -mpfr nls -pma readline -verify-sig sys-apps/gentoo-functions-0.19:0 sys-apps/grep-3.11:0 egrep-fgrep nls pcre -static -verify-sig sys-apps/groff-1.23.0:0 -X -examples -uchardet sys-apps/help2man-1.49.3:0 nls sys-apps/install-xattr-0.8-r1:0 sys-apps/iproute2-6.6.0-r3:0 -atm -berkdb -bpf -caps -elf iptables -minimal -nfs -selinux sys-apps/kbd-2.6.4:0 nls pam -selinux -test sys-apps/kmod-31:0 debug -doc lzma -pkcs7 -python python_targets_python3_10 python_targets_python3_11 -static-libs tools zlib zstd sys-apps/less-643-r1:0 pcre -test sys-apps/man-db-2.12.0:0 manpager -nls seccomp -selinux -static-libs zlib sys-apps/miscfiles-1.5-r4:0 -minimal sys-apps/net-tools-2.10:0 arp hostname ipv6 -nis nls -plipconfig -selinux -slattach -static sys-apps/openrc-0.53:0 -audit -bash debug ncurses netifrc -newnet pam -s6 -selinux -sysv-utils sysvinit unicode sys-apps/portage-3.0.61-r1:0 -apidoc -build -doc -gentoo-dev ipc native-extensions -python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 rsync-verify -selinux -test xattr sys-apps/sandbox-2.38:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 nnp sys-apps/sed-4.9:0 acl nls -selinux -static -verify-sig sys-apps/shadow-4.14.3:0/4 acl -audit -cracklib nls pam -selinux -skey split-usr -su -systemd -verify-sig xattr sys-apps/systemd-utils-254.9:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 acl -boot -kernel-install kmod -python_single_target_python3_10 python_single_target_python3_11 -python_single_target_python3_12 -secureboot -selinux split-usr -split-usr -sysusers -test tmpfiles udev -ukify sys-apps/sysvinit-3.08:0 -ibm -nls -selinux -static -verify-sig sys-apps/texinfo-7.1-r1:0 nls standalone -static sys-apps/util-linux-2.39.3-r1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -audit -build -caps cramfs -cryptsetup -fdformat hardlink -kill logger -magic ncurses -nls pam -python python_targets_python3_10 python_targets_python3_11 readline -rtas -selinux -slang split-usr -static-libs su suid -systemd -test -tty-helpers -udev unicode -verify-sig sys-apps/which-2.21:0 sys-auth/elogind-252.9:0 acl -audit cgroup-hybrid debug -doc pam -policykit -selinux -test sys-auth/pambase-20240119:0 -caps -debug elogind -gnome-keyring -homed -minimal -mktemp nullok -pam_krb5 -pam_ssh passwdqc -pwhistory -pwquality -securetty -selinux sha512 -systemd -yescrypt sys-auth/passwdqc-2.0.3-r1:0 sys-devel/bc-1.07.1-r6:0 -libedit readline -static sys-devel/binutils-2.41-r5:2.41 cet -debuginfod -doc -gold -gprofng hardened -multitarget nls -pgo plugins -static-libs -test -vanilla -zstd sys-devel/binutils-config-5.5:0 native-symlinks sys-devel/bison-3.8.2-r2:0 -examples nls -static -test -verify-sig sys-devel/flex-2.6.4-r6:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 nls -static -test sys-devel/gcc-13.2.1_p20240113-r1:13 -ada cet -custom-cflags cxx -d -debug default-stack-clash-protection default-znow -doc -fixed-point fortran -go graphite hardened -ieee-long-double -jit -libssp lto -modula2 -multilib -nls -objc -objc++ -objc-gc openmp -pch -pgo pie -sanitize ssp -systemtap -test -valgrind -vanilla -vtv -zstd sys-devel/gcc-config-2.11:0 cc-wrappers native-symlinks sys-devel/gettext-0.22.4:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 acl cxx -doc -emacs -git -java -java ncurses -nls openmp -static-libs -verify-sig xattr sys-devel/gnuconfig-20230731:0 sys-devel/m4-1.4.19-r2:0 -examples nls -verify-sig sys-devel/patch-2.7.6-r5:0 -static -test -verify-sig xattr sys-fs/e2fsprogs-1.47.0-r2:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -cron -fuse -nls split-usr -static-libs -test tools sys-fs/udev-init-scripts-35:0 sys-kernel/dracut-060_pre20240104:0 -selinux -test sys-kernel/gentoo-kernel-bin-6.1.75:6.1.75 initramfs -test sys-kernel/installkernel-18:0 dracut -grub -module-rebuild -systemd -uki -ukify sys-kernel/linux-headers-6.7:0 -headers-only sys-libs/argp-standalone-1.5.0:0 -static-libs sys-libs/fts-standalone-1.2.7:0 -static-libs sys-libs/gdbm-1.23:0/6 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 berkdb nls readline -static-libs -test -verify-sig sys-libs/libcap-2.69:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 pam split-usr -static-libs -tools sys-libs/libseccomp-2.5.5:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -experimental-loong -python python_targets_python3_10 python_targets_python3_11 -static-libs -test sys-libs/libxcrypt-4.4.36-r1:0/1 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 compat -headers-only split-usr -static-libs system -test sys-libs/musl-1.2.4-r1:0 -crypt -headers-only split-usr -verify-sig sys-libs/ncurses-6.4_p20230401:0/6 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -ada cxx debug -doc -gpm -minimal -profile split-usr -split-usr -stack-realign -static-libs -test tinfo -trace -verify-sig sys-libs/obstack-standalone-1.2.3:0 -static-libs sys-libs/pam-1.5.3:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -audit -berkdb -debug -filecaps -nis -selinux split-usr sys-libs/queue-standalone-0.1-r1:0 sys-libs/readline-8.2_p10:0/8 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 split-usr -static-libs unicode -utils -verify-sig sys-libs/timezone-data-2023d:0 -leaps-timezone nls -zic-slim sys-libs/zlib-1.3.1:0/1 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 minizip split-usr -static-libs -verify-sig sys-process/procps-4.0.4:0/0-ng -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 elogind kill -modern-top ncurses nls -selinux split-usr -static-libs -systemd -test unicode sys-process/psmisc-23.6:0 -X -apparmor nls -selinux -test virtual/acl-0-r2:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -static-libs virtual/cblas-3.8:0 -eselect-ldso virtual/dev-manager-0-r2:0 virtual/dist-kernel-6.1.75:0/6.1.75 virtual/editor-0-r7:0 virtual/fortran-0-r1:0 openmp virtual/imagemagick-tools-0-r1:0 jpeg -perl -png -svg tiff virtual/lapack-3.10:0 -eselect-ldso virtual/libc-1-r1:0 virtual/libcrypt-2-r1:0/2 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -static-libs virtual/libelf-3-r1:0/1 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 virtual/libiconv-0-r2:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 virtual/libintl-0-r2:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 virtual/libudev-251-r2:0/1 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -systemd virtual/man-0-r4:0 virtual/openssh-0:0 ssl virtual/os-headers-0-r2:0 virtual/package-manager-1:0 virtual/pager-0-r1:0 virtual/perl-bignum-0.660.0:0 virtual/perl-Carp-1.540.0:0 virtual/perl-CPAN-2.360.0:0 virtual/perl-Data-Dumper-2.188.0:0 virtual/perl-Encode-3.190.0:0 virtual/perl-Exporter-5.770.0-r1:0 virtual/perl-ExtUtils-MakeMaker-7.700.0:0 virtual/perl-File-Path-2.180.0-r2:0 virtual/perl-File-Spec-3.880.0:0 virtual/perl-File-Temp-0.231.100:0 virtual/perl-Getopt-Long-2.540.0:0 virtual/perl-libnet-3.150.0:0 ssl virtual/perl-Math-BigInt-1.999.842:0 virtual/perl-Math-BigInt-FastCalc-0.501.300:0 virtual/perl-Math-BigRat-0.262.400:0 virtual/perl-Math-Complex-1.620.0:0 virtual/perl-MIME-Base64-3.160.100_rc:0 virtual/perl-parent-0.241.0:0 virtual/perl-Scalar-List-Utils-1.630.0:0 virtual/perl-Test-Harness-3.440.0-r1:0 virtual/perl-Unicode-Collate-1.310.0-r1:0 virtual/pkgconfig-2-r1:0 virtual/service-manager-1-r1:0 virtual/ssh-0-r2:0 -minimal virtual/tmpfiles-0-r5:0 -systemd virtual/ttf-fonts-1-r2:0 virtual/udev-217-r7:0 -systemd virtual/w3m-1:0 www-client/pybugz-0.13-r2:0 python_targets_python3_10 python_targets_python3_11 www-client/w3m-0.5.3_p20230121:0 -X -fbcon -gdk-pixbuf -gpm -imlib l10n_ja -lynxkeymap nls -nntp ssl unicode -xface x11-apps/xprop-1.2.6:0 x11-apps/xset-1.2.5:0 x11-base/xcb-proto-1.16.0:0 python_targets_python3_10 python_targets_python3_11 -python_targets_python3_12 x11-base/xorg-proto-2023.2:0 -test x11-libs/cairo-1.18.0:0 X -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -aqua -debug glib -gtk-doc -test x11-libs/libICE-1.1.1-r1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 x11-libs/libSM-1.2.4:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc uuid x11-libs/libX11-1.8.7:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc -test x11-libs/libXau-1.0.11:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc x11-libs/libxcb-1.16-r1:0/1.12 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc -doc -selinux -test xkb x11-libs/libXdmcp-1.1.4-r2:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc x11-libs/libXext-1.3.5:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc x11-libs/libXmu-1.1.4:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc x11-libs/libXrender-0.9.11:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 x11-libs/libXt-1.3.0:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc -test x11-libs/pixman-0.43.0:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -cpu_flags_arm_iwmmxt -cpu_flags_arm_iwmmxt2 -cpu_flags_arm_neon -cpu_flags_ppc_altivec cpu_flags_x86_mmxext cpu_flags_x86_sse2 cpu_flags_x86_ssse3 -loongson2f -static-libs -test x11-libs/xtrans-1.5.0:0 -doc x11-misc/compose-tables-1.8.7:0 x11-misc/shared-mime-info-2.4:0 -test x11-misc/util-macros-1.20.0:0 x11-misc/xdg-utils-1.2.0_beta1_p20231203:0 -dbus -doc -gnome ############# # build.log # ############# >>> Unpacking source... >>> Unpacking pytest-mpl-0.16.1.tar.gz to /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work >>> Source unpacked in /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work >>> Preparing source in /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1 ... * Build system packages: * dev-python/gpep517 : 15 * dev-python/installer : 0.7.0 * dev-python/setuptools : 69.0.3 * dev-python/setuptools-rust : * dev-python/setuptools-scm : 8.0.4 * dev-python/wheel : 0.42.0 >>> Source prepared. >>> Configuring source in /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1 ... >>> Source configured. >>> Compiling source in /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1 ... * python3_10: running distutils-r1_run_phase distutils-r1_python_compile * Building the wheel for pytest-mpl-0.16.1 via setuptools.build_meta python3.10 -m gpep517 build-wheel --prefix=/usr --backend setuptools.build_meta --output-fd 3 --wheel-dir /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/wheel 2024-01-28 16:07:20,568 gpep517 INFO Building wheel via backend setuptools.build_meta WARNING setuptools_scm.pyproject_reading toml section missing 'pyproject.toml does not contain a tool.setuptools_scm section' 2024-01-28 16:07:20,642 root INFO running bdist_wheel 2024-01-28 16:07:20,726 root INFO running build 2024-01-28 16:07:20,726 root INFO running build_py 2024-01-28 16:07:20,733 root INFO creating /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build 2024-01-28 16:07:20,733 root INFO creating /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/lib 2024-01-28 16:07:20,733 root INFO creating /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/lib/pytest_mpl 2024-01-28 16:07:20,733 root INFO copying pytest_mpl/plugin.py -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/lib/pytest_mpl 2024-01-28 16:07:20,734 root INFO copying pytest_mpl/__init__.py -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/lib/pytest_mpl 2024-01-28 16:07:20,734 root INFO creating /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/lib/pytest_mpl/summary 2024-01-28 16:07:20,734 root INFO copying pytest_mpl/summary/html.py -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/lib/pytest_mpl/summary 2024-01-28 16:07:20,735 root INFO copying pytest_mpl/summary/__init__.py -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/lib/pytest_mpl/summary 2024-01-28 16:07:20,735 root INFO running egg_info 2024-01-28 16:07:20,741 root INFO writing pytest_mpl.egg-info/PKG-INFO 2024-01-28 16:07:20,742 root INFO writing dependency_links to pytest_mpl.egg-info/dependency_links.txt 2024-01-28 16:07:20,742 root INFO writing entry points to pytest_mpl.egg-info/entry_points.txt 2024-01-28 16:07:20,743 root INFO writing requirements to pytest_mpl.egg-info/requires.txt 2024-01-28 16:07:20,743 root INFO writing top-level names to pytest_mpl.egg-info/top_level.txt ERROR setuptools_scm._file_finders.git listing git files failed - pretending there aren't any 2024-01-28 16:07:20,775 root INFO reading manifest file 'pytest_mpl.egg-info/SOURCES.txt' 2024-01-28 16:07:20,776 root INFO reading manifest template 'MANIFEST.in' 2024-01-28 16:07:20,792 root INFO adding license file 'LICENSE' 2024-01-28 16:07:20,794 root INFO writing manifest file 'pytest_mpl.egg-info/SOURCES.txt' /usr/lib/python3.10/site-packages/setuptools/command/build_py.py:207: _Warning: Package 'pytest_mpl.summary.templates' is absent from the `packages` configuration. !! ******************************************************************************** ############################ # Package would be ignored # ############################ Python recognizes 'pytest_mpl.summary.templates' as an importable package[^1], but it is absent from setuptools' `packages` configuration. This leads to an ambiguous overall configuration. If you want to distribute this package, please make sure that 'pytest_mpl.summary.templates' is explicitly added to the `packages` configuration field. Alternatively, you can also rely on setuptools' discovery methods (for example by using `find_namespace_packages(...)`/`find_namespace:` instead of `find_packages(...)`/`find:`). You can read more about "package discovery" on setuptools documentation page: - https://setuptools.pypa.io/en/latest/userguide/package_discovery.html If you don't want 'pytest_mpl.summary.templates' to be distributed and are already explicitly excluding 'pytest_mpl.summary.templates' via `find_namespace_packages(...)/find_namespace` or `find_packages(...)/find`, you can try to use `exclude_package_data`, or `include-package-data=False` in combination with a more fine grained `package-data` configuration. You can read more about "package data files" on setuptools documentation page: - https://setuptools.pypa.io/en/latest/userguide/datafiles.html [^1]: For Python, any directory (with suitable naming) can be imported, even if it does not contain any `.py` files. On the other hand, currently there is no concept of package data directory, all directories are treated like packages. ******************************************************************************** !! check.warn(importable) 2024-01-28 16:07:20,797 root INFO creating /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/lib/pytest_mpl/summary/templates 2024-01-28 16:07:20,797 root INFO copying pytest_mpl/summary/templates/base.html -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/lib/pytest_mpl/summary/templates 2024-01-28 16:07:20,797 root INFO copying pytest_mpl/summary/templates/basic.html -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/lib/pytest_mpl/summary/templates 2024-01-28 16:07:20,798 root INFO copying pytest_mpl/summary/templates/extra.js -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/lib/pytest_mpl/summary/templates 2024-01-28 16:07:20,798 root INFO copying pytest_mpl/summary/templates/filter.html -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/lib/pytest_mpl/summary/templates 2024-01-28 16:07:20,799 root INFO copying pytest_mpl/summary/templates/hash.svg -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/lib/pytest_mpl/summary/templates 2024-01-28 16:07:20,799 root INFO copying pytest_mpl/summary/templates/image.svg -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/lib/pytest_mpl/summary/templates 2024-01-28 16:07:20,799 root INFO copying pytest_mpl/summary/templates/navbar.html -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/lib/pytest_mpl/summary/templates 2024-01-28 16:07:20,800 root INFO copying pytest_mpl/summary/templates/result.html -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/lib/pytest_mpl/summary/templates 2024-01-28 16:07:20,800 root INFO copying pytest_mpl/summary/templates/result_images.html -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/lib/pytest_mpl/summary/templates 2024-01-28 16:07:20,800 root INFO copying pytest_mpl/summary/templates/styles.css -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/lib/pytest_mpl/summary/templates 2024-01-28 16:07:20,801 root WARNING warning: build_py: byte-compiling is disabled, skipping. 2024-01-28 16:07:20,816 wheel INFO installing to /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/bdist.linux-x86_64/wheel 2024-01-28 16:07:20,816 root INFO running install 2024-01-28 16:07:20,826 root INFO running install_lib 2024-01-28 16:07:20,833 root INFO creating /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/bdist.linux-x86_64 2024-01-28 16:07:20,834 root INFO creating /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/bdist.linux-x86_64/wheel 2024-01-28 16:07:20,834 root INFO creating /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/bdist.linux-x86_64/wheel/pytest_mpl 2024-01-28 16:07:20,834 root INFO creating /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/bdist.linux-x86_64/wheel/pytest_mpl/summary 2024-01-28 16:07:20,834 root INFO creating /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/bdist.linux-x86_64/wheel/pytest_mpl/summary/templates 2024-01-28 16:07:20,834 root INFO copying /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/lib/pytest_mpl/summary/templates/styles.css -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/bdist.linux-x86_64/wheel/pytest_mpl/summary/templates 2024-01-28 16:07:20,835 root INFO copying /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/lib/pytest_mpl/summary/templates/result_images.html -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/bdist.linux-x86_64/wheel/pytest_mpl/summary/templates 2024-01-28 16:07:20,835 root INFO copying /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/lib/pytest_mpl/summary/templates/result.html -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/bdist.linux-x86_64/wheel/pytest_mpl/summary/templates 2024-01-28 16:07:20,835 root INFO copying /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/lib/pytest_mpl/summary/templates/navbar.html -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/bdist.linux-x86_64/wheel/pytest_mpl/summary/templates 2024-01-28 16:07:20,836 root INFO copying /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/lib/pytest_mpl/summary/templates/image.svg -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/bdist.linux-x86_64/wheel/pytest_mpl/summary/templates 2024-01-28 16:07:20,836 root INFO copying /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/lib/pytest_mpl/summary/templates/hash.svg -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/bdist.linux-x86_64/wheel/pytest_mpl/summary/templates 2024-01-28 16:07:20,836 root INFO copying /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/lib/pytest_mpl/summary/templates/filter.html -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/bdist.linux-x86_64/wheel/pytest_mpl/summary/templates 2024-01-28 16:07:20,837 root INFO copying /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/lib/pytest_mpl/summary/templates/extra.js -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/bdist.linux-x86_64/wheel/pytest_mpl/summary/templates 2024-01-28 16:07:20,837 root INFO copying /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/lib/pytest_mpl/summary/templates/basic.html -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/bdist.linux-x86_64/wheel/pytest_mpl/summary/templates 2024-01-28 16:07:20,837 root INFO copying /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/lib/pytest_mpl/summary/templates/base.html -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/bdist.linux-x86_64/wheel/pytest_mpl/summary/templates 2024-01-28 16:07:20,837 root INFO copying /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/lib/pytest_mpl/summary/__init__.py -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/bdist.linux-x86_64/wheel/pytest_mpl/summary 2024-01-28 16:07:20,838 root INFO copying /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/lib/pytest_mpl/summary/html.py -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/bdist.linux-x86_64/wheel/pytest_mpl/summary 2024-01-28 16:07:20,838 root INFO copying /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/lib/pytest_mpl/__init__.py -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/bdist.linux-x86_64/wheel/pytest_mpl 2024-01-28 16:07:20,838 root INFO copying /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/lib/pytest_mpl/plugin.py -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/bdist.linux-x86_64/wheel/pytest_mpl 2024-01-28 16:07:20,839 root WARNING warning: install_lib: byte-compiling is disabled, skipping. 2024-01-28 16:07:20,839 root INFO running install_egg_info 2024-01-28 16:07:20,845 root INFO Copying pytest_mpl.egg-info to /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/bdist.linux-x86_64/wheel/pytest_mpl-0.16.1-py3.10.egg-info 2024-01-28 16:07:20,847 root INFO running install_scripts 2024-01-28 16:07:20,852 wheel INFO creating /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/bdist.linux-x86_64/wheel/pytest_mpl-0.16.1.dist-info/WHEEL 2024-01-28 16:07:20,852 wheel INFO creating '/var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/wheel/.tmp-mc4lhqdm/pytest_mpl-0.16.1-py3-none-any.whl' and adding '/var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/bdist.linux-x86_64/wheel' to it 2024-01-28 16:07:20,852 wheel INFO adding 'pytest_mpl/__init__.py' 2024-01-28 16:07:20,853 wheel INFO adding 'pytest_mpl/plugin.py' 2024-01-28 16:07:20,853 wheel INFO adding 'pytest_mpl/summary/__init__.py' 2024-01-28 16:07:20,853 wheel INFO adding 'pytest_mpl/summary/html.py' 2024-01-28 16:07:20,854 wheel INFO adding 'pytest_mpl/summary/templates/base.html' 2024-01-28 16:07:20,854 wheel INFO adding 'pytest_mpl/summary/templates/basic.html' 2024-01-28 16:07:20,854 wheel INFO adding 'pytest_mpl/summary/templates/extra.js' 2024-01-28 16:07:20,854 wheel INFO adding 'pytest_mpl/summary/templates/filter.html' 2024-01-28 16:07:20,854 wheel INFO adding 'pytest_mpl/summary/templates/hash.svg' 2024-01-28 16:07:20,855 wheel INFO adding 'pytest_mpl/summary/templates/image.svg' 2024-01-28 16:07:20,855 wheel INFO adding 'pytest_mpl/summary/templates/navbar.html' 2024-01-28 16:07:20,855 wheel INFO adding 'pytest_mpl/summary/templates/result.html' 2024-01-28 16:07:20,855 wheel INFO adding 'pytest_mpl/summary/templates/result_images.html' 2024-01-28 16:07:20,856 wheel INFO adding 'pytest_mpl/summary/templates/styles.css' 2024-01-28 16:07:20,856 wheel INFO adding 'pytest_mpl-0.16.1.dist-info/LICENSE' 2024-01-28 16:07:20,856 wheel INFO adding 'pytest_mpl-0.16.1.dist-info/METADATA' 2024-01-28 16:07:20,856 wheel INFO adding 'pytest_mpl-0.16.1.dist-info/WHEEL' 2024-01-28 16:07:20,857 wheel INFO adding 'pytest_mpl-0.16.1.dist-info/entry_points.txt' 2024-01-28 16:07:20,857 wheel INFO adding 'pytest_mpl-0.16.1.dist-info/top_level.txt' 2024-01-28 16:07:20,857 wheel INFO adding 'pytest_mpl-0.16.1.dist-info/zip-safe' 2024-01-28 16:07:20,857 wheel INFO adding 'pytest_mpl-0.16.1.dist-info/RECORD' 2024-01-28 16:07:20,857 wheel INFO removing /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/build/bdist.linux-x86_64/wheel 2024-01-28 16:07:20,859 gpep517 INFO The backend produced /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/wheel/pytest_mpl-0.16.1-py3-none-any.whl * Installing pytest_mpl-0.16.1-py3-none-any.whl to /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/install python3.10 -m gpep517 install-wheel --destdir=/var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/install --interpreter=/usr/bin/python3.10 --prefix=/usr --optimize=all /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/wheel/pytest_mpl-0.16.1-py3-none-any.whl 2024-01-28 16:07:20,970 gpep517 INFO Installing /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/wheel/pytest_mpl-0.16.1-py3-none-any.whl into /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/install 2024-01-28 16:07:21,003 gpep517 INFO Installation complete * python3_11: running distutils-r1_run_phase distutils-r1_python_compile * Building the wheel for pytest-mpl-0.16.1 via setuptools.build_meta python3.11 -m gpep517 build-wheel --prefix=/usr --backend setuptools.build_meta --output-fd 3 --wheel-dir /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/wheel 2024-01-28 16:07:21,371 gpep517 INFO Building wheel via backend setuptools.build_meta WARNING setuptools_scm.pyproject_reading toml section missing 'pyproject.toml does not contain a tool.setuptools_scm section' 2024-01-28 16:07:21,444 root INFO running bdist_wheel 2024-01-28 16:07:21,520 root INFO running build 2024-01-28 16:07:21,520 root INFO running build_py 2024-01-28 16:07:21,527 root INFO creating /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build 2024-01-28 16:07:21,527 root INFO creating /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/lib 2024-01-28 16:07:21,527 root INFO creating /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/lib/pytest_mpl 2024-01-28 16:07:21,527 root INFO copying pytest_mpl/plugin.py -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/lib/pytest_mpl 2024-01-28 16:07:21,528 root INFO copying pytest_mpl/__init__.py -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/lib/pytest_mpl 2024-01-28 16:07:21,528 root INFO creating /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/lib/pytest_mpl/summary 2024-01-28 16:07:21,528 root INFO copying pytest_mpl/summary/html.py -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/lib/pytest_mpl/summary 2024-01-28 16:07:21,528 root INFO copying pytest_mpl/summary/__init__.py -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/lib/pytest_mpl/summary 2024-01-28 16:07:21,529 root INFO running egg_info 2024-01-28 16:07:21,534 root INFO writing pytest_mpl.egg-info/PKG-INFO 2024-01-28 16:07:21,535 root INFO writing dependency_links to pytest_mpl.egg-info/dependency_links.txt 2024-01-28 16:07:21,535 root INFO writing entry points to pytest_mpl.egg-info/entry_points.txt 2024-01-28 16:07:21,536 root INFO writing requirements to pytest_mpl.egg-info/requires.txt 2024-01-28 16:07:21,536 root INFO writing top-level names to pytest_mpl.egg-info/top_level.txt ERROR setuptools_scm._file_finders.git listing git files failed - pretending there aren't any 2024-01-28 16:07:21,565 root INFO reading manifest file 'pytest_mpl.egg-info/SOURCES.txt' 2024-01-28 16:07:21,566 root INFO reading manifest template 'MANIFEST.in' 2024-01-28 16:07:21,583 root INFO adding license file 'LICENSE' 2024-01-28 16:07:21,585 root INFO writing manifest file 'pytest_mpl.egg-info/SOURCES.txt' /usr/lib/python3.11/site-packages/setuptools/command/build_py.py:207: _Warning: Package 'pytest_mpl.summary.templates' is absent from the `packages` configuration. !! ******************************************************************************** ############################ # Package would be ignored # ############################ Python recognizes 'pytest_mpl.summary.templates' as an importable package[^1], but it is absent from setuptools' `packages` configuration. This leads to an ambiguous overall configuration. If you want to distribute this package, please make sure that 'pytest_mpl.summary.templates' is explicitly added to the `packages` configuration field. Alternatively, you can also rely on setuptools' discovery methods (for example by using `find_namespace_packages(...)`/`find_namespace:` instead of `find_packages(...)`/`find:`). You can read more about "package discovery" on setuptools documentation page: - https://setuptools.pypa.io/en/latest/userguide/package_discovery.html If you don't want 'pytest_mpl.summary.templates' to be distributed and are already explicitly excluding 'pytest_mpl.summary.templates' via `find_namespace_packages(...)/find_namespace` or `find_packages(...)/find`, you can try to use `exclude_package_data`, or `include-package-data=False` in combination with a more fine grained `package-data` configuration. You can read more about "package data files" on setuptools documentation page: - https://setuptools.pypa.io/en/latest/userguide/datafiles.html [^1]: For Python, any directory (with suitable naming) can be imported, even if it does not contain any `.py` files. On the other hand, currently there is no concept of package data directory, all directories are treated like packages. ******************************************************************************** !! check.warn(importable) 2024-01-28 16:07:21,587 root INFO creating /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/lib/pytest_mpl/summary/templates 2024-01-28 16:07:21,587 root INFO copying pytest_mpl/summary/templates/base.html -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/lib/pytest_mpl/summary/templates 2024-01-28 16:07:21,588 root INFO copying pytest_mpl/summary/templates/basic.html -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/lib/pytest_mpl/summary/templates 2024-01-28 16:07:21,588 root INFO copying pytest_mpl/summary/templates/extra.js -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/lib/pytest_mpl/summary/templates 2024-01-28 16:07:21,588 root INFO copying pytest_mpl/summary/templates/filter.html -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/lib/pytest_mpl/summary/templates 2024-01-28 16:07:21,589 root INFO copying pytest_mpl/summary/templates/hash.svg -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/lib/pytest_mpl/summary/templates 2024-01-28 16:07:21,589 root INFO copying pytest_mpl/summary/templates/image.svg -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/lib/pytest_mpl/summary/templates 2024-01-28 16:07:21,590 root INFO copying pytest_mpl/summary/templates/navbar.html -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/lib/pytest_mpl/summary/templates 2024-01-28 16:07:21,590 root INFO copying pytest_mpl/summary/templates/result.html -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/lib/pytest_mpl/summary/templates 2024-01-28 16:07:21,590 root INFO copying pytest_mpl/summary/templates/result_images.html -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/lib/pytest_mpl/summary/templates 2024-01-28 16:07:21,591 root INFO copying pytest_mpl/summary/templates/styles.css -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/lib/pytest_mpl/summary/templates 2024-01-28 16:07:21,591 root WARNING warning: build_py: byte-compiling is disabled, skipping. 2024-01-28 16:07:21,605 wheel INFO installing to /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/bdist.linux-x86_64/wheel 2024-01-28 16:07:21,605 root INFO running install 2024-01-28 16:07:21,615 root INFO running install_lib 2024-01-28 16:07:21,621 root INFO creating /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/bdist.linux-x86_64 2024-01-28 16:07:21,622 root INFO creating /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/bdist.linux-x86_64/wheel 2024-01-28 16:07:21,622 root INFO creating /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/bdist.linux-x86_64/wheel/pytest_mpl 2024-01-28 16:07:21,622 root INFO creating /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/bdist.linux-x86_64/wheel/pytest_mpl/summary 2024-01-28 16:07:21,622 root INFO creating /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/bdist.linux-x86_64/wheel/pytest_mpl/summary/templates 2024-01-28 16:07:21,622 root INFO copying /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/lib/pytest_mpl/summary/templates/styles.css -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/bdist.linux-x86_64/wheel/pytest_mpl/summary/templates 2024-01-28 16:07:21,623 root INFO copying /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/lib/pytest_mpl/summary/templates/result_images.html -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/bdist.linux-x86_64/wheel/pytest_mpl/summary/templates 2024-01-28 16:07:21,623 root INFO copying /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/lib/pytest_mpl/summary/templates/result.html -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/bdist.linux-x86_64/wheel/pytest_mpl/summary/templates 2024-01-28 16:07:21,623 root INFO copying /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/lib/pytest_mpl/summary/templates/navbar.html -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/bdist.linux-x86_64/wheel/pytest_mpl/summary/templates 2024-01-28 16:07:21,624 root INFO copying /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/lib/pytest_mpl/summary/templates/image.svg -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/bdist.linux-x86_64/wheel/pytest_mpl/summary/templates 2024-01-28 16:07:21,624 root INFO copying /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/lib/pytest_mpl/summary/templates/hash.svg -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/bdist.linux-x86_64/wheel/pytest_mpl/summary/templates 2024-01-28 16:07:21,624 root INFO copying /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/lib/pytest_mpl/summary/templates/filter.html -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/bdist.linux-x86_64/wheel/pytest_mpl/summary/templates 2024-01-28 16:07:21,625 root INFO copying /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/lib/pytest_mpl/summary/templates/extra.js -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/bdist.linux-x86_64/wheel/pytest_mpl/summary/templates 2024-01-28 16:07:21,625 root INFO copying /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/lib/pytest_mpl/summary/templates/basic.html -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/bdist.linux-x86_64/wheel/pytest_mpl/summary/templates 2024-01-28 16:07:21,625 root INFO copying /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/lib/pytest_mpl/summary/templates/base.html -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/bdist.linux-x86_64/wheel/pytest_mpl/summary/templates 2024-01-28 16:07:21,625 root INFO copying /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/lib/pytest_mpl/summary/__init__.py -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/bdist.linux-x86_64/wheel/pytest_mpl/summary 2024-01-28 16:07:21,626 root INFO copying /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/lib/pytest_mpl/summary/html.py -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/bdist.linux-x86_64/wheel/pytest_mpl/summary 2024-01-28 16:07:21,626 root INFO copying /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/lib/pytest_mpl/__init__.py -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/bdist.linux-x86_64/wheel/pytest_mpl 2024-01-28 16:07:21,626 root INFO copying /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/lib/pytest_mpl/plugin.py -> /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/bdist.linux-x86_64/wheel/pytest_mpl 2024-01-28 16:07:21,627 root WARNING warning: install_lib: byte-compiling is disabled, skipping. 2024-01-28 16:07:21,627 root INFO running install_egg_info 2024-01-28 16:07:21,633 root INFO Copying pytest_mpl.egg-info to /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/bdist.linux-x86_64/wheel/pytest_mpl-0.16.1-py3.11.egg-info 2024-01-28 16:07:21,635 root INFO running install_scripts 2024-01-28 16:07:21,639 wheel INFO creating /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/bdist.linux-x86_64/wheel/pytest_mpl-0.16.1.dist-info/WHEEL 2024-01-28 16:07:21,639 wheel INFO creating '/var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/wheel/.tmp-vedfvml4/pytest_mpl-0.16.1-py3-none-any.whl' and adding '/var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/bdist.linux-x86_64/wheel' to it 2024-01-28 16:07:21,640 wheel INFO adding 'pytest_mpl/__init__.py' 2024-01-28 16:07:21,640 wheel INFO adding 'pytest_mpl/plugin.py' 2024-01-28 16:07:21,640 wheel INFO adding 'pytest_mpl/summary/__init__.py' 2024-01-28 16:07:21,641 wheel INFO adding 'pytest_mpl/summary/html.py' 2024-01-28 16:07:21,641 wheel INFO adding 'pytest_mpl/summary/templates/base.html' 2024-01-28 16:07:21,641 wheel INFO adding 'pytest_mpl/summary/templates/basic.html' 2024-01-28 16:07:21,641 wheel INFO adding 'pytest_mpl/summary/templates/extra.js' 2024-01-28 16:07:21,642 wheel INFO adding 'pytest_mpl/summary/templates/filter.html' 2024-01-28 16:07:21,642 wheel INFO adding 'pytest_mpl/summary/templates/hash.svg' 2024-01-28 16:07:21,642 wheel INFO adding 'pytest_mpl/summary/templates/image.svg' 2024-01-28 16:07:21,642 wheel INFO adding 'pytest_mpl/summary/templates/navbar.html' 2024-01-28 16:07:21,642 wheel INFO adding 'pytest_mpl/summary/templates/result.html' 2024-01-28 16:07:21,643 wheel INFO adding 'pytest_mpl/summary/templates/result_images.html' 2024-01-28 16:07:21,643 wheel INFO adding 'pytest_mpl/summary/templates/styles.css' 2024-01-28 16:07:21,643 wheel INFO adding 'pytest_mpl-0.16.1.dist-info/LICENSE' 2024-01-28 16:07:21,643 wheel INFO adding 'pytest_mpl-0.16.1.dist-info/METADATA' 2024-01-28 16:07:21,643 wheel INFO adding 'pytest_mpl-0.16.1.dist-info/WHEEL' 2024-01-28 16:07:21,644 wheel INFO adding 'pytest_mpl-0.16.1.dist-info/entry_points.txt' 2024-01-28 16:07:21,644 wheel INFO adding 'pytest_mpl-0.16.1.dist-info/top_level.txt' 2024-01-28 16:07:21,644 wheel INFO adding 'pytest_mpl-0.16.1.dist-info/zip-safe' 2024-01-28 16:07:21,644 wheel INFO adding 'pytest_mpl-0.16.1.dist-info/RECORD' 2024-01-28 16:07:21,644 wheel INFO removing /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/build/bdist.linux-x86_64/wheel 2024-01-28 16:07:21,646 gpep517 INFO The backend produced /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/wheel/pytest_mpl-0.16.1-py3-none-any.whl * Installing pytest_mpl-0.16.1-py3-none-any.whl to /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/install python3.11 -m gpep517 install-wheel --destdir=/var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/install --interpreter=/usr/bin/python3.11 --prefix=/usr --optimize=all /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/wheel/pytest_mpl-0.16.1-py3-none-any.whl 2024-01-28 16:07:21,768 gpep517 INFO Installing /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/wheel/pytest_mpl-0.16.1-py3-none-any.whl into /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_11/install 2024-01-28 16:07:21,802 gpep517 INFO Installation complete >>> Source compiled. >>> Test phase: dev-python/pytest-mpl-0.16.1 * python3_10: running distutils-r1_run_phase python_test python3.10 -m pytest -vv -ra -l -Wdefault --color=yes -o console_output_style=count -o tmp_path_retention_count=0 -o tmp_path_retention_policy=failed -p no:cov -p no:flake8 -p no:flakes -p no:pylint -p no:markdown -p no:sugar -p no:xvfb -p no:pytest-describe -p no:plus -p no:tavern -p no:salt-factories --deselect tests/subtests/test_subtest.py::test_default --deselect tests/subtests/test_subtest.py::test_html_images_only ============================= test session starts ============================== platform linux -- Python 3.10.13, pytest-7.4.4, pluggy-1.4.0 -- /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/install/usr/bin/python3.10 cachedir: .pytest_cache Matplotlib: 3.8.2 Freetype: 2.13.2 rootdir: /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1 configfile: setup.cfg testpaths: tests plugins: mpl-0.16.1, xdist-3.5.0, mock-3.12.0 collecting ... collected 55 items / 2 deselected / 53 selected tests/test_pytest_mpl.py::test_succeeds PASSED [ 1/53] tests/test_pytest_mpl.py::test_succeeds_remote PASSED [ 2/53] tests/test_pytest_mpl.py::test_succeeds_faulty_mirror PASSED [ 3/53] tests/test_pytest_mpl.py::TestClass::test_succeeds PASSED [ 4/53] tests/test_pytest_mpl.py::test_dpi PASSED [ 5/53] tests/test_pytest_mpl.py::test_fails PASSED [ 6/53] tests/test_pytest_mpl.py::test_output_dir PASSED [ 7/53] tests/test_pytest_mpl.py::test_generate PASSED [ 8/53] tests/test_pytest_mpl.py::test_tolerance PASSED [ 9/53] tests/test_pytest_mpl.py::test_nofigure PASSED [10/53] tests/test_pytest_mpl.py::test_base_style PASSED [11/53] tests/test_pytest_mpl.py::test_remove_text PASSED [12/53] tests/test_pytest_mpl.py::test_parametrized[5] PASSED [13/53] tests/test_pytest_mpl.py::test_parametrized[50] PASSED [14/53] tests/test_pytest_mpl.py::test_parametrized[500] PASSED [15/53] tests/test_pytest_mpl.py::TestClassWithSetup::test_succeeds PASSED [16/53] tests/test_pytest_mpl.py::TestClassWithTestCase::test_succeeds PASSED [17/53] tests/test_pytest_mpl.py::test_hash_succeeds SKIPPED (No hash library for this mpl version) [18/53] tests/test_pytest_mpl.py::test_hash_fails PASSED [19/53] tests/test_pytest_mpl.py::test_hash_fail_hybrid SKIPPED (Incorrect freetype version for hash check) [20/53] tests/test_pytest_mpl.py::test_hash_fail_new_hashes SKIPPED (Incorrect freetype version for hash check) [21/53] tests/test_pytest_mpl.py::test_hash_missing PASSED [22/53] tests/test_pytest_mpl.py::test_results_always SKIPPED (No hash library for this mpl version) [23/53] tests/test_pytest_mpl.py::test_class_fail[\nimport pytest\nimport matplotlib.pyplot as plt\nclass TestClass(object):\n @pytest.mark.mpl_image_compare\n def test_fails(self):\n fig = plt.figure()\n ax = fig.add_subplot(1, 1, 1)\n ax.plot([1, 2, 3])\n return fig\n] PASSED [24/53] tests/test_pytest_mpl.py::test_class_fail[\nimport pytest\nimport matplotlib.pyplot as plt\nclass TestClassWithSetup:\n def setup_method(self, method):\n self.x = [1, 2, 3]\n @pytest.mark.mpl_image_compare\n def test_fails(self):\n fig = plt.figure()\n ax = fig.add_subplot(1, 1, 1)\n ax.plot(self.x)\n return fig\n] PASSED [25/53] tests/test_pytest_mpl.py::test_class_fail[\nfrom unittest import TestCase\nimport pytest\nimport matplotlib.pyplot as plt\nclass TestClassWithTestCase(TestCase):\n def setUp(self):\n self.x = [1, 2, 3]\n @pytest.mark.mpl_image_compare\n def test_fails(self):\n fig = plt.figure()\n ax = fig.add_subplot(1, 1, 1)\n ax.plot(self.x)\n return fig\n] PASSED [26/53] tests/test_pytest_mpl.py::test_user_fail[runpytest_args0] PASSED [27/53] tests/test_pytest_mpl.py::test_user_fail[runpytest_args1] PASSED [28/53] tests/test_pytest_mpl.py::test_user_skip[runpytest_args0] PASSED [29/53] tests/test_pytest_mpl.py::test_user_skip[runpytest_args1] PASSED [30/53] tests/test_pytest_mpl.py::test_user_importorskip[runpytest_args0] PASSED [31/53] tests/test_pytest_mpl.py::test_user_importorskip[runpytest_args1] PASSED [32/53] tests/test_pytest_mpl.py::test_user_xfail[runpytest_args0] PASSED [33/53] tests/test_pytest_mpl.py::test_user_xfail[runpytest_args1] PASSED [34/53] tests/test_pytest_mpl.py::test_user_exit_success[runpytest_args0] PASSED [35/53] tests/test_pytest_mpl.py::test_user_exit_success[runpytest_args1] PASSED [36/53] tests/test_pytest_mpl.py::test_user_exit_failure[runpytest_args0] PASSED [37/53] tests/test_pytest_mpl.py::test_user_exit_failure[runpytest_args1] PASSED [38/53] tests/test_pytest_mpl.py::test_user_function_raises[runpytest_args0] PASSED [39/53] tests/test_pytest_mpl.py::test_user_function_raises[runpytest_args1] PASSED [40/53] tests/subtests/test_subtest.py::test_hash SKIPPED (No hash library for this mpl version) [41/53] tests/subtests/test_subtest.py::test_results_always SKIPPED (No hash library for this mpl version) [42/53] tests/subtests/test_subtest.py::test_html SKIPPED (No hash library for this mpl version) [43/53] tests/subtests/test_subtest.py::test_html_hashes_only SKIPPED (No hash library for this mpl version) [44/53] tests/subtests/test_subtest.py::test_basic_html SKIPPED (No hash library for this mpl version) [45/53] tests/subtests/test_subtest.py::test_generate SKIPPED (No hash library for this mpl version) [46/53] tests/subtests/test_subtest.py::test_generate_images_only FAILED [47/53] tests/subtests/test_subtest.py::test_generate_hashes_only SKIPPED (No hash library for this mpl version) [48/53] tests/subtests/test_subtest.py::test_html_generate SKIPPED (No hash library for this mpl version) [49/53] tests/subtests/test_subtest.py::test_html_generate_images_only FAILED [50/53] tests/subtests/test_subtest.py::test_html_generate_hashes_only SKIPPED [51/53] tests/subtests/test_subtest.py::test_html_run_generate_hashes_only SKIPPED [52/53] tests/subtests/test_subtest.py::test_hybrid SKIPPED (No hash library for this mpl version) [53/53] =================================== FAILURES =================================== __________________________ test_generate_images_only ___________________________ tmp_path = PosixPath('/var/tmp/portage/dev-python/pytest-mpl-0.16.1/temp/pytest-of-portage/pytest-0/test_generate_images_only0') def test_generate_images_only(tmp_path): # generating images; no testing > run_subtest('test_generate_images_only', tmp_path, [rf'--mpl-generate-path={tmp_path}', *IMAGE_COMPARISON_MODE], xfail=False) tmp_path = PosixPath('/var/tmp/portage/dev-python/pytest-mpl-0.16.1/temp/pytest-of-portage/pytest-0/test_generate_images_only0') tests/subtests/test_subtest.py:235: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ baseline_summary_name = 'test_generate_images_only' tmp_path = PosixPath('/var/tmp/portage/dev-python/pytest-mpl-0.16.1/temp/pytest-of-portage/pytest-0/test_generate_images_only0') args = ['--mpl-generate-path=/var/tmp/portage/dev-python/pytest-mpl-0.16.1/temp/pytest-of-portage/pytest-0/test_generate_images_only0', '-k', 'image'] summaries = 'json', xfail = False, has_result_hashes = False generating_hashes = False, update_baseline = False, update_summary = False def run_subtest(baseline_summary_name, tmp_path, args, summaries=None, xfail=True, has_result_hashes=False, generating_hashes=False, update_baseline=UPDATE_BASELINE, update_summary=UPDATE_SUMMARY): """ Run pytest (within pytest) and check JSON summary report. Parameters ---------- baseline_summary_name : str String of the filename without extension for the baseline summary. tmp_path : pathlib.Path Path of a temporary directory to store results. args : list Extra arguments to pass to pytest. summaries : tuple or list or set, optional, default=[] Summaries to generate in addition to `json`. xfail : bool, optional, default=True Whether the overall pytest run should fail. has_result_hashes : bool or str, optional, default=False Whether a hash library is expected to exist in the results directory. If a string, this is the name of the expected results file. generating_hashes : bool, optional, default=False Whether `--mpl-generate-hash-library` was specified and both of `--mpl-hash-library` and `hash_library=` were not. """ if update_baseline and update_summary: raise ValueError("Cannot enable both `update_baseline` and `update_summary`.") # Parse arguments if summaries is None: summaries = [] assert isinstance(summaries, (tuple, list, set)) summaries = ','.join({'json'} | set(summaries)) # Create the results path results_path = tmp_path / 'results' results_path.mkdir() # Configure the arguments to run the test pytest_args = [sys.executable, '-m', 'pytest', str(TEST_FILE)] mpl_args = ['--mpl', rf'--mpl-results-path={results_path.as_posix()}', f'--mpl-generate-summary={summaries}'] if update_baseline: mpl_args += [rf'--mpl-generate-path={FULL_BASELINE_PATH}'] if HASH_LIBRARY.exists(): mpl_args += [rf'--mpl-generate-hash-library={HASH_LIBRARY}'] # Run the test and record exit status status = subprocess.call(pytest_args + mpl_args + args) # If updating baseline, don't check summaries if update_baseline: assert status == 0 transform_images(FULL_BASELINE_PATH) # Make image comparison tests fail correctly if HASH_LIBRARY.exists(): shutil.copy(HASH_LIBRARY, RESULT_LIBRARY) transform_hashes(HASH_LIBRARY) # Make hash comparison tests fail correctly pytest.skip("Skipping testing, since `update_baseline` is enabled.") return # Ensure exit status is as expected if xfail: assert status != 0 else: > assert status == 0 E assert 1 == 0 args = ['--mpl-generate-path=/var/tmp/portage/dev-python/pytest-mpl-0.16.1/temp/pytest-of-portage/pytest-0/test_generate_images_only0', '-k', 'image'] baseline_summary_name = 'test_generate_images_only' generating_hashes = False has_result_hashes = False mpl_args = ['--mpl', '--mpl-results-path=/var/tmp/portage/dev-python/pytest-mpl-0.16.1/temp/pytest-of-portage/pytest-0/test_generate_images_only0/results', '--mpl-generate-summary=json'] pytest_args = ['/var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/install/usr/bin/python3.10', '-m', 'pytest', '/var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1/tests/subtests/subtest.py'] results_path = PosixPath('/var/tmp/portage/dev-python/pytest-mpl-0.16.1/temp/pytest-of-portage/pytest-0/test_generate_images_only0/results') status = 1 summaries = 'json' tmp_path = PosixPath('/var/tmp/portage/dev-python/pytest-mpl-0.16.1/temp/pytest-of-portage/pytest-0/test_generate_images_only0') update_baseline = False update_summary = False xfail = False tests/subtests/test_subtest.py:116: AssertionError ----------------------------- Captured stdout call ----------------------------- ============================= test session starts ============================== platform linux -- Python 3.10.13, pytest-7.4.4, pluggy-1.4.0 Matplotlib: 3.8.2 Freetype: 2.13.2 rootdir: /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1 configfile: setup.cfg plugins: mpl-0.16.1, xdist-3.5.0, mock-3.12.0 collected 17 items tests/subtests/subtest.py FFFFFFFFFFFFFFFFF [100%] =================================== FAILURES =================================== ______________________________ test_hmatch_imatch ______________________________ self = item = @pytest.hookimpl(hookwrapper=True) def pytest_runtest_call(self, item): # noqa compare = get_compare(item) if compare is None: yield return import matplotlib.pyplot as plt try: from matplotlib.testing.decorators import remove_ticks_and_titles except ImportError: from matplotlib.testing.decorators import ImageComparisonTest as MplImageComparisonTest remove_ticks_and_titles = MplImageComparisonTest.remove_text style = compare.kwargs.get('style', 'classic') remove_text = compare.kwargs.get('remove_text', False) backend = compare.kwargs.get('backend', 'agg') with plt.style.context(style, after_reset=True), switch_backend(backend): # Run test and get figure object wrap_figure_interceptor(self, item) yield test_name = generate_test_name(item) if test_name not in self.return_value: # Test function did not complete successfully return fig = self.return_value[test_name] if remove_text: remove_ticks_and_titles(fig) result_dir = self.make_test_results_dir(item) summary = { 'status': None, 'image_status': None, 'hash_status': None, 'status_msg': None, 'baseline_image': None, 'diff_image': None, 'rms': None, 'tolerance': None, 'result_image': None, 'baseline_hash': None, 'result_hash': None, } # What we do now depends on whether we are generating the # reference images or simply running the test. if self.generate_dir is not None: summary['status'] = 'skipped' summary['image_status'] = 'generated' summary['status_msg'] = 'Skipped test, since generating image.' generate_image = self.generate_baseline_image(item, fig) if self.results_always: # Make baseline image available in HTML result_image = (result_dir / "baseline.png").absolute() shutil.copy(generate_image, result_image) summary['baseline_image'] = \ result_image.relative_to(self.results_dir).as_posix() if self.generate_hash_library is not None: summary['hash_status'] = 'generated' image_hash = self.generate_image_hash(item, fig) self._generated_hash_library[test_name] = image_hash summary['baseline_hash'] = image_hash # Only test figures if not generating images if self.generate_dir is None: # Compare to hash library if self.hash_library or compare.kwargs.get('hash_library', None): msg = self.compare_image_to_hash_library(item, fig, result_dir, summary=summary) # Compare against a baseline if specified else: msg = self.compare_image_to_baseline(item, fig, result_dir, summary=summary) close_mpl_figure(fig) if msg is None: if not self.results_always: shutil.rmtree(result_dir) for image_type in ['baseline_image', 'diff_image', 'result_image']: summary[image_type] = None # image no longer exists else: self._test_results[test_name] = summary pytest.fail(msg, pytrace=False) close_mpl_figure(fig) self._test_results[test_name] = summary if summary['status'] == 'skipped': > pytest.skip(summary['status_msg']) E Skipped: Skipped test, since generating image. pytest_mpl/plugin.py:694: Skipped During handling of the above exception, another exception occurred: cls = func = . at 0x711180209510> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: "Callable[[], TResult]", when: "Literal['collect', 'setup', 'call', 'teardown']", reraise: Optional[ Union[Type[BaseException], Tuple[Type[BaseException], ...]] ] = None, ) -> "CallInfo[TResult]": """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None start = timing.time() precise_start = timing.perf_counter() try: > result: Optional[TResult] = func() /usr/lib/python3.10/site-packages/_pytest/runner.py:341: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.10/site-packages/_pytest/runner.py:262: in lambda: ihook(item=item, **kwds), when=when, reraise=reraise /usr/lib/python3.10/site-packages/pluggy/_hooks.py:501: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) /usr/lib/python3.10/site-packages/pluggy/_manager.py:119: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impl = > e = Skipped test, since generating image. def _warn_teardown_exception( hook_name: str, hook_impl: HookImpl, e: BaseException ) -> None: msg = "A plugin raised an exception during an old-style hookwrapper teardown.\n" msg += f"Plugin: {hook_impl.plugin_name}, Hook: {hook_name}\n" msg += f"{type(e).__name__}: {e}\n" msg += "For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning" # noqa: E501 > warnings.warn(PluggyTeardownRaisedWarning(msg), stacklevel=5) E pluggy.PluggyTeardownRaisedWarning: A plugin raised an exception during an old-style hookwrapper teardown. E Plugin: 124319978666160, Hook: pytest_runtest_call E Skipped: Skipped test, since generating image. E For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning /usr/lib/python3.10/site-packages/pluggy/_callers.py:49: PluggyTeardownRaisedWarning ______________________________ test_hmatch_idiff _______________________________ self = item = @pytest.hookimpl(hookwrapper=True) def pytest_runtest_call(self, item): # noqa compare = get_compare(item) if compare is None: yield return import matplotlib.pyplot as plt try: from matplotlib.testing.decorators import remove_ticks_and_titles except ImportError: from matplotlib.testing.decorators import ImageComparisonTest as MplImageComparisonTest remove_ticks_and_titles = MplImageComparisonTest.remove_text style = compare.kwargs.get('style', 'classic') remove_text = compare.kwargs.get('remove_text', False) backend = compare.kwargs.get('backend', 'agg') with plt.style.context(style, after_reset=True), switch_backend(backend): # Run test and get figure object wrap_figure_interceptor(self, item) yield test_name = generate_test_name(item) if test_name not in self.return_value: # Test function did not complete successfully return fig = self.return_value[test_name] if remove_text: remove_ticks_and_titles(fig) result_dir = self.make_test_results_dir(item) summary = { 'status': None, 'image_status': None, 'hash_status': None, 'status_msg': None, 'baseline_image': None, 'diff_image': None, 'rms': None, 'tolerance': None, 'result_image': None, 'baseline_hash': None, 'result_hash': None, } # What we do now depends on whether we are generating the # reference images or simply running the test. if self.generate_dir is not None: summary['status'] = 'skipped' summary['image_status'] = 'generated' summary['status_msg'] = 'Skipped test, since generating image.' generate_image = self.generate_baseline_image(item, fig) if self.results_always: # Make baseline image available in HTML result_image = (result_dir / "baseline.png").absolute() shutil.copy(generate_image, result_image) summary['baseline_image'] = \ result_image.relative_to(self.results_dir).as_posix() if self.generate_hash_library is not None: summary['hash_status'] = 'generated' image_hash = self.generate_image_hash(item, fig) self._generated_hash_library[test_name] = image_hash summary['baseline_hash'] = image_hash # Only test figures if not generating images if self.generate_dir is None: # Compare to hash library if self.hash_library or compare.kwargs.get('hash_library', None): msg = self.compare_image_to_hash_library(item, fig, result_dir, summary=summary) # Compare against a baseline if specified else: msg = self.compare_image_to_baseline(item, fig, result_dir, summary=summary) close_mpl_figure(fig) if msg is None: if not self.results_always: shutil.rmtree(result_dir) for image_type in ['baseline_image', 'diff_image', 'result_image']: summary[image_type] = None # image no longer exists else: self._test_results[test_name] = summary pytest.fail(msg, pytrace=False) close_mpl_figure(fig) self._test_results[test_name] = summary if summary['status'] == 'skipped': > pytest.skip(summary['status_msg']) E Skipped: Skipped test, since generating image. pytest_mpl/plugin.py:694: Skipped During handling of the above exception, another exception occurred: cls = func = . at 0x71117d9ddcf0> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: "Callable[[], TResult]", when: "Literal['collect', 'setup', 'call', 'teardown']", reraise: Optional[ Union[Type[BaseException], Tuple[Type[BaseException], ...]] ] = None, ) -> "CallInfo[TResult]": """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None start = timing.time() precise_start = timing.perf_counter() try: > result: Optional[TResult] = func() /usr/lib/python3.10/site-packages/_pytest/runner.py:341: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.10/site-packages/_pytest/runner.py:262: in lambda: ihook(item=item, **kwds), when=when, reraise=reraise /usr/lib/python3.10/site-packages/pluggy/_hooks.py:501: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) /usr/lib/python3.10/site-packages/pluggy/_manager.py:119: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impl = > e = Skipped test, since generating image. def _warn_teardown_exception( hook_name: str, hook_impl: HookImpl, e: BaseException ) -> None: msg = "A plugin raised an exception during an old-style hookwrapper teardown.\n" msg += f"Plugin: {hook_impl.plugin_name}, Hook: {hook_name}\n" msg += f"{type(e).__name__}: {e}\n" msg += "For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning" # noqa: E501 > warnings.warn(PluggyTeardownRaisedWarning(msg), stacklevel=5) E pluggy.PluggyTeardownRaisedWarning: A plugin raised an exception during an old-style hookwrapper teardown. E Plugin: 124319978666160, Hook: pytest_runtest_call E Skipped: Skipped test, since generating image. E For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning /usr/lib/python3.10/site-packages/pluggy/_callers.py:49: PluggyTeardownRaisedWarning ____________________________ test_hmatch_idiffshape ____________________________ self = item = @pytest.hookimpl(hookwrapper=True) def pytest_runtest_call(self, item): # noqa compare = get_compare(item) if compare is None: yield return import matplotlib.pyplot as plt try: from matplotlib.testing.decorators import remove_ticks_and_titles except ImportError: from matplotlib.testing.decorators import ImageComparisonTest as MplImageComparisonTest remove_ticks_and_titles = MplImageComparisonTest.remove_text style = compare.kwargs.get('style', 'classic') remove_text = compare.kwargs.get('remove_text', False) backend = compare.kwargs.get('backend', 'agg') with plt.style.context(style, after_reset=True), switch_backend(backend): # Run test and get figure object wrap_figure_interceptor(self, item) yield test_name = generate_test_name(item) if test_name not in self.return_value: # Test function did not complete successfully return fig = self.return_value[test_name] if remove_text: remove_ticks_and_titles(fig) result_dir = self.make_test_results_dir(item) summary = { 'status': None, 'image_status': None, 'hash_status': None, 'status_msg': None, 'baseline_image': None, 'diff_image': None, 'rms': None, 'tolerance': None, 'result_image': None, 'baseline_hash': None, 'result_hash': None, } # What we do now depends on whether we are generating the # reference images or simply running the test. if self.generate_dir is not None: summary['status'] = 'skipped' summary['image_status'] = 'generated' summary['status_msg'] = 'Skipped test, since generating image.' generate_image = self.generate_baseline_image(item, fig) if self.results_always: # Make baseline image available in HTML result_image = (result_dir / "baseline.png").absolute() shutil.copy(generate_image, result_image) summary['baseline_image'] = \ result_image.relative_to(self.results_dir).as_posix() if self.generate_hash_library is not None: summary['hash_status'] = 'generated' image_hash = self.generate_image_hash(item, fig) self._generated_hash_library[test_name] = image_hash summary['baseline_hash'] = image_hash # Only test figures if not generating images if self.generate_dir is None: # Compare to hash library if self.hash_library or compare.kwargs.get('hash_library', None): msg = self.compare_image_to_hash_library(item, fig, result_dir, summary=summary) # Compare against a baseline if specified else: msg = self.compare_image_to_baseline(item, fig, result_dir, summary=summary) close_mpl_figure(fig) if msg is None: if not self.results_always: shutil.rmtree(result_dir) for image_type in ['baseline_image', 'diff_image', 'result_image']: summary[image_type] = None # image no longer exists else: self._test_results[test_name] = summary pytest.fail(msg, pytrace=False) close_mpl_figure(fig) self._test_results[test_name] = summary if summary['status'] == 'skipped': > pytest.skip(summary['status_msg']) E Skipped: Skipped test, since generating image. pytest_mpl/plugin.py:694: Skipped During handling of the above exception, another exception occurred: cls = func = . at 0x71117d9de050> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: "Callable[[], TResult]", when: "Literal['collect', 'setup', 'call', 'teardown']", reraise: Optional[ Union[Type[BaseException], Tuple[Type[BaseException], ...]] ] = None, ) -> "CallInfo[TResult]": """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None start = timing.time() precise_start = timing.perf_counter() try: > result: Optional[TResult] = func() /usr/lib/python3.10/site-packages/_pytest/runner.py:341: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.10/site-packages/_pytest/runner.py:262: in lambda: ihook(item=item, **kwds), when=when, reraise=reraise /usr/lib/python3.10/site-packages/pluggy/_hooks.py:501: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) /usr/lib/python3.10/site-packages/pluggy/_manager.py:119: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impl = > e = Skipped test, since generating image. def _warn_teardown_exception( hook_name: str, hook_impl: HookImpl, e: BaseException ) -> None: msg = "A plugin raised an exception during an old-style hookwrapper teardown.\n" msg += f"Plugin: {hook_impl.plugin_name}, Hook: {hook_name}\n" msg += f"{type(e).__name__}: {e}\n" msg += "For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning" # noqa: E501 > warnings.warn(PluggyTeardownRaisedWarning(msg), stacklevel=5) E pluggy.PluggyTeardownRaisedWarning: A plugin raised an exception during an old-style hookwrapper teardown. E Plugin: 124319978666160, Hook: pytest_runtest_call E Skipped: Skipped test, since generating image. E For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning /usr/lib/python3.10/site-packages/pluggy/_callers.py:49: PluggyTeardownRaisedWarning _____________________________ test_hmatch_imissing _____________________________ self = item = @pytest.hookimpl(hookwrapper=True) def pytest_runtest_call(self, item): # noqa compare = get_compare(item) if compare is None: yield return import matplotlib.pyplot as plt try: from matplotlib.testing.decorators import remove_ticks_and_titles except ImportError: from matplotlib.testing.decorators import ImageComparisonTest as MplImageComparisonTest remove_ticks_and_titles = MplImageComparisonTest.remove_text style = compare.kwargs.get('style', 'classic') remove_text = compare.kwargs.get('remove_text', False) backend = compare.kwargs.get('backend', 'agg') with plt.style.context(style, after_reset=True), switch_backend(backend): # Run test and get figure object wrap_figure_interceptor(self, item) yield test_name = generate_test_name(item) if test_name not in self.return_value: # Test function did not complete successfully return fig = self.return_value[test_name] if remove_text: remove_ticks_and_titles(fig) result_dir = self.make_test_results_dir(item) summary = { 'status': None, 'image_status': None, 'hash_status': None, 'status_msg': None, 'baseline_image': None, 'diff_image': None, 'rms': None, 'tolerance': None, 'result_image': None, 'baseline_hash': None, 'result_hash': None, } # What we do now depends on whether we are generating the # reference images or simply running the test. if self.generate_dir is not None: summary['status'] = 'skipped' summary['image_status'] = 'generated' summary['status_msg'] = 'Skipped test, since generating image.' generate_image = self.generate_baseline_image(item, fig) if self.results_always: # Make baseline image available in HTML result_image = (result_dir / "baseline.png").absolute() shutil.copy(generate_image, result_image) summary['baseline_image'] = \ result_image.relative_to(self.results_dir).as_posix() if self.generate_hash_library is not None: summary['hash_status'] = 'generated' image_hash = self.generate_image_hash(item, fig) self._generated_hash_library[test_name] = image_hash summary['baseline_hash'] = image_hash # Only test figures if not generating images if self.generate_dir is None: # Compare to hash library if self.hash_library or compare.kwargs.get('hash_library', None): msg = self.compare_image_to_hash_library(item, fig, result_dir, summary=summary) # Compare against a baseline if specified else: msg = self.compare_image_to_baseline(item, fig, result_dir, summary=summary) close_mpl_figure(fig) if msg is None: if not self.results_always: shutil.rmtree(result_dir) for image_type in ['baseline_image', 'diff_image', 'result_image']: summary[image_type] = None # image no longer exists else: self._test_results[test_name] = summary pytest.fail(msg, pytrace=False) close_mpl_figure(fig) self._test_results[test_name] = summary if summary['status'] == 'skipped': > pytest.skip(summary['status_msg']) E Skipped: Skipped test, since generating image. pytest_mpl/plugin.py:694: Skipped During handling of the above exception, another exception occurred: cls = func = . at 0x71117c267f40> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: "Callable[[], TResult]", when: "Literal['collect', 'setup', 'call', 'teardown']", reraise: Optional[ Union[Type[BaseException], Tuple[Type[BaseException], ...]] ] = None, ) -> "CallInfo[TResult]": """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None start = timing.time() precise_start = timing.perf_counter() try: > result: Optional[TResult] = func() /usr/lib/python3.10/site-packages/_pytest/runner.py:341: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.10/site-packages/_pytest/runner.py:262: in lambda: ihook(item=item, **kwds), when=when, reraise=reraise /usr/lib/python3.10/site-packages/pluggy/_hooks.py:501: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) /usr/lib/python3.10/site-packages/pluggy/_manager.py:119: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impl = > e = Skipped test, since generating image. def _warn_teardown_exception( hook_name: str, hook_impl: HookImpl, e: BaseException ) -> None: msg = "A plugin raised an exception during an old-style hookwrapper teardown.\n" msg += f"Plugin: {hook_impl.plugin_name}, Hook: {hook_name}\n" msg += f"{type(e).__name__}: {e}\n" msg += "For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning" # noqa: E501 > warnings.warn(PluggyTeardownRaisedWarning(msg), stacklevel=5) E pluggy.PluggyTeardownRaisedWarning: A plugin raised an exception during an old-style hookwrapper teardown. E Plugin: 124319978666160, Hook: pytest_runtest_call E Skipped: Skipped test, since generating image. E For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning /usr/lib/python3.10/site-packages/pluggy/_callers.py:49: PluggyTeardownRaisedWarning ______________________________ test_hdiff_imatch _______________________________ self = item = @pytest.hookimpl(hookwrapper=True) def pytest_runtest_call(self, item): # noqa compare = get_compare(item) if compare is None: yield return import matplotlib.pyplot as plt try: from matplotlib.testing.decorators import remove_ticks_and_titles except ImportError: from matplotlib.testing.decorators import ImageComparisonTest as MplImageComparisonTest remove_ticks_and_titles = MplImageComparisonTest.remove_text style = compare.kwargs.get('style', 'classic') remove_text = compare.kwargs.get('remove_text', False) backend = compare.kwargs.get('backend', 'agg') with plt.style.context(style, after_reset=True), switch_backend(backend): # Run test and get figure object wrap_figure_interceptor(self, item) yield test_name = generate_test_name(item) if test_name not in self.return_value: # Test function did not complete successfully return fig = self.return_value[test_name] if remove_text: remove_ticks_and_titles(fig) result_dir = self.make_test_results_dir(item) summary = { 'status': None, 'image_status': None, 'hash_status': None, 'status_msg': None, 'baseline_image': None, 'diff_image': None, 'rms': None, 'tolerance': None, 'result_image': None, 'baseline_hash': None, 'result_hash': None, } # What we do now depends on whether we are generating the # reference images or simply running the test. if self.generate_dir is not None: summary['status'] = 'skipped' summary['image_status'] = 'generated' summary['status_msg'] = 'Skipped test, since generating image.' generate_image = self.generate_baseline_image(item, fig) if self.results_always: # Make baseline image available in HTML result_image = (result_dir / "baseline.png").absolute() shutil.copy(generate_image, result_image) summary['baseline_image'] = \ result_image.relative_to(self.results_dir).as_posix() if self.generate_hash_library is not None: summary['hash_status'] = 'generated' image_hash = self.generate_image_hash(item, fig) self._generated_hash_library[test_name] = image_hash summary['baseline_hash'] = image_hash # Only test figures if not generating images if self.generate_dir is None: # Compare to hash library if self.hash_library or compare.kwargs.get('hash_library', None): msg = self.compare_image_to_hash_library(item, fig, result_dir, summary=summary) # Compare against a baseline if specified else: msg = self.compare_image_to_baseline(item, fig, result_dir, summary=summary) close_mpl_figure(fig) if msg is None: if not self.results_always: shutil.rmtree(result_dir) for image_type in ['baseline_image', 'diff_image', 'result_image']: summary[image_type] = None # image no longer exists else: self._test_results[test_name] = summary pytest.fail(msg, pytrace=False) close_mpl_figure(fig) self._test_results[test_name] = summary if summary['status'] == 'skipped': > pytest.skip(summary['status_msg']) E Skipped: Skipped test, since generating image. pytest_mpl/plugin.py:694: Skipped During handling of the above exception, another exception occurred: cls = func = . at 0x71117c2fff40> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: "Callable[[], TResult]", when: "Literal['collect', 'setup', 'call', 'teardown']", reraise: Optional[ Union[Type[BaseException], Tuple[Type[BaseException], ...]] ] = None, ) -> "CallInfo[TResult]": """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None start = timing.time() precise_start = timing.perf_counter() try: > result: Optional[TResult] = func() /usr/lib/python3.10/site-packages/_pytest/runner.py:341: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.10/site-packages/_pytest/runner.py:262: in lambda: ihook(item=item, **kwds), when=when, reraise=reraise /usr/lib/python3.10/site-packages/pluggy/_hooks.py:501: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) /usr/lib/python3.10/site-packages/pluggy/_manager.py:119: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impl = > e = Skipped test, since generating image. def _warn_teardown_exception( hook_name: str, hook_impl: HookImpl, e: BaseException ) -> None: msg = "A plugin raised an exception during an old-style hookwrapper teardown.\n" msg += f"Plugin: {hook_impl.plugin_name}, Hook: {hook_name}\n" msg += f"{type(e).__name__}: {e}\n" msg += "For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning" # noqa: E501 > warnings.warn(PluggyTeardownRaisedWarning(msg), stacklevel=5) E pluggy.PluggyTeardownRaisedWarning: A plugin raised an exception during an old-style hookwrapper teardown. E Plugin: 124319978666160, Hook: pytest_runtest_call E Skipped: Skipped test, since generating image. E For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning /usr/lib/python3.10/site-packages/pluggy/_callers.py:49: PluggyTeardownRaisedWarning _______________________________ test_hdiff_idiff _______________________________ self = item = @pytest.hookimpl(hookwrapper=True) def pytest_runtest_call(self, item): # noqa compare = get_compare(item) if compare is None: yield return import matplotlib.pyplot as plt try: from matplotlib.testing.decorators import remove_ticks_and_titles except ImportError: from matplotlib.testing.decorators import ImageComparisonTest as MplImageComparisonTest remove_ticks_and_titles = MplImageComparisonTest.remove_text style = compare.kwargs.get('style', 'classic') remove_text = compare.kwargs.get('remove_text', False) backend = compare.kwargs.get('backend', 'agg') with plt.style.context(style, after_reset=True), switch_backend(backend): # Run test and get figure object wrap_figure_interceptor(self, item) yield test_name = generate_test_name(item) if test_name not in self.return_value: # Test function did not complete successfully return fig = self.return_value[test_name] if remove_text: remove_ticks_and_titles(fig) result_dir = self.make_test_results_dir(item) summary = { 'status': None, 'image_status': None, 'hash_status': None, 'status_msg': None, 'baseline_image': None, 'diff_image': None, 'rms': None, 'tolerance': None, 'result_image': None, 'baseline_hash': None, 'result_hash': None, } # What we do now depends on whether we are generating the # reference images or simply running the test. if self.generate_dir is not None: summary['status'] = 'skipped' summary['image_status'] = 'generated' summary['status_msg'] = 'Skipped test, since generating image.' generate_image = self.generate_baseline_image(item, fig) if self.results_always: # Make baseline image available in HTML result_image = (result_dir / "baseline.png").absolute() shutil.copy(generate_image, result_image) summary['baseline_image'] = \ result_image.relative_to(self.results_dir).as_posix() if self.generate_hash_library is not None: summary['hash_status'] = 'generated' image_hash = self.generate_image_hash(item, fig) self._generated_hash_library[test_name] = image_hash summary['baseline_hash'] = image_hash # Only test figures if not generating images if self.generate_dir is None: # Compare to hash library if self.hash_library or compare.kwargs.get('hash_library', None): msg = self.compare_image_to_hash_library(item, fig, result_dir, summary=summary) # Compare against a baseline if specified else: msg = self.compare_image_to_baseline(item, fig, result_dir, summary=summary) close_mpl_figure(fig) if msg is None: if not self.results_always: shutil.rmtree(result_dir) for image_type in ['baseline_image', 'diff_image', 'result_image']: summary[image_type] = None # image no longer exists else: self._test_results[test_name] = summary pytest.fail(msg, pytrace=False) close_mpl_figure(fig) self._test_results[test_name] = summary if summary['status'] == 'skipped': > pytest.skip(summary['status_msg']) E Skipped: Skipped test, since generating image. pytest_mpl/plugin.py:694: Skipped During handling of the above exception, another exception occurred: cls = func = . at 0x71117c267f40> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: "Callable[[], TResult]", when: "Literal['collect', 'setup', 'call', 'teardown']", reraise: Optional[ Union[Type[BaseException], Tuple[Type[BaseException], ...]] ] = None, ) -> "CallInfo[TResult]": """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None start = timing.time() precise_start = timing.perf_counter() try: > result: Optional[TResult] = func() /usr/lib/python3.10/site-packages/_pytest/runner.py:341: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.10/site-packages/_pytest/runner.py:262: in lambda: ihook(item=item, **kwds), when=when, reraise=reraise /usr/lib/python3.10/site-packages/pluggy/_hooks.py:501: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) /usr/lib/python3.10/site-packages/pluggy/_manager.py:119: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impl = > e = Skipped test, since generating image. def _warn_teardown_exception( hook_name: str, hook_impl: HookImpl, e: BaseException ) -> None: msg = "A plugin raised an exception during an old-style hookwrapper teardown.\n" msg += f"Plugin: {hook_impl.plugin_name}, Hook: {hook_name}\n" msg += f"{type(e).__name__}: {e}\n" msg += "For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning" # noqa: E501 > warnings.warn(PluggyTeardownRaisedWarning(msg), stacklevel=5) E pluggy.PluggyTeardownRaisedWarning: A plugin raised an exception during an old-style hookwrapper teardown. E Plugin: 124319978666160, Hook: pytest_runtest_call E Skipped: Skipped test, since generating image. E For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning /usr/lib/python3.10/site-packages/pluggy/_callers.py:49: PluggyTeardownRaisedWarning ____________________________ test_hdiff_idiffshape _____________________________ self = item = @pytest.hookimpl(hookwrapper=True) def pytest_runtest_call(self, item): # noqa compare = get_compare(item) if compare is None: yield return import matplotlib.pyplot as plt try: from matplotlib.testing.decorators import remove_ticks_and_titles except ImportError: from matplotlib.testing.decorators import ImageComparisonTest as MplImageComparisonTest remove_ticks_and_titles = MplImageComparisonTest.remove_text style = compare.kwargs.get('style', 'classic') remove_text = compare.kwargs.get('remove_text', False) backend = compare.kwargs.get('backend', 'agg') with plt.style.context(style, after_reset=True), switch_backend(backend): # Run test and get figure object wrap_figure_interceptor(self, item) yield test_name = generate_test_name(item) if test_name not in self.return_value: # Test function did not complete successfully return fig = self.return_value[test_name] if remove_text: remove_ticks_and_titles(fig) result_dir = self.make_test_results_dir(item) summary = { 'status': None, 'image_status': None, 'hash_status': None, 'status_msg': None, 'baseline_image': None, 'diff_image': None, 'rms': None, 'tolerance': None, 'result_image': None, 'baseline_hash': None, 'result_hash': None, } # What we do now depends on whether we are generating the # reference images or simply running the test. if self.generate_dir is not None: summary['status'] = 'skipped' summary['image_status'] = 'generated' summary['status_msg'] = 'Skipped test, since generating image.' generate_image = self.generate_baseline_image(item, fig) if self.results_always: # Make baseline image available in HTML result_image = (result_dir / "baseline.png").absolute() shutil.copy(generate_image, result_image) summary['baseline_image'] = \ result_image.relative_to(self.results_dir).as_posix() if self.generate_hash_library is not None: summary['hash_status'] = 'generated' image_hash = self.generate_image_hash(item, fig) self._generated_hash_library[test_name] = image_hash summary['baseline_hash'] = image_hash # Only test figures if not generating images if self.generate_dir is None: # Compare to hash library if self.hash_library or compare.kwargs.get('hash_library', None): msg = self.compare_image_to_hash_library(item, fig, result_dir, summary=summary) # Compare against a baseline if specified else: msg = self.compare_image_to_baseline(item, fig, result_dir, summary=summary) close_mpl_figure(fig) if msg is None: if not self.results_always: shutil.rmtree(result_dir) for image_type in ['baseline_image', 'diff_image', 'result_image']: summary[image_type] = None # image no longer exists else: self._test_results[test_name] = summary pytest.fail(msg, pytrace=False) close_mpl_figure(fig) self._test_results[test_name] = summary if summary['status'] == 'skipped': > pytest.skip(summary['status_msg']) E Skipped: Skipped test, since generating image. pytest_mpl/plugin.py:694: Skipped During handling of the above exception, another exception occurred: cls = func = . at 0x71117c417640> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: "Callable[[], TResult]", when: "Literal['collect', 'setup', 'call', 'teardown']", reraise: Optional[ Union[Type[BaseException], Tuple[Type[BaseException], ...]] ] = None, ) -> "CallInfo[TResult]": """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None start = timing.time() precise_start = timing.perf_counter() try: > result: Optional[TResult] = func() /usr/lib/python3.10/site-packages/_pytest/runner.py:341: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.10/site-packages/_pytest/runner.py:262: in lambda: ihook(item=item, **kwds), when=when, reraise=reraise /usr/lib/python3.10/site-packages/pluggy/_hooks.py:501: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) /usr/lib/python3.10/site-packages/pluggy/_manager.py:119: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impl = > e = Skipped test, since generating image. def _warn_teardown_exception( hook_name: str, hook_impl: HookImpl, e: BaseException ) -> None: msg = "A plugin raised an exception during an old-style hookwrapper teardown.\n" msg += f"Plugin: {hook_impl.plugin_name}, Hook: {hook_name}\n" msg += f"{type(e).__name__}: {e}\n" msg += "For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning" # noqa: E501 > warnings.warn(PluggyTeardownRaisedWarning(msg), stacklevel=5) E pluggy.PluggyTeardownRaisedWarning: A plugin raised an exception during an old-style hookwrapper teardown. E Plugin: 124319978666160, Hook: pytest_runtest_call E Skipped: Skipped test, since generating image. E For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning /usr/lib/python3.10/site-packages/pluggy/_callers.py:49: PluggyTeardownRaisedWarning _____________________________ test_hdiff_imissing ______________________________ self = item = @pytest.hookimpl(hookwrapper=True) def pytest_runtest_call(self, item): # noqa compare = get_compare(item) if compare is None: yield return import matplotlib.pyplot as plt try: from matplotlib.testing.decorators import remove_ticks_and_titles except ImportError: from matplotlib.testing.decorators import ImageComparisonTest as MplImageComparisonTest remove_ticks_and_titles = MplImageComparisonTest.remove_text style = compare.kwargs.get('style', 'classic') remove_text = compare.kwargs.get('remove_text', False) backend = compare.kwargs.get('backend', 'agg') with plt.style.context(style, after_reset=True), switch_backend(backend): # Run test and get figure object wrap_figure_interceptor(self, item) yield test_name = generate_test_name(item) if test_name not in self.return_value: # Test function did not complete successfully return fig = self.return_value[test_name] if remove_text: remove_ticks_and_titles(fig) result_dir = self.make_test_results_dir(item) summary = { 'status': None, 'image_status': None, 'hash_status': None, 'status_msg': None, 'baseline_image': None, 'diff_image': None, 'rms': None, 'tolerance': None, 'result_image': None, 'baseline_hash': None, 'result_hash': None, } # What we do now depends on whether we are generating the # reference images or simply running the test. if self.generate_dir is not None: summary['status'] = 'skipped' summary['image_status'] = 'generated' summary['status_msg'] = 'Skipped test, since generating image.' generate_image = self.generate_baseline_image(item, fig) if self.results_always: # Make baseline image available in HTML result_image = (result_dir / "baseline.png").absolute() shutil.copy(generate_image, result_image) summary['baseline_image'] = \ result_image.relative_to(self.results_dir).as_posix() if self.generate_hash_library is not None: summary['hash_status'] = 'generated' image_hash = self.generate_image_hash(item, fig) self._generated_hash_library[test_name] = image_hash summary['baseline_hash'] = image_hash # Only test figures if not generating images if self.generate_dir is None: # Compare to hash library if self.hash_library or compare.kwargs.get('hash_library', None): msg = self.compare_image_to_hash_library(item, fig, result_dir, summary=summary) # Compare against a baseline if specified else: msg = self.compare_image_to_baseline(item, fig, result_dir, summary=summary) close_mpl_figure(fig) if msg is None: if not self.results_always: shutil.rmtree(result_dir) for image_type in ['baseline_image', 'diff_image', 'result_image']: summary[image_type] = None # image no longer exists else: self._test_results[test_name] = summary pytest.fail(msg, pytrace=False) close_mpl_figure(fig) self._test_results[test_name] = summary if summary['status'] == 'skipped': > pytest.skip(summary['status_msg']) E Skipped: Skipped test, since generating image. pytest_mpl/plugin.py:694: Skipped During handling of the above exception, another exception occurred: cls = func = . at 0x71117c0e72e0> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: "Callable[[], TResult]", when: "Literal['collect', 'setup', 'call', 'teardown']", reraise: Optional[ Union[Type[BaseException], Tuple[Type[BaseException], ...]] ] = None, ) -> "CallInfo[TResult]": """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None start = timing.time() precise_start = timing.perf_counter() try: > result: Optional[TResult] = func() /usr/lib/python3.10/site-packages/_pytest/runner.py:341: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.10/site-packages/_pytest/runner.py:262: in lambda: ihook(item=item, **kwds), when=when, reraise=reraise /usr/lib/python3.10/site-packages/pluggy/_hooks.py:501: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) /usr/lib/python3.10/site-packages/pluggy/_manager.py:119: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impl = > e = Skipped test, since generating image. def _warn_teardown_exception( hook_name: str, hook_impl: HookImpl, e: BaseException ) -> None: msg = "A plugin raised an exception during an old-style hookwrapper teardown.\n" msg += f"Plugin: {hook_impl.plugin_name}, Hook: {hook_name}\n" msg += f"{type(e).__name__}: {e}\n" msg += "For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning" # noqa: E501 > warnings.warn(PluggyTeardownRaisedWarning(msg), stacklevel=5) E pluggy.PluggyTeardownRaisedWarning: A plugin raised an exception during an old-style hookwrapper teardown. E Plugin: 124319978666160, Hook: pytest_runtest_call E Skipped: Skipped test, since generating image. E For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning /usr/lib/python3.10/site-packages/pluggy/_callers.py:49: PluggyTeardownRaisedWarning _____________________________ test_hmissing_imatch _____________________________ self = item = @pytest.hookimpl(hookwrapper=True) def pytest_runtest_call(self, item): # noqa compare = get_compare(item) if compare is None: yield return import matplotlib.pyplot as plt try: from matplotlib.testing.decorators import remove_ticks_and_titles except ImportError: from matplotlib.testing.decorators import ImageComparisonTest as MplImageComparisonTest remove_ticks_and_titles = MplImageComparisonTest.remove_text style = compare.kwargs.get('style', 'classic') remove_text = compare.kwargs.get('remove_text', False) backend = compare.kwargs.get('backend', 'agg') with plt.style.context(style, after_reset=True), switch_backend(backend): # Run test and get figure object wrap_figure_interceptor(self, item) yield test_name = generate_test_name(item) if test_name not in self.return_value: # Test function did not complete successfully return fig = self.return_value[test_name] if remove_text: remove_ticks_and_titles(fig) result_dir = self.make_test_results_dir(item) summary = { 'status': None, 'image_status': None, 'hash_status': None, 'status_msg': None, 'baseline_image': None, 'diff_image': None, 'rms': None, 'tolerance': None, 'result_image': None, 'baseline_hash': None, 'result_hash': None, } # What we do now depends on whether we are generating the # reference images or simply running the test. if self.generate_dir is not None: summary['status'] = 'skipped' summary['image_status'] = 'generated' summary['status_msg'] = 'Skipped test, since generating image.' generate_image = self.generate_baseline_image(item, fig) if self.results_always: # Make baseline image available in HTML result_image = (result_dir / "baseline.png").absolute() shutil.copy(generate_image, result_image) summary['baseline_image'] = \ result_image.relative_to(self.results_dir).as_posix() if self.generate_hash_library is not None: summary['hash_status'] = 'generated' image_hash = self.generate_image_hash(item, fig) self._generated_hash_library[test_name] = image_hash summary['baseline_hash'] = image_hash # Only test figures if not generating images if self.generate_dir is None: # Compare to hash library if self.hash_library or compare.kwargs.get('hash_library', None): msg = self.compare_image_to_hash_library(item, fig, result_dir, summary=summary) # Compare against a baseline if specified else: msg = self.compare_image_to_baseline(item, fig, result_dir, summary=summary) close_mpl_figure(fig) if msg is None: if not self.results_always: shutil.rmtree(result_dir) for image_type in ['baseline_image', 'diff_image', 'result_image']: summary[image_type] = None # image no longer exists else: self._test_results[test_name] = summary pytest.fail(msg, pytrace=False) close_mpl_figure(fig) self._test_results[test_name] = summary if summary['status'] == 'skipped': > pytest.skip(summary['status_msg']) E Skipped: Skipped test, since generating image. pytest_mpl/plugin.py:694: Skipped During handling of the above exception, another exception occurred: cls = func = . at 0x71117c1671c0> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: "Callable[[], TResult]", when: "Literal['collect', 'setup', 'call', 'teardown']", reraise: Optional[ Union[Type[BaseException], Tuple[Type[BaseException], ...]] ] = None, ) -> "CallInfo[TResult]": """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None start = timing.time() precise_start = timing.perf_counter() try: > result: Optional[TResult] = func() /usr/lib/python3.10/site-packages/_pytest/runner.py:341: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.10/site-packages/_pytest/runner.py:262: in lambda: ihook(item=item, **kwds), when=when, reraise=reraise /usr/lib/python3.10/site-packages/pluggy/_hooks.py:501: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) /usr/lib/python3.10/site-packages/pluggy/_manager.py:119: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impl = > e = Skipped test, since generating image. def _warn_teardown_exception( hook_name: str, hook_impl: HookImpl, e: BaseException ) -> None: msg = "A plugin raised an exception during an old-style hookwrapper teardown.\n" msg += f"Plugin: {hook_impl.plugin_name}, Hook: {hook_name}\n" msg += f"{type(e).__name__}: {e}\n" msg += "For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning" # noqa: E501 > warnings.warn(PluggyTeardownRaisedWarning(msg), stacklevel=5) E pluggy.PluggyTeardownRaisedWarning: A plugin raised an exception during an old-style hookwrapper teardown. E Plugin: 124319978666160, Hook: pytest_runtest_call E Skipped: Skipped test, since generating image. E For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning /usr/lib/python3.10/site-packages/pluggy/_callers.py:49: PluggyTeardownRaisedWarning _____________________________ test_hmissing_idiff ______________________________ self = item = @pytest.hookimpl(hookwrapper=True) def pytest_runtest_call(self, item): # noqa compare = get_compare(item) if compare is None: yield return import matplotlib.pyplot as plt try: from matplotlib.testing.decorators import remove_ticks_and_titles except ImportError: from matplotlib.testing.decorators import ImageComparisonTest as MplImageComparisonTest remove_ticks_and_titles = MplImageComparisonTest.remove_text style = compare.kwargs.get('style', 'classic') remove_text = compare.kwargs.get('remove_text', False) backend = compare.kwargs.get('backend', 'agg') with plt.style.context(style, after_reset=True), switch_backend(backend): # Run test and get figure object wrap_figure_interceptor(self, item) yield test_name = generate_test_name(item) if test_name not in self.return_value: # Test function did not complete successfully return fig = self.return_value[test_name] if remove_text: remove_ticks_and_titles(fig) result_dir = self.make_test_results_dir(item) summary = { 'status': None, 'image_status': None, 'hash_status': None, 'status_msg': None, 'baseline_image': None, 'diff_image': None, 'rms': None, 'tolerance': None, 'result_image': None, 'baseline_hash': None, 'result_hash': None, } # What we do now depends on whether we are generating the # reference images or simply running the test. if self.generate_dir is not None: summary['status'] = 'skipped' summary['image_status'] = 'generated' summary['status_msg'] = 'Skipped test, since generating image.' generate_image = self.generate_baseline_image(item, fig) if self.results_always: # Make baseline image available in HTML result_image = (result_dir / "baseline.png").absolute() shutil.copy(generate_image, result_image) summary['baseline_image'] = \ result_image.relative_to(self.results_dir).as_posix() if self.generate_hash_library is not None: summary['hash_status'] = 'generated' image_hash = self.generate_image_hash(item, fig) self._generated_hash_library[test_name] = image_hash summary['baseline_hash'] = image_hash # Only test figures if not generating images if self.generate_dir is None: # Compare to hash library if self.hash_library or compare.kwargs.get('hash_library', None): msg = self.compare_image_to_hash_library(item, fig, result_dir, summary=summary) # Compare against a baseline if specified else: msg = self.compare_image_to_baseline(item, fig, result_dir, summary=summary) close_mpl_figure(fig) if msg is None: if not self.results_always: shutil.rmtree(result_dir) for image_type in ['baseline_image', 'diff_image', 'result_image']: summary[image_type] = None # image no longer exists else: self._test_results[test_name] = summary pytest.fail(msg, pytrace=False) close_mpl_figure(fig) self._test_results[test_name] = summary if summary['status'] == 'skipped': > pytest.skip(summary['status_msg']) E Skipped: Skipped test, since generating image. pytest_mpl/plugin.py:694: Skipped During handling of the above exception, another exception occurred: cls = func = . at 0x71117bdcc670> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: "Callable[[], TResult]", when: "Literal['collect', 'setup', 'call', 'teardown']", reraise: Optional[ Union[Type[BaseException], Tuple[Type[BaseException], ...]] ] = None, ) -> "CallInfo[TResult]": """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None start = timing.time() precise_start = timing.perf_counter() try: > result: Optional[TResult] = func() /usr/lib/python3.10/site-packages/_pytest/runner.py:341: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.10/site-packages/_pytest/runner.py:262: in lambda: ihook(item=item, **kwds), when=when, reraise=reraise /usr/lib/python3.10/site-packages/pluggy/_hooks.py:501: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) /usr/lib/python3.10/site-packages/pluggy/_manager.py:119: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impl = > e = Skipped test, since generating image. def _warn_teardown_exception( hook_name: str, hook_impl: HookImpl, e: BaseException ) -> None: msg = "A plugin raised an exception during an old-style hookwrapper teardown.\n" msg += f"Plugin: {hook_impl.plugin_name}, Hook: {hook_name}\n" msg += f"{type(e).__name__}: {e}\n" msg += "For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning" # noqa: E501 > warnings.warn(PluggyTeardownRaisedWarning(msg), stacklevel=5) E pluggy.PluggyTeardownRaisedWarning: A plugin raised an exception during an old-style hookwrapper teardown. E Plugin: 124319978666160, Hook: pytest_runtest_call E Skipped: Skipped test, since generating image. E For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning /usr/lib/python3.10/site-packages/pluggy/_callers.py:49: PluggyTeardownRaisedWarning ___________________________ test_hmissing_idiffshape ___________________________ self = item = @pytest.hookimpl(hookwrapper=True) def pytest_runtest_call(self, item): # noqa compare = get_compare(item) if compare is None: yield return import matplotlib.pyplot as plt try: from matplotlib.testing.decorators import remove_ticks_and_titles except ImportError: from matplotlib.testing.decorators import ImageComparisonTest as MplImageComparisonTest remove_ticks_and_titles = MplImageComparisonTest.remove_text style = compare.kwargs.get('style', 'classic') remove_text = compare.kwargs.get('remove_text', False) backend = compare.kwargs.get('backend', 'agg') with plt.style.context(style, after_reset=True), switch_backend(backend): # Run test and get figure object wrap_figure_interceptor(self, item) yield test_name = generate_test_name(item) if test_name not in self.return_value: # Test function did not complete successfully return fig = self.return_value[test_name] if remove_text: remove_ticks_and_titles(fig) result_dir = self.make_test_results_dir(item) summary = { 'status': None, 'image_status': None, 'hash_status': None, 'status_msg': None, 'baseline_image': None, 'diff_image': None, 'rms': None, 'tolerance': None, 'result_image': None, 'baseline_hash': None, 'result_hash': None, } # What we do now depends on whether we are generating the # reference images or simply running the test. if self.generate_dir is not None: summary['status'] = 'skipped' summary['image_status'] = 'generated' summary['status_msg'] = 'Skipped test, since generating image.' generate_image = self.generate_baseline_image(item, fig) if self.results_always: # Make baseline image available in HTML result_image = (result_dir / "baseline.png").absolute() shutil.copy(generate_image, result_image) summary['baseline_image'] = \ result_image.relative_to(self.results_dir).as_posix() if self.generate_hash_library is not None: summary['hash_status'] = 'generated' image_hash = self.generate_image_hash(item, fig) self._generated_hash_library[test_name] = image_hash summary['baseline_hash'] = image_hash # Only test figures if not generating images if self.generate_dir is None: # Compare to hash library if self.hash_library or compare.kwargs.get('hash_library', None): msg = self.compare_image_to_hash_library(item, fig, result_dir, summary=summary) # Compare against a baseline if specified else: msg = self.compare_image_to_baseline(item, fig, result_dir, summary=summary) close_mpl_figure(fig) if msg is None: if not self.results_always: shutil.rmtree(result_dir) for image_type in ['baseline_image', 'diff_image', 'result_image']: summary[image_type] = None # image no longer exists else: self._test_results[test_name] = summary pytest.fail(msg, pytrace=False) close_mpl_figure(fig) self._test_results[test_name] = summary if summary['status'] == 'skipped': > pytest.skip(summary['status_msg']) E Skipped: Skipped test, since generating image. pytest_mpl/plugin.py:694: Skipped During handling of the above exception, another exception occurred: cls = func = . at 0x71117bdc4670> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: "Callable[[], TResult]", when: "Literal['collect', 'setup', 'call', 'teardown']", reraise: Optional[ Union[Type[BaseException], Tuple[Type[BaseException], ...]] ] = None, ) -> "CallInfo[TResult]": """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None start = timing.time() precise_start = timing.perf_counter() try: > result: Optional[TResult] = func() /usr/lib/python3.10/site-packages/_pytest/runner.py:341: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.10/site-packages/_pytest/runner.py:262: in lambda: ihook(item=item, **kwds), when=when, reraise=reraise /usr/lib/python3.10/site-packages/pluggy/_hooks.py:501: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) /usr/lib/python3.10/site-packages/pluggy/_manager.py:119: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impl = > e = Skipped test, since generating image. def _warn_teardown_exception( hook_name: str, hook_impl: HookImpl, e: BaseException ) -> None: msg = "A plugin raised an exception during an old-style hookwrapper teardown.\n" msg += f"Plugin: {hook_impl.plugin_name}, Hook: {hook_name}\n" msg += f"{type(e).__name__}: {e}\n" msg += "For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning" # noqa: E501 > warnings.warn(PluggyTeardownRaisedWarning(msg), stacklevel=5) E pluggy.PluggyTeardownRaisedWarning: A plugin raised an exception during an old-style hookwrapper teardown. E Plugin: 124319978666160, Hook: pytest_runtest_call E Skipped: Skipped test, since generating image. E For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning /usr/lib/python3.10/site-packages/pluggy/_callers.py:49: PluggyTeardownRaisedWarning ____________________________ test_hmissing_imissing ____________________________ self = item = @pytest.hookimpl(hookwrapper=True) def pytest_runtest_call(self, item): # noqa compare = get_compare(item) if compare is None: yield return import matplotlib.pyplot as plt try: from matplotlib.testing.decorators import remove_ticks_and_titles except ImportError: from matplotlib.testing.decorators import ImageComparisonTest as MplImageComparisonTest remove_ticks_and_titles = MplImageComparisonTest.remove_text style = compare.kwargs.get('style', 'classic') remove_text = compare.kwargs.get('remove_text', False) backend = compare.kwargs.get('backend', 'agg') with plt.style.context(style, after_reset=True), switch_backend(backend): # Run test and get figure object wrap_figure_interceptor(self, item) yield test_name = generate_test_name(item) if test_name not in self.return_value: # Test function did not complete successfully return fig = self.return_value[test_name] if remove_text: remove_ticks_and_titles(fig) result_dir = self.make_test_results_dir(item) summary = { 'status': None, 'image_status': None, 'hash_status': None, 'status_msg': None, 'baseline_image': None, 'diff_image': None, 'rms': None, 'tolerance': None, 'result_image': None, 'baseline_hash': None, 'result_hash': None, } # What we do now depends on whether we are generating the # reference images or simply running the test. if self.generate_dir is not None: summary['status'] = 'skipped' summary['image_status'] = 'generated' summary['status_msg'] = 'Skipped test, since generating image.' generate_image = self.generate_baseline_image(item, fig) if self.results_always: # Make baseline image available in HTML result_image = (result_dir / "baseline.png").absolute() shutil.copy(generate_image, result_image) summary['baseline_image'] = \ result_image.relative_to(self.results_dir).as_posix() if self.generate_hash_library is not None: summary['hash_status'] = 'generated' image_hash = self.generate_image_hash(item, fig) self._generated_hash_library[test_name] = image_hash summary['baseline_hash'] = image_hash # Only test figures if not generating images if self.generate_dir is None: # Compare to hash library if self.hash_library or compare.kwargs.get('hash_library', None): msg = self.compare_image_to_hash_library(item, fig, result_dir, summary=summary) # Compare against a baseline if specified else: msg = self.compare_image_to_baseline(item, fig, result_dir, summary=summary) close_mpl_figure(fig) if msg is None: if not self.results_always: shutil.rmtree(result_dir) for image_type in ['baseline_image', 'diff_image', 'result_image']: summary[image_type] = None # image no longer exists else: self._test_results[test_name] = summary pytest.fail(msg, pytrace=False) close_mpl_figure(fig) self._test_results[test_name] = summary if summary['status'] == 'skipped': > pytest.skip(summary['status_msg']) E Skipped: Skipped test, since generating image. pytest_mpl/plugin.py:694: Skipped During handling of the above exception, another exception occurred: cls = func = . at 0x71117b830790> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: "Callable[[], TResult]", when: "Literal['collect', 'setup', 'call', 'teardown']", reraise: Optional[ Union[Type[BaseException], Tuple[Type[BaseException], ...]] ] = None, ) -> "CallInfo[TResult]": """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None start = timing.time() precise_start = timing.perf_counter() try: > result: Optional[TResult] = func() /usr/lib/python3.10/site-packages/_pytest/runner.py:341: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.10/site-packages/_pytest/runner.py:262: in lambda: ihook(item=item, **kwds), when=when, reraise=reraise /usr/lib/python3.10/site-packages/pluggy/_hooks.py:501: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) /usr/lib/python3.10/site-packages/pluggy/_manager.py:119: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impl = > e = Skipped test, since generating image. def _warn_teardown_exception( hook_name: str, hook_impl: HookImpl, e: BaseException ) -> None: msg = "A plugin raised an exception during an old-style hookwrapper teardown.\n" msg += f"Plugin: {hook_impl.plugin_name}, Hook: {hook_name}\n" msg += f"{type(e).__name__}: {e}\n" msg += "For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning" # noqa: E501 > warnings.warn(PluggyTeardownRaisedWarning(msg), stacklevel=5) E pluggy.PluggyTeardownRaisedWarning: A plugin raised an exception during an old-style hookwrapper teardown. E Plugin: 124319978666160, Hook: pytest_runtest_call E Skipped: Skipped test, since generating image. E For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning /usr/lib/python3.10/site-packages/pluggy/_callers.py:49: PluggyTeardownRaisedWarning _________________________ test_hdiff_imatch_tolerance __________________________ self = item = @pytest.hookimpl(hookwrapper=True) def pytest_runtest_call(self, item): # noqa compare = get_compare(item) if compare is None: yield return import matplotlib.pyplot as plt try: from matplotlib.testing.decorators import remove_ticks_and_titles except ImportError: from matplotlib.testing.decorators import ImageComparisonTest as MplImageComparisonTest remove_ticks_and_titles = MplImageComparisonTest.remove_text style = compare.kwargs.get('style', 'classic') remove_text = compare.kwargs.get('remove_text', False) backend = compare.kwargs.get('backend', 'agg') with plt.style.context(style, after_reset=True), switch_backend(backend): # Run test and get figure object wrap_figure_interceptor(self, item) yield test_name = generate_test_name(item) if test_name not in self.return_value: # Test function did not complete successfully return fig = self.return_value[test_name] if remove_text: remove_ticks_and_titles(fig) result_dir = self.make_test_results_dir(item) summary = { 'status': None, 'image_status': None, 'hash_status': None, 'status_msg': None, 'baseline_image': None, 'diff_image': None, 'rms': None, 'tolerance': None, 'result_image': None, 'baseline_hash': None, 'result_hash': None, } # What we do now depends on whether we are generating the # reference images or simply running the test. if self.generate_dir is not None: summary['status'] = 'skipped' summary['image_status'] = 'generated' summary['status_msg'] = 'Skipped test, since generating image.' generate_image = self.generate_baseline_image(item, fig) if self.results_always: # Make baseline image available in HTML result_image = (result_dir / "baseline.png").absolute() shutil.copy(generate_image, result_image) summary['baseline_image'] = \ result_image.relative_to(self.results_dir).as_posix() if self.generate_hash_library is not None: summary['hash_status'] = 'generated' image_hash = self.generate_image_hash(item, fig) self._generated_hash_library[test_name] = image_hash summary['baseline_hash'] = image_hash # Only test figures if not generating images if self.generate_dir is None: # Compare to hash library if self.hash_library or compare.kwargs.get('hash_library', None): msg = self.compare_image_to_hash_library(item, fig, result_dir, summary=summary) # Compare against a baseline if specified else: msg = self.compare_image_to_baseline(item, fig, result_dir, summary=summary) close_mpl_figure(fig) if msg is None: if not self.results_always: shutil.rmtree(result_dir) for image_type in ['baseline_image', 'diff_image', 'result_image']: summary[image_type] = None # image no longer exists else: self._test_results[test_name] = summary pytest.fail(msg, pytrace=False) close_mpl_figure(fig) self._test_results[test_name] = summary if summary['status'] == 'skipped': > pytest.skip(summary['status_msg']) E Skipped: Skipped test, since generating image. pytest_mpl/plugin.py:694: Skipped During handling of the above exception, another exception occurred: cls = func = . at 0x71117b7e0160> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: "Callable[[], TResult]", when: "Literal['collect', 'setup', 'call', 'teardown']", reraise: Optional[ Union[Type[BaseException], Tuple[Type[BaseException], ...]] ] = None, ) -> "CallInfo[TResult]": """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None start = timing.time() precise_start = timing.perf_counter() try: > result: Optional[TResult] = func() /usr/lib/python3.10/site-packages/_pytest/runner.py:341: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.10/site-packages/_pytest/runner.py:262: in lambda: ihook(item=item, **kwds), when=when, reraise=reraise /usr/lib/python3.10/site-packages/pluggy/_hooks.py:501: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) /usr/lib/python3.10/site-packages/pluggy/_manager.py:119: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impl = > e = Skipped test, since generating image. def _warn_teardown_exception( hook_name: str, hook_impl: HookImpl, e: BaseException ) -> None: msg = "A plugin raised an exception during an old-style hookwrapper teardown.\n" msg += f"Plugin: {hook_impl.plugin_name}, Hook: {hook_name}\n" msg += f"{type(e).__name__}: {e}\n" msg += "For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning" # noqa: E501 > warnings.warn(PluggyTeardownRaisedWarning(msg), stacklevel=5) E pluggy.PluggyTeardownRaisedWarning: A plugin raised an exception during an old-style hookwrapper teardown. E Plugin: 124319978666160, Hook: pytest_runtest_call E Skipped: Skipped test, since generating image. E For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning /usr/lib/python3.10/site-packages/pluggy/_callers.py:49: PluggyTeardownRaisedWarning __________________________ test_hdiff_idiff_tolerance __________________________ self = item = @pytest.hookimpl(hookwrapper=True) def pytest_runtest_call(self, item): # noqa compare = get_compare(item) if compare is None: yield return import matplotlib.pyplot as plt try: from matplotlib.testing.decorators import remove_ticks_and_titles except ImportError: from matplotlib.testing.decorators import ImageComparisonTest as MplImageComparisonTest remove_ticks_and_titles = MplImageComparisonTest.remove_text style = compare.kwargs.get('style', 'classic') remove_text = compare.kwargs.get('remove_text', False) backend = compare.kwargs.get('backend', 'agg') with plt.style.context(style, after_reset=True), switch_backend(backend): # Run test and get figure object wrap_figure_interceptor(self, item) yield test_name = generate_test_name(item) if test_name not in self.return_value: # Test function did not complete successfully return fig = self.return_value[test_name] if remove_text: remove_ticks_and_titles(fig) result_dir = self.make_test_results_dir(item) summary = { 'status': None, 'image_status': None, 'hash_status': None, 'status_msg': None, 'baseline_image': None, 'diff_image': None, 'rms': None, 'tolerance': None, 'result_image': None, 'baseline_hash': None, 'result_hash': None, } # What we do now depends on whether we are generating the # reference images or simply running the test. if self.generate_dir is not None: summary['status'] = 'skipped' summary['image_status'] = 'generated' summary['status_msg'] = 'Skipped test, since generating image.' generate_image = self.generate_baseline_image(item, fig) if self.results_always: # Make baseline image available in HTML result_image = (result_dir / "baseline.png").absolute() shutil.copy(generate_image, result_image) summary['baseline_image'] = \ result_image.relative_to(self.results_dir).as_posix() if self.generate_hash_library is not None: summary['hash_status'] = 'generated' image_hash = self.generate_image_hash(item, fig) self._generated_hash_library[test_name] = image_hash summary['baseline_hash'] = image_hash # Only test figures if not generating images if self.generate_dir is None: # Compare to hash library if self.hash_library or compare.kwargs.get('hash_library', None): msg = self.compare_image_to_hash_library(item, fig, result_dir, summary=summary) # Compare against a baseline if specified else: msg = self.compare_image_to_baseline(item, fig, result_dir, summary=summary) close_mpl_figure(fig) if msg is None: if not self.results_always: shutil.rmtree(result_dir) for image_type in ['baseline_image', 'diff_image', 'result_image']: summary[image_type] = None # image no longer exists else: self._test_results[test_name] = summary pytest.fail(msg, pytrace=False) close_mpl_figure(fig) self._test_results[test_name] = summary if summary['status'] == 'skipped': > pytest.skip(summary['status_msg']) E Skipped: Skipped test, since generating image. pytest_mpl/plugin.py:694: Skipped During handling of the above exception, another exception occurred: cls = func = . at 0x71117b79b6d0> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: "Callable[[], TResult]", when: "Literal['collect', 'setup', 'call', 'teardown']", reraise: Optional[ Union[Type[BaseException], Tuple[Type[BaseException], ...]] ] = None, ) -> "CallInfo[TResult]": """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None start = timing.time() precise_start = timing.perf_counter() try: > result: Optional[TResult] = func() /usr/lib/python3.10/site-packages/_pytest/runner.py:341: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.10/site-packages/_pytest/runner.py:262: in lambda: ihook(item=item, **kwds), when=when, reraise=reraise /usr/lib/python3.10/site-packages/pluggy/_hooks.py:501: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) /usr/lib/python3.10/site-packages/pluggy/_manager.py:119: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impl = > e = Skipped test, since generating image. def _warn_teardown_exception( hook_name: str, hook_impl: HookImpl, e: BaseException ) -> None: msg = "A plugin raised an exception during an old-style hookwrapper teardown.\n" msg += f"Plugin: {hook_impl.plugin_name}, Hook: {hook_name}\n" msg += f"{type(e).__name__}: {e}\n" msg += "For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning" # noqa: E501 > warnings.warn(PluggyTeardownRaisedWarning(msg), stacklevel=5) E pluggy.PluggyTeardownRaisedWarning: A plugin raised an exception during an old-style hookwrapper teardown. E Plugin: 124319978666160, Hook: pytest_runtest_call E Skipped: Skipped test, since generating image. E For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning /usr/lib/python3.10/site-packages/pluggy/_callers.py:49: PluggyTeardownRaisedWarning __________________________ test_hdiff_imatch_savefig ___________________________ self = item = @pytest.hookimpl(hookwrapper=True) def pytest_runtest_call(self, item): # noqa compare = get_compare(item) if compare is None: yield return import matplotlib.pyplot as plt try: from matplotlib.testing.decorators import remove_ticks_and_titles except ImportError: from matplotlib.testing.decorators import ImageComparisonTest as MplImageComparisonTest remove_ticks_and_titles = MplImageComparisonTest.remove_text style = compare.kwargs.get('style', 'classic') remove_text = compare.kwargs.get('remove_text', False) backend = compare.kwargs.get('backend', 'agg') with plt.style.context(style, after_reset=True), switch_backend(backend): # Run test and get figure object wrap_figure_interceptor(self, item) yield test_name = generate_test_name(item) if test_name not in self.return_value: # Test function did not complete successfully return fig = self.return_value[test_name] if remove_text: remove_ticks_and_titles(fig) result_dir = self.make_test_results_dir(item) summary = { 'status': None, 'image_status': None, 'hash_status': None, 'status_msg': None, 'baseline_image': None, 'diff_image': None, 'rms': None, 'tolerance': None, 'result_image': None, 'baseline_hash': None, 'result_hash': None, } # What we do now depends on whether we are generating the # reference images or simply running the test. if self.generate_dir is not None: summary['status'] = 'skipped' summary['image_status'] = 'generated' summary['status_msg'] = 'Skipped test, since generating image.' generate_image = self.generate_baseline_image(item, fig) if self.results_always: # Make baseline image available in HTML result_image = (result_dir / "baseline.png").absolute() shutil.copy(generate_image, result_image) summary['baseline_image'] = \ result_image.relative_to(self.results_dir).as_posix() if self.generate_hash_library is not None: summary['hash_status'] = 'generated' image_hash = self.generate_image_hash(item, fig) self._generated_hash_library[test_name] = image_hash summary['baseline_hash'] = image_hash # Only test figures if not generating images if self.generate_dir is None: # Compare to hash library if self.hash_library or compare.kwargs.get('hash_library', None): msg = self.compare_image_to_hash_library(item, fig, result_dir, summary=summary) # Compare against a baseline if specified else: msg = self.compare_image_to_baseline(item, fig, result_dir, summary=summary) close_mpl_figure(fig) if msg is None: if not self.results_always: shutil.rmtree(result_dir) for image_type in ['baseline_image', 'diff_image', 'result_image']: summary[image_type] = None # image no longer exists else: self._test_results[test_name] = summary pytest.fail(msg, pytrace=False) close_mpl_figure(fig) self._test_results[test_name] = summary if summary['status'] == 'skipped': > pytest.skip(summary['status_msg']) E Skipped: Skipped test, since generating image. pytest_mpl/plugin.py:694: Skipped During handling of the above exception, another exception occurred: cls = func = . at 0x71117b0572e0> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: "Callable[[], TResult]", when: "Literal['collect', 'setup', 'call', 'teardown']", reraise: Optional[ Union[Type[BaseException], Tuple[Type[BaseException], ...]] ] = None, ) -> "CallInfo[TResult]": """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None start = timing.time() precise_start = timing.perf_counter() try: > result: Optional[TResult] = func() /usr/lib/python3.10/site-packages/_pytest/runner.py:341: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.10/site-packages/_pytest/runner.py:262: in lambda: ihook(item=item, **kwds), when=when, reraise=reraise /usr/lib/python3.10/site-packages/pluggy/_hooks.py:501: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) /usr/lib/python3.10/site-packages/pluggy/_manager.py:119: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impl = > e = Skipped test, since generating image. def _warn_teardown_exception( hook_name: str, hook_impl: HookImpl, e: BaseException ) -> None: msg = "A plugin raised an exception during an old-style hookwrapper teardown.\n" msg += f"Plugin: {hook_impl.plugin_name}, Hook: {hook_name}\n" msg += f"{type(e).__name__}: {e}\n" msg += "For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning" # noqa: E501 > warnings.warn(PluggyTeardownRaisedWarning(msg), stacklevel=5) E pluggy.PluggyTeardownRaisedWarning: A plugin raised an exception during an old-style hookwrapper teardown. E Plugin: 124319978666160, Hook: pytest_runtest_call E Skipped: Skipped test, since generating image. E For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning /usr/lib/python3.10/site-packages/pluggy/_callers.py:49: PluggyTeardownRaisedWarning ___________________________ test_hdiff_imatch_style ____________________________ self = item = @pytest.hookimpl(hookwrapper=True) def pytest_runtest_call(self, item): # noqa compare = get_compare(item) if compare is None: yield return import matplotlib.pyplot as plt try: from matplotlib.testing.decorators import remove_ticks_and_titles except ImportError: from matplotlib.testing.decorators import ImageComparisonTest as MplImageComparisonTest remove_ticks_and_titles = MplImageComparisonTest.remove_text style = compare.kwargs.get('style', 'classic') remove_text = compare.kwargs.get('remove_text', False) backend = compare.kwargs.get('backend', 'agg') with plt.style.context(style, after_reset=True), switch_backend(backend): # Run test and get figure object wrap_figure_interceptor(self, item) yield test_name = generate_test_name(item) if test_name not in self.return_value: # Test function did not complete successfully return fig = self.return_value[test_name] if remove_text: remove_ticks_and_titles(fig) result_dir = self.make_test_results_dir(item) summary = { 'status': None, 'image_status': None, 'hash_status': None, 'status_msg': None, 'baseline_image': None, 'diff_image': None, 'rms': None, 'tolerance': None, 'result_image': None, 'baseline_hash': None, 'result_hash': None, } # What we do now depends on whether we are generating the # reference images or simply running the test. if self.generate_dir is not None: summary['status'] = 'skipped' summary['image_status'] = 'generated' summary['status_msg'] = 'Skipped test, since generating image.' generate_image = self.generate_baseline_image(item, fig) if self.results_always: # Make baseline image available in HTML result_image = (result_dir / "baseline.png").absolute() shutil.copy(generate_image, result_image) summary['baseline_image'] = \ result_image.relative_to(self.results_dir).as_posix() if self.generate_hash_library is not None: summary['hash_status'] = 'generated' image_hash = self.generate_image_hash(item, fig) self._generated_hash_library[test_name] = image_hash summary['baseline_hash'] = image_hash # Only test figures if not generating images if self.generate_dir is None: # Compare to hash library if self.hash_library or compare.kwargs.get('hash_library', None): msg = self.compare_image_to_hash_library(item, fig, result_dir, summary=summary) # Compare against a baseline if specified else: msg = self.compare_image_to_baseline(item, fig, result_dir, summary=summary) close_mpl_figure(fig) if msg is None: if not self.results_always: shutil.rmtree(result_dir) for image_type in ['baseline_image', 'diff_image', 'result_image']: summary[image_type] = None # image no longer exists else: self._test_results[test_name] = summary pytest.fail(msg, pytrace=False) close_mpl_figure(fig) self._test_results[test_name] = summary if summary['status'] == 'skipped': > pytest.skip(summary['status_msg']) E Skipped: Skipped test, since generating image. pytest_mpl/plugin.py:694: Skipped During handling of the above exception, another exception occurred: cls = func = . at 0x71117afe6f80> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: "Callable[[], TResult]", when: "Literal['collect', 'setup', 'call', 'teardown']", reraise: Optional[ Union[Type[BaseException], Tuple[Type[BaseException], ...]] ] = None, ) -> "CallInfo[TResult]": """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None start = timing.time() precise_start = timing.perf_counter() try: > result: Optional[TResult] = func() /usr/lib/python3.10/site-packages/_pytest/runner.py:341: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.10/site-packages/_pytest/runner.py:262: in lambda: ihook(item=item, **kwds), when=when, reraise=reraise /usr/lib/python3.10/site-packages/pluggy/_hooks.py:501: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) /usr/lib/python3.10/site-packages/pluggy/_manager.py:119: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impl = > e = Skipped test, since generating image. def _warn_teardown_exception( hook_name: str, hook_impl: HookImpl, e: BaseException ) -> None: msg = "A plugin raised an exception during an old-style hookwrapper teardown.\n" msg += f"Plugin: {hook_impl.plugin_name}, Hook: {hook_name}\n" msg += f"{type(e).__name__}: {e}\n" msg += "For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning" # noqa: E501 > warnings.warn(PluggyTeardownRaisedWarning(msg), stacklevel=5) E pluggy.PluggyTeardownRaisedWarning: A plugin raised an exception during an old-style hookwrapper teardown. E Plugin: 124319978666160, Hook: pytest_runtest_call E Skipped: Skipped test, since generating image. E For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning /usr/lib/python3.10/site-packages/pluggy/_callers.py:49: PluggyTeardownRaisedWarning _________________________ test_hdiff_imatch_removetext _________________________ self = item = @pytest.hookimpl(hookwrapper=True) def pytest_runtest_call(self, item): # noqa compare = get_compare(item) if compare is None: yield return import matplotlib.pyplot as plt try: from matplotlib.testing.decorators import remove_ticks_and_titles except ImportError: from matplotlib.testing.decorators import ImageComparisonTest as MplImageComparisonTest remove_ticks_and_titles = MplImageComparisonTest.remove_text style = compare.kwargs.get('style', 'classic') remove_text = compare.kwargs.get('remove_text', False) backend = compare.kwargs.get('backend', 'agg') with plt.style.context(style, after_reset=True), switch_backend(backend): # Run test and get figure object wrap_figure_interceptor(self, item) yield test_name = generate_test_name(item) if test_name not in self.return_value: # Test function did not complete successfully return fig = self.return_value[test_name] if remove_text: remove_ticks_and_titles(fig) result_dir = self.make_test_results_dir(item) summary = { 'status': None, 'image_status': None, 'hash_status': None, 'status_msg': None, 'baseline_image': None, 'diff_image': None, 'rms': None, 'tolerance': None, 'result_image': None, 'baseline_hash': None, 'result_hash': None, } # What we do now depends on whether we are generating the # reference images or simply running the test. if self.generate_dir is not None: summary['status'] = 'skipped' summary['image_status'] = 'generated' summary['status_msg'] = 'Skipped test, since generating image.' generate_image = self.generate_baseline_image(item, fig) if self.results_always: # Make baseline image available in HTML result_image = (result_dir / "baseline.png").absolute() shutil.copy(generate_image, result_image) summary['baseline_image'] = \ result_image.relative_to(self.results_dir).as_posix() if self.generate_hash_library is not None: summary['hash_status'] = 'generated' image_hash = self.generate_image_hash(item, fig) self._generated_hash_library[test_name] = image_hash summary['baseline_hash'] = image_hash # Only test figures if not generating images if self.generate_dir is None: # Compare to hash library if self.hash_library or compare.kwargs.get('hash_library', None): msg = self.compare_image_to_hash_library(item, fig, result_dir, summary=summary) # Compare against a baseline if specified else: msg = self.compare_image_to_baseline(item, fig, result_dir, summary=summary) close_mpl_figure(fig) if msg is None: if not self.results_always: shutil.rmtree(result_dir) for image_type in ['baseline_image', 'diff_image', 'result_image']: summary[image_type] = None # image no longer exists else: self._test_results[test_name] = summary pytest.fail(msg, pytrace=False) close_mpl_figure(fig) self._test_results[test_name] = summary if summary['status'] == 'skipped': > pytest.skip(summary['status_msg']) E Skipped: Skipped test, since generating image. pytest_mpl/plugin.py:694: Skipped During handling of the above exception, another exception occurred: cls = func = . at 0x71117ac3ec20> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: "Callable[[], TResult]", when: "Literal['collect', 'setup', 'call', 'teardown']", reraise: Optional[ Union[Type[BaseException], Tuple[Type[BaseException], ...]] ] = None, ) -> "CallInfo[TResult]": """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None start = timing.time() precise_start = timing.perf_counter() try: > result: Optional[TResult] = func() /usr/lib/python3.10/site-packages/_pytest/runner.py:341: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.10/site-packages/_pytest/runner.py:262: in lambda: ihook(item=item, **kwds), when=when, reraise=reraise /usr/lib/python3.10/site-packages/pluggy/_hooks.py:501: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) /usr/lib/python3.10/site-packages/pluggy/_manager.py:119: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impl = > e = Skipped test, since generating image. def _warn_teardown_exception( hook_name: str, hook_impl: HookImpl, e: BaseException ) -> None: msg = "A plugin raised an exception during an old-style hookwrapper teardown.\n" msg += f"Plugin: {hook_impl.plugin_name}, Hook: {hook_name}\n" msg += f"{type(e).__name__}: {e}\n" msg += "For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning" # noqa: E501 > warnings.warn(PluggyTeardownRaisedWarning(msg), stacklevel=5) E pluggy.PluggyTeardownRaisedWarning: A plugin raised an exception during an old-style hookwrapper teardown. E Plugin: 124319978666160, Hook: pytest_runtest_call E Skipped: Skipped test, since generating image. E For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning /usr/lib/python3.10/site-packages/pluggy/_callers.py:49: PluggyTeardownRaisedWarning =========================== short test summary info ============================ FAILED tests/subtests/subtest.py::test_hmatch_imatch - pluggy.PluggyTeardownR... FAILED tests/subtests/subtest.py::test_hmatch_idiff - pluggy.PluggyTeardownRa... FAILED tests/subtests/subtest.py::test_hmatch_idiffshape - pluggy.PluggyTeard... FAILED tests/subtests/subtest.py::test_hmatch_imissing - pluggy.PluggyTeardow... FAILED tests/subtests/subtest.py::test_hdiff_imatch - pluggy.PluggyTeardownRa... FAILED tests/subtests/subtest.py::test_hdiff_idiff - pluggy.PluggyTeardownRai... FAILED tests/subtests/subtest.py::test_hdiff_idiffshape - pluggy.PluggyTeardo... FAILED tests/subtests/subtest.py::test_hdiff_imissing - pluggy.PluggyTeardown... FAILED tests/subtests/subtest.py::test_hmissing_imatch - pluggy.PluggyTeardow... FAILED tests/subtests/subtest.py::test_hmissing_idiff - pluggy.PluggyTeardown... FAILED tests/subtests/subtest.py::test_hmissing_idiffshape - pluggy.PluggyTea... FAILED tests/subtests/subtest.py::test_hmissing_imissing - pluggy.PluggyTeard... FAILED tests/subtests/subtest.py::test_hdiff_imatch_tolerance - pluggy.Pluggy... FAILED tests/subtests/subtest.py::test_hdiff_idiff_tolerance - pluggy.PluggyT... FAILED tests/subtests/subtest.py::test_hdiff_imatch_savefig - pluggy.PluggyTe... FAILED tests/subtests/subtest.py::test_hdiff_imatch_style - pluggy.PluggyTear... FAILED tests/subtests/subtest.py::test_hdiff_imatch_removetext - pluggy.Plugg... ============================== 17 failed in 2.48s ============================== A JSON report can be found at: /var/tmp/portage/dev-python/pytest-mpl-0.16.1/temp/pytest-of-portage/pytest-0/test_generate_images_only0/results/results.json ________________________ test_html_generate_images_only ________________________ tmp_path = PosixPath('/var/tmp/portage/dev-python/pytest-mpl-0.16.1/temp/pytest-of-portage/pytest-0/test_html_generate_images_only0') def test_html_generate_images_only(tmp_path): # generating images; no testing > run_subtest('test_html_generate_images_only', tmp_path, [rf'--mpl-generate-path={tmp_path}', *IMAGE_COMPARISON_MODE], summaries=['html'], xfail=False) tmp_path = PosixPath('/var/tmp/portage/dev-python/pytest-mpl-0.16.1/temp/pytest-of-portage/pytest-0/test_html_generate_images_only0') tests/subtests/test_subtest.py:260: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ baseline_summary_name = 'test_html_generate_images_only' tmp_path = PosixPath('/var/tmp/portage/dev-python/pytest-mpl-0.16.1/temp/pytest-of-portage/pytest-0/test_html_generate_images_only0') args = ['--mpl-generate-path=/var/tmp/portage/dev-python/pytest-mpl-0.16.1/temp/pytest-of-portage/pytest-0/test_html_generate_images_only0', '-k', 'image'] summaries = 'json,html', xfail = False, has_result_hashes = False generating_hashes = False, update_baseline = False, update_summary = False def run_subtest(baseline_summary_name, tmp_path, args, summaries=None, xfail=True, has_result_hashes=False, generating_hashes=False, update_baseline=UPDATE_BASELINE, update_summary=UPDATE_SUMMARY): """ Run pytest (within pytest) and check JSON summary report. Parameters ---------- baseline_summary_name : str String of the filename without extension for the baseline summary. tmp_path : pathlib.Path Path of a temporary directory to store results. args : list Extra arguments to pass to pytest. summaries : tuple or list or set, optional, default=[] Summaries to generate in addition to `json`. xfail : bool, optional, default=True Whether the overall pytest run should fail. has_result_hashes : bool or str, optional, default=False Whether a hash library is expected to exist in the results directory. If a string, this is the name of the expected results file. generating_hashes : bool, optional, default=False Whether `--mpl-generate-hash-library` was specified and both of `--mpl-hash-library` and `hash_library=` were not. """ if update_baseline and update_summary: raise ValueError("Cannot enable both `update_baseline` and `update_summary`.") # Parse arguments if summaries is None: summaries = [] assert isinstance(summaries, (tuple, list, set)) summaries = ','.join({'json'} | set(summaries)) # Create the results path results_path = tmp_path / 'results' results_path.mkdir() # Configure the arguments to run the test pytest_args = [sys.executable, '-m', 'pytest', str(TEST_FILE)] mpl_args = ['--mpl', rf'--mpl-results-path={results_path.as_posix()}', f'--mpl-generate-summary={summaries}'] if update_baseline: mpl_args += [rf'--mpl-generate-path={FULL_BASELINE_PATH}'] if HASH_LIBRARY.exists(): mpl_args += [rf'--mpl-generate-hash-library={HASH_LIBRARY}'] # Run the test and record exit status status = subprocess.call(pytest_args + mpl_args + args) # If updating baseline, don't check summaries if update_baseline: assert status == 0 transform_images(FULL_BASELINE_PATH) # Make image comparison tests fail correctly if HASH_LIBRARY.exists(): shutil.copy(HASH_LIBRARY, RESULT_LIBRARY) transform_hashes(HASH_LIBRARY) # Make hash comparison tests fail correctly pytest.skip("Skipping testing, since `update_baseline` is enabled.") return # Ensure exit status is as expected if xfail: assert status != 0 else: > assert status == 0 E assert 1 == 0 args = ['--mpl-generate-path=/var/tmp/portage/dev-python/pytest-mpl-0.16.1/temp/pytest-of-portage/pytest-0/test_html_generate_images_only0', '-k', 'image'] baseline_summary_name = 'test_html_generate_images_only' generating_hashes = False has_result_hashes = False mpl_args = ['--mpl', '--mpl-results-path=/var/tmp/portage/dev-python/pytest-mpl-0.16.1/temp/pytest-of-portage/pytest-0/test_html_generate_images_only0/results', '--mpl-generate-summary=json,html'] pytest_args = ['/var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1-python3_10/install/usr/bin/python3.10', '-m', 'pytest', '/var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1/tests/subtests/subtest.py'] results_path = PosixPath('/var/tmp/portage/dev-python/pytest-mpl-0.16.1/temp/pytest-of-portage/pytest-0/test_html_generate_images_only0/results') status = 1 summaries = 'json,html' tmp_path = PosixPath('/var/tmp/portage/dev-python/pytest-mpl-0.16.1/temp/pytest-of-portage/pytest-0/test_html_generate_images_only0') update_baseline = False update_summary = False xfail = False tests/subtests/test_subtest.py:116: AssertionError ----------------------------- Captured stdout call ----------------------------- ============================= test session starts ============================== platform linux -- Python 3.10.13, pytest-7.4.4, pluggy-1.4.0 Matplotlib: 3.8.2 Freetype: 2.13.2 rootdir: /var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1 configfile: setup.cfg plugins: mpl-0.16.1, xdist-3.5.0, mock-3.12.0 collected 17 items tests/subtests/subtest.py FFFFFFFFFFFFFFFFF [100%] =================================== FAILURES =================================== ______________________________ test_hmatch_imatch ______________________________ self = item = @pytest.hookimpl(hookwrapper=True) def pytest_runtest_call(self, item): # noqa compare = get_compare(item) if compare is None: yield return import matplotlib.pyplot as plt try: from matplotlib.testing.decorators import remove_ticks_and_titles except ImportError: from matplotlib.testing.decorators import ImageComparisonTest as MplImageComparisonTest remove_ticks_and_titles = MplImageComparisonTest.remove_text style = compare.kwargs.get('style', 'classic') remove_text = compare.kwargs.get('remove_text', False) backend = compare.kwargs.get('backend', 'agg') with plt.style.context(style, after_reset=True), switch_backend(backend): # Run test and get figure object wrap_figure_interceptor(self, item) yield test_name = generate_test_name(item) if test_name not in self.return_value: # Test function did not complete successfully return fig = self.return_value[test_name] if remove_text: remove_ticks_and_titles(fig) result_dir = self.make_test_results_dir(item) summary = { 'status': None, 'image_status': None, 'hash_status': None, 'status_msg': None, 'baseline_image': None, 'diff_image': None, 'rms': None, 'tolerance': None, 'result_image': None, 'baseline_hash': None, 'result_hash': None, } # What we do now depends on whether we are generating the # reference images or simply running the test. if self.generate_dir is not None: summary['status'] = 'skipped' summary['image_status'] = 'generated' summary['status_msg'] = 'Skipped test, since generating image.' generate_image = self.generate_baseline_image(item, fig) if self.results_always: # Make baseline image available in HTML result_image = (result_dir / "baseline.png").absolute() shutil.copy(generate_image, result_image) summary['baseline_image'] = \ result_image.relative_to(self.results_dir).as_posix() if self.generate_hash_library is not None: summary['hash_status'] = 'generated' image_hash = self.generate_image_hash(item, fig) self._generated_hash_library[test_name] = image_hash summary['baseline_hash'] = image_hash # Only test figures if not generating images if self.generate_dir is None: # Compare to hash library if self.hash_library or compare.kwargs.get('hash_library', None): msg = self.compare_image_to_hash_library(item, fig, result_dir, summary=summary) # Compare against a baseline if specified else: msg = self.compare_image_to_baseline(item, fig, result_dir, summary=summary) close_mpl_figure(fig) if msg is None: if not self.results_always: shutil.rmtree(result_dir) for image_type in ['baseline_image', 'diff_image', 'result_image']: summary[image_type] = None # image no longer exists else: self._test_results[test_name] = summary pytest.fail(msg, pytrace=False) close_mpl_figure(fig) self._test_results[test_name] = summary if summary['status'] == 'skipped': > pytest.skip(summary['status_msg']) E Skipped: Skipped test, since generating image. pytest_mpl/plugin.py:694: Skipped During handling of the above exception, another exception occurred: cls = func = . at 0x713f932cd510> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: "Callable[[], TResult]", when: "Literal['collect', 'setup', 'call', 'teardown']", reraise: Optional[ Union[Type[BaseException], Tuple[Type[BaseException], ...]] ] = None, ) -> "CallInfo[TResult]": """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None start = timing.time() precise_start = timing.perf_counter() try: > result: Optional[TResult] = func() /usr/lib/python3.10/site-packages/_pytest/runner.py:341: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.10/site-packages/_pytest/runner.py:262: in lambda: ihook(item=item, **kwds), when=when, reraise=reraise /usr/lib/python3.10/site-packages/pluggy/_hooks.py:501: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) /usr/lib/python3.10/site-packages/pluggy/_manager.py:119: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impl = > e = Skipped test, since generating image. def _warn_teardown_exception( hook_name: str, hook_impl: HookImpl, e: BaseException ) -> None: msg = "A plugin raised an exception during an old-style hookwrapper teardown.\n" msg += f"Plugin: {hook_impl.plugin_name}, Hook: {hook_name}\n" msg += f"{type(e).__name__}: {e}\n" msg += "For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning" # noqa: E501 > warnings.warn(PluggyTeardownRaisedWarning(msg), stacklevel=5) E pluggy.PluggyTeardownRaisedWarning: A plugin raised an exception during an old-style hookwrapper teardown. E Plugin: 124517867190448, Hook: pytest_runtest_call E Skipped: Skipped test, since generating image. E For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning /usr/lib/python3.10/site-packages/pluggy/_callers.py:49: PluggyTeardownRaisedWarning ______________________________ test_hmatch_idiff _______________________________ self = item = @pytest.hookimpl(hookwrapper=True) def pytest_runtest_call(self, item): # noqa compare = get_compare(item) if compare is None: yield return import matplotlib.pyplot as plt try: from matplotlib.testing.decorators import remove_ticks_and_titles except ImportError: from matplotlib.testing.decorators import ImageComparisonTest as MplImageComparisonTest remove_ticks_and_titles = MplImageComparisonTest.remove_text style = compare.kwargs.get('style', 'classic') remove_text = compare.kwargs.get('remove_text', False) backend = compare.kwargs.get('backend', 'agg') with plt.style.context(style, after_reset=True), switch_backend(backend): # Run test and get figure object wrap_figure_interceptor(self, item) yield test_name = generate_test_name(item) if test_name not in self.return_value: # Test function did not complete successfully return fig = self.return_value[test_name] if remove_text: remove_ticks_and_titles(fig) result_dir = self.make_test_results_dir(item) summary = { 'status': None, 'image_status': None, 'hash_status': None, 'status_msg': None, 'baseline_image': None, 'diff_image': None, 'rms': None, 'tolerance': None, 'result_image': None, 'baseline_hash': None, 'result_hash': None, } # What we do now depends on whether we are generating the # reference images or simply running the test. if self.generate_dir is not None: summary['status'] = 'skipped' summary['image_status'] = 'generated' summary['status_msg'] = 'Skipped test, since generating image.' generate_image = self.generate_baseline_image(item, fig) if self.results_always: # Make baseline image available in HTML result_image = (result_dir / "baseline.png").absolute() shutil.copy(generate_image, result_image) summary['baseline_image'] = \ result_image.relative_to(self.results_dir).as_posix() if self.generate_hash_library is not None: summary['hash_status'] = 'generated' image_hash = self.generate_image_hash(item, fig) self._generated_hash_library[test_name] = image_hash summary['baseline_hash'] = image_hash # Only test figures if not generating images if self.generate_dir is None: # Compare to hash library if self.hash_library or compare.kwargs.get('hash_library', None): msg = self.compare_image_to_hash_library(item, fig, result_dir, summary=summary) # Compare against a baseline if specified else: msg = self.compare_image_to_baseline(item, fig, result_dir, summary=summary) close_mpl_figure(fig) if msg is None: if not self.results_always: shutil.rmtree(result_dir) for image_type in ['baseline_image', 'diff_image', 'result_image']: summary[image_type] = None # image no longer exists else: self._test_results[test_name] = summary pytest.fail(msg, pytrace=False) close_mpl_figure(fig) self._test_results[test_name] = summary if summary['status'] == 'skipped': > pytest.skip(summary['status_msg']) E Skipped: Skipped test, since generating image. pytest_mpl/plugin.py:694: Skipped During handling of the above exception, another exception occurred: cls = func = . at 0x713f90a71cf0> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: "Callable[[], TResult]", when: "Literal['collect', 'setup', 'call', 'teardown']", reraise: Optional[ Union[Type[BaseException], Tuple[Type[BaseException], ...]] ] = None, ) -> "CallInfo[TResult]": """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None start = timing.time() precise_start = timing.perf_counter() try: > result: Optional[TResult] = func() /usr/lib/python3.10/site-packages/_pytest/runner.py:341: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.10/site-packages/_pytest/runner.py:262: in lambda: ihook(item=item, **kwds), when=when, reraise=reraise /usr/lib/python3.10/site-packages/pluggy/_hooks.py:501: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) /usr/lib/python3.10/site-packages/pluggy/_manager.py:119: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impl = > e = Skipped test, since generating image. def _warn_teardown_exception( hook_name: str, hook_impl: HookImpl, e: BaseException ) -> None: msg = "A plugin raised an exception during an old-style hookwrapper teardown.\n" msg += f"Plugin: {hook_impl.plugin_name}, Hook: {hook_name}\n" msg += f"{type(e).__name__}: {e}\n" msg += "For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning" # noqa: E501 > warnings.warn(PluggyTeardownRaisedWarning(msg), stacklevel=5) E pluggy.PluggyTeardownRaisedWarning: A plugin raised an exception during an old-style hookwrapper teardown. E Plugin: 124517867190448, Hook: pytest_runtest_call E Skipped: Skipped test, since generating image. E For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning /usr/lib/python3.10/site-packages/pluggy/_callers.py:49: PluggyTeardownRaisedWarning ____________________________ test_hmatch_idiffshape ____________________________ self = item = @pytest.hookimpl(hookwrapper=True) def pytest_runtest_call(self, item): # noqa compare = get_compare(item) if compare is None: yield return import matplotlib.pyplot as plt try: from matplotlib.testing.decorators import remove_ticks_and_titles except ImportError: from matplotlib.testing.decorators import ImageComparisonTest as MplImageComparisonTest remove_ticks_and_titles = MplImageComparisonTest.remove_text style = compare.kwargs.get('style', 'classic') remove_text = compare.kwargs.get('remove_text', False) backend = compare.kwargs.get('backend', 'agg') with plt.style.context(style, after_reset=True), switch_backend(backend): # Run test and get figure object wrap_figure_interceptor(self, item) yield test_name = generate_test_name(item) if test_name not in self.return_value: # Test function did not complete successfully return fig = self.return_value[test_name] if remove_text: remove_ticks_and_titles(fig) result_dir = self.make_test_results_dir(item) summary = { 'status': None, 'image_status': None, 'hash_status': None, 'status_msg': None, 'baseline_image': None, 'diff_image': None, 'rms': None, 'tolerance': None, 'result_image': None, 'baseline_hash': None, 'result_hash': None, } # What we do now depends on whether we are generating the # reference images or simply running the test. if self.generate_dir is not None: summary['status'] = 'skipped' summary['image_status'] = 'generated' summary['status_msg'] = 'Skipped test, since generating image.' generate_image = self.generate_baseline_image(item, fig) if self.results_always: # Make baseline image available in HTML result_image = (result_dir / "baseline.png").absolute() shutil.copy(generate_image, result_image) summary['baseline_image'] = \ result_image.relative_to(self.results_dir).as_posix() if self.generate_hash_library is not None: summary['hash_status'] = 'generated' image_hash = self.generate_image_hash(item, fig) self._generated_hash_library[test_name] = image_hash summary['baseline_hash'] = image_hash # Only test figures if not generating images if self.generate_dir is None: # Compare to hash library if self.hash_library or compare.kwargs.get('hash_library', None): msg = self.compare_image_to_hash_library(item, fig, result_dir, summary=summary) # Compare against a baseline if specified else: msg = self.compare_image_to_baseline(item, fig, result_dir, summary=summary) close_mpl_figure(fig) if msg is None: if not self.results_always: shutil.rmtree(result_dir) for image_type in ['baseline_image', 'diff_image', 'result_image']: summary[image_type] = None # image no longer exists else: self._test_results[test_name] = summary pytest.fail(msg, pytrace=False) close_mpl_figure(fig) self._test_results[test_name] = summary if summary['status'] == 'skipped': > pytest.skip(summary['status_msg']) E Skipped: Skipped test, since generating image. pytest_mpl/plugin.py:694: Skipped During handling of the above exception, another exception occurred: cls = func = . at 0x713f90a72050> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: "Callable[[], TResult]", when: "Literal['collect', 'setup', 'call', 'teardown']", reraise: Optional[ Union[Type[BaseException], Tuple[Type[BaseException], ...]] ] = None, ) -> "CallInfo[TResult]": """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None start = timing.time() precise_start = timing.perf_counter() try: > result: Optional[TResult] = func() /usr/lib/python3.10/site-packages/_pytest/runner.py:341: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.10/site-packages/_pytest/runner.py:262: in lambda: ihook(item=item, **kwds), when=when, reraise=reraise /usr/lib/python3.10/site-packages/pluggy/_hooks.py:501: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) /usr/lib/python3.10/site-packages/pluggy/_manager.py:119: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impl = > e = Skipped test, since generating image. def _warn_teardown_exception( hook_name: str, hook_impl: HookImpl, e: BaseException ) -> None: msg = "A plugin raised an exception during an old-style hookwrapper teardown.\n" msg += f"Plugin: {hook_impl.plugin_name}, Hook: {hook_name}\n" msg += f"{type(e).__name__}: {e}\n" msg += "For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning" # noqa: E501 > warnings.warn(PluggyTeardownRaisedWarning(msg), stacklevel=5) E pluggy.PluggyTeardownRaisedWarning: A plugin raised an exception during an old-style hookwrapper teardown. E Plugin: 124517867190448, Hook: pytest_runtest_call E Skipped: Skipped test, since generating image. E For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning /usr/lib/python3.10/site-packages/pluggy/_callers.py:49: PluggyTeardownRaisedWarning _____________________________ test_hmatch_imissing _____________________________ self = item = @pytest.hookimpl(hookwrapper=True) def pytest_runtest_call(self, item): # noqa compare = get_compare(item) if compare is None: yield return import matplotlib.pyplot as plt try: from matplotlib.testing.decorators import remove_ticks_and_titles except ImportError: from matplotlib.testing.decorators import ImageComparisonTest as MplImageComparisonTest remove_ticks_and_titles = MplImageComparisonTest.remove_text style = compare.kwargs.get('style', 'classic') remove_text = compare.kwargs.get('remove_text', False) backend = compare.kwargs.get('backend', 'agg') with plt.style.context(style, after_reset=True), switch_backend(backend): # Run test and get figure object wrap_figure_interceptor(self, item) yield test_name = generate_test_name(item) if test_name not in self.return_value: # Test function did not complete successfully return fig = self.return_value[test_name] if remove_text: remove_ticks_and_titles(fig) result_dir = self.make_test_results_dir(item) summary = { 'status': None, 'image_status': None, 'hash_status': None, 'status_msg': None, 'baseline_image': None, 'diff_image': None, 'rms': None, 'tolerance': None, 'result_image': None, 'baseline_hash': None, 'result_hash': None, } # What we do now depends on whether we are generating the # reference images or simply running the test. if self.generate_dir is not None: summary['status'] = 'skipped' summary['image_status'] = 'generated' summary['status_msg'] = 'Skipped test, since generating image.' generate_image = self.generate_baseline_image(item, fig) if self.results_always: # Make baseline image available in HTML result_image = (result_dir / "baseline.png").absolute() shutil.copy(generate_image, result_image) summary['baseline_image'] = \ result_image.relative_to(self.results_dir).as_posix() if self.generate_hash_library is not None: summary['hash_status'] = 'generated' image_hash = self.generate_image_hash(item, fig) self._generated_hash_library[test_name] = image_hash summary['baseline_hash'] = image_hash # Only test figures if not generating images if self.generate_dir is None: # Compare to hash library if self.hash_library or compare.kwargs.get('hash_library', None): msg = self.compare_image_to_hash_library(item, fig, result_dir, summary=summary) # Compare against a baseline if specified else: msg = self.compare_image_to_baseline(item, fig, result_dir, summary=summary) close_mpl_figure(fig) if msg is None: if not self.results_always: shutil.rmtree(result_dir) for image_type in ['baseline_image', 'diff_image', 'result_image']: summary[image_type] = None # image no longer exists else: self._test_results[test_name] = summary pytest.fail(msg, pytrace=False) close_mpl_figure(fig) self._test_results[test_name] = summary if summary['status'] == 'skipped': > pytest.skip(summary['status_msg']) E Skipped: Skipped test, since generating image. pytest_mpl/plugin.py:694: Skipped During handling of the above exception, another exception occurred: cls = func = . at 0x713f8f4e3f40> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: "Callable[[], TResult]", when: "Literal['collect', 'setup', 'call', 'teardown']", reraise: Optional[ Union[Type[BaseException], Tuple[Type[BaseException], ...]] ] = None, ) -> "CallInfo[TResult]": """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None start = timing.time() precise_start = timing.perf_counter() try: > result: Optional[TResult] = func() /usr/lib/python3.10/site-packages/_pytest/runner.py:341: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.10/site-packages/_pytest/runner.py:262: in lambda: ihook(item=item, **kwds), when=when, reraise=reraise /usr/lib/python3.10/site-packages/pluggy/_hooks.py:501: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) /usr/lib/python3.10/site-packages/pluggy/_manager.py:119: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impl = > e = Skipped test, since generating image. def _warn_teardown_exception( hook_name: str, hook_impl: HookImpl, e: BaseException ) -> None: msg = "A plugin raised an exception during an old-style hookwrapper teardown.\n" msg += f"Plugin: {hook_impl.plugin_name}, Hook: {hook_name}\n" msg += f"{type(e).__name__}: {e}\n" msg += "For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning" # noqa: E501 > warnings.warn(PluggyTeardownRaisedWarning(msg), stacklevel=5) E pluggy.PluggyTeardownRaisedWarning: A plugin raised an exception during an old-style hookwrapper teardown. E Plugin: 124517867190448, Hook: pytest_runtest_call E Skipped: Skipped test, since generating image. E For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning /usr/lib/python3.10/site-packages/pluggy/_callers.py:49: PluggyTeardownRaisedWarning ______________________________ test_hdiff_imatch _______________________________ self = item = @pytest.hookimpl(hookwrapper=True) def pytest_runtest_call(self, item): # noqa compare = get_compare(item) if compare is None: yield return import matplotlib.pyplot as plt try: from matplotlib.testing.decorators import remove_ticks_and_titles except ImportError: from matplotlib.testing.decorators import ImageComparisonTest as MplImageComparisonTest remove_ticks_and_titles = MplImageComparisonTest.remove_text style = compare.kwargs.get('style', 'classic') remove_text = compare.kwargs.get('remove_text', False) backend = compare.kwargs.get('backend', 'agg') with plt.style.context(style, after_reset=True), switch_backend(backend): # Run test and get figure object wrap_figure_interceptor(self, item) yield test_name = generate_test_name(item) if test_name not in self.return_value: # Test function did not complete successfully return fig = self.return_value[test_name] if remove_text: remove_ticks_and_titles(fig) result_dir = self.make_test_results_dir(item) summary = { 'status': None, 'image_status': None, 'hash_status': None, 'status_msg': None, 'baseline_image': None, 'diff_image': None, 'rms': None, 'tolerance': None, 'result_image': None, 'baseline_hash': None, 'result_hash': None, } # What we do now depends on whether we are generating the # reference images or simply running the test. if self.generate_dir is not None: summary['status'] = 'skipped' summary['image_status'] = 'generated' summary['status_msg'] = 'Skipped test, since generating image.' generate_image = self.generate_baseline_image(item, fig) if self.results_always: # Make baseline image available in HTML result_image = (result_dir / "baseline.png").absolute() shutil.copy(generate_image, result_image) summary['baseline_image'] = \ result_image.relative_to(self.results_dir).as_posix() if self.generate_hash_library is not None: summary['hash_status'] = 'generated' image_hash = self.generate_image_hash(item, fig) self._generated_hash_library[test_name] = image_hash summary['baseline_hash'] = image_hash # Only test figures if not generating images if self.generate_dir is None: # Compare to hash library if self.hash_library or compare.kwargs.get('hash_library', None): msg = self.compare_image_to_hash_library(item, fig, result_dir, summary=summary) # Compare against a baseline if specified else: msg = self.compare_image_to_baseline(item, fig, result_dir, summary=summary) close_mpl_figure(fig) if msg is None: if not self.results_always: shutil.rmtree(result_dir) for image_type in ['baseline_image', 'diff_image', 'result_image']: summary[image_type] = None # image no longer exists else: self._test_results[test_name] = summary pytest.fail(msg, pytrace=False) close_mpl_figure(fig) self._test_results[test_name] = summary if summary['status'] == 'skipped': > pytest.skip(summary['status_msg']) E Skipped: Skipped test, since generating image. pytest_mpl/plugin.py:694: Skipped During handling of the above exception, another exception occurred: cls = func = . at 0x713f8f45ff40> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: "Callable[[], TResult]", when: "Literal['collect', 'setup', 'call', 'teardown']", reraise: Optional[ Union[Type[BaseException], Tuple[Type[BaseException], ...]] ] = None, ) -> "CallInfo[TResult]": """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None start = timing.time() precise_start = timing.perf_counter() try: > result: Optional[TResult] = func() /usr/lib/python3.10/site-packages/_pytest/runner.py:341: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.10/site-packages/_pytest/runner.py:262: in lambda: ihook(item=item, **kwds), when=when, reraise=reraise /usr/lib/python3.10/site-packages/pluggy/_hooks.py:501: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) /usr/lib/python3.10/site-packages/pluggy/_manager.py:119: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impl = > e = Skipped test, since generating image. def _warn_teardown_exception( hook_name: str, hook_impl: HookImpl, e: BaseException ) -> None: msg = "A plugin raised an exception during an old-style hookwrapper teardown.\n" msg += f"Plugin: {hook_impl.plugin_name}, Hook: {hook_name}\n" msg += f"{type(e).__name__}: {e}\n" msg += "For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning" # noqa: E501 > warnings.warn(PluggyTeardownRaisedWarning(msg), stacklevel=5) E pluggy.PluggyTeardownRaisedWarning: A plugin raised an exception during an old-style hookwrapper teardown. E Plugin: 124517867190448, Hook: pytest_runtest_call E Skipped: Skipped test, since generating image. E For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning /usr/lib/python3.10/site-packages/pluggy/_callers.py:49: PluggyTeardownRaisedWarning _______________________________ test_hdiff_idiff _______________________________ self = item = @pytest.hookimpl(hookwrapper=True) def pytest_runtest_call(self, item): # noqa compare = get_compare(item) if compare is None: yield return import matplotlib.pyplot as plt try: from matplotlib.testing.decorators import remove_ticks_and_titles except ImportError: from matplotlib.testing.decorators import ImageComparisonTest as MplImageComparisonTest remove_ticks_and_titles = MplImageComparisonTest.remove_text style = compare.kwargs.get('style', 'classic') remove_text = compare.kwargs.get('remove_text', False) backend = compare.kwargs.get('backend', 'agg') with plt.style.context(style, after_reset=True), switch_backend(backend): # Run test and get figure object wrap_figure_interceptor(self, item) yield test_name = generate_test_name(item) if test_name not in self.return_value: # Test function did not complete successfully return fig = self.return_value[test_name] if remove_text: remove_ticks_and_titles(fig) result_dir = self.make_test_results_dir(item) summary = { 'status': None, 'image_status': None, 'hash_status': None, 'status_msg': None, 'baseline_image': None, 'diff_image': None, 'rms': None, 'tolerance': None, 'result_image': None, 'baseline_hash': None, 'result_hash': None, } # What we do now depends on whether we are generating the # reference images or simply running the test. if self.generate_dir is not None: summary['status'] = 'skipped' summary['image_status'] = 'generated' summary['status_msg'] = 'Skipped test, since generating image.' generate_image = self.generate_baseline_image(item, fig) if self.results_always: # Make baseline image available in HTML result_image = (result_dir / "baseline.png").absolute() shutil.copy(generate_image, result_image) summary['baseline_image'] = \ result_image.relative_to(self.results_dir).as_posix() if self.generate_hash_library is not None: summary['hash_status'] = 'generated' image_hash = self.generate_image_hash(item, fig) self._generated_hash_library[test_name] = image_hash summary['baseline_hash'] = image_hash # Only test figures if not generating images if self.generate_dir is None: # Compare to hash library if self.hash_library or compare.kwargs.get('hash_library', None): msg = self.compare_image_to_hash_library(item, fig, result_dir, summary=summary) # Compare against a baseline if specified else: msg = self.compare_image_to_baseline(item, fig, result_dir, summary=summary) close_mpl_figure(fig) if msg is None: if not self.results_always: shutil.rmtree(result_dir) for image_type in ['baseline_image', 'diff_image', 'result_image']: summary[image_type] = None # image no longer exists else: self._test_results[test_name] = summary pytest.fail(msg, pytrace=False) close_mpl_figure(fig) self._test_results[test_name] = summary if summary['status'] == 'skipped': > pytest.skip(summary['status_msg']) E Skipped: Skipped test, since generating image. pytest_mpl/plugin.py:694: Skipped During handling of the above exception, another exception occurred: cls = func = . at 0x713f8f4e3f40> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: "Callable[[], TResult]", when: "Literal['collect', 'setup', 'call', 'teardown']", reraise: Optional[ Union[Type[BaseException], Tuple[Type[BaseException], ...]] ] = None, ) -> "CallInfo[TResult]": """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None start = timing.time() precise_start = timing.perf_counter() try: > result: Optional[TResult] = func() /usr/lib/python3.10/site-packages/_pytest/runner.py:341: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.10/site-packages/_pytest/runner.py:262: in lambda: ihook(item=item, **kwds), when=when, reraise=reraise /usr/lib/python3.10/site-packages/pluggy/_hooks.py:501: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) /usr/lib/python3.10/site-packages/pluggy/_manager.py:119: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impl = > e = Skipped test, since generating image. def _warn_teardown_exception( hook_name: str, hook_impl: HookImpl, e: BaseException ) -> None: msg = "A plugin raised an exception during an old-style hookwrapper teardown.\n" msg += f"Plugin: {hook_impl.plugin_name}, Hook: {hook_name}\n" msg += f"{type(e).__name__}: {e}\n" msg += "For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning" # noqa: E501 > warnings.warn(PluggyTeardownRaisedWarning(msg), stacklevel=5) E pluggy.PluggyTeardownRaisedWarning: A plugin raised an exception during an old-style hookwrapper teardown. E Plugin: 124517867190448, Hook: pytest_runtest_call E Skipped: Skipped test, since generating image. E For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning /usr/lib/python3.10/site-packages/pluggy/_callers.py:49: PluggyTeardownRaisedWarning ____________________________ test_hdiff_idiffshape _____________________________ self = item = @pytest.hookimpl(hookwrapper=True) def pytest_runtest_call(self, item): # noqa compare = get_compare(item) if compare is None: yield return import matplotlib.pyplot as plt try: from matplotlib.testing.decorators import remove_ticks_and_titles except ImportError: from matplotlib.testing.decorators import ImageComparisonTest as MplImageComparisonTest remove_ticks_and_titles = MplImageComparisonTest.remove_text style = compare.kwargs.get('style', 'classic') remove_text = compare.kwargs.get('remove_text', False) backend = compare.kwargs.get('backend', 'agg') with plt.style.context(style, after_reset=True), switch_backend(backend): # Run test and get figure object wrap_figure_interceptor(self, item) yield test_name = generate_test_name(item) if test_name not in self.return_value: # Test function did not complete successfully return fig = self.return_value[test_name] if remove_text: remove_ticks_and_titles(fig) result_dir = self.make_test_results_dir(item) summary = { 'status': None, 'image_status': None, 'hash_status': None, 'status_msg': None, 'baseline_image': None, 'diff_image': None, 'rms': None, 'tolerance': None, 'result_image': None, 'baseline_hash': None, 'result_hash': None, } # What we do now depends on whether we are generating the # reference images or simply running the test. if self.generate_dir is not None: summary['status'] = 'skipped' summary['image_status'] = 'generated' summary['status_msg'] = 'Skipped test, since generating image.' generate_image = self.generate_baseline_image(item, fig) if self.results_always: # Make baseline image available in HTML result_image = (result_dir / "baseline.png").absolute() shutil.copy(generate_image, result_image) summary['baseline_image'] = \ result_image.relative_to(self.results_dir).as_posix() if self.generate_hash_library is not None: summary['hash_status'] = 'generated' image_hash = self.generate_image_hash(item, fig) self._generated_hash_library[test_name] = image_hash summary['baseline_hash'] = image_hash # Only test figures if not generating images if self.generate_dir is None: # Compare to hash library if self.hash_library or compare.kwargs.get('hash_library', None): msg = self.compare_image_to_hash_library(item, fig, result_dir, summary=summary) # Compare against a baseline if specified else: msg = self.compare_image_to_baseline(item, fig, result_dir, summary=summary) close_mpl_figure(fig) if msg is None: if not self.results_always: shutil.rmtree(result_dir) for image_type in ['baseline_image', 'diff_image', 'result_image']: summary[image_type] = None # image no longer exists else: self._test_results[test_name] = summary pytest.fail(msg, pytrace=False) close_mpl_figure(fig) self._test_results[test_name] = summary if summary['status'] == 'skipped': > pytest.skip(summary['status_msg']) E Skipped: Skipped test, since generating image. pytest_mpl/plugin.py:694: Skipped During handling of the above exception, another exception occurred: cls = func = . at 0x713f8f277640> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: "Callable[[], TResult]", when: "Literal['collect', 'setup', 'call', 'teardown']", reraise: Optional[ Union[Type[BaseException], Tuple[Type[BaseException], ...]] ] = None, ) -> "CallInfo[TResult]": """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None start = timing.time() precise_start = timing.perf_counter() try: > result: Optional[TResult] = func() /usr/lib/python3.10/site-packages/_pytest/runner.py:341: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.10/site-packages/_pytest/runner.py:262: in lambda: ihook(item=item, **kwds), when=when, reraise=reraise /usr/lib/python3.10/site-packages/pluggy/_hooks.py:501: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) /usr/lib/python3.10/site-packages/pluggy/_manager.py:119: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impl = > e = Skipped test, since generating image. def _warn_teardown_exception( hook_name: str, hook_impl: HookImpl, e: BaseException ) -> None: msg = "A plugin raised an exception during an old-style hookwrapper teardown.\n" msg += f"Plugin: {hook_impl.plugin_name}, Hook: {hook_name}\n" msg += f"{type(e).__name__}: {e}\n" msg += "For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning" # noqa: E501 > warnings.warn(PluggyTeardownRaisedWarning(msg), stacklevel=5) E pluggy.PluggyTeardownRaisedWarning: A plugin raised an exception during an old-style hookwrapper teardown. E Plugin: 124517867190448, Hook: pytest_runtest_call E Skipped: Skipped test, since generating image. E For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning /usr/lib/python3.10/site-packages/pluggy/_callers.py:49: PluggyTeardownRaisedWarning _____________________________ test_hdiff_imissing ______________________________ self = item = @pytest.hookimpl(hookwrapper=True) def pytest_runtest_call(self, item): # noqa compare = get_compare(item) if compare is None: yield return import matplotlib.pyplot as plt try: from matplotlib.testing.decorators import remove_ticks_and_titles except ImportError: from matplotlib.testing.decorators import ImageComparisonTest as MplImageComparisonTest remove_ticks_and_titles = MplImageComparisonTest.remove_text style = compare.kwargs.get('style', 'classic') remove_text = compare.kwargs.get('remove_text', False) backend = compare.kwargs.get('backend', 'agg') with plt.style.context(style, after_reset=True), switch_backend(backend): # Run test and get figure object wrap_figure_interceptor(self, item) yield test_name = generate_test_name(item) if test_name not in self.return_value: # Test function did not complete successfully return fig = self.return_value[test_name] if remove_text: remove_ticks_and_titles(fig) result_dir = self.make_test_results_dir(item) summary = { 'status': None, 'image_status': None, 'hash_status': None, 'status_msg': None, 'baseline_image': None, 'diff_image': None, 'rms': None, 'tolerance': None, 'result_image': None, 'baseline_hash': None, 'result_hash': None, } # What we do now depends on whether we are generating the # reference images or simply running the test. if self.generate_dir is not None: summary['status'] = 'skipped' summary['image_status'] = 'generated' summary['status_msg'] = 'Skipped test, since generating image.' generate_image = self.generate_baseline_image(item, fig) if self.results_always: # Make baseline image available in HTML result_image = (result_dir / "baseline.png").absolute() shutil.copy(generate_image, result_image) summary['baseline_image'] = \ result_image.relative_to(self.results_dir).as_posix() if self.generate_hash_library is not None: summary['hash_status'] = 'generated' image_hash = self.generate_image_hash(item, fig) self._generated_hash_library[test_name] = image_hash summary['baseline_hash'] = image_hash # Only test figures if not generating images if self.generate_dir is None: # Compare to hash library if self.hash_library or compare.kwargs.get('hash_library', None): msg = self.compare_image_to_hash_library(item, fig, result_dir, summary=summary) # Compare against a baseline if specified else: msg = self.compare_image_to_baseline(item, fig, result_dir, summary=summary) close_mpl_figure(fig) if msg is None: if not self.results_always: shutil.rmtree(result_dir) for image_type in ['baseline_image', 'diff_image', 'result_image']: summary[image_type] = None # image no longer exists else: self._test_results[test_name] = summary pytest.fail(msg, pytrace=False) close_mpl_figure(fig) self._test_results[test_name] = summary if summary['status'] == 'skipped': > pytest.skip(summary['status_msg']) E Skipped: Skipped test, since generating image. pytest_mpl/plugin.py:694: Skipped During handling of the above exception, another exception occurred: cls = func = . at 0x713f8eddf2e0> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: "Callable[[], TResult]", when: "Literal['collect', 'setup', 'call', 'teardown']", reraise: Optional[ Union[Type[BaseException], Tuple[Type[BaseException], ...]] ] = None, ) -> "CallInfo[TResult]": """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None start = timing.time() precise_start = timing.perf_counter() try: > result: Optional[TResult] = func() /usr/lib/python3.10/site-packages/_pytest/runner.py:341: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.10/site-packages/_pytest/runner.py:262: in lambda: ihook(item=item, **kwds), when=when, reraise=reraise /usr/lib/python3.10/site-packages/pluggy/_hooks.py:501: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) /usr/lib/python3.10/site-packages/pluggy/_manager.py:119: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impl = > e = Skipped test, since generating image. def _warn_teardown_exception( hook_name: str, hook_impl: HookImpl, e: BaseException ) -> None: msg = "A plugin raised an exception during an old-style hookwrapper teardown.\n" msg += f"Plugin: {hook_impl.plugin_name}, Hook: {hook_name}\n" msg += f"{type(e).__name__}: {e}\n" msg += "For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning" # noqa: E501 > warnings.warn(PluggyTeardownRaisedWarning(msg), stacklevel=5) E pluggy.PluggyTeardownRaisedWarning: A plugin raised an exception during an old-style hookwrapper teardown. E Plugin: 124517867190448, Hook: pytest_runtest_call E Skipped: Skipped test, since generating image. E For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning /usr/lib/python3.10/site-packages/pluggy/_callers.py:49: PluggyTeardownRaisedWarning _____________________________ test_hmissing_imatch _____________________________ self = item = @pytest.hookimpl(hookwrapper=True) def pytest_runtest_call(self, item): # noqa compare = get_compare(item) if compare is None: yield return import matplotlib.pyplot as plt try: from matplotlib.testing.decorators import remove_ticks_and_titles except ImportError: from matplotlib.testing.decorators import ImageComparisonTest as MplImageComparisonTest remove_ticks_and_titles = MplImageComparisonTest.remove_text style = compare.kwargs.get('style', 'classic') remove_text = compare.kwargs.get('remove_text', False) backend = compare.kwargs.get('backend', 'agg') with plt.style.context(style, after_reset=True), switch_backend(backend): # Run test and get figure object wrap_figure_interceptor(self, item) yield test_name = generate_test_name(item) if test_name not in self.return_value: # Test function did not complete successfully return fig = self.return_value[test_name] if remove_text: remove_ticks_and_titles(fig) result_dir = self.make_test_results_dir(item) summary = { 'status': None, 'image_status': None, 'hash_status': None, 'status_msg': None, 'baseline_image': None, 'diff_image': None, 'rms': None, 'tolerance': None, 'result_image': None, 'baseline_hash': None, 'result_hash': None, } # What we do now depends on whether we are generating the # reference images or simply running the test. if self.generate_dir is not None: summary['status'] = 'skipped' summary['image_status'] = 'generated' summary['status_msg'] = 'Skipped test, since generating image.' generate_image = self.generate_baseline_image(item, fig) if self.results_always: # Make baseline image available in HTML result_image = (result_dir / "baseline.png").absolute() shutil.copy(generate_image, result_image) summary['baseline_image'] = \ result_image.relative_to(self.results_dir).as_posix() if self.generate_hash_library is not None: summary['hash_status'] = 'generated' image_hash = self.generate_image_hash(item, fig) self._generated_hash_library[test_name] = image_hash summary['baseline_hash'] = image_hash # Only test figures if not generating images if self.generate_dir is None: # Compare to hash library if self.hash_library or compare.kwargs.get('hash_library', None): msg = self.compare_image_to_hash_library(item, fig, result_dir, summary=summary) # Compare against a baseline if specified else: msg = self.compare_image_to_baseline(item, fig, result_dir, summary=summary) close_mpl_figure(fig) if msg is None: if not self.results_always: shutil.rmtree(result_dir) for image_type in ['baseline_image', 'diff_image', 'result_image']: summary[image_type] = None # image no longer exists else: self._test_results[test_name] = summary pytest.fail(msg, pytrace=False) close_mpl_figure(fig) self._test_results[test_name] = summary if summary['status'] == 'skipped': > pytest.skip(summary['status_msg']) E Skipped: Skipped test, since generating image. pytest_mpl/plugin.py:694: Skipped During handling of the above exception, another exception occurred: cls = func = . at 0x713f8eda71c0> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: "Callable[[], TResult]", when: "Literal['collect', 'setup', 'call', 'teardown']", reraise: Optional[ Union[Type[BaseException], Tuple[Type[BaseException], ...]] ] = None, ) -> "CallInfo[TResult]": """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None start = timing.time() precise_start = timing.perf_counter() try: > result: Optional[TResult] = func() /usr/lib/python3.10/site-packages/_pytest/runner.py:341: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.10/site-packages/_pytest/runner.py:262: in lambda: ihook(item=item, **kwds), when=when, reraise=reraise /usr/lib/python3.10/site-packages/pluggy/_hooks.py:501: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) /usr/lib/python3.10/site-packages/pluggy/_manager.py:119: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impl = > e = Skipped test, since generating image. def _warn_teardown_exception( hook_name: str, hook_impl: HookImpl, e: BaseException ) -> None: msg = "A plugin raised an exception during an old-style hookwrapper teardown.\n" msg += f"Plugin: {hook_impl.plugin_name}, Hook: {hook_name}\n" msg += f"{type(e).__name__}: {e}\n" msg += "For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning" # noqa: E501 > warnings.warn(PluggyTeardownRaisedWarning(msg), stacklevel=5) E pluggy.PluggyTeardownRaisedWarning: A plugin raised an exception during an old-style hookwrapper teardown. E Plugin: 124517867190448, Hook: pytest_runtest_call E Skipped: Skipped test, since generating image. E For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning /usr/lib/python3.10/site-packages/pluggy/_callers.py:49: PluggyTeardownRaisedWarning _____________________________ test_hmissing_idiff ______________________________ self = item = @pytest.hookimpl(hookwrapper=True) def pytest_runtest_call(self, item): # noqa compare = get_compare(item) if compare is None: yield return import matplotlib.pyplot as plt try: from matplotlib.testing.decorators import remove_ticks_and_titles except ImportError: from matplotlib.testing.decorators import ImageComparisonTest as MplImageComparisonTest remove_ticks_and_titles = MplImageComparisonTest.remove_text style = compare.kwargs.get('style', 'classic') remove_text = compare.kwargs.get('remove_text', False) backend = compare.kwargs.get('backend', 'agg') with plt.style.context(style, after_reset=True), switch_backend(backend): # Run test and get figure object wrap_figure_interceptor(self, item) yield test_name = generate_test_name(item) if test_name not in self.return_value: # Test function did not complete successfully return fig = self.return_value[test_name] if remove_text: remove_ticks_and_titles(fig) result_dir = self.make_test_results_dir(item) summary = { 'status': None, 'image_status': None, 'hash_status': None, 'status_msg': None, 'baseline_image': None, 'diff_image': None, 'rms': None, 'tolerance': None, 'result_image': None, 'baseline_hash': None, 'result_hash': None, } # What we do now depends on whether we are generating the # reference images or simply running the test. if self.generate_dir is not None: summary['status'] = 'skipped' summary['image_status'] = 'generated' summary['status_msg'] = 'Skipped test, since generating image.' generate_image = self.generate_baseline_image(item, fig) if self.results_always: # Make baseline image available in HTML result_image = (result_dir / "baseline.png").absolute() shutil.copy(generate_image, result_image) summary['baseline_image'] = \ result_image.relative_to(self.results_dir).as_posix() if self.generate_hash_library is not None: summary['hash_status'] = 'generated' image_hash = self.generate_image_hash(item, fig) self._generated_hash_library[test_name] = image_hash summary['baseline_hash'] = image_hash # Only test figures if not generating images if self.generate_dir is None: # Compare to hash library if self.hash_library or compare.kwargs.get('hash_library', None): msg = self.compare_image_to_hash_library(item, fig, result_dir, summary=summary) # Compare against a baseline if specified else: msg = self.compare_image_to_baseline(item, fig, result_dir, summary=summary) close_mpl_figure(fig) if msg is None: if not self.results_always: shutil.rmtree(result_dir) for image_type in ['baseline_image', 'diff_image', 'result_image']: summary[image_type] = None # image no longer exists else: self._test_results[test_name] = summary pytest.fail(msg, pytrace=False) close_mpl_figure(fig) self._test_results[test_name] = summary if summary['status'] == 'skipped': > pytest.skip(summary['status_msg']) E Skipped: Skipped test, since generating image. pytest_mpl/plugin.py:694: Skipped During handling of the above exception, another exception occurred: cls = func = . at 0x713f8f194670> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: "Callable[[], TResult]", when: "Literal['collect', 'setup', 'call', 'teardown']", reraise: Optional[ Union[Type[BaseException], Tuple[Type[BaseException], ...]] ] = None, ) -> "CallInfo[TResult]": """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None start = timing.time() precise_start = timing.perf_counter() try: > result: Optional[TResult] = func() /usr/lib/python3.10/site-packages/_pytest/runner.py:341: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.10/site-packages/_pytest/runner.py:262: in lambda: ihook(item=item, **kwds), when=when, reraise=reraise /usr/lib/python3.10/site-packages/pluggy/_hooks.py:501: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) /usr/lib/python3.10/site-packages/pluggy/_manager.py:119: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impl = > e = Skipped test, since generating image. def _warn_teardown_exception( hook_name: str, hook_impl: HookImpl, e: BaseException ) -> None: msg = "A plugin raised an exception during an old-style hookwrapper teardown.\n" msg += f"Plugin: {hook_impl.plugin_name}, Hook: {hook_name}\n" msg += f"{type(e).__name__}: {e}\n" msg += "For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning" # noqa: E501 > warnings.warn(PluggyTeardownRaisedWarning(msg), stacklevel=5) E pluggy.PluggyTeardownRaisedWarning: A plugin raised an exception during an old-style hookwrapper teardown. E Plugin: 124517867190448, Hook: pytest_runtest_call E Skipped: Skipped test, since generating image. E For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning /usr/lib/python3.10/site-packages/pluggy/_callers.py:49: PluggyTeardownRaisedWarning ___________________________ test_hmissing_idiffshape ___________________________ self = item = @pytest.hookimpl(hookwrapper=True) def pytest_runtest_call(self, item): # noqa compare = get_compare(item) if compare is None: yield return import matplotlib.pyplot as plt try: from matplotlib.testing.decorators import remove_ticks_and_titles except ImportError: from matplotlib.testing.decorators import ImageComparisonTest as MplImageComparisonTest remove_ticks_and_titles = MplImageComparisonTest.remove_text style = compare.kwargs.get('style', 'classic') remove_text = compare.kwargs.get('remove_text', False) backend = compare.kwargs.get('backend', 'agg') with plt.style.context(style, after_reset=True), switch_backend(backend): # Run test and get figure object wrap_figure_interceptor(self, item) yield test_name = generate_test_name(item) if test_name not in self.return_value: # Test function did not complete successfully return fig = self.return_value[test_name] if remove_text: remove_ticks_and_titles(fig) result_dir = self.make_test_results_dir(item) summary = { 'status': None, 'image_status': None, 'hash_status': None, 'status_msg': None, 'baseline_image': None, 'diff_image': None, 'rms': None, 'tolerance': None, 'result_image': None, 'baseline_hash': None, 'result_hash': None, } # What we do now depends on whether we are generating the # reference images or simply running the test. if self.generate_dir is not None: summary['status'] = 'skipped' summary['image_status'] = 'generated' summary['status_msg'] = 'Skipped test, since generating image.' generate_image = self.generate_baseline_image(item, fig) if self.results_always: # Make baseline image available in HTML result_image = (result_dir / "baseline.png").absolute() shutil.copy(generate_image, result_image) summary['baseline_image'] = \ result_image.relative_to(self.results_dir).as_posix() if self.generate_hash_library is not None: summary['hash_status'] = 'generated' image_hash = self.generate_image_hash(item, fig) self._generated_hash_library[test_name] = image_hash summary['baseline_hash'] = image_hash # Only test figures if not generating images if self.generate_dir is None: # Compare to hash library if self.hash_library or compare.kwargs.get('hash_library', None): msg = self.compare_image_to_hash_library(item, fig, result_dir, summary=summary) # Compare against a baseline if specified else: msg = self.compare_image_to_baseline(item, fig, result_dir, summary=summary) close_mpl_figure(fig) if msg is None: if not self.results_always: shutil.rmtree(result_dir) for image_type in ['baseline_image', 'diff_image', 'result_image']: summary[image_type] = None # image no longer exists else: self._test_results[test_name] = summary pytest.fail(msg, pytrace=False) close_mpl_figure(fig) self._test_results[test_name] = summary if summary['status'] == 'skipped': > pytest.skip(summary['status_msg']) E Skipped: Skipped test, since generating image. pytest_mpl/plugin.py:694: Skipped During handling of the above exception, another exception occurred: cls = func = . at 0x713f8f19c670> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: "Callable[[], TResult]", when: "Literal['collect', 'setup', 'call', 'teardown']", reraise: Optional[ Union[Type[BaseException], Tuple[Type[BaseException], ...]] ] = None, ) -> "CallInfo[TResult]": """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None start = timing.time() precise_start = timing.perf_counter() try: > result: Optional[TResult] = func() /usr/lib/python3.10/site-packages/_pytest/runner.py:341: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.10/site-packages/_pytest/runner.py:262: in lambda: ihook(item=item, **kwds), when=when, reraise=reraise /usr/lib/python3.10/site-packages/pluggy/_hooks.py:501: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) /usr/lib/python3.10/site-packages/pluggy/_manager.py:119: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impl = > e = Skipped test, since generating image. def _warn_teardown_exception( hook_name: str, hook_impl: HookImpl, e: BaseException ) -> None: msg = "A plugin raised an exception during an old-style hookwrapper teardown.\n" msg += f"Plugin: {hook_impl.plugin_name}, Hook: {hook_name}\n" msg += f"{type(e).__name__}: {e}\n" msg += "For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning" # noqa: E501 > warnings.warn(PluggyTeardownRaisedWarning(msg), stacklevel=5) E pluggy.PluggyTeardownRaisedWarning: A plugin raised an exception during an old-style hookwrapper teardown. E Plugin: 124517867190448, Hook: pytest_runtest_call E Skipped: Skipped test, since generating image. E For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning /usr/lib/python3.10/site-packages/pluggy/_callers.py:49: PluggyTeardownRaisedWarning ____________________________ test_hmissing_imissing ____________________________ self = item = @pytest.hookimpl(hookwrapper=True) def pytest_runtest_call(self, item): # noqa compare = get_compare(item) if compare is None: yield return import matplotlib.pyplot as plt try: from matplotlib.testing.decorators import remove_ticks_and_titles except ImportError: from matplotlib.testing.decorators import ImageComparisonTest as MplImageComparisonTest remove_ticks_and_titles = MplImageComparisonTest.remove_text style = compare.kwargs.get('style', 'classic') remove_text = compare.kwargs.get('remove_text', False) backend = compare.kwargs.get('backend', 'agg') with plt.style.context(style, after_reset=True), switch_backend(backend): # Run test and get figure object wrap_figure_interceptor(self, item) yield test_name = generate_test_name(item) if test_name not in self.return_value: # Test function did not complete successfully return fig = self.return_value[test_name] if remove_text: remove_ticks_and_titles(fig) result_dir = self.make_test_results_dir(item) summary = { 'status': None, 'image_status': None, 'hash_status': None, 'status_msg': None, 'baseline_image': None, 'diff_image': None, 'rms': None, 'tolerance': None, 'result_image': None, 'baseline_hash': None, 'result_hash': None, } # What we do now depends on whether we are generating the # reference images or simply running the test. if self.generate_dir is not None: summary['status'] = 'skipped' summary['image_status'] = 'generated' summary['status_msg'] = 'Skipped test, since generating image.' generate_image = self.generate_baseline_image(item, fig) if self.results_always: # Make baseline image available in HTML result_image = (result_dir / "baseline.png").absolute() shutil.copy(generate_image, result_image) summary['baseline_image'] = \ result_image.relative_to(self.results_dir).as_posix() if self.generate_hash_library is not None: summary['hash_status'] = 'generated' image_hash = self.generate_image_hash(item, fig) self._generated_hash_library[test_name] = image_hash summary['baseline_hash'] = image_hash # Only test figures if not generating images if self.generate_dir is None: # Compare to hash library if self.hash_library or compare.kwargs.get('hash_library', None): msg = self.compare_image_to_hash_library(item, fig, result_dir, summary=summary) # Compare against a baseline if specified else: msg = self.compare_image_to_baseline(item, fig, result_dir, summary=summary) close_mpl_figure(fig) if msg is None: if not self.results_always: shutil.rmtree(result_dir) for image_type in ['baseline_image', 'diff_image', 'result_image']: summary[image_type] = None # image no longer exists else: self._test_results[test_name] = summary pytest.fail(msg, pytrace=False) close_mpl_figure(fig) self._test_results[test_name] = summary if summary['status'] == 'skipped': > pytest.skip(summary['status_msg']) E Skipped: Skipped test, since generating image. pytest_mpl/plugin.py:694: Skipped During handling of the above exception, another exception occurred: cls = func = . at 0x713f8e7f0790> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: "Callable[[], TResult]", when: "Literal['collect', 'setup', 'call', 'teardown']", reraise: Optional[ Union[Type[BaseException], Tuple[Type[BaseException], ...]] ] = None, ) -> "CallInfo[TResult]": """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None start = timing.time() precise_start = timing.perf_counter() try: > result: Optional[TResult] = func() /usr/lib/python3.10/site-packages/_pytest/runner.py:341: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.10/site-packages/_pytest/runner.py:262: in lambda: ihook(item=item, **kwds), when=when, reraise=reraise /usr/lib/python3.10/site-packages/pluggy/_hooks.py:501: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) /usr/lib/python3.10/site-packages/pluggy/_manager.py:119: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impl = > e = Skipped test, since generating image. def _warn_teardown_exception( hook_name: str, hook_impl: HookImpl, e: BaseException ) -> None: msg = "A plugin raised an exception during an old-style hookwrapper teardown.\n" msg += f"Plugin: {hook_impl.plugin_name}, Hook: {hook_name}\n" msg += f"{type(e).__name__}: {e}\n" msg += "For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning" # noqa: E501 > warnings.warn(PluggyTeardownRaisedWarning(msg), stacklevel=5) E pluggy.PluggyTeardownRaisedWarning: A plugin raised an exception during an old-style hookwrapper teardown. E Plugin: 124517867190448, Hook: pytest_runtest_call E Skipped: Skipped test, since generating image. E For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning /usr/lib/python3.10/site-packages/pluggy/_callers.py:49: PluggyTeardownRaisedWarning _________________________ test_hdiff_imatch_tolerance __________________________ self = item = @pytest.hookimpl(hookwrapper=True) def pytest_runtest_call(self, item): # noqa compare = get_compare(item) if compare is None: yield return import matplotlib.pyplot as plt try: from matplotlib.testing.decorators import remove_ticks_and_titles except ImportError: from matplotlib.testing.decorators import ImageComparisonTest as MplImageComparisonTest remove_ticks_and_titles = MplImageComparisonTest.remove_text style = compare.kwargs.get('style', 'classic') remove_text = compare.kwargs.get('remove_text', False) backend = compare.kwargs.get('backend', 'agg') with plt.style.context(style, after_reset=True), switch_backend(backend): # Run test and get figure object wrap_figure_interceptor(self, item) yield test_name = generate_test_name(item) if test_name not in self.return_value: # Test function did not complete successfully return fig = self.return_value[test_name] if remove_text: remove_ticks_and_titles(fig) result_dir = self.make_test_results_dir(item) summary = { 'status': None, 'image_status': None, 'hash_status': None, 'status_msg': None, 'baseline_image': None, 'diff_image': None, 'rms': None, 'tolerance': None, 'result_image': None, 'baseline_hash': None, 'result_hash': None, } # What we do now depends on whether we are generating the # reference images or simply running the test. if self.generate_dir is not None: summary['status'] = 'skipped' summary['image_status'] = 'generated' summary['status_msg'] = 'Skipped test, since generating image.' generate_image = self.generate_baseline_image(item, fig) if self.results_always: # Make baseline image available in HTML result_image = (result_dir / "baseline.png").absolute() shutil.copy(generate_image, result_image) summary['baseline_image'] = \ result_image.relative_to(self.results_dir).as_posix() if self.generate_hash_library is not None: summary['hash_status'] = 'generated' image_hash = self.generate_image_hash(item, fig) self._generated_hash_library[test_name] = image_hash summary['baseline_hash'] = image_hash # Only test figures if not generating images if self.generate_dir is None: # Compare to hash library if self.hash_library or compare.kwargs.get('hash_library', None): msg = self.compare_image_to_hash_library(item, fig, result_dir, summary=summary) # Compare against a baseline if specified else: msg = self.compare_image_to_baseline(item, fig, result_dir, summary=summary) close_mpl_figure(fig) if msg is None: if not self.results_always: shutil.rmtree(result_dir) for image_type in ['baseline_image', 'diff_image', 'result_image']: summary[image_type] = None # image no longer exists else: self._test_results[test_name] = summary pytest.fail(msg, pytrace=False) close_mpl_figure(fig) self._test_results[test_name] = summary if summary['status'] == 'skipped': > pytest.skip(summary['status_msg']) E Skipped: Skipped test, since generating image. pytest_mpl/plugin.py:694: Skipped During handling of the above exception, another exception occurred: cls = func = . at 0x713f8e898160> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: "Callable[[], TResult]", when: "Literal['collect', 'setup', 'call', 'teardown']", reraise: Optional[ Union[Type[BaseException], Tuple[Type[BaseException], ...]] ] = None, ) -> "CallInfo[TResult]": """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None start = timing.time() precise_start = timing.perf_counter() try: > result: Optional[TResult] = func() /usr/lib/python3.10/site-packages/_pytest/runner.py:341: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.10/site-packages/_pytest/runner.py:262: in lambda: ihook(item=item, **kwds), when=when, reraise=reraise /usr/lib/python3.10/site-packages/pluggy/_hooks.py:501: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) /usr/lib/python3.10/site-packages/pluggy/_manager.py:119: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impl = > e = Skipped test, since generating image. def _warn_teardown_exception( hook_name: str, hook_impl: HookImpl, e: BaseException ) -> None: msg = "A plugin raised an exception during an old-style hookwrapper teardown.\n" msg += f"Plugin: {hook_impl.plugin_name}, Hook: {hook_name}\n" msg += f"{type(e).__name__}: {e}\n" msg += "For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning" # noqa: E501 > warnings.warn(PluggyTeardownRaisedWarning(msg), stacklevel=5) E pluggy.PluggyTeardownRaisedWarning: A plugin raised an exception during an old-style hookwrapper teardown. E Plugin: 124517867190448, Hook: pytest_runtest_call E Skipped: Skipped test, since generating image. E For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning /usr/lib/python3.10/site-packages/pluggy/_callers.py:49: PluggyTeardownRaisedWarning __________________________ test_hdiff_idiff_tolerance __________________________ self = item = @pytest.hookimpl(hookwrapper=True) def pytest_runtest_call(self, item): # noqa compare = get_compare(item) if compare is None: yield return import matplotlib.pyplot as plt try: from matplotlib.testing.decorators import remove_ticks_and_titles except ImportError: from matplotlib.testing.decorators import ImageComparisonTest as MplImageComparisonTest remove_ticks_and_titles = MplImageComparisonTest.remove_text style = compare.kwargs.get('style', 'classic') remove_text = compare.kwargs.get('remove_text', False) backend = compare.kwargs.get('backend', 'agg') with plt.style.context(style, after_reset=True), switch_backend(backend): # Run test and get figure object wrap_figure_interceptor(self, item) yield test_name = generate_test_name(item) if test_name not in self.return_value: # Test function did not complete successfully return fig = self.return_value[test_name] if remove_text: remove_ticks_and_titles(fig) result_dir = self.make_test_results_dir(item) summary = { 'status': None, 'image_status': None, 'hash_status': None, 'status_msg': None, 'baseline_image': None, 'diff_image': None, 'rms': None, 'tolerance': None, 'result_image': None, 'baseline_hash': None, 'result_hash': None, } # What we do now depends on whether we are generating the # reference images or simply running the test. if self.generate_dir is not None: summary['status'] = 'skipped' summary['image_status'] = 'generated' summary['status_msg'] = 'Skipped test, since generating image.' generate_image = self.generate_baseline_image(item, fig) if self.results_always: # Make baseline image available in HTML result_image = (result_dir / "baseline.png").absolute() shutil.copy(generate_image, result_image) summary['baseline_image'] = \ result_image.relative_to(self.results_dir).as_posix() if self.generate_hash_library is not None: summary['hash_status'] = 'generated' image_hash = self.generate_image_hash(item, fig) self._generated_hash_library[test_name] = image_hash summary['baseline_hash'] = image_hash # Only test figures if not generating images if self.generate_dir is None: # Compare to hash library if self.hash_library or compare.kwargs.get('hash_library', None): msg = self.compare_image_to_hash_library(item, fig, result_dir, summary=summary) # Compare against a baseline if specified else: msg = self.compare_image_to_baseline(item, fig, result_dir, summary=summary) close_mpl_figure(fig) if msg is None: if not self.results_always: shutil.rmtree(result_dir) for image_type in ['baseline_image', 'diff_image', 'result_image']: summary[image_type] = None # image no longer exists else: self._test_results[test_name] = summary pytest.fail(msg, pytrace=False) close_mpl_figure(fig) self._test_results[test_name] = summary if summary['status'] == 'skipped': > pytest.skip(summary['status_msg']) E Skipped: Skipped test, since generating image. pytest_mpl/plugin.py:694: Skipped During handling of the above exception, another exception occurred: cls = func = . at 0x713f8e8ab6d0> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: "Callable[[], TResult]", when: "Literal['collect', 'setup', 'call', 'teardown']", reraise: Optional[ Union[Type[BaseException], Tuple[Type[BaseException], ...]] ] = None, ) -> "CallInfo[TResult]": """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None start = timing.time() precise_start = timing.perf_counter() try: > result: Optional[TResult] = func() /usr/lib/python3.10/site-packages/_pytest/runner.py:341: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.10/site-packages/_pytest/runner.py:262: in lambda: ihook(item=item, **kwds), when=when, reraise=reraise /usr/lib/python3.10/site-packages/pluggy/_hooks.py:501: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) /usr/lib/python3.10/site-packages/pluggy/_manager.py:119: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impl = > e = Skipped test, since generating image. def _warn_teardown_exception( hook_name: str, hook_impl: HookImpl, e: BaseException ) -> None: msg = "A plugin raised an exception during an old-style hookwrapper teardown.\n" msg += f"Plugin: {hook_impl.plugin_name}, Hook: {hook_name}\n" msg += f"{type(e).__name__}: {e}\n" msg += "For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning" # noqa: E501 > warnings.warn(PluggyTeardownRaisedWarning(msg), stacklevel=5) E pluggy.PluggyTeardownRaisedWarning: A plugin raised an exception during an old-style hookwrapper teardown. E Plugin: 124517867190448, Hook: pytest_runtest_call E Skipped: Skipped test, since generating image. E For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning /usr/lib/python3.10/site-packages/pluggy/_callers.py:49: PluggyTeardownRaisedWarning __________________________ test_hdiff_imatch_savefig ___________________________ self = item = @pytest.hookimpl(hookwrapper=True) def pytest_runtest_call(self, item): # noqa compare = get_compare(item) if compare is None: yield return import matplotlib.pyplot as plt try: from matplotlib.testing.decorators import remove_ticks_and_titles except ImportError: from matplotlib.testing.decorators import ImageComparisonTest as MplImageComparisonTest remove_ticks_and_titles = MplImageComparisonTest.remove_text style = compare.kwargs.get('style', 'classic') remove_text = compare.kwargs.get('remove_text', False) backend = compare.kwargs.get('backend', 'agg') with plt.style.context(style, after_reset=True), switch_backend(backend): # Run test and get figure object wrap_figure_interceptor(self, item) yield test_name = generate_test_name(item) if test_name not in self.return_value: # Test function did not complete successfully return fig = self.return_value[test_name] if remove_text: remove_ticks_and_titles(fig) result_dir = self.make_test_results_dir(item) summary = { 'status': None, 'image_status': None, 'hash_status': None, 'status_msg': None, 'baseline_image': None, 'diff_image': None, 'rms': None, 'tolerance': None, 'result_image': None, 'baseline_hash': None, 'result_hash': None, } # What we do now depends on whether we are generating the # reference images or simply running the test. if self.generate_dir is not None: summary['status'] = 'skipped' summary['image_status'] = 'generated' summary['status_msg'] = 'Skipped test, since generating image.' generate_image = self.generate_baseline_image(item, fig) if self.results_always: # Make baseline image available in HTML result_image = (result_dir / "baseline.png").absolute() shutil.copy(generate_image, result_image) summary['baseline_image'] = \ result_image.relative_to(self.results_dir).as_posix() if self.generate_hash_library is not None: summary['hash_status'] = 'generated' image_hash = self.generate_image_hash(item, fig) self._generated_hash_library[test_name] = image_hash summary['baseline_hash'] = image_hash # Only test figures if not generating images if self.generate_dir is None: # Compare to hash library if self.hash_library or compare.kwargs.get('hash_library', None): msg = self.compare_image_to_hash_library(item, fig, result_dir, summary=summary) # Compare against a baseline if specified else: msg = self.compare_image_to_baseline(item, fig, result_dir, summary=summary) close_mpl_figure(fig) if msg is None: if not self.results_always: shutil.rmtree(result_dir) for image_type in ['baseline_image', 'diff_image', 'result_image']: summary[image_type] = None # image no longer exists else: self._test_results[test_name] = summary pytest.fail(msg, pytrace=False) close_mpl_figure(fig) self._test_results[test_name] = summary if summary['status'] == 'skipped': > pytest.skip(summary['status_msg']) E Skipped: Skipped test, since generating image. pytest_mpl/plugin.py:694: Skipped During handling of the above exception, another exception occurred: cls = func = . at 0x713f8e2cf2e0> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: "Callable[[], TResult]", when: "Literal['collect', 'setup', 'call', 'teardown']", reraise: Optional[ Union[Type[BaseException], Tuple[Type[BaseException], ...]] ] = None, ) -> "CallInfo[TResult]": """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None start = timing.time() precise_start = timing.perf_counter() try: > result: Optional[TResult] = func() /usr/lib/python3.10/site-packages/_pytest/runner.py:341: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.10/site-packages/_pytest/runner.py:262: in lambda: ihook(item=item, **kwds), when=when, reraise=reraise /usr/lib/python3.10/site-packages/pluggy/_hooks.py:501: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) /usr/lib/python3.10/site-packages/pluggy/_manager.py:119: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impl = > e = Skipped test, since generating image. def _warn_teardown_exception( hook_name: str, hook_impl: HookImpl, e: BaseException ) -> None: msg = "A plugin raised an exception during an old-style hookwrapper teardown.\n" msg += f"Plugin: {hook_impl.plugin_name}, Hook: {hook_name}\n" msg += f"{type(e).__name__}: {e}\n" msg += "For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning" # noqa: E501 > warnings.warn(PluggyTeardownRaisedWarning(msg), stacklevel=5) E pluggy.PluggyTeardownRaisedWarning: A plugin raised an exception during an old-style hookwrapper teardown. E Plugin: 124517867190448, Hook: pytest_runtest_call E Skipped: Skipped test, since generating image. E For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning /usr/lib/python3.10/site-packages/pluggy/_callers.py:49: PluggyTeardownRaisedWarning ___________________________ test_hdiff_imatch_style ____________________________ self = item = @pytest.hookimpl(hookwrapper=True) def pytest_runtest_call(self, item): # noqa compare = get_compare(item) if compare is None: yield return import matplotlib.pyplot as plt try: from matplotlib.testing.decorators import remove_ticks_and_titles except ImportError: from matplotlib.testing.decorators import ImageComparisonTest as MplImageComparisonTest remove_ticks_and_titles = MplImageComparisonTest.remove_text style = compare.kwargs.get('style', 'classic') remove_text = compare.kwargs.get('remove_text', False) backend = compare.kwargs.get('backend', 'agg') with plt.style.context(style, after_reset=True), switch_backend(backend): # Run test and get figure object wrap_figure_interceptor(self, item) yield test_name = generate_test_name(item) if test_name not in self.return_value: # Test function did not complete successfully return fig = self.return_value[test_name] if remove_text: remove_ticks_and_titles(fig) result_dir = self.make_test_results_dir(item) summary = { 'status': None, 'image_status': None, 'hash_status': None, 'status_msg': None, 'baseline_image': None, 'diff_image': None, 'rms': None, 'tolerance': None, 'result_image': None, 'baseline_hash': None, 'result_hash': None, } # What we do now depends on whether we are generating the # reference images or simply running the test. if self.generate_dir is not None: summary['status'] = 'skipped' summary['image_status'] = 'generated' summary['status_msg'] = 'Skipped test, since generating image.' generate_image = self.generate_baseline_image(item, fig) if self.results_always: # Make baseline image available in HTML result_image = (result_dir / "baseline.png").absolute() shutil.copy(generate_image, result_image) summary['baseline_image'] = \ result_image.relative_to(self.results_dir).as_posix() if self.generate_hash_library is not None: summary['hash_status'] = 'generated' image_hash = self.generate_image_hash(item, fig) self._generated_hash_library[test_name] = image_hash summary['baseline_hash'] = image_hash # Only test figures if not generating images if self.generate_dir is None: # Compare to hash library if self.hash_library or compare.kwargs.get('hash_library', None): msg = self.compare_image_to_hash_library(item, fig, result_dir, summary=summary) # Compare against a baseline if specified else: msg = self.compare_image_to_baseline(item, fig, result_dir, summary=summary) close_mpl_figure(fig) if msg is None: if not self.results_always: shutil.rmtree(result_dir) for image_type in ['baseline_image', 'diff_image', 'result_image']: summary[image_type] = None # image no longer exists else: self._test_results[test_name] = summary pytest.fail(msg, pytrace=False) close_mpl_figure(fig) self._test_results[test_name] = summary if summary['status'] == 'skipped': > pytest.skip(summary['status_msg']) E Skipped: Skipped test, since generating image. pytest_mpl/plugin.py:694: Skipped During handling of the above exception, another exception occurred: cls = func = . at 0x713f8e272f80> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: "Callable[[], TResult]", when: "Literal['collect', 'setup', 'call', 'teardown']", reraise: Optional[ Union[Type[BaseException], Tuple[Type[BaseException], ...]] ] = None, ) -> "CallInfo[TResult]": """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None start = timing.time() precise_start = timing.perf_counter() try: > result: Optional[TResult] = func() /usr/lib/python3.10/site-packages/_pytest/runner.py:341: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.10/site-packages/_pytest/runner.py:262: in lambda: ihook(item=item, **kwds), when=when, reraise=reraise /usr/lib/python3.10/site-packages/pluggy/_hooks.py:501: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) /usr/lib/python3.10/site-packages/pluggy/_manager.py:119: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impl = > e = Skipped test, since generating image. def _warn_teardown_exception( hook_name: str, hook_impl: HookImpl, e: BaseException ) -> None: msg = "A plugin raised an exception during an old-style hookwrapper teardown.\n" msg += f"Plugin: {hook_impl.plugin_name}, Hook: {hook_name}\n" msg += f"{type(e).__name__}: {e}\n" msg += "For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning" # noqa: E501 > warnings.warn(PluggyTeardownRaisedWarning(msg), stacklevel=5) E pluggy.PluggyTeardownRaisedWarning: A plugin raised an exception during an old-style hookwrapper teardown. E Plugin: 124517867190448, Hook: pytest_runtest_call E Skipped: Skipped test, since generating image. E For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning /usr/lib/python3.10/site-packages/pluggy/_callers.py:49: PluggyTeardownRaisedWarning _________________________ test_hdiff_imatch_removetext _________________________ self = item = @pytest.hookimpl(hookwrapper=True) def pytest_runtest_call(self, item): # noqa compare = get_compare(item) if compare is None: yield return import matplotlib.pyplot as plt try: from matplotlib.testing.decorators import remove_ticks_and_titles except ImportError: from matplotlib.testing.decorators import ImageComparisonTest as MplImageComparisonTest remove_ticks_and_titles = MplImageComparisonTest.remove_text style = compare.kwargs.get('style', 'classic') remove_text = compare.kwargs.get('remove_text', False) backend = compare.kwargs.get('backend', 'agg') with plt.style.context(style, after_reset=True), switch_backend(backend): # Run test and get figure object wrap_figure_interceptor(self, item) yield test_name = generate_test_name(item) if test_name not in self.return_value: # Test function did not complete successfully return fig = self.return_value[test_name] if remove_text: remove_ticks_and_titles(fig) result_dir = self.make_test_results_dir(item) summary = { 'status': None, 'image_status': None, 'hash_status': None, 'status_msg': None, 'baseline_image': None, 'diff_image': None, 'rms': None, 'tolerance': None, 'result_image': None, 'baseline_hash': None, 'result_hash': None, } # What we do now depends on whether we are generating the # reference images or simply running the test. if self.generate_dir is not None: summary['status'] = 'skipped' summary['image_status'] = 'generated' summary['status_msg'] = 'Skipped test, since generating image.' generate_image = self.generate_baseline_image(item, fig) if self.results_always: # Make baseline image available in HTML result_image = (result_dir / "baseline.png").absolute() shutil.copy(generate_image, result_image) summary['baseline_image'] = \ result_image.relative_to(self.results_dir).as_posix() if self.generate_hash_library is not None: summary['hash_status'] = 'generated' image_hash = self.generate_image_hash(item, fig) self._generated_hash_library[test_name] = image_hash summary['baseline_hash'] = image_hash # Only test figures if not generating images if self.generate_dir is None: # Compare to hash library if self.hash_library or compare.kwargs.get('hash_library', None): msg = self.compare_image_to_hash_library(item, fig, result_dir, summary=summary) # Compare against a baseline if specified else: msg = self.compare_image_to_baseline(item, fig, result_dir, summary=summary) close_mpl_figure(fig) if msg is None: if not self.results_always: shutil.rmtree(result_dir) for image_type in ['baseline_image', 'diff_image', 'result_image']: summary[image_type] = None # image no longer exists else: self._test_results[test_name] = summary pytest.fail(msg, pytrace=False) close_mpl_figure(fig) self._test_results[test_name] = summary if summary['status'] == 'skipped': > pytest.skip(summary['status_msg']) E Skipped: Skipped test, since generating image. pytest_mpl/plugin.py:694: Skipped During handling of the above exception, another exception occurred: cls = func = . at 0x713f8dd1ac20> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: "Callable[[], TResult]", when: "Literal['collect', 'setup', 'call', 'teardown']", reraise: Optional[ Union[Type[BaseException], Tuple[Type[BaseException], ...]] ] = None, ) -> "CallInfo[TResult]": """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None start = timing.time() precise_start = timing.perf_counter() try: > result: Optional[TResult] = func() /usr/lib/python3.10/site-packages/_pytest/runner.py:341: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.10/site-packages/_pytest/runner.py:262: in lambda: ihook(item=item, **kwds), when=when, reraise=reraise /usr/lib/python3.10/site-packages/pluggy/_hooks.py:501: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) /usr/lib/python3.10/site-packages/pluggy/_manager.py:119: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impl = > e = Skipped test, since generating image. def _warn_teardown_exception( hook_name: str, hook_impl: HookImpl, e: BaseException ) -> None: msg = "A plugin raised an exception during an old-style hookwrapper teardown.\n" msg += f"Plugin: {hook_impl.plugin_name}, Hook: {hook_name}\n" msg += f"{type(e).__name__}: {e}\n" msg += "For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning" # noqa: E501 > warnings.warn(PluggyTeardownRaisedWarning(msg), stacklevel=5) E pluggy.PluggyTeardownRaisedWarning: A plugin raised an exception during an old-style hookwrapper teardown. E Plugin: 124517867190448, Hook: pytest_runtest_call E Skipped: Skipped test, since generating image. E For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning /usr/lib/python3.10/site-packages/pluggy/_callers.py:49: PluggyTeardownRaisedWarning =========================== short test summary info ============================ FAILED tests/subtests/subtest.py::test_hmatch_imatch - pluggy.PluggyTeardownR... FAILED tests/subtests/subtest.py::test_hmatch_idiff - pluggy.PluggyTeardownRa... FAILED tests/subtests/subtest.py::test_hmatch_idiffshape - pluggy.PluggyTeard... FAILED tests/subtests/subtest.py::test_hmatch_imissing - pluggy.PluggyTeardow... FAILED tests/subtests/subtest.py::test_hdiff_imatch - pluggy.PluggyTeardownRa... FAILED tests/subtests/subtest.py::test_hdiff_idiff - pluggy.PluggyTeardownRai... FAILED tests/subtests/subtest.py::test_hdiff_idiffshape - pluggy.PluggyTeardo... FAILED tests/subtests/subtest.py::test_hdiff_imissing - pluggy.PluggyTeardown... FAILED tests/subtests/subtest.py::test_hmissing_imatch - pluggy.PluggyTeardow... FAILED tests/subtests/subtest.py::test_hmissing_idiff - pluggy.PluggyTeardown... FAILED tests/subtests/subtest.py::test_hmissing_idiffshape - pluggy.PluggyTea... FAILED tests/subtests/subtest.py::test_hmissing_imissing - pluggy.PluggyTeard... FAILED tests/subtests/subtest.py::test_hdiff_imatch_tolerance - pluggy.Pluggy... FAILED tests/subtests/subtest.py::test_hdiff_idiff_tolerance - pluggy.PluggyT... FAILED tests/subtests/subtest.py::test_hdiff_imatch_savefig - pluggy.PluggyTe... FAILED tests/subtests/subtest.py::test_hdiff_imatch_style - pluggy.PluggyTear... FAILED tests/subtests/subtest.py::test_hdiff_imatch_removetext - pluggy.Plugg... ============================== 17 failed in 2.50s ============================== A JSON report can be found at: /var/tmp/portage/dev-python/pytest-mpl-0.16.1/temp/pytest-of-portage/pytest-0/test_html_generate_images_only0/results/results.json A summary of test results can be found at: /var/tmp/portage/dev-python/pytest-mpl-0.16.1/temp/pytest-of-portage/pytest-0/test_html_generate_images_only0/results/fig_comparison.html =========================== short test summary info ============================ SKIPPED [1] tests/test_pytest_mpl.py:282: No hash library for this mpl version SKIPPED [1] tests/test_pytest_mpl.py:341: Incorrect freetype version for hash check SKIPPED [1] tests/test_pytest_mpl.py:383: Incorrect freetype version for hash check SKIPPED [1] tests/test_pytest_mpl.py:451: No hash library for this mpl version SKIPPED [1] tests/subtests/test_subtest.py:177: No hash library for this mpl version SKIPPED [1] tests/subtests/test_subtest.py:182: No hash library for this mpl version SKIPPED [1] tests/subtests/test_subtest.py:189: No hash library for this mpl version SKIPPED [1] tests/subtests/test_subtest.py:199: No hash library for this mpl version SKIPPED [1] tests/subtests/test_subtest.py:216: No hash library for this mpl version SKIPPED [1] tests/subtests/test_subtest.py:224: No hash library for this mpl version SKIPPED [1] tests/subtests/test_subtest.py:239: No hash library for this mpl version SKIPPED [1] tests/subtests/test_subtest.py:247: No hash library for this mpl version SKIPPED [1] tests/subtests/test_subtest.py:266: No hash library for this mpl version SKIPPED [1] tests/subtests/test_subtest.py:275: No hash library for this mpl version SKIPPED [1] tests/subtests/test_subtest.py:286: No hash library for this mpl version FAILED tests/subtests/test_subtest.py::test_generate_images_only - assert 1 == 0 FAILED tests/subtests/test_subtest.py::test_html_generate_images_only - assert 1 == 0 =========== 2 failed, 36 passed, 15 skipped, 2 deselected in 25.54s ============ * ERROR: dev-python/pytest-mpl-0.16.1::gentoo failed (test phase): * pytest failed with python3.10 * * Call stack: * ebuild.sh, line 136: Called src_test * environment, line 4108: Called distutils-r1_src_test * environment, line 2009: Called _distutils-r1_run_foreach_impl 'python_test' * environment, line 755: Called python_foreach_impl 'distutils-r1_run_phase' 'python_test' * environment, line 3713: Called multibuild_foreach_variant '_python_multibuild_wrapper' 'distutils-r1_run_phase' 'python_test' * environment, line 3136: Called _multibuild_run '_python_multibuild_wrapper' 'distutils-r1_run_phase' 'python_test' * environment, line 3134: Called _python_multibuild_wrapper 'distutils-r1_run_phase' 'python_test' * environment, line 1235: Called distutils-r1_run_phase 'python_test' * environment, line 1932: Called python_test * environment, line 3995: Called distutils-r1_python_test * environment, line 1872: Called epytest * environment, line 2558: Called die * The specific snippet of code: * "${@}" || die -n "pytest failed with ${EPYTHON}"; * * If you need support, post the output of `emerge --info '=dev-python/pytest-mpl-0.16.1::gentoo'`, * the complete build log and the output of `emerge -pqv '=dev-python/pytest-mpl-0.16.1::gentoo'`. * The complete build log is located at '/var/log/emerge-log/build/dev-python/pytest-mpl-0.16.1:20240128-160717.log'. * For convenience, a symlink to the build log is located at '/var/tmp/portage/dev-python/pytest-mpl-0.16.1/temp/build.log'. * The ebuild environment file is located at '/var/tmp/portage/dev-python/pytest-mpl-0.16.1/temp/environment'. * Working directory: '/var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1' * S: '/var/tmp/portage/dev-python/pytest-mpl-0.16.1/work/pytest-mpl-0.16.1'