Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 883474 Details for
Bug 923141
dev-python/pytest-mpl-0.16.1 fails tests: except ImportError:
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
build.log
build.log (text/plain), 347.87 KB, created by
Agostino Sarubbo
on 2024-01-28 16:21:45 UTC
(
hide
)
Description:
build.log
Filename:
MIME Type:
Creator:
Agostino Sarubbo
Created:
2024-01-28 16:21:45 UTC
Size:
347.87 KB
patch
obsolete
> * 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 = <pytest_mpl.plugin.ImageComparison object at 0x7111802ab8b0> >item = <Function test_hmatch_imatch> > > @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 = <class '_pytest.runner.CallInfo'> >func = <function call_runtest_hook.<locals>.<lambda> at 0x711180209510> >when = 'call' >reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>) > > @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> > 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 = <HookImpl plugin_name='124319978666160', plugin=<pytest_mpl.plugin.ImageComparison object at 0x7111802ab8b0>> >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 = <pytest_mpl.plugin.ImageComparison object at 0x7111802ab8b0> >item = <Function test_hmatch_idiff> > > @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 = <class '_pytest.runner.CallInfo'> >func = <function call_runtest_hook.<locals>.<lambda> at 0x71117d9ddcf0> >when = 'call' >reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>) > > @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> > 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 = <HookImpl plugin_name='124319978666160', plugin=<pytest_mpl.plugin.ImageComparison object at 0x7111802ab8b0>> >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 = <pytest_mpl.plugin.ImageComparison object at 0x7111802ab8b0> >item = <Function test_hmatch_idiffshape> > > @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 = <class '_pytest.runner.CallInfo'> >func = <function call_runtest_hook.<locals>.<lambda> at 0x71117d9de050> >when = 'call' >reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>) > > @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> > 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 = <HookImpl plugin_name='124319978666160', plugin=<pytest_mpl.plugin.ImageComparison object at 0x7111802ab8b0>> >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 = <pytest_mpl.plugin.ImageComparison object at 0x7111802ab8b0> >item = <Function test_hmatch_imissing> > > @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 = <class '_pytest.runner.CallInfo'> >func = <function call_runtest_hook.<locals>.<lambda> at 0x71117c267f40> >when = 'call' >reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>) > > @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> > 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 = <HookImpl plugin_name='124319978666160', plugin=<pytest_mpl.plugin.ImageComparison object at 0x7111802ab8b0>> >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 = <pytest_mpl.plugin.ImageComparison object at 0x7111802ab8b0> >item = <Function test_hdiff_imatch> > > @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 = <class '_pytest.runner.CallInfo'> >func = <function call_runtest_hook.<locals>.<lambda> at 0x71117c2fff40> >when = 'call' >reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>) > > @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> > 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 = <HookImpl plugin_name='124319978666160', plugin=<pytest_mpl.plugin.ImageComparison object at 0x7111802ab8b0>> >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 = <pytest_mpl.plugin.ImageComparison object at 0x7111802ab8b0> >item = <Function test_hdiff_idiff> > > @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 = <class '_pytest.runner.CallInfo'> >func = <function call_runtest_hook.<locals>.<lambda> at 0x71117c267f40> >when = 'call' >reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>) > > @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> > 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 = <HookImpl plugin_name='124319978666160', plugin=<pytest_mpl.plugin.ImageComparison object at 0x7111802ab8b0>> >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 = <pytest_mpl.plugin.ImageComparison object at 0x7111802ab8b0> >item = <Function test_hdiff_idiffshape> > > @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 = <class '_pytest.runner.CallInfo'> >func = <function call_runtest_hook.<locals>.<lambda> at 0x71117c417640> >when = 'call' >reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>) > > @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> > 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 = <HookImpl plugin_name='124319978666160', plugin=<pytest_mpl.plugin.ImageComparison object at 0x7111802ab8b0>> >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 = <pytest_mpl.plugin.ImageComparison object at 0x7111802ab8b0> >item = <Function test_hdiff_imissing> > > @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 = <class '_pytest.runner.CallInfo'> >func = <function call_runtest_hook.<locals>.<lambda> at 0x71117c0e72e0> >when = 'call' >reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>) > > @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> > 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 = <HookImpl plugin_name='124319978666160', plugin=<pytest_mpl.plugin.ImageComparison object at 0x7111802ab8b0>> >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 = <pytest_mpl.plugin.ImageComparison object at 0x7111802ab8b0> >item = <Function test_hmissing_imatch> > > @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 = <class '_pytest.runner.CallInfo'> >func = <function call_runtest_hook.<locals>.<lambda> at 0x71117c1671c0> >when = 'call' >reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>) > > @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> > 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 = <HookImpl plugin_name='124319978666160', plugin=<pytest_mpl.plugin.ImageComparison object at 0x7111802ab8b0>> >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 = <pytest_mpl.plugin.ImageComparison object at 0x7111802ab8b0> >item = <Function test_hmissing_idiff> > > @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 = <class '_pytest.runner.CallInfo'> >func = <function call_runtest_hook.<locals>.<lambda> at 0x71117bdcc670> >when = 'call' >reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>) > > @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> > 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 = <HookImpl plugin_name='124319978666160', plugin=<pytest_mpl.plugin.ImageComparison object at 0x7111802ab8b0>> >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 = <pytest_mpl.plugin.ImageComparison object at 0x7111802ab8b0> >item = <Function test_hmissing_idiffshape> > > @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 = <class '_pytest.runner.CallInfo'> >func = <function call_runtest_hook.<locals>.<lambda> at 0x71117bdc4670> >when = 'call' >reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>) > > @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> > 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 = <HookImpl plugin_name='124319978666160', plugin=<pytest_mpl.plugin.ImageComparison object at 0x7111802ab8b0>> >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 = <pytest_mpl.plugin.ImageComparison object at 0x7111802ab8b0> >item = <Function test_hmissing_imissing> > > @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 = <class '_pytest.runner.CallInfo'> >func = <function call_runtest_hook.<locals>.<lambda> at 0x71117b830790> >when = 'call' >reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>) > > @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> > 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 = <HookImpl plugin_name='124319978666160', plugin=<pytest_mpl.plugin.ImageComparison object at 0x7111802ab8b0>> >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 = <pytest_mpl.plugin.ImageComparison object at 0x7111802ab8b0> >item = <Function test_hdiff_imatch_tolerance> > > @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 = <class '_pytest.runner.CallInfo'> >func = <function call_runtest_hook.<locals>.<lambda> at 0x71117b7e0160> >when = 'call' >reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>) > > @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> > 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 = <HookImpl plugin_name='124319978666160', plugin=<pytest_mpl.plugin.ImageComparison object at 0x7111802ab8b0>> >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 = <pytest_mpl.plugin.ImageComparison object at 0x7111802ab8b0> >item = <Function test_hdiff_idiff_tolerance> > > @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 = <class '_pytest.runner.CallInfo'> >func = <function call_runtest_hook.<locals>.<lambda> at 0x71117b79b6d0> >when = 'call' >reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>) > > @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> > 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 = <HookImpl plugin_name='124319978666160', plugin=<pytest_mpl.plugin.ImageComparison object at 0x7111802ab8b0>> >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 = <pytest_mpl.plugin.ImageComparison object at 0x7111802ab8b0> >item = <Function test_hdiff_imatch_savefig> > > @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 = <class '_pytest.runner.CallInfo'> >func = <function call_runtest_hook.<locals>.<lambda> at 0x71117b0572e0> >when = 'call' >reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>) > > @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> > 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 = <HookImpl plugin_name='124319978666160', plugin=<pytest_mpl.plugin.ImageComparison object at 0x7111802ab8b0>> >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 = <pytest_mpl.plugin.ImageComparison object at 0x7111802ab8b0> >item = <Function test_hdiff_imatch_style> > > @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 = <class '_pytest.runner.CallInfo'> >func = <function call_runtest_hook.<locals>.<lambda> at 0x71117afe6f80> >when = 'call' >reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>) > > @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> > 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 = <HookImpl plugin_name='124319978666160', plugin=<pytest_mpl.plugin.ImageComparison object at 0x7111802ab8b0>> >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 = <pytest_mpl.plugin.ImageComparison object at 0x7111802ab8b0> >item = <Function test_hdiff_imatch_removetext> > > @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 = <class '_pytest.runner.CallInfo'> >func = <function call_runtest_hook.<locals>.<lambda> at 0x71117ac3ec20> >when = 'call' >reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>) > > @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> > 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 = <HookImpl plugin_name='124319978666160', plugin=<pytest_mpl.plugin.ImageComparison object at 0x7111802ab8b0>> >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 = <pytest_mpl.plugin.ImageComparison object at 0x713f933df8b0> >item = <Function test_hmatch_imatch> > > @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 = <class '_pytest.runner.CallInfo'> >func = <function call_runtest_hook.<locals>.<lambda> at 0x713f932cd510> >when = 'call' >reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>) > > @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> > 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 = <HookImpl plugin_name='124517867190448', plugin=<pytest_mpl.plugin.ImageComparison object at 0x713f933df8b0>> >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 = <pytest_mpl.plugin.ImageComparison object at 0x713f933df8b0> >item = <Function test_hmatch_idiff> > > @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 = <class '_pytest.runner.CallInfo'> >func = <function call_runtest_hook.<locals>.<lambda> at 0x713f90a71cf0> >when = 'call' >reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>) > > @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> > 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 = <HookImpl plugin_name='124517867190448', plugin=<pytest_mpl.plugin.ImageComparison object at 0x713f933df8b0>> >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 = <pytest_mpl.plugin.ImageComparison object at 0x713f933df8b0> >item = <Function test_hmatch_idiffshape> > > @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 = <class '_pytest.runner.CallInfo'> >func = <function call_runtest_hook.<locals>.<lambda> at 0x713f90a72050> >when = 'call' >reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>) > > @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> > 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 = <HookImpl plugin_name='124517867190448', plugin=<pytest_mpl.plugin.ImageComparison object at 0x713f933df8b0>> >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 = <pytest_mpl.plugin.ImageComparison object at 0x713f933df8b0> >item = <Function test_hmatch_imissing> > > @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 = <class '_pytest.runner.CallInfo'> >func = <function call_runtest_hook.<locals>.<lambda> at 0x713f8f4e3f40> >when = 'call' >reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>) > > @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> > 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 = <HookImpl plugin_name='124517867190448', plugin=<pytest_mpl.plugin.ImageComparison object at 0x713f933df8b0>> >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 = <pytest_mpl.plugin.ImageComparison object at 0x713f933df8b0> >item = <Function test_hdiff_imatch> > > @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 = <class '_pytest.runner.CallInfo'> >func = <function call_runtest_hook.<locals>.<lambda> at 0x713f8f45ff40> >when = 'call' >reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>) > > @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> > 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 = <HookImpl plugin_name='124517867190448', plugin=<pytest_mpl.plugin.ImageComparison object at 0x713f933df8b0>> >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 = <pytest_mpl.plugin.ImageComparison object at 0x713f933df8b0> >item = <Function test_hdiff_idiff> > > @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 = <class '_pytest.runner.CallInfo'> >func = <function call_runtest_hook.<locals>.<lambda> at 0x713f8f4e3f40> >when = 'call' >reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>) > > @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> > 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 = <HookImpl plugin_name='124517867190448', plugin=<pytest_mpl.plugin.ImageComparison object at 0x713f933df8b0>> >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 = <pytest_mpl.plugin.ImageComparison object at 0x713f933df8b0> >item = <Function test_hdiff_idiffshape> > > @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 = <class '_pytest.runner.CallInfo'> >func = <function call_runtest_hook.<locals>.<lambda> at 0x713f8f277640> >when = 'call' >reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>) > > @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> > 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 = <HookImpl plugin_name='124517867190448', plugin=<pytest_mpl.plugin.ImageComparison object at 0x713f933df8b0>> >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 = <pytest_mpl.plugin.ImageComparison object at 0x713f933df8b0> >item = <Function test_hdiff_imissing> > > @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 = <class '_pytest.runner.CallInfo'> >func = <function call_runtest_hook.<locals>.<lambda> at 0x713f8eddf2e0> >when = 'call' >reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>) > > @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> > 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 = <HookImpl plugin_name='124517867190448', plugin=<pytest_mpl.plugin.ImageComparison object at 0x713f933df8b0>> >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 = <pytest_mpl.plugin.ImageComparison object at 0x713f933df8b0> >item = <Function test_hmissing_imatch> > > @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 = <class '_pytest.runner.CallInfo'> >func = <function call_runtest_hook.<locals>.<lambda> at 0x713f8eda71c0> >when = 'call' >reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>) > > @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> > 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 = <HookImpl plugin_name='124517867190448', plugin=<pytest_mpl.plugin.ImageComparison object at 0x713f933df8b0>> >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 = <pytest_mpl.plugin.ImageComparison object at 0x713f933df8b0> >item = <Function test_hmissing_idiff> > > @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 = <class '_pytest.runner.CallInfo'> >func = <function call_runtest_hook.<locals>.<lambda> at 0x713f8f194670> >when = 'call' >reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>) > > @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> > 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 = <HookImpl plugin_name='124517867190448', plugin=<pytest_mpl.plugin.ImageComparison object at 0x713f933df8b0>> >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 = <pytest_mpl.plugin.ImageComparison object at 0x713f933df8b0> >item = <Function test_hmissing_idiffshape> > > @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 = <class '_pytest.runner.CallInfo'> >func = <function call_runtest_hook.<locals>.<lambda> at 0x713f8f19c670> >when = 'call' >reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>) > > @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> > 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 = <HookImpl plugin_name='124517867190448', plugin=<pytest_mpl.plugin.ImageComparison object at 0x713f933df8b0>> >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 = <pytest_mpl.plugin.ImageComparison object at 0x713f933df8b0> >item = <Function test_hmissing_imissing> > > @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 = <class '_pytest.runner.CallInfo'> >func = <function call_runtest_hook.<locals>.<lambda> at 0x713f8e7f0790> >when = 'call' >reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>) > > @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> > 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 = <HookImpl plugin_name='124517867190448', plugin=<pytest_mpl.plugin.ImageComparison object at 0x713f933df8b0>> >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 = <pytest_mpl.plugin.ImageComparison object at 0x713f933df8b0> >item = <Function test_hdiff_imatch_tolerance> > > @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 = <class '_pytest.runner.CallInfo'> >func = <function call_runtest_hook.<locals>.<lambda> at 0x713f8e898160> >when = 'call' >reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>) > > @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> > 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 = <HookImpl plugin_name='124517867190448', plugin=<pytest_mpl.plugin.ImageComparison object at 0x713f933df8b0>> >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 = <pytest_mpl.plugin.ImageComparison object at 0x713f933df8b0> >item = <Function test_hdiff_idiff_tolerance> > > @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 = <class '_pytest.runner.CallInfo'> >func = <function call_runtest_hook.<locals>.<lambda> at 0x713f8e8ab6d0> >when = 'call' >reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>) > > @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> > 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 = <HookImpl plugin_name='124517867190448', plugin=<pytest_mpl.plugin.ImageComparison object at 0x713f933df8b0>> >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 = <pytest_mpl.plugin.ImageComparison object at 0x713f933df8b0> >item = <Function test_hdiff_imatch_savefig> > > @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 = <class '_pytest.runner.CallInfo'> >func = <function call_runtest_hook.<locals>.<lambda> at 0x713f8e2cf2e0> >when = 'call' >reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>) > > @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> > 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 = <HookImpl plugin_name='124517867190448', plugin=<pytest_mpl.plugin.ImageComparison object at 0x713f933df8b0>> >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 = <pytest_mpl.plugin.ImageComparison object at 0x713f933df8b0> >item = <Function test_hdiff_imatch_style> > > @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 = <class '_pytest.runner.CallInfo'> >func = <function call_runtest_hook.<locals>.<lambda> at 0x713f8e272f80> >when = 'call' >reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>) > > @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> > 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 = <HookImpl plugin_name='124517867190448', plugin=<pytest_mpl.plugin.ImageComparison object at 0x713f933df8b0>> >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 = <pytest_mpl.plugin.ImageComparison object at 0x713f933df8b0> >item = <Function test_hdiff_imatch_removetext> > > @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 = <class '_pytest.runner.CallInfo'> >func = <function call_runtest_hook.<locals>.<lambda> at 0x713f8dd1ac20> >when = 'call' >reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>) > > @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> > 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 = <HookImpl plugin_name='124517867190448', plugin=<pytest_mpl.plugin.ImageComparison object at 0x713f933df8b0>> >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' >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 923141
: 883474