Warning: Permanently added '18.212.166.68' (ED25519) to the list of known hosts. You can reproduce this build on your computer by running: sudo dnf install copr-rpmbuild /usr/bin/copr-rpmbuild --verbose --drop-resultdir --task-url https://copr.fedorainfracloud.org/backend/get-build-task/10096132-fedora-rawhide-aarch64 --chroot fedora-rawhide-aarch64 Version: 1.6 PID: 9943 Logging PID: 9945 Task: {'allow_user_ssh': False, 'appstream': False, 'background': False, 'build_id': 10096132, 'buildroot_pkgs': [], 'chroot': 'fedora-rawhide-aarch64', 'enable_net': False, 'fedora_review': False, 'git_hash': 'a2d2e49373570f5bea076b293e0c80ef2e1762b3', 'git_repo': 'https://copr-dist-git.fedorainfracloud.org/git/pbrobinson/pandas3/python-xarray', 'isolation': 'default', 'memory_reqs': 2048, 'package_name': 'python-xarray', 'package_version': '2025.12.0-2', 'project_dirname': 'pandas3', 'project_name': 'pandas3', 'project_owner': 'pbrobinson', 'repo_priority': None, 'repos': [{'baseurl': 'https://download.copr.fedorainfracloud.org/results/pbrobinson/pandas3/fedora-rawhide-aarch64/', 'id': 'copr_base', 'name': 'Copr repository', 'priority': None}], 'sandbox': 'pbrobinson/pandas3--pbrobinson', 'source_json': {}, 'source_type': None, 'ssh_public_keys': None, 'storage': 0, 'submitter': 'pbrobinson', 'tags': [], 'task_id': '10096132-fedora-rawhide-aarch64', 'timeout': 18000, 'uses_devel_repo': False, 'with_opts': [], 'without_opts': []} Running: git clone https://copr-dist-git.fedorainfracloud.org/git/pbrobinson/pandas3/python-xarray /var/lib/copr-rpmbuild/workspace/workdir-n0idg1de/python-xarray --depth 500 --no-single-branch --recursive cmd: ['git', 'clone', 'https://copr-dist-git.fedorainfracloud.org/git/pbrobinson/pandas3/python-xarray', '/var/lib/copr-rpmbuild/workspace/workdir-n0idg1de/python-xarray', '--depth', '500', '--no-single-branch', '--recursive'] cwd: . rc: 0 stdout: stderr: Cloning into '/var/lib/copr-rpmbuild/workspace/workdir-n0idg1de/python-xarray'... Running: git checkout a2d2e49373570f5bea076b293e0c80ef2e1762b3 -- cmd: ['git', 'checkout', 'a2d2e49373570f5bea076b293e0c80ef2e1762b3', '--'] cwd: /var/lib/copr-rpmbuild/workspace/workdir-n0idg1de/python-xarray rc: 0 stdout: stderr: Note: switching to 'a2d2e49373570f5bea076b293e0c80ef2e1762b3'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by switching back to a branch. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -c with the switch command. Example: git switch -c Or undo this operation with: git switch - Turn off this advice by setting config variable advice.detachedHead to false HEAD is now at a2d2e49 automatic import of python-xarray Running: dist-git-client sources cmd: ['dist-git-client', 'sources'] cwd: /var/lib/copr-rpmbuild/workspace/workdir-n0idg1de/python-xarray rc: 0 stdout: stderr: INFO: Reading stdout from command: git rev-parse --abbrev-ref HEAD INFO: Reading stdout from command: git rev-parse HEAD INFO: Reading sources specification file: sources INFO: Downloading xarray-2025.12.0.tar.gz INFO: Reading stdout from command: curl --help all INFO: Calling: curl -H Pragma: -o xarray-2025.12.0.tar.gz --location --connect-timeout 60 --retry 3 --retry-delay 10 --remote-time --show-error --fail --retry-all-errors https://copr-dist-git.fedorainfracloud.org/repo/pkgs/pbrobinson/pandas3/python-xarray/xarray-2025.12.0.tar.gz/md5/e361a695426b954ad1273fcca7934261/xarray-2025.12.0.tar.gz % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 3010k 100 3010k 0 0 11.5M 0 --:--:-- --:--:-- --:--:-- 11.5M INFO: Reading stdout from command: md5sum xarray-2025.12.0.tar.gz tail: /var/lib/copr-rpmbuild/main.log: file truncated Running (timeout=18000): unbuffer mock --spec /var/lib/copr-rpmbuild/workspace/workdir-n0idg1de/python-xarray/python-xarray.spec --sources /var/lib/copr-rpmbuild/workspace/workdir-n0idg1de/python-xarray --resultdir /var/lib/copr-rpmbuild/results --uniqueext 1770293716.605228 -r /var/lib/copr-rpmbuild/results/configs/child.cfg INFO: mock.py version 6.6 starting (python version = 3.14.2, NVR = mock-6.6-1.fc43), args: /usr/libexec/mock/mock --spec /var/lib/copr-rpmbuild/workspace/workdir-n0idg1de/python-xarray/python-xarray.spec --sources /var/lib/copr-rpmbuild/workspace/workdir-n0idg1de/python-xarray --resultdir /var/lib/copr-rpmbuild/results --uniqueext 1770293716.605228 -r /var/lib/copr-rpmbuild/results/configs/child.cfg Start(bootstrap): init plugins INFO: tmpfs initialized INFO: selinux enabled INFO: chroot_scan: initialized INFO: compress_logs: initialized Finish(bootstrap): init plugins Start: init plugins INFO: tmpfs initialized INFO: selinux enabled INFO: chroot_scan: initialized INFO: compress_logs: initialized Finish: init plugins INFO: Signal handler active Start: run INFO: Start(/var/lib/copr-rpmbuild/workspace/workdir-n0idg1de/python-xarray/python-xarray.spec) Config(fedora-rawhide-aarch64) Start: clean chroot Finish: clean chroot Mock Version: 6.6 INFO: Mock Version: 6.6 Start(bootstrap): chroot init INFO: mounting tmpfs at /var/lib/mock/fedora-rawhide-aarch64-bootstrap-1770293716.605228/root. INFO: calling preinit hooks INFO: enabled root cache INFO: enabled package manager cache Start(bootstrap): cleaning package manager metadata Finish(bootstrap): cleaning package manager metadata INFO: Guessed host environment type: unknown INFO: Using container image: registry.fedoraproject.org/fedora:rawhide INFO: Pulling image: registry.fedoraproject.org/fedora:rawhide INFO: Tagging container image as mock-bootstrap-ff76c173-e442-4f83-93fa-2164db7968ed INFO: Checking that bb589908e572ad5eaa0dac43f85b8f84ab0b75b2ef8821c26d3f73580eda7a69 image matches host's architecture INFO: Copy content of container bb589908e572ad5eaa0dac43f85b8f84ab0b75b2ef8821c26d3f73580eda7a69 to /var/lib/mock/fedora-rawhide-aarch64-bootstrap-1770293716.605228/root INFO: mounting bb589908e572ad5eaa0dac43f85b8f84ab0b75b2ef8821c26d3f73580eda7a69 with podman image mount INFO: image bb589908e572ad5eaa0dac43f85b8f84ab0b75b2ef8821c26d3f73580eda7a69 as /var/lib/containers/storage/overlay/fa83fe7b618fa1d7564ef0bfb73ac143c9924858573210758e707b2035150244/merged INFO: umounting image bb589908e572ad5eaa0dac43f85b8f84ab0b75b2ef8821c26d3f73580eda7a69 (/var/lib/containers/storage/overlay/fa83fe7b618fa1d7564ef0bfb73ac143c9924858573210758e707b2035150244/merged) with podman image umount INFO: Removing image mock-bootstrap-ff76c173-e442-4f83-93fa-2164db7968ed INFO: Package manager dnf5 detected and used (fallback) INFO: Not updating bootstrap chroot, bootstrap_image_ready=True Start(bootstrap): creating root cache Finish(bootstrap): creating root cache Finish(bootstrap): chroot init Start: chroot init INFO: mounting tmpfs at /var/lib/mock/fedora-rawhide-aarch64-1770293716.605228/root. INFO: calling preinit hooks INFO: enabled root cache INFO: enabled package manager cache Start: cleaning package manager metadata Finish: cleaning package manager metadata INFO: enabled HW Info plugin INFO: Package manager dnf5 detected and used (direct choice) INFO: Buildroot is handled by package management downloaded with a bootstrap image: rpm-6.0.1-2.fc44.aarch64 rpm-sequoia-1.10.0-2.fc44.aarch64 dnf5-5.3.0.0-7.fc44.aarch64 dnf5-plugins-5.3.0.0-7.fc44.aarch64 Start: installing minimal buildroot with dnf5 Updating and loading repositories: fedora 100% | 13.0 MiB/s | 21.5 MiB | 00m02s Copr repository 100% | 19.8 KiB/s | 43.6 KiB | 00m02s Repositories loaded. Package Arch Version Repository Size Installing group/module packages: bash aarch64 0:5.3.9-3.fc44 fedora 8.4 MiB bzip2 aarch64 0:1.0.8-23.fc44 fedora 171.1 KiB coreutils aarch64 0:9.9-4.fc44 fedora 8.1 MiB cpio aarch64 0:2.15-9.fc44 fedora 1.1 MiB diffutils aarch64 0:3.12-5.fc44 fedora 1.6 MiB fedora-release-common noarch 0:44-0.10 fedora 20.6 KiB findutils aarch64 1:4.10.0-7.fc44 fedora 1.9 MiB gawk aarch64 0:5.3.2-3.fc44 fedora 2.6 MiB glibc-minimal-langpack aarch64 0:2.43-1.fc44 fedora 0.0 B grep aarch64 0:3.12-3.fc44 fedora 1.0 MiB gzip aarch64 0:1.14-2.fc44 fedora 437.5 KiB info aarch64 0:7.2-7.fc44 fedora 421.6 KiB patch aarch64 0:2.8-4.fc44 fedora 262.4 KiB redhat-rpm-config noarch 0:343-19.fc44 fedora 183.6 KiB rpm-build aarch64 0:6.0.1-2.fc44 fedora 598.3 KiB sed aarch64 0:4.9-7.fc44 fedora 873.1 KiB shadow-utils aarch64 2:4.19.0-6.fc44 fedora 4.4 MiB tar aarch64 2:1.35-8.fc44 fedora 3.0 MiB unzip aarch64 0:6.0-69.fc44 fedora 533.8 KiB util-linux aarch64 0:2.41.3-12.fc44 fedora 6.8 MiB which aarch64 0:2.23-4.fc44 fedora 123.3 KiB xz aarch64 1:5.8.2-2.fc44 fedora 1.4 MiB Installing dependencies: R-srpm-macros noarch 0:1.3.4-3.fc44 fedora 3.4 KiB add-determinism aarch64 0:0.7.2-3.fc44 fedora 2.0 MiB alternatives aarch64 0:1.33-5.fc44 fedora 90.1 KiB ansible-srpm-macros noarch 0:1-20.1.fc44 fedora 35.7 KiB audit-libs aarch64 0:4.1.3-1.fc44 fedora 486.5 KiB binutils aarch64 0:2.45.50-19.fc44 fedora 30.7 MiB build-reproducibility-srpm-macros noarch 0:0.7.2-3.fc44 fedora 1.2 KiB bzip2-libs aarch64 0:1.0.8-23.fc44 fedora 72.5 KiB ca-certificates noarch 0:2025.2.80_v9.0.304-5.fc44 fedora 2.7 MiB cmake-srpm-macros noarch 0:3.31.10-5.fc44 fedora 524.0 B coreutils-common aarch64 0:9.9-4.fc44 fedora 11.2 MiB crypto-policies noarch 0:20251128-3.git19878fe.fc44 fedora 132.6 KiB curl aarch64 0:8.18.0-3.fc44 fedora 464.1 KiB cyrus-sasl-lib aarch64 0:2.1.28-35.fc44 fedora 2.4 MiB debugedit aarch64 0:5.2-6.fc44 fedora 318.3 KiB dwz aarch64 0:0.16-3.fc44 fedora 322.4 KiB ed aarch64 0:1.22.4-2.fc44 fedora 157.1 KiB efi-srpm-macros noarch 0:6-6.fc44 fedora 40.2 KiB elfutils aarch64 0:0.194-3.fc44 fedora 3.3 MiB elfutils-debuginfod-client aarch64 0:0.194-3.fc44 fedora 143.7 KiB elfutils-default-yama-scope noarch 0:0.194-3.fc44 fedora 1.8 KiB elfutils-libelf aarch64 0:0.194-3.fc44 fedora 1.1 MiB elfutils-libs aarch64 0:0.194-3.fc44 fedora 746.4 KiB fedora-gpg-keys noarch 0:44-0.1 fedora 131.2 KiB fedora-release noarch 0:44-0.10 fedora 0.0 B fedora-release-identity-basic noarch 0:44-0.10 fedora 664.0 B fedora-repos noarch 0:44-0.1 fedora 4.9 KiB fedora-repos-rawhide noarch 0:44-0.1 fedora 2.2 KiB file aarch64 0:5.46-9.fc44 fedora 140.1 KiB file-libs aarch64 0:5.46-9.fc44 fedora 11.9 MiB filesystem aarch64 0:3.18-52.fc44 fedora 112.0 B filesystem-srpm-macros noarch 0:3.18-52.fc44 fedora 38.2 KiB fonts-srpm-macros noarch 1:5.0.0-2.fc44 fedora 55.8 KiB forge-srpm-macros noarch 0:0.4.0-4.fc44 fedora 38.9 KiB fpc-srpm-macros noarch 0:1.3-16.fc44 fedora 144.0 B gap-srpm-macros noarch 0:2-2.fc44 fedora 2.1 KiB gdb-minimal aarch64 0:17.1-2.fc44 fedora 13.7 MiB gdbm-libs aarch64 1:1.23-11.fc44 fedora 233.7 KiB ghc-srpm-macros noarch 0:1.10-1.fc44 fedora 792.0 B glibc aarch64 0:2.43-1.fc44 fedora 6.4 MiB glibc-common aarch64 0:2.43-1.fc44 fedora 1.3 MiB glibc-gconv-extra aarch64 0:2.43-1.fc44 fedora 18.5 MiB gmp aarch64 1:6.3.0-5.fc44 fedora 657.9 KiB gnat-srpm-macros noarch 0:7-2.fc44 fedora 1.0 KiB gnulib-l10n noarch 0:20241231-2.fc44 fedora 655.0 KiB gnupg2 aarch64 0:2.4.9-5.fc44 fedora 6.4 MiB gnupg2-dirmngr aarch64 0:2.4.9-5.fc44 fedora 646.0 KiB gnupg2-gpg-agent aarch64 0:2.4.9-5.fc44 fedora 846.7 KiB gnupg2-gpgconf aarch64 0:2.4.9-5.fc44 fedora 321.7 KiB gnupg2-keyboxd aarch64 0:2.4.9-5.fc44 fedora 233.2 KiB gnupg2-verify aarch64 0:2.4.9-5.fc44 fedora 364.3 KiB gnutls aarch64 0:3.8.11-10.fc44 fedora 3.6 MiB go-srpm-macros noarch 0:3.8.0-2.fc44 fedora 61.9 KiB gpgverify noarch 0:2.2-4.fc44 fedora 8.7 KiB ima-evm-utils-libs aarch64 0:1.6.2-8.fc44 fedora 92.6 KiB jansson aarch64 0:2.14-4.fc44 fedora 93.0 KiB java-srpm-macros noarch 0:1-8.fc44 fedora 870.0 B json-c aarch64 0:0.18-8.fc44 fedora 138.5 KiB kernel-srpm-macros noarch 0:1.0-28.fc44 fedora 1.9 KiB keyutils-libs aarch64 0:1.6.3-7.fc44 fedora 98.2 KiB krb5-libs aarch64 0:1.21.3-12.fc44 fedora 2.5 MiB libacl aarch64 0:2.3.2-6.fc44 fedora 67.8 KiB libarchive aarch64 0:3.8.4-2.fc44 fedora 975.1 KiB libassuan aarch64 0:2.5.7-5.fc44 fedora 215.8 KiB libattr aarch64 0:2.5.2-8.fc44 fedora 68.3 KiB libblkid aarch64 0:2.41.3-12.fc44 fedora 290.3 KiB libbrotli aarch64 0:1.2.0-3.fc44 fedora 909.1 KiB libcap aarch64 0:2.77-2.fc44 fedora 508.0 KiB libcap-ng aarch64 0:0.9-7.fc44 fedora 160.7 KiB libcom_err aarch64 0:1.47.3-4.fc44 fedora 111.0 KiB libcurl aarch64 0:8.18.0-3.fc44 fedora 980.9 KiB libeconf aarch64 0:0.7.9-3.fc44 fedora 80.8 KiB libevent aarch64 0:2.1.12-17.fc44 fedora 1.1 MiB libfdisk aarch64 0:2.41.3-12.fc44 fedora 418.7 KiB libffi aarch64 0:3.5.2-2.fc44 fedora 155.7 KiB libfsverity aarch64 0:1.6-4.fc44 fedora 68.4 KiB libgcc aarch64 0:16.0.1-0.5.fc44 fedora 222.2 KiB libgcrypt aarch64 0:1.11.2-1.fc44 fedora 1.2 MiB libgomp aarch64 0:16.0.1-0.5.fc44 fedora 591.2 KiB libgpg-error aarch64 0:1.58-2.fc44 fedora 989.6 KiB libidn2 aarch64 0:2.3.8-3.fc44 fedora 560.4 KiB libksba aarch64 0:1.6.7-5.fc44 fedora 398.3 KiB liblastlog2 aarch64 0:2.41.3-12.fc44 fedora 137.7 KiB libmount aarch64 0:2.41.3-12.fc44 fedora 420.0 KiB libnghttp2 aarch64 0:1.68.0-3.fc44 fedora 197.9 KiB libnghttp3 aarch64 0:1.15.0-1.fc44 fedora 206.6 KiB libpkgconf aarch64 0:2.3.0-4.fc44 fedora 133.9 KiB libpsl aarch64 0:0.21.5-7.fc44 fedora 132.3 KiB libselinux aarch64 0:3.10-1.fc44 fedora 201.0 KiB libselinux-utils aarch64 0:3.10-1.fc44 fedora 1.3 MiB libsemanage aarch64 0:3.10-1.fc44 fedora 360.0 KiB libsepol aarch64 0:3.10-1.fc44 fedora 810.0 KiB libsmartcols aarch64 0:2.41.3-12.fc44 fedora 224.4 KiB libssh aarch64 0:0.11.3-3.fc44 fedora 586.9 KiB libssh-config noarch 0:0.11.3-3.fc44 fedora 277.0 B libstdc++ aarch64 0:16.0.1-0.5.fc44 fedora 2.8 MiB libtasn1 aarch64 0:4.20.0-3.fc44 fedora 220.2 KiB libtool-ltdl aarch64 0:2.5.4-10.fc44 fedora 93.9 KiB libunistring aarch64 0:1.1-11.fc44 fedora 1.7 MiB libusb1 aarch64 0:1.0.29-5.fc44 fedora 178.8 KiB libuuid aarch64 0:2.41.3-12.fc44 fedora 69.3 KiB libverto aarch64 0:0.3.2-12.fc44 fedora 69.3 KiB libxcrypt aarch64 0:4.5.2-3.fc44 fedora 273.2 KiB libxml2 aarch64 0:2.12.10-6.fc44 fedora 1.9 MiB libzstd aarch64 0:1.5.7-5.fc44 fedora 860.2 KiB linkdupes aarch64 0:0.7.2-3.fc44 fedora 779.1 KiB lua-libs aarch64 0:5.4.8-5.fc44 fedora 329.8 KiB lua-srpm-macros noarch 0:1-17.fc44 fedora 1.3 KiB lz4-libs aarch64 0:1.10.0-4.fc44 fedora 197.3 KiB mpfr aarch64 0:4.2.2-3.fc44 fedora 755.4 KiB ncurses-base noarch 0:6.6-1.fc44 fedora 329.7 KiB ncurses-libs aarch64 0:6.6-1.fc44 fedora 1.2 MiB nettle aarch64 0:3.10.1-3.fc44 fedora 765.0 KiB ngtcp2 aarch64 0:1.19.0-2.fc44 fedora 341.0 KiB ngtcp2-crypto-ossl aarch64 0:1.19.0-2.fc44 fedora 67.4 KiB npth aarch64 0:1.8-4.fc44 fedora 93.3 KiB ocaml-srpm-macros noarch 0:11-3.fc44 fedora 1.9 KiB openblas-srpm-macros noarch 0:2-21.fc44 fedora 112.0 B openldap aarch64 0:2.6.10-7.fc44 fedora 761.6 KiB openssl-libs aarch64 1:3.5.5-1.fc44 fedora 7.4 MiB p11-kit aarch64 0:0.25.8-2.fc44 fedora 2.5 MiB p11-kit-trust aarch64 0:0.25.8-2.fc44 fedora 530.0 KiB package-notes-srpm-macros noarch 0:0.5-15.fc44 fedora 1.6 KiB pam-libs aarch64 0:1.7.2-1.fc44 fedora 222.6 KiB pcre2 aarch64 0:10.47-1.fc44.1 fedora 714.3 KiB pcre2-syntax noarch 0:10.47-1.fc44.1 fedora 281.9 KiB perl-srpm-macros noarch 0:1-61.fc44 fedora 861.0 B pkgconf aarch64 0:2.3.0-4.fc44 fedora 112.3 KiB pkgconf-m4 noarch 0:2.3.0-4.fc44 fedora 14.4 KiB pkgconf-pkg-config aarch64 0:2.3.0-4.fc44 fedora 990.0 B policycoreutils aarch64 0:3.10-1.fc44 fedora 1.5 MiB popt aarch64 0:1.19-10.fc44 fedora 144.6 KiB publicsuffix-list-dafsa noarch 0:20260116-1.fc44 fedora 70.4 KiB pyproject-srpm-macros noarch 0:1.18.6-2.fc44 fedora 1.9 KiB python-srpm-macros noarch 0:3.14-10.fc44 fedora 51.6 KiB qt5-srpm-macros noarch 0:5.15.18-2.fc44 fedora 500.0 B qt6-srpm-macros noarch 0:6.10.1-2.fc44 fedora 464.0 B readline aarch64 0:8.3-4.fc44 fedora 563.5 KiB rpm aarch64 0:6.0.1-2.fc44 fedora 3.3 MiB rpm-build-libs aarch64 0:6.0.1-2.fc44 fedora 264.0 KiB rpm-libs aarch64 0:6.0.1-2.fc44 fedora 995.0 KiB rpm-plugin-selinux aarch64 0:6.0.1-2.fc44 fedora 67.9 KiB rpm-sequoia aarch64 0:1.10.0-2.fc44 fedora 2.3 MiB rpm-sign-libs aarch64 0:6.0.1-2.fc44 fedora 67.6 KiB rust-srpm-macros noarch 0:28.4-3.fc44 fedora 5.5 KiB selinux-policy noarch 0:42.22-1.fc44 fedora 32.0 KiB selinux-policy-targeted noarch 0:42.22-1.fc44 fedora 18.5 MiB setup noarch 0:2.15.0-28.fc44 fedora 724.9 KiB sqlite-libs aarch64 0:3.51.2-1.fc44 fedora 1.6 MiB systemd-libs aarch64 0:259-19.fc44 fedora 2.5 MiB systemd-standalone-sysusers aarch64 0:259-19.fc44 fedora 329.5 KiB tpm2-tss aarch64 0:4.1.3-9.fc44 fedora 2.1 MiB tree-sitter-srpm-macros noarch 0:0.4.2-2.fc44 fedora 8.3 KiB util-linux-core aarch64 0:2.41.3-12.fc44 fedora 2.4 MiB xxhash-libs aarch64 0:0.8.3-4.fc44 fedora 85.8 KiB xz-libs aarch64 1:5.8.2-2.fc44 fedora 265.4 KiB zig-srpm-macros noarch 0:1-8.fc44 fedora 1.3 KiB zip aarch64 0:3.0-45.fc44 fedora 762.0 KiB zlib-ng-compat aarch64 0:2.3.2-3.fc44 fedora 133.4 KiB zstd aarch64 0:1.5.7-5.fc44 fedora 562.2 KiB Installing groups: Buildsystem building group Transaction Summary: Installing: 182 packages Total size of inbound packages is 66 MiB. Need to download 66 MiB. After this operation, 248 MiB extra will be used (install 248 MiB, remove 0 B). [ 1/182] bzip2-0:1.0.8-23.fc44.aarch64 100% | 2.5 MiB/s | 51.9 KiB | 00m00s [ 2/182] bash-0:5.3.9-3.fc44.aarch64 100% | 73.6 MiB/s | 1.8 MiB | 00m00s [ 3/182] coreutils-0:9.9-4.fc44.aarch6 100% | 42.6 MiB/s | 1.1 MiB | 00m00s [ 4/182] cpio-0:2.15-9.fc44.aarch64 100% | 47.1 MiB/s | 289.7 KiB | 00m00s [ 5/182] fedora-release-common-0:44-0. 100% | 12.0 MiB/s | 24.7 KiB | 00m00s [ 6/182] diffutils-0:3.12-5.fc44.aarch 100% | 95.7 MiB/s | 391.9 KiB | 00m00s [ 7/182] findutils-1:4.10.0-7.fc44.aar 100% | 107.8 MiB/s | 552.0 KiB | 00m00s [ 8/182] glibc-minimal-langpack-0:2.43 100% | 25.5 MiB/s | 78.4 KiB | 00m00s [ 9/182] gawk-0:5.3.2-3.fc44.aarch64 100% | 111.7 MiB/s | 1.1 MiB | 00m00s [ 10/182] grep-0:3.12-3.fc44.aarch64 100% | 36.2 MiB/s | 296.3 KiB | 00m00s [ 11/182] gzip-0:1.14-2.fc44.aarch64 100% | 28.1 MiB/s | 172.8 KiB | 00m00s [ 12/182] info-0:7.2-7.fc44.aarch64 100% | 43.8 MiB/s | 179.5 KiB | 00m00s [ 13/182] redhat-rpm-config-0:343-19.fc 100% | 25.9 MiB/s | 79.4 KiB | 00m00s [ 14/182] patch-0:2.8-4.fc44.aarch64 100% | 15.5 MiB/s | 111.1 KiB | 00m00s [ 15/182] rpm-build-0:6.0.1-2.fc44.aarc 100% | 32.2 MiB/s | 132.0 KiB | 00m00s [ 16/182] sed-0:4.9-7.fc44.aarch64 100% | 61.5 MiB/s | 314.8 KiB | 00m00s [ 17/182] tar-2:1.35-8.fc44.aarch64 100% | 139.1 MiB/s | 854.9 KiB | 00m00s [ 18/182] shadow-utils-2:4.19.0-6.fc44. 100% | 128.8 MiB/s | 1.3 MiB | 00m00s [ 19/182] unzip-0:6.0-69.fc44.aarch64 100% | 28.0 MiB/s | 200.9 KiB | 00m00s [ 20/182] util-linux-0:2.41.3-12.fc44.a 100% | 168.7 MiB/s | 1.2 MiB | 00m00s [ 21/182] which-0:2.23-4.fc44.aarch64 100% | 8.1 MiB/s | 41.6 KiB | 00m00s [ 22/182] xz-1:5.8.2-2.fc44.aarch64 100% | 98.7 MiB/s | 606.6 KiB | 00m00s [ 23/182] filesystem-0:3.18-52.fc44.aar 100% | 121.3 MiB/s | 1.3 MiB | 00m00s [ 24/182] ncurses-libs-0:6.6-1.fc44.aar 100% | 31.7 MiB/s | 324.8 KiB | 00m00s [ 25/182] glibc-0:2.43-1.fc44.aarch64 100% | 121.3 MiB/s | 1.9 MiB | 00m00s [ 26/182] bzip2-libs-0:1.0.8-23.fc44.aa 100% | 8.1 MiB/s | 41.2 KiB | 00m00s [ 27/182] libacl-0:2.3.2-6.fc44.aarch64 100% | 5.9 MiB/s | 24.0 KiB | 00m00s [ 28/182] gmp-1:6.3.0-5.fc44.aarch64 100% | 52.9 MiB/s | 271.0 KiB | 00m00s [ 29/182] libattr-0:2.5.2-8.fc44.aarch6 100% | 4.4 MiB/s | 17.8 KiB | 00m00s [ 30/182] libcap-0:2.77-2.fc44.aarch64 100% | 17.2 MiB/s | 87.8 KiB | 00m00s [ 31/182] coreutils-common-0:9.9-4.fc44 100% | 123.7 MiB/s | 2.1 MiB | 00m00s [ 32/182] libselinux-0:3.10-1.fc44.aarc 100% | 19.1 MiB/s | 97.6 KiB | 00m00s [ 33/182] fedora-repos-0:44-0.1.noarch 100% | 4.4 MiB/s | 9.1 KiB | 00m00s [ 34/182] systemd-libs-0:259-19.fc44.aa 100% | 110.3 MiB/s | 790.8 KiB | 00m00s [ 35/182] openssl-libs-1:3.5.5-1.fc44.a 100% | 176.1 MiB/s | 2.5 MiB | 00m00s [ 36/182] mpfr-0:4.2.2-3.fc44.aarch64 100% | 34.7 MiB/s | 320.0 KiB | 00m00s [ 37/182] readline-0:8.3-4.fc44.aarch64 100% | 43.2 MiB/s | 221.1 KiB | 00m00s [ 38/182] glibc-common-0:2.43-1.fc44.aa 100% | 114.9 MiB/s | 352.9 KiB | 00m00s [ 39/182] pcre2-0:10.47-1.fc44.1.aarch6 100% | 81.5 MiB/s | 250.2 KiB | 00m00s [ 40/182] ed-0:1.22.4-2.fc44.aarch64 100% | 27.2 MiB/s | 83.6 KiB | 00m00s [ 41/182] R-srpm-macros-0:1.3.4-3.fc44. 100% | 2.1 MiB/s | 10.8 KiB | 00m00s [ 42/182] build-reproducibility-srpm-ma 100% | 4.2 MiB/s | 13.0 KiB | 00m00s [ 43/182] ansible-srpm-macros-0:1-20.1. 100% | 4.9 MiB/s | 20.1 KiB | 00m00s [ 44/182] cmake-srpm-macros-0:3.31.10-5 100% | 5.2 MiB/s | 10.6 KiB | 00m00s [ 45/182] efi-srpm-macros-0:6-6.fc44.no 100% | 11.0 MiB/s | 22.6 KiB | 00m00s [ 46/182] dwz-0:0.16-3.fc44.aarch64 100% | 42.8 MiB/s | 131.3 KiB | 00m00s [ 47/182] file-0:5.46-9.fc44.aarch64 100% | 16.0 MiB/s | 49.1 KiB | 00m00s [ 48/182] filesystem-srpm-macros-0:3.18 100% | 3.7 MiB/s | 26.6 KiB | 00m00s [ 49/182] fonts-srpm-macros-1:5.0.0-2.f 100% | 3.3 MiB/s | 27.4 KiB | 00m00s [ 50/182] forge-srpm-macros-0:0.4.0-4.f 100% | 3.3 MiB/s | 20.0 KiB | 00m00s [ 51/182] fpc-srpm-macros-0:1.3-16.fc44 100% | 3.9 MiB/s | 7.9 KiB | 00m00s [ 52/182] gap-srpm-macros-0:2-2.fc44.no 100% | 8.9 MiB/s | 9.1 KiB | 00m00s [ 53/182] ghc-srpm-macros-0:1.10-1.fc44 100% | 8.6 MiB/s | 8.8 KiB | 00m00s [ 54/182] gnat-srpm-macros-0:7-2.fc44.n 100% | 8.5 MiB/s | 8.7 KiB | 00m00s [ 55/182] go-srpm-macros-0:3.8.0-2.fc44 100% | 9.2 MiB/s | 28.2 KiB | 00m00s [ 56/182] kernel-srpm-macros-0:1.0-28.f 100% | 4.4 MiB/s | 9.0 KiB | 00m00s [ 57/182] java-srpm-macros-0:1-8.fc44.n 100% | 4.0 MiB/s | 8.1 KiB | 00m00s [ 58/182] lua-srpm-macros-0:1-17.fc44.n 100% | 2.9 MiB/s | 8.9 KiB | 00m00s [ 59/182] ocaml-srpm-macros-0:11-3.fc44 100% | 3.0 MiB/s | 9.3 KiB | 00m00s [ 60/182] openblas-srpm-macros-0:2-21.f 100% | 2.5 MiB/s | 7.8 KiB | 00m00s [ 61/182] package-notes-srpm-macros-0:0 100% | 9.0 MiB/s | 9.2 KiB | 00m00s [ 62/182] perl-srpm-macros-0:1-61.fc44. 100% | 4.1 MiB/s | 8.4 KiB | 00m00s [ 63/182] pyproject-srpm-macros-0:1.18. 100% | 6.6 MiB/s | 13.5 KiB | 00m00s [ 64/182] qt5-srpm-macros-0:5.15.18-2.f 100% | 8.5 MiB/s | 8.7 KiB | 00m00s [ 65/182] qt6-srpm-macros-0:6.10.1-2.fc 100% | 9.0 MiB/s | 9.2 KiB | 00m00s [ 66/182] python-srpm-macros-0:3.14-10. 100% | 11.7 MiB/s | 24.0 KiB | 00m00s [ 67/182] rust-srpm-macros-0:28.4-3.fc4 100% | 10.8 MiB/s | 11.1 KiB | 00m00s [ 68/182] tree-sitter-srpm-macros-0:0.4 100% | 13.2 MiB/s | 13.5 KiB | 00m00s [ 69/182] rpm-0:6.0.1-2.fc44.aarch64 100% | 141.1 MiB/s | 577.8 KiB | 00m00s [ 70/182] zig-srpm-macros-0:1-8.fc44.no 100% | 2.9 MiB/s | 8.8 KiB | 00m00s [ 71/182] zip-0:3.0-45.fc44.aarch64 100% | 64.8 MiB/s | 265.6 KiB | 00m00s [ 72/182] debugedit-0:5.2-6.fc44.aarch6 100% | 27.6 MiB/s | 84.7 KiB | 00m00s [ 73/182] elfutils-0:0.194-3.fc44.aarch 100% | 105.2 MiB/s | 538.6 KiB | 00m00s [ 74/182] elfutils-libelf-0:0.194-3.fc4 100% | 39.5 MiB/s | 202.3 KiB | 00m00s [ 75/182] libarchive-0:3.8.4-2.fc44.aar 100% | 81.0 MiB/s | 414.7 KiB | 00m00s [ 76/182] libgcc-0:16.0.1-0.5.fc44.aarc 100% | 19.2 MiB/s | 98.5 KiB | 00m00s [ 77/182] libstdc++-0:16.0.1-0.5.fc44.a 100% | 117.6 MiB/s | 842.6 KiB | 00m00s [ 78/182] pkgconf-pkg-config-0:2.3.0-4. 100% | 1.9 MiB/s | 9.7 KiB | 00m00s [ 79/182] binutils-0:2.45.50-19.fc44.aa 100% | 217.7 MiB/s | 6.3 MiB | 00m00s [ 80/182] popt-0:1.19-10.fc44.aarch64 100% | 7.1 MiB/s | 65.2 KiB | 00m00s [ 81/182] rpm-build-libs-0:6.0.1-2.fc44 100% | 12.7 MiB/s | 117.3 KiB | 00m00s [ 82/182] rpm-libs-0:6.0.1-2.fc44.aarch 100% | 123.1 MiB/s | 378.2 KiB | 00m00s [ 83/182] zstd-0:1.5.7-5.fc44.aarch64 100% | 35.8 MiB/s | 183.1 KiB | 00m00s [ 84/182] audit-libs-0:4.1.3-1.fc44.aar 100% | 27.6 MiB/s | 141.4 KiB | 00m00s [ 85/182] libeconf-0:0.7.9-3.fc44.aarch 100% | 11.4 MiB/s | 35.0 KiB | 00m00s [ 86/182] libxcrypt-0:4.5.2-3.fc44.aarc 100% | 40.7 MiB/s | 125.1 KiB | 00m00s [ 87/182] libsemanage-0:3.10-1.fc44.aar 100% | 29.1 MiB/s | 119.1 KiB | 00m00s [ 88/182] pam-libs-0:1.7.2-1.fc44.aarch 100% | 18.5 MiB/s | 56.8 KiB | 00m00s [ 89/182] setup-0:2.15.0-28.fc44.noarch 100% | 51.2 MiB/s | 157.2 KiB | 00m00s [ 90/182] libblkid-0:2.41.3-12.fc44.aar 100% | 39.6 MiB/s | 121.8 KiB | 00m00s [ 91/182] libcap-ng-0:0.9-7.fc44.aarch6 100% | 16.0 MiB/s | 32.7 KiB | 00m00s [ 92/182] liblastlog2-0:2.41.3-12.fc44. 100% | 11.4 MiB/s | 23.3 KiB | 00m00s [ 93/182] libfdisk-0:2.41.3-12.fc44.aar 100% | 37.7 MiB/s | 154.4 KiB | 00m00s [ 94/182] libmount-0:2.41.3-12.fc44.aar 100% | 38.5 MiB/s | 157.8 KiB | 00m00s [ 95/182] libsmartcols-0:2.41.3-12.fc44 100% | 26.9 MiB/s | 82.7 KiB | 00m00s [ 96/182] libuuid-0:2.41.3-12.fc44.aarc 100% | 12.6 MiB/s | 25.9 KiB | 00m00s [ 97/182] util-linux-core-0:2.41.3-12.f 100% | 87.9 MiB/s | 540.2 KiB | 00m00s [ 98/182] zlib-ng-compat-0:2.3.2-3.fc44 100% | 14.4 MiB/s | 73.7 KiB | 00m00s [ 99/182] xz-libs-1:5.8.2-2.fc44.aarch6 100% | 21.8 MiB/s | 111.7 KiB | 00m00s [100/182] ncurses-base-0:6.6-1.fc44.noa 100% | 21.5 MiB/s | 88.0 KiB | 00m00s [101/182] gnulib-l10n-0:20241231-2.fc44 100% | 29.4 MiB/s | 150.3 KiB | 00m00s [102/182] glibc-gconv-extra-0:2.43-1.fc 100% | 154.5 MiB/s | 1.7 MiB | 00m00s [103/182] libsepol-0:3.10-1.fc44.aarch6 100% | 53.2 MiB/s | 327.1 KiB | 00m00s [104/182] ca-certificates-0:2025.2.80_v 100% | 118.8 MiB/s | 973.5 KiB | 00m00s [105/182] crypto-policies-0:20251128-3. 100% | 24.0 MiB/s | 98.3 KiB | 00m00s [106/182] fedora-gpg-keys-0:44-0.1.noar 100% | 33.9 MiB/s | 138.8 KiB | 00m00s [107/182] fedora-repos-rawhide-0:44-0.1 100% | 8.4 MiB/s | 8.6 KiB | 00m00s [108/182] pcre2-syntax-0:10.47-1.fc44.1 100% | 53.6 MiB/s | 164.7 KiB | 00m00s [109/182] add-determinism-0:0.7.2-3.fc4 100% | 114.8 MiB/s | 823.2 KiB | 00m00s [110/182] linkdupes-0:0.7.2-3.fc44.aarc 100% | 41.2 MiB/s | 337.2 KiB | 00m00s [111/182] file-libs-0:5.46-9.fc44.aarch 100% | 92.0 MiB/s | 847.9 KiB | 00m00s [112/182] curl-0:8.18.0-3.fc44.aarch64 100% | 46.0 MiB/s | 235.6 KiB | 00m00s [113/182] alternatives-0:1.33-5.fc44.aa 100% | 13.2 MiB/s | 40.4 KiB | 00m00s [114/182] elfutils-debuginfod-client-0: 100% | 22.4 MiB/s | 45.8 KiB | 00m00s [115/182] jansson-0:2.14-4.fc44.aarch64 100% | 22.7 MiB/s | 46.5 KiB | 00m00s [116/182] elfutils-libs-0:0.194-3.fc44. 100% | 85.6 MiB/s | 263.0 KiB | 00m00s [117/182] libxml2-0:2.12.10-6.fc44.aarc 100% | 166.5 MiB/s | 682.0 KiB | 00m00s [118/182] libzstd-0:1.5.7-5.fc44.aarch6 100% | 45.9 MiB/s | 329.2 KiB | 00m00s [119/182] lz4-libs-0:1.10.0-4.fc44.aarc 100% | 15.0 MiB/s | 76.6 KiB | 00m00s [120/182] pkgconf-0:2.3.0-4.fc44.aarch6 100% | 14.5 MiB/s | 44.5 KiB | 00m00s [121/182] pkgconf-m4-0:2.3.0-4.fc44.noa 100% | 6.9 MiB/s | 14.1 KiB | 00m00s [122/182] libgomp-0:16.0.1-0.5.fc44.aar 100% | 87.8 MiB/s | 359.4 KiB | 00m00s [123/182] lua-libs-0:5.4.8-5.fc44.aarch 100% | 25.3 MiB/s | 129.4 KiB | 00m00s [124/182] rpm-sign-libs-0:6.0.1-2.fc44. 100% | 6.6 MiB/s | 27.1 KiB | 00m00s [125/182] rpm-sequoia-0:1.10.0-2.fc44.a 100% | 144.2 MiB/s | 885.7 KiB | 00m00s [126/182] libffi-0:3.5.2-2.fc44.aarch64 100% | 9.7 MiB/s | 39.6 KiB | 00m00s [127/182] sqlite-libs-0:3.51.2-1.fc44.a 100% | 104.8 MiB/s | 750.9 KiB | 00m00s [128/182] p11-kit-trust-0:0.25.8-2.fc44 100% | 67.5 MiB/s | 138.1 KiB | 00m00s [129/182] p11-kit-0:0.25.8-2.fc44.aarch 100% | 95.8 MiB/s | 490.6 KiB | 00m00s [130/182] elfutils-default-yama-scope-0 100% | 5.8 MiB/s | 11.9 KiB | 00m00s [131/182] json-c-0:0.18-8.fc44.aarch64 100% | 14.6 MiB/s | 44.9 KiB | 00m00s [132/182] libpkgconf-0:2.3.0-4.fc44.aar 100% | 18.5 MiB/s | 37.9 KiB | 00m00s [133/182] ima-evm-utils-libs-0:1.6.2-8. 100% | 14.4 MiB/s | 29.5 KiB | 00m00s [134/182] libfsverity-0:1.6-4.fc44.aarc 100% | 3.1 MiB/s | 18.7 KiB | 00m00s [135/182] libtasn1-0:4.20.0-3.fc44.aarc 100% | 14.3 MiB/s | 73.4 KiB | 00m00s [136/182] gnupg2-0:2.4.9-5.fc44.aarch64 100% | 161.2 MiB/s | 1.6 MiB | 00m00s [137/182] gnupg2-dirmngr-0:2.4.9-5.fc44 100% | 86.0 MiB/s | 264.1 KiB | 00m00s [138/182] gpgverify-0:2.2-4.fc44.noarch 100% | 2.7 MiB/s | 11.2 KiB | 00m00s [139/182] gnupg2-gpg-agent-0:2.4.9-5.fc 100% | 86.5 MiB/s | 265.9 KiB | 00m00s [140/182] gnupg2-gpgconf-0:2.4.9-5.fc44 100% | 37.1 MiB/s | 113.8 KiB | 00m00s [141/182] gnupg2-keyboxd-0:2.4.9-5.fc44 100% | 29.8 MiB/s | 91.4 KiB | 00m00s [142/182] gnupg2-verify-0:2.4.9-5.fc44. 100% | 53.2 MiB/s | 163.4 KiB | 00m00s [143/182] libassuan-0:2.5.7-5.fc44.aarc 100% | 32.6 MiB/s | 66.9 KiB | 00m00s [144/182] libgcrypt-0:1.11.2-1.fc44.aar 100% | 126.8 MiB/s | 519.6 KiB | 00m00s [145/182] libgpg-error-0:1.58-2.fc44.aa 100% | 60.6 MiB/s | 248.3 KiB | 00m00s [146/182] npth-0:1.8-4.fc44.aarch64 100% | 8.2 MiB/s | 25.0 KiB | 00m00s [147/182] tpm2-tss-0:4.1.3-9.fc44.aarch 100% | 130.6 MiB/s | 401.2 KiB | 00m00s [148/182] libksba-0:1.6.7-5.fc44.aarch6 100% | 38.5 MiB/s | 157.8 KiB | 00m00s [149/182] openldap-0:2.6.10-7.fc44.aarc 100% | 61.4 MiB/s | 251.4 KiB | 00m00s [150/182] libusb1-0:1.0.29-5.fc44.aarch 100% | 38.1 MiB/s | 78.0 KiB | 00m00s [151/182] libidn2-0:2.3.8-3.fc44.aarch6 100% | 56.8 MiB/s | 174.6 KiB | 00m00s [152/182] libunistring-0:1.1-11.fc44.aa 100% | 105.1 MiB/s | 538.3 KiB | 00m00s [153/182] nettle-0:3.10.1-3.fc44.aarch6 100% | 83.1 MiB/s | 425.5 KiB | 00m00s [154/182] cyrus-sasl-lib-0:2.1.28-35.fc 100% | 125.8 MiB/s | 772.9 KiB | 00m00s [155/182] libevent-0:2.1.12-17.fc44.aar 100% | 66.0 MiB/s | 270.5 KiB | 00m00s [156/182] libtool-ltdl-0:2.5.4-10.fc44. 100% | 11.6 MiB/s | 35.6 KiB | 00m00s [157/182] gdbm-libs-1:1.23-11.fc44.aarc 100% | 18.3 MiB/s | 56.3 KiB | 00m00s [158/182] fedora-release-0:44-0.10.noar 100% | 6.6 MiB/s | 13.5 KiB | 00m00s [159/182] systemd-standalone-sysusers-0 100% | 34.1 MiB/s | 139.5 KiB | 00m00s [160/182] xxhash-libs-0:0.8.3-4.fc44.aa 100% | 8.4 MiB/s | 34.5 KiB | 00m00s [161/182] fedora-release-identity-basic 100% | 3.5 MiB/s | 14.3 KiB | 00m00s [162/182] gdb-minimal-0:17.1-2.fc44.aar 100% | 208.7 MiB/s | 4.4 MiB | 00m00s [163/182] libcurl-0:8.18.0-3.fc44.aarch 100% | 37.6 MiB/s | 423.8 KiB | 00m00s [164/182] libbrotli-0:1.2.0-3.fc44.aarc 100% | 85.1 MiB/s | 348.7 KiB | 00m00s [165/182] krb5-libs-0:1.21.3-12.fc44.aa 100% | 104.9 MiB/s | 752.1 KiB | 00m00s [166/182] libnghttp2-0:1.68.0-3.fc44.aa 100% | 36.5 MiB/s | 74.7 KiB | 00m00s [167/182] libnghttp3-0:1.15.0-1.fc44.aa 100% | 33.6 MiB/s | 68.8 KiB | 00m00s [168/182] libpsl-0:0.21.5-7.fc44.aarch6 100% | 31.7 MiB/s | 64.9 KiB | 00m00s [169/182] libssh-0:0.11.3-3.fc44.aarch6 100% | 75.4 MiB/s | 231.7 KiB | 00m00s [170/182] ngtcp2-0:1.19.0-2.fc44.aarch6 100% | 35.4 MiB/s | 144.9 KiB | 00m00s [171/182] ngtcp2-crypto-ossl-0:1.19.0-2 100% | 6.2 MiB/s | 25.6 KiB | 00m00s [172/182] keyutils-libs-0:1.6.3-7.fc44. 100% | 10.2 MiB/s | 31.5 KiB | 00m00s [173/182] libcom_err-0:1.47.3-4.fc44.aa 100% | 8.8 MiB/s | 27.0 KiB | 00m00s [174/182] libverto-0:0.3.2-12.fc44.aarc 100% | 6.7 MiB/s | 20.5 KiB | 00m00s [175/182] libssh-config-0:0.11.3-3.fc44 100% | 2.9 MiB/s | 8.9 KiB | 00m00s [176/182] publicsuffix-list-dafsa-0:202 100% | 19.6 MiB/s | 60.3 KiB | 00m00s [177/182] gnutls-0:3.8.11-10.fc44.aarch 100% | 16.6 MiB/s | 1.3 MiB | 00m00s [178/182] policycoreutils-0:3.10-1.fc44 100% | 50.7 MiB/s | 259.4 KiB | 00m00s [179/182] selinux-policy-0:42.22-1.fc44 100% | 16.6 MiB/s | 67.8 KiB | 00m00s [180/182] libselinux-utils-0:3.10-1.fc4 100% | 23.9 MiB/s | 122.3 KiB | 00m00s [181/182] rpm-plugin-selinux-0:6.0.1-2. 100% | 3.8 MiB/s | 19.2 KiB | 00m00s [182/182] selinux-policy-targeted-0:42. 100% | 200.3 MiB/s | 6.8 MiB | 00m00s -------------------------------------------------------------------------------- [182/182] Total 100% | 165.8 MiB/s | 66.0 MiB | 00m00s Running transaction Importing OpenPGP key 0x6D9F90A6: UserID : "Fedora (44) " Fingerprint: 36F612DCF27F7D1A48A835E4DBFCF71C6D9F90A6 From : file:///usr/share/distribution-gpg-keys/fedora/RPM-GPG-KEY-fedora-44-primary The key was successfully imported. Importing OpenPGP key 0x6D9F90A6: UserID : "Fedora (44) " Fingerprint: 36F612DCF27F7D1A48A835E4DBFCF71C6D9F90A6 From : file:///usr/share/distribution-gpg-keys/fedora/RPM-GPG-KEY-fedora-44-primary The key was successfully imported. Importing OpenPGP key 0x31645531: UserID : "Fedora (43) " Fingerprint: C6E7F081CF80E13146676E88829B606631645531 From : file:///usr/share/distribution-gpg-keys/fedora/RPM-GPG-KEY-fedora-43-primary The key was successfully imported. Importing OpenPGP key 0xF577861E: UserID : "Fedora (45) " Fingerprint: 4F50A6114CD5C6976A7F1179655A4B02F577861E From : file:///usr/share/distribution-gpg-keys/fedora/RPM-GPG-KEY-fedora-45-primary The key was successfully imported. [ 1/184] Verify package files 100% | 755.0 B/s | 182.0 B | 00m00s [ 2/184] Prepare transaction 100% | 2.3 KiB/s | 182.0 B | 00m00s [ 3/184] Installing libgcc-0:16.0.1-0. 100% | 109.3 MiB/s | 223.8 KiB | 00m00s [ 4/184] Installing libssh-config-0:0. 100% | 0.0 B/s | 816.0 B | 00m00s [ 5/184] Installing publicsuffix-list- 100% | 69.4 MiB/s | 71.1 KiB | 00m00s [ 6/184] Installing fedora-release-ide 100% | 898.4 KiB/s | 920.0 B | 00m00s [ 7/184] Installing fedora-gpg-keys-0: 100% | 29.1 MiB/s | 179.0 KiB | 00m00s [ 8/184] Installing fedora-repos-rawhi 100% | 0.0 B/s | 2.4 KiB | 00m00s [ 9/184] Installing fedora-repos-0:44- 100% | 0.0 B/s | 5.7 KiB | 00m00s [ 10/184] Installing fedora-release-com 100% | 24.3 MiB/s | 24.9 KiB | 00m00s [ 11/184] Installing fedora-release-0:4 100% | 20.2 KiB/s | 124.0 B | 00m00s >>> Running sysusers scriptlet: setup-0:2.15.0-28.fc44.noarch >>> Finished sysusers scriptlet: setup-0:2.15.0-28.fc44.noarch >>> Scriptlet output: >>> Creating group 'adm' with GID 4. >>> Creating group 'audio' with GID 63. >>> Creating group 'cdrom' with GID 11. >>> Creating group 'clock' with GID 103. >>> Creating group 'dialout' with GID 18. >>> Creating group 'disk' with GID 6. >>> Creating group 'floppy' with GID 19. >>> Creating group 'ftp' with GID 50. >>> Creating group 'games' with GID 20. >>> Creating group 'input' with GID 104. >>> Creating group 'kmem' with GID 9. >>> Creating group 'kvm' with GID 36. >>> Creating group 'lock' with GID 54. >>> Creating group 'lp' with GID 7. >>> Creating group 'mail' with GID 12. >>> Creating group 'man' with GID 15. >>> Creating group 'mem' with GID 8. >>> Creating group 'nobody' with GID 65534. >>> Creating group 'render' with GID 105. >>> Creating group 'root' with GID 0. >>> Creating group 'sgx' with GID 106. >>> Creating group 'sys' with GID 3. >>> Creating group 'tape' with GID 33. >>> Creating group 'tty' with GID 5. >>> Creating group 'users' with GID 100. >>> Creating group 'utmp' with GID 22. >>> Creating group 'video' with GID 39. >>> Creating group 'wheel' with GID 10. >>> Creating user 'adm' (adm) with UID 3 and GID 4. >>> Creating group 'bin' with GID 1. >>> Creating user 'bin' (bin) with UID 1 and GID 1. >>> Creating group 'daemon' with GID 2. >>> Creating user 'daemon' (daemon) with UID 2 and GID 2. >>> Creating user 'ftp' (FTP User) with UID 14 and GID 50. >>> Creating user 'games' (games) with UID 12 and GID 100. >>> Creating user 'halt' (halt) with UID 7 and GID 0. >>> Creating user 'lp' (lp) with UID 4 and GID 7. >>> Creating user 'mail' (mail) with UID 8 and GID 12. >>> Creating user 'nobody' (Kernel Overflow User) with UID 65534 and GID 65534. >>> Creating user 'operator' (operator) with UID 11 and GID 0. >>> Creating user 'root' (Super User) with UID 0 and GID 0. >>> Creating user 'shutdown' (shutdown) with UID 6 and GID 0. >>> Creating user 'sync' (sync) with UID 5 and GID 0. >>> [ 12/184] Installing setup-0:2.15.0-28. 100% | 37.5 MiB/s | 730.6 KiB | 00m00s >>> [RPM] /etc/hosts created as /etc/hosts.rpmnew [ 13/184] Installing filesystem-0:3.18- 100% | 1.8 MiB/s | 212.8 KiB | 00m00s [ 14/184] Installing pkgconf-m4-0:2.3.0 100% | 14.5 MiB/s | 14.8 KiB | 00m00s [ 15/184] Installing pcre2-syntax-0:10. 100% | 138.8 MiB/s | 284.3 KiB | 00m00s [ 16/184] Installing gnulib-l10n-0:2024 100% | 129.3 MiB/s | 661.9 KiB | 00m00s [ 17/184] Installing coreutils-common-0 100% | 295.5 MiB/s | 11.2 MiB | 00m00s [ 18/184] Installing ncurses-base-0:6.6 100% | 43.4 MiB/s | 355.3 KiB | 00m00s [ 19/184] Installing bash-0:5.3.9-3.fc4 100% | 205.7 MiB/s | 8.4 MiB | 00m00s [ 20/184] Installing glibc-common-0:2.4 100% | 57.6 MiB/s | 1.3 MiB | 00m00s [ 21/184] Installing glibc-gconv-extra- 100% | 358.2 MiB/s | 18.6 MiB | 00m00s [ 22/184] Installing glibc-0:2.43-1.fc4 100% | 145.1 MiB/s | 6.4 MiB | 00m00s [ 23/184] Installing ncurses-libs-0:6.6 100% | 207.6 MiB/s | 1.2 MiB | 00m00s [ 24/184] Installing glibc-minimal-lang 100% | 0.0 B/s | 124.0 B | 00m00s [ 25/184] Installing zlib-ng-compat-0:2 100% | 131.0 MiB/s | 134.2 KiB | 00m00s [ 26/184] Installing bzip2-libs-0:1.0.8 100% | 71.9 MiB/s | 73.6 KiB | 00m00s [ 27/184] Installing libgpg-error-0:1.5 100% | 46.3 MiB/s | 995.5 KiB | 00m00s [ 28/184] Installing libstdc++-0:16.0.1 100% | 315.9 MiB/s | 2.8 MiB | 00m00s [ 29/184] Installing libassuan-0:2.5.7- 100% | 212.6 MiB/s | 217.7 KiB | 00m00s [ 30/184] Installing libgcrypt-0:1.11.2 100% | 239.1 MiB/s | 1.2 MiB | 00m00s [ 31/184] Installing readline-0:8.3-4.f 100% | 184.1 MiB/s | 565.6 KiB | 00m00s [ 32/184] Installing gmp-1:6.3.0-5.fc44 100% | 214.9 MiB/s | 660.1 KiB | 00m00s [ 33/184] Installing libuuid-0:2.41.3-1 100% | 68.6 MiB/s | 70.3 KiB | 00m00s [ 34/184] Installing xz-libs-1:5.8.2-2. 100% | 260.2 MiB/s | 266.5 KiB | 00m00s [ 35/184] Installing popt-0:1.19-10.fc4 100% | 49.2 MiB/s | 151.3 KiB | 00m00s [ 36/184] Installing libzstd-0:1.5.7-5. 100% | 280.4 MiB/s | 861.5 KiB | 00m00s [ 37/184] Installing elfutils-libelf-0: 100% | 286.1 MiB/s | 1.1 MiB | 00m00s [ 38/184] Installing npth-0:1.8-4.fc44. 100% | 92.2 MiB/s | 94.4 KiB | 00m00s [ 39/184] Installing libblkid-0:2.41.3- 100% | 142.3 MiB/s | 291.4 KiB | 00m00s [ 40/184] Installing systemd-libs-0:259 100% | 307.7 MiB/s | 2.5 MiB | 00m00s [ 41/184] Installing libxcrypt-0:4.5.2- 100% | 134.7 MiB/s | 275.9 KiB | 00m00s [ 42/184] Installing libsepol-0:3.10-1. 100% | 264.0 MiB/s | 810.9 KiB | 00m00s [ 43/184] Installing sqlite-libs-0:3.51 100% | 261.2 MiB/s | 1.6 MiB | 00m00s [ 44/184] Installing gnupg2-gpgconf-0:2 100% | 18.6 MiB/s | 323.7 KiB | 00m00s [ 45/184] Installing libattr-0:2.5.2-8. 100% | 67.6 MiB/s | 69.3 KiB | 00m00s [ 46/184] Installing libacl-0:2.3.2-6.f 100% | 67.0 MiB/s | 68.6 KiB | 00m00s [ 47/184] Installing pcre2-0:10.47-1.fc 100% | 233.0 MiB/s | 715.7 KiB | 00m00s [ 48/184] Installing libselinux-0:3.10- 100% | 98.7 MiB/s | 202.2 KiB | 00m00s [ 49/184] Installing grep-0:3.12-3.fc44 100% | 47.2 MiB/s | 1.0 MiB | 00m00s [ 50/184] Installing sed-0:4.9-7.fc44.a 100% | 41.0 MiB/s | 881.3 KiB | 00m00s [ 51/184] Installing findutils-1:4.10.0 100% | 76.8 MiB/s | 1.9 MiB | 00m00s [ 52/184] Installing libtasn1-0:4.20.0- 100% | 108.4 MiB/s | 222.0 KiB | 00m00s [ 53/184] Installing libunistring-0:1.1 100% | 291.0 MiB/s | 1.7 MiB | 00m00s [ 54/184] Installing libidn2-0:2.3.8-3. 100% | 55.3 MiB/s | 566.6 KiB | 00m00s [ 55/184] Installing crypto-policies-0: 100% | 17.1 MiB/s | 157.7 KiB | 00m00s [ 56/184] Installing xz-1:5.8.2-2.fc44. 100% | 57.9 MiB/s | 1.4 MiB | 00m00s [ 57/184] Installing libmount-0:2.41.3- 100% | 205.7 MiB/s | 421.2 KiB | 00m00s [ 58/184] Installing gnupg2-verify-0:2. 100% | 21.0 MiB/s | 365.7 KiB | 00m00s [ 59/184] Installing dwz-0:0.16-3.fc44. 100% | 18.6 MiB/s | 323.8 KiB | 00m00s [ 60/184] Installing mpfr-0:4.2.2-3.fc4 100% | 184.8 MiB/s | 757.1 KiB | 00m00s [ 61/184] Installing gawk-0:5.3.2-3.fc4 100% | 103.2 MiB/s | 2.6 MiB | 00m00s [ 62/184] Installing libksba-0:1.6.7-5. 100% | 130.5 MiB/s | 400.8 KiB | 00m00s [ 63/184] Installing unzip-0:6.0-69.fc4 100% | 29.2 MiB/s | 537.3 KiB | 00m00s [ 64/184] Installing file-libs-0:5.46-9 100% | 594.0 MiB/s | 11.9 MiB | 00m00s [ 65/184] Installing file-0:5.46-9.fc44 100% | 8.1 MiB/s | 141.6 KiB | 00m00s [ 66/184] Installing diffutils-0:3.12-5 100% | 70.6 MiB/s | 1.6 MiB | 00m00s [ 67/184] Installing libeconf-0:0.7.9-3 100% | 80.5 MiB/s | 82.5 KiB | 00m00s [ 68/184] Installing libcap-ng-0:0.9-7. 100% | 158.7 MiB/s | 162.5 KiB | 00m00s [ 69/184] Installing audit-libs-0:4.1.3 100% | 238.8 MiB/s | 489.1 KiB | 00m00s [ 70/184] Installing pam-libs-0:1.7.2-1 100% | 109.8 MiB/s | 225.0 KiB | 00m00s [ 71/184] Installing libcap-0:2.77-2.fc 100% | 27.8 MiB/s | 513.1 KiB | 00m00s [ 72/184] Installing libsemanage-0:3.10 100% | 176.6 MiB/s | 361.7 KiB | 00m00s [ 73/184] Installing libsmartcols-0:2.4 100% | 220.2 MiB/s | 225.5 KiB | 00m00s [ 74/184] Installing alternatives-0:1.3 100% | 5.6 MiB/s | 91.6 KiB | 00m00s [ 75/184] Installing lua-libs-0:5.4.8-5 100% | 161.7 MiB/s | 331.3 KiB | 00m00s [ 76/184] Installing libffi-0:3.5.2-2.f 100% | 153.4 MiB/s | 157.1 KiB | 00m00s [ 77/184] Installing p11-kit-0:0.25.8-2 100% | 89.7 MiB/s | 2.5 MiB | 00m00s [ 78/184] Installing p11-kit-trust-0:0. 100% | 21.6 MiB/s | 531.7 KiB | 00m00s [ 79/184] Installing json-c-0:0.18-8.fc 100% | 136.5 MiB/s | 139.7 KiB | 00m00s [ 80/184] Installing ngtcp2-0:1.19.0-2. 100% | 167.3 MiB/s | 342.5 KiB | 00m00s [ 81/184] Installing openssl-libs-1:3.5 100% | 309.2 MiB/s | 7.4 MiB | 00m00s [ 82/184] Installing coreutils-0:9.9-4. 100% | 177.2 MiB/s | 8.2 MiB | 00m00s [ 83/184] Installing ca-certificates-0: 100% | 1.5 MiB/s | 2.5 MiB | 00m02s [ 84/184] Installing gzip-0:1.14-2.fc44 100% | 21.6 MiB/s | 443.0 KiB | 00m00s [ 85/184] Installing rpm-sequoia-0:1.10 100% | 288.3 MiB/s | 2.3 MiB | 00m00s [ 86/184] Installing libfsverity-0:1.6- 100% | 67.7 MiB/s | 69.3 KiB | 00m00s [ 87/184] Installing libevent-0:2.1.12- 100% | 271.2 MiB/s | 1.1 MiB | 00m00s [ 88/184] Installing ngtcp2-crypto-ossl 100% | 66.7 MiB/s | 68.3 KiB | 00m00s [ 89/184] Installing util-linux-core-0: 100% | 88.9 MiB/s | 2.4 MiB | 00m00s [ 90/184] Installing zip-0:3.0-45.fc44. 100% | 39.4 MiB/s | 765.8 KiB | 00m00s [ 91/184] Installing gnupg2-keyboxd-0:2 100% | 38.2 MiB/s | 234.5 KiB | 00m00s [ 92/184] Installing libpsl-0:0.21.5-7. 100% | 130.3 MiB/s | 133.4 KiB | 00m00s [ 93/184] Installing tar-2:1.35-8.fc44. 100% | 107.3 MiB/s | 3.0 MiB | 00m00s [ 94/184] Installing linkdupes-0:0.7.2- 100% | 40.1 MiB/s | 780.6 KiB | 00m00s [ 95/184] Installing libselinux-utils-0 100% | 64.6 MiB/s | 1.4 MiB | 00m00s [ 96/184] Installing liblastlog2-0:2.41 100% | 22.7 MiB/s | 139.6 KiB | 00m00s [ 97/184] Installing systemd-standalone 100% | 17.9 MiB/s | 330.1 KiB | 00m00s [ 98/184] Installing rpm-libs-0:6.0.1-2 100% | 243.3 MiB/s | 996.5 KiB | 00m00s [ 99/184] Installing libusb1-0:1.0.29-5 100% | 22.0 MiB/s | 180.5 KiB | 00m00s >>> Running sysusers scriptlet: tpm2-tss-0:4.1.3-9.fc44.aarch64 >>> Finished sysusers scriptlet: tpm2-tss-0:4.1.3-9.fc44.aarch64 >>> Scriptlet output: >>> Creating group 'tss' with GID 59. >>> Creating user 'tss' (Account used for TPM access) with UID 59 and GID 59. >>> [100/184] Installing tpm2-tss-0:4.1.3-9 100% | 239.7 MiB/s | 2.2 MiB | 00m00s [101/184] Installing ima-evm-utils-libs 100% | 91.7 MiB/s | 93.9 KiB | 00m00s [102/184] Installing gnupg2-gpg-agent-0 100% | 31.9 MiB/s | 850.6 KiB | 00m00s [103/184] Installing libfdisk-0:2.41.3- 100% | 136.6 MiB/s | 419.7 KiB | 00m00s [104/184] Installing util-linux-0:2.41. 100% | 131.8 MiB/s | 6.9 MiB | 00m00s [105/184] Installing policycoreutils-0: 100% | 42.4 MiB/s | 1.5 MiB | 00m00s [106/184] Installing selinux-policy-0:4 100% | 1.5 MiB/s | 33.6 KiB | 00m00s [107/184] Installing selinux-policy-tar 100% | 119.4 MiB/s | 14.8 MiB | 00m00s [108/184] Installing zstd-0:1.5.7-5.fc4 100% | 26.3 MiB/s | 565.8 KiB | 00m00s [109/184] Installing libxml2-0:2.12.10- 100% | 82.2 MiB/s | 1.9 MiB | 00m00s [110/184] Installing nettle-0:3.10.1-3. 100% | 187.5 MiB/s | 768.2 KiB | 00m00s [111/184] Installing gnutls-0:3.8.11-10 100% | 297.6 MiB/s | 3.6 MiB | 00m00s [112/184] Installing bzip2-0:1.0.8-23.f 100% | 9.5 MiB/s | 175.6 KiB | 00m00s [113/184] Installing add-determinism-0: 100% | 86.1 MiB/s | 2.0 MiB | 00m00s [114/184] Installing build-reproducibil 100% | 1.5 MiB/s | 1.5 KiB | 00m00s [115/184] Installing cpio-0:2.15-9.fc44 100% | 49.8 MiB/s | 1.1 MiB | 00m00s [116/184] Installing ed-0:1.22.4-2.fc44 100% | 9.2 MiB/s | 159.4 KiB | 00m00s [117/184] Installing patch-0:2.8-4.fc44 100% | 15.2 MiB/s | 263.9 KiB | 00m00s [118/184] Installing jansson-0:2.14-4.f 100% | 92.2 MiB/s | 94.4 KiB | 00m00s [119/184] Installing lz4-libs-0:1.10.0- 100% | 193.7 MiB/s | 198.4 KiB | 00m00s [120/184] Installing libarchive-0:3.8.4 100% | 238.5 MiB/s | 977.0 KiB | 00m00s [121/184] Installing libgomp-0:16.0.1-0 100% | 289.4 MiB/s | 592.6 KiB | 00m00s [122/184] Installing libpkgconf-0:2.3.0 100% | 131.8 MiB/s | 135.0 KiB | 00m00s [123/184] Installing pkgconf-0:2.3.0-4. 100% | 6.6 MiB/s | 114.8 KiB | 00m00s [124/184] Installing pkgconf-pkg-config 100% | 104.3 KiB/s | 1.8 KiB | 00m00s [125/184] Installing libtool-ltdl-0:2.5 100% | 92.8 MiB/s | 95.0 KiB | 00m00s [126/184] Installing gdbm-libs-1:1.23-1 100% | 114.9 MiB/s | 235.4 KiB | 00m00s [127/184] Installing cyrus-sasl-lib-0:2 100% | 96.6 MiB/s | 2.4 MiB | 00m00s [128/184] Installing openldap-0:2.6.10- 100% | 186.9 MiB/s | 765.4 KiB | 00m00s [129/184] Installing gnupg2-dirmngr-0:2 100% | 25.3 MiB/s | 648.7 KiB | 00m00s [130/184] Installing gnupg2-0:2.4.9-5.f 100% | 169.9 MiB/s | 6.5 MiB | 00m00s [131/184] Installing rpm-sign-libs-0:6. 100% | 66.8 MiB/s | 68.5 KiB | 00m00s [132/184] Installing gpgverify-0:2.2-4. 100% | 9.2 MiB/s | 9.4 KiB | 00m00s [133/184] Installing xxhash-libs-0:0.8. 100% | 85.1 MiB/s | 87.2 KiB | 00m00s [134/184] Installing libbrotli-0:1.2.0- 100% | 222.5 MiB/s | 911.3 KiB | 00m00s [135/184] Installing libnghttp2-0:1.68. 100% | 194.3 MiB/s | 199.0 KiB | 00m00s [136/184] Installing libnghttp3-0:1.15. 100% | 203.1 MiB/s | 208.0 KiB | 00m00s [137/184] Installing keyutils-libs-0:1. 100% | 97.3 MiB/s | 99.6 KiB | 00m00s [138/184] Installing libcom_err-0:1.47. 100% | 109.5 MiB/s | 112.1 KiB | 00m00s [139/184] Installing libverto-0:0.3.2-1 100% | 69.4 MiB/s | 71.1 KiB | 00m00s [140/184] Installing krb5-libs-0:1.21.3 100% | 230.1 MiB/s | 2.5 MiB | 00m00s [141/184] Installing libssh-0:0.11.3-3. 100% | 191.7 MiB/s | 589.0 KiB | 00m00s [142/184] Installing libcurl-0:8.18.0-3 100% | 239.7 MiB/s | 982.0 KiB | 00m00s [143/184] Installing curl-0:8.18.0-3.fc 100% | 16.9 MiB/s | 466.7 KiB | 00m00s [144/184] Installing rpm-0:6.0.1-2.fc44 100% | 62.1 MiB/s | 2.8 MiB | 00m00s [145/184] Installing cmake-srpm-macros- 100% | 785.2 KiB/s | 804.0 B | 00m00s [146/184] Installing efi-srpm-macros-0: 100% | 40.2 MiB/s | 41.2 KiB | 00m00s [147/184] Installing java-srpm-macros-0 100% | 0.0 B/s | 1.1 KiB | 00m00s [148/184] Installing lua-srpm-macros-0: 100% | 0.0 B/s | 1.9 KiB | 00m00s [149/184] Installing tree-sitter-srpm-m 100% | 9.1 MiB/s | 9.3 KiB | 00m00s [150/184] Installing zig-srpm-macros-0: 100% | 0.0 B/s | 1.9 KiB | 00m00s [151/184] Installing filesystem-srpm-ma 100% | 38.0 MiB/s | 38.9 KiB | 00m00s [152/184] Installing elfutils-default-y 100% | 408.6 KiB/s | 2.0 KiB | 00m00s [153/184] Installing elfutils-libs-0:0. 100% | 182.7 MiB/s | 748.2 KiB | 00m00s [154/184] Installing elfutils-debuginfo 100% | 7.5 MiB/s | 146.0 KiB | 00m00s [155/184] Installing binutils-0:2.45.50 100% | 284.3 MiB/s | 30.7 MiB | 00m00s [156/184] Installing elfutils-0:0.194-3 100% | 120.9 MiB/s | 3.3 MiB | 00m00s [157/184] Installing gdb-minimal-0:17.1 100% | 239.7 MiB/s | 13.7 MiB | 00m00s [158/184] Installing debugedit-0:5.2-6. 100% | 16.5 MiB/s | 321.6 KiB | 00m00s [159/184] Installing rpm-build-libs-0:6 100% | 129.3 MiB/s | 264.8 KiB | 00m00s [160/184] Installing rust-srpm-macros-0 100% | 6.2 MiB/s | 6.4 KiB | 00m00s [161/184] Installing qt6-srpm-macros-0: 100% | 0.0 B/s | 740.0 B | 00m00s [162/184] Installing qt5-srpm-macros-0: 100% | 0.0 B/s | 776.0 B | 00m00s [163/184] Installing perl-srpm-macros-0 100% | 0.0 B/s | 1.1 KiB | 00m00s [164/184] Installing package-notes-srpm 100% | 0.0 B/s | 2.0 KiB | 00m00s [165/184] Installing openblas-srpm-macr 100% | 0.0 B/s | 392.0 B | 00m00s [166/184] Installing ocaml-srpm-macros- 100% | 0.0 B/s | 2.1 KiB | 00m00s [167/184] Installing kernel-srpm-macros 100% | 0.0 B/s | 2.3 KiB | 00m00s [168/184] Installing gnat-srpm-macros-0 100% | 0.0 B/s | 1.3 KiB | 00m00s [169/184] Installing ghc-srpm-macros-0: 100% | 0.0 B/s | 1.0 KiB | 00m00s [170/184] Installing gap-srpm-macros-0: 100% | 0.0 B/s | 2.7 KiB | 00m00s [171/184] Installing fpc-srpm-macros-0: 100% | 0.0 B/s | 420.0 B | 00m00s [172/184] Installing ansible-srpm-macro 100% | 35.4 MiB/s | 36.2 KiB | 00m00s [173/184] Installing redhat-rpm-config- 100% | 61.8 MiB/s | 189.9 KiB | 00m00s [174/184] Installing forge-srpm-macros- 100% | 39.3 MiB/s | 40.3 KiB | 00m00s [175/184] Installing fonts-srpm-macros- 100% | 55.7 MiB/s | 57.0 KiB | 00m00s [176/184] Installing go-srpm-macros-0:3 100% | 61.6 MiB/s | 63.0 KiB | 00m00s [177/184] Installing rpm-build-0:6.0.1- 100% | 28.2 MiB/s | 607.4 KiB | 00m00s [178/184] Installing pyproject-srpm-mac 100% | 2.4 MiB/s | 2.5 KiB | 00m00s [179/184] Installing R-srpm-macros-0:1. 100% | 4.1 MiB/s | 4.2 KiB | 00m00s [180/184] Installing python-srpm-macros 100% | 8.6 MiB/s | 52.9 KiB | 00m00s [181/184] Installing rpm-plugin-selinux 100% | 67.3 MiB/s | 68.9 KiB | 00m00s [182/184] Installing which-0:2.23-4.fc4 100% | 6.5 MiB/s | 125.5 KiB | 00m00s [183/184] Installing shadow-utils-2:4.1 100% | 99.8 MiB/s | 4.5 MiB | 00m00s [184/184] Installing info-0:7.2-7.fc44. 100% | 51.1 KiB/s | 422.0 KiB | 00m08s Complete! Finish: installing minimal buildroot with dnf5 Start: creating root cache Finish: creating root cache Finish: chroot init INFO: Installed packages: INFO: R-srpm-macros-1.3.4-3.fc44.noarch add-determinism-0.7.2-3.fc44.aarch64 alternatives-1.33-5.fc44.aarch64 ansible-srpm-macros-1-20.1.fc44.noarch audit-libs-4.1.3-1.fc44.aarch64 bash-5.3.9-3.fc44.aarch64 binutils-2.45.50-19.fc44.aarch64 build-reproducibility-srpm-macros-0.7.2-3.fc44.noarch bzip2-1.0.8-23.fc44.aarch64 bzip2-libs-1.0.8-23.fc44.aarch64 ca-certificates-2025.2.80_v9.0.304-5.fc44.noarch cmake-srpm-macros-3.31.10-5.fc44.noarch coreutils-9.9-4.fc44.aarch64 coreutils-common-9.9-4.fc44.aarch64 cpio-2.15-9.fc44.aarch64 crypto-policies-20251128-3.git19878fe.fc44.noarch curl-8.18.0-3.fc44.aarch64 cyrus-sasl-lib-2.1.28-35.fc44.aarch64 debugedit-5.2-6.fc44.aarch64 diffutils-3.12-5.fc44.aarch64 dwz-0.16-3.fc44.aarch64 ed-1.22.4-2.fc44.aarch64 efi-srpm-macros-6-6.fc44.noarch elfutils-0.194-3.fc44.aarch64 elfutils-debuginfod-client-0.194-3.fc44.aarch64 elfutils-default-yama-scope-0.194-3.fc44.noarch elfutils-libelf-0.194-3.fc44.aarch64 elfutils-libs-0.194-3.fc44.aarch64 fedora-gpg-keys-44-0.1.noarch fedora-release-44-0.10.noarch fedora-release-common-44-0.10.noarch fedora-release-identity-basic-44-0.10.noarch fedora-repos-44-0.1.noarch fedora-repos-rawhide-44-0.1.noarch file-5.46-9.fc44.aarch64 file-libs-5.46-9.fc44.aarch64 filesystem-3.18-52.fc44.aarch64 filesystem-srpm-macros-3.18-52.fc44.noarch findutils-4.10.0-7.fc44.aarch64 fonts-srpm-macros-5.0.0-2.fc44.noarch forge-srpm-macros-0.4.0-4.fc44.noarch fpc-srpm-macros-1.3-16.fc44.noarch gap-srpm-macros-2-2.fc44.noarch gawk-5.3.2-3.fc44.aarch64 gdb-minimal-17.1-2.fc44.aarch64 gdbm-libs-1.23-11.fc44.aarch64 ghc-srpm-macros-1.10-1.fc44.noarch glibc-2.43-1.fc44.aarch64 glibc-common-2.43-1.fc44.aarch64 glibc-gconv-extra-2.43-1.fc44.aarch64 glibc-minimal-langpack-2.43-1.fc44.aarch64 gmp-6.3.0-5.fc44.aarch64 gnat-srpm-macros-7-2.fc44.noarch gnulib-l10n-20241231-2.fc44.noarch gnupg2-2.4.9-5.fc44.aarch64 gnupg2-dirmngr-2.4.9-5.fc44.aarch64 gnupg2-gpg-agent-2.4.9-5.fc44.aarch64 gnupg2-gpgconf-2.4.9-5.fc44.aarch64 gnupg2-keyboxd-2.4.9-5.fc44.aarch64 gnupg2-verify-2.4.9-5.fc44.aarch64 gnutls-3.8.11-10.fc44.aarch64 go-srpm-macros-3.8.0-2.fc44.noarch gpg-pubkey-36f612dcf27f7d1a48a835e4dbfcf71c6d9f90a6-6786af3b gpg-pubkey-4f50a6114cd5c6976a7f1179655a4b02f577861e-6888bc98 gpg-pubkey-c6e7f081cf80e13146676e88829b606631645531-66b6dccf gpgverify-2.2-4.fc44.noarch grep-3.12-3.fc44.aarch64 gzip-1.14-2.fc44.aarch64 ima-evm-utils-libs-1.6.2-8.fc44.aarch64 info-7.2-7.fc44.aarch64 jansson-2.14-4.fc44.aarch64 java-srpm-macros-1-8.fc44.noarch json-c-0.18-8.fc44.aarch64 kernel-srpm-macros-1.0-28.fc44.noarch keyutils-libs-1.6.3-7.fc44.aarch64 krb5-libs-1.21.3-12.fc44.aarch64 libacl-2.3.2-6.fc44.aarch64 libarchive-3.8.4-2.fc44.aarch64 libassuan-2.5.7-5.fc44.aarch64 libattr-2.5.2-8.fc44.aarch64 libblkid-2.41.3-12.fc44.aarch64 libbrotli-1.2.0-3.fc44.aarch64 libcap-2.77-2.fc44.aarch64 libcap-ng-0.9-7.fc44.aarch64 libcom_err-1.47.3-4.fc44.aarch64 libcurl-8.18.0-3.fc44.aarch64 libeconf-0.7.9-3.fc44.aarch64 libevent-2.1.12-17.fc44.aarch64 libfdisk-2.41.3-12.fc44.aarch64 libffi-3.5.2-2.fc44.aarch64 libfsverity-1.6-4.fc44.aarch64 libgcc-16.0.1-0.5.fc44.aarch64 libgcrypt-1.11.2-1.fc44.aarch64 libgomp-16.0.1-0.5.fc44.aarch64 libgpg-error-1.58-2.fc44.aarch64 libidn2-2.3.8-3.fc44.aarch64 libksba-1.6.7-5.fc44.aarch64 liblastlog2-2.41.3-12.fc44.aarch64 libmount-2.41.3-12.fc44.aarch64 libnghttp2-1.68.0-3.fc44.aarch64 libnghttp3-1.15.0-1.fc44.aarch64 libpkgconf-2.3.0-4.fc44.aarch64 libpsl-0.21.5-7.fc44.aarch64 libselinux-3.10-1.fc44.aarch64 libselinux-utils-3.10-1.fc44.aarch64 libsemanage-3.10-1.fc44.aarch64 libsepol-3.10-1.fc44.aarch64 libsmartcols-2.41.3-12.fc44.aarch64 libssh-0.11.3-3.fc44.aarch64 libssh-config-0.11.3-3.fc44.noarch libstdc++-16.0.1-0.5.fc44.aarch64 libtasn1-4.20.0-3.fc44.aarch64 libtool-ltdl-2.5.4-10.fc44.aarch64 libunistring-1.1-11.fc44.aarch64 libusb1-1.0.29-5.fc44.aarch64 libuuid-2.41.3-12.fc44.aarch64 libverto-0.3.2-12.fc44.aarch64 libxcrypt-4.5.2-3.fc44.aarch64 libxml2-2.12.10-6.fc44.aarch64 libzstd-1.5.7-5.fc44.aarch64 linkdupes-0.7.2-3.fc44.aarch64 lua-libs-5.4.8-5.fc44.aarch64 lua-srpm-macros-1-17.fc44.noarch lz4-libs-1.10.0-4.fc44.aarch64 mpfr-4.2.2-3.fc44.aarch64 ncurses-base-6.6-1.fc44.noarch ncurses-libs-6.6-1.fc44.aarch64 nettle-3.10.1-3.fc44.aarch64 ngtcp2-1.19.0-2.fc44.aarch64 ngtcp2-crypto-ossl-1.19.0-2.fc44.aarch64 npth-1.8-4.fc44.aarch64 ocaml-srpm-macros-11-3.fc44.noarch openblas-srpm-macros-2-21.fc44.noarch openldap-2.6.10-7.fc44.aarch64 openssl-libs-3.5.5-1.fc44.aarch64 p11-kit-0.25.8-2.fc44.aarch64 p11-kit-trust-0.25.8-2.fc44.aarch64 package-notes-srpm-macros-0.5-15.fc44.noarch pam-libs-1.7.2-1.fc44.aarch64 patch-2.8-4.fc44.aarch64 pcre2-10.47-1.fc44.1.aarch64 pcre2-syntax-10.47-1.fc44.1.noarch perl-srpm-macros-1-61.fc44.noarch pkgconf-2.3.0-4.fc44.aarch64 pkgconf-m4-2.3.0-4.fc44.noarch pkgconf-pkg-config-2.3.0-4.fc44.aarch64 policycoreutils-3.10-1.fc44.aarch64 popt-1.19-10.fc44.aarch64 publicsuffix-list-dafsa-20260116-1.fc44.noarch pyproject-srpm-macros-1.18.6-2.fc44.noarch python-srpm-macros-3.14-10.fc44.noarch qt5-srpm-macros-5.15.18-2.fc44.noarch qt6-srpm-macros-6.10.1-2.fc44.noarch readline-8.3-4.fc44.aarch64 redhat-rpm-config-343-19.fc44.noarch rpm-6.0.1-2.fc44.aarch64 rpm-build-6.0.1-2.fc44.aarch64 rpm-build-libs-6.0.1-2.fc44.aarch64 rpm-libs-6.0.1-2.fc44.aarch64 rpm-plugin-selinux-6.0.1-2.fc44.aarch64 rpm-sequoia-1.10.0-2.fc44.aarch64 rpm-sign-libs-6.0.1-2.fc44.aarch64 rust-srpm-macros-28.4-3.fc44.noarch sed-4.9-7.fc44.aarch64 selinux-policy-42.22-1.fc44.noarch selinux-policy-targeted-42.22-1.fc44.noarch setup-2.15.0-28.fc44.noarch shadow-utils-4.19.0-6.fc44.aarch64 sqlite-libs-3.51.2-1.fc44.aarch64 systemd-libs-259-19.fc44.aarch64 systemd-standalone-sysusers-259-19.fc44.aarch64 tar-1.35-8.fc44.aarch64 tpm2-tss-4.1.3-9.fc44.aarch64 tree-sitter-srpm-macros-0.4.2-2.fc44.noarch unzip-6.0-69.fc44.aarch64 util-linux-2.41.3-12.fc44.aarch64 util-linux-core-2.41.3-12.fc44.aarch64 which-2.23-4.fc44.aarch64 xxhash-libs-0.8.3-4.fc44.aarch64 xz-5.8.2-2.fc44.aarch64 xz-libs-5.8.2-2.fc44.aarch64 zig-srpm-macros-1-8.fc44.noarch zip-3.0-45.fc44.aarch64 zlib-ng-compat-2.3.2-3.fc44.aarch64 zstd-1.5.7-5.fc44.aarch64 Start: buildsrpm Start: rpmbuild -bs Building target platforms: aarch64 Building for target aarch64 setting SOURCE_DATE_EPOCH=1768608000 Wrote: /builddir/build/SRPMS/python-xarray-2025.12.0-2.fc44.src.rpm Finish: rpmbuild -bs INFO: chroot_scan: 1 files copied to /var/lib/copr-rpmbuild/results/chroot_scan INFO: /var/lib/mock/fedora-rawhide-aarch64-1770293716.605228/root/var/log/dnf5.log INFO: chroot_scan: creating tarball /var/lib/copr-rpmbuild/results/chroot_scan.tar.gz /bin/tar: Removing leading `/' from member names Finish: buildsrpm INFO: Done(/var/lib/copr-rpmbuild/workspace/workdir-n0idg1de/python-xarray/python-xarray.spec) Config(child) 0 minutes 27 seconds INFO: Results and/or logs in: /var/lib/copr-rpmbuild/results INFO: Cleaning up build root ('cleanup_on_success=True') Start: clean chroot INFO: unmounting tmpfs. Finish: clean chroot INFO: Start(/var/lib/copr-rpmbuild/results/python-xarray-2025.12.0-2.fc44.src.rpm) Config(fedora-rawhide-aarch64) Start(bootstrap): chroot init INFO: mounting tmpfs at /var/lib/mock/fedora-rawhide-aarch64-bootstrap-1770293716.605228/root. INFO: reusing tmpfs at /var/lib/mock/fedora-rawhide-aarch64-bootstrap-1770293716.605228/root. INFO: calling preinit hooks INFO: enabled root cache INFO: enabled package manager cache Start(bootstrap): cleaning package manager metadata Finish(bootstrap): cleaning package manager metadata Finish(bootstrap): chroot init Start: chroot init INFO: mounting tmpfs at /var/lib/mock/fedora-rawhide-aarch64-1770293716.605228/root. INFO: calling preinit hooks INFO: enabled root cache Start: unpacking root cache Finish: unpacking root cache INFO: enabled package manager cache Start: cleaning package manager metadata Finish: cleaning package manager metadata INFO: enabled HW Info plugin INFO: Buildroot is handled by package management downloaded with a bootstrap image: rpm-6.0.1-2.fc44.aarch64 rpm-sequoia-1.10.0-2.fc44.aarch64 dnf5-5.3.0.0-7.fc44.aarch64 dnf5-plugins-5.3.0.0-7.fc44.aarch64 Finish: chroot init Start: build phase for python-xarray-2025.12.0-2.fc44.src.rpm Start: build setup for python-xarray-2025.12.0-2.fc44.src.rpm Building target platforms: aarch64 Building for target aarch64 setting SOURCE_DATE_EPOCH=1768608000 Wrote: /builddir/build/SRPMS/python-xarray-2025.12.0-2.fc44.src.rpm Updating and loading repositories: Copr repository 100% | 95.3 KiB/s | 1.5 KiB | 00m00s fedora 100% | 166.8 KiB/s | 11.7 KiB | 00m00s Repositories loaded. Package Arch Version Repository Size Installing: python3-Bottleneck aarch64 0:1.6.0-2.fc44 fedora 709.1 KiB python3-dask+array noarch 0:2025.12.0-3.fc44 copr_base 0.0 B python3-dask+dataframe noarch 0:2025.12.0-3.fc44 copr_base 0.0 B python3-devel aarch64 0:3.14.2-3.fc44 fedora 1.9 MiB python3-pint noarch 0:0.25.2-2.fc44 fedora 3.4 MiB python3-pytest noarch 0:8.4.2-2.fc44 fedora 22.5 MiB python3-pytest-asyncio noarch 0:1.1.0-3.fc44 fedora 131.1 KiB python3-pytest-timeout noarch 0:2.4.0-6.fc44 fedora 82.1 KiB python3-pytest-xdist noarch 0:3.7.0-6.fc44 fedora 468.8 KiB python3-rasterio aarch64 0:1.5.0-3.fc44 fedora 5.5 MiB python3-seaborn noarch 0:0.13.2-15.fc44 fedora 2.3 MiB Installing dependencies: abattis-cantarell-vf-fonts noarch 0:0.301-17.fc44 fedora 192.7 KiB abseil-cpp aarch64 0:20260107.0-1.fc44 fedora 6.5 MiB armadillo aarch64 0:12.8.1-9.fc44 fedora 145.9 KiB arpack aarch64 0:3.9.1-9.fc44 fedora 553.6 KiB blosc aarch64 0:1.21.6-10.fc44 fedora 129.8 KiB boost-container aarch64 0:1.90.0-6.fc44 fedora 69.3 KiB boost-program-options aarch64 0:1.90.0-6.fc44 fedora 267.1 KiB c-ares aarch64 0:1.34.6-3.fc44 fedora 273.5 KiB cairo aarch64 0:1.18.4-6.fc44 fedora 1.8 MiB cfitsio aarch64 0:4.6.3-2.fc44 fedora 1.7 MiB default-fonts-core-sans noarch 0:4.2-6.fc44 fedora 11.9 KiB dejavu-sans-fonts noarch 0:2.37-29.fc44 fedora 5.5 MiB expat aarch64 0:2.7.3-2.fc44 fedora 360.7 KiB flexiblas aarch64 0:3.5.0-2.fc44 fedora 38.0 KiB flexiblas-netlib aarch64 0:3.5.0-2.fc44 fedora 14.2 MiB flexiblas-netlib64 aarch64 0:3.5.0-2.fc44 fedora 14.0 MiB flexiblas-openblas-openmp aarch64 0:3.5.0-2.fc44 fedora 67.2 KiB flexiblas-openblas-openmp64 aarch64 0:3.5.0-2.fc44 fedora 67.2 KiB fontconfig aarch64 0:2.17.0-4.fc44 fedora 1.2 MiB fonts-filesystem noarch 1:5.0.0-2.fc44 fedora 0.0 B freetype aarch64 0:2.14.1-2.fc44 fedora 878.5 KiB freexl aarch64 0:2.0.0-20.fc44 fedora 93.3 KiB fribidi aarch64 0:1.0.16-4.fc44 fedora 246.0 KiB gdal-libs aarch64 0:3.12.1-8.fc44 fedora 30.1 MiB geos aarch64 0:3.14.1-2.fc44 fedora 4.0 MiB giflib aarch64 0:5.2.2-9.fc44 fedora 132.0 KiB glib2 aarch64 0:2.87.0-4.fc44 fedora 15.6 MiB google-noto-fonts-common noarch 0:20251201-2.fc44 fedora 17.7 KiB google-noto-sans-vf-fonts noarch 0:20251201-2.fc44 fedora 1.4 MiB gpgme aarch64 0:2.0.1-3.fc44 fedora 761.3 KiB gpgmepp aarch64 0:2.0.1-3.fc44 fedora 458.5 KiB graphite2 aarch64 0:1.3.14-20.fc44 fedora 239.3 KiB grpc aarch64 0:1.48.4-57.fc44 fedora 9.9 MiB grpc-cpp aarch64 0:1.48.4-57.fc44 fedora 3.2 MiB grpc-data noarch 0:1.48.4-57.fc44 fedora 29.6 KiB harfbuzz aarch64 0:12.3.2-1.fc44 fedora 2.5 MiB hdf-libs aarch64 0:4.3.0-5.fc44 fedora 722.6 KiB hdf5 aarch64 0:1.14.6-7.fc44 fedora 7.0 MiB imath aarch64 0:3.1.12-6.fc44 fedora 387.6 KiB jbigkit-libs aarch64 0:2.1-33.fc44 fedora 181.2 KiB lcms2 aarch64 0:2.16-7.fc44 fedora 484.7 KiB libX11 aarch64 0:1.8.12-3.fc44 fedora 1.3 MiB libX11-common noarch 0:1.8.12-3.fc44 fedora 1.1 MiB libXau aarch64 0:1.0.12-4.fc44 fedora 120.8 KiB libXext aarch64 0:1.3.6-5.fc44 fedora 145.7 KiB libXrender aarch64 0:0.9.12-4.fc44 fedora 69.9 KiB libaec aarch64 0:1.1.5-1.fc44 fedora 154.3 KiB libarrow aarch64 0:23.0.0-2.fc44 fedora 11.4 MiB libarrow-acero-libs aarch64 0:23.0.0-2.fc44 fedora 1.3 MiB libarrow-compute-libs aarch64 0:23.0.0-2.fc44 fedora 11.0 MiB libarrow-dataset-libs aarch64 0:23.0.0-2.fc44 fedora 1.4 MiB libarrow-doc noarch 0:23.0.0-2.fc44 fedora 119.1 KiB libarrow-flight-libs aarch64 0:23.0.0-2.fc44 fedora 1.4 MiB libarrow-glib-libs aarch64 0:23.0.0-2.fc44 fedora 1.7 MiB libdeflate aarch64 0:1.25-3.fc44 fedora 163.0 KiB libgeotiff aarch64 0:1.7.4-5.fc44 fedora 517.6 KiB libgfortran aarch64 0:16.0.1-0.5.fc44 fedora 1.7 MiB libgta aarch64 0:1.2.1-17.fc44 fedora 94.0 KiB libicu aarch64 0:77.1-2.fc44 fedora 36.5 MiB libimagequant aarch64 0:4.1.0-2.fc44 fedora 672.1 KiB libjpeg-turbo aarch64 0:3.1.2-2.fc44 fedora 740.3 KiB libkml aarch64 0:1.3.0-56.fc44 fedora 1.2 MiB liblerc aarch64 0:4.0.0-10.fc44 fedora 546.3 KiB liborc2 aarch64 0:2.2.2-2.fc44 fedora 1.9 MiB libpng aarch64 2:1.6.53-2.fc44 fedora 269.7 KiB libpq aarch64 0:18.0-4.fc44 fedora 1.0 MiB libqhull_r aarch64 1:8.0.2-8.fc44 fedora 455.3 KiB libraqm aarch64 0:0.10.1-4.fc44 fedora 68.5 KiB librttopo aarch64 0:1.1.0-19.fc44 fedora 544.5 KiB libspatialite aarch64 0:5.1.0-12.fc44 fedora 15.0 MiB libtiff aarch64 0:4.7.1-2.fc44 fedora 659.0 KiB libtirpc aarch64 0:1.3.7-2.fc44 fedora 211.9 KiB libwebp aarch64 0:1.6.0-3.fc44 fedora 816.8 KiB libxcb aarch64 0:1.17.0-7.fc44 fedora 2.1 MiB libyaml aarch64 0:0.2.5-18.fc44 fedora 134.3 KiB libzip aarch64 0:1.11.4-3.fc44 fedora 135.6 KiB lzo aarch64 0:2.10-16.fc44 fedora 162.8 KiB mariadb-connector-c aarch64 0:3.4.8-3.fc44 fedora 995.0 KiB mariadb-connector-c-config noarch 0:3.4.8-3.fc44 fedora 497.0 B minizip-ng-compat aarch64 0:4.1.0-1.fc44 fedora 198.4 KiB mpdecimal aarch64 0:4.0.1-3.fc44 fedora 281.1 KiB muParser aarch64 0:2.3.5-5.fc44 fedora 552.6 KiB netcdf aarch64 0:4.9.3-2.fc44 fedora 3.1 MiB nspr aarch64 0:4.38.2-4.fc44 fedora 419.2 KiB nss aarch64 0:3.120.0-1.fc44 fedora 2.0 MiB nss-softokn aarch64 0:3.120.0-1.fc44 fedora 2.2 MiB nss-softokn-freebl aarch64 0:3.120.0-1.fc44 fedora 870.0 KiB nss-sysinit aarch64 0:3.120.0-1.fc44 fedora 70.0 KiB nss-util aarch64 0:3.120.0-1.fc44 fedora 216.8 KiB openblas aarch64 0:0.3.29-2.fc43 fedora 111.7 KiB openblas-openmp aarch64 0:0.3.29-2.fc43 fedora 20.4 MiB openblas-openmp64 aarch64 0:0.3.29-2.fc43 fedora 20.2 MiB openexr-libs aarch64 0:3.2.4-7.fc44 fedora 6.6 MiB openjpeg aarch64 0:2.5.4-3.fc44 fedora 412.2 KiB parquet-libs aarch64 0:23.0.0-2.fc44 fedora 3.5 MiB pixman aarch64 0:0.46.2-3.fc44 fedora 654.3 KiB poppler aarch64 0:26.01.0-2.fc44 fedora 3.6 MiB poppler-data noarch 0:0.4.11-11.fc44 fedora 12.3 MiB proj aarch64 0:9.7.1-3.fc44 fedora 4.3 MiB proj-data noarch 0:9.7.1-3.fc44 fedora 9.5 MiB protobuf aarch64 0:3.19.6-20.fc44 fedora 3.1 MiB protobuf-compiler aarch64 0:3.19.6-20.fc44 fedora 2.3 MiB pyproject-rpm-macros noarch 0:1.18.6-2.fc44 fedora 115.6 KiB python-pip-wheel noarch 0:25.3-2.fc44 fedora 1.2 MiB python-rpm-macros noarch 0:3.14-10.fc44 fedora 27.6 KiB python3 aarch64 0:3.14.2-3.fc44 fedora 84.7 KiB python3-affine noarch 0:2.4.0-14.fc44 fedora 171.0 KiB python3-attrs noarch 0:25.4.0-2.fc44 fedora 436.8 KiB python3-babel noarch 0:2.17.0-8.fc44 fedora 30.3 MiB python3-cairo aarch64 0:1.28.0-5.fc44 fedora 516.6 KiB python3-certifi noarch 0:2025.07.09-4.fc44 fedora 7.4 KiB python3-charset-normalizer noarch 0:3.4.4-2.fc44 fedora 356.2 KiB python3-click noarch 1:8.1.7-12.fc44 fedora 1.2 MiB python3-cligj noarch 0:0.7.2-21.fc44 fedora 34.5 KiB python3-cloudpickle noarch 0:3.1.2-2.fc44 fedora 129.7 KiB python3-contourpy aarch64 0:1.3.3-3.fc44 fedora 862.5 KiB python3-cycler noarch 0:0.11.0-20.fc44 fedora 37.8 KiB python3-dask noarch 0:2025.12.0-3.fc44 copr_base 20.6 MiB python3-dateutil noarch 1:2.9.0.post0-7.fc44 fedora 878.0 KiB python3-docutils noarch 0:0.22.4-2.fc44 fedora 5.5 MiB python3-execnet noarch 0:2.1.2-2.fc44 fedora 970.6 KiB python3-flexcache noarch 0:0.3-11.fc44 fedora 57.0 KiB python3-flexparser noarch 0:0.4-7.fc44 fedora 263.5 KiB python3-fonttools aarch64 0:4.61.1-2.fc44 fedora 19.4 MiB python3-fsspec noarch 0:2026.1.0-2.fc44 fedora 1.9 MiB python3-husl noarch 0:4.0.3-38.fc44 fedora 21.5 KiB python3-idna noarch 0:3.11-2.fc44 fedora 738.4 KiB python3-imagesize noarch 0:1.4.1-15.fc44 fedora 36.0 KiB python3-iniconfig noarch 0:2.3.0-2.fc44 fedora 49.8 KiB python3-jinja2 noarch 0:3.1.6-7.fc44 fedora 3.1 MiB python3-kiwisolver aarch64 0:1.4.9-4.fc44 fedora 161.2 KiB python3-libs aarch64 0:3.14.2-3.fc44 fedora 45.3 MiB python3-locket noarch 0:1.0.0-19.fc44 fedora 20.9 KiB python3-markupsafe aarch64 0:3.0.2-7.fc44 fedora 117.4 KiB python3-matplotlib aarch64 0:3.10.8-2.fc44 fedora 31.8 MiB python3-matplotlib-data-fonts aarch64 0:3.10.8-2.fc44 fedora 7.9 MiB python3-numexpr aarch64 0:2.14.1-1.fc44 fedora 887.5 KiB python3-numpy aarch64 1:2.4.2-1.fc44 fedora 35.9 MiB python3-numpy-f2py aarch64 1:2.4.2-1.fc44 fedora 2.1 MiB python3-numpydoc noarch 0:1.9.0-2.fc44 fedora 682.4 KiB python3-olefile noarch 0:0.47-13.fc44 fedora 346.5 KiB python3-packaging noarch 0:25.0-8.fc44 fedora 607.4 KiB python3-pandas aarch64 0:3.0.0-0.fc44 copr_base 38.7 MiB python3-partd noarch 0:1.4.2-9.fc44 fedora 166.8 KiB python3-pillow aarch64 0:12.1.0-2.fc44 fedora 4.6 MiB python3-platformdirs noarch 0:4.4.0-4.fc44 fedora 182.9 KiB python3-pluggy noarch 0:1.6.0-5.fc44 fedora 211.5 KiB python3-pyarrow aarch64 0:23.0.0-2.fc44 fedora 26.1 MiB python3-pygments noarch 0:2.19.1-9.fc44 fedora 11.3 MiB python3-pyparsing noarch 0:3.1.2-15.fc44 fedora 1.0 MiB python3-pyyaml aarch64 0:6.0.3-3.fc44 fedora 797.1 KiB python3-requests noarch 0:2.32.5-3.fc44 fedora 476.9 KiB python3-roman-numerals-py noarch 0:3.1.0-6.fc44 fedora 40.4 KiB python3-rpm-generators noarch 0:14-14.fc44 fedora 81.7 KiB python3-rpm-macros noarch 0:3.14-10.fc44 fedora 6.5 KiB python3-six noarch 0:1.17.0-8.fc44 fedora 118.0 KiB python3-snowballstemmer noarch 0:3.0.1-11.fc44 fedora 1.8 MiB python3-sphinx noarch 1:8.2.3-19.fc44 fedora 12.3 MiB python3-sphinx-theme-alabaster noarch 0:0.7.16-12.fc44 fedora 42.0 KiB python3-toolz noarch 0:1.0.0-7.fc44 fedora 618.0 KiB python3-typing-extensions noarch 0:4.15.0-3.fc44 fedora 538.4 KiB python3-urllib3 noarch 0:2.6.3-2.fc44 fedora 1.1 MiB re2 aarch64 2:20251105-4.fc44 fedora 598.8 KiB snappy aarch64 0:1.2.2-4.fc44 fedora 83.6 KiB thrift aarch64 0:0.20.0-9.fc44 fedora 4.8 MiB tzdata noarch 0:2025c-2.fc44 fedora 1.2 MiB unixODBC aarch64 0:2.3.14-3.fc44 fedora 1.3 MiB uriparser aarch64 0:1.0.0-2.fc44 fedora 238.4 KiB utf8proc aarch64 0:2.11.3-2.fc44 fedora 413.5 KiB xerces-c aarch64 0:3.3.0-9.fc44 fedora 3.8 MiB xml-common noarch 0:0.6.3-68.fc44 fedora 78.4 KiB Transaction Summary: Installing: 182 packages Total size of inbound packages is 158 MiB. Need to download 158 MiB. After this operation, 684 MiB extra will be used (install 684 MiB, remove 0 B). [ 1/182] python3-devel-0:3.14.2-3.fc44 100% | 25.1 MiB/s | 436.2 KiB | 00m00s [ 2/182] python3-pytest-0:8.4.2-2.fc44 100% | 110.3 MiB/s | 2.3 MiB | 00m00s [ 3/182] python3-Bottleneck-0:1.6.0-2. 100% | 4.2 MiB/s | 171.8 KiB | 00m00s [ 4/182] python3-pytest-timeout-0:2.4. 100% | 436.4 KiB/s | 30.6 KiB | 00m00s [ 5/182] python3-pytest-asyncio-0:1.1. 100% | 536.5 KiB/s | 41.3 KiB | 00m00s [ 6/182] python3-pytest-xdist-0:3.7.0- 100% | 4.6 MiB/s | 117.5 KiB | 00m00s [ 7/182] python3-pint-0:0.25.2-2.fc44. 100% | 4.1 MiB/s | 740.8 KiB | 00m00s [ 8/182] python3-seaborn-0:0.13.2-15.f 100% | 5.4 MiB/s | 634.4 KiB | 00m00s [ 9/182] python3-rasterio-0:1.5.0-3.fc 100% | 4.5 MiB/s | 1.4 MiB | 00m00s [ 10/182] python3-0:3.14.2-3.fc44.aarch 100% | 5.5 MiB/s | 28.2 KiB | 00m00s [ 11/182] python3-libs-0:3.14.2-3.fc44. 100% | 234.0 MiB/s | 9.8 MiB | 00m00s [ 12/182] python3-dask+dataframe-0:2025 100% | 35.6 KiB/s | 11.3 KiB | 00m00s [ 13/182] python3-numpy-1:2.4.2-1.fc44. 100% | 51.1 MiB/s | 6.9 MiB | 00m00s [ 14/182] python3-dask+array-0:2025.12. 100% | 24.7 KiB/s | 11.2 KiB | 00m00s [ 15/182] python3-flexcache-0:0.3-11.fc 100% | 438.9 KiB/s | 27.2 KiB | 00m00s [ 16/182] python3-typing-extensions-0:4 100% | 36.6 MiB/s | 112.4 KiB | 00m00s [ 17/182] python3-iniconfig-0:2.3.0-2.f 100% | 8.6 MiB/s | 26.3 KiB | 00m00s [ 18/182] python3-packaging-0:25.0-8.fc 100% | 52.5 MiB/s | 161.2 KiB | 00m00s [ 19/182] python3-pluggy-0:1.6.0-5.fc44 100% | 20.1 MiB/s | 61.6 KiB | 00m00s [ 20/182] python3-platformdirs-0:4.4.0- 100% | 1.9 MiB/s | 49.8 KiB | 00m00s [ 21/182] python3-execnet-0:2.1.2-2.fc4 100% | 65.4 MiB/s | 267.9 KiB | 00m00s [ 22/182] python3-flexparser-0:0.4-7.fc 100% | 523.3 KiB/s | 54.9 KiB | 00m00s [ 23/182] python3-pygments-0:2.19.1-9.f 100% | 28.1 MiB/s | 2.7 MiB | 00m00s [ 24/182] python3-attrs-0:25.4.0-2.fc44 100% | 27.4 MiB/s | 140.4 KiB | 00m00s [ 25/182] python3-certifi-0:2025.07.09- 100% | 7.4 MiB/s | 15.1 KiB | 00m00s [ 26/182] python3-click-1:8.1.7-12.fc44 100% | 62.1 MiB/s | 254.5 KiB | 00m00s [ 27/182] python3-affine-0:2.4.0-14.fc4 100% | 632.6 KiB/s | 49.3 KiB | 00m00s [ 28/182] python3-pyparsing-0:3.1.2-15. 100% | 35.0 MiB/s | 286.8 KiB | 00m00s [ 29/182] python3-cligj-0:0.7.2-21.fc44 100% | 266.7 KiB/s | 20.5 KiB | 00m00s [ 30/182] python3-husl-0:4.0.3-38.fc44. 100% | 548.1 KiB/s | 18.6 KiB | 00m00s [ 31/182] gdal-libs-0:3.12.1-8.fc44.aar 100% | 44.6 MiB/s | 10.1 MiB | 00m00s [ 32/182] python3-numpydoc-0:1.9.0-2.fc 100% | 1.5 MiB/s | 171.4 KiB | 00m00s [ 33/182] python3-dask-0:2025.12.0-3.fc 100% | 16.3 MiB/s | 3.5 MiB | 00m00s [ 34/182] expat-0:2.7.3-2.fc44.aarch64 100% | 38.7 MiB/s | 119.0 KiB | 00m00s [ 35/182] mpdecimal-0:4.0.1-3.fc44.aarc 100% | 31.1 MiB/s | 95.4 KiB | 00m00s [ 36/182] python-pip-wheel-0:25.3-2.fc4 100% | 87.0 MiB/s | 1.1 MiB | 00m00s [ 37/182] tzdata-0:2025c-2.fc44.noarch 100% | 139.5 MiB/s | 714.3 KiB | 00m00s [ 38/182] flexiblas-netlib-0:3.5.0-2.fc 100% | 137.8 MiB/s | 4.0 MiB | 00m00s [ 39/182] python3-numpy-f2py-1:2.4.2-1. 100% | 99.8 MiB/s | 511.1 KiB | 00m00s [ 40/182] armadillo-0:12.8.1-9.fc44.aar 100% | 5.9 MiB/s | 30.2 KiB | 00m00s [ 41/182] blosc-0:1.21.6-10.fc44.aarch6 100% | 11.9 MiB/s | 48.8 KiB | 00m00s [ 42/182] cfitsio-0:4.6.3-2.fc44.aarch6 100% | 33.4 MiB/s | 581.2 KiB | 00m00s [ 43/182] freexl-0:2.0.0-20.fc44.aarch6 100% | 7.4 MiB/s | 45.6 KiB | 00m00s [ 44/182] geos-0:3.14.1-2.fc44.aarch64 100% | 42.0 MiB/s | 1.2 MiB | 00m00s [ 45/182] giflib-0:5.2.2-9.fc44.aarch64 100% | 12.8 MiB/s | 52.3 KiB | 00m00s [ 46/182] hdf5-0:1.14.6-7.fc44.aarch64 100% | 140.4 MiB/s | 1.8 MiB | 00m00s [ 47/182] imath-0:3.1.12-6.fc44.aarch64 100% | 30.9 MiB/s | 94.9 KiB | 00m00s [ 48/182] libaec-0:1.1.5-1.fc44.aarch64 100% | 9.0 MiB/s | 36.7 KiB | 00m00s [ 49/182] libarrow-0:23.0.0-2.fc44.aarc 100% | 34.0 MiB/s | 3.1 MiB | 00m00s [ 50/182] libarrow-compute-libs-0:23.0. 100% | 170.9 MiB/s | 2.4 MiB | 00m00s [ 51/182] libarrow-dataset-libs-0:23.0. 100% | 76.8 MiB/s | 471.8 KiB | 00m00s [ 52/182] libdeflate-0:1.25-3.fc44.aarc 100% | 20.8 MiB/s | 64.0 KiB | 00m00s [ 53/182] libgeotiff-0:1.7.4-5.fc44.aar 100% | 31.7 MiB/s | 97.2 KiB | 00m00s [ 54/182] libgta-0:1.2.1-17.fc44.aarch6 100% | 8.6 MiB/s | 35.2 KiB | 00m00s [ 55/182] libjpeg-turbo-0:3.1.2-2.fc44. 100% | 82.2 MiB/s | 252.4 KiB | 00m00s [ 56/182] libkml-0:1.3.0-56.fc44.aarch6 100% | 35.0 MiB/s | 322.7 KiB | 00m00s [ 57/182] liblerc-0:4.0.0-10.fc44.aarch 100% | 47.4 MiB/s | 194.1 KiB | 00m00s [ 58/182] libpng-2:1.6.53-2.fc44.aarch6 100% | 38.1 MiB/s | 117.1 KiB | 00m00s [ 59/182] libpq-0:18.0-4.fc44.aarch64 100% | 43.7 MiB/s | 268.2 KiB | 00m00s [ 60/182] libqhull_r-1:8.0.2-8.fc44.aar 100% | 23.8 MiB/s | 194.7 KiB | 00m00s [ 61/182] libspatialite-0:5.1.0-12.fc44 100% | 131.0 MiB/s | 2.8 MiB | 00m00s [ 62/182] libtiff-0:4.7.1-2.fc44.aarch6 100% | 68.2 MiB/s | 209.6 KiB | 00m00s [ 63/182] libwebp-0:1.6.0-3.fc44.aarch6 100% | 84.7 MiB/s | 260.3 KiB | 00m00s [ 64/182] mariadb-connector-c-0:3.4.8-3 100% | 49.8 MiB/s | 204.0 KiB | 00m00s [ 65/182] muParser-0:2.3.5-5.fc44.aarch 100% | 38.8 MiB/s | 159.0 KiB | 00m00s [ 66/182] netcdf-0:4.9.3-2.fc44.aarch64 100% | 49.8 MiB/s | 815.7 KiB | 00m00s [ 67/182] openexr-libs-0:3.2.4-7.fc44.a 100% | 12.5 MiB/s | 1.1 MiB | 00m00s [ 68/182] openjpeg-0:2.5.4-3.fc44.aarch 100% | 60.3 MiB/s | 185.2 KiB | 00m00s [ 69/182] parquet-libs-0:23.0.0-2.fc44. 100% | 114.7 MiB/s | 1.0 MiB | 00m00s [ 70/182] poppler-0:26.01.0-2.fc44.aarc 100% | 86.7 MiB/s | 1.2 MiB | 00m00s [ 71/182] proj-0:9.7.1-3.fc44.aarch64 100% | 35.3 MiB/s | 1.4 MiB | 00m00s [ 72/182] unixODBC-0:2.3.14-3.fc44.aarc 100% | 24.1 MiB/s | 394.3 KiB | 00m00s [ 73/182] xerces-c-0:3.3.0-9.fc44.aarch 100% | 31.0 MiB/s | 984.0 KiB | 00m00s [ 74/182] dejavu-sans-fonts-0:2.37-29.f 100% | 47.3 MiB/s | 1.3 MiB | 00m00s [ 75/182] freetype-0:2.14.1-2.fc44.aarc 100% | 81.6 MiB/s | 417.8 KiB | 00m00s [ 76/182] python3-cairo-0:1.28.0-5.fc44 100% | 41.7 MiB/s | 128.2 KiB | 00m00s [ 77/182] python3-pyarrow-0:23.0.0-2.fc 100% | 6.0 MiB/s | 4.7 MiB | 00m01s [ 78/182] python3-contourpy-0:1.3.3-3.f 100% | 7.9 MiB/s | 267.2 KiB | 00m00s [ 79/182] python3-dateutil-1:2.9.0.post 100% | 67.3 MiB/s | 344.3 KiB | 00m00s [ 80/182] python3-cycler-0:0.11.0-20.fc 100% | 488.0 KiB/s | 22.0 KiB | 00m00s [ 81/182] python3-kiwisolver-0:1.4.9-4. 100% | 848.9 KiB/s | 63.7 KiB | 00m00s [ 82/182] python3-matplotlib-0:3.10.8-2 100% | 6.5 MiB/s | 7.9 MiB | 00m01s [ 83/182] python3-pillow-0:12.1.0-2.fc4 100% | 92.2 MiB/s | 1.0 MiB | 00m00s [ 84/182] python3-sphinx-1:8.2.3-19.fc4 100% | 151.1 MiB/s | 2.9 MiB | 00m00s [ 85/182] python3-cloudpickle-0:3.1.2-2 100% | 893.0 KiB/s | 48.2 KiB | 00m00s [ 86/182] python3-fonttools-0:4.61.1-2. 100% | 7.1 MiB/s | 3.2 MiB | 00m00s [ 87/182] python3-partd-0:1.4.2-9.fc44. 100% | 2.9 MiB/s | 63.1 KiB | 00m00s [ 88/182] python3-pyyaml-0:6.0.3-3.fc44 100% | 55.3 MiB/s | 226.6 KiB | 00m00s [ 89/182] python3-fsspec-0:2026.1.0-2.f 100% | 4.0 MiB/s | 471.4 KiB | 00m00s [ 90/182] python3-toolz-0:1.0.0-7.fc44. 100% | 6.5 MiB/s | 173.9 KiB | 00m00s [ 91/182] libarrow-acero-libs-0:23.0.0- 100% | 30.4 MiB/s | 467.1 KiB | 00m00s [ 92/182] flexiblas-0:3.5.0-2.fc44.aarc 100% | 5.6 MiB/s | 23.0 KiB | 00m00s [ 93/182] flexiblas-openblas-openmp-0:3 100% | 8.0 MiB/s | 16.3 KiB | 00m00s [ 94/182] libgfortran-0:16.0.1-0.5.fc44 100% | 88.0 MiB/s | 450.7 KiB | 00m00s [ 95/182] python3-matplotlib-data-fonts 100% | 5.5 MiB/s | 2.3 MiB | 00m00s [ 96/182] snappy-0:1.2.2-4.fc44.aarch64 100% | 13.6 MiB/s | 41.8 KiB | 00m00s [ 97/182] arpack-0:3.9.1-9.fc44.aarch64 100% | 24.5 MiB/s | 175.9 KiB | 00m00s [ 98/182] minizip-ng-compat-0:4.1.0-1.f 100% | 16.3 MiB/s | 66.9 KiB | 00m00s [ 99/182] libarrow-doc-0:23.0.0-2.fc44. 100% | 9.6 MiB/s | 29.5 KiB | 00m00s [100/182] re2-2:20251105-4.fc44.aarch64 100% | 42.1 MiB/s | 215.5 KiB | 00m00s [101/182] liborc2-0:2.2.2-2.fc44.aarch6 100% | 52.7 MiB/s | 539.9 KiB | 00m00s [102/182] utf8proc-0:2.11.3-2.fc44.aarc 100% | 16.2 MiB/s | 83.1 KiB | 00m00s [103/182] uriparser-0:1.0.0-2.fc44.aarc 100% | 16.7 MiB/s | 68.4 KiB | 00m00s [104/182] librttopo-0:1.1.0-19.fc44.aar 100% | 49.6 MiB/s | 203.1 KiB | 00m00s [105/182] mariadb-connector-c-config-0: 100% | 2.2 MiB/s | 9.2 KiB | 00m00s [106/182] jbigkit-libs-0:2.1-33.fc44.aa 100% | 8.6 MiB/s | 53.1 KiB | 00m00s [107/182] boost-program-options-0:1.90. 100% | 25.2 MiB/s | 103.2 KiB | 00m00s [108/182] libzip-0:1.11.4-3.fc44.aarch6 100% | 13.6 MiB/s | 69.8 KiB | 00m00s [109/182] fontconfig-0:2.17.0-4.fc44.aa 100% | 89.2 MiB/s | 274.0 KiB | 00m00s [110/182] gpgmepp-0:2.0.1-3.fc44.aarch6 100% | 16.1 MiB/s | 132.1 KiB | 00m00s [111/182] lcms2-0:2.16-7.fc44.aarch64 100% | 58.9 MiB/s | 181.0 KiB | 00m00s [112/182] nspr-0:4.38.2-4.fc44.aarch64 100% | 44.1 MiB/s | 135.5 KiB | 00m00s [113/182] nss-0:3.120.0-1.fc44.aarch64 100% | 170.6 MiB/s | 698.6 KiB | 00m00s [114/182] libarrow-flight-libs-0:23.0.0 100% | 4.4 MiB/s | 397.0 KiB | 00m00s [115/182] proj-data-0:9.7.1-3.fc44.noar 100% | 103.6 MiB/s | 1.3 MiB | 00m00s [116/182] poppler-data-0:0.4.11-11.fc44 100% | 93.6 MiB/s | 2.0 MiB | 00m00s [117/182] fonts-filesystem-1:5.0.0-2.fc 100% | 4.3 MiB/s | 8.9 KiB | 00m00s [118/182] cairo-0:1.18.4-6.fc44.aarch64 100% | 136.9 MiB/s | 700.7 KiB | 00m00s [119/182] harfbuzz-0:12.3.2-1.fc44.aarc 100% | 127.6 MiB/s | 1.0 MiB | 00m00s [120/182] python3-six-0:1.17.0-8.fc44.n 100% | 13.7 MiB/s | 42.0 KiB | 00m00s [121/182] libraqm-0:0.10.1-4.fc44.aarch 100% | 7.3 MiB/s | 22.4 KiB | 00m00s [122/182] libimagequant-0:4.1.0-2.fc44. 100% | 36.6 MiB/s | 300.1 KiB | 00m00s [123/182] libxcb-0:1.17.0-7.fc44.aarch6 100% | 58.9 MiB/s | 241.3 KiB | 00m00s [124/182] python3-olefile-0:0.47-13.fc4 100% | 18.3 MiB/s | 75.0 KiB | 00m00s [125/182] python3-docutils-0:0.22.4-2.f 100% | 97.8 MiB/s | 1.2 MiB | 00m00s [126/182] thrift-0:0.20.0-9.fc44.aarch6 100% | 18.7 MiB/s | 1.6 MiB | 00m00s [127/182] python3-imagesize-0:1.4.1-15. 100% | 5.4 MiB/s | 22.0 KiB | 00m00s [128/182] python3-requests-0:2.32.5-3.f 100% | 17.4 MiB/s | 160.1 KiB | 00m00s [129/182] python3-jinja2-0:3.1.6-7.fc44 100% | 38.7 MiB/s | 515.5 KiB | 00m00s [130/182] python3-roman-numerals-py-0:3 100% | 5.0 MiB/s | 20.3 KiB | 00m00s [131/182] python3-snowballstemmer-0:3.0 100% | 54.8 MiB/s | 280.7 KiB | 00m00s [132/182] python3-sphinx-theme-alabaste 100% | 4.8 MiB/s | 24.4 KiB | 00m00s [133/182] python3-babel-0:2.17.0-8.fc44 100% | 147.4 MiB/s | 6.9 MiB | 00m00s [134/182] libyaml-0:0.2.5-18.fc44.aarch 100% | 8.1 MiB/s | 57.9 KiB | 00m00s [135/182] abseil-cpp-0:20260107.0-1.fc4 100% | 104.9 MiB/s | 751.7 KiB | 00m00s [136/182] glib2-0:2.87.0-4.fc44.aarch64 100% | 169.7 MiB/s | 3.1 MiB | 00m00s [137/182] python3-locket-0:1.0.0-19.fc4 100% | 677.3 KiB/s | 18.3 KiB | 00m00s [138/182] libarrow-glib-libs-0:23.0.0-2 100% | 2.5 MiB/s | 435.3 KiB | 00m00s [139/182] protobuf-0:3.19.6-20.fc44.aar 100% | 128.0 MiB/s | 917.3 KiB | 00m00s [140/182] openblas-openmp-0:0.3.29-2.fc 100% | 184.5 MiB/s | 3.9 MiB | 00m00s [141/182] flexiblas-netlib64-0:3.5.0-2. 100% | 160.3 MiB/s | 3.8 MiB | 00m00s [142/182] grpc-cpp-0:1.48.4-57.fc44.aar 100% | 2.9 MiB/s | 661.0 KiB | 00m00s [143/182] boost-container-0:1.90.0-6.fc 100% | 9.3 MiB/s | 38.1 KiB | 00m00s [144/182] default-fonts-core-sans-0:4.2 100% | 5.8 MiB/s | 29.5 KiB | 00m00s [145/182] xml-common-0:0.6.3-68.fc44.no 100% | 10.1 MiB/s | 31.1 KiB | 00m00s [146/182] gpgme-0:2.0.1-3.fc44.aarch64 100% | 43.4 MiB/s | 222.2 KiB | 00m00s [147/182] nss-softokn-0:3.120.0-1.fc44. 100% | 103.7 MiB/s | 424.8 KiB | 00m00s [148/182] nss-sysinit-0:3.120.0-1.fc44. 100% | 6.4 MiB/s | 19.6 KiB | 00m00s [149/182] libicu-0:77.1-2.fc44.aarch64 100% | 258.7 MiB/s | 10.6 MiB | 00m00s [150/182] nss-util-0:3.120.0-1.fc44.aar 100% | 7.7 MiB/s | 86.4 KiB | 00m00s [151/182] graphite2-0:1.3.14-20.fc44.aa 100% | 29.8 MiB/s | 91.7 KiB | 00m00s [152/182] libX11-0:1.8.12-3.fc44.aarch6 100% | 127.4 MiB/s | 652.2 KiB | 00m00s [153/182] libXext-0:1.3.6-5.fc44.aarch6 100% | 12.6 MiB/s | 38.6 KiB | 00m00s [154/182] libXrender-0:0.9.12-4.fc44.aa 100% | 13.1 MiB/s | 26.8 KiB | 00m00s [155/182] lzo-0:2.10-16.fc44.aarch64 100% | 21.1 MiB/s | 64.8 KiB | 00m00s [156/182] pixman-0:0.46.2-3.fc44.aarch6 100% | 69.2 MiB/s | 212.4 KiB | 00m00s [157/182] fribidi-0:1.0.16-4.fc44.aarch 100% | 17.4 MiB/s | 53.6 KiB | 00m00s [158/182] libXau-0:1.0.12-4.fc44.aarch6 100% | 11.0 MiB/s | 33.7 KiB | 00m00s [159/182] python3-markupsafe-0:3.0.2-7. 100% | 10.3 MiB/s | 31.6 KiB | 00m00s [160/182] python3-charset-normalizer-0: 100% | 22.9 MiB/s | 117.3 KiB | 00m00s [161/182] python3-idna-0:3.11-2.fc44.no 100% | 24.4 MiB/s | 124.7 KiB | 00m00s [162/182] python3-urllib3-0:2.6.3-2.fc4 100% | 49.1 MiB/s | 301.9 KiB | 00m00s [163/182] c-ares-0:1.34.6-3.fc44.aarch6 100% | 28.4 MiB/s | 116.3 KiB | 00m00s [164/182] protobuf-compiler-0:3.19.6-20 100% | 134.0 MiB/s | 685.9 KiB | 00m00s [165/182] openblas-0:0.3.29-2.fc43.aarc 100% | 13.7 MiB/s | 42.2 KiB | 00m00s [166/182] flexiblas-openblas-openmp64-0 100% | 5.3 MiB/s | 16.3 KiB | 00m00s [167/182] abattis-cantarell-vf-fonts-0: 100% | 58.8 MiB/s | 120.4 KiB | 00m00s [168/182] google-noto-sans-vf-fonts-0:2 100% | 120.1 MiB/s | 614.9 KiB | 00m00s [169/182] nss-softokn-freebl-0:3.120.0- 100% | 107.8 MiB/s | 331.3 KiB | 00m00s [170/182] libX11-common-0:1.8.12-3.fc44 100% | 57.1 MiB/s | 175.4 KiB | 00m00s [171/182] grpc-data-0:1.48.4-57.fc44.no 100% | 485.1 KiB/s | 18.4 KiB | 00m00s [172/182] google-noto-fonts-common-0:20 100% | 2.5 MiB/s | 17.7 KiB | 00m00s [173/182] openblas-openmp64-0:0.3.29-2. 100% | 156.9 MiB/s | 3.8 MiB | 00m00s [174/182] grpc-0:1.48.4-57.fc44.aarch64 100% | 6.2 MiB/s | 2.3 MiB | 00m00s [175/182] hdf-libs-0:4.3.0-5.fc44.aarch 100% | 54.2 MiB/s | 277.7 KiB | 00m00s [176/182] libtirpc-0:1.3.7-2.fc44.aarch 100% | 45.6 MiB/s | 93.3 KiB | 00m00s [177/182] pyproject-rpm-macros-0:1.18.6 100% | 21.9 MiB/s | 44.8 KiB | 00m00s [178/182] python-rpm-macros-0:3.14-10.f 100% | 6.4 MiB/s | 19.8 KiB | 00m00s [179/182] python3-rpm-generators-0:14-1 100% | 7.0 MiB/s | 28.6 KiB | 00m00s [180/182] python3-rpm-macros-0:3.14-10. 100% | 6.0 MiB/s | 12.3 KiB | 00m00s [181/182] python3-numexpr-0:2.14.1-1.fc 100% | 3.5 MiB/s | 227.0 KiB | 00m00s [182/182] python3-pandas-0:3.0.0-0.fc44 100% | 6.6 MiB/s | 7.0 MiB | 00m01s -------------------------------------------------------------------------------- [182/182] Total 100% | 40.9 MiB/s | 157.9 MiB | 00m04s Running transaction [ 1/184] Verify package files 100% | 350.0 B/s | 182.0 B | 00m01s [ 2/184] Prepare transaction 100% | 1.1 KiB/s | 182.0 B | 00m00s [ 3/184] Installing libarrow-doc-0:23. 100% | 117.1 MiB/s | 119.9 KiB | 00m00s [ 4/184] Installing nspr-0:4.38.2-4.fc 100% | 205.6 MiB/s | 421.1 KiB | 00m00s [ 5/184] Installing libgfortran-0:16.0 100% | 342.3 MiB/s | 1.7 MiB | 00m00s [ 6/184] Installing libjpeg-turbo-0:3. 100% | 241.5 MiB/s | 742.0 KiB | 00m00s [ 7/184] Installing nss-util-0:3.120.0 100% | 212.6 MiB/s | 217.7 KiB | 00m00s [ 8/184] Installing protobuf-0:3.19.6- 100% | 311.9 MiB/s | 3.1 MiB | 00m00s [ 9/184] Installing abseil-cpp-0:20260 100% | 312.6 MiB/s | 6.6 MiB | 00m00s [ 10/184] Installing fonts-filesystem-1 100% | 0.0 B/s | 788.0 B | 00m00s [ 11/184] Installing libpng-2:1.6.53-2. 100% | 132.3 MiB/s | 271.0 KiB | 00m00s [ 12/184] Installing libaec-0:1.1.5-1.f 100% | 153.1 MiB/s | 156.7 KiB | 00m00s [ 13/184] Installing expat-0:2.7.3-2.fc 100% | 18.6 MiB/s | 362.8 KiB | 00m00s [ 14/184] Installing python-rpm-macros- 100% | 27.8 MiB/s | 28.5 KiB | 00m00s [ 15/184] Installing glib2-0:2.87.0-4.f 100% | 240.2 MiB/s | 15.6 MiB | 00m00s [ 16/184] Installing snappy-0:1.2.2-4.f 100% | 83.2 MiB/s | 85.2 KiB | 00m00s [ 17/184] Installing openjpeg-0:2.5.4-3 100% | 202.2 MiB/s | 414.2 KiB | 00m00s [ 18/184] Installing libwebp-0:1.6.0-3. 100% | 200.4 MiB/s | 820.9 KiB | 00m00s [ 19/184] Installing geos-0:3.14.1-2.fc 100% | 141.3 MiB/s | 4.0 MiB | 00m00s [ 20/184] Installing blosc-0:1.21.6-10. 100% | 64.8 MiB/s | 132.6 KiB | 00m00s [ 21/184] Installing python3-rpm-macros 100% | 6.6 MiB/s | 6.8 KiB | 00m00s [ 22/184] Installing hdf5-0:1.14.6-7.fc 100% | 184.5 MiB/s | 7.0 MiB | 00m00s [ 23/184] Installing openblas-0:0.3.29- 100% | 110.8 MiB/s | 113.5 KiB | 00m00s [ 24/184] Installing lcms2-0:2.16-7.fc4 100% | 158.3 MiB/s | 486.3 KiB | 00m00s [ 25/184] Installing minizip-ng-compat- 100% | 194.6 MiB/s | 199.3 KiB | 00m00s [ 26/184] Installing freexl-0:2.0.0-20. 100% | 92.2 MiB/s | 94.4 KiB | 00m00s [ 27/184] Installing libqhull_r-1:8.0.2 100% | 222.7 MiB/s | 456.1 KiB | 00m00s [ 28/184] Installing liblerc-0:4.0.0-10 100% | 267.5 MiB/s | 547.8 KiB | 00m00s [ 29/184] Installing libdeflate-0:1.25- 100% | 160.5 MiB/s | 164.4 KiB | 00m00s [ 30/184] Installing imath-0:3.1.12-6.f 100% | 54.4 MiB/s | 389.7 KiB | 00m00s [ 31/184] Installing tzdata-0:2025c-2.f 100% | 28.0 MiB/s | 1.5 MiB | 00m00s [ 32/184] Installing openexr-libs-0:3.2 100% | 412.3 MiB/s | 6.6 MiB | 00m00s [ 33/184] Installing openblas-openmp-0: 100% | 433.8 MiB/s | 20.4 MiB | 00m00s [ 34/184] Installing flexiblas-netlib-0 100% | 249.0 MiB/s | 14.2 MiB | 00m00s [ 35/184] Installing flexiblas-0:3.5.0- 100% | 38.2 MiB/s | 39.2 KiB | 00m00s [ 36/184] Installing flexiblas-openblas 100% | 66.4 MiB/s | 68.0 KiB | 00m00s [ 37/184] Installing openblas-openmp64- 100% | 449.0 MiB/s | 20.2 MiB | 00m00s [ 38/184] Installing flexiblas-openblas 100% | 66.5 MiB/s | 68.0 KiB | 00m00s [ 39/184] Installing flexiblas-netlib64 100% | 250.1 MiB/s | 14.0 MiB | 00m00s [ 40/184] Installing arpack-0:3.9.1-9.f 100% | 180.9 MiB/s | 555.7 KiB | 00m00s [ 41/184] Installing armadillo-0:12.8.1 100% | 143.8 MiB/s | 147.2 KiB | 00m00s [ 42/184] Installing pyproject-rpm-macr 100% | 114.8 MiB/s | 117.5 KiB | 00m00s [ 43/184] Installing librttopo-0:1.1.0- 100% | 266.8 MiB/s | 546.4 KiB | 00m00s [ 44/184] Installing liborc2-0:2.2.2-2. 100% | 310.7 MiB/s | 1.9 MiB | 00m00s [ 45/184] Installing libarrow-0:23.0.0- 100% | 379.2 MiB/s | 11.4 MiB | 00m00s [ 46/184] Installing dejavu-sans-fonts- 100% | 367.2 MiB/s | 5.5 MiB | 00m00s [ 47/184] Installing abattis-cantarell- 100% | 94.9 MiB/s | 194.4 KiB | 00m00s [ 48/184] Installing protobuf-compiler- 100% | 102.0 MiB/s | 2.3 MiB | 00m00s [ 49/184] Installing nss-softokn-freebl 100% | 212.9 MiB/s | 872.2 KiB | 00m00s [ 50/184] Installing nss-softokn-0:3.12 100% | 318.4 MiB/s | 2.2 MiB | 00m00s [ 51/184] Installing nss-0:3.120.0-1.fc 100% | 179.4 MiB/s | 2.0 MiB | 00m00s [ 52/184] Installing nss-sysinit-0:3.12 100% | 3.9 MiB/s | 71.1 KiB | 00m00s [ 53/184] Installing libtirpc-0:1.3.7-2 100% | 104.5 MiB/s | 213.9 KiB | 00m00s [ 54/184] Installing hdf-libs-0:4.3.0-5 100% | 235.6 MiB/s | 723.7 KiB | 00m00s [ 55/184] Installing google-noto-fonts- 100% | 0.0 B/s | 18.5 KiB | 00m00s [ 56/184] Installing google-noto-sans-v 100% | 278.3 MiB/s | 1.4 MiB | 00m00s [ 57/184] Installing default-fonts-core 100% | 8.9 MiB/s | 18.2 KiB | 00m00s [ 58/184] Installing libX11-common-0:1. 100% | 84.7 MiB/s | 1.2 MiB | 00m00s [ 59/184] Installing grpc-data-0:1.48.4 100% | 29.7 MiB/s | 30.4 KiB | 00m00s [ 60/184] Installing c-ares-0:1.34.6-3. 100% | 134.3 MiB/s | 275.1 KiB | 00m00s [ 61/184] Installing libXau-0:1.0.12-4. 100% | 119.5 MiB/s | 122.3 KiB | 00m00s [ 62/184] Installing libxcb-0:1.17.0-7. 100% | 270.4 MiB/s | 2.2 MiB | 00m00s [ 63/184] Installing libX11-0:1.8.12-3. 100% | 335.7 MiB/s | 1.3 MiB | 00m00s [ 64/184] Installing libXext-0:1.3.6-5. 100% | 143.5 MiB/s | 147.0 KiB | 00m00s [ 65/184] Installing libXrender-0:0.9.1 100% | 69.5 MiB/s | 71.1 KiB | 00m00s [ 66/184] Installing fribidi-0:1.0.16-4 100% | 13.5 MiB/s | 248.5 KiB | 00m00s [ 67/184] Installing pixman-0:0.46.2-3. 100% | 213.4 MiB/s | 655.4 KiB | 00m00s [ 68/184] Installing lzo-0:2.10-16.fc44 100% | 160.6 MiB/s | 164.4 KiB | 00m00s [ 69/184] Installing graphite2-0:1.3.14 100% | 13.1 MiB/s | 241.5 KiB | 00m00s [ 70/184] Installing freetype-0:2.14.1- 100% | 214.9 MiB/s | 880.1 KiB | 00m00s [ 71/184] Installing harfbuzz-0:12.3.2- 100% | 253.3 MiB/s | 2.5 MiB | 00m00s [ 72/184] Installing libraqm-0:0.10.1-4 100% | 68.0 MiB/s | 69.6 KiB | 00m00s [ 73/184] Installing gpgme-0:2.0.1-3.fc 100% | 37.3 MiB/s | 764.3 KiB | 00m00s [ 74/184] Installing gpgmepp-0:2.0.1-3. 100% | 74.8 MiB/s | 459.6 KiB | 00m00s [ 75/184] Installing xml-common-0:0.6.3 100% | 39.6 MiB/s | 81.1 KiB | 00m00s [ 76/184] Installing fontconfig-0:2.17. 100% | 1.2 MiB/s | 1.2 MiB | 00m01s [ 77/184] Installing cairo-0:1.18.4-6.f 100% | 254.8 MiB/s | 1.8 MiB | 00m00s [ 78/184] Installing boost-container-0: 100% | 68.6 MiB/s | 70.3 KiB | 00m00s [ 79/184] Installing boost-program-opti 100% | 130.9 MiB/s | 268.1 KiB | 00m00s [ 80/184] Installing libicu-0:77.1-2.fc 100% | 344.7 MiB/s | 36.5 MiB | 00m00s [ 81/184] Installing re2-2:20251105-4.f 100% | 195.4 MiB/s | 600.2 KiB | 00m00s [ 82/184] Installing grpc-0:1.48.4-57.f 100% | 381.5 MiB/s | 9.9 MiB | 00m00s [ 83/184] Installing grpc-cpp-0:1.48.4- 100% | 352.2 MiB/s | 3.2 MiB | 00m00s [ 84/184] Installing libyaml-0:0.2.5-18 100% | 132.5 MiB/s | 135.7 KiB | 00m00s [ 85/184] Installing libimagequant-0:4. 100% | 219.3 MiB/s | 673.7 KiB | 00m00s [ 86/184] Installing proj-data-0:9.7.1- 100% | 450.9 MiB/s | 9.5 MiB | 00m00s [ 87/184] Installing poppler-data-0:0.4 100% | 295.0 MiB/s | 12.4 MiB | 00m00s [ 88/184] Installing thrift-0:0.20.0-9. 100% | 144.2 MiB/s | 4.8 MiB | 00m00s [ 89/184] Installing parquet-libs-0:23. 100% | 353.2 MiB/s | 3.5 MiB | 00m00s [ 90/184] Installing libzip-0:1.11.4-3. 100% | 133.5 MiB/s | 136.7 KiB | 00m00s [ 91/184] Installing netcdf-0:4.9.3-2.f 100% | 116.2 MiB/s | 3.1 MiB | 00m00s [ 92/184] Installing mariadb-connector- 100% | 988.3 KiB/s | 1.0 KiB | 00m00s [ 93/184] Installing mariadb-connector- 100% | 244.3 MiB/s | 1.0 MiB | 00m00s [ 94/184] Installing jbigkit-libs-0:2.1 100% | 178.9 MiB/s | 183.2 KiB | 00m00s [ 95/184] Installing libtiff-0:4.7.1-2. 100% | 215.2 MiB/s | 661.2 KiB | 00m00s [ 96/184] Installing proj-0:9.7.1-3.fc4 100% | 138.2 MiB/s | 4.3 MiB | 00m00s [ 97/184] Installing libgeotiff-0:1.7.4 100% | 26.8 MiB/s | 521.1 KiB | 00m00s [ 98/184] Installing libspatialite-0:5. 100% | 416.1 MiB/s | 15.0 MiB | 00m00s [ 99/184] Installing poppler-0:26.01.0- 100% | 301.3 MiB/s | 3.6 MiB | 00m00s [100/184] Installing uriparser-0:1.0.0- 100% | 13.0 MiB/s | 240.5 KiB | 00m00s [101/184] Installing libkml-0:1.3.0-56. 100% | 233.7 MiB/s | 1.2 MiB | 00m00s [102/184] Installing utf8proc-0:2.11.3- 100% | 202.6 MiB/s | 414.9 KiB | 00m00s [103/184] Installing libarrow-compute-l 100% | 407.4 MiB/s | 11.0 MiB | 00m00s [104/184] Installing libarrow-acero-lib 100% | 257.7 MiB/s | 1.3 MiB | 00m00s [105/184] Installing libarrow-dataset-l 100% | 271.4 MiB/s | 1.4 MiB | 00m00s [106/184] Installing libarrow-glib-libs 100% | 344.7 MiB/s | 1.7 MiB | 00m00s [107/184] Installing libarrow-flight-li 100% | 287.6 MiB/s | 1.4 MiB | 00m00s [108/184] Installing python3-matplotlib 100% | 329.8 MiB/s | 7.9 MiB | 00m00s [109/184] Installing xerces-c-0:3.3.0-9 100% | 345.3 MiB/s | 3.8 MiB | 00m00s [110/184] Installing unixODBC-0:2.3.14- 100% | 53.5 MiB/s | 1.3 MiB | 00m00s [111/184] Installing muParser-0:2.3.5-5 100% | 180.4 MiB/s | 554.1 KiB | 00m00s [112/184] Installing libpq-0:18.0-4.fc4 100% | 205.5 MiB/s | 1.0 MiB | 00m00s [113/184] Installing libgta-0:1.2.1-17. 100% | 93.1 MiB/s | 95.3 KiB | 00m00s [114/184] Installing giflib-0:5.2.2-9.f 100% | 130.5 MiB/s | 133.7 KiB | 00m00s [115/184] Installing cfitsio-0:4.6.3-2. 100% | 290.8 MiB/s | 1.7 MiB | 00m00s [116/184] Installing gdal-libs-0:3.12.1 100% | 298.5 MiB/s | 30.1 MiB | 00m00s [117/184] Installing python-pip-wheel-0 100% | 602.0 MiB/s | 1.2 MiB | 00m00s [118/184] Installing mpdecimal-0:4.0.1- 100% | 39.4 MiB/s | 282.6 KiB | 00m00s [119/184] Installing python3-libs-0:3.1 100% | 245.6 MiB/s | 45.7 MiB | 00m00s [120/184] Installing python3-0:3.14.2-3 100% | 4.4 MiB/s | 86.5 KiB | 00m00s [121/184] Installing python3-numpy-f2py 100% | 55.9 MiB/s | 2.2 MiB | 00m00s [122/184] Installing python3-numpy-1:2. 100% | 227.7 MiB/s | 36.2 MiB | 00m00s [123/184] Installing python3-packaging- 100% | 121.1 MiB/s | 619.9 KiB | 00m00s [124/184] Installing python3-typing-ext 100% | 264.0 MiB/s | 540.7 KiB | 00m00s [125/184] Installing python3-click-1:8. 100% | 146.3 MiB/s | 1.2 MiB | 00m00s [126/184] Installing python3-pygments-0 100% | 149.2 MiB/s | 11.5 MiB | 00m00s [127/184] Installing python3-pyparsing- 100% | 205.9 MiB/s | 1.0 MiB | 00m00s [128/184] Installing python3-toolz-0:1. 100% | 103.8 MiB/s | 637.6 KiB | 00m00s [129/184] Installing python3-idna-0:3.1 100% | 181.9 MiB/s | 744.9 KiB | 00m00s [130/184] Installing python3-urllib3-0: 100% | 142.2 MiB/s | 1.1 MiB | 00m00s [131/184] Installing python3-cligj-0:0. 100% | 18.4 MiB/s | 37.8 KiB | 00m00s [132/184] Installing python3-flexcache- 100% | 59.2 MiB/s | 60.6 KiB | 00m00s [133/184] Installing python3-flexparser 100% | 130.4 MiB/s | 267.1 KiB | 00m00s [134/184] Installing python3-rpm-genera 100% | 81.0 MiB/s | 82.9 KiB | 00m00s [135/184] Installing python3-Bottleneck 100% | 102.1 MiB/s | 731.8 KiB | 00m00s [136/184] Installing python3-contourpy- 100% | 142.5 MiB/s | 875.3 KiB | 00m00s [137/184] Installing python3-numexpr-0: 100% | 175.6 MiB/s | 899.2 KiB | 00m00s [138/184] Installing python3-platformdi 100% | 92.4 MiB/s | 189.3 KiB | 00m00s [139/184] Installing python3-iniconfig- 100% | 26.4 MiB/s | 54.1 KiB | 00m00s [140/184] Installing python3-pluggy-0:1 100% | 53.2 MiB/s | 217.9 KiB | 00m00s [141/184] Installing python3-pytest-0:8 100% | 246.5 MiB/s | 22.7 MiB | 00m00s [142/184] Installing python3-execnet-0: 100% | 138.4 MiB/s | 992.2 KiB | 00m00s [143/184] Installing python3-affine-0:2 100% | 86.2 MiB/s | 176.5 KiB | 00m00s [144/184] Installing python3-attrs-0:25 100% | 110.1 MiB/s | 451.1 KiB | 00m00s [145/184] Installing python3-certifi-0: 100% | 10.9 MiB/s | 11.2 KiB | 00m00s [146/184] Installing python3-husl-0:4.0 100% | 11.6 MiB/s | 23.7 KiB | 00m00s [147/184] Installing python3-pyarrow-0: 100% | 342.8 MiB/s | 26.4 MiB | 00m00s [148/184] Installing python3-cairo-0:1. 100% | 169.3 MiB/s | 520.1 KiB | 00m00s [149/184] Installing python3-cycler-0:0 100% | 9.8 MiB/s | 40.3 KiB | 00m00s [150/184] Installing python3-fonttools- 100% | 244.5 MiB/s | 19.6 MiB | 00m00s [151/184] Installing python3-kiwisolver 100% | 80.7 MiB/s | 165.3 KiB | 00m00s [152/184] Installing python3-cloudpickl 100% | 65.2 MiB/s | 133.5 KiB | 00m00s [153/184] Installing python3-fsspec-0:2 100% | 177.8 MiB/s | 2.0 MiB | 00m00s [154/184] Installing python3-pyyaml-0:6 100% | 158.4 MiB/s | 811.0 KiB | 00m00s [155/184] Installing python3-six-0:1.17 100% | 58.7 MiB/s | 120.3 KiB | 00m00s [156/184] Installing python3-dateutil-1 100% | 124.4 MiB/s | 891.5 KiB | 00m00s [157/184] Installing python3-pandas-0:3 100% | 288.3 MiB/s | 38.9 MiB | 00m00s [158/184] Installing python3-olefile-0: 100% | 113.9 MiB/s | 349.8 KiB | 00m00s [159/184] Installing python3-pillow-0:1 100% | 185.6 MiB/s | 4.6 MiB | 00m00s [160/184] Installing python3-matplotlib 100% | 280.6 MiB/s | 32.0 MiB | 00m00s [161/184] Installing python3-babel-0:2. 100% | 241.9 MiB/s | 30.5 MiB | 00m00s [162/184] Installing python3-docutils-0 100% | 111.7 MiB/s | 5.6 MiB | 00m00s [163/184] Installing python3-imagesize- 100% | 38.2 MiB/s | 39.1 KiB | 00m00s [164/184] Installing python3-roman-nume 100% | 21.2 MiB/s | 43.4 KiB | 00m00s [165/184] Installing python3-snowballst 100% | 232.5 MiB/s | 1.9 MiB | 00m00s [166/184] Installing python3-sphinx-the 100% | 22.8 MiB/s | 46.6 KiB | 00m00s [167/184] Installing python3-locket-0:1 100% | 22.9 MiB/s | 23.4 KiB | 00m00s [168/184] Installing python3-partd-0:1. 100% | 34.4 MiB/s | 176.2 KiB | 00m00s [169/184] Installing python3-dask-0:202 100% | 194.3 MiB/s | 20.8 MiB | 00m00s [170/184] Installing python3-dask+array 100% | 0.0 B/s | 124.0 B | 00m00s [171/184] Installing python3-markupsafe 100% | 59.4 MiB/s | 121.7 KiB | 00m00s [172/184] Installing python3-jinja2-0:3 100% | 257.6 MiB/s | 3.1 MiB | 00m00s [173/184] Installing python3-charset-no 100% | 17.9 MiB/s | 366.4 KiB | 00m00s [174/184] Installing python3-requests-0 100% | 68.2 MiB/s | 488.9 KiB | 00m00s [175/184] Installing python3-sphinx-1:8 100% | 129.9 MiB/s | 12.5 MiB | 00m00s [176/184] Installing python3-numpydoc-0 100% | 31.0 MiB/s | 697.7 KiB | 00m00s [177/184] Installing python3-seaborn-0: 100% | 180.4 MiB/s | 2.3 MiB | 00m00s [178/184] Installing python3-dask+dataf 100% | 121.1 KiB/s | 124.0 B | 00m00s [179/184] Installing python3-rasterio-0 100% | 138.1 MiB/s | 5.5 MiB | 00m00s [180/184] Installing python3-pytest-xdi 100% | 117.5 MiB/s | 481.3 KiB | 00m00s [181/184] Installing python3-pytest-asy 100% | 66.0 MiB/s | 135.2 KiB | 00m00s [182/184] Installing python3-pytest-tim 100% | 41.3 MiB/s | 84.6 KiB | 00m00s [183/184] Installing python3-pint-0:0.2 100% | 88.9 MiB/s | 3.5 MiB | 00m00s [184/184] Installing python3-devel-0:3. 100% | 13.6 MiB/s | 2.0 MiB | 00m00s Warning: skipped OpenPGP checks for 4 packages from repository: copr_base Complete! Building target platforms: aarch64 Building for target aarch64 setting SOURCE_DATE_EPOCH=1768608000 Wrote: /builddir/build/SRPMS/python-xarray-2025.12.0-2.fc44.src.rpm Updating and loading repositories: Copr repository 100% | 1.3 KiB/s | 1.5 KiB | 00m01s fedora 100% | 9.2 KiB/s | 11.7 KiB | 00m01s Repositories loaded. Package "python3-devel-3.14.2-3.fc44.aarch64" is already installed. Package "python3-Bottleneck-1.6.0-2.fc44.aarch64" is already installed. Package "python3-dask+array-2025.12.0-3.fc44.noarch" is already installed. Package "python3-dask+dataframe-2025.12.0-3.fc44.noarch" is already installed. Package "python3-pint-0.25.2-2.fc44.noarch" is already installed. Package "python3-pytest-8.4.2-2.fc44.noarch" is already installed. Package "python3-pytest-asyncio-1.1.0-3.fc44.noarch" is already installed. Package "python3-pytest-timeout-2.4.0-6.fc44.noarch" is already installed. Package "python3-pytest-xdist-3.7.0-6.fc44.noarch" is already installed. Package "python3-rasterio-1.5.0-3.fc44.aarch64" is already installed. Package "python3-seaborn-0.13.2-15.fc44.noarch" is already installed. Nothing to do. Finish: build setup for python-xarray-2025.12.0-2.fc44.src.rpm Start: rpmbuild python-xarray-2025.12.0-2.fc44.src.rpm Building target platforms: aarch64 Building for target aarch64 setting SOURCE_DATE_EPOCH=1768608000 Executing(%mkbuilddir): /bin/sh -e /var/tmp/rpm-tmp.jZNSrX Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.o3PULc + umask 022 + cd /builddir/build/BUILD/python-xarray-2025.12.0-build + cd /builddir/build/BUILD/python-xarray-2025.12.0-build + rm -rf xarray-2025.12.0 + /usr/lib/rpm/rpmuncompress -x /builddir/build/SOURCES/xarray-2025.12.0.tar.gz + STATUS=0 + '[' 0 -ne 0 ']' + cd xarray-2025.12.0 + /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w . + /usr/lib/rpm/rpmuncompress /builddir/build/SOURCES/0001-Drop-pydap-from-dependencies.patch + /usr/bin/patch -p1 -s --fuzz=0 --no-backup-if-mismatch -f + /usr/lib/rpm/rpmuncompress /builddir/build/SOURCES/0002-Ensure-netcdf4-is-locked-while-closing.patch + /usr/bin/patch -p1 -s --fuzz=0 --no-backup-if-mismatch -f + RPM_EC=0 ++ jobs -p + exit 0 Executing(%generate_buildrequires): /bin/sh -e /var/tmp/rpm-tmp.gDw5xE + umask 022 + cd /builddir/build/BUILD/python-xarray-2025.12.0-build + cd xarray-2025.12.0 + echo pyproject-rpm-macros + echo python3-devel + echo 'python3dist(packaging)' + echo 'python3dist(pip) >= 19' + '[' -f pyproject.toml ']' + echo '(python3dist(tomli) if python3-devel < 3.11)' + rm -rfv '*.dist-info/' + '[' -f /usr/bin/python3 ']' + mkdir -p /builddir/build/BUILD/python-xarray-2025.12.0-build/.pyproject-builddir + echo -n + CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + VALAFLAGS=-g + RUSTFLAGS='-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Cforce-frame-pointers=yes --cap-lints=warn' + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 ' + LT_SYS_LIBRARY_PATH=/usr/lib64: + CC=gcc + CXX=g++ + TMPDIR=/builddir/build/BUILD/python-xarray-2025.12.0-build/.pyproject-builddir + RPM_TOXENV=py314 + FEDORA=44 + HOSTNAME=rpmbuild + /usr/bin/python3 -Bs /usr/lib/rpm/redhat/pyproject_buildrequires.py --generate-extras --python3_pkgversion 3 --wheeldir /builddir/build/BUILD/python-xarray-2025.12.0-build/pyproject-wheeldir --output /builddir/build/BUILD/python-xarray-2025.12.0-build/python-xarray-2025.12.0-2.fc44.aarch64-pyproject-buildrequires -x io Handling setuptools>=77.0.3 from build-system.requires Requirement not satisfied: setuptools>=77.0.3 Handling setuptools-scm>=8 from build-system.requires Requirement not satisfied: setuptools-scm>=8 Exiting dependency generation pass: build backend + cat /builddir/build/BUILD/python-xarray-2025.12.0-build/python-xarray-2025.12.0-2.fc44.aarch64-pyproject-buildrequires + rm -rfv '*.dist-info/' + RPM_EC=0 ++ jobs -p + exit 0 Wrote: /builddir/build/SRPMS/python-xarray-2025.12.0-2.fc44.buildreqs.nosrc.rpm INFO: Going to install missing dynamic buildrequires Updating and loading repositories: Copr repository 100% | 775.0 B/s | 1.5 KiB | 00m02s fedora 100% | 5.7 KiB/s | 11.7 KiB | 00m02s Repositories loaded. Package "pyproject-rpm-macros-1.18.6-2.fc44.noarch" is already installed. Package "python3-devel-3.14.2-3.fc44.aarch64" is already installed. Package "python3-Bottleneck-1.6.0-2.fc44.aarch64" is already installed. Package "python3-dask+array-2025.12.0-3.fc44.noarch" is already installed. Package "python3-dask+dataframe-2025.12.0-3.fc44.noarch" is already installed. Package "python3-packaging-25.0-8.fc44.noarch" is already installed. Package "python3-pint-0.25.2-2.fc44.noarch" is already installed. Package "python3-pytest-8.4.2-2.fc44.noarch" is already installed. Package "python3-pytest-asyncio-1.1.0-3.fc44.noarch" is already installed. Package "python3-pytest-timeout-2.4.0-6.fc44.noarch" is already installed. Package "python3-pytest-xdist-3.7.0-6.fc44.noarch" is already installed.Package Arch Version Repository Size Installing: python3-pip noarch 0:25.3-2.fc44 fedora 11.2 MiB python3-setuptools noarch 0:80.10.2-1.fc44 fedora 7.5 MiB python3-setuptools_scm noarch 0:9.2.2-5.fc44 fedora 502.5 KiB Transaction Summary: Installing: 3 packages Package "python3-rasterio-1.5.0-3.fc44.aarch64" is already installed. Package "python3-seaborn-0.13.2-15.fc44.noarch" is already installed. Total size of inbound packages is 5 MiB. Need to download 5 MiB. After this operation, 19 MiB extra will be used (install 19 MiB, remove 0 B). [1/3] python3-setuptools_scm-0:9.2.2-5. 100% | 9.7 MiB/s | 159.4 KiB | 00m00s [2/3] python3-setuptools-0:80.10.2-1.fc 100% | 87.7 MiB/s | 1.8 MiB | 00m00s [3/3] python3-pip-0:25.3-2.fc44.noarch 100% | 70.8 MiB/s | 2.6 MiB | 00m00s -------------------------------------------------------------------------------- [3/3] Total 100% | 122.4 MiB/s | 4.5 MiB | 00m00s Running transaction [1/5] Verify package files 100% | 214.0 B/s | 3.0 B | 00m00s [2/5] Prepare transaction 100% | 62.0 B/s | 3.0 B | 00m00s [3/5] Installing python3-setuptools-0:8 100% | 159.4 MiB/s | 7.7 MiB | 00m00s [4/5] Installing python3-setuptools_scm 100% | 19.8 MiB/s | 526.4 KiB | 00m00s [5/5] Installing python3-pip-0:25.3-2.f 100% | 95.7 MiB/s | 11.5 MiB | 00m00s Complete! Building target platforms: aarch64 Building for target aarch64 setting SOURCE_DATE_EPOCH=1768608000 Executing(%generate_buildrequires): /bin/sh -e /var/tmp/rpm-tmp.8XGFOE + umask 022 + cd /builddir/build/BUILD/python-xarray-2025.12.0-build + cd xarray-2025.12.0 + echo pyproject-rpm-macros + echo python3-devel + echo 'python3dist(packaging)' + echo 'python3dist(pip) >= 19' + '[' -f pyproject.toml ']' + echo '(python3dist(tomli) if python3-devel < 3.11)' + rm -rfv '*.dist-info/' + '[' -f /usr/bin/python3 ']' + mkdir -p /builddir/build/BUILD/python-xarray-2025.12.0-build/.pyproject-builddir + echo -n + CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + VALAFLAGS=-g + RUSTFLAGS='-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Cforce-frame-pointers=yes --cap-lints=warn' + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 ' + LT_SYS_LIBRARY_PATH=/usr/lib64: + CC=gcc + CXX=g++ + TMPDIR=/builddir/build/BUILD/python-xarray-2025.12.0-build/.pyproject-builddir + RPM_TOXENV=py314 + FEDORA=44 + HOSTNAME=rpmbuild + /usr/bin/python3 -Bs /usr/lib/rpm/redhat/pyproject_buildrequires.py --generate-extras --python3_pkgversion 3 --wheeldir /builddir/build/BUILD/python-xarray-2025.12.0-build/pyproject-wheeldir --output /builddir/build/BUILD/python-xarray-2025.12.0-build/python-xarray-2025.12.0-2.fc44.aarch64-pyproject-buildrequires -x io Handling setuptools>=77.0.3 from build-system.requires Requirement satisfied: setuptools>=77.0.3 (installed: setuptools 80.10.2) Handling setuptools-scm>=8 from build-system.requires Requirement satisfied: setuptools-scm>=8 (installed: setuptools-scm 9.2.2) /usr/lib/python3.14/site-packages/setuptools_scm/git.py:427: UserWarning: git archive did not support describe output warnings.warn("git archive did not support describe output") /usr/lib/python3.14/site-packages/setuptools_scm/git.py:445: UserWarning: unprocessed git archival found (no export subst applied) warnings.warn("unprocessed git archival found (no export subst applied)") running egg_info writing xarray.egg-info/PKG-INFO writing dependency_links to xarray.egg-info/dependency_links.txt writing entry points to xarray.egg-info/entry_points.txt writing requirements to xarray.egg-info/requires.txt writing top-level names to xarray.egg-info/top_level.txt reading manifest file 'xarray.egg-info/SOURCES.txt' adding license file 'LICENSE' writing manifest file 'xarray.egg-info/SOURCES.txt' /usr/lib/python3.14/site-packages/setuptools_scm/git.py:427: UserWarning: git archive did not support describe output warnings.warn("git archive did not support describe output") /usr/lib/python3.14/site-packages/setuptools_scm/git.py:445: UserWarning: unprocessed git archival found (no export subst applied) warnings.warn("unprocessed git archival found (no export subst applied)") running dist_info writing xarray.egg-info/PKG-INFO writing dependency_links to xarray.egg-info/dependency_links.txt writing entry points to xarray.egg-info/entry_points.txt writing requirements to xarray.egg-info/requires.txt writing top-level names to xarray.egg-info/top_level.txt reading manifest file 'xarray.egg-info/SOURCES.txt' adding license file 'LICENSE' writing manifest file 'xarray.egg-info/SOURCES.txt' creating '/builddir/build/BUILD/python-xarray-2025.12.0-build/xarray-2025.12.0/xarray-2025.12.0.dist-info' Handling numpy>=1.26 from hook generated metadata: Requires-Dist (xarray) Requirement satisfied: numpy>=1.26 (installed: numpy 2.4.2) Handling packaging>=24.1 from hook generated metadata: Requires-Dist (xarray) Requirement satisfied: packaging>=24.1 (installed: packaging 25.0) Handling pandas>=2.2 from hook generated metadata: Requires-Dist (xarray) Requirement satisfied: pandas>=2.2 (installed: pandas 3.0.0) Handling scipy>=1.13; extra == "accel" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: scipy>=1.13; extra == "accel" Handling bottleneck; extra == "accel" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: bottleneck; extra == "accel" Handling numbagg>=0.8; extra == "accel" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: numbagg>=0.8; extra == "accel" Handling numba>=0.62; extra == "accel" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: numba>=0.62; extra == "accel" Handling flox>=0.9; extra == "accel" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: flox>=0.9; extra == "accel" Handling opt_einsum; extra == "accel" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: opt_einsum; extra == "accel" Handling xarray[accel,etc,io,parallel,viz]; extra == "complete" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: xarray[accel,etc,io,parallel,viz]; extra == "complete" Handling netCDF4>=1.6.0; extra == "io" from hook generated metadata: Requires-Dist (xarray) Requirement not satisfied: netCDF4>=1.6.0; extra == "io" Handling h5netcdf; extra == "io" from hook generated metadata: Requires-Dist (xarray) Requirement not satisfied: h5netcdf; extra == "io" Handling scipy>=1.13; extra == "io" from hook generated metadata: Requires-Dist (xarray) Requirement not satisfied: scipy>=1.13; extra == "io" Handling zarr>=2.18; extra == "io" from hook generated metadata: Requires-Dist (xarray) Requirement not satisfied: zarr>=2.18; extra == "io" Handling fsspec; extra == "io" from hook generated metadata: Requires-Dist (xarray) Requirement satisfied: fsspec; extra == "io" (installed: fsspec 2026.1.0) Handling cftime; extra == "io" from hook generated metadata: Requires-Dist (xarray) Requirement not satisfied: cftime; extra == "io" Handling pooch; extra == "io" from hook generated metadata: Requires-Dist (xarray) Requirement not satisfied: pooch; extra == "io" Handling sparse>=0.15; extra == "etc" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: sparse>=0.15; extra == "etc" Handling dask[complete]; extra == "parallel" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: dask[complete]; extra == "parallel" Handling cartopy>=0.23; extra == "viz" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: cartopy>=0.23; extra == "viz" Handling matplotlib>=3.8; extra == "viz" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: matplotlib>=3.8; extra == "viz" Handling nc-time-axis; extra == "viz" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: nc-time-axis; extra == "viz" Handling seaborn; extra == "viz" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: seaborn; extra == "viz" Handling pandas-stubs; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: pandas-stubs; extra == "types" Handling scipy-stubs; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: scipy-stubs; extra == "types" Handling types-PyYAML; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-PyYAML; extra == "types" Handling types-Pygments; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-Pygments; extra == "types" Handling types-colorama; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-colorama; extra == "types" Handling types-decorator; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-decorator; extra == "types" Handling types-defusedxml; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-defusedxml; extra == "types" Handling types-docutils; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-docutils; extra == "types" Handling types-networkx; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-networkx; extra == "types" Handling types-pexpect; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-pexpect; extra == "types" Handling types-psutil; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-psutil; extra == "types" Handling types-pycurl; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-pycurl; extra == "types" Handling types-openpyxl; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-openpyxl; extra == "types" Handling types-python-dateutil; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-python-dateutil; extra == "types" Handling types-pytz; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-pytz; extra == "types" Handling types-requests; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-requests; extra == "types" Handling types-setuptools; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-setuptools; extra == "types" + cat /builddir/build/BUILD/python-xarray-2025.12.0-build/python-xarray-2025.12.0-2.fc44.aarch64-pyproject-buildrequires + rm -rfv xarray-2025.12.0.dist-info/ removed 'xarray-2025.12.0.dist-info/licenses/LICENSE' removed directory 'xarray-2025.12.0.dist-info/licenses' removed 'xarray-2025.12.0.dist-info/METADATA' removed 'xarray-2025.12.0.dist-info/entry_points.txt' removed 'xarray-2025.12.0.dist-info/top_level.txt' removed directory 'xarray-2025.12.0.dist-info/' + RPM_EC=0 ++ jobs -p + exit 0 Wrote: /builddir/build/SRPMS/python-xarray-2025.12.0-2.fc44.buildreqs.nosrc.rpm INFO: Going to install missing dynamic buildrequires Updating and loading repositories: Copr repository 100% | 2.8 KiB/s | 1.5 KiB | 00m01s fedora 100% | 14.3 KiB/s | 11.7 KiB | 00m01s Repositories loaded. Package "pyproject-rpm-macros-1.18.6-2.fc44.noarch" is already installed. Package "python3-devel-3.14.2-3.fc44.aarch64" is already installed. Package "python3-Bottleneck-1.6.0-2.fc44.aarch64" is already installed. Package "python3-dask+array-2025.12.0-3.fc44.noarch" is already installed. Package "python3-dask+dataframe-2025.12.0-3.fc44.noarch" is already installed. Package "python3-fsspec-2026.1.0-2.fc44.noarch" is already installed. Package "python3-numpy-1:2.4.2-1.fc44.aarch64" is already installed. Package "python3-packaging-25.0-8.fc44.noarch" is already installed. Package "python3-packaging-25.0-8.fc44.noarch" is already installed. Package "python3-pandas-3.0.0-0.fc44.aarch64" is already installed. Package "python3-pint-0.25.2-2.fc44.noarch" is already installed. Package "python3-pip-25.3-2.fc44.noarch" is already installed. Package "python3-pytest-8.4.2-2.fc44.noarch" is already installed. Package "python3-pytest-asyncio-1.1.0-3.fc44.noarch" is already installed. Package "python3-pytest-timeout-2.4.0-6.fc44.noarch" is already installed. Package "python3-pytest-xdist-3.7.0-6.fc44.noarch" is already installed. Package "python3-rasterio-1.5.0-3.fc44.aarch64" is already installed. Package "python3-seaborn-0.13.2-15.fc44.noarch" is already installed. Package "python3-setuptools-80.10.2-1.fc44.noarch" is already installed. Package "python3-setuptools_scm-9.2.2-5.fc44.noarch" is already installed. Package Arch Version Repository Size Installing: python3-cftime aarch64 0:1.6.5-2.fc44 fedora 2.8 MiB python3-h5netcdf noarch 0:1.7.3-2.fc44 fedora 781.4 KiB python3-netcdf4 aarch64 0:1.7.3-2.fc44 fedora 2.1 MiB python3-pooch noarch 0:1.9.0-1.fc44 fedora 657.1 KiB python3-scipy aarch64 0:1.16.2-3.fc44 fedora 63.3 MiB python3-zarr noarch 0:2.18.7-7.fc44 fedora 3.3 MiB Installing dependencies: liblzf aarch64 0:3.6-34.fc44 fedora 153.3 KiB python3-asciitree noarch 0:0.3.3-37.fc44 fedora 20.7 KiB python3-cached_property noarch 0:2.0.1-7.fc44 fedora 35.2 KiB python3-fasteners noarch 0:0.20-4.fc44 fedora 117.2 KiB python3-h5py aarch64 0:3.15.1-3.fc44 fedora 4.5 MiB python3-numcodecs aarch64 0:0.16.5-2.fc44 fedora 1.9 MiB Transaction Summary: Installing: 12 packages Total size of inbound packages is 19 MiB. Need to download 19 MiB. After this operation, 80 MiB extra will be used (install 80 MiB, remove 0 B). [ 1/12] python3-cftime-0:1.6.5-2.fc44.a 100% | 3.3 MiB/s | 405.4 KiB | 00m00s [ 2/12] python3-h5netcdf-0:1.7.3-2.fc44 100% | 1.2 MiB/s | 162.1 KiB | 00m00s [ 3/12] python3-netcdf4-0:1.7.3-2.fc44. 100% | 3.2 MiB/s | 595.5 KiB | 00m00s [ 4/12] python3-pooch-0:1.9.0-1.fc44.no 100% | 1.6 MiB/s | 145.9 KiB | 00m00s [ 5/12] python3-zarr-0:2.18.7-7.fc44.no 100% | 4.3 MiB/s | 571.5 KiB | 00m00s [ 6/12] python3-asciitree-0:0.3.3-37.fc 100% | 394.3 KiB/s | 18.5 KiB | 00m00s [ 7/12] python3-h5py-0:3.15.1-3.fc44.aa 100% | 6.4 MiB/s | 1.0 MiB | 00m00s [ 8/12] python3-fasteners-0:0.20-4.fc44 100% | 948.9 KiB/s | 51.2 KiB | 00m00s [ 9/12] liblzf-0:3.6-34.fc44.aarch64 100% | 813.6 KiB/s | 27.7 KiB | 00m00s [10/12] python3-cached_property-0:2.0.1 100% | 892.7 KiB/s | 20.5 KiB | 00m00s [11/12] python3-numcodecs-0:0.16.5-2.fc 100% | 3.6 MiB/s | 440.7 KiB | 00m00s [12/12] python3-scipy-0:1.16.2-3.fc44.a 100% | 7.6 MiB/s | 15.2 MiB | 00m02s -------------------------------------------------------------------------------- [12/12] Total 100% | 8.7 MiB/s | 18.7 MiB | 00m02s Running transaction [ 1/14] Verify package files 100% | 200.0 B/s | 12.0 B | 00m00s [ 2/14] Prepare transaction 100% | 166.0 B/s | 12.0 B | 00m00s [ 3/14] Installing python3-cached_prope 100% | 18.6 MiB/s | 38.2 KiB | 00m00s [ 4/14] Installing liblzf-0:3.6-34.fc44 100% | 8.4 MiB/s | 155.6 KiB | 00m00s [ 5/14] Installing python3-h5py-0:3.15. 100% | 238.9 MiB/s | 4.5 MiB | 00m00s [ 6/14] Installing python3-numcodecs-0: 100% | 148.0 MiB/s | 1.9 MiB | 00m00s [ 7/14] Installing python3-fasteners-0: 100% | 61.2 MiB/s | 125.3 KiB | 00m00s [ 8/14] Installing python3-asciitree-0: 100% | 12.1 MiB/s | 24.9 KiB | 00m00s [ 9/14] Installing python3-pooch-0:1.9. 100% | 109.6 MiB/s | 673.1 KiB | 00m00s [10/14] Installing python3-cftime-0:1.6 100% | 405.5 MiB/s | 2.8 MiB | 00m00s [11/14] Installing python3-netcdf4-0:1. 100% | 164.1 MiB/s | 2.1 MiB | 00m00s [12/14] Installing python3-scipy-0:1.16 100% | 273.7 MiB/s | 63.8 MiB | 00m00s [13/14] Installing python3-zarr-0:2.18. 100% | 255.2 MiB/s | 3.3 MiB | 00m00s [14/14] Installing python3-h5netcdf-0:1 100% | 22.0 MiB/s | 789.2 KiB | 00m00s Complete! Building target platforms: aarch64 Building for target aarch64 setting SOURCE_DATE_EPOCH=1768608000 Executing(%generate_buildrequires): /bin/sh -e /var/tmp/rpm-tmp.frDcsZ + umask 022 + cd /builddir/build/BUILD/python-xarray-2025.12.0-build + cd xarray-2025.12.0 + echo pyproject-rpm-macros + echo python3-devel + echo 'python3dist(packaging)' + echo 'python3dist(pip) >= 19' + '[' -f pyproject.toml ']' + echo '(python3dist(tomli) if python3-devel < 3.11)' + rm -rfv '*.dist-info/' + '[' -f /usr/bin/python3 ']' + mkdir -p /builddir/build/BUILD/python-xarray-2025.12.0-build/.pyproject-builddir + echo -n + CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + VALAFLAGS=-g + RUSTFLAGS='-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Cforce-frame-pointers=yes --cap-lints=warn' + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 ' + LT_SYS_LIBRARY_PATH=/usr/lib64: + CC=gcc + CXX=g++ + TMPDIR=/builddir/build/BUILD/python-xarray-2025.12.0-build/.pyproject-builddir + RPM_TOXENV=py314 + FEDORA=44 + HOSTNAME=rpmbuild + /usr/bin/python3 -Bs /usr/lib/rpm/redhat/pyproject_buildrequires.py --generate-extras --python3_pkgversion 3 --wheeldir /builddir/build/BUILD/python-xarray-2025.12.0-build/pyproject-wheeldir --output /builddir/build/BUILD/python-xarray-2025.12.0-build/python-xarray-2025.12.0-2.fc44.aarch64-pyproject-buildrequires -x io Handling setuptools>=77.0.3 from build-system.requires Requirement satisfied: setuptools>=77.0.3 (installed: setuptools 80.10.2) Handling setuptools-scm>=8 from build-system.requires Requirement satisfied: setuptools-scm>=8 (installed: setuptools-scm 9.2.2) /usr/lib/python3.14/site-packages/setuptools_scm/git.py:427: UserWarning: git archive did not support describe output warnings.warn("git archive did not support describe output") /usr/lib/python3.14/site-packages/setuptools_scm/git.py:445: UserWarning: unprocessed git archival found (no export subst applied) warnings.warn("unprocessed git archival found (no export subst applied)") running egg_info writing xarray.egg-info/PKG-INFO writing dependency_links to xarray.egg-info/dependency_links.txt writing entry points to xarray.egg-info/entry_points.txt writing requirements to xarray.egg-info/requires.txt writing top-level names to xarray.egg-info/top_level.txt reading manifest file 'xarray.egg-info/SOURCES.txt' adding license file 'LICENSE' writing manifest file 'xarray.egg-info/SOURCES.txt' /usr/lib/python3.14/site-packages/setuptools_scm/git.py:427: UserWarning: git archive did not support describe output warnings.warn("git archive did not support describe output") /usr/lib/python3.14/site-packages/setuptools_scm/git.py:445: UserWarning: unprocessed git archival found (no export subst applied) warnings.warn("unprocessed git archival found (no export subst applied)") running dist_info writing xarray.egg-info/PKG-INFO writing dependency_links to xarray.egg-info/dependency_links.txt writing entry points to xarray.egg-info/entry_points.txt writing requirements to xarray.egg-info/requires.txt writing top-level names to xarray.egg-info/top_level.txt reading manifest file 'xarray.egg-info/SOURCES.txt' adding license file 'LICENSE' writing manifest file 'xarray.egg-info/SOURCES.txt' creating '/builddir/build/BUILD/python-xarray-2025.12.0-build/xarray-2025.12.0/xarray-2025.12.0.dist-info' Handling numpy>=1.26 from hook generated metadata: Requires-Dist (xarray) Requirement satisfied: numpy>=1.26 (installed: numpy 2.4.2) Handling packaging>=24.1 from hook generated metadata: Requires-Dist (xarray) Requirement satisfied: packaging>=24.1 (installed: packaging 25.0) Handling pandas>=2.2 from hook generated metadata: Requires-Dist (xarray) Requirement satisfied: pandas>=2.2 (installed: pandas 3.0.0) Handling scipy>=1.13; extra == "accel" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: scipy>=1.13; extra == "accel" Handling bottleneck; extra == "accel" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: bottleneck; extra == "accel" Handling numbagg>=0.8; extra == "accel" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: numbagg>=0.8; extra == "accel" Handling numba>=0.62; extra == "accel" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: numba>=0.62; extra == "accel" Handling flox>=0.9; extra == "accel" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: flox>=0.9; extra == "accel" Handling opt_einsum; extra == "accel" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: opt_einsum; extra == "accel" Handling xarray[accel,etc,io,parallel,viz]; extra == "complete" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: xarray[accel,etc,io,parallel,viz]; extra == "complete" Handling netCDF4>=1.6.0; extra == "io" from hook generated metadata: Requires-Dist (xarray) Requirement satisfied: netCDF4>=1.6.0; extra == "io" (installed: netCDF4 1.7.3) Handling h5netcdf; extra == "io" from hook generated metadata: Requires-Dist (xarray) Requirement satisfied: h5netcdf; extra == "io" (installed: h5netcdf 1.7.3) Handling scipy>=1.13; extra == "io" from hook generated metadata: Requires-Dist (xarray) Requirement satisfied: scipy>=1.13; extra == "io" (installed: scipy 1.16.2) Handling zarr>=2.18; extra == "io" from hook generated metadata: Requires-Dist (xarray) Requirement satisfied: zarr>=2.18; extra == "io" (installed: zarr 2.18.7) Handling fsspec; extra == "io" from hook generated metadata: Requires-Dist (xarray) Requirement satisfied: fsspec; extra == "io" (installed: fsspec 2026.1.0) Handling cftime; extra == "io" from hook generated metadata: Requires-Dist (xarray) Requirement satisfied: cftime; extra == "io" (installed: cftime 1.6.5) Handling pooch; extra == "io" from hook generated metadata: Requires-Dist (xarray) Requirement satisfied: pooch; extra == "io" (installed: pooch 1.9.0) Handling sparse>=0.15; extra == "etc" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: sparse>=0.15; extra == "etc" Handling dask[complete]; extra == "parallel" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: dask[complete]; extra == "parallel" Handling cartopy>=0.23; extra == "viz" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: cartopy>=0.23; extra == "viz" Handling matplotlib>=3.8; extra == "viz" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: matplotlib>=3.8; extra == "viz" Handling nc-time-axis; extra == "viz" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: nc-time-axis; extra == "viz" Handling seaborn; extra == "viz" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: seaborn; extra == "viz" Handling pandas-stubs; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: pandas-stubs; extra == "types" Handling scipy-stubs; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: scipy-stubs; extra == "types" Handling types-PyYAML; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-PyYAML; extra == "types" Handling types-Pygments; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-Pygments; extra == "types" Handling types-colorama; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-colorama; extra == "types" Handling types-decorator; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-decorator; extra == "types" Handling types-defusedxml; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-defusedxml; extra == "types" Handling types-docutils; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-docutils; extra == "types" Handling types-networkx; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-networkx; extra == "types" Handling types-pexpect; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-pexpect; extra == "types" Handling types-psutil; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-psutil; extra == "types" Handling types-pycurl; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-pycurl; extra == "types" Handling types-openpyxl; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-openpyxl; extra == "types" Handling types-python-dateutil; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-python-dateutil; extra == "types" Handling types-pytz; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-pytz; extra == "types" Handling types-requests; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-requests; extra == "types" Handling types-setuptools; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-setuptools; extra == "types" + cat /builddir/build/BUILD/python-xarray-2025.12.0-build/python-xarray-2025.12.0-2.fc44.aarch64-pyproject-buildrequires + rm -rfv xarray-2025.12.0.dist-info/ removed 'xarray-2025.12.0.dist-info/licenses/LICENSE' removed directory 'xarray-2025.12.0.dist-info/licenses' removed 'xarray-2025.12.0.dist-info/METADATA' removed 'xarray-2025.12.0.dist-info/top_level.txt' removed 'xarray-2025.12.0.dist-info/entry_points.txt' removed directory 'xarray-2025.12.0.dist-info/' + RPM_EC=0 ++ jobs -p + exit 0 Wrote: /builddir/build/SRPMS/python-xarray-2025.12.0-2.fc44.buildreqs.nosrc.rpm INFO: Going to install missing dynamic buildrequires Updating and loading repositories: Copr repository 100% | 13.4 KiB/s | 1.5 KiB | 00m00s fedora 100% | 58.4 KiB/s | 11.7 KiB | 00m00s Repositories loaded. Package "pyproject-rpm-macros-1.18.6-2.fc44.noarch" is already installed. Package "python3-devel-3.14.2-3.fc44.aarch64" is already installed. Package "python3-Bottleneck-1.6.0-2.fc44.aarch64" is already installed. Package "python3-cftime-1.6.5-2.fc44.aarch64" is already installed. Package "python3-dask+array-2025.12.0-3.fc44.noarch" is already installed. Package "python3-dask+dataframe-2025.12.0-3.fc44.noarch" is already installed. Package "python3-fsspec-2026.1.0-2.fc44.noarch" is already installed. Package "python3-h5netcdf-1.7.3-2.fc44.noarch" is already installed. Package "python3-netcdf4-1.7.3-2.fc44.aarch64" is already installed. Package "python3-numpy-1:2.4.2-1.fc44.aarch64" is already installed. Package "python3-packaging-25.0-8.fc44.noarch" is already installed. Package "python3-packaging-25.0-8.fc44.noarch" is already installed. Package "python3-pandas-3.0.0-0.fc44.aarch64" is already installed. Package "python3-pint-0.25.2-2.fc44.noarch" is already installed. Package "python3-pip-25.3-2.fc44.noarch" is already installed. Package "python3-pooch-1.9.0-1.fc44.noarch" is already installed. Package "python3-pytest-8.4.2-2.fc44.noarch" is already installed. Package "python3-pytest-asyncio-1.1.0-3.fc44.noarch" is already installed. Package "python3-pytest-timeout-2.4.0-6.fc44.noarch" is already installed. Package "python3-pytest-xdist-3.7.0-6.fc44.noarch" is already installed. Package "python3-rasterio-1.5.0-3.fc44.aarch64" is already installed. Package "python3-scipy-1.16.2-3.fc44.aarch64" is already installed. Package "python3-seaborn-0.13.2-15.fc44.noarch" is already installed. Package "python3-setuptools-80.10.2-1.fc44.noarch" is already installed. Package "python3-setuptools_scm-9.2.2-5.fc44.noarch" is already installed. Package "python3-zarr-2.18.7-7.fc44.noarch" is already installed. Nothing to do. Building target platforms: aarch64 Building for target aarch64 setting SOURCE_DATE_EPOCH=1768608000 Executing(%generate_buildrequires): /bin/sh -e /var/tmp/rpm-tmp.rqWi5s + umask 022 + cd /builddir/build/BUILD/python-xarray-2025.12.0-build + cd xarray-2025.12.0 + echo pyproject-rpm-macros + echo python3-devel + echo 'python3dist(packaging)' + echo 'python3dist(pip) >= 19' + '[' -f pyproject.toml ']' + echo '(python3dist(tomli) if python3-devel < 3.11)' + rm -rfv '*.dist-info/' + '[' -f /usr/bin/python3 ']' + mkdir -p /builddir/build/BUILD/python-xarray-2025.12.0-build/.pyproject-builddir + echo -n + CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + VALAFLAGS=-g + RUSTFLAGS='-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Cforce-frame-pointers=yes --cap-lints=warn' + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 ' + LT_SYS_LIBRARY_PATH=/usr/lib64: + CC=gcc + CXX=g++ + TMPDIR=/builddir/build/BUILD/python-xarray-2025.12.0-build/.pyproject-builddir + RPM_TOXENV=py314 + FEDORA=44 + HOSTNAME=rpmbuild + /usr/bin/python3 -Bs /usr/lib/rpm/redhat/pyproject_buildrequires.py --generate-extras --python3_pkgversion 3 --wheeldir /builddir/build/BUILD/python-xarray-2025.12.0-build/pyproject-wheeldir --output /builddir/build/BUILD/python-xarray-2025.12.0-build/python-xarray-2025.12.0-2.fc44.aarch64-pyproject-buildrequires -x io Handling setuptools>=77.0.3 from build-system.requires Requirement satisfied: setuptools>=77.0.3 (installed: setuptools 80.10.2) Handling setuptools-scm>=8 from build-system.requires Requirement satisfied: setuptools-scm>=8 (installed: setuptools-scm 9.2.2) /usr/lib/python3.14/site-packages/setuptools_scm/git.py:427: UserWarning: git archive did not support describe output warnings.warn("git archive did not support describe output") /usr/lib/python3.14/site-packages/setuptools_scm/git.py:445: UserWarning: unprocessed git archival found (no export subst applied) warnings.warn("unprocessed git archival found (no export subst applied)") running egg_info writing xarray.egg-info/PKG-INFO writing dependency_links to xarray.egg-info/dependency_links.txt writing entry points to xarray.egg-info/entry_points.txt writing requirements to xarray.egg-info/requires.txt writing top-level names to xarray.egg-info/top_level.txt reading manifest file 'xarray.egg-info/SOURCES.txt' adding license file 'LICENSE' writing manifest file 'xarray.egg-info/SOURCES.txt' /usr/lib/python3.14/site-packages/setuptools_scm/git.py:427: UserWarning: git archive did not support describe output warnings.warn("git archive did not support describe output") /usr/lib/python3.14/site-packages/setuptools_scm/git.py:445: UserWarning: unprocessed git archival found (no export subst applied) warnings.warn("unprocessed git archival found (no export subst applied)") running dist_info writing xarray.egg-info/PKG-INFO writing dependency_links to xarray.egg-info/dependency_links.txt writing entry points to xarray.egg-info/entry_points.txt writing requirements to xarray.egg-info/requires.txt writing top-level names to xarray.egg-info/top_level.txt reading manifest file 'xarray.egg-info/SOURCES.txt' adding license file 'LICENSE' writing manifest file 'xarray.egg-info/SOURCES.txt' creating '/builddir/build/BUILD/python-xarray-2025.12.0-build/xarray-2025.12.0/xarray-2025.12.0.dist-info' Handling numpy>=1.26 from hook generated metadata: Requires-Dist (xarray) Requirement satisfied: numpy>=1.26 (installed: numpy 2.4.2) Handling packaging>=24.1 from hook generated metadata: Requires-Dist (xarray) Requirement satisfied: packaging>=24.1 (installed: packaging 25.0) Handling pandas>=2.2 from hook generated metadata: Requires-Dist (xarray) Requirement satisfied: pandas>=2.2 (installed: pandas 3.0.0) Handling scipy>=1.13; extra == "accel" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: scipy>=1.13; extra == "accel" Handling bottleneck; extra == "accel" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: bottleneck; extra == "accel" Handling numbagg>=0.8; extra == "accel" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: numbagg>=0.8; extra == "accel" Handling numba>=0.62; extra == "accel" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: numba>=0.62; extra == "accel" Handling flox>=0.9; extra == "accel" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: flox>=0.9; extra == "accel" Handling opt_einsum; extra == "accel" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: opt_einsum; extra == "accel" Handling xarray[accel,etc,io,parallel,viz]; extra == "complete" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: xarray[accel,etc,io,parallel,viz]; extra == "complete" Handling netCDF4>=1.6.0; extra == "io" from hook generated metadata: Requires-Dist (xarray) Requirement satisfied: netCDF4>=1.6.0; extra == "io" (installed: netCDF4 1.7.3) Handling h5netcdf; extra == "io" from hook generated metadata: Requires-Dist (xarray) Requirement satisfied: h5netcdf; extra == "io" (installed: h5netcdf 1.7.3) Handling scipy>=1.13; extra == "io" from hook generated metadata: Requires-Dist (xarray) Requirement satisfied: scipy>=1.13; extra == "io" (installed: scipy 1.16.2) Handling zarr>=2.18; extra == "io" from hook generated metadata: Requires-Dist (xarray) Requirement satisfied: zarr>=2.18; extra == "io" (installed: zarr 2.18.7) Handling fsspec; extra == "io" from hook generated metadata: Requires-Dist (xarray) Requirement satisfied: fsspec; extra == "io" (installed: fsspec 2026.1.0) Handling cftime; extra == "io" from hook generated metadata: Requires-Dist (xarray) Requirement satisfied: cftime; extra == "io" (installed: cftime 1.6.5) Handling pooch; extra == "io" from hook generated metadata: Requires-Dist (xarray) Requirement satisfied: pooch; extra == "io" (installed: pooch 1.9.0) Handling sparse>=0.15; extra == "etc" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: sparse>=0.15; extra == "etc" Handling dask[complete]; extra == "parallel" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: dask[complete]; extra == "parallel" Handling cartopy>=0.23; extra == "viz" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: cartopy>=0.23; extra == "viz" Handling matplotlib>=3.8; extra == "viz" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: matplotlib>=3.8; extra == "viz" Handling nc-time-axis; extra == "viz" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: nc-time-axis; extra == "viz" Handling seaborn; extra == "viz" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: seaborn; extra == "viz" Handling pandas-stubs; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: pandas-stubs; extra == "types" Handling scipy-stubs; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: scipy-stubs; extra == "types" Handling types-PyYAML; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-PyYAML; extra == "types" Handling types-Pygments; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-Pygments; extra == "types" Handling types-colorama; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-colorama; extra == "types" Handling types-decorator; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-decorator; extra == "types" Handling types-defusedxml; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-defusedxml; extra == "types" Handling types-docutils; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-docutils; extra == "types" Handling types-networkx; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-networkx; extra == "types" Handling types-pexpect; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-pexpect; extra == "types" Handling types-psutil; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-psutil; extra == "types" Handling types-pycurl; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-pycurl; extra == "types" Handling types-openpyxl; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-openpyxl; extra == "types" Handling types-python-dateutil; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-python-dateutil; extra == "types" Handling types-pytz; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-pytz; extra == "types" Handling types-requests; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-requests; extra == "types" Handling types-setuptools; extra == "types" from hook generated metadata: Requires-Dist (xarray) Ignoring alien requirement: types-setuptools; extra == "types" + cat /builddir/build/BUILD/python-xarray-2025.12.0-build/python-xarray-2025.12.0-2.fc44.aarch64-pyproject-buildrequires + rm -rfv xarray-2025.12.0.dist-info/ removed 'xarray-2025.12.0.dist-info/licenses/LICENSE' removed directory 'xarray-2025.12.0.dist-info/licenses' removed 'xarray-2025.12.0.dist-info/METADATA' removed 'xarray-2025.12.0.dist-info/entry_points.txt' removed 'xarray-2025.12.0.dist-info/top_level.txt' removed directory 'xarray-2025.12.0.dist-info/' + RPM_EC=0 ++ jobs -p + exit 0 Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.6kt43j + umask 022 + cd /builddir/build/BUILD/python-xarray-2025.12.0-build + CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + export CFLAGS + CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + export CXXFLAGS + FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + export FFLAGS + FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + export FCFLAGS + VALAFLAGS=-g + export VALAFLAGS + RUSTFLAGS='-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Cforce-frame-pointers=yes -Clink-arg=-specs=/usr/lib/rpm/redhat/redhat-package-notes --cap-lints=warn' + export RUSTFLAGS + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes ' + export LDFLAGS + LT_SYS_LIBRARY_PATH=/usr/lib64: + export LT_SYS_LIBRARY_PATH + CC=gcc + export CC + CXX=g++ + export CXX + cd xarray-2025.12.0 + mkdir -p /builddir/build/BUILD/python-xarray-2025.12.0-build/.pyproject-builddir + CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + VALAFLAGS=-g + RUSTFLAGS='-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Cforce-frame-pointers=yes -Clink-arg=-specs=/usr/lib/rpm/redhat/redhat-package-notes --cap-lints=warn' + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes ' + LT_SYS_LIBRARY_PATH=/usr/lib64: + CC=gcc + CXX=g++ + TMPDIR=/builddir/build/BUILD/python-xarray-2025.12.0-build/.pyproject-builddir + /usr/bin/python3 -Bs /usr/lib/rpm/redhat/pyproject_wheel.py /builddir/build/BUILD/python-xarray-2025.12.0-build/pyproject-wheeldir Processing /builddir/build/BUILD/python-xarray-2025.12.0-build/xarray-2025.12.0 Preparing metadata (pyproject.toml): started Running command Preparing metadata (pyproject.toml) /usr/lib/python3.14/site-packages/setuptools_scm/git.py:427: UserWarning: git archive did not support describe output warnings.warn("git archive did not support describe output") /usr/lib/python3.14/site-packages/setuptools_scm/git.py:445: UserWarning: unprocessed git archival found (no export subst applied) warnings.warn("unprocessed git archival found (no export subst applied)") running dist_info creating /builddir/build/BUILD/python-xarray-2025.12.0-build/.pyproject-builddir/pip-modern-metadata-8ooeo43o/xarray.egg-info writing /builddir/build/BUILD/python-xarray-2025.12.0-build/.pyproject-builddir/pip-modern-metadata-8ooeo43o/xarray.egg-info/PKG-INFO writing dependency_links to /builddir/build/BUILD/python-xarray-2025.12.0-build/.pyproject-builddir/pip-modern-metadata-8ooeo43o/xarray.egg-info/dependency_links.txt writing entry points to /builddir/build/BUILD/python-xarray-2025.12.0-build/.pyproject-builddir/pip-modern-metadata-8ooeo43o/xarray.egg-info/entry_points.txt writing requirements to /builddir/build/BUILD/python-xarray-2025.12.0-build/.pyproject-builddir/pip-modern-metadata-8ooeo43o/xarray.egg-info/requires.txt writing top-level names to /builddir/build/BUILD/python-xarray-2025.12.0-build/.pyproject-builddir/pip-modern-metadata-8ooeo43o/xarray.egg-info/top_level.txt writing manifest file '/builddir/build/BUILD/python-xarray-2025.12.0-build/.pyproject-builddir/pip-modern-metadata-8ooeo43o/xarray.egg-info/SOURCES.txt' reading manifest file '/builddir/build/BUILD/python-xarray-2025.12.0-build/.pyproject-builddir/pip-modern-metadata-8ooeo43o/xarray.egg-info/SOURCES.txt' adding license file 'LICENSE' writing manifest file '/builddir/build/BUILD/python-xarray-2025.12.0-build/.pyproject-builddir/pip-modern-metadata-8ooeo43o/xarray.egg-info/SOURCES.txt' creating '/builddir/build/BUILD/python-xarray-2025.12.0-build/.pyproject-builddir/pip-modern-metadata-8ooeo43o/xarray-2025.12.0.dist-info' Preparing metadata (pyproject.toml): finished with status 'done' Building wheels for collected packages: xarray Building wheel for xarray (pyproject.toml): started Running command Building wheel for xarray (pyproject.toml) /usr/lib/python3.14/site-packages/setuptools_scm/git.py:427: UserWarning: git archive did not support describe output warnings.warn("git archive did not support describe output") /usr/lib/python3.14/site-packages/setuptools_scm/git.py:445: UserWarning: unprocessed git archival found (no export subst applied) warnings.warn("unprocessed git archival found (no export subst applied)") running bdist_wheel running build running build_py creating build/lib/xarray copying xarray/ufuncs.py -> build/lib/xarray copying xarray/typing.py -> build/lib/xarray copying xarray/tutorial.py -> build/lib/xarray copying xarray/groupers.py -> build/lib/xarray copying xarray/convert.py -> build/lib/xarray copying xarray/conventions.py -> build/lib/xarray copying xarray/coders.py -> build/lib/xarray copying xarray/__init__.py -> build/lib/xarray creating build/lib/xarray/util copying xarray/util/print_versions.py -> build/lib/xarray/util copying xarray/util/generate_ops.py -> build/lib/xarray/util copying xarray/util/generate_aggregations.py -> build/lib/xarray/util copying xarray/util/deprecation_helpers.py -> build/lib/xarray/util copying xarray/util/__init__.py -> build/lib/xarray/util creating build/lib/xarray/tests copying xarray/tests/test_backends.py -> build/lib/xarray/tests copying xarray/tests/test_weighted.py -> build/lib/xarray/tests copying xarray/tests/test_variable.py -> build/lib/xarray/tests copying xarray/tests/test_utils.py -> build/lib/xarray/tests copying xarray/tests/test_units.py -> build/lib/xarray/tests copying xarray/tests/test_ufuncs.py -> build/lib/xarray/tests copying xarray/tests/test_typed_ops.py -> build/lib/xarray/tests copying xarray/tests/test_tutorial.py -> build/lib/xarray/tests copying xarray/tests/test_treenode.py -> build/lib/xarray/tests copying xarray/tests/test_strategies.py -> build/lib/xarray/tests copying xarray/tests/test_sparse.py -> build/lib/xarray/tests copying xarray/tests/test_rolling.py -> build/lib/xarray/tests copying xarray/tests/test_range_index.py -> build/lib/xarray/tests copying xarray/tests/test_print_versions.py -> build/lib/xarray/tests copying xarray/tests/test_plugins.py -> build/lib/xarray/tests copying xarray/tests/test_plot.py -> build/lib/xarray/tests copying xarray/tests/test_parallelcompat.py -> build/lib/xarray/tests copying xarray/tests/test_pandas_to_xarray.py -> build/lib/xarray/tests copying xarray/tests/test_options.py -> build/lib/xarray/tests copying xarray/tests/test_nputils.py -> build/lib/xarray/tests copying xarray/tests/test_nd_point_index.py -> build/lib/xarray/tests copying xarray/tests/test_namedarray.py -> build/lib/xarray/tests copying xarray/tests/test_missing.py -> build/lib/xarray/tests copying xarray/tests/test_merge.py -> build/lib/xarray/tests copying xarray/tests/test_interp.py -> build/lib/xarray/tests copying xarray/tests/test_indexing.py -> build/lib/xarray/tests copying xarray/tests/test_indexes.py -> build/lib/xarray/tests copying xarray/tests/test_hashable.py -> build/lib/xarray/tests copying xarray/tests/test_groupby.py -> build/lib/xarray/tests copying xarray/tests/test_formatting_html.py -> build/lib/xarray/tests copying xarray/tests/test_formatting.py -> build/lib/xarray/tests copying xarray/tests/test_extensions.py -> build/lib/xarray/tests copying xarray/tests/test_error_messages.py -> build/lib/xarray/tests copying xarray/tests/test_duck_array_wrapping.py -> build/lib/xarray/tests copying xarray/tests/test_duck_array_ops.py -> build/lib/xarray/tests copying xarray/tests/test_dtypes.py -> build/lib/xarray/tests copying xarray/tests/test_distributed.py -> build/lib/xarray/tests copying xarray/tests/test_deprecation_helpers.py -> build/lib/xarray/tests copying xarray/tests/test_datatree_mapping.py -> build/lib/xarray/tests copying xarray/tests/test_datatree.py -> build/lib/xarray/tests copying xarray/tests/test_dataset.py -> build/lib/xarray/tests copying xarray/tests/test_dataarray.py -> build/lib/xarray/tests copying xarray/tests/test_dask.py -> build/lib/xarray/tests copying xarray/tests/test_cupy.py -> build/lib/xarray/tests copying xarray/tests/test_coordinates.py -> build/lib/xarray/tests copying xarray/tests/test_coordinate_transform.py -> build/lib/xarray/tests copying xarray/tests/test_conventions.py -> build/lib/xarray/tests copying xarray/tests/test_concat.py -> build/lib/xarray/tests copying xarray/tests/test_computation.py -> build/lib/xarray/tests copying xarray/tests/test_combine.py -> build/lib/xarray/tests copying xarray/tests/test_coding_times.py -> build/lib/xarray/tests copying xarray/tests/test_coding_strings.py -> build/lib/xarray/tests copying xarray/tests/test_coding.py -> build/lib/xarray/tests copying xarray/tests/test_coarsen.py -> build/lib/xarray/tests copying xarray/tests/test_cftimeindex_resample.py -> build/lib/xarray/tests copying xarray/tests/test_cftimeindex.py -> build/lib/xarray/tests copying xarray/tests/test_cftime_offsets.py -> build/lib/xarray/tests copying xarray/tests/test_calendar_ops.py -> build/lib/xarray/tests copying xarray/tests/test_backends_lru_cache.py -> build/lib/xarray/tests copying xarray/tests/test_backends_locks.py -> build/lib/xarray/tests copying xarray/tests/test_backends_file_manager.py -> build/lib/xarray/tests copying xarray/tests/test_backends_datatree.py -> build/lib/xarray/tests copying xarray/tests/test_backends_common.py -> build/lib/xarray/tests copying xarray/tests/test_backends_chunks.py -> build/lib/xarray/tests copying xarray/tests/test_backends_api.py -> build/lib/xarray/tests copying xarray/tests/test_assertions.py -> build/lib/xarray/tests copying xarray/tests/test_array_api.py -> build/lib/xarray/tests copying xarray/tests/test_accessor_str.py -> build/lib/xarray/tests copying xarray/tests/test_accessor_dt.py -> build/lib/xarray/tests copying xarray/tests/namespace.py -> build/lib/xarray/tests copying xarray/tests/indexes.py -> build/lib/xarray/tests copying xarray/tests/conftest.py -> build/lib/xarray/tests copying xarray/tests/arrays.py -> build/lib/xarray/tests copying xarray/tests/__init__.py -> build/lib/xarray/tests creating build/lib/xarray/testing copying xarray/testing/strategies.py -> build/lib/xarray/testing copying xarray/testing/assertions.py -> build/lib/xarray/testing copying xarray/testing/__init__.py -> build/lib/xarray/testing creating build/lib/xarray/structure copying xarray/structure/merge.py -> build/lib/xarray/structure copying xarray/structure/concat.py -> build/lib/xarray/structure copying xarray/structure/combine.py -> build/lib/xarray/structure copying xarray/structure/chunks.py -> build/lib/xarray/structure copying xarray/structure/alignment.py -> build/lib/xarray/structure copying xarray/structure/__init__.py -> build/lib/xarray/structure creating build/lib/xarray/static copying xarray/static/__init__.py -> build/lib/xarray/static creating build/lib/xarray/plot copying xarray/plot/utils.py -> build/lib/xarray/plot copying xarray/plot/facetgrid.py -> build/lib/xarray/plot copying xarray/plot/dataset_plot.py -> build/lib/xarray/plot copying xarray/plot/dataarray_plot.py -> build/lib/xarray/plot copying xarray/plot/accessor.py -> build/lib/xarray/plot copying xarray/plot/__init__.py -> build/lib/xarray/plot creating build/lib/xarray/namedarray copying xarray/namedarray/utils.py -> build/lib/xarray/namedarray copying xarray/namedarray/pycompat.py -> build/lib/xarray/namedarray copying xarray/namedarray/parallelcompat.py -> build/lib/xarray/namedarray copying xarray/namedarray/dtypes.py -> build/lib/xarray/namedarray copying xarray/namedarray/daskmanager.py -> build/lib/xarray/namedarray copying xarray/namedarray/core.py -> build/lib/xarray/namedarray copying xarray/namedarray/_typing.py -> build/lib/xarray/namedarray copying xarray/namedarray/_array_api.py -> build/lib/xarray/namedarray copying xarray/namedarray/_aggregations.py -> build/lib/xarray/namedarray copying xarray/namedarray/__init__.py -> build/lib/xarray/namedarray creating build/lib/xarray/indexes copying xarray/indexes/range_index.py -> build/lib/xarray/indexes copying xarray/indexes/nd_point_index.py -> build/lib/xarray/indexes copying xarray/indexes/__init__.py -> build/lib/xarray/indexes creating build/lib/xarray/core copying xarray/core/variable.py -> build/lib/xarray/core copying xarray/core/utils.py -> build/lib/xarray/core copying xarray/core/types.py -> build/lib/xarray/core copying xarray/core/treenode.py -> build/lib/xarray/core copying xarray/core/resample_cftime.py -> build/lib/xarray/core copying xarray/core/resample.py -> build/lib/xarray/core copying xarray/core/parallel.py -> build/lib/xarray/core copying xarray/core/options.py -> build/lib/xarray/core copying xarray/core/nputils.py -> build/lib/xarray/core copying xarray/core/missing.py -> build/lib/xarray/core copying xarray/core/indexing.py -> build/lib/xarray/core copying xarray/core/indexes.py -> build/lib/xarray/core copying xarray/core/groupby.py -> build/lib/xarray/core copying xarray/core/formatting_html.py -> build/lib/xarray/core copying xarray/core/formatting.py -> build/lib/xarray/core copying xarray/core/extensions.py -> build/lib/xarray/core copying xarray/core/extension_array.py -> build/lib/xarray/core copying xarray/core/duck_array_ops.py -> build/lib/xarray/core copying xarray/core/dtypes.py -> build/lib/xarray/core copying xarray/core/datatree_render.py -> build/lib/xarray/core copying xarray/core/datatree_mapping.py -> build/lib/xarray/core copying xarray/core/datatree.py -> build/lib/xarray/core copying xarray/core/dataset_variables.py -> build/lib/xarray/core copying xarray/core/dataset_utils.py -> build/lib/xarray/core copying xarray/core/dataset.py -> build/lib/xarray/core copying xarray/core/dataarray.py -> build/lib/xarray/core copying xarray/core/coordinates.py -> build/lib/xarray/core copying xarray/core/coordinate_transform.py -> build/lib/xarray/core copying xarray/core/common.py -> build/lib/xarray/core copying xarray/core/accessor_str.py -> build/lib/xarray/core copying xarray/core/accessor_dt.py -> build/lib/xarray/core copying xarray/core/_typed_ops.py -> build/lib/xarray/core copying xarray/core/_aggregations.py -> build/lib/xarray/core copying xarray/core/__init__.py -> build/lib/xarray/core creating build/lib/xarray/computation copying xarray/computation/weighted.py -> build/lib/xarray/computation copying xarray/computation/rolling_exp.py -> build/lib/xarray/computation copying xarray/computation/rolling.py -> build/lib/xarray/computation copying xarray/computation/ops.py -> build/lib/xarray/computation copying xarray/computation/nanops.py -> build/lib/xarray/computation copying xarray/computation/fit.py -> build/lib/xarray/computation copying xarray/computation/computation.py -> build/lib/xarray/computation copying xarray/computation/arithmetic.py -> build/lib/xarray/computation copying xarray/computation/apply_ufunc.py -> build/lib/xarray/computation copying xarray/computation/__init__.py -> build/lib/xarray/computation creating build/lib/xarray/compat copying xarray/compat/toolzcompat.py -> build/lib/xarray/compat copying xarray/compat/pdcompat.py -> build/lib/xarray/compat copying xarray/compat/npcompat.py -> build/lib/xarray/compat copying xarray/compat/dask_array_ops.py -> build/lib/xarray/compat copying xarray/compat/dask_array_compat.py -> build/lib/xarray/compat copying xarray/compat/array_api_compat.py -> build/lib/xarray/compat copying xarray/compat/__init__.py -> build/lib/xarray/compat creating build/lib/xarray/coding copying xarray/coding/variables.py -> build/lib/xarray/coding copying xarray/coding/times.py -> build/lib/xarray/coding copying xarray/coding/strings.py -> build/lib/xarray/coding copying xarray/coding/frequencies.py -> build/lib/xarray/coding copying xarray/coding/common.py -> build/lib/xarray/coding copying xarray/coding/cftimeindex.py -> build/lib/xarray/coding copying xarray/coding/cftime_offsets.py -> build/lib/xarray/coding copying xarray/coding/calendar_ops.py -> build/lib/xarray/coding copying xarray/coding/__init__.py -> build/lib/xarray/coding creating build/lib/xarray/backends copying xarray/backends/netCDF4_.py -> build/lib/xarray/backends copying xarray/backends/locks.py -> build/lib/xarray/backends copying xarray/backends/file_manager.py -> build/lib/xarray/backends copying xarray/backends/zarr.py -> build/lib/xarray/backends copying xarray/backends/writers.py -> build/lib/xarray/backends copying xarray/backends/store.py -> build/lib/xarray/backends copying xarray/backends/scipy_.py -> build/lib/xarray/backends copying xarray/backends/pydap_.py -> build/lib/xarray/backends copying xarray/backends/plugins.py -> build/lib/xarray/backends copying xarray/backends/netcdf3.py -> build/lib/xarray/backends copying xarray/backends/memory.py -> build/lib/xarray/backends copying xarray/backends/lru_cache.py -> build/lib/xarray/backends copying xarray/backends/h5netcdf_.py -> build/lib/xarray/backends copying xarray/backends/common.py -> build/lib/xarray/backends copying xarray/backends/chunks.py -> build/lib/xarray/backends copying xarray/backends/api.py -> build/lib/xarray/backends copying xarray/backends/__init__.py -> build/lib/xarray/backends creating build/lib/xarray/static/html copying xarray/static/html/__init__.py -> build/lib/xarray/static/html creating build/lib/xarray/static/css copying xarray/static/css/__init__.py -> build/lib/xarray/static/css running egg_info writing xarray.egg-info/PKG-INFO writing dependency_links to xarray.egg-info/dependency_links.txt writing entry points to xarray.egg-info/entry_points.txt writing requirements to xarray.egg-info/requires.txt writing top-level names to xarray.egg-info/top_level.txt reading manifest file 'xarray.egg-info/SOURCES.txt' adding license file 'LICENSE' writing manifest file 'xarray.egg-info/SOURCES.txt' copying xarray/py.typed -> build/lib/xarray copying xarray/tests/CLAUDE.md -> build/lib/xarray/tests copying xarray/tests/test_dataarray_typing.yml -> build/lib/xarray/tests copying xarray/tests/test_dataset_typing.yml -> build/lib/xarray/tests copying xarray/tests/test_datatree_typing.yml -> build/lib/xarray/tests creating build/lib/xarray/tests/data copying xarray/tests/data/bears.nc -> build/lib/xarray/tests/data copying xarray/tests/data/example.grib -> build/lib/xarray/tests/data copying xarray/tests/data/example.ict -> build/lib/xarray/tests/data copying xarray/tests/data/example.uamiv -> build/lib/xarray/tests/data copying xarray/tests/data/example_1.nc -> build/lib/xarray/tests/data copying xarray/tests/data/example_1.nc.gz -> build/lib/xarray/tests/data copying xarray/static/html/icons-svg-inline.html -> build/lib/xarray/static/html copying xarray/static/css/style.css -> build/lib/xarray/static/css installing to build/bdist.linux-aarch64/wheel running install running install_lib creating build/bdist.linux-aarch64/wheel creating build/bdist.linux-aarch64/wheel/xarray copying build/lib/xarray/py.typed -> build/bdist.linux-aarch64/wheel/./xarray creating build/bdist.linux-aarch64/wheel/xarray/backends copying build/lib/xarray/backends/__init__.py -> build/bdist.linux-aarch64/wheel/./xarray/backends copying build/lib/xarray/backends/api.py -> build/bdist.linux-aarch64/wheel/./xarray/backends copying build/lib/xarray/backends/chunks.py -> build/bdist.linux-aarch64/wheel/./xarray/backends copying build/lib/xarray/backends/common.py -> build/bdist.linux-aarch64/wheel/./xarray/backends copying build/lib/xarray/backends/h5netcdf_.py -> build/bdist.linux-aarch64/wheel/./xarray/backends copying build/lib/xarray/backends/lru_cache.py -> build/bdist.linux-aarch64/wheel/./xarray/backends copying build/lib/xarray/backends/memory.py -> build/bdist.linux-aarch64/wheel/./xarray/backends copying build/lib/xarray/backends/netcdf3.py -> build/bdist.linux-aarch64/wheel/./xarray/backends copying build/lib/xarray/backends/plugins.py -> build/bdist.linux-aarch64/wheel/./xarray/backends copying build/lib/xarray/backends/pydap_.py -> build/bdist.linux-aarch64/wheel/./xarray/backends copying build/lib/xarray/backends/scipy_.py -> build/bdist.linux-aarch64/wheel/./xarray/backends copying build/lib/xarray/backends/store.py -> build/bdist.linux-aarch64/wheel/./xarray/backends copying build/lib/xarray/backends/writers.py -> build/bdist.linux-aarch64/wheel/./xarray/backends copying build/lib/xarray/backends/zarr.py -> build/bdist.linux-aarch64/wheel/./xarray/backends copying build/lib/xarray/backends/file_manager.py -> build/bdist.linux-aarch64/wheel/./xarray/backends copying build/lib/xarray/backends/locks.py -> build/bdist.linux-aarch64/wheel/./xarray/backends copying build/lib/xarray/backends/netCDF4_.py -> build/bdist.linux-aarch64/wheel/./xarray/backends creating build/bdist.linux-aarch64/wheel/xarray/coding copying build/lib/xarray/coding/__init__.py -> build/bdist.linux-aarch64/wheel/./xarray/coding copying build/lib/xarray/coding/calendar_ops.py -> build/bdist.linux-aarch64/wheel/./xarray/coding copying build/lib/xarray/coding/cftime_offsets.py -> build/bdist.linux-aarch64/wheel/./xarray/coding copying build/lib/xarray/coding/cftimeindex.py -> build/bdist.linux-aarch64/wheel/./xarray/coding copying build/lib/xarray/coding/common.py -> build/bdist.linux-aarch64/wheel/./xarray/coding copying build/lib/xarray/coding/frequencies.py -> build/bdist.linux-aarch64/wheel/./xarray/coding copying build/lib/xarray/coding/strings.py -> build/bdist.linux-aarch64/wheel/./xarray/coding copying build/lib/xarray/coding/times.py -> build/bdist.linux-aarch64/wheel/./xarray/coding copying build/lib/xarray/coding/variables.py -> build/bdist.linux-aarch64/wheel/./xarray/coding creating build/bdist.linux-aarch64/wheel/xarray/compat copying build/lib/xarray/compat/__init__.py -> build/bdist.linux-aarch64/wheel/./xarray/compat copying build/lib/xarray/compat/array_api_compat.py -> build/bdist.linux-aarch64/wheel/./xarray/compat copying build/lib/xarray/compat/dask_array_compat.py -> build/bdist.linux-aarch64/wheel/./xarray/compat copying build/lib/xarray/compat/dask_array_ops.py -> build/bdist.linux-aarch64/wheel/./xarray/compat copying build/lib/xarray/compat/npcompat.py -> build/bdist.linux-aarch64/wheel/./xarray/compat copying build/lib/xarray/compat/pdcompat.py -> build/bdist.linux-aarch64/wheel/./xarray/compat copying build/lib/xarray/compat/toolzcompat.py -> build/bdist.linux-aarch64/wheel/./xarray/compat creating build/bdist.linux-aarch64/wheel/xarray/computation copying build/lib/xarray/computation/__init__.py -> build/bdist.linux-aarch64/wheel/./xarray/computation copying build/lib/xarray/computation/apply_ufunc.py -> build/bdist.linux-aarch64/wheel/./xarray/computation copying build/lib/xarray/computation/arithmetic.py -> build/bdist.linux-aarch64/wheel/./xarray/computation copying build/lib/xarray/computation/computation.py -> build/bdist.linux-aarch64/wheel/./xarray/computation copying build/lib/xarray/computation/fit.py -> build/bdist.linux-aarch64/wheel/./xarray/computation copying build/lib/xarray/computation/nanops.py -> build/bdist.linux-aarch64/wheel/./xarray/computation copying build/lib/xarray/computation/ops.py -> build/bdist.linux-aarch64/wheel/./xarray/computation copying build/lib/xarray/computation/rolling.py -> build/bdist.linux-aarch64/wheel/./xarray/computation copying build/lib/xarray/computation/rolling_exp.py -> build/bdist.linux-aarch64/wheel/./xarray/computation copying build/lib/xarray/computation/weighted.py -> build/bdist.linux-aarch64/wheel/./xarray/computation creating build/bdist.linux-aarch64/wheel/xarray/core copying build/lib/xarray/core/__init__.py -> build/bdist.linux-aarch64/wheel/./xarray/core copying build/lib/xarray/core/_aggregations.py -> build/bdist.linux-aarch64/wheel/./xarray/core copying build/lib/xarray/core/_typed_ops.py -> build/bdist.linux-aarch64/wheel/./xarray/core copying build/lib/xarray/core/accessor_dt.py -> build/bdist.linux-aarch64/wheel/./xarray/core copying build/lib/xarray/core/accessor_str.py -> build/bdist.linux-aarch64/wheel/./xarray/core copying build/lib/xarray/core/common.py -> build/bdist.linux-aarch64/wheel/./xarray/core copying build/lib/xarray/core/coordinate_transform.py -> build/bdist.linux-aarch64/wheel/./xarray/core copying build/lib/xarray/core/coordinates.py -> build/bdist.linux-aarch64/wheel/./xarray/core copying build/lib/xarray/core/dataarray.py -> build/bdist.linux-aarch64/wheel/./xarray/core copying build/lib/xarray/core/dataset.py -> build/bdist.linux-aarch64/wheel/./xarray/core copying build/lib/xarray/core/dataset_utils.py -> build/bdist.linux-aarch64/wheel/./xarray/core copying build/lib/xarray/core/dataset_variables.py -> build/bdist.linux-aarch64/wheel/./xarray/core copying build/lib/xarray/core/datatree.py -> build/bdist.linux-aarch64/wheel/./xarray/core copying build/lib/xarray/core/datatree_mapping.py -> build/bdist.linux-aarch64/wheel/./xarray/core copying build/lib/xarray/core/datatree_render.py -> build/bdist.linux-aarch64/wheel/./xarray/core copying build/lib/xarray/core/dtypes.py -> build/bdist.linux-aarch64/wheel/./xarray/core copying build/lib/xarray/core/duck_array_ops.py -> build/bdist.linux-aarch64/wheel/./xarray/core copying build/lib/xarray/core/extension_array.py -> build/bdist.linux-aarch64/wheel/./xarray/core copying build/lib/xarray/core/extensions.py -> build/bdist.linux-aarch64/wheel/./xarray/core copying build/lib/xarray/core/formatting.py -> build/bdist.linux-aarch64/wheel/./xarray/core copying build/lib/xarray/core/formatting_html.py -> build/bdist.linux-aarch64/wheel/./xarray/core copying build/lib/xarray/core/groupby.py -> build/bdist.linux-aarch64/wheel/./xarray/core copying build/lib/xarray/core/indexes.py -> build/bdist.linux-aarch64/wheel/./xarray/core copying build/lib/xarray/core/indexing.py -> build/bdist.linux-aarch64/wheel/./xarray/core copying build/lib/xarray/core/missing.py -> build/bdist.linux-aarch64/wheel/./xarray/core copying build/lib/xarray/core/nputils.py -> build/bdist.linux-aarch64/wheel/./xarray/core copying build/lib/xarray/core/options.py -> build/bdist.linux-aarch64/wheel/./xarray/core copying build/lib/xarray/core/parallel.py -> build/bdist.linux-aarch64/wheel/./xarray/core copying build/lib/xarray/core/resample.py -> build/bdist.linux-aarch64/wheel/./xarray/core copying build/lib/xarray/core/resample_cftime.py -> build/bdist.linux-aarch64/wheel/./xarray/core copying build/lib/xarray/core/treenode.py -> build/bdist.linux-aarch64/wheel/./xarray/core copying build/lib/xarray/core/types.py -> build/bdist.linux-aarch64/wheel/./xarray/core copying build/lib/xarray/core/utils.py -> build/bdist.linux-aarch64/wheel/./xarray/core copying build/lib/xarray/core/variable.py -> build/bdist.linux-aarch64/wheel/./xarray/core creating build/bdist.linux-aarch64/wheel/xarray/indexes copying build/lib/xarray/indexes/__init__.py -> build/bdist.linux-aarch64/wheel/./xarray/indexes copying build/lib/xarray/indexes/nd_point_index.py -> build/bdist.linux-aarch64/wheel/./xarray/indexes copying build/lib/xarray/indexes/range_index.py -> build/bdist.linux-aarch64/wheel/./xarray/indexes creating build/bdist.linux-aarch64/wheel/xarray/namedarray copying build/lib/xarray/namedarray/__init__.py -> build/bdist.linux-aarch64/wheel/./xarray/namedarray copying build/lib/xarray/namedarray/_aggregations.py -> build/bdist.linux-aarch64/wheel/./xarray/namedarray copying build/lib/xarray/namedarray/_array_api.py -> build/bdist.linux-aarch64/wheel/./xarray/namedarray copying build/lib/xarray/namedarray/_typing.py -> build/bdist.linux-aarch64/wheel/./xarray/namedarray copying build/lib/xarray/namedarray/core.py -> build/bdist.linux-aarch64/wheel/./xarray/namedarray copying build/lib/xarray/namedarray/daskmanager.py -> build/bdist.linux-aarch64/wheel/./xarray/namedarray copying build/lib/xarray/namedarray/dtypes.py -> build/bdist.linux-aarch64/wheel/./xarray/namedarray copying build/lib/xarray/namedarray/parallelcompat.py -> build/bdist.linux-aarch64/wheel/./xarray/namedarray copying build/lib/xarray/namedarray/pycompat.py -> build/bdist.linux-aarch64/wheel/./xarray/namedarray copying build/lib/xarray/namedarray/utils.py -> build/bdist.linux-aarch64/wheel/./xarray/namedarray creating build/bdist.linux-aarch64/wheel/xarray/plot copying build/lib/xarray/plot/__init__.py -> build/bdist.linux-aarch64/wheel/./xarray/plot copying build/lib/xarray/plot/accessor.py -> build/bdist.linux-aarch64/wheel/./xarray/plot copying build/lib/xarray/plot/dataarray_plot.py -> build/bdist.linux-aarch64/wheel/./xarray/plot copying build/lib/xarray/plot/dataset_plot.py -> build/bdist.linux-aarch64/wheel/./xarray/plot copying build/lib/xarray/plot/facetgrid.py -> build/bdist.linux-aarch64/wheel/./xarray/plot copying build/lib/xarray/plot/utils.py -> build/bdist.linux-aarch64/wheel/./xarray/plot creating build/bdist.linux-aarch64/wheel/xarray/static creating build/bdist.linux-aarch64/wheel/xarray/static/css copying build/lib/xarray/static/css/style.css -> build/bdist.linux-aarch64/wheel/./xarray/static/css copying build/lib/xarray/static/css/__init__.py -> build/bdist.linux-aarch64/wheel/./xarray/static/css creating build/bdist.linux-aarch64/wheel/xarray/static/html copying build/lib/xarray/static/html/icons-svg-inline.html -> build/bdist.linux-aarch64/wheel/./xarray/static/html copying build/lib/xarray/static/html/__init__.py -> build/bdist.linux-aarch64/wheel/./xarray/static/html copying build/lib/xarray/static/__init__.py -> build/bdist.linux-aarch64/wheel/./xarray/static creating build/bdist.linux-aarch64/wheel/xarray/structure copying build/lib/xarray/structure/__init__.py -> build/bdist.linux-aarch64/wheel/./xarray/structure copying build/lib/xarray/structure/alignment.py -> build/bdist.linux-aarch64/wheel/./xarray/structure copying build/lib/xarray/structure/chunks.py -> build/bdist.linux-aarch64/wheel/./xarray/structure copying build/lib/xarray/structure/combine.py -> build/bdist.linux-aarch64/wheel/./xarray/structure copying build/lib/xarray/structure/concat.py -> build/bdist.linux-aarch64/wheel/./xarray/structure copying build/lib/xarray/structure/merge.py -> build/bdist.linux-aarch64/wheel/./xarray/structure creating build/bdist.linux-aarch64/wheel/xarray/testing copying build/lib/xarray/testing/__init__.py -> build/bdist.linux-aarch64/wheel/./xarray/testing copying build/lib/xarray/testing/assertions.py -> build/bdist.linux-aarch64/wheel/./xarray/testing copying build/lib/xarray/testing/strategies.py -> build/bdist.linux-aarch64/wheel/./xarray/testing creating build/bdist.linux-aarch64/wheel/xarray/tests creating build/bdist.linux-aarch64/wheel/xarray/tests/data copying build/lib/xarray/tests/data/example_1.nc.gz -> build/bdist.linux-aarch64/wheel/./xarray/tests/data copying build/lib/xarray/tests/data/example_1.nc -> build/bdist.linux-aarch64/wheel/./xarray/tests/data copying build/lib/xarray/tests/data/example.uamiv -> build/bdist.linux-aarch64/wheel/./xarray/tests/data copying build/lib/xarray/tests/data/example.ict -> build/bdist.linux-aarch64/wheel/./xarray/tests/data copying build/lib/xarray/tests/data/example.grib -> build/bdist.linux-aarch64/wheel/./xarray/tests/data copying build/lib/xarray/tests/data/bears.nc -> build/bdist.linux-aarch64/wheel/./xarray/tests/data copying build/lib/xarray/tests/test_datatree_typing.yml -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_dataset_typing.yml -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_dataarray_typing.yml -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/CLAUDE.md -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/__init__.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/arrays.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/conftest.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/indexes.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/namespace.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_accessor_dt.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_accessor_str.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_array_api.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_assertions.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_backends_api.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_backends_chunks.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_backends_common.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_backends_datatree.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_backends_file_manager.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_backends_locks.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_backends_lru_cache.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_calendar_ops.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_cftime_offsets.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_cftimeindex.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_cftimeindex_resample.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_coarsen.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_coding.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_coding_strings.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_coding_times.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_combine.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_computation.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_concat.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_conventions.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_coordinate_transform.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_coordinates.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_cupy.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_dask.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_dataarray.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_dataset.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_datatree.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_datatree_mapping.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_deprecation_helpers.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_distributed.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_dtypes.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_duck_array_ops.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_duck_array_wrapping.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_error_messages.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_extensions.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_formatting.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_formatting_html.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_groupby.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_hashable.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_indexes.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_indexing.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_interp.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_merge.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_missing.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_namedarray.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_nd_point_index.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_nputils.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_options.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_pandas_to_xarray.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_parallelcompat.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_plot.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_plugins.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_print_versions.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_range_index.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_rolling.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_sparse.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_strategies.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_treenode.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_tutorial.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_typed_ops.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_ufuncs.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_units.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_utils.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_variable.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_weighted.py -> build/bdist.linux-aarch64/wheel/./xarray/tests copying build/lib/xarray/tests/test_backends.py -> build/bdist.linux-aarch64/wheel/./xarray/tests creating build/bdist.linux-aarch64/wheel/xarray/util copying build/lib/xarray/util/__init__.py -> build/bdist.linux-aarch64/wheel/./xarray/util copying build/lib/xarray/util/deprecation_helpers.py -> build/bdist.linux-aarch64/wheel/./xarray/util copying build/lib/xarray/util/generate_aggregations.py -> build/bdist.linux-aarch64/wheel/./xarray/util copying build/lib/xarray/util/generate_ops.py -> build/bdist.linux-aarch64/wheel/./xarray/util copying build/lib/xarray/util/print_versions.py -> build/bdist.linux-aarch64/wheel/./xarray/util copying build/lib/xarray/__init__.py -> build/bdist.linux-aarch64/wheel/./xarray copying build/lib/xarray/coders.py -> build/bdist.linux-aarch64/wheel/./xarray copying build/lib/xarray/conventions.py -> build/bdist.linux-aarch64/wheel/./xarray copying build/lib/xarray/convert.py -> build/bdist.linux-aarch64/wheel/./xarray copying build/lib/xarray/groupers.py -> build/bdist.linux-aarch64/wheel/./xarray copying build/lib/xarray/tutorial.py -> build/bdist.linux-aarch64/wheel/./xarray copying build/lib/xarray/typing.py -> build/bdist.linux-aarch64/wheel/./xarray copying build/lib/xarray/ufuncs.py -> build/bdist.linux-aarch64/wheel/./xarray running install_egg_info Copying xarray.egg-info to build/bdist.linux-aarch64/wheel/./xarray-2025.12.0-py3.14.egg-info running install_scripts creating build/bdist.linux-aarch64/wheel/xarray-2025.12.0.dist-info/WHEEL creating '/builddir/.cache/pip/wheels/89/97/72/11e2e7be2c9172d51d8f8e5c8b48bd426f80036ba4fdb1f907/tmpx4inkp1t/.tmp-ej2upkdc/xarray-2025.12.0-py3-none-any.whl' and adding 'build/bdist.linux-aarch64/wheel' to it adding 'xarray/__init__.py' adding 'xarray/coders.py' adding 'xarray/conventions.py' adding 'xarray/convert.py' adding 'xarray/groupers.py' adding 'xarray/py.typed' adding 'xarray/tutorial.py' adding 'xarray/typing.py' adding 'xarray/ufuncs.py' adding 'xarray/backends/__init__.py' adding 'xarray/backends/api.py' adding 'xarray/backends/chunks.py' adding 'xarray/backends/common.py' adding 'xarray/backends/file_manager.py' adding 'xarray/backends/h5netcdf_.py' adding 'xarray/backends/locks.py' adding 'xarray/backends/lru_cache.py' adding 'xarray/backends/memory.py' adding 'xarray/backends/netCDF4_.py' adding 'xarray/backends/netcdf3.py' adding 'xarray/backends/plugins.py' adding 'xarray/backends/pydap_.py' adding 'xarray/backends/scipy_.py' adding 'xarray/backends/store.py' adding 'xarray/backends/writers.py' adding 'xarray/backends/zarr.py' adding 'xarray/coding/__init__.py' adding 'xarray/coding/calendar_ops.py' adding 'xarray/coding/cftime_offsets.py' adding 'xarray/coding/cftimeindex.py' adding 'xarray/coding/common.py' adding 'xarray/coding/frequencies.py' adding 'xarray/coding/strings.py' adding 'xarray/coding/times.py' adding 'xarray/coding/variables.py' adding 'xarray/compat/__init__.py' adding 'xarray/compat/array_api_compat.py' adding 'xarray/compat/dask_array_compat.py' adding 'xarray/compat/dask_array_ops.py' adding 'xarray/compat/npcompat.py' adding 'xarray/compat/pdcompat.py' adding 'xarray/compat/toolzcompat.py' adding 'xarray/computation/__init__.py' adding 'xarray/computation/apply_ufunc.py' adding 'xarray/computation/arithmetic.py' adding 'xarray/computation/computation.py' adding 'xarray/computation/fit.py' adding 'xarray/computation/nanops.py' adding 'xarray/computation/ops.py' adding 'xarray/computation/rolling.py' adding 'xarray/computation/rolling_exp.py' adding 'xarray/computation/weighted.py' adding 'xarray/core/__init__.py' adding 'xarray/core/_aggregations.py' adding 'xarray/core/_typed_ops.py' adding 'xarray/core/accessor_dt.py' adding 'xarray/core/accessor_str.py' adding 'xarray/core/common.py' adding 'xarray/core/coordinate_transform.py' adding 'xarray/core/coordinates.py' adding 'xarray/core/dataarray.py' adding 'xarray/core/dataset.py' adding 'xarray/core/dataset_utils.py' adding 'xarray/core/dataset_variables.py' adding 'xarray/core/datatree.py' adding 'xarray/core/datatree_mapping.py' adding 'xarray/core/datatree_render.py' adding 'xarray/core/dtypes.py' adding 'xarray/core/duck_array_ops.py' adding 'xarray/core/extension_array.py' adding 'xarray/core/extensions.py' adding 'xarray/core/formatting.py' adding 'xarray/core/formatting_html.py' adding 'xarray/core/groupby.py' adding 'xarray/core/indexes.py' adding 'xarray/core/indexing.py' adding 'xarray/core/missing.py' adding 'xarray/core/nputils.py' adding 'xarray/core/options.py' adding 'xarray/core/parallel.py' adding 'xarray/core/resample.py' adding 'xarray/core/resample_cftime.py' adding 'xarray/core/treenode.py' adding 'xarray/core/types.py' adding 'xarray/core/utils.py' adding 'xarray/core/variable.py' adding 'xarray/indexes/__init__.py' adding 'xarray/indexes/nd_point_index.py' adding 'xarray/indexes/range_index.py' adding 'xarray/namedarray/__init__.py' adding 'xarray/namedarray/_aggregations.py' adding 'xarray/namedarray/_array_api.py' adding 'xarray/namedarray/_typing.py' adding 'xarray/namedarray/core.py' adding 'xarray/namedarray/daskmanager.py' adding 'xarray/namedarray/dtypes.py' adding 'xarray/namedarray/parallelcompat.py' adding 'xarray/namedarray/pycompat.py' adding 'xarray/namedarray/utils.py' adding 'xarray/plot/__init__.py' adding 'xarray/plot/accessor.py' adding 'xarray/plot/dataarray_plot.py' adding 'xarray/plot/dataset_plot.py' adding 'xarray/plot/facetgrid.py' adding 'xarray/plot/utils.py' adding 'xarray/static/__init__.py' adding 'xarray/static/css/__init__.py' adding 'xarray/static/css/style.css' adding 'xarray/static/html/__init__.py' adding 'xarray/static/html/icons-svg-inline.html' adding 'xarray/structure/__init__.py' adding 'xarray/structure/alignment.py' adding 'xarray/structure/chunks.py' adding 'xarray/structure/combine.py' adding 'xarray/structure/concat.py' adding 'xarray/structure/merge.py' adding 'xarray/testing/__init__.py' adding 'xarray/testing/assertions.py' adding 'xarray/testing/strategies.py' adding 'xarray/tests/CLAUDE.md' adding 'xarray/tests/__init__.py' adding 'xarray/tests/arrays.py' adding 'xarray/tests/conftest.py' adding 'xarray/tests/indexes.py' adding 'xarray/tests/namespace.py' adding 'xarray/tests/test_accessor_dt.py' adding 'xarray/tests/test_accessor_str.py' adding 'xarray/tests/test_array_api.py' adding 'xarray/tests/test_assertions.py' adding 'xarray/tests/test_backends.py' adding 'xarray/tests/test_backends_api.py' adding 'xarray/tests/test_backends_chunks.py' adding 'xarray/tests/test_backends_common.py' adding 'xarray/tests/test_backends_datatree.py' adding 'xarray/tests/test_backends_file_manager.py' adding 'xarray/tests/test_backends_locks.py' adding 'xarray/tests/test_backends_lru_cache.py' adding 'xarray/tests/test_calendar_ops.py' adding 'xarray/tests/test_cftime_offsets.py' adding 'xarray/tests/test_cftimeindex.py' adding 'xarray/tests/test_cftimeindex_resample.py' adding 'xarray/tests/test_coarsen.py' adding 'xarray/tests/test_coding.py' adding 'xarray/tests/test_coding_strings.py' adding 'xarray/tests/test_coding_times.py' adding 'xarray/tests/test_combine.py' adding 'xarray/tests/test_computation.py' adding 'xarray/tests/test_concat.py' adding 'xarray/tests/test_conventions.py' adding 'xarray/tests/test_coordinate_transform.py' adding 'xarray/tests/test_coordinates.py' adding 'xarray/tests/test_cupy.py' adding 'xarray/tests/test_dask.py' adding 'xarray/tests/test_dataarray.py' adding 'xarray/tests/test_dataarray_typing.yml' adding 'xarray/tests/test_dataset.py' adding 'xarray/tests/test_dataset_typing.yml' adding 'xarray/tests/test_datatree.py' adding 'xarray/tests/test_datatree_mapping.py' adding 'xarray/tests/test_datatree_typing.yml' adding 'xarray/tests/test_deprecation_helpers.py' adding 'xarray/tests/test_distributed.py' adding 'xarray/tests/test_dtypes.py' adding 'xarray/tests/test_duck_array_ops.py' adding 'xarray/tests/test_duck_array_wrapping.py' adding 'xarray/tests/test_error_messages.py' adding 'xarray/tests/test_extensions.py' adding 'xarray/tests/test_formatting.py' adding 'xarray/tests/test_formatting_html.py' adding 'xarray/tests/test_groupby.py' adding 'xarray/tests/test_hashable.py' adding 'xarray/tests/test_indexes.py' adding 'xarray/tests/test_indexing.py' adding 'xarray/tests/test_interp.py' adding 'xarray/tests/test_merge.py' adding 'xarray/tests/test_missing.py' adding 'xarray/tests/test_namedarray.py' adding 'xarray/tests/test_nd_point_index.py' adding 'xarray/tests/test_nputils.py' adding 'xarray/tests/test_options.py' adding 'xarray/tests/test_pandas_to_xarray.py' adding 'xarray/tests/test_parallelcompat.py' adding 'xarray/tests/test_plot.py' adding 'xarray/tests/test_plugins.py' adding 'xarray/tests/test_print_versions.py' adding 'xarray/tests/test_range_index.py' adding 'xarray/tests/test_rolling.py' adding 'xarray/tests/test_sparse.py' adding 'xarray/tests/test_strategies.py' adding 'xarray/tests/test_treenode.py' adding 'xarray/tests/test_tutorial.py' adding 'xarray/tests/test_typed_ops.py' adding 'xarray/tests/test_ufuncs.py' adding 'xarray/tests/test_units.py' adding 'xarray/tests/test_utils.py' adding 'xarray/tests/test_variable.py' adding 'xarray/tests/test_weighted.py' adding 'xarray/tests/data/bears.nc' adding 'xarray/tests/data/example.grib' adding 'xarray/tests/data/example.ict' adding 'xarray/tests/data/example.uamiv' adding 'xarray/tests/data/example_1.nc' adding 'xarray/tests/data/example_1.nc.gz' adding 'xarray/util/__init__.py' adding 'xarray/util/deprecation_helpers.py' adding 'xarray/util/generate_aggregations.py' adding 'xarray/util/generate_ops.py' adding 'xarray/util/print_versions.py' adding 'xarray-2025.12.0.dist-info/licenses/LICENSE' adding 'xarray-2025.12.0.dist-info/METADATA' adding 'xarray-2025.12.0.dist-info/WHEEL' adding 'xarray-2025.12.0.dist-info/entry_points.txt' adding 'xarray-2025.12.0.dist-info/top_level.txt' adding 'xarray-2025.12.0.dist-info/RECORD' removing build/bdist.linux-aarch64/wheel Building wheel for xarray (pyproject.toml): finished with status 'done' Created wheel for xarray: filename=xarray-2025.12.0-py3-none-any.whl size=1379498 sha256=acaabbab86a9240b3bb1f4a66454d053ed3a7467dc775184ec1f217f538301ee Stored in directory: /builddir/.cache/pip/wheels/89/97/72/11e2e7be2c9172d51d8f8e5c8b48bd426f80036ba4fdb1f907 Successfully built xarray + RPM_EC=0 ++ jobs -p + exit 0 Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.3Q0H7K + umask 022 + cd /builddir/build/BUILD/python-xarray-2025.12.0-build + '[' /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT '!=' / ']' + rm -rf /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT ++ dirname /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT + mkdir -p /builddir/build/BUILD/python-xarray-2025.12.0-build + mkdir /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT + CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + export CFLAGS + CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + export CXXFLAGS + FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + export FFLAGS + FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + export FCFLAGS + VALAFLAGS=-g + export VALAFLAGS + RUSTFLAGS='-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Cforce-frame-pointers=yes -Clink-arg=-specs=/usr/lib/rpm/redhat/redhat-package-notes --cap-lints=warn' + export RUSTFLAGS + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes ' + export LDFLAGS + LT_SYS_LIBRARY_PATH=/usr/lib64: + export LT_SYS_LIBRARY_PATH + CC=gcc + export CC + CXX=g++ + export CXX + cd xarray-2025.12.0 ++ ls /builddir/build/BUILD/python-xarray-2025.12.0-build/pyproject-wheeldir/xarray-2025.12.0-py3-none-any.whl ++ xargs basename --multiple ++ sed -E 's/([^-]+)-([^-]+)-.+\.whl/\1==\2/' + specifier=xarray==2025.12.0 + '[' -z xarray==2025.12.0 ']' + TMPDIR=/builddir/build/BUILD/python-xarray-2025.12.0-build/.pyproject-builddir + /usr/bin/python3 -m pip install --root /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT --prefix /usr --no-deps --disable-pip-version-check --progress-bar off --verbose --ignore-installed --no-warn-script-location --no-index --no-cache-dir --find-links /builddir/build/BUILD/python-xarray-2025.12.0-build/pyproject-wheeldir xarray==2025.12.0 Using pip 25.3 from /usr/lib/python3.14/site-packages/pip (python 3.14) Looking in links: /builddir/build/BUILD/python-xarray-2025.12.0-build/pyproject-wheeldir Processing /builddir/build/BUILD/python-xarray-2025.12.0-build/pyproject-wheeldir/xarray-2025.12.0-py3-none-any.whl Installing collected packages: xarray Successfully installed xarray-2025.12.0 + '[' -d /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/bin ']' + rm -f /builddir/build/BUILD/python-xarray-2025.12.0-build/python-xarray-2025.12.0-2.fc44.aarch64-pyproject-ghost-distinfo + site_dirs=() + '[' -d /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages ']' + site_dirs+=("/usr/lib/python3.14/site-packages") + '[' /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib64/python3.14/site-packages '!=' /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages ']' + '[' -d /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib64/python3.14/site-packages ']' + for site_dir in ${site_dirs[@]} + for distinfo in /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT$site_dir/*.dist-info + echo '%ghost %dir /usr/lib/python3.14/site-packages/xarray-2025.12.0.dist-info' + sed -i s/pip/rpm/ /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray-2025.12.0.dist-info/INSTALLER + PYTHONPATH=/usr/lib/rpm/redhat + /usr/bin/python3 -B /usr/lib/rpm/redhat/pyproject_preprocess_record.py --buildroot /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT --record /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray-2025.12.0.dist-info/RECORD --output /builddir/build/BUILD/python-xarray-2025.12.0-build/python-xarray-2025.12.0-2.fc44.aarch64-pyproject-record + rm -fv /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray-2025.12.0.dist-info/RECORD removed '/builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray-2025.12.0.dist-info/RECORD' + rm -fv /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray-2025.12.0.dist-info/REQUESTED removed '/builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray-2025.12.0.dist-info/REQUESTED' ++ wc -l /builddir/build/BUILD/python-xarray-2025.12.0-build/python-xarray-2025.12.0-2.fc44.aarch64-pyproject-ghost-distinfo ++ cut -f1 '-d ' + lines=1 + '[' 1 -ne 1 ']' + RPM_FILES_ESCAPE=4.19 + /usr/bin/python3 /usr/lib/rpm/redhat/pyproject_save_files.py --output-files /builddir/build/BUILD/python-xarray-2025.12.0-build/python-xarray-2025.12.0-2.fc44.aarch64-pyproject-files --output-modules /builddir/build/BUILD/python-xarray-2025.12.0-build/python-xarray-2025.12.0-2.fc44.aarch64-pyproject-modules --buildroot /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT --sitelib /usr/lib/python3.14/site-packages --sitearch /usr/lib64/python3.14/site-packages --python-version 3.14 --pyproject-record /builddir/build/BUILD/python-xarray-2025.12.0-build/python-xarray-2025.12.0-2.fc44.aarch64-pyproject-record --prefix /usr -l xarray + /usr/lib/rpm/check-buildroot + /usr/lib/rpm/redhat/brp-ldconfig + COMPRESS='gzip -9 -n' + COMPRESS_EXT=.gz + /usr/lib/rpm/brp-compress + /usr/lib/rpm/brp-strip /usr/bin/strip + /usr/lib/rpm/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump + /usr/lib/rpm/redhat/brp-strip-lto /usr/bin/strip + /usr/lib/rpm/check-rpaths + /usr/lib/rpm/redhat/brp-mangle-shebangs + /usr/lib/rpm/brp-remove-la-files + /usr/lib/rpm/redhat/brp-python-rpm-in-distinfo + env /usr/lib/rpm/redhat/brp-python-bytecompile '' 1 0 -j4 Bytecompiling .py files below /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14 using python3.14 + /usr/lib/rpm/redhat/brp-python-hardlink + /usr/bin/add-det --brp -j4 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/__pycache__/typing.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/__pycache__/ufuncs.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/__pycache__/tutorial.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/__pycache__/convert.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/__pycache__/coders.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/__pycache__/conventions.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/util/__pycache__/generate_ops.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/util/__pycache__/print_versions.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/__pycache__/groupers.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/util/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/util/__pycache__/deprecation_helpers.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/__pycache__/groupers.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/util/__pycache__/generate_aggregations.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_weighted.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_weighted.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_utils.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_utils.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_variable.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_variable.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_ufuncs.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_units.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_ufuncs.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_typed_ops.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_typed_ops.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_tutorial.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_treenode.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_units.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_indexing.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_strategies.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_print_versions.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_print_versions.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_plugins.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_strategies.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_treenode.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_plugins.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_sparse.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_indexing.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_sparse.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_dataset.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_indexes.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_rolling.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_indexes.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_hashable.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_rolling.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_range_index.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_range_index.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_dataset.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_namedarray.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_plot.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_missing.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_namedarray.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_missing.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_groupby.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_merge.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_merge.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_parallelcompat.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_parallelcompat.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_plot.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_pandas_to_xarray.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_pandas_to_xarray.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_options.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_options.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_nputils.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_nputils.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_nd_point_index.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_nd_point_index.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_interp.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_formatting_html.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_groupby.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_interp.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_formatting_html.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_conventions.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_duck_array_wrapping.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_formatting.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_conventions.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_formatting.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_duck_array_wrapping.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_extensions.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_extensions.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_error_messages.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_deprecation_helpers.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_deprecation_helpers.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_duck_array_ops.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_datatree_mapping.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_datatree_mapping.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_concat.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_duck_array_ops.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_dtypes.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_dtypes.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_distributed.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_concat.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_distributed.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_backends_common.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_backends_common.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_backends_chunks.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_backends_chunks.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_dataarray.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_datatree.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_backends_api.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_backends_api.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_computation.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_datatree.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_dask.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_computation.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_dask.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_combine.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_cupy.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_cupy.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_coordinates.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_dataarray.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_coordinates.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_coordinate_transform.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_cftimeindex_resample.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_coordinate_transform.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_cftimeindex_resample.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_combine.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_assertions.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_cftimeindex.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_assertions.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_array_api.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_coding_times.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_array_api.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_cftimeindex.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_backends.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_cftime_offsets.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_accessor_str.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_coding_strings.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_coding_strings.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_coding_times.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_coding.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_cftime_offsets.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_coding.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_coarsen.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_backends_lru_cache.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_coarsen.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_backends_lru_cache.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_backends_locks.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_backends_locks.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_calendar_ops.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_backends_file_manager.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_calendar_ops.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_backends_file_manager.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_backends_datatree.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_accessor_str.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_backends_datatree.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/namespace.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/indexes.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/conftest.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_accessor_dt.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_accessor_dt.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/indexes.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/__init__.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/__init__.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/arrays.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/testing/__pycache__/assertions.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/testing/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/testing/__pycache__/strategies.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/testing/__pycache__/assertions.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/structure/__pycache__/concat.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/structure/__pycache__/chunks.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/structure/__pycache__/combine.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/structure/__pycache__/concat.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/structure/__pycache__/merge.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/structure/__pycache__/merge.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/structure/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/static/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/static/html/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/structure/__pycache__/alignment.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/static/css/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/structure/__pycache__/alignment.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/plot/__pycache__/facetgrid.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/plot/__pycache__/dataset_plot.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/plot/__pycache__/facetgrid.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/plot/__pycache__/dataset_plot.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/plot/__pycache__/dataarray_plot.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/plot/__pycache__/dataarray_plot.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/plot/__pycache__/utils.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/plot/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/namedarray/__pycache__/dtypes.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/namedarray/__pycache__/daskmanager.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/plot/__pycache__/utils.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/plot/__pycache__/accessor.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/namedarray/__pycache__/utils.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/namedarray/__pycache__/pycompat.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/namedarray/__pycache__/core.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/namedarray/__pycache__/parallelcompat.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/namedarray/__pycache__/_array_api.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/namedarray/__pycache__/_typing.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/namedarray/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/namedarray/__pycache__/_aggregations.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/indexes/__pycache__/nd_point_index.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/indexes/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/namedarray/__pycache__/core.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/indexes/__pycache__/nd_point_index.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/indexes/__pycache__/range_index.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/missing.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/datatree.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/indexing.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/indexing.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/utils.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/variable.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/indexes.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/dataset_variables.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/dataset_variables.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/dataset_utils.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/variable.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/utils.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/types.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/treenode.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/resample.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__pycache__/test_backends.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/indexes.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/treenode.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/resample_cftime.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/parallel.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/parallel.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/options.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/nputils.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/groupby.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/groupby.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/formatting_html.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/accessor_str.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/dataarray.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/accessor_dt.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/formatting.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/dataarray.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/formatting.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/coordinates.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/extensions.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/extension_array.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/dataset.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/duck_array_ops.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/coordinate_transform.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/duck_array_ops.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/_typed_ops.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/dtypes.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/datatree_render.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/dataset.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/datatree_render.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/datatree_mapping.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/computation/__pycache__/rolling_exp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/computation/__pycache__/fit.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/common.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/computation/__pycache__/computation.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/computation/__pycache__/rolling.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/computation/__pycache__/arithmetic.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/computation/__pycache__/weighted.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/computation/__pycache__/ops.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/computation/__pycache__/nanops.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/_aggregations.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/computation/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/compat/__pycache__/toolzcompat.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/compat/__pycache__/pdcompat.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/compat/__pycache__/npcompat.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/compat/__pycache__/dask_array_ops.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/compat/__pycache__/dask_array_compat.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/__pycache__/common.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/compat/__pycache__/array_api_compat.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/compat/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/coding/__pycache__/common.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/coding/__pycache__/common.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/computation/__pycache__/apply_ufunc.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/coding/__pycache__/variables.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/computation/__pycache__/apply_ufunc.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/coding/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/coding/__pycache__/cftimeindex.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/coding/__pycache__/times.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/coding/__pycache__/strings.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/coding/__pycache__/calendar_ops.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/coding/__pycache__/frequencies.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/coding/__pycache__/frequencies.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/coding/__pycache__/cftime_offsets.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/backends/__pycache__/locks.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/coding/__pycache__/times.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/backends/__pycache__/writers.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/backends/__pycache__/h5netcdf_.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/backends/__pycache__/store.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/backends/__pycache__/netcdf3.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/backends/__pycache__/zarr.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/backends/__pycache__/store.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/backends/__pycache__/zarr.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/backends/__pycache__/writers.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/backends/__pycache__/scipy_.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/backends/__pycache__/scipy_.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/backends/__pycache__/chunks.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/backends/__pycache__/file_manager.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/backends/__pycache__/pydap_.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/backends/__pycache__/file_manager.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/backends/__pycache__/netCDF4_.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/backends/__pycache__/plugins.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/backends/__pycache__/api.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/backends/__pycache__/memory.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/backends/__pycache__/lru_cache.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/backends/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/backends/__pycache__/common.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/backends/__pycache__/netCDF4_.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/backends/__pycache__/common.cpython-314.pyc: replacing with normalized version Scanned 40 directories and 604 files, processed 301 inodes, 299 modified (208 replaced + 91 rewritten), 0 unsupported format, 0 errors + /usr/bin/linkdupes --brp /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr Scanned 39 directories and 604 files, considered 604 files, read 26 files, linked 10 files, 0 errors sum of sizes of linked files: 0 bytes Executing(%check): /bin/sh -e /var/tmp/rpm-tmp.jE8hhU + umask 022 + cd /builddir/build/BUILD/python-xarray-2025.12.0-build + CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + export CFLAGS + CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + export CXXFLAGS + FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + export FFLAGS + FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + export FCFLAGS + VALAFLAGS=-g + export VALAFLAGS + RUSTFLAGS='-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Cforce-frame-pointers=yes -Clink-arg=-specs=/usr/lib/rpm/redhat/redhat-package-notes --cap-lints=warn' + export RUSTFLAGS + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes ' + export LDFLAGS + LT_SYS_LIBRARY_PATH=/usr/lib64: + export LT_SYS_LIBRARY_PATH + CC=gcc + export CC + CXX=g++ + export CXX + cd xarray-2025.12.0 + rm -rf xarray + echo + pytest_args=(-n auto -m "not network" -k 'not test_save_mfdataset_compute_false_roundtrip') + CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes ' + PATH=/builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin + PYTHONPATH=/builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib64/python3.14/site-packages:/builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages + PYTHONDONTWRITEBYTECODE=1 + PYTEST_ADDOPTS=' --ignore=/builddir/build/BUILD/python-xarray-2025.12.0-build/.pyproject-builddir' + PYTEST_XDIST_AUTO_NUM_WORKERS=4 + /usr/bin/pytest -ra -n auto -m 'not network' -k 'not test_save_mfdataset_compute_false_roundtrip' --pyargs xarray --timeout 300 --full-trace ============================= test session starts ============================== platform linux -- Python 3.14.2, pytest-8.4.2, pluggy-1.6.0 rootdir: /builddir/build/BUILD/python-xarray-2025.12.0-build/xarray-2025.12.0 configfile: pytest.ini plugins: timeout-2.4.0, asyncio-1.1.0, xdist-3.7.0 timeout: 300.0s timeout method: signal timeout func_only: False asyncio: mode=Mode.STRICT, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function created: 4/4 workers 4 workers [19113 items] sss.sssss.sss.ss.ss.ss.s.sssssssss.s....ssssss...sss.sss...ss.s..sssss.. [ 0%] ..sssss..ss.ss..s.ss.sss.s.s.ss.sss.sss..s.ss.ss...sss.................. [ 0%] ........................................................................ [ 1%] ........................................................................ [ 1%] .......................................................................s [ 1%] ........................................................................ [ 2%] ........................................................................ [ 2%] ........................................................................ [ 3%] ..................................................x..................... [ 3%] ........................................................................ [ 3%] ........................................................................ [ 4%] ......................................................x................. [ 4%] ........................................................................ [ 4%] ........................................................................ [ 5%] ................................................s.sssss.........s....... [ 5%] .....s.............................s.................................... [ 6%] .............................x.........s.............s.................. [ 6%] ......................................................................x. [ 6%] .......................................................................s [ 7%] ........................................................................ [ 7%] ........................................................................ [ 7%] ........................................................................ [ 8%] ............................................................s........... [ 8%] ...........s..........s................................................. [ 9%] ........................................................................ [ 9%] ....................................................................s.s. [ 9%] ........................................................................ [ 10%] ........................................................................ [ 10%] ..................................................................s.ss.. [ 10%] ........................................................................ [ 11%] ........................................................................ [ 11%] ........................................................................ [ 12%] ........................................................................ [ 12%] ........................................................................ [ 12%] ........................................................................ [ 13%] ........................................................................ [ 13%] ........................................................................ [ 13%] ........................................................................ [ 14%] ........................................................................ [ 14%] ........................................................................ [ 15%] ...........................s............................................ [ 15%] ...................................................s.................... [ 15%] ........................................................................ [ 16%] ........................................................................ [ 16%] .x...................................................................... [ 16%] s....................................................................... [ 17%] .........................................x.............................. [ 17%] .............................s..........................x....s......sss. [ 18%] .s.s...................................s.................s.............. [ 18%] .....................s..................s............................... [ 18%] .....................x...........x.......s.............................. [ 19%] .......................................ssssssssssssssssssssssssssss.ssss [ 19%] ssssssssssssssssssssssss..............................s................. [ 19%] ........................................................................ [ 20%] .x..................s..........................s........s............... [ 20%] ........................................................................ [ 21%] ..........................s..............ss...s......................... [ 21%] ........................................................................ [ 21%] ........................................................................ [ 22%] ...........................................................s............ [ 22%] ...............x........................................................ [ 22%] ................................................xsss.................... [ 23%] ...................................s....s................ssss.ss.s.sssss [ 23%] ssssssssss.ss.ssssssssssssssss.ssssssssssssssssss.s.ssss.s.............. [ 24%] .........................................s.............................. [ 24%] ........................................................................ [ 24%] ............................................................s..s........ [ 25%] .........ss............................................................. [ 25%] .s...................s.................................................. [ 25%] .................s....................x....s....ss.s..ss..............s. [ 26%] ........s..................s..............sx..s......................x.. [ 26%] x...s......................s..s......................................... [ 27%] ....s....s..............s.............s....................s............ [ 27%] .....s.......s............................s....s....sss...s.......s..... [ 27%] ........s....x.x...s...........ss....................................... [ 28%] ................................................................x......s [ 28%] .......................s................................................ [ 29%] .......................X...s.ssX...X.................................... [ 29%] ..............................................s......................... [ 29%] ........................................................................ [ 30%] ..........................x....s........................ss.............. [ 30%] .................................x.......s.............................. [ 30%] .s...................................................................... [ 31%] ............................s........................................... [ 31%] ..........................................s...s......................... [ 32%] ...........sssssssssss.sssssssssssss.sssss.sssss..........s.ss.sssssssss [ 32%] sssssss.ssssss.ssssssssss.s.sssssssssssss.s.ssssssssssss.sssssssss.sssss [ 32%] sss.sssssssss.sssssssss................................................. [ 33%] ........................................................................ [ 33%] ........x....s.......................................................... [ 33%] .............xx..................s...................................... [ 34%] .............s.......................................................... [ 34%] ........................................................................ [ 35%] .....s........................................x......................... [ 35%] ..............................................................s......... [ 35%] .............X..X...X..............................................s.... [ 36%] ........................................................................ [ 36%] .........................s..........................................F... [ 36%] .....................F...............F....F.x..s.F.....F..s..F........Fx [ 37%] ...sF...............sF....F...................FF........................ [ 37%] ...............F........s.............................F................. [ 38%] ........................................................................ [ 38%] ........................................................................ [ 38%] ..................s............s..........X..s..........s..........s.... [ 39%] .......................s...............s....s...s......s....s........... [ 39%] ................x...s...........s...........s.......s.s..........s...... [ 39%] ........s....s.......s......s.........s................................. [ 40%] ........................................................................ [ 40%] ............................s.s.s.s.s.s.s.s..............s.............. [ 41%] s...............s.............s................s........................ [ 41%] ........................................................................ [ 41%] ..........................................................x.....s....... [ 42%] ................................x.............s......................... [ 42%] ............................X..................................x......s. [ 42%] ........................................................................ [ 43%] ....................s................................................... [ 43%] ......................................................s................. [ 44%] ...................s.................................................... [ 44%] ......................s....................ss........................... [ 44%] .............................x....s..................................... [ 45%] ..............X...........................x.............s............... [ 45%] ...............................................s.............x.......... [ 45%] ........................................................................ [ 46%] ......................................................s................. [ 46%] ........................................................................ [ 47%] ........X............................................................... [ 47%] ........................................................................ [ 47%] ........................................................................ [ 48%] ....................................F.....................s............. [ 48%] ........................................................................ [ 48%] ...........................................................s............ [ 49%] ..............................x..s............x...s.........s........... [ 49%] ....x............s.........s............................................ [ 50%] ......ss............................x................................... [ 50%] ....................x...x.......s............x........................sx [ 50%] .............x...........x.............................................. [ 51%] ....................................s................................... [ 51%] .............x.............................X....................x....... [ 51%] .....x..........ss.sss.ssssssss......................................... [ 52%] sssx.........x....................ss.................................... [ 52%] ...................ss.s............x.................................... [ 53%] ................................................X....X.X.XX..........XX. [ 53%] .X...............s..................ss.....................ss........... [ 53%] ....ss......s.s.......ss.................ss............................. [ 54%] ..........................ss............................................ [ 54%] ........................................................................ [ 54%] ........................................................................ [ 55%] ......................x................................................. [ 55%] ...................s.s.s..s..ss.s.sss.........................s.s..s..s. [ 56%] sss.s.ss...s.s......................sss.ss.s.........................sss [ 56%] sss...x..................................................s.s.s.ss..s.... [ 56%] ....ss..............................s..s.s.s.s.s........................ [ 57%] ................s.s....................................................s [ 57%] .s..s..s..s....sss.ss.s..s..s....s.....s...s.ss...s....s..s..s.s.s..s.ss [ 58%] ..ss.s......s.......s......s......s...ssss.sssss.ss.ss...s..s....s..s... [ 58%] .sss.sss.s.s..sss....s.....s....s..s..ssss.s.ss.s...s.s.s.s..s.s.sss.ss. [ 58%] sss..........s.....s.s....s...s..s........sssssss...s.s.s.s..s.s..s.s..s [ 59%] .ss.s.s......s....s..s...s...s.s........................................ [ 59%] ...........................................................s.s.......... [ 59%] .......................ss............................................... [ 60%] ..................................................sss.ss.ss.sss......... [ 60%] ........s.ss.ss..s.ss.ss.....................ss.ss...s.s.sXs............ [ 61%] ...x....................s.s.sxss....s................................... [ 61%] ......xs.s..s.................xss..s...ss...s...s.s......x.s.......xs..s [ 61%] ........x.s............xss..........................xs.................. [ 62%] .....x..s.s.s..s.s..s..........xss....s.ss...s..s.s..s.s.s..s..ss.s..... [ 62%] ............X...xss..s..xX...xss...x....x.s................xss.s.ss.s..s [ 62%] s.s.............xs.s....s.........sxss.s.ss.s.ss.s.s.s...s.....s..F..... [ 63%] s..s......s............................F........xss...s...s..s...s...s.s [ 63%] .......s......s..s......s.....s...s.....X..s............................ [ 64%] ........................................................xs...s......s... [ 64%] s..s...s....................................................xss...s...s. [ 64%] ............................xs...s.......s.............................. [ 65%] ..................xss...s...................................xss..s...... [ 65%] ............................x.s.s...s................x.s..s....s........ [ 65%] ..................................................................xs..s. [ 66%] ...s..........................................................ss....xs.. [ 66%] ...s......s..........................................x.ss.....s......... [ 67%] .........................xss...s..ss.s..s.s..s..ss...s....s...s.....s... [ 67%] .ss.....s...ss....s...s.s....s......s..s.....s...s.s....s...ss...s....ss [ 67%] ....s....s..s....s....ss..s..s.s..s..ss....s..ss...s..s.s.s....ss.....s. [ 68%] ...s.s...s..ss..........................xs............................x. [ 68%] .s.s...s...ss...s...ss......s.....s..s...............xs..ss....s....s..s [ 68%] .................x.s................................x.s.s..s..s..s..s.s. [ 69%] s...s..ss...................x.s..............x.s.s....s....s.s...s.ss.s. [ 69%] .s.s.s.s.s.s..ss.s..ss..s.ss.................s.......................... [ 70%] ........................................................................ [ 70%] .................................sssssssss......s......x...........s.... [ 70%] ....................................................................x... [ 71%] ......................................s...............................ss [ 71%] .sssss.ssss............................................................. [ 71%] .....................s........................................F......... [ 72%] ................F....................F......x..........F................ [ 72%] ..................s.s..........ss.s..ss..s..ss..s...ss...s...ss..s..ss.. [ 73%] s............................................xss......s...s.s......s.... [ 73%] ss...s...s.s..s.................................x.s.s..s.s.s.s..s.s.s.s. [ 73%] s.s..................................................................... [ 74%] .......F................................................................ [ 74%] ........................................................................ [ 74%] ..........................sss...............................s........... [ 75%] ........................................................................ [ 75%] .........................................ssss........................... [ 76%] ........................................................................ [ 76%] ......................X................................................. [ 76%] ........................................................................ [ 77%] ..............x...ss..ssss.............................................. [ 77%] ........................................................................ [ 77%] ........................................................................ [ 78%] ........................................................................ [ 78%] ........................................................................ [ 79%] ........................................................................ [ 79%] ........................................................................ [ 79%] ........................................................................ [ 80%] ........................................................................ [ 80%] ........................................................................ [ 80%] ........................................................................ [ 81%] ........................................................................ [ 81%] ........................................................................ [ 82%] ........................................................................ [ 82%] ........................................................................ [ 82%] ........................................................................ [ 83%] ........................................................................ [ 83%] ........................................................................ [ 84%] ........................................................................ [ 84%] ........................................................................ [ 84%] ........................................................................ [ 85%] ........................................................................ [ 85%] ........................................................................ [ 85%] ........................................................................ [ 86%] ........................................................................ [ 86%] ........................................................................ [ 87%] ........................................................................ [ 87%] ........................................................................ [ 87%] ........................................................................ [ 88%] ........................................................................ [ 88%] ........................................................................ [ 88%] ........................................................................ [ 89%] ........................................................................ [ 89%] ........................................................................ [ 90%] ..............................................ss.ss.sss..ss.sss.sss.s... [ 90%] ........................................................................ [ 90%] ....................ssss.ssssssssssssssssssssss.ssssssssssssssss........ [ 91%] ........................................................................ [ 91%] ........................................................................ [ 91%] ........................................................................ [ 92%] ........................................................................ [ 92%] ...................ss.s.sssssss.sssssssss............................... [ 93%] ..........s.ss................s.ss..............ss..s................... [ 93%] ......s.ss..........................................ss..s...........sss. [ 93%] .........s.ss........................................................... [ 94%] ........................................................................ [ 94%] ........................................................................ [ 94%] ........................................................................ [ 95%] ................................................................x....... [ 95%] ........................................................................ [ 96%] ........................................................................ [ 96%] ........................................................................ [ 96%] ..ssssssssss.ssss.ssss.sssssssssssss.ssssssssssss.sssss...........ssssss [ 97%] ss.ssssssss.ssssssss.....sss............................................ [ 97%] ........................................................................ [ 97%] ........................................................................ [ 98%] ........................................................................ [ 98%] ........................................................................ [ 99%] ........................................................................ [ 99%] ........................................................................ [ 99%] ................................. [100%] ==================================== ERRORS ==================================== _____________________ ERROR collecting tests/test_units.py _____________________ path = PosixPath('/builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_units.py') config = <_pytest.config.Config object at 0xffff7d76de80> def importtestmodule( path: Path, config: Config, ): # We assume we are only called once per module. importmode = config.getoption("--import-mode") try: > mod = import_path( path, mode=importmode, root=config.rootpath, consider_namespace_packages=config.getini("consider_namespace_packages"), ) /usr/lib/python3.14/site-packages/_pytest/python.py:498: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ path = PosixPath('/builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_units.py') def import_path( path: str | os.PathLike[str], *, mode: str | ImportMode = ImportMode.prepend, root: Path, consider_namespace_packages: bool, ) -> ModuleType: """ Import and return a module from the given path, which can be a file (a module) or a directory (a package). :param path: Path to the file to import. :param mode: Controls the underlying import mechanism that will be used: * ImportMode.prepend: the directory containing the module (or package, taking `__init__.py` files into account) will be put at the *start* of `sys.path` before being imported with `importlib.import_module`. * ImportMode.append: same as `prepend`, but the directory will be appended to the end of `sys.path`, if not already in `sys.path`. * ImportMode.importlib: uses more fine control mechanisms provided by `importlib` to import the module, which avoids having to muck with `sys.path` at all. It effectively allows having same-named test modules in different places. :param root: Used as an anchor when mode == ImportMode.importlib to obtain a unique name for the module being imported so it can safely be stored into ``sys.modules``. :param consider_namespace_packages: If True, consider namespace packages when resolving module names. :raises ImportPathMismatchError: If after importing the given `path` and the module `__file__` are different. Only raised in `prepend` and `append` modes. """ path = Path(path) mode = ImportMode(mode) if not path.exists(): raise ImportError(path) if mode is ImportMode.importlib: # Try to import this module using the standard import mechanisms, but # without touching sys.path. try: pkg_root, module_name = resolve_pkg_root_and_module_name( path, consider_namespace_packages=consider_namespace_packages ) except CouldNotResolvePathError: pass else: # If the given module name is already in sys.modules, do not import it again. with contextlib.suppress(KeyError): return sys.modules[module_name] mod = _import_module_using_spec( module_name, path, pkg_root, insert_modules=False ) if mod is not None: return mod # Could not import the module with the current sys.path, so we fall back # to importing the file as a single module, not being a part of a package. module_name = module_name_from_path(path, root) with contextlib.suppress(KeyError): return sys.modules[module_name] mod = _import_module_using_spec( module_name, path, path.parent, insert_modules=True ) if mod is None: raise ImportError(f"Can't find module {module_name} at location {path}") return mod try: pkg_root, module_name = resolve_pkg_root_and_module_name( path, consider_namespace_packages=consider_namespace_packages ) except CouldNotResolvePathError: pkg_root, module_name = path.parent, path.stem # Change sys.path permanently: restoring it at the end of this function would cause surprising # problems because of delayed imports: for example, a conftest.py file imported by this function # might have local imports, which would fail at runtime if we restored sys.path. if mode is ImportMode.append: if str(pkg_root) not in sys.path: sys.path.append(str(pkg_root)) elif mode is ImportMode.prepend: if str(pkg_root) != sys.path[0]: sys.path.insert(0, str(pkg_root)) else: assert_never(mode) > importlib.import_module(module_name) /usr/lib/python3.14/site-packages/_pytest/pathlib.py:587: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'xarray.tests.test_units', package = None def import_module(name, package=None): """Import a module. The 'package' argument is required when performing a relative import. It specifies the package to use as the anchor point from which to resolve the relative import to an absolute import. """ level = 0 if name.startswith('.'): if not package: raise TypeError("the 'package' argument is required to perform a " f"relative import for {name!r}") for character in name: if character != '.': break level += 1 > return _bootstrap._gcd_import(name[level:], package, level) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib64/python3.14/importlib/__init__.py:88: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'xarray.tests.test_units', package = None, level = 0 > ??? :1398: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'xarray.tests.test_units' import_ = > ??? :1371: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'xarray.tests.test_units' import_ = > ??? :1342: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ spec = ModuleSpec(name='xarray.tests.test_units', loader=<_pytest.assertion.rewrite.AssertionRewritingHook object at 0xffff7d...lddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_units.py') > ??? :938: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.assertion.rewrite.AssertionRewritingHook object at 0xffff7d812120> module = def exec_module(self, module: types.ModuleType) -> None: assert module.__spec__ is not None assert module.__spec__.origin is not None fn = Path(module.__spec__.origin) state = self.config.stash[assertstate_key] self._rewritten_names[module.__name__] = fn # The requested module looks like a test file, so rewrite it. This is # the most magical part of the process: load the source, rewrite the # asserts, and load the rewritten source. We also cache the rewritten # module code in a special pyc. We must be aware of the possibility of # concurrent pytest processes rewriting and loading pycs. To avoid # tricky race conditions, we maintain the following invariant: The # cached pyc is always a complete, valid pyc. Operations on it must be # atomic. POSIX's atomic rename comes in handy. write = not sys.dont_write_bytecode cache_dir = get_cache_dir(fn) if write: ok = try_makedirs(cache_dir) if not ok: write = False state.trace(f"read only directory: {cache_dir}") cache_name = fn.name[:-3] + PYC_TAIL pyc = cache_dir / cache_name # Notice that even if we're in a read-only directory, I'm going # to check for a cached pyc. This may not be optimal... co = _read_pyc(fn, pyc, state.trace) if co is None: state.trace(f"rewriting {fn!r}") source_stat, co = _rewrite_test(fn, self.config) if write: self._writing_pyc = True try: _write_pyc(state, co, source_stat, pyc) finally: self._writing_pyc = False else: state.trace(f"found cached rewritten pyc for {fn}") > exec(co, module.__dict__) /usr/lib/python3.14/site-packages/_pytest/assertion/rewrite.py:186: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ from __future__ import annotations import contextlib import functools import operator from typing import Any import numpy as np import pytest import xarray as xr from xarray.core import dtypes, duck_array_ops from xarray.tests import ( assert_allclose, assert_duckarray_allclose, assert_equal, assert_identical, requires_dask, requires_matplotlib, requires_numbagg, ) from xarray.tests.test_plot import PlotTestCase > from xarray.tests.test_variable import _PAD_XR_NP_ARGS ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_units.py:23: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.assertion.rewrite.AssertionRewritingHook object at 0xffff7d812120> module = def exec_module(self, module: types.ModuleType) -> None: assert module.__spec__ is not None assert module.__spec__.origin is not None fn = Path(module.__spec__.origin) state = self.config.stash[assertstate_key] self._rewritten_names[module.__name__] = fn # The requested module looks like a test file, so rewrite it. This is # the most magical part of the process: load the source, rewrite the # asserts, and load the rewritten source. We also cache the rewritten # module code in a special pyc. We must be aware of the possibility of # concurrent pytest processes rewriting and loading pycs. To avoid # tricky race conditions, we maintain the following invariant: The # cached pyc is always a complete, valid pyc. Operations on it must be # atomic. POSIX's atomic rename comes in handy. write = not sys.dont_write_bytecode cache_dir = get_cache_dir(fn) if write: ok = try_makedirs(cache_dir) if not ok: write = False state.trace(f"read only directory: {cache_dir}") cache_name = fn.name[:-3] + PYC_TAIL pyc = cache_dir / cache_name # Notice that even if we're in a read-only directory, I'm going # to check for a cached pyc. This may not be optimal... co = _read_pyc(fn, pyc, state.trace) if co is None: state.trace(f"rewriting {fn!r}") source_stat, co = _rewrite_test(fn, self.config) if write: self._writing_pyc = True try: _write_pyc(state, co, source_stat, pyc) finally: self._writing_pyc = False else: state.trace(f"found cached rewritten pyc for {fn}") > exec(co, module.__dict__) /usr/lib/python3.14/site-packages/_pytest/assertion/rewrite.py:186: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ from __future__ import annotations import warnings from abc import ABC from copy import copy, deepcopy from datetime import datetime, timedelta from textwrap import dedent from typing import Any, Generic import numpy as np import pandas as pd import pytest > import pytz E ModuleNotFoundError: No module named 'pytz' ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_variable.py:13: ModuleNotFoundError The above exception was the direct cause of the following exception: cls = func = .collect at 0xffff3f92dd20> when = 'collect', reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :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 instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ /usr/lib/python3.14/site-packages/_pytest/runner.py:344: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def collect() -> list[Item | Collector]: # Before collecting, if this is a Directory, load the conftests. # If a conftest import fails to load, it is considered a collection # error of the Directory collector. This is why it's done inside of the # CallInfo wrapper. # # Note: initial conftests are loaded early, not here. if isinstance(collector, Directory): collector.config.pluginmanager._loadconftestmodules( collector.path, collector.config.getoption("importmode"), rootpath=collector.config.rootpath, consider_namespace_packages=collector.config.getini( "consider_namespace_packages" ), ) > return list(collector.collect()) ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/runner.py:389: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def collect(self) -> Iterable[nodes.Item | nodes.Collector]: > self._register_setup_module_fixture() /usr/lib/python3.14/site-packages/_pytest/python.py:554: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def _register_setup_module_fixture(self) -> None: """Register an autouse, module-scoped fixture for the collected module object that invokes setUpModule/tearDownModule if either or both are available. Using a fixture to invoke this methods ensures we play nicely and unsurprisingly with other fixtures (#517). """ setup_module = _get_first_non_fixture_func( > self.obj, ("setUpModule", "setup_module") ^^^^^^^^ ) /usr/lib/python3.14/site-packages/_pytest/python.py:567: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = @property def obj(self): """Underlying Python object.""" obj = getattr(self, "_obj", None) if obj is None: > self._obj = obj = self._getobj() ^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/python.py:280: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def _getobj(self): > return importtestmodule(self.path, self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/python.py:551: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ path = PosixPath('/builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_units.py') config = <_pytest.config.Config object at 0xffff7d76de80> def importtestmodule( path: Path, config: Config, ): # We assume we are only called once per module. importmode = config.getoption("--import-mode") try: mod = import_path( path, mode=importmode, root=config.rootpath, consider_namespace_packages=config.getini("consider_namespace_packages"), ) except SyntaxError as e: raise nodes.Collector.CollectError( ExceptionInfo.from_current().getrepr(style="short") ) from e except ImportPathMismatchError as e: raise nodes.Collector.CollectError( "import file mismatch:\n" "imported module {!r} has this __file__ attribute:\n" " {}\n" "which is not the same as the test file we want to collect:\n" " {}\n" "HINT: remove __pycache__ / .pyc files and/or use a " "unique basename for your test file modules".format(*e.args) ) from e except ImportError as e: exc_info = ExceptionInfo.from_current() if config.get_verbosity() < 2: exc_info.traceback = exc_info.traceback.filter(filter_traceback) exc_repr = ( exc_info.getrepr(style="short") if exc_info.traceback else exc_info.exconly() ) formatted_tb = str(exc_repr) > raise nodes.Collector.CollectError( f"ImportError while importing test module '{path}'.\n" "Hint: make sure your test modules/packages have valid Python names.\n" "Traceback:\n" f"{formatted_tb}" ) from e E _pytest.nodes.Collector.CollectError: ImportError while importing test module '/builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_units.py'. E Hint: make sure your test modules/packages have valid Python names. E Traceback: E /usr/lib64/python3.14/importlib/__init__.py:88: in import_module E return _bootstrap._gcd_import(name[level:], package, level) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_units.py:23: in E from xarray.tests.test_variable import _PAD_XR_NP_ARGS E ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_variable.py:13: in E import pytz E E ModuleNotFoundError: No module named 'pytz' /usr/lib/python3.14/site-packages/_pytest/python.py:528: CollectError _____________________ ERROR collecting tests/test_units.py _____________________ path = PosixPath('/builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_units.py') config = <_pytest.config.Config object at 0xffffb78fde80> def importtestmodule( path: Path, config: Config, ): # We assume we are only called once per module. importmode = config.getoption("--import-mode") try: > mod = import_path( path, mode=importmode, root=config.rootpath, consider_namespace_packages=config.getini("consider_namespace_packages"), ) /usr/lib/python3.14/site-packages/_pytest/python.py:498: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ path = PosixPath('/builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_units.py') def import_path( path: str | os.PathLike[str], *, mode: str | ImportMode = ImportMode.prepend, root: Path, consider_namespace_packages: bool, ) -> ModuleType: """ Import and return a module from the given path, which can be a file (a module) or a directory (a package). :param path: Path to the file to import. :param mode: Controls the underlying import mechanism that will be used: * ImportMode.prepend: the directory containing the module (or package, taking `__init__.py` files into account) will be put at the *start* of `sys.path` before being imported with `importlib.import_module`. * ImportMode.append: same as `prepend`, but the directory will be appended to the end of `sys.path`, if not already in `sys.path`. * ImportMode.importlib: uses more fine control mechanisms provided by `importlib` to import the module, which avoids having to muck with `sys.path` at all. It effectively allows having same-named test modules in different places. :param root: Used as an anchor when mode == ImportMode.importlib to obtain a unique name for the module being imported so it can safely be stored into ``sys.modules``. :param consider_namespace_packages: If True, consider namespace packages when resolving module names. :raises ImportPathMismatchError: If after importing the given `path` and the module `__file__` are different. Only raised in `prepend` and `append` modes. """ path = Path(path) mode = ImportMode(mode) if not path.exists(): raise ImportError(path) if mode is ImportMode.importlib: # Try to import this module using the standard import mechanisms, but # without touching sys.path. try: pkg_root, module_name = resolve_pkg_root_and_module_name( path, consider_namespace_packages=consider_namespace_packages ) except CouldNotResolvePathError: pass else: # If the given module name is already in sys.modules, do not import it again. with contextlib.suppress(KeyError): return sys.modules[module_name] mod = _import_module_using_spec( module_name, path, pkg_root, insert_modules=False ) if mod is not None: return mod # Could not import the module with the current sys.path, so we fall back # to importing the file as a single module, not being a part of a package. module_name = module_name_from_path(path, root) with contextlib.suppress(KeyError): return sys.modules[module_name] mod = _import_module_using_spec( module_name, path, path.parent, insert_modules=True ) if mod is None: raise ImportError(f"Can't find module {module_name} at location {path}") return mod try: pkg_root, module_name = resolve_pkg_root_and_module_name( path, consider_namespace_packages=consider_namespace_packages ) except CouldNotResolvePathError: pkg_root, module_name = path.parent, path.stem # Change sys.path permanently: restoring it at the end of this function would cause surprising # problems because of delayed imports: for example, a conftest.py file imported by this function # might have local imports, which would fail at runtime if we restored sys.path. if mode is ImportMode.append: if str(pkg_root) not in sys.path: sys.path.append(str(pkg_root)) elif mode is ImportMode.prepend: if str(pkg_root) != sys.path[0]: sys.path.insert(0, str(pkg_root)) else: assert_never(mode) > importlib.import_module(module_name) /usr/lib/python3.14/site-packages/_pytest/pathlib.py:587: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'xarray.tests.test_units', package = None def import_module(name, package=None): """Import a module. The 'package' argument is required when performing a relative import. It specifies the package to use as the anchor point from which to resolve the relative import to an absolute import. """ level = 0 if name.startswith('.'): if not package: raise TypeError("the 'package' argument is required to perform a " f"relative import for {name!r}") for character in name: if character != '.': break level += 1 > return _bootstrap._gcd_import(name[level:], package, level) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib64/python3.14/importlib/__init__.py:88: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'xarray.tests.test_units', package = None, level = 0 > ??? :1398: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'xarray.tests.test_units' import_ = > ??? :1371: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'xarray.tests.test_units' import_ = > ??? :1342: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ spec = ModuleSpec(name='xarray.tests.test_units', loader=<_pytest.assertion.rewrite.AssertionRewritingHook object at 0xffffb7...lddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_units.py') > ??? :938: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.assertion.rewrite.AssertionRewritingHook object at 0xffffb79a2120> module = def exec_module(self, module: types.ModuleType) -> None: assert module.__spec__ is not None assert module.__spec__.origin is not None fn = Path(module.__spec__.origin) state = self.config.stash[assertstate_key] self._rewritten_names[module.__name__] = fn # The requested module looks like a test file, so rewrite it. This is # the most magical part of the process: load the source, rewrite the # asserts, and load the rewritten source. We also cache the rewritten # module code in a special pyc. We must be aware of the possibility of # concurrent pytest processes rewriting and loading pycs. To avoid # tricky race conditions, we maintain the following invariant: The # cached pyc is always a complete, valid pyc. Operations on it must be # atomic. POSIX's atomic rename comes in handy. write = not sys.dont_write_bytecode cache_dir = get_cache_dir(fn) if write: ok = try_makedirs(cache_dir) if not ok: write = False state.trace(f"read only directory: {cache_dir}") cache_name = fn.name[:-3] + PYC_TAIL pyc = cache_dir / cache_name # Notice that even if we're in a read-only directory, I'm going # to check for a cached pyc. This may not be optimal... co = _read_pyc(fn, pyc, state.trace) if co is None: state.trace(f"rewriting {fn!r}") source_stat, co = _rewrite_test(fn, self.config) if write: self._writing_pyc = True try: _write_pyc(state, co, source_stat, pyc) finally: self._writing_pyc = False else: state.trace(f"found cached rewritten pyc for {fn}") > exec(co, module.__dict__) /usr/lib/python3.14/site-packages/_pytest/assertion/rewrite.py:186: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ from __future__ import annotations import contextlib import functools import operator from typing import Any import numpy as np import pytest import xarray as xr from xarray.core import dtypes, duck_array_ops from xarray.tests import ( assert_allclose, assert_duckarray_allclose, assert_equal, assert_identical, requires_dask, requires_matplotlib, requires_numbagg, ) from xarray.tests.test_plot import PlotTestCase > from xarray.tests.test_variable import _PAD_XR_NP_ARGS ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_units.py:23: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.assertion.rewrite.AssertionRewritingHook object at 0xffffb79a2120> module = def exec_module(self, module: types.ModuleType) -> None: assert module.__spec__ is not None assert module.__spec__.origin is not None fn = Path(module.__spec__.origin) state = self.config.stash[assertstate_key] self._rewritten_names[module.__name__] = fn # The requested module looks like a test file, so rewrite it. This is # the most magical part of the process: load the source, rewrite the # asserts, and load the rewritten source. We also cache the rewritten # module code in a special pyc. We must be aware of the possibility of # concurrent pytest processes rewriting and loading pycs. To avoid # tricky race conditions, we maintain the following invariant: The # cached pyc is always a complete, valid pyc. Operations on it must be # atomic. POSIX's atomic rename comes in handy. write = not sys.dont_write_bytecode cache_dir = get_cache_dir(fn) if write: ok = try_makedirs(cache_dir) if not ok: write = False state.trace(f"read only directory: {cache_dir}") cache_name = fn.name[:-3] + PYC_TAIL pyc = cache_dir / cache_name # Notice that even if we're in a read-only directory, I'm going # to check for a cached pyc. This may not be optimal... co = _read_pyc(fn, pyc, state.trace) if co is None: state.trace(f"rewriting {fn!r}") source_stat, co = _rewrite_test(fn, self.config) if write: self._writing_pyc = True try: _write_pyc(state, co, source_stat, pyc) finally: self._writing_pyc = False else: state.trace(f"found cached rewritten pyc for {fn}") > exec(co, module.__dict__) /usr/lib/python3.14/site-packages/_pytest/assertion/rewrite.py:186: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ from __future__ import annotations import warnings from abc import ABC from copy import copy, deepcopy from datetime import datetime, timedelta from textwrap import dedent from typing import Any, Generic import numpy as np import pandas as pd import pytest > import pytz E ModuleNotFoundError: No module named 'pytz' ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_variable.py:13: ModuleNotFoundError The above exception was the direct cause of the following exception: cls = func = .collect at 0xffff89831fe0> when = 'collect', reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :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 instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ /usr/lib/python3.14/site-packages/_pytest/runner.py:344: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def collect() -> list[Item | Collector]: # Before collecting, if this is a Directory, load the conftests. # If a conftest import fails to load, it is considered a collection # error of the Directory collector. This is why it's done inside of the # CallInfo wrapper. # # Note: initial conftests are loaded early, not here. if isinstance(collector, Directory): collector.config.pluginmanager._loadconftestmodules( collector.path, collector.config.getoption("importmode"), rootpath=collector.config.rootpath, consider_namespace_packages=collector.config.getini( "consider_namespace_packages" ), ) > return list(collector.collect()) ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/runner.py:389: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def collect(self) -> Iterable[nodes.Item | nodes.Collector]: > self._register_setup_module_fixture() /usr/lib/python3.14/site-packages/_pytest/python.py:554: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def _register_setup_module_fixture(self) -> None: """Register an autouse, module-scoped fixture for the collected module object that invokes setUpModule/tearDownModule if either or both are available. Using a fixture to invoke this methods ensures we play nicely and unsurprisingly with other fixtures (#517). """ setup_module = _get_first_non_fixture_func( > self.obj, ("setUpModule", "setup_module") ^^^^^^^^ ) /usr/lib/python3.14/site-packages/_pytest/python.py:567: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = @property def obj(self): """Underlying Python object.""" obj = getattr(self, "_obj", None) if obj is None: > self._obj = obj = self._getobj() ^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/python.py:280: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def _getobj(self): > return importtestmodule(self.path, self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/python.py:551: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ path = PosixPath('/builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_units.py') config = <_pytest.config.Config object at 0xffffb78fde80> def importtestmodule( path: Path, config: Config, ): # We assume we are only called once per module. importmode = config.getoption("--import-mode") try: mod = import_path( path, mode=importmode, root=config.rootpath, consider_namespace_packages=config.getini("consider_namespace_packages"), ) except SyntaxError as e: raise nodes.Collector.CollectError( ExceptionInfo.from_current().getrepr(style="short") ) from e except ImportPathMismatchError as e: raise nodes.Collector.CollectError( "import file mismatch:\n" "imported module {!r} has this __file__ attribute:\n" " {}\n" "which is not the same as the test file we want to collect:\n" " {}\n" "HINT: remove __pycache__ / .pyc files and/or use a " "unique basename for your test file modules".format(*e.args) ) from e except ImportError as e: exc_info = ExceptionInfo.from_current() if config.get_verbosity() < 2: exc_info.traceback = exc_info.traceback.filter(filter_traceback) exc_repr = ( exc_info.getrepr(style="short") if exc_info.traceback else exc_info.exconly() ) formatted_tb = str(exc_repr) > raise nodes.Collector.CollectError( f"ImportError while importing test module '{path}'.\n" "Hint: make sure your test modules/packages have valid Python names.\n" "Traceback:\n" f"{formatted_tb}" ) from e E _pytest.nodes.Collector.CollectError: ImportError while importing test module '/builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_units.py'. E Hint: make sure your test modules/packages have valid Python names. E Traceback: E /usr/lib64/python3.14/importlib/__init__.py:88: in import_module E return _bootstrap._gcd_import(name[level:], package, level) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_units.py:23: in E from xarray.tests.test_variable import _PAD_XR_NP_ARGS E ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_variable.py:13: in E import pytz E E ModuleNotFoundError: No module named 'pytz' /usr/lib/python3.14/site-packages/_pytest/python.py:528: CollectError _____________________ ERROR collecting tests/test_units.py _____________________ path = PosixPath('/builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_units.py') config = <_pytest.config.Config object at 0xffffb837de80> def importtestmodule( path: Path, config: Config, ): # We assume we are only called once per module. importmode = config.getoption("--import-mode") try: > mod = import_path( path, mode=importmode, root=config.rootpath, consider_namespace_packages=config.getini("consider_namespace_packages"), ) /usr/lib/python3.14/site-packages/_pytest/python.py:498: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ path = PosixPath('/builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_units.py') def import_path( path: str | os.PathLike[str], *, mode: str | ImportMode = ImportMode.prepend, root: Path, consider_namespace_packages: bool, ) -> ModuleType: """ Import and return a module from the given path, which can be a file (a module) or a directory (a package). :param path: Path to the file to import. :param mode: Controls the underlying import mechanism that will be used: * ImportMode.prepend: the directory containing the module (or package, taking `__init__.py` files into account) will be put at the *start* of `sys.path` before being imported with `importlib.import_module`. * ImportMode.append: same as `prepend`, but the directory will be appended to the end of `sys.path`, if not already in `sys.path`. * ImportMode.importlib: uses more fine control mechanisms provided by `importlib` to import the module, which avoids having to muck with `sys.path` at all. It effectively allows having same-named test modules in different places. :param root: Used as an anchor when mode == ImportMode.importlib to obtain a unique name for the module being imported so it can safely be stored into ``sys.modules``. :param consider_namespace_packages: If True, consider namespace packages when resolving module names. :raises ImportPathMismatchError: If after importing the given `path` and the module `__file__` are different. Only raised in `prepend` and `append` modes. """ path = Path(path) mode = ImportMode(mode) if not path.exists(): raise ImportError(path) if mode is ImportMode.importlib: # Try to import this module using the standard import mechanisms, but # without touching sys.path. try: pkg_root, module_name = resolve_pkg_root_and_module_name( path, consider_namespace_packages=consider_namespace_packages ) except CouldNotResolvePathError: pass else: # If the given module name is already in sys.modules, do not import it again. with contextlib.suppress(KeyError): return sys.modules[module_name] mod = _import_module_using_spec( module_name, path, pkg_root, insert_modules=False ) if mod is not None: return mod # Could not import the module with the current sys.path, so we fall back # to importing the file as a single module, not being a part of a package. module_name = module_name_from_path(path, root) with contextlib.suppress(KeyError): return sys.modules[module_name] mod = _import_module_using_spec( module_name, path, path.parent, insert_modules=True ) if mod is None: raise ImportError(f"Can't find module {module_name} at location {path}") return mod try: pkg_root, module_name = resolve_pkg_root_and_module_name( path, consider_namespace_packages=consider_namespace_packages ) except CouldNotResolvePathError: pkg_root, module_name = path.parent, path.stem # Change sys.path permanently: restoring it at the end of this function would cause surprising # problems because of delayed imports: for example, a conftest.py file imported by this function # might have local imports, which would fail at runtime if we restored sys.path. if mode is ImportMode.append: if str(pkg_root) not in sys.path: sys.path.append(str(pkg_root)) elif mode is ImportMode.prepend: if str(pkg_root) != sys.path[0]: sys.path.insert(0, str(pkg_root)) else: assert_never(mode) > importlib.import_module(module_name) /usr/lib/python3.14/site-packages/_pytest/pathlib.py:587: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'xarray.tests.test_units', package = None def import_module(name, package=None): """Import a module. The 'package' argument is required when performing a relative import. It specifies the package to use as the anchor point from which to resolve the relative import to an absolute import. """ level = 0 if name.startswith('.'): if not package: raise TypeError("the 'package' argument is required to perform a " f"relative import for {name!r}") for character in name: if character != '.': break level += 1 > return _bootstrap._gcd_import(name[level:], package, level) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib64/python3.14/importlib/__init__.py:88: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'xarray.tests.test_units', package = None, level = 0 > ??? :1398: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'xarray.tests.test_units' import_ = > ??? :1371: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'xarray.tests.test_units' import_ = > ??? :1342: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ spec = ModuleSpec(name='xarray.tests.test_units', loader=<_pytest.assertion.rewrite.AssertionRewritingHook object at 0xffffb8...lddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_units.py') > ??? :938: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.assertion.rewrite.AssertionRewritingHook object at 0xffffb8422120> module = def exec_module(self, module: types.ModuleType) -> None: assert module.__spec__ is not None assert module.__spec__.origin is not None fn = Path(module.__spec__.origin) state = self.config.stash[assertstate_key] self._rewritten_names[module.__name__] = fn # The requested module looks like a test file, so rewrite it. This is # the most magical part of the process: load the source, rewrite the # asserts, and load the rewritten source. We also cache the rewritten # module code in a special pyc. We must be aware of the possibility of # concurrent pytest processes rewriting and loading pycs. To avoid # tricky race conditions, we maintain the following invariant: The # cached pyc is always a complete, valid pyc. Operations on it must be # atomic. POSIX's atomic rename comes in handy. write = not sys.dont_write_bytecode cache_dir = get_cache_dir(fn) if write: ok = try_makedirs(cache_dir) if not ok: write = False state.trace(f"read only directory: {cache_dir}") cache_name = fn.name[:-3] + PYC_TAIL pyc = cache_dir / cache_name # Notice that even if we're in a read-only directory, I'm going # to check for a cached pyc. This may not be optimal... co = _read_pyc(fn, pyc, state.trace) if co is None: state.trace(f"rewriting {fn!r}") source_stat, co = _rewrite_test(fn, self.config) if write: self._writing_pyc = True try: _write_pyc(state, co, source_stat, pyc) finally: self._writing_pyc = False else: state.trace(f"found cached rewritten pyc for {fn}") > exec(co, module.__dict__) /usr/lib/python3.14/site-packages/_pytest/assertion/rewrite.py:186: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ from __future__ import annotations import contextlib import functools import operator from typing import Any import numpy as np import pytest import xarray as xr from xarray.core import dtypes, duck_array_ops from xarray.tests import ( assert_allclose, assert_duckarray_allclose, assert_equal, assert_identical, requires_dask, requires_matplotlib, requires_numbagg, ) from xarray.tests.test_plot import PlotTestCase > from xarray.tests.test_variable import _PAD_XR_NP_ARGS ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_units.py:23: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.assertion.rewrite.AssertionRewritingHook object at 0xffffb8422120> module = def exec_module(self, module: types.ModuleType) -> None: assert module.__spec__ is not None assert module.__spec__.origin is not None fn = Path(module.__spec__.origin) state = self.config.stash[assertstate_key] self._rewritten_names[module.__name__] = fn # The requested module looks like a test file, so rewrite it. This is # the most magical part of the process: load the source, rewrite the # asserts, and load the rewritten source. We also cache the rewritten # module code in a special pyc. We must be aware of the possibility of # concurrent pytest processes rewriting and loading pycs. To avoid # tricky race conditions, we maintain the following invariant: The # cached pyc is always a complete, valid pyc. Operations on it must be # atomic. POSIX's atomic rename comes in handy. write = not sys.dont_write_bytecode cache_dir = get_cache_dir(fn) if write: ok = try_makedirs(cache_dir) if not ok: write = False state.trace(f"read only directory: {cache_dir}") cache_name = fn.name[:-3] + PYC_TAIL pyc = cache_dir / cache_name # Notice that even if we're in a read-only directory, I'm going # to check for a cached pyc. This may not be optimal... co = _read_pyc(fn, pyc, state.trace) if co is None: state.trace(f"rewriting {fn!r}") source_stat, co = _rewrite_test(fn, self.config) if write: self._writing_pyc = True try: _write_pyc(state, co, source_stat, pyc) finally: self._writing_pyc = False else: state.trace(f"found cached rewritten pyc for {fn}") > exec(co, module.__dict__) /usr/lib/python3.14/site-packages/_pytest/assertion/rewrite.py:186: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ from __future__ import annotations import warnings from abc import ABC from copy import copy, deepcopy from datetime import datetime, timedelta from textwrap import dedent from typing import Any, Generic import numpy as np import pandas as pd import pytest > import pytz E ModuleNotFoundError: No module named 'pytz' ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_variable.py:13: ModuleNotFoundError The above exception was the direct cause of the following exception: cls = func = .collect at 0xffff86bd1e80> when = 'collect', reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :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 instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ /usr/lib/python3.14/site-packages/_pytest/runner.py:344: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def collect() -> list[Item | Collector]: # Before collecting, if this is a Directory, load the conftests. # If a conftest import fails to load, it is considered a collection # error of the Directory collector. This is why it's done inside of the # CallInfo wrapper. # # Note: initial conftests are loaded early, not here. if isinstance(collector, Directory): collector.config.pluginmanager._loadconftestmodules( collector.path, collector.config.getoption("importmode"), rootpath=collector.config.rootpath, consider_namespace_packages=collector.config.getini( "consider_namespace_packages" ), ) > return list(collector.collect()) ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/runner.py:389: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def collect(self) -> Iterable[nodes.Item | nodes.Collector]: > self._register_setup_module_fixture() /usr/lib/python3.14/site-packages/_pytest/python.py:554: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def _register_setup_module_fixture(self) -> None: """Register an autouse, module-scoped fixture for the collected module object that invokes setUpModule/tearDownModule if either or both are available. Using a fixture to invoke this methods ensures we play nicely and unsurprisingly with other fixtures (#517). """ setup_module = _get_first_non_fixture_func( > self.obj, ("setUpModule", "setup_module") ^^^^^^^^ ) /usr/lib/python3.14/site-packages/_pytest/python.py:567: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = @property def obj(self): """Underlying Python object.""" obj = getattr(self, "_obj", None) if obj is None: > self._obj = obj = self._getobj() ^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/python.py:280: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def _getobj(self): > return importtestmodule(self.path, self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/python.py:551: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ path = PosixPath('/builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_units.py') config = <_pytest.config.Config object at 0xffffb837de80> def importtestmodule( path: Path, config: Config, ): # We assume we are only called once per module. importmode = config.getoption("--import-mode") try: mod = import_path( path, mode=importmode, root=config.rootpath, consider_namespace_packages=config.getini("consider_namespace_packages"), ) except SyntaxError as e: raise nodes.Collector.CollectError( ExceptionInfo.from_current().getrepr(style="short") ) from e except ImportPathMismatchError as e: raise nodes.Collector.CollectError( "import file mismatch:\n" "imported module {!r} has this __file__ attribute:\n" " {}\n" "which is not the same as the test file we want to collect:\n" " {}\n" "HINT: remove __pycache__ / .pyc files and/or use a " "unique basename for your test file modules".format(*e.args) ) from e except ImportError as e: exc_info = ExceptionInfo.from_current() if config.get_verbosity() < 2: exc_info.traceback = exc_info.traceback.filter(filter_traceback) exc_repr = ( exc_info.getrepr(style="short") if exc_info.traceback else exc_info.exconly() ) formatted_tb = str(exc_repr) > raise nodes.Collector.CollectError( f"ImportError while importing test module '{path}'.\n" "Hint: make sure your test modules/packages have valid Python names.\n" "Traceback:\n" f"{formatted_tb}" ) from e E _pytest.nodes.Collector.CollectError: ImportError while importing test module '/builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_units.py'. E Hint: make sure your test modules/packages have valid Python names. E Traceback: E /usr/lib64/python3.14/importlib/__init__.py:88: in import_module E return _bootstrap._gcd_import(name[level:], package, level) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_units.py:23: in E from xarray.tests.test_variable import _PAD_XR_NP_ARGS E ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_variable.py:13: in E import pytz E E ModuleNotFoundError: No module named 'pytz' /usr/lib/python3.14/site-packages/_pytest/python.py:528: CollectError _____________________ ERROR collecting tests/test_units.py _____________________ path = PosixPath('/builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_units.py') config = <_pytest.config.Config object at 0xffff979fde80> def importtestmodule( path: Path, config: Config, ): # We assume we are only called once per module. importmode = config.getoption("--import-mode") try: > mod = import_path( path, mode=importmode, root=config.rootpath, consider_namespace_packages=config.getini("consider_namespace_packages"), ) /usr/lib/python3.14/site-packages/_pytest/python.py:498: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ path = PosixPath('/builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_units.py') def import_path( path: str | os.PathLike[str], *, mode: str | ImportMode = ImportMode.prepend, root: Path, consider_namespace_packages: bool, ) -> ModuleType: """ Import and return a module from the given path, which can be a file (a module) or a directory (a package). :param path: Path to the file to import. :param mode: Controls the underlying import mechanism that will be used: * ImportMode.prepend: the directory containing the module (or package, taking `__init__.py` files into account) will be put at the *start* of `sys.path` before being imported with `importlib.import_module`. * ImportMode.append: same as `prepend`, but the directory will be appended to the end of `sys.path`, if not already in `sys.path`. * ImportMode.importlib: uses more fine control mechanisms provided by `importlib` to import the module, which avoids having to muck with `sys.path` at all. It effectively allows having same-named test modules in different places. :param root: Used as an anchor when mode == ImportMode.importlib to obtain a unique name for the module being imported so it can safely be stored into ``sys.modules``. :param consider_namespace_packages: If True, consider namespace packages when resolving module names. :raises ImportPathMismatchError: If after importing the given `path` and the module `__file__` are different. Only raised in `prepend` and `append` modes. """ path = Path(path) mode = ImportMode(mode) if not path.exists(): raise ImportError(path) if mode is ImportMode.importlib: # Try to import this module using the standard import mechanisms, but # without touching sys.path. try: pkg_root, module_name = resolve_pkg_root_and_module_name( path, consider_namespace_packages=consider_namespace_packages ) except CouldNotResolvePathError: pass else: # If the given module name is already in sys.modules, do not import it again. with contextlib.suppress(KeyError): return sys.modules[module_name] mod = _import_module_using_spec( module_name, path, pkg_root, insert_modules=False ) if mod is not None: return mod # Could not import the module with the current sys.path, so we fall back # to importing the file as a single module, not being a part of a package. module_name = module_name_from_path(path, root) with contextlib.suppress(KeyError): return sys.modules[module_name] mod = _import_module_using_spec( module_name, path, path.parent, insert_modules=True ) if mod is None: raise ImportError(f"Can't find module {module_name} at location {path}") return mod try: pkg_root, module_name = resolve_pkg_root_and_module_name( path, consider_namespace_packages=consider_namespace_packages ) except CouldNotResolvePathError: pkg_root, module_name = path.parent, path.stem # Change sys.path permanently: restoring it at the end of this function would cause surprising # problems because of delayed imports: for example, a conftest.py file imported by this function # might have local imports, which would fail at runtime if we restored sys.path. if mode is ImportMode.append: if str(pkg_root) not in sys.path: sys.path.append(str(pkg_root)) elif mode is ImportMode.prepend: if str(pkg_root) != sys.path[0]: sys.path.insert(0, str(pkg_root)) else: assert_never(mode) > importlib.import_module(module_name) /usr/lib/python3.14/site-packages/_pytest/pathlib.py:587: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'xarray.tests.test_units', package = None def import_module(name, package=None): """Import a module. The 'package' argument is required when performing a relative import. It specifies the package to use as the anchor point from which to resolve the relative import to an absolute import. """ level = 0 if name.startswith('.'): if not package: raise TypeError("the 'package' argument is required to perform a " f"relative import for {name!r}") for character in name: if character != '.': break level += 1 > return _bootstrap._gcd_import(name[level:], package, level) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib64/python3.14/importlib/__init__.py:88: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'xarray.tests.test_units', package = None, level = 0 > ??? :1398: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'xarray.tests.test_units' import_ = > ??? :1371: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'xarray.tests.test_units' import_ = > ??? :1342: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ spec = ModuleSpec(name='xarray.tests.test_units', loader=<_pytest.assertion.rewrite.AssertionRewritingHook object at 0xffff97...lddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_units.py') > ??? :938: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.assertion.rewrite.AssertionRewritingHook object at 0xffff97aa2120> module = def exec_module(self, module: types.ModuleType) -> None: assert module.__spec__ is not None assert module.__spec__.origin is not None fn = Path(module.__spec__.origin) state = self.config.stash[assertstate_key] self._rewritten_names[module.__name__] = fn # The requested module looks like a test file, so rewrite it. This is # the most magical part of the process: load the source, rewrite the # asserts, and load the rewritten source. We also cache the rewritten # module code in a special pyc. We must be aware of the possibility of # concurrent pytest processes rewriting and loading pycs. To avoid # tricky race conditions, we maintain the following invariant: The # cached pyc is always a complete, valid pyc. Operations on it must be # atomic. POSIX's atomic rename comes in handy. write = not sys.dont_write_bytecode cache_dir = get_cache_dir(fn) if write: ok = try_makedirs(cache_dir) if not ok: write = False state.trace(f"read only directory: {cache_dir}") cache_name = fn.name[:-3] + PYC_TAIL pyc = cache_dir / cache_name # Notice that even if we're in a read-only directory, I'm going # to check for a cached pyc. This may not be optimal... co = _read_pyc(fn, pyc, state.trace) if co is None: state.trace(f"rewriting {fn!r}") source_stat, co = _rewrite_test(fn, self.config) if write: self._writing_pyc = True try: _write_pyc(state, co, source_stat, pyc) finally: self._writing_pyc = False else: state.trace(f"found cached rewritten pyc for {fn}") > exec(co, module.__dict__) /usr/lib/python3.14/site-packages/_pytest/assertion/rewrite.py:186: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ from __future__ import annotations import contextlib import functools import operator from typing import Any import numpy as np import pytest import xarray as xr from xarray.core import dtypes, duck_array_ops from xarray.tests import ( assert_allclose, assert_duckarray_allclose, assert_equal, assert_identical, requires_dask, requires_matplotlib, requires_numbagg, ) from xarray.tests.test_plot import PlotTestCase > from xarray.tests.test_variable import _PAD_XR_NP_ARGS ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_units.py:23: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.assertion.rewrite.AssertionRewritingHook object at 0xffff97aa2120> module = def exec_module(self, module: types.ModuleType) -> None: assert module.__spec__ is not None assert module.__spec__.origin is not None fn = Path(module.__spec__.origin) state = self.config.stash[assertstate_key] self._rewritten_names[module.__name__] = fn # The requested module looks like a test file, so rewrite it. This is # the most magical part of the process: load the source, rewrite the # asserts, and load the rewritten source. We also cache the rewritten # module code in a special pyc. We must be aware of the possibility of # concurrent pytest processes rewriting and loading pycs. To avoid # tricky race conditions, we maintain the following invariant: The # cached pyc is always a complete, valid pyc. Operations on it must be # atomic. POSIX's atomic rename comes in handy. write = not sys.dont_write_bytecode cache_dir = get_cache_dir(fn) if write: ok = try_makedirs(cache_dir) if not ok: write = False state.trace(f"read only directory: {cache_dir}") cache_name = fn.name[:-3] + PYC_TAIL pyc = cache_dir / cache_name # Notice that even if we're in a read-only directory, I'm going # to check for a cached pyc. This may not be optimal... co = _read_pyc(fn, pyc, state.trace) if co is None: state.trace(f"rewriting {fn!r}") source_stat, co = _rewrite_test(fn, self.config) if write: self._writing_pyc = True try: _write_pyc(state, co, source_stat, pyc) finally: self._writing_pyc = False else: state.trace(f"found cached rewritten pyc for {fn}") > exec(co, module.__dict__) /usr/lib/python3.14/site-packages/_pytest/assertion/rewrite.py:186: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ from __future__ import annotations import warnings from abc import ABC from copy import copy, deepcopy from datetime import datetime, timedelta from textwrap import dedent from typing import Any, Generic import numpy as np import pandas as pd import pytest > import pytz E ModuleNotFoundError: No module named 'pytz' ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_variable.py:13: ModuleNotFoundError The above exception was the direct cause of the following exception: cls = func = .collect at 0xffff6a129dd0> when = 'collect', reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :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 instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ /usr/lib/python3.14/site-packages/_pytest/runner.py:344: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def collect() -> list[Item | Collector]: # Before collecting, if this is a Directory, load the conftests. # If a conftest import fails to load, it is considered a collection # error of the Directory collector. This is why it's done inside of the # CallInfo wrapper. # # Note: initial conftests are loaded early, not here. if isinstance(collector, Directory): collector.config.pluginmanager._loadconftestmodules( collector.path, collector.config.getoption("importmode"), rootpath=collector.config.rootpath, consider_namespace_packages=collector.config.getini( "consider_namespace_packages" ), ) > return list(collector.collect()) ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/runner.py:389: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def collect(self) -> Iterable[nodes.Item | nodes.Collector]: > self._register_setup_module_fixture() /usr/lib/python3.14/site-packages/_pytest/python.py:554: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def _register_setup_module_fixture(self) -> None: """Register an autouse, module-scoped fixture for the collected module object that invokes setUpModule/tearDownModule if either or both are available. Using a fixture to invoke this methods ensures we play nicely and unsurprisingly with other fixtures (#517). """ setup_module = _get_first_non_fixture_func( > self.obj, ("setUpModule", "setup_module") ^^^^^^^^ ) /usr/lib/python3.14/site-packages/_pytest/python.py:567: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = @property def obj(self): """Underlying Python object.""" obj = getattr(self, "_obj", None) if obj is None: > self._obj = obj = self._getobj() ^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/python.py:280: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def _getobj(self): > return importtestmodule(self.path, self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/python.py:551: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ path = PosixPath('/builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_units.py') config = <_pytest.config.Config object at 0xffff979fde80> def importtestmodule( path: Path, config: Config, ): # We assume we are only called once per module. importmode = config.getoption("--import-mode") try: mod = import_path( path, mode=importmode, root=config.rootpath, consider_namespace_packages=config.getini("consider_namespace_packages"), ) except SyntaxError as e: raise nodes.Collector.CollectError( ExceptionInfo.from_current().getrepr(style="short") ) from e except ImportPathMismatchError as e: raise nodes.Collector.CollectError( "import file mismatch:\n" "imported module {!r} has this __file__ attribute:\n" " {}\n" "which is not the same as the test file we want to collect:\n" " {}\n" "HINT: remove __pycache__ / .pyc files and/or use a " "unique basename for your test file modules".format(*e.args) ) from e except ImportError as e: exc_info = ExceptionInfo.from_current() if config.get_verbosity() < 2: exc_info.traceback = exc_info.traceback.filter(filter_traceback) exc_repr = ( exc_info.getrepr(style="short") if exc_info.traceback else exc_info.exconly() ) formatted_tb = str(exc_repr) > raise nodes.Collector.CollectError( f"ImportError while importing test module '{path}'.\n" "Hint: make sure your test modules/packages have valid Python names.\n" "Traceback:\n" f"{formatted_tb}" ) from e E _pytest.nodes.Collector.CollectError: ImportError while importing test module '/builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_units.py'. E Hint: make sure your test modules/packages have valid Python names. E Traceback: E /usr/lib64/python3.14/importlib/__init__.py:88: in import_module E return _bootstrap._gcd_import(name[level:], package, level) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_units.py:23: in E from xarray.tests.test_variable import _PAD_XR_NP_ARGS E ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_variable.py:13: in E import pytz E E ModuleNotFoundError: No module named 'pytz' /usr/lib/python3.14/site-packages/_pytest/python.py:528: CollectError ___________________ ERROR collecting tests/test_variable.py ____________________ path = PosixPath('/builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_variable.py') config = <_pytest.config.Config object at 0xffff7d76de80> def importtestmodule( path: Path, config: Config, ): # We assume we are only called once per module. importmode = config.getoption("--import-mode") try: > mod = import_path( path, mode=importmode, root=config.rootpath, consider_namespace_packages=config.getini("consider_namespace_packages"), ) /usr/lib/python3.14/site-packages/_pytest/python.py:498: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ path = PosixPath('/builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_variable.py') def import_path( path: str | os.PathLike[str], *, mode: str | ImportMode = ImportMode.prepend, root: Path, consider_namespace_packages: bool, ) -> ModuleType: """ Import and return a module from the given path, which can be a file (a module) or a directory (a package). :param path: Path to the file to import. :param mode: Controls the underlying import mechanism that will be used: * ImportMode.prepend: the directory containing the module (or package, taking `__init__.py` files into account) will be put at the *start* of `sys.path` before being imported with `importlib.import_module`. * ImportMode.append: same as `prepend`, but the directory will be appended to the end of `sys.path`, if not already in `sys.path`. * ImportMode.importlib: uses more fine control mechanisms provided by `importlib` to import the module, which avoids having to muck with `sys.path` at all. It effectively allows having same-named test modules in different places. :param root: Used as an anchor when mode == ImportMode.importlib to obtain a unique name for the module being imported so it can safely be stored into ``sys.modules``. :param consider_namespace_packages: If True, consider namespace packages when resolving module names. :raises ImportPathMismatchError: If after importing the given `path` and the module `__file__` are different. Only raised in `prepend` and `append` modes. """ path = Path(path) mode = ImportMode(mode) if not path.exists(): raise ImportError(path) if mode is ImportMode.importlib: # Try to import this module using the standard import mechanisms, but # without touching sys.path. try: pkg_root, module_name = resolve_pkg_root_and_module_name( path, consider_namespace_packages=consider_namespace_packages ) except CouldNotResolvePathError: pass else: # If the given module name is already in sys.modules, do not import it again. with contextlib.suppress(KeyError): return sys.modules[module_name] mod = _import_module_using_spec( module_name, path, pkg_root, insert_modules=False ) if mod is not None: return mod # Could not import the module with the current sys.path, so we fall back # to importing the file as a single module, not being a part of a package. module_name = module_name_from_path(path, root) with contextlib.suppress(KeyError): return sys.modules[module_name] mod = _import_module_using_spec( module_name, path, path.parent, insert_modules=True ) if mod is None: raise ImportError(f"Can't find module {module_name} at location {path}") return mod try: pkg_root, module_name = resolve_pkg_root_and_module_name( path, consider_namespace_packages=consider_namespace_packages ) except CouldNotResolvePathError: pkg_root, module_name = path.parent, path.stem # Change sys.path permanently: restoring it at the end of this function would cause surprising # problems because of delayed imports: for example, a conftest.py file imported by this function # might have local imports, which would fail at runtime if we restored sys.path. if mode is ImportMode.append: if str(pkg_root) not in sys.path: sys.path.append(str(pkg_root)) elif mode is ImportMode.prepend: if str(pkg_root) != sys.path[0]: sys.path.insert(0, str(pkg_root)) else: assert_never(mode) > importlib.import_module(module_name) /usr/lib/python3.14/site-packages/_pytest/pathlib.py:587: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'xarray.tests.test_variable', package = None def import_module(name, package=None): """Import a module. The 'package' argument is required when performing a relative import. It specifies the package to use as the anchor point from which to resolve the relative import to an absolute import. """ level = 0 if name.startswith('.'): if not package: raise TypeError("the 'package' argument is required to perform a " f"relative import for {name!r}") for character in name: if character != '.': break level += 1 > return _bootstrap._gcd_import(name[level:], package, level) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib64/python3.14/importlib/__init__.py:88: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'xarray.tests.test_variable', package = None, level = 0 > ??? :1398: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'xarray.tests.test_variable' import_ = > ??? :1371: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'xarray.tests.test_variable' import_ = > ??? :1342: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ spec = ModuleSpec(name='xarray.tests.test_variable', loader=<_pytest.assertion.rewrite.AssertionRewritingHook object at 0xfff...ir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_variable.py') > ??? :938: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.assertion.rewrite.AssertionRewritingHook object at 0xffff7d812120> module = def exec_module(self, module: types.ModuleType) -> None: assert module.__spec__ is not None assert module.__spec__.origin is not None fn = Path(module.__spec__.origin) state = self.config.stash[assertstate_key] self._rewritten_names[module.__name__] = fn # The requested module looks like a test file, so rewrite it. This is # the most magical part of the process: load the source, rewrite the # asserts, and load the rewritten source. We also cache the rewritten # module code in a special pyc. We must be aware of the possibility of # concurrent pytest processes rewriting and loading pycs. To avoid # tricky race conditions, we maintain the following invariant: The # cached pyc is always a complete, valid pyc. Operations on it must be # atomic. POSIX's atomic rename comes in handy. write = not sys.dont_write_bytecode cache_dir = get_cache_dir(fn) if write: ok = try_makedirs(cache_dir) if not ok: write = False state.trace(f"read only directory: {cache_dir}") cache_name = fn.name[:-3] + PYC_TAIL pyc = cache_dir / cache_name # Notice that even if we're in a read-only directory, I'm going # to check for a cached pyc. This may not be optimal... co = _read_pyc(fn, pyc, state.trace) if co is None: state.trace(f"rewriting {fn!r}") source_stat, co = _rewrite_test(fn, self.config) if write: self._writing_pyc = True try: _write_pyc(state, co, source_stat, pyc) finally: self._writing_pyc = False else: state.trace(f"found cached rewritten pyc for {fn}") > exec(co, module.__dict__) /usr/lib/python3.14/site-packages/_pytest/assertion/rewrite.py:186: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ from __future__ import annotations import warnings from abc import ABC from copy import copy, deepcopy from datetime import datetime, timedelta from textwrap import dedent from typing import Any, Generic import numpy as np import pandas as pd import pytest > import pytz E ModuleNotFoundError: No module named 'pytz' ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_variable.py:13: ModuleNotFoundError The above exception was the direct cause of the following exception: cls = func = .collect at 0xffff3d80ecf0> when = 'collect', reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :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 instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ /usr/lib/python3.14/site-packages/_pytest/runner.py:344: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def collect() -> list[Item | Collector]: # Before collecting, if this is a Directory, load the conftests. # If a conftest import fails to load, it is considered a collection # error of the Directory collector. This is why it's done inside of the # CallInfo wrapper. # # Note: initial conftests are loaded early, not here. if isinstance(collector, Directory): collector.config.pluginmanager._loadconftestmodules( collector.path, collector.config.getoption("importmode"), rootpath=collector.config.rootpath, consider_namespace_packages=collector.config.getini( "consider_namespace_packages" ), ) > return list(collector.collect()) ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/runner.py:389: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def collect(self) -> Iterable[nodes.Item | nodes.Collector]: > self._register_setup_module_fixture() /usr/lib/python3.14/site-packages/_pytest/python.py:554: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def _register_setup_module_fixture(self) -> None: """Register an autouse, module-scoped fixture for the collected module object that invokes setUpModule/tearDownModule if either or both are available. Using a fixture to invoke this methods ensures we play nicely and unsurprisingly with other fixtures (#517). """ setup_module = _get_first_non_fixture_func( > self.obj, ("setUpModule", "setup_module") ^^^^^^^^ ) /usr/lib/python3.14/site-packages/_pytest/python.py:567: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = @property def obj(self): """Underlying Python object.""" obj = getattr(self, "_obj", None) if obj is None: > self._obj = obj = self._getobj() ^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/python.py:280: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def _getobj(self): > return importtestmodule(self.path, self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/python.py:551: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ path = PosixPath('/builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_variable.py') config = <_pytest.config.Config object at 0xffff7d76de80> def importtestmodule( path: Path, config: Config, ): # We assume we are only called once per module. importmode = config.getoption("--import-mode") try: mod = import_path( path, mode=importmode, root=config.rootpath, consider_namespace_packages=config.getini("consider_namespace_packages"), ) except SyntaxError as e: raise nodes.Collector.CollectError( ExceptionInfo.from_current().getrepr(style="short") ) from e except ImportPathMismatchError as e: raise nodes.Collector.CollectError( "import file mismatch:\n" "imported module {!r} has this __file__ attribute:\n" " {}\n" "which is not the same as the test file we want to collect:\n" " {}\n" "HINT: remove __pycache__ / .pyc files and/or use a " "unique basename for your test file modules".format(*e.args) ) from e except ImportError as e: exc_info = ExceptionInfo.from_current() if config.get_verbosity() < 2: exc_info.traceback = exc_info.traceback.filter(filter_traceback) exc_repr = ( exc_info.getrepr(style="short") if exc_info.traceback else exc_info.exconly() ) formatted_tb = str(exc_repr) > raise nodes.Collector.CollectError( f"ImportError while importing test module '{path}'.\n" "Hint: make sure your test modules/packages have valid Python names.\n" "Traceback:\n" f"{formatted_tb}" ) from e E _pytest.nodes.Collector.CollectError: ImportError while importing test module '/builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_variable.py'. E Hint: make sure your test modules/packages have valid Python names. E Traceback: E /usr/lib64/python3.14/importlib/__init__.py:88: in import_module E return _bootstrap._gcd_import(name[level:], package, level) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_variable.py:13: in E import pytz E E ModuleNotFoundError: No module named 'pytz' /usr/lib/python3.14/site-packages/_pytest/python.py:528: CollectError ___________________ ERROR collecting tests/test_variable.py ____________________ path = PosixPath('/builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_variable.py') config = <_pytest.config.Config object at 0xffffb78fde80> def importtestmodule( path: Path, config: Config, ): # We assume we are only called once per module. importmode = config.getoption("--import-mode") try: > mod = import_path( path, mode=importmode, root=config.rootpath, consider_namespace_packages=config.getini("consider_namespace_packages"), ) /usr/lib/python3.14/site-packages/_pytest/python.py:498: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ path = PosixPath('/builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_variable.py') def import_path( path: str | os.PathLike[str], *, mode: str | ImportMode = ImportMode.prepend, root: Path, consider_namespace_packages: bool, ) -> ModuleType: """ Import and return a module from the given path, which can be a file (a module) or a directory (a package). :param path: Path to the file to import. :param mode: Controls the underlying import mechanism that will be used: * ImportMode.prepend: the directory containing the module (or package, taking `__init__.py` files into account) will be put at the *start* of `sys.path` before being imported with `importlib.import_module`. * ImportMode.append: same as `prepend`, but the directory will be appended to the end of `sys.path`, if not already in `sys.path`. * ImportMode.importlib: uses more fine control mechanisms provided by `importlib` to import the module, which avoids having to muck with `sys.path` at all. It effectively allows having same-named test modules in different places. :param root: Used as an anchor when mode == ImportMode.importlib to obtain a unique name for the module being imported so it can safely be stored into ``sys.modules``. :param consider_namespace_packages: If True, consider namespace packages when resolving module names. :raises ImportPathMismatchError: If after importing the given `path` and the module `__file__` are different. Only raised in `prepend` and `append` modes. """ path = Path(path) mode = ImportMode(mode) if not path.exists(): raise ImportError(path) if mode is ImportMode.importlib: # Try to import this module using the standard import mechanisms, but # without touching sys.path. try: pkg_root, module_name = resolve_pkg_root_and_module_name( path, consider_namespace_packages=consider_namespace_packages ) except CouldNotResolvePathError: pass else: # If the given module name is already in sys.modules, do not import it again. with contextlib.suppress(KeyError): return sys.modules[module_name] mod = _import_module_using_spec( module_name, path, pkg_root, insert_modules=False ) if mod is not None: return mod # Could not import the module with the current sys.path, so we fall back # to importing the file as a single module, not being a part of a package. module_name = module_name_from_path(path, root) with contextlib.suppress(KeyError): return sys.modules[module_name] mod = _import_module_using_spec( module_name, path, path.parent, insert_modules=True ) if mod is None: raise ImportError(f"Can't find module {module_name} at location {path}") return mod try: pkg_root, module_name = resolve_pkg_root_and_module_name( path, consider_namespace_packages=consider_namespace_packages ) except CouldNotResolvePathError: pkg_root, module_name = path.parent, path.stem # Change sys.path permanently: restoring it at the end of this function would cause surprising # problems because of delayed imports: for example, a conftest.py file imported by this function # might have local imports, which would fail at runtime if we restored sys.path. if mode is ImportMode.append: if str(pkg_root) not in sys.path: sys.path.append(str(pkg_root)) elif mode is ImportMode.prepend: if str(pkg_root) != sys.path[0]: sys.path.insert(0, str(pkg_root)) else: assert_never(mode) > importlib.import_module(module_name) /usr/lib/python3.14/site-packages/_pytest/pathlib.py:587: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'xarray.tests.test_variable', package = None def import_module(name, package=None): """Import a module. The 'package' argument is required when performing a relative import. It specifies the package to use as the anchor point from which to resolve the relative import to an absolute import. """ level = 0 if name.startswith('.'): if not package: raise TypeError("the 'package' argument is required to perform a " f"relative import for {name!r}") for character in name: if character != '.': break level += 1 > return _bootstrap._gcd_import(name[level:], package, level) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib64/python3.14/importlib/__init__.py:88: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'xarray.tests.test_variable', package = None, level = 0 > ??? :1398: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'xarray.tests.test_variable' import_ = > ??? :1371: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'xarray.tests.test_variable' import_ = > ??? :1342: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ spec = ModuleSpec(name='xarray.tests.test_variable', loader=<_pytest.assertion.rewrite.AssertionRewritingHook object at 0xfff...ir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_variable.py') > ??? :938: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.assertion.rewrite.AssertionRewritingHook object at 0xffffb79a2120> module = def exec_module(self, module: types.ModuleType) -> None: assert module.__spec__ is not None assert module.__spec__.origin is not None fn = Path(module.__spec__.origin) state = self.config.stash[assertstate_key] self._rewritten_names[module.__name__] = fn # The requested module looks like a test file, so rewrite it. This is # the most magical part of the process: load the source, rewrite the # asserts, and load the rewritten source. We also cache the rewritten # module code in a special pyc. We must be aware of the possibility of # concurrent pytest processes rewriting and loading pycs. To avoid # tricky race conditions, we maintain the following invariant: The # cached pyc is always a complete, valid pyc. Operations on it must be # atomic. POSIX's atomic rename comes in handy. write = not sys.dont_write_bytecode cache_dir = get_cache_dir(fn) if write: ok = try_makedirs(cache_dir) if not ok: write = False state.trace(f"read only directory: {cache_dir}") cache_name = fn.name[:-3] + PYC_TAIL pyc = cache_dir / cache_name # Notice that even if we're in a read-only directory, I'm going # to check for a cached pyc. This may not be optimal... co = _read_pyc(fn, pyc, state.trace) if co is None: state.trace(f"rewriting {fn!r}") source_stat, co = _rewrite_test(fn, self.config) if write: self._writing_pyc = True try: _write_pyc(state, co, source_stat, pyc) finally: self._writing_pyc = False else: state.trace(f"found cached rewritten pyc for {fn}") > exec(co, module.__dict__) /usr/lib/python3.14/site-packages/_pytest/assertion/rewrite.py:186: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ from __future__ import annotations import warnings from abc import ABC from copy import copy, deepcopy from datetime import datetime, timedelta from textwrap import dedent from typing import Any, Generic import numpy as np import pandas as pd import pytest > import pytz E ModuleNotFoundError: No module named 'pytz' ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_variable.py:13: ModuleNotFoundError The above exception was the direct cause of the following exception: cls = func = .collect at 0xffff7b903ed0> when = 'collect', reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :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 instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ /usr/lib/python3.14/site-packages/_pytest/runner.py:344: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def collect() -> list[Item | Collector]: # Before collecting, if this is a Directory, load the conftests. # If a conftest import fails to load, it is considered a collection # error of the Directory collector. This is why it's done inside of the # CallInfo wrapper. # # Note: initial conftests are loaded early, not here. if isinstance(collector, Directory): collector.config.pluginmanager._loadconftestmodules( collector.path, collector.config.getoption("importmode"), rootpath=collector.config.rootpath, consider_namespace_packages=collector.config.getini( "consider_namespace_packages" ), ) > return list(collector.collect()) ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/runner.py:389: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def collect(self) -> Iterable[nodes.Item | nodes.Collector]: > self._register_setup_module_fixture() /usr/lib/python3.14/site-packages/_pytest/python.py:554: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def _register_setup_module_fixture(self) -> None: """Register an autouse, module-scoped fixture for the collected module object that invokes setUpModule/tearDownModule if either or both are available. Using a fixture to invoke this methods ensures we play nicely and unsurprisingly with other fixtures (#517). """ setup_module = _get_first_non_fixture_func( > self.obj, ("setUpModule", "setup_module") ^^^^^^^^ ) /usr/lib/python3.14/site-packages/_pytest/python.py:567: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = @property def obj(self): """Underlying Python object.""" obj = getattr(self, "_obj", None) if obj is None: > self._obj = obj = self._getobj() ^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/python.py:280: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def _getobj(self): > return importtestmodule(self.path, self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/python.py:551: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ path = PosixPath('/builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_variable.py') config = <_pytest.config.Config object at 0xffffb78fde80> def importtestmodule( path: Path, config: Config, ): # We assume we are only called once per module. importmode = config.getoption("--import-mode") try: mod = import_path( path, mode=importmode, root=config.rootpath, consider_namespace_packages=config.getini("consider_namespace_packages"), ) except SyntaxError as e: raise nodes.Collector.CollectError( ExceptionInfo.from_current().getrepr(style="short") ) from e except ImportPathMismatchError as e: raise nodes.Collector.CollectError( "import file mismatch:\n" "imported module {!r} has this __file__ attribute:\n" " {}\n" "which is not the same as the test file we want to collect:\n" " {}\n" "HINT: remove __pycache__ / .pyc files and/or use a " "unique basename for your test file modules".format(*e.args) ) from e except ImportError as e: exc_info = ExceptionInfo.from_current() if config.get_verbosity() < 2: exc_info.traceback = exc_info.traceback.filter(filter_traceback) exc_repr = ( exc_info.getrepr(style="short") if exc_info.traceback else exc_info.exconly() ) formatted_tb = str(exc_repr) > raise nodes.Collector.CollectError( f"ImportError while importing test module '{path}'.\n" "Hint: make sure your test modules/packages have valid Python names.\n" "Traceback:\n" f"{formatted_tb}" ) from e E _pytest.nodes.Collector.CollectError: ImportError while importing test module '/builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_variable.py'. E Hint: make sure your test modules/packages have valid Python names. E Traceback: E /usr/lib64/python3.14/importlib/__init__.py:88: in import_module E return _bootstrap._gcd_import(name[level:], package, level) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_variable.py:13: in E import pytz E E ModuleNotFoundError: No module named 'pytz' /usr/lib/python3.14/site-packages/_pytest/python.py:528: CollectError ___________________ ERROR collecting tests/test_variable.py ____________________ path = PosixPath('/builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_variable.py') config = <_pytest.config.Config object at 0xffffb837de80> def importtestmodule( path: Path, config: Config, ): # We assume we are only called once per module. importmode = config.getoption("--import-mode") try: > mod = import_path( path, mode=importmode, root=config.rootpath, consider_namespace_packages=config.getini("consider_namespace_packages"), ) /usr/lib/python3.14/site-packages/_pytest/python.py:498: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ path = PosixPath('/builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_variable.py') def import_path( path: str | os.PathLike[str], *, mode: str | ImportMode = ImportMode.prepend, root: Path, consider_namespace_packages: bool, ) -> ModuleType: """ Import and return a module from the given path, which can be a file (a module) or a directory (a package). :param path: Path to the file to import. :param mode: Controls the underlying import mechanism that will be used: * ImportMode.prepend: the directory containing the module (or package, taking `__init__.py` files into account) will be put at the *start* of `sys.path` before being imported with `importlib.import_module`. * ImportMode.append: same as `prepend`, but the directory will be appended to the end of `sys.path`, if not already in `sys.path`. * ImportMode.importlib: uses more fine control mechanisms provided by `importlib` to import the module, which avoids having to muck with `sys.path` at all. It effectively allows having same-named test modules in different places. :param root: Used as an anchor when mode == ImportMode.importlib to obtain a unique name for the module being imported so it can safely be stored into ``sys.modules``. :param consider_namespace_packages: If True, consider namespace packages when resolving module names. :raises ImportPathMismatchError: If after importing the given `path` and the module `__file__` are different. Only raised in `prepend` and `append` modes. """ path = Path(path) mode = ImportMode(mode) if not path.exists(): raise ImportError(path) if mode is ImportMode.importlib: # Try to import this module using the standard import mechanisms, but # without touching sys.path. try: pkg_root, module_name = resolve_pkg_root_and_module_name( path, consider_namespace_packages=consider_namespace_packages ) except CouldNotResolvePathError: pass else: # If the given module name is already in sys.modules, do not import it again. with contextlib.suppress(KeyError): return sys.modules[module_name] mod = _import_module_using_spec( module_name, path, pkg_root, insert_modules=False ) if mod is not None: return mod # Could not import the module with the current sys.path, so we fall back # to importing the file as a single module, not being a part of a package. module_name = module_name_from_path(path, root) with contextlib.suppress(KeyError): return sys.modules[module_name] mod = _import_module_using_spec( module_name, path, path.parent, insert_modules=True ) if mod is None: raise ImportError(f"Can't find module {module_name} at location {path}") return mod try: pkg_root, module_name = resolve_pkg_root_and_module_name( path, consider_namespace_packages=consider_namespace_packages ) except CouldNotResolvePathError: pkg_root, module_name = path.parent, path.stem # Change sys.path permanently: restoring it at the end of this function would cause surprising # problems because of delayed imports: for example, a conftest.py file imported by this function # might have local imports, which would fail at runtime if we restored sys.path. if mode is ImportMode.append: if str(pkg_root) not in sys.path: sys.path.append(str(pkg_root)) elif mode is ImportMode.prepend: if str(pkg_root) != sys.path[0]: sys.path.insert(0, str(pkg_root)) else: assert_never(mode) > importlib.import_module(module_name) /usr/lib/python3.14/site-packages/_pytest/pathlib.py:587: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'xarray.tests.test_variable', package = None def import_module(name, package=None): """Import a module. The 'package' argument is required when performing a relative import. It specifies the package to use as the anchor point from which to resolve the relative import to an absolute import. """ level = 0 if name.startswith('.'): if not package: raise TypeError("the 'package' argument is required to perform a " f"relative import for {name!r}") for character in name: if character != '.': break level += 1 > return _bootstrap._gcd_import(name[level:], package, level) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib64/python3.14/importlib/__init__.py:88: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'xarray.tests.test_variable', package = None, level = 0 > ??? :1398: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'xarray.tests.test_variable' import_ = > ??? :1371: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'xarray.tests.test_variable' import_ = > ??? :1342: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ spec = ModuleSpec(name='xarray.tests.test_variable', loader=<_pytest.assertion.rewrite.AssertionRewritingHook object at 0xfff...ir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_variable.py') > ??? :938: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.assertion.rewrite.AssertionRewritingHook object at 0xffffb8422120> module = def exec_module(self, module: types.ModuleType) -> None: assert module.__spec__ is not None assert module.__spec__.origin is not None fn = Path(module.__spec__.origin) state = self.config.stash[assertstate_key] self._rewritten_names[module.__name__] = fn # The requested module looks like a test file, so rewrite it. This is # the most magical part of the process: load the source, rewrite the # asserts, and load the rewritten source. We also cache the rewritten # module code in a special pyc. We must be aware of the possibility of # concurrent pytest processes rewriting and loading pycs. To avoid # tricky race conditions, we maintain the following invariant: The # cached pyc is always a complete, valid pyc. Operations on it must be # atomic. POSIX's atomic rename comes in handy. write = not sys.dont_write_bytecode cache_dir = get_cache_dir(fn) if write: ok = try_makedirs(cache_dir) if not ok: write = False state.trace(f"read only directory: {cache_dir}") cache_name = fn.name[:-3] + PYC_TAIL pyc = cache_dir / cache_name # Notice that even if we're in a read-only directory, I'm going # to check for a cached pyc. This may not be optimal... co = _read_pyc(fn, pyc, state.trace) if co is None: state.trace(f"rewriting {fn!r}") source_stat, co = _rewrite_test(fn, self.config) if write: self._writing_pyc = True try: _write_pyc(state, co, source_stat, pyc) finally: self._writing_pyc = False else: state.trace(f"found cached rewritten pyc for {fn}") > exec(co, module.__dict__) /usr/lib/python3.14/site-packages/_pytest/assertion/rewrite.py:186: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ from __future__ import annotations import warnings from abc import ABC from copy import copy, deepcopy from datetime import datetime, timedelta from textwrap import dedent from typing import Any, Generic import numpy as np import pandas as pd import pytest > import pytz E ModuleNotFoundError: No module named 'pytz' ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_variable.py:13: ModuleNotFoundError The above exception was the direct cause of the following exception: cls = func = .collect at 0xffff8440bd70> when = 'collect', reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :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 instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ /usr/lib/python3.14/site-packages/_pytest/runner.py:344: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def collect() -> list[Item | Collector]: # Before collecting, if this is a Directory, load the conftests. # If a conftest import fails to load, it is considered a collection # error of the Directory collector. This is why it's done inside of the # CallInfo wrapper. # # Note: initial conftests are loaded early, not here. if isinstance(collector, Directory): collector.config.pluginmanager._loadconftestmodules( collector.path, collector.config.getoption("importmode"), rootpath=collector.config.rootpath, consider_namespace_packages=collector.config.getini( "consider_namespace_packages" ), ) > return list(collector.collect()) ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/runner.py:389: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def collect(self) -> Iterable[nodes.Item | nodes.Collector]: > self._register_setup_module_fixture() /usr/lib/python3.14/site-packages/_pytest/python.py:554: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def _register_setup_module_fixture(self) -> None: """Register an autouse, module-scoped fixture for the collected module object that invokes setUpModule/tearDownModule if either or both are available. Using a fixture to invoke this methods ensures we play nicely and unsurprisingly with other fixtures (#517). """ setup_module = _get_first_non_fixture_func( > self.obj, ("setUpModule", "setup_module") ^^^^^^^^ ) /usr/lib/python3.14/site-packages/_pytest/python.py:567: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = @property def obj(self): """Underlying Python object.""" obj = getattr(self, "_obj", None) if obj is None: > self._obj = obj = self._getobj() ^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/python.py:280: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def _getobj(self): > return importtestmodule(self.path, self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/python.py:551: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ path = PosixPath('/builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_variable.py') config = <_pytest.config.Config object at 0xffffb837de80> def importtestmodule( path: Path, config: Config, ): # We assume we are only called once per module. importmode = config.getoption("--import-mode") try: mod = import_path( path, mode=importmode, root=config.rootpath, consider_namespace_packages=config.getini("consider_namespace_packages"), ) except SyntaxError as e: raise nodes.Collector.CollectError( ExceptionInfo.from_current().getrepr(style="short") ) from e except ImportPathMismatchError as e: raise nodes.Collector.CollectError( "import file mismatch:\n" "imported module {!r} has this __file__ attribute:\n" " {}\n" "which is not the same as the test file we want to collect:\n" " {}\n" "HINT: remove __pycache__ / .pyc files and/or use a " "unique basename for your test file modules".format(*e.args) ) from e except ImportError as e: exc_info = ExceptionInfo.from_current() if config.get_verbosity() < 2: exc_info.traceback = exc_info.traceback.filter(filter_traceback) exc_repr = ( exc_info.getrepr(style="short") if exc_info.traceback else exc_info.exconly() ) formatted_tb = str(exc_repr) > raise nodes.Collector.CollectError( f"ImportError while importing test module '{path}'.\n" "Hint: make sure your test modules/packages have valid Python names.\n" "Traceback:\n" f"{formatted_tb}" ) from e E _pytest.nodes.Collector.CollectError: ImportError while importing test module '/builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_variable.py'. E Hint: make sure your test modules/packages have valid Python names. E Traceback: E /usr/lib64/python3.14/importlib/__init__.py:88: in import_module E return _bootstrap._gcd_import(name[level:], package, level) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_variable.py:13: in E import pytz E E ModuleNotFoundError: No module named 'pytz' /usr/lib/python3.14/site-packages/_pytest/python.py:528: CollectError ___________________ ERROR collecting tests/test_variable.py ____________________ path = PosixPath('/builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_variable.py') config = <_pytest.config.Config object at 0xffff979fde80> def importtestmodule( path: Path, config: Config, ): # We assume we are only called once per module. importmode = config.getoption("--import-mode") try: > mod = import_path( path, mode=importmode, root=config.rootpath, consider_namespace_packages=config.getini("consider_namespace_packages"), ) /usr/lib/python3.14/site-packages/_pytest/python.py:498: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ path = PosixPath('/builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_variable.py') def import_path( path: str | os.PathLike[str], *, mode: str | ImportMode = ImportMode.prepend, root: Path, consider_namespace_packages: bool, ) -> ModuleType: """ Import and return a module from the given path, which can be a file (a module) or a directory (a package). :param path: Path to the file to import. :param mode: Controls the underlying import mechanism that will be used: * ImportMode.prepend: the directory containing the module (or package, taking `__init__.py` files into account) will be put at the *start* of `sys.path` before being imported with `importlib.import_module`. * ImportMode.append: same as `prepend`, but the directory will be appended to the end of `sys.path`, if not already in `sys.path`. * ImportMode.importlib: uses more fine control mechanisms provided by `importlib` to import the module, which avoids having to muck with `sys.path` at all. It effectively allows having same-named test modules in different places. :param root: Used as an anchor when mode == ImportMode.importlib to obtain a unique name for the module being imported so it can safely be stored into ``sys.modules``. :param consider_namespace_packages: If True, consider namespace packages when resolving module names. :raises ImportPathMismatchError: If after importing the given `path` and the module `__file__` are different. Only raised in `prepend` and `append` modes. """ path = Path(path) mode = ImportMode(mode) if not path.exists(): raise ImportError(path) if mode is ImportMode.importlib: # Try to import this module using the standard import mechanisms, but # without touching sys.path. try: pkg_root, module_name = resolve_pkg_root_and_module_name( path, consider_namespace_packages=consider_namespace_packages ) except CouldNotResolvePathError: pass else: # If the given module name is already in sys.modules, do not import it again. with contextlib.suppress(KeyError): return sys.modules[module_name] mod = _import_module_using_spec( module_name, path, pkg_root, insert_modules=False ) if mod is not None: return mod # Could not import the module with the current sys.path, so we fall back # to importing the file as a single module, not being a part of a package. module_name = module_name_from_path(path, root) with contextlib.suppress(KeyError): return sys.modules[module_name] mod = _import_module_using_spec( module_name, path, path.parent, insert_modules=True ) if mod is None: raise ImportError(f"Can't find module {module_name} at location {path}") return mod try: pkg_root, module_name = resolve_pkg_root_and_module_name( path, consider_namespace_packages=consider_namespace_packages ) except CouldNotResolvePathError: pkg_root, module_name = path.parent, path.stem # Change sys.path permanently: restoring it at the end of this function would cause surprising # problems because of delayed imports: for example, a conftest.py file imported by this function # might have local imports, which would fail at runtime if we restored sys.path. if mode is ImportMode.append: if str(pkg_root) not in sys.path: sys.path.append(str(pkg_root)) elif mode is ImportMode.prepend: if str(pkg_root) != sys.path[0]: sys.path.insert(0, str(pkg_root)) else: assert_never(mode) > importlib.import_module(module_name) /usr/lib/python3.14/site-packages/_pytest/pathlib.py:587: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'xarray.tests.test_variable', package = None def import_module(name, package=None): """Import a module. The 'package' argument is required when performing a relative import. It specifies the package to use as the anchor point from which to resolve the relative import to an absolute import. """ level = 0 if name.startswith('.'): if not package: raise TypeError("the 'package' argument is required to perform a " f"relative import for {name!r}") for character in name: if character != '.': break level += 1 > return _bootstrap._gcd_import(name[level:], package, level) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib64/python3.14/importlib/__init__.py:88: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'xarray.tests.test_variable', package = None, level = 0 > ??? :1398: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'xarray.tests.test_variable' import_ = > ??? :1371: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'xarray.tests.test_variable' import_ = > ??? :1342: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ spec = ModuleSpec(name='xarray.tests.test_variable', loader=<_pytest.assertion.rewrite.AssertionRewritingHook object at 0xfff...ir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_variable.py') > ??? :938: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.assertion.rewrite.AssertionRewritingHook object at 0xffff97aa2120> module = def exec_module(self, module: types.ModuleType) -> None: assert module.__spec__ is not None assert module.__spec__.origin is not None fn = Path(module.__spec__.origin) state = self.config.stash[assertstate_key] self._rewritten_names[module.__name__] = fn # The requested module looks like a test file, so rewrite it. This is # the most magical part of the process: load the source, rewrite the # asserts, and load the rewritten source. We also cache the rewritten # module code in a special pyc. We must be aware of the possibility of # concurrent pytest processes rewriting and loading pycs. To avoid # tricky race conditions, we maintain the following invariant: The # cached pyc is always a complete, valid pyc. Operations on it must be # atomic. POSIX's atomic rename comes in handy. write = not sys.dont_write_bytecode cache_dir = get_cache_dir(fn) if write: ok = try_makedirs(cache_dir) if not ok: write = False state.trace(f"read only directory: {cache_dir}") cache_name = fn.name[:-3] + PYC_TAIL pyc = cache_dir / cache_name # Notice that even if we're in a read-only directory, I'm going # to check for a cached pyc. This may not be optimal... co = _read_pyc(fn, pyc, state.trace) if co is None: state.trace(f"rewriting {fn!r}") source_stat, co = _rewrite_test(fn, self.config) if write: self._writing_pyc = True try: _write_pyc(state, co, source_stat, pyc) finally: self._writing_pyc = False else: state.trace(f"found cached rewritten pyc for {fn}") > exec(co, module.__dict__) /usr/lib/python3.14/site-packages/_pytest/assertion/rewrite.py:186: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ from __future__ import annotations import warnings from abc import ABC from copy import copy, deepcopy from datetime import datetime, timedelta from textwrap import dedent from typing import Any, Generic import numpy as np import pandas as pd import pytest > import pytz E ModuleNotFoundError: No module named 'pytz' ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_variable.py:13: ModuleNotFoundError The above exception was the direct cause of the following exception: cls = func = .collect at 0xffff5ba13cc0> when = 'collect', reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :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 instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ /usr/lib/python3.14/site-packages/_pytest/runner.py:344: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def collect() -> list[Item | Collector]: # Before collecting, if this is a Directory, load the conftests. # If a conftest import fails to load, it is considered a collection # error of the Directory collector. This is why it's done inside of the # CallInfo wrapper. # # Note: initial conftests are loaded early, not here. if isinstance(collector, Directory): collector.config.pluginmanager._loadconftestmodules( collector.path, collector.config.getoption("importmode"), rootpath=collector.config.rootpath, consider_namespace_packages=collector.config.getini( "consider_namespace_packages" ), ) > return list(collector.collect()) ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/runner.py:389: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def collect(self) -> Iterable[nodes.Item | nodes.Collector]: > self._register_setup_module_fixture() /usr/lib/python3.14/site-packages/_pytest/python.py:554: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def _register_setup_module_fixture(self) -> None: """Register an autouse, module-scoped fixture for the collected module object that invokes setUpModule/tearDownModule if either or both are available. Using a fixture to invoke this methods ensures we play nicely and unsurprisingly with other fixtures (#517). """ setup_module = _get_first_non_fixture_func( > self.obj, ("setUpModule", "setup_module") ^^^^^^^^ ) /usr/lib/python3.14/site-packages/_pytest/python.py:567: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = @property def obj(self): """Underlying Python object.""" obj = getattr(self, "_obj", None) if obj is None: > self._obj = obj = self._getobj() ^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/python.py:280: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def _getobj(self): > return importtestmodule(self.path, self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/python.py:551: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ path = PosixPath('/builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_variable.py') config = <_pytest.config.Config object at 0xffff979fde80> def importtestmodule( path: Path, config: Config, ): # We assume we are only called once per module. importmode = config.getoption("--import-mode") try: mod = import_path( path, mode=importmode, root=config.rootpath, consider_namespace_packages=config.getini("consider_namespace_packages"), ) except SyntaxError as e: raise nodes.Collector.CollectError( ExceptionInfo.from_current().getrepr(style="short") ) from e except ImportPathMismatchError as e: raise nodes.Collector.CollectError( "import file mismatch:\n" "imported module {!r} has this __file__ attribute:\n" " {}\n" "which is not the same as the test file we want to collect:\n" " {}\n" "HINT: remove __pycache__ / .pyc files and/or use a " "unique basename for your test file modules".format(*e.args) ) from e except ImportError as e: exc_info = ExceptionInfo.from_current() if config.get_verbosity() < 2: exc_info.traceback = exc_info.traceback.filter(filter_traceback) exc_repr = ( exc_info.getrepr(style="short") if exc_info.traceback else exc_info.exconly() ) formatted_tb = str(exc_repr) > raise nodes.Collector.CollectError( f"ImportError while importing test module '{path}'.\n" "Hint: make sure your test modules/packages have valid Python names.\n" "Traceback:\n" f"{formatted_tb}" ) from e E _pytest.nodes.Collector.CollectError: ImportError while importing test module '/builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_variable.py'. E Hint: make sure your test modules/packages have valid Python names. E Traceback: E /usr/lib64/python3.14/importlib/__init__.py:88: in import_module E return _bootstrap._gcd_import(name[level:], package, level) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_variable.py:13: in E import pytz E E ModuleNotFoundError: No module named 'pytz' /usr/lib/python3.14/site-packages/_pytest/python.py:528: CollectError =================================== FAILURES =================================== _____________________ test_cf_timedelta[1D-days-numbers0] ______________________ [gw3] linux -- Python 3.14.2 /usr/bin/python3 cls = func = . at 0xffff5b05f740> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :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 instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ /usr/lib/python3.14/site-packages/_pytest/runner.py:344: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) /usr/lib/python3.14/site-packages/_pytest/runner.py:246: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'item': } firstresult = False def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff979fc980> hook_name = 'pytest_runtest_call' methods = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] kwargs = {'item': } firstresult = False def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.logging.LoggingPlugin object at 0xffff974a7230> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: nodes.Item) -> Generator[None]: self.log_cli_handler.set_when("call") with self._runtest_for(item, "call"): > yield /usr/lib/python3.14/site-packages/_pytest/logging.py:850: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = > _state='suspended' _in_suspended=False> _capture_fixture=None> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: Item) -> Generator[None]: with self.item_capture("call", item): > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/capture.py:900: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = @hookimpl(wrapper=True) def pytest_runtest_call(item: Item) -> Generator[None]: xfailed = item.stash.get(xfailed_key, None) if xfailed is None: item.stash[xfailed_key] = xfailed = evaluate_xfail_marks(item) if xfailed and not item.config.option.runxfail and not xfailed.run: xfail("[NOTRUN] " + xfailed.reason) try: > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/skipping.py:263: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = def pytest_runtest_call(item: Item) -> None: _update_current_test_var(item, "call") try: del sys.last_type del sys.last_value del sys.last_traceback if sys.version_info >= (3, 12, 0): del sys.last_exc # type:ignore[attr-defined] except AttributeError: pass try: > item.runtest() /usr/lib/python3.14/site-packages/_pytest/runner.py:178: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def runtest(self) -> None: """Execute the underlying test function.""" > self.ihook.pytest_pyfunc_call(pyfuncitem=self) /usr/lib/python3.14/site-packages/_pytest/python.py:1671: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'pyfuncitem': } firstresult = True def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff979fc980> hook_name = 'pytest_pyfunc_call' methods = [>] kwargs = {'pyfuncitem': } firstresult = True def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyfuncitem = @hookimpl(trylast=True) def pytest_pyfunc_call(pyfuncitem: Function) -> object | None: testfunction = pyfuncitem.obj if is_async_function(testfunction): async_fail(pyfuncitem.nodeid) funcargs = pyfuncitem.funcargs testargs = {arg: funcargs[arg] for arg in pyfuncitem._fixtureinfo.argnames} > result = testfunction(**testargs) ^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/python.py:157: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ timedeltas = np.timedelta64(86400000000,'us'), units = 'days' numbers = array(1) @pytest.mark.filterwarnings("ignore:Timedeltas can't be serialized faithfully") @pytest.mark.parametrize( ["timedeltas", "units", "numbers"], [ ("1D", "days", np.int64(1)), (["1D", "2D", "3D"], "days", np.array([1, 2, 3], "int64")), ("1h", "hours", np.int64(1)), ("1ms", "milliseconds", np.int64(1)), ("1us", "microseconds", np.int64(1)), ("1ns", "nanoseconds", np.int64(1)), (["NaT", "0s", "1s"], None, [np.iinfo(np.int64).min, 0, 1]), (["30m", "60m"], "hours", [0.5, 1.0]), ("NaT", "days", np.iinfo(np.int64).min), (["NaT", "NaT"], "days", [np.iinfo(np.int64).min, np.iinfo(np.int64).min]), ], ) def test_cf_timedelta(timedeltas, units, numbers) -> None: if timedeltas == "NaT": timedeltas = np.timedelta64("NaT", "ns") else: timedeltas = pd.to_timedelta(timedeltas).to_numpy() numbers = np.array(numbers) expected = numbers actual, _ = encode_cf_timedelta(timedeltas, units) assert_array_equal(expected, actual) assert expected.dtype == actual.dtype if units is not None: expected = timedeltas actual = decode_cf_timedelta(numbers, units) assert_array_equal(expected, actual) > assert expected.dtype == actual.dtype E AssertionError: assert dtype(' func = . at 0xffff5b05f110> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :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 instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ /usr/lib/python3.14/site-packages/_pytest/runner.py:344: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) /usr/lib/python3.14/site-packages/_pytest/runner.py:246: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'item': } firstresult = False def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff979fc980> hook_name = 'pytest_runtest_call' methods = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] kwargs = {'item': } firstresult = False def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.logging.LoggingPlugin object at 0xffff974a7230> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: nodes.Item) -> Generator[None]: self.log_cli_handler.set_when("call") with self._runtest_for(item, "call"): > yield /usr/lib/python3.14/site-packages/_pytest/logging.py:850: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = > _state='suspended' _in_suspended=False> _capture_fixture=None> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: Item) -> Generator[None]: with self.item_capture("call", item): > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/capture.py:900: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = @hookimpl(wrapper=True) def pytest_runtest_call(item: Item) -> Generator[None]: xfailed = item.stash.get(xfailed_key, None) if xfailed is None: item.stash[xfailed_key] = xfailed = evaluate_xfail_marks(item) if xfailed and not item.config.option.runxfail and not xfailed.run: xfail("[NOTRUN] " + xfailed.reason) try: > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/skipping.py:263: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = def pytest_runtest_call(item: Item) -> None: _update_current_test_var(item, "call") try: del sys.last_type del sys.last_value del sys.last_traceback if sys.version_info >= (3, 12, 0): del sys.last_exc # type:ignore[attr-defined] except AttributeError: pass try: > item.runtest() /usr/lib/python3.14/site-packages/_pytest/runner.py:178: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def runtest(self) -> None: """Execute the underlying test function.""" > self.ihook.pytest_pyfunc_call(pyfuncitem=self) /usr/lib/python3.14/site-packages/_pytest/python.py:1671: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'pyfuncitem': } firstresult = True def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff979fc980> hook_name = 'pytest_pyfunc_call' methods = [>] kwargs = {'pyfuncitem': } firstresult = True def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyfuncitem = @hookimpl(trylast=True) def pytest_pyfunc_call(pyfuncitem: Function) -> object | None: testfunction = pyfuncitem.obj if is_async_function(testfunction): async_fail(pyfuncitem.nodeid) funcargs = pyfuncitem.funcargs testargs = {arg: funcargs[arg] for arg in pyfuncitem._fixtureinfo.argnames} > result = testfunction(**testargs) ^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/python.py:157: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ timedeltas = array([ 86400000000, 172800000000, 259200000000], dtype='timedelta64[us]') units = 'days', numbers = array([1, 2, 3]) @pytest.mark.filterwarnings("ignore:Timedeltas can't be serialized faithfully") @pytest.mark.parametrize( ["timedeltas", "units", "numbers"], [ ("1D", "days", np.int64(1)), (["1D", "2D", "3D"], "days", np.array([1, 2, 3], "int64")), ("1h", "hours", np.int64(1)), ("1ms", "milliseconds", np.int64(1)), ("1us", "microseconds", np.int64(1)), ("1ns", "nanoseconds", np.int64(1)), (["NaT", "0s", "1s"], None, [np.iinfo(np.int64).min, 0, 1]), (["30m", "60m"], "hours", [0.5, 1.0]), ("NaT", "days", np.iinfo(np.int64).min), (["NaT", "NaT"], "days", [np.iinfo(np.int64).min, np.iinfo(np.int64).min]), ], ) def test_cf_timedelta(timedeltas, units, numbers) -> None: if timedeltas == "NaT": timedeltas = np.timedelta64("NaT", "ns") else: timedeltas = pd.to_timedelta(timedeltas).to_numpy() numbers = np.array(numbers) expected = numbers actual, _ = encode_cf_timedelta(timedeltas, units) assert_array_equal(expected, actual) assert expected.dtype == actual.dtype if units is not None: expected = timedeltas actual = decode_cf_timedelta(numbers, units) assert_array_equal(expected, actual) > assert expected.dtype == actual.dtype E AssertionError: assert dtype(' func = . at 0xffff696409e0> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :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 instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ /usr/lib/python3.14/site-packages/_pytest/runner.py:344: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) /usr/lib/python3.14/site-packages/_pytest/runner.py:246: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'item': } firstresult = False def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff979fc980> hook_name = 'pytest_runtest_call' methods = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] kwargs = {'item': } firstresult = False def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.logging.LoggingPlugin object at 0xffff974a7230> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: nodes.Item) -> Generator[None]: self.log_cli_handler.set_when("call") with self._runtest_for(item, "call"): > yield /usr/lib/python3.14/site-packages/_pytest/logging.py:850: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = > _state='suspended' _in_suspended=False> _capture_fixture=None> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: Item) -> Generator[None]: with self.item_capture("call", item): > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/capture.py:900: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = @hookimpl(wrapper=True) def pytest_runtest_call(item: Item) -> Generator[None]: xfailed = item.stash.get(xfailed_key, None) if xfailed is None: item.stash[xfailed_key] = xfailed = evaluate_xfail_marks(item) if xfailed and not item.config.option.runxfail and not xfailed.run: xfail("[NOTRUN] " + xfailed.reason) try: > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/skipping.py:263: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = def pytest_runtest_call(item: Item) -> None: _update_current_test_var(item, "call") try: del sys.last_type del sys.last_value del sys.last_traceback if sys.version_info >= (3, 12, 0): del sys.last_exc # type:ignore[attr-defined] except AttributeError: pass try: > item.runtest() /usr/lib/python3.14/site-packages/_pytest/runner.py:178: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def runtest(self) -> None: """Execute the underlying test function.""" > self.ihook.pytest_pyfunc_call(pyfuncitem=self) /usr/lib/python3.14/site-packages/_pytest/python.py:1671: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'pyfuncitem': } firstresult = True def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff979fc980> hook_name = 'pytest_pyfunc_call' methods = [>] kwargs = {'pyfuncitem': } firstresult = True def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyfuncitem = @hookimpl(trylast=True) def pytest_pyfunc_call(pyfuncitem: Function) -> object | None: testfunction = pyfuncitem.obj if is_async_function(testfunction): async_fail(pyfuncitem.nodeid) funcargs = pyfuncitem.funcargs testargs = {arg: funcargs[arg] for arg in pyfuncitem._fixtureinfo.argnames} > result = testfunction(**testargs) ^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/python.py:157: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ timedeltas = np.timedelta64(3600000000,'us'), units = 'hours' numbers = array(1) @pytest.mark.filterwarnings("ignore:Timedeltas can't be serialized faithfully") @pytest.mark.parametrize( ["timedeltas", "units", "numbers"], [ ("1D", "days", np.int64(1)), (["1D", "2D", "3D"], "days", np.array([1, 2, 3], "int64")), ("1h", "hours", np.int64(1)), ("1ms", "milliseconds", np.int64(1)), ("1us", "microseconds", np.int64(1)), ("1ns", "nanoseconds", np.int64(1)), (["NaT", "0s", "1s"], None, [np.iinfo(np.int64).min, 0, 1]), (["30m", "60m"], "hours", [0.5, 1.0]), ("NaT", "days", np.iinfo(np.int64).min), (["NaT", "NaT"], "days", [np.iinfo(np.int64).min, np.iinfo(np.int64).min]), ], ) def test_cf_timedelta(timedeltas, units, numbers) -> None: if timedeltas == "NaT": timedeltas = np.timedelta64("NaT", "ns") else: timedeltas = pd.to_timedelta(timedeltas).to_numpy() numbers = np.array(numbers) expected = numbers actual, _ = encode_cf_timedelta(timedeltas, units) assert_array_equal(expected, actual) assert expected.dtype == actual.dtype if units is not None: expected = timedeltas actual = decode_cf_timedelta(numbers, units) assert_array_equal(expected, actual) > assert expected.dtype == actual.dtype E AssertionError: assert dtype(' func = . at 0xffff3a954ca0> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :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 instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ /usr/lib/python3.14/site-packages/_pytest/runner.py:344: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) /usr/lib/python3.14/site-packages/_pytest/runner.py:246: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'item': } firstresult = False def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff7d76c980> hook_name = 'pytest_runtest_call' methods = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] kwargs = {'item': } firstresult = False def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.logging.LoggingPlugin object at 0xffff7d217230> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: nodes.Item) -> Generator[None]: self.log_cli_handler.set_when("call") with self._runtest_for(item, "call"): > yield /usr/lib/python3.14/site-packages/_pytest/logging.py:850: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = > _state='suspended' _in_suspended=False> _capture_fixture=None> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: Item) -> Generator[None]: with self.item_capture("call", item): > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/capture.py:900: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = @hookimpl(wrapper=True) def pytest_runtest_call(item: Item) -> Generator[None]: xfailed = item.stash.get(xfailed_key, None) if xfailed is None: item.stash[xfailed_key] = xfailed = evaluate_xfail_marks(item) if xfailed and not item.config.option.runxfail and not xfailed.run: xfail("[NOTRUN] " + xfailed.reason) try: > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/skipping.py:263: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = def pytest_runtest_call(item: Item) -> None: _update_current_test_var(item, "call") try: del sys.last_type del sys.last_value del sys.last_traceback if sys.version_info >= (3, 12, 0): del sys.last_exc # type:ignore[attr-defined] except AttributeError: pass try: > item.runtest() /usr/lib/python3.14/site-packages/_pytest/runner.py:178: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def runtest(self) -> None: """Execute the underlying test function.""" > self.ihook.pytest_pyfunc_call(pyfuncitem=self) /usr/lib/python3.14/site-packages/_pytest/python.py:1671: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'pyfuncitem': } firstresult = True def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff7d76c980> hook_name = 'pytest_pyfunc_call' methods = [>] kwargs = {'pyfuncitem': } firstresult = True def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyfuncitem = @hookimpl(trylast=True) def pytest_pyfunc_call(pyfuncitem: Function) -> object | None: testfunction = pyfuncitem.obj if is_async_function(testfunction): async_fail(pyfuncitem.nodeid) funcargs = pyfuncitem.funcargs testargs = {arg: funcargs[arg] for arg in pyfuncitem._fixtureinfo.argnames} > result = testfunction(**testargs) ^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/python.py:157: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ calendar = '365_day' @requires_cftime @pytest.mark.parametrize("calendar", _CFTIME_CALENDARS) def test_distant_cftime_datetime_sub_cftimeindex(calendar): a = xr.date_range("2000", periods=5, calendar=calendar, use_cftime=True) > with pytest.raises(ValueError, match="difference exceeds"): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_cftimeindex.py:963: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = RaisesExc(ValueError, match='difference exceeds'), exc_type = None exc_val = None, exc_tb = None def __exit__( self, exc_type: type[BaseException] | None, exc_val: BaseException | None, exc_tb: types.TracebackType | None, ) -> bool: __tracebackhide__ = True if exc_type is None: if not self.expected_exceptions: fail("DID NOT RAISE any exception") if len(self.expected_exceptions) > 1: fail(f"DID NOT RAISE any of {self.expected_exceptions!r}") > fail(f"DID NOT RAISE {self.expected_exceptions[0]!r}") /usr/lib/python3.14/site-packages/_pytest/raises.py:712: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ reason = "DID NOT RAISE ", pytrace = True @_with_exception(Failed) def fail(reason: str = "", pytrace: bool = True) -> NoReturn: """Explicitly fail an executing test with the given message. :param reason: The message to show the user as reason for the failure. :param pytrace: If False, msg represents the full failure information and no python traceback will be reported. :raises pytest.fail.Exception: The exception that is raised. """ __tracebackhide__ = True > raise Failed(msg=reason, pytrace=pytrace) E Failed: DID NOT RAISE /usr/lib/python3.14/site-packages/_pytest/outcomes.py:177: Failed _________________ test_cf_timedelta[1ms-milliseconds-numbers3] _________________ [gw3] linux -- Python 3.14.2 /usr/bin/python3 cls = func = . at 0xffff5b05fab0> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :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 instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ /usr/lib/python3.14/site-packages/_pytest/runner.py:344: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) /usr/lib/python3.14/site-packages/_pytest/runner.py:246: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'item': } firstresult = False def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff979fc980> hook_name = 'pytest_runtest_call' methods = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] kwargs = {'item': } firstresult = False def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.logging.LoggingPlugin object at 0xffff974a7230> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: nodes.Item) -> Generator[None]: self.log_cli_handler.set_when("call") with self._runtest_for(item, "call"): > yield /usr/lib/python3.14/site-packages/_pytest/logging.py:850: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = > _state='suspended' _in_suspended=False> _capture_fixture=None> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: Item) -> Generator[None]: with self.item_capture("call", item): > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/capture.py:900: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = @hookimpl(wrapper=True) def pytest_runtest_call(item: Item) -> Generator[None]: xfailed = item.stash.get(xfailed_key, None) if xfailed is None: item.stash[xfailed_key] = xfailed = evaluate_xfail_marks(item) if xfailed and not item.config.option.runxfail and not xfailed.run: xfail("[NOTRUN] " + xfailed.reason) try: > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/skipping.py:263: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = def pytest_runtest_call(item: Item) -> None: _update_current_test_var(item, "call") try: del sys.last_type del sys.last_value del sys.last_traceback if sys.version_info >= (3, 12, 0): del sys.last_exc # type:ignore[attr-defined] except AttributeError: pass try: > item.runtest() /usr/lib/python3.14/site-packages/_pytest/runner.py:178: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def runtest(self) -> None: """Execute the underlying test function.""" > self.ihook.pytest_pyfunc_call(pyfuncitem=self) /usr/lib/python3.14/site-packages/_pytest/python.py:1671: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'pyfuncitem': } firstresult = True def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff979fc980> hook_name = 'pytest_pyfunc_call' methods = [>] kwargs = {'pyfuncitem': } firstresult = True def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyfuncitem = @hookimpl(trylast=True) def pytest_pyfunc_call(pyfuncitem: Function) -> object | None: testfunction = pyfuncitem.obj if is_async_function(testfunction): async_fail(pyfuncitem.nodeid) funcargs = pyfuncitem.funcargs testargs = {arg: funcargs[arg] for arg in pyfuncitem._fixtureinfo.argnames} > result = testfunction(**testargs) ^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/python.py:157: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ timedeltas = np.timedelta64(1000,'us'), units = 'milliseconds' numbers = array(1) @pytest.mark.filterwarnings("ignore:Timedeltas can't be serialized faithfully") @pytest.mark.parametrize( ["timedeltas", "units", "numbers"], [ ("1D", "days", np.int64(1)), (["1D", "2D", "3D"], "days", np.array([1, 2, 3], "int64")), ("1h", "hours", np.int64(1)), ("1ms", "milliseconds", np.int64(1)), ("1us", "microseconds", np.int64(1)), ("1ns", "nanoseconds", np.int64(1)), (["NaT", "0s", "1s"], None, [np.iinfo(np.int64).min, 0, 1]), (["30m", "60m"], "hours", [0.5, 1.0]), ("NaT", "days", np.iinfo(np.int64).min), (["NaT", "NaT"], "days", [np.iinfo(np.int64).min, np.iinfo(np.int64).min]), ], ) def test_cf_timedelta(timedeltas, units, numbers) -> None: if timedeltas == "NaT": timedeltas = np.timedelta64("NaT", "ns") else: timedeltas = pd.to_timedelta(timedeltas).to_numpy() numbers = np.array(numbers) expected = numbers actual, _ = encode_cf_timedelta(timedeltas, units) assert_array_equal(expected, actual) assert expected.dtype == actual.dtype if units is not None: expected = timedeltas actual = decode_cf_timedelta(numbers, units) assert_array_equal(expected, actual) > assert expected.dtype == actual.dtype E AssertionError: assert dtype(' func = . at 0xffff4ddc5170> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :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 instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ /usr/lib/python3.14/site-packages/_pytest/runner.py:344: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) /usr/lib/python3.14/site-packages/_pytest/runner.py:246: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'item': } firstresult = False def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff7d76c980> hook_name = 'pytest_runtest_call' methods = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] kwargs = {'item': } firstresult = False def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.logging.LoggingPlugin object at 0xffff7d217230> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: nodes.Item) -> Generator[None]: self.log_cli_handler.set_when("call") with self._runtest_for(item, "call"): > yield /usr/lib/python3.14/site-packages/_pytest/logging.py:850: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = > _state='suspended' _in_suspended=False> _capture_fixture=None> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: Item) -> Generator[None]: with self.item_capture("call", item): > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/capture.py:900: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = @hookimpl(wrapper=True) def pytest_runtest_call(item: Item) -> Generator[None]: xfailed = item.stash.get(xfailed_key, None) if xfailed is None: item.stash[xfailed_key] = xfailed = evaluate_xfail_marks(item) if xfailed and not item.config.option.runxfail and not xfailed.run: xfail("[NOTRUN] " + xfailed.reason) try: > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/skipping.py:263: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = def pytest_runtest_call(item: Item) -> None: _update_current_test_var(item, "call") try: del sys.last_type del sys.last_value del sys.last_traceback if sys.version_info >= (3, 12, 0): del sys.last_exc # type:ignore[attr-defined] except AttributeError: pass try: > item.runtest() /usr/lib/python3.14/site-packages/_pytest/runner.py:178: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def runtest(self) -> None: """Execute the underlying test function.""" > self.ihook.pytest_pyfunc_call(pyfuncitem=self) /usr/lib/python3.14/site-packages/_pytest/python.py:1671: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'pyfuncitem': } firstresult = True def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff7d76c980> hook_name = 'pytest_pyfunc_call' methods = [>] kwargs = {'pyfuncitem': } firstresult = True def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyfuncitem = @hookimpl(trylast=True) def pytest_pyfunc_call(pyfuncitem: Function) -> object | None: testfunction = pyfuncitem.obj if is_async_function(testfunction): async_fail(pyfuncitem.nodeid) funcargs = pyfuncitem.funcargs testargs = {arg: funcargs[arg] for arg in pyfuncitem._fixtureinfo.argnames} > result = testfunction(**testargs) ^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/python.py:157: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ calendar = '360_day' @requires_cftime @pytest.mark.parametrize("calendar", _CFTIME_CALENDARS) def test_distant_cftime_datetime_sub_cftimeindex(calendar): a = xr.date_range("2000", periods=5, calendar=calendar, use_cftime=True) > with pytest.raises(ValueError, match="difference exceeds"): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_cftimeindex.py:963: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = RaisesExc(ValueError, match='difference exceeds'), exc_type = None exc_val = None, exc_tb = None def __exit__( self, exc_type: type[BaseException] | None, exc_val: BaseException | None, exc_tb: types.TracebackType | None, ) -> bool: __tracebackhide__ = True if exc_type is None: if not self.expected_exceptions: fail("DID NOT RAISE any exception") if len(self.expected_exceptions) > 1: fail(f"DID NOT RAISE any of {self.expected_exceptions!r}") > fail(f"DID NOT RAISE {self.expected_exceptions[0]!r}") /usr/lib/python3.14/site-packages/_pytest/raises.py:712: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ reason = "DID NOT RAISE ", pytrace = True @_with_exception(Failed) def fail(reason: str = "", pytrace: bool = True) -> NoReturn: """Explicitly fail an executing test with the given message. :param reason: The message to show the user as reason for the failure. :param pytrace: If False, msg represents the full failure information and no python traceback will be reported. :raises pytest.fail.Exception: The exception that is raised. """ __tracebackhide__ = True > raise Failed(msg=reason, pytrace=pytrace) E Failed: DID NOT RAISE /usr/lib/python3.14/site-packages/_pytest/outcomes.py:177: Failed _________________ test_cf_timedelta[1us-microseconds-numbers4] _________________ [gw3] linux -- Python 3.14.2 /usr/bin/python3 cls = func = . at 0xffff5b05c300> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :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 instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ /usr/lib/python3.14/site-packages/_pytest/runner.py:344: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) /usr/lib/python3.14/site-packages/_pytest/runner.py:246: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'item': } firstresult = False def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff979fc980> hook_name = 'pytest_runtest_call' methods = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] kwargs = {'item': } firstresult = False def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.logging.LoggingPlugin object at 0xffff974a7230> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: nodes.Item) -> Generator[None]: self.log_cli_handler.set_when("call") with self._runtest_for(item, "call"): > yield /usr/lib/python3.14/site-packages/_pytest/logging.py:850: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = > _state='suspended' _in_suspended=False> _capture_fixture=None> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: Item) -> Generator[None]: with self.item_capture("call", item): > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/capture.py:900: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = @hookimpl(wrapper=True) def pytest_runtest_call(item: Item) -> Generator[None]: xfailed = item.stash.get(xfailed_key, None) if xfailed is None: item.stash[xfailed_key] = xfailed = evaluate_xfail_marks(item) if xfailed and not item.config.option.runxfail and not xfailed.run: xfail("[NOTRUN] " + xfailed.reason) try: > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/skipping.py:263: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = def pytest_runtest_call(item: Item) -> None: _update_current_test_var(item, "call") try: del sys.last_type del sys.last_value del sys.last_traceback if sys.version_info >= (3, 12, 0): del sys.last_exc # type:ignore[attr-defined] except AttributeError: pass try: > item.runtest() /usr/lib/python3.14/site-packages/_pytest/runner.py:178: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def runtest(self) -> None: """Execute the underlying test function.""" > self.ihook.pytest_pyfunc_call(pyfuncitem=self) /usr/lib/python3.14/site-packages/_pytest/python.py:1671: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'pyfuncitem': } firstresult = True def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff979fc980> hook_name = 'pytest_pyfunc_call' methods = [>] kwargs = {'pyfuncitem': } firstresult = True def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyfuncitem = @hookimpl(trylast=True) def pytest_pyfunc_call(pyfuncitem: Function) -> object | None: testfunction = pyfuncitem.obj if is_async_function(testfunction): async_fail(pyfuncitem.nodeid) funcargs = pyfuncitem.funcargs testargs = {arg: funcargs[arg] for arg in pyfuncitem._fixtureinfo.argnames} > result = testfunction(**testargs) ^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/python.py:157: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ timedeltas = np.timedelta64(1,'us'), units = 'microseconds', numbers = array(1) @pytest.mark.filterwarnings("ignore:Timedeltas can't be serialized faithfully") @pytest.mark.parametrize( ["timedeltas", "units", "numbers"], [ ("1D", "days", np.int64(1)), (["1D", "2D", "3D"], "days", np.array([1, 2, 3], "int64")), ("1h", "hours", np.int64(1)), ("1ms", "milliseconds", np.int64(1)), ("1us", "microseconds", np.int64(1)), ("1ns", "nanoseconds", np.int64(1)), (["NaT", "0s", "1s"], None, [np.iinfo(np.int64).min, 0, 1]), (["30m", "60m"], "hours", [0.5, 1.0]), ("NaT", "days", np.iinfo(np.int64).min), (["NaT", "NaT"], "days", [np.iinfo(np.int64).min, np.iinfo(np.int64).min]), ], ) def test_cf_timedelta(timedeltas, units, numbers) -> None: if timedeltas == "NaT": timedeltas = np.timedelta64("NaT", "ns") else: timedeltas = pd.to_timedelta(timedeltas).to_numpy() numbers = np.array(numbers) expected = numbers actual, _ = encode_cf_timedelta(timedeltas, units) assert_array_equal(expected, actual) assert expected.dtype == actual.dtype if units is not None: expected = timedeltas actual = decode_cf_timedelta(numbers, units) assert_array_equal(expected, actual) > assert expected.dtype == actual.dtype E AssertionError: assert dtype(' func = . at 0xffff3b7ec5c0> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :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 instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ /usr/lib/python3.14/site-packages/_pytest/runner.py:344: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) /usr/lib/python3.14/site-packages/_pytest/runner.py:246: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'item': } firstresult = False def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff7d76c980> hook_name = 'pytest_runtest_call' methods = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] kwargs = {'item': } firstresult = False def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.logging.LoggingPlugin object at 0xffff7d217230> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: nodes.Item) -> Generator[None]: self.log_cli_handler.set_when("call") with self._runtest_for(item, "call"): > yield /usr/lib/python3.14/site-packages/_pytest/logging.py:850: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = > _state='suspended' _in_suspended=False> _capture_fixture=None> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: Item) -> Generator[None]: with self.item_capture("call", item): > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/capture.py:900: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = @hookimpl(wrapper=True) def pytest_runtest_call(item: Item) -> Generator[None]: xfailed = item.stash.get(xfailed_key, None) if xfailed is None: item.stash[xfailed_key] = xfailed = evaluate_xfail_marks(item) if xfailed and not item.config.option.runxfail and not xfailed.run: xfail("[NOTRUN] " + xfailed.reason) try: > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/skipping.py:263: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = def pytest_runtest_call(item: Item) -> None: _update_current_test_var(item, "call") try: del sys.last_type del sys.last_value del sys.last_traceback if sys.version_info >= (3, 12, 0): del sys.last_exc # type:ignore[attr-defined] except AttributeError: pass try: > item.runtest() /usr/lib/python3.14/site-packages/_pytest/runner.py:178: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def runtest(self) -> None: """Execute the underlying test function.""" > self.ihook.pytest_pyfunc_call(pyfuncitem=self) /usr/lib/python3.14/site-packages/_pytest/python.py:1671: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'pyfuncitem': } firstresult = True def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff7d76c980> hook_name = 'pytest_pyfunc_call' methods = [>] kwargs = {'pyfuncitem': } firstresult = True def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyfuncitem = @hookimpl(trylast=True) def pytest_pyfunc_call(pyfuncitem: Function) -> object | None: testfunction = pyfuncitem.obj if is_async_function(testfunction): async_fail(pyfuncitem.nodeid) funcargs = pyfuncitem.funcargs testargs = {arg: funcargs[arg] for arg in pyfuncitem._fixtureinfo.argnames} > result = testfunction(**testargs) ^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/python.py:157: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ calendar = 'julian' @requires_cftime @pytest.mark.parametrize("calendar", _CFTIME_CALENDARS) def test_distant_cftime_datetime_sub_cftimeindex(calendar): a = xr.date_range("2000", periods=5, calendar=calendar, use_cftime=True) > with pytest.raises(ValueError, match="difference exceeds"): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_cftimeindex.py:963: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = RaisesExc(ValueError, match='difference exceeds'), exc_type = None exc_val = None, exc_tb = None def __exit__( self, exc_type: type[BaseException] | None, exc_val: BaseException | None, exc_tb: types.TracebackType | None, ) -> bool: __tracebackhide__ = True if exc_type is None: if not self.expected_exceptions: fail("DID NOT RAISE any exception") if len(self.expected_exceptions) > 1: fail(f"DID NOT RAISE any of {self.expected_exceptions!r}") > fail(f"DID NOT RAISE {self.expected_exceptions[0]!r}") /usr/lib/python3.14/site-packages/_pytest/raises.py:712: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ reason = "DID NOT RAISE ", pytrace = True @_with_exception(Failed) def fail(reason: str = "", pytrace: bool = True) -> NoReturn: """Explicitly fail an executing test with the given message. :param reason: The message to show the user as reason for the failure. :param pytrace: If False, msg represents the full failure information and no python traceback will be reported. :raises pytest.fail.Exception: The exception that is raised. """ __tracebackhide__ = True > raise Failed(msg=reason, pytrace=pytrace) E Failed: DID NOT RAISE /usr/lib/python3.14/site-packages/_pytest/outcomes.py:177: Failed ________________ test_cf_timedelta[timedeltas7-hours-numbers7] _________________ [gw3] linux -- Python 3.14.2 /usr/bin/python3 cls = func = . at 0xffff5a684bf0> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :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 instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ /usr/lib/python3.14/site-packages/_pytest/runner.py:344: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) /usr/lib/python3.14/site-packages/_pytest/runner.py:246: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'item': } firstresult = False def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff979fc980> hook_name = 'pytest_runtest_call' methods = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] kwargs = {'item': } firstresult = False def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.logging.LoggingPlugin object at 0xffff974a7230> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: nodes.Item) -> Generator[None]: self.log_cli_handler.set_when("call") with self._runtest_for(item, "call"): > yield /usr/lib/python3.14/site-packages/_pytest/logging.py:850: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = > _state='suspended' _in_suspended=False> _capture_fixture=None> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: Item) -> Generator[None]: with self.item_capture("call", item): > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/capture.py:900: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = @hookimpl(wrapper=True) def pytest_runtest_call(item: Item) -> Generator[None]: xfailed = item.stash.get(xfailed_key, None) if xfailed is None: item.stash[xfailed_key] = xfailed = evaluate_xfail_marks(item) if xfailed and not item.config.option.runxfail and not xfailed.run: xfail("[NOTRUN] " + xfailed.reason) try: > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/skipping.py:263: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = def pytest_runtest_call(item: Item) -> None: _update_current_test_var(item, "call") try: del sys.last_type del sys.last_value del sys.last_traceback if sys.version_info >= (3, 12, 0): del sys.last_exc # type:ignore[attr-defined] except AttributeError: pass try: > item.runtest() /usr/lib/python3.14/site-packages/_pytest/runner.py:178: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def runtest(self) -> None: """Execute the underlying test function.""" > self.ihook.pytest_pyfunc_call(pyfuncitem=self) /usr/lib/python3.14/site-packages/_pytest/python.py:1671: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'pyfuncitem': } firstresult = True def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff979fc980> hook_name = 'pytest_pyfunc_call' methods = [>] kwargs = {'pyfuncitem': } firstresult = True def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyfuncitem = @hookimpl(trylast=True) def pytest_pyfunc_call(pyfuncitem: Function) -> object | None: testfunction = pyfuncitem.obj if is_async_function(testfunction): async_fail(pyfuncitem.nodeid) funcargs = pyfuncitem.funcargs testargs = {arg: funcargs[arg] for arg in pyfuncitem._fixtureinfo.argnames} > result = testfunction(**testargs) ^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/python.py:157: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ timedeltas = array([1800000000, 3600000000], dtype='timedelta64[us]') units = 'hours', numbers = array([0.5, 1. ]) @pytest.mark.filterwarnings("ignore:Timedeltas can't be serialized faithfully") @pytest.mark.parametrize( ["timedeltas", "units", "numbers"], [ ("1D", "days", np.int64(1)), (["1D", "2D", "3D"], "days", np.array([1, 2, 3], "int64")), ("1h", "hours", np.int64(1)), ("1ms", "milliseconds", np.int64(1)), ("1us", "microseconds", np.int64(1)), ("1ns", "nanoseconds", np.int64(1)), (["NaT", "0s", "1s"], None, [np.iinfo(np.int64).min, 0, 1]), (["30m", "60m"], "hours", [0.5, 1.0]), ("NaT", "days", np.iinfo(np.int64).min), (["NaT", "NaT"], "days", [np.iinfo(np.int64).min, np.iinfo(np.int64).min]), ], ) def test_cf_timedelta(timedeltas, units, numbers) -> None: if timedeltas == "NaT": timedeltas = np.timedelta64("NaT", "ns") else: timedeltas = pd.to_timedelta(timedeltas).to_numpy() numbers = np.array(numbers) expected = numbers actual, _ = encode_cf_timedelta(timedeltas, units) assert_array_equal(expected, actual) assert expected.dtype == actual.dtype if units is not None: expected = timedeltas actual = decode_cf_timedelta(numbers, units) assert_array_equal(expected, actual) > assert expected.dtype == actual.dtype E AssertionError: assert dtype(' func = . at 0xffff5a684ca0> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :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 instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ /usr/lib/python3.14/site-packages/_pytest/runner.py:344: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) /usr/lib/python3.14/site-packages/_pytest/runner.py:246: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'item': } firstresult = False def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff979fc980> hook_name = 'pytest_runtest_call' methods = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] kwargs = {'item': } firstresult = False def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.logging.LoggingPlugin object at 0xffff974a7230> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: nodes.Item) -> Generator[None]: self.log_cli_handler.set_when("call") with self._runtest_for(item, "call"): > yield /usr/lib/python3.14/site-packages/_pytest/logging.py:850: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = > _state='suspended' _in_suspended=False> _capture_fixture=None> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: Item) -> Generator[None]: with self.item_capture("call", item): > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/capture.py:900: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = @hookimpl(wrapper=True) def pytest_runtest_call(item: Item) -> Generator[None]: xfailed = item.stash.get(xfailed_key, None) if xfailed is None: item.stash[xfailed_key] = xfailed = evaluate_xfail_marks(item) if xfailed and not item.config.option.runxfail and not xfailed.run: xfail("[NOTRUN] " + xfailed.reason) try: > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/skipping.py:263: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = def pytest_runtest_call(item: Item) -> None: _update_current_test_var(item, "call") try: del sys.last_type del sys.last_value del sys.last_traceback if sys.version_info >= (3, 12, 0): del sys.last_exc # type:ignore[attr-defined] except AttributeError: pass try: > item.runtest() /usr/lib/python3.14/site-packages/_pytest/runner.py:178: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def runtest(self) -> None: """Execute the underlying test function.""" > self.ihook.pytest_pyfunc_call(pyfuncitem=self) /usr/lib/python3.14/site-packages/_pytest/python.py:1671: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'pyfuncitem': } firstresult = True def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff979fc980> hook_name = 'pytest_pyfunc_call' methods = [>] kwargs = {'pyfuncitem': } firstresult = True def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyfuncitem = @hookimpl(trylast=True) def pytest_pyfunc_call(pyfuncitem: Function) -> object | None: testfunction = pyfuncitem.obj if is_async_function(testfunction): async_fail(pyfuncitem.nodeid) funcargs = pyfuncitem.funcargs testargs = {arg: funcargs[arg] for arg in pyfuncitem._fixtureinfo.argnames} > result = testfunction(**testargs) ^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/python.py:157: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ timedeltas = array(['NaT', 'NaT'], dtype='timedelta64[s]'), units = 'days' numbers = array([-9223372036854775808, -9223372036854775808]) @pytest.mark.filterwarnings("ignore:Timedeltas can't be serialized faithfully") @pytest.mark.parametrize( ["timedeltas", "units", "numbers"], [ ("1D", "days", np.int64(1)), (["1D", "2D", "3D"], "days", np.array([1, 2, 3], "int64")), ("1h", "hours", np.int64(1)), ("1ms", "milliseconds", np.int64(1)), ("1us", "microseconds", np.int64(1)), ("1ns", "nanoseconds", np.int64(1)), (["NaT", "0s", "1s"], None, [np.iinfo(np.int64).min, 0, 1]), (["30m", "60m"], "hours", [0.5, 1.0]), ("NaT", "days", np.iinfo(np.int64).min), (["NaT", "NaT"], "days", [np.iinfo(np.int64).min, np.iinfo(np.int64).min]), ], ) def test_cf_timedelta(timedeltas, units, numbers) -> None: if timedeltas == "NaT": timedeltas = np.timedelta64("NaT", "ns") else: timedeltas = pd.to_timedelta(timedeltas).to_numpy() numbers = np.array(numbers) expected = numbers actual, _ = encode_cf_timedelta(timedeltas, units) assert_array_equal(expected, actual) assert expected.dtype == actual.dtype if units is not None: expected = timedeltas actual = decode_cf_timedelta(numbers, units) assert_array_equal(expected, actual) > assert expected.dtype == actual.dtype E AssertionError: assert dtype(' func = . at 0xffff3b7ec460> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :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 instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ /usr/lib/python3.14/site-packages/_pytest/runner.py:344: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) /usr/lib/python3.14/site-packages/_pytest/runner.py:246: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'item': } firstresult = False def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff7d76c980> hook_name = 'pytest_runtest_call' methods = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] kwargs = {'item': } firstresult = False def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.logging.LoggingPlugin object at 0xffff7d217230> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: nodes.Item) -> Generator[None]: self.log_cli_handler.set_when("call") with self._runtest_for(item, "call"): > yield /usr/lib/python3.14/site-packages/_pytest/logging.py:850: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = > _state='suspended' _in_suspended=False> _capture_fixture=None> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: Item) -> Generator[None]: with self.item_capture("call", item): > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/capture.py:900: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = @hookimpl(wrapper=True) def pytest_runtest_call(item: Item) -> Generator[None]: xfailed = item.stash.get(xfailed_key, None) if xfailed is None: item.stash[xfailed_key] = xfailed = evaluate_xfail_marks(item) if xfailed and not item.config.option.runxfail and not xfailed.run: xfail("[NOTRUN] " + xfailed.reason) try: > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/skipping.py:263: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = def pytest_runtest_call(item: Item) -> None: _update_current_test_var(item, "call") try: del sys.last_type del sys.last_value del sys.last_traceback if sys.version_info >= (3, 12, 0): del sys.last_exc # type:ignore[attr-defined] except AttributeError: pass try: > item.runtest() /usr/lib/python3.14/site-packages/_pytest/runner.py:178: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def runtest(self) -> None: """Execute the underlying test function.""" > self.ihook.pytest_pyfunc_call(pyfuncitem=self) /usr/lib/python3.14/site-packages/_pytest/python.py:1671: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'pyfuncitem': } firstresult = True def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff7d76c980> hook_name = 'pytest_pyfunc_call' methods = [>] kwargs = {'pyfuncitem': } firstresult = True def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyfuncitem = @hookimpl(trylast=True) def pytest_pyfunc_call(pyfuncitem: Function) -> object | None: testfunction = pyfuncitem.obj if is_async_function(testfunction): async_fail(pyfuncitem.nodeid) funcargs = pyfuncitem.funcargs testargs = {arg: funcargs[arg] for arg in pyfuncitem._fixtureinfo.argnames} > result = testfunction(**testargs) ^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/python.py:157: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ calendar = 'all_leap' @requires_cftime @pytest.mark.parametrize("calendar", _CFTIME_CALENDARS) def test_distant_cftime_datetime_sub_cftimeindex(calendar): a = xr.date_range("2000", periods=5, calendar=calendar, use_cftime=True) > with pytest.raises(ValueError, match="difference exceeds"): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_cftimeindex.py:963: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = RaisesExc(ValueError, match='difference exceeds'), exc_type = None exc_val = None, exc_tb = None def __exit__( self, exc_type: type[BaseException] | None, exc_val: BaseException | None, exc_tb: types.TracebackType | None, ) -> bool: __tracebackhide__ = True if exc_type is None: if not self.expected_exceptions: fail("DID NOT RAISE any exception") if len(self.expected_exceptions) > 1: fail(f"DID NOT RAISE any of {self.expected_exceptions!r}") > fail(f"DID NOT RAISE {self.expected_exceptions[0]!r}") /usr/lib/python3.14/site-packages/_pytest/raises.py:712: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ reason = "DID NOT RAISE ", pytrace = True @_with_exception(Failed) def fail(reason: str = "", pytrace: bool = True) -> NoReturn: """Explicitly fail an executing test with the given message. :param reason: The message to show the user as reason for the failure. :param pytrace: If False, msg represents the full failure information and no python traceback will be reported. :raises pytest.fail.Exception: The exception that is raised. """ __tracebackhide__ = True > raise Failed(msg=reason, pytrace=pytrace) E Failed: DID NOT RAISE /usr/lib/python3.14/site-packages/_pytest/outcomes.py:177: Failed ____________ test_distant_cftime_datetime_sub_cftimeindex[366_day] _____________ [gw0] linux -- Python 3.14.2 /usr/bin/python3 cls = func = . at 0xffff3f9e10c0> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :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 instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ /usr/lib/python3.14/site-packages/_pytest/runner.py:344: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) /usr/lib/python3.14/site-packages/_pytest/runner.py:246: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'item': } firstresult = False def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff7d76c980> hook_name = 'pytest_runtest_call' methods = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] kwargs = {'item': } firstresult = False def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.logging.LoggingPlugin object at 0xffff7d217230> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: nodes.Item) -> Generator[None]: self.log_cli_handler.set_when("call") with self._runtest_for(item, "call"): > yield /usr/lib/python3.14/site-packages/_pytest/logging.py:850: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = > _state='suspended' _in_suspended=False> _capture_fixture=None> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: Item) -> Generator[None]: with self.item_capture("call", item): > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/capture.py:900: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = @hookimpl(wrapper=True) def pytest_runtest_call(item: Item) -> Generator[None]: xfailed = item.stash.get(xfailed_key, None) if xfailed is None: item.stash[xfailed_key] = xfailed = evaluate_xfail_marks(item) if xfailed and not item.config.option.runxfail and not xfailed.run: xfail("[NOTRUN] " + xfailed.reason) try: > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/skipping.py:263: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = def pytest_runtest_call(item: Item) -> None: _update_current_test_var(item, "call") try: del sys.last_type del sys.last_value del sys.last_traceback if sys.version_info >= (3, 12, 0): del sys.last_exc # type:ignore[attr-defined] except AttributeError: pass try: > item.runtest() /usr/lib/python3.14/site-packages/_pytest/runner.py:178: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def runtest(self) -> None: """Execute the underlying test function.""" > self.ihook.pytest_pyfunc_call(pyfuncitem=self) /usr/lib/python3.14/site-packages/_pytest/python.py:1671: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'pyfuncitem': } firstresult = True def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff7d76c980> hook_name = 'pytest_pyfunc_call' methods = [>] kwargs = {'pyfuncitem': } firstresult = True def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyfuncitem = @hookimpl(trylast=True) def pytest_pyfunc_call(pyfuncitem: Function) -> object | None: testfunction = pyfuncitem.obj if is_async_function(testfunction): async_fail(pyfuncitem.nodeid) funcargs = pyfuncitem.funcargs testargs = {arg: funcargs[arg] for arg in pyfuncitem._fixtureinfo.argnames} > result = testfunction(**testargs) ^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/python.py:157: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ calendar = '366_day' @requires_cftime @pytest.mark.parametrize("calendar", _CFTIME_CALENDARS) def test_distant_cftime_datetime_sub_cftimeindex(calendar): a = xr.date_range("2000", periods=5, calendar=calendar, use_cftime=True) > with pytest.raises(ValueError, match="difference exceeds"): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_cftimeindex.py:963: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = RaisesExc(ValueError, match='difference exceeds'), exc_type = None exc_val = None, exc_tb = None def __exit__( self, exc_type: type[BaseException] | None, exc_val: BaseException | None, exc_tb: types.TracebackType | None, ) -> bool: __tracebackhide__ = True if exc_type is None: if not self.expected_exceptions: fail("DID NOT RAISE any exception") if len(self.expected_exceptions) > 1: fail(f"DID NOT RAISE any of {self.expected_exceptions!r}") > fail(f"DID NOT RAISE {self.expected_exceptions[0]!r}") /usr/lib/python3.14/site-packages/_pytest/raises.py:712: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ reason = "DID NOT RAISE ", pytrace = True @_with_exception(Failed) def fail(reason: str = "", pytrace: bool = True) -> NoReturn: """Explicitly fail an executing test with the given message. :param reason: The message to show the user as reason for the failure. :param pytrace: If False, msg represents the full failure information and no python traceback will be reported. :raises pytest.fail.Exception: The exception that is raised. """ __tracebackhide__ = True > raise Failed(msg=reason, pytrace=pytrace) E Failed: DID NOT RAISE /usr/lib/python3.14/site-packages/_pytest/outcomes.py:177: Failed _____________________________ test_cf_timedelta_2d _____________________________ [gw3] linux -- Python 3.14.2 /usr/bin/python3 cls = func = . at 0xffff5a684b40> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :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 instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ /usr/lib/python3.14/site-packages/_pytest/runner.py:344: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) /usr/lib/python3.14/site-packages/_pytest/runner.py:246: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'item': }, firstresult = False def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff979fc980> hook_name = 'pytest_runtest_call' methods = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] kwargs = {'item': }, firstresult = False def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': }, firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': }, firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.logging.LoggingPlugin object at 0xffff974a7230> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: nodes.Item) -> Generator[None]: self.log_cli_handler.set_when("call") with self._runtest_for(item, "call"): > yield /usr/lib/python3.14/site-packages/_pytest/logging.py:850: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': }, firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = > _state='suspended' _in_suspended=False> _capture_fixture=None> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: Item) -> Generator[None]: with self.item_capture("call", item): > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/capture.py:900: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': }, firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call', args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call', args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': }, firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = @hookimpl(wrapper=True) def pytest_runtest_call(item: Item) -> Generator[None]: xfailed = item.stash.get(xfailed_key, None) if xfailed is None: item.stash[xfailed_key] = xfailed = evaluate_xfail_marks(item) if xfailed and not item.config.option.runxfail and not xfailed.run: xfail("[NOTRUN] " + xfailed.reason) try: > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/skipping.py:263: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': }, firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = def pytest_runtest_call(item: Item) -> None: _update_current_test_var(item, "call") try: del sys.last_type del sys.last_value del sys.last_traceback if sys.version_info >= (3, 12, 0): del sys.last_exc # type:ignore[attr-defined] except AttributeError: pass try: > item.runtest() /usr/lib/python3.14/site-packages/_pytest/runner.py:178: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def runtest(self) -> None: """Execute the underlying test function.""" > self.ihook.pytest_pyfunc_call(pyfuncitem=self) /usr/lib/python3.14/site-packages/_pytest/python.py:1671: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'pyfuncitem': }, firstresult = True def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff979fc980> hook_name = 'pytest_pyfunc_call' methods = [>] kwargs = {'pyfuncitem': }, firstresult = True def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call', args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call', args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyfuncitem = @hookimpl(trylast=True) def pytest_pyfunc_call(pyfuncitem: Function) -> object | None: testfunction = pyfuncitem.obj if is_async_function(testfunction): async_fail(pyfuncitem.nodeid) funcargs = pyfuncitem.funcargs testargs = {arg: funcargs[arg] for arg in pyfuncitem._fixtureinfo.argnames} > result = testfunction(**testargs) ^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/python.py:157: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def test_cf_timedelta_2d() -> None: units = "days" numbers = np.atleast_2d([1, 2, 3]) timedeltas = np.atleast_2d(pd.to_timedelta(["1D", "2D", "3D"]).to_numpy()) expected = timedeltas actual = decode_cf_timedelta(numbers, units) assert_array_equal(expected, actual) > assert expected.dtype == actual.dtype E AssertionError: assert dtype(' func = . at 0xffff3b795850> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :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 instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ /usr/lib/python3.14/site-packages/_pytest/runner.py:344: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) /usr/lib/python3.14/site-packages/_pytest/runner.py:246: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'item': } firstresult = False def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff7d76c980> hook_name = 'pytest_runtest_call' methods = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] kwargs = {'item': } firstresult = False def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.logging.LoggingPlugin object at 0xffff7d217230> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: nodes.Item) -> Generator[None]: self.log_cli_handler.set_when("call") with self._runtest_for(item, "call"): > yield /usr/lib/python3.14/site-packages/_pytest/logging.py:850: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = > _state='suspended' _in_suspended=False> _capture_fixture=None> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: Item) -> Generator[None]: with self.item_capture("call", item): > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/capture.py:900: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = @hookimpl(wrapper=True) def pytest_runtest_call(item: Item) -> Generator[None]: xfailed = item.stash.get(xfailed_key, None) if xfailed is None: item.stash[xfailed_key] = xfailed = evaluate_xfail_marks(item) if xfailed and not item.config.option.runxfail and not xfailed.run: xfail("[NOTRUN] " + xfailed.reason) try: > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/skipping.py:263: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = def pytest_runtest_call(item: Item) -> None: _update_current_test_var(item, "call") try: del sys.last_type del sys.last_value del sys.last_traceback if sys.version_info >= (3, 12, 0): del sys.last_exc # type:ignore[attr-defined] except AttributeError: pass try: > item.runtest() /usr/lib/python3.14/site-packages/_pytest/runner.py:178: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def runtest(self) -> None: """Execute the underlying test function.""" > self.ihook.pytest_pyfunc_call(pyfuncitem=self) /usr/lib/python3.14/site-packages/_pytest/python.py:1671: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'pyfuncitem': } firstresult = True def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff7d76c980> hook_name = 'pytest_pyfunc_call' methods = [>] kwargs = {'pyfuncitem': } firstresult = True def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyfuncitem = @hookimpl(trylast=True) def pytest_pyfunc_call(pyfuncitem: Function) -> object | None: testfunction = pyfuncitem.obj if is_async_function(testfunction): async_fail(pyfuncitem.nodeid) funcargs = pyfuncitem.funcargs testargs = {arg: funcargs[arg] for arg in pyfuncitem._fixtureinfo.argnames} > result = testfunction(**testargs) ^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/python.py:157: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ calendar = 'gregorian' @requires_cftime @pytest.mark.parametrize("calendar", _CFTIME_CALENDARS) def test_distant_cftime_datetime_sub_cftimeindex(calendar): a = xr.date_range("2000", periods=5, calendar=calendar, use_cftime=True) > with pytest.raises(ValueError, match="difference exceeds"): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_cftimeindex.py:963: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = RaisesExc(ValueError, match='difference exceeds'), exc_type = None exc_val = None, exc_tb = None def __exit__( self, exc_type: type[BaseException] | None, exc_val: BaseException | None, exc_tb: types.TracebackType | None, ) -> bool: __tracebackhide__ = True if exc_type is None: if not self.expected_exceptions: fail("DID NOT RAISE any exception") if len(self.expected_exceptions) > 1: fail(f"DID NOT RAISE any of {self.expected_exceptions!r}") > fail(f"DID NOT RAISE {self.expected_exceptions[0]!r}") /usr/lib/python3.14/site-packages/_pytest/raises.py:712: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ reason = "DID NOT RAISE ", pytrace = True @_with_exception(Failed) def fail(reason: str = "", pytrace: bool = True) -> NoReturn: """Explicitly fail an executing test with the given message. :param reason: The message to show the user as reason for the failure. :param pytrace: If False, msg represents the full failure information and no python traceback will be reported. :raises pytest.fail.Exception: The exception that is raised. """ __tracebackhide__ = True > raise Failed(msg=reason, pytrace=pytrace) E Failed: DID NOT RAISE /usr/lib/python3.14/site-packages/_pytest/outcomes.py:177: Failed ______ test_distant_cftime_datetime_sub_cftimeindex[proleptic_gregorian] _______ [gw0] linux -- Python 3.14.2 /usr/bin/python3 cls = func = . at 0xffff3b794720> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :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 instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ /usr/lib/python3.14/site-packages/_pytest/runner.py:344: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) /usr/lib/python3.14/site-packages/_pytest/runner.py:246: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'item': } firstresult = False def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff7d76c980> hook_name = 'pytest_runtest_call' methods = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] kwargs = {'item': } firstresult = False def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.logging.LoggingPlugin object at 0xffff7d217230> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: nodes.Item) -> Generator[None]: self.log_cli_handler.set_when("call") with self._runtest_for(item, "call"): > yield /usr/lib/python3.14/site-packages/_pytest/logging.py:850: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = > _state='suspended' _in_suspended=False> _capture_fixture=None> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: Item) -> Generator[None]: with self.item_capture("call", item): > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/capture.py:900: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = @hookimpl(wrapper=True) def pytest_runtest_call(item: Item) -> Generator[None]: xfailed = item.stash.get(xfailed_key, None) if xfailed is None: item.stash[xfailed_key] = xfailed = evaluate_xfail_marks(item) if xfailed and not item.config.option.runxfail and not xfailed.run: xfail("[NOTRUN] " + xfailed.reason) try: > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/skipping.py:263: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = def pytest_runtest_call(item: Item) -> None: _update_current_test_var(item, "call") try: del sys.last_type del sys.last_value del sys.last_traceback if sys.version_info >= (3, 12, 0): del sys.last_exc # type:ignore[attr-defined] except AttributeError: pass try: > item.runtest() /usr/lib/python3.14/site-packages/_pytest/runner.py:178: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def runtest(self) -> None: """Execute the underlying test function.""" > self.ihook.pytest_pyfunc_call(pyfuncitem=self) /usr/lib/python3.14/site-packages/_pytest/python.py:1671: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'pyfuncitem': } firstresult = True def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff7d76c980> hook_name = 'pytest_pyfunc_call' methods = [>] kwargs = {'pyfuncitem': } firstresult = True def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyfuncitem = @hookimpl(trylast=True) def pytest_pyfunc_call(pyfuncitem: Function) -> object | None: testfunction = pyfuncitem.obj if is_async_function(testfunction): async_fail(pyfuncitem.nodeid) funcargs = pyfuncitem.funcargs testargs = {arg: funcargs[arg] for arg in pyfuncitem._fixtureinfo.argnames} > result = testfunction(**testargs) ^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/python.py:157: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ calendar = 'proleptic_gregorian' @requires_cftime @pytest.mark.parametrize("calendar", _CFTIME_CALENDARS) def test_distant_cftime_datetime_sub_cftimeindex(calendar): a = xr.date_range("2000", periods=5, calendar=calendar, use_cftime=True) > with pytest.raises(ValueError, match="difference exceeds"): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_cftimeindex.py:963: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = RaisesExc(ValueError, match='difference exceeds'), exc_type = None exc_val = None, exc_tb = None def __exit__( self, exc_type: type[BaseException] | None, exc_val: BaseException | None, exc_tb: types.TracebackType | None, ) -> bool: __tracebackhide__ = True if exc_type is None: if not self.expected_exceptions: fail("DID NOT RAISE any exception") if len(self.expected_exceptions) > 1: fail(f"DID NOT RAISE any of {self.expected_exceptions!r}") > fail(f"DID NOT RAISE {self.expected_exceptions[0]!r}") /usr/lib/python3.14/site-packages/_pytest/raises.py:712: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ reason = "DID NOT RAISE ", pytrace = True @_with_exception(Failed) def fail(reason: str = "", pytrace: bool = True) -> NoReturn: """Explicitly fail an executing test with the given message. :param reason: The message to show the user as reason for the failure. :param pytrace: If False, msg represents the full failure information and no python traceback will be reported. :raises pytest.fail.Exception: The exception that is raised. """ __tracebackhide__ = True > raise Failed(msg=reason, pytrace=pytrace) E Failed: DID NOT RAISE /usr/lib/python3.14/site-packages/_pytest/outcomes.py:177: Failed _____________________ TestDataArray.test_curvefit_helpers ______________________ [gw3] linux -- Python 3.14.2 /usr/bin/python3 cls = func = . at 0xffff5a25b270> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :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 instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ /usr/lib/python3.14/site-packages/_pytest/runner.py:344: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) /usr/lib/python3.14/site-packages/_pytest/runner.py:246: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'item': }, firstresult = False def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff979fc980> hook_name = 'pytest_runtest_call' methods = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] kwargs = {'item': }, firstresult = False def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': }, firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': }, firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.logging.LoggingPlugin object at 0xffff974a7230> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: nodes.Item) -> Generator[None]: self.log_cli_handler.set_when("call") with self._runtest_for(item, "call"): > yield /usr/lib/python3.14/site-packages/_pytest/logging.py:850: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': }, firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = > _state='suspended' _in_suspended=False> _capture_fixture=None> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: Item) -> Generator[None]: with self.item_capture("call", item): > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/capture.py:900: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': }, firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call', args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call', args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': }, firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = @hookimpl(wrapper=True) def pytest_runtest_call(item: Item) -> Generator[None]: xfailed = item.stash.get(xfailed_key, None) if xfailed is None: item.stash[xfailed_key] = xfailed = evaluate_xfail_marks(item) if xfailed and not item.config.option.runxfail and not xfailed.run: xfail("[NOTRUN] " + xfailed.reason) try: > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/skipping.py:263: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': }, firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = def pytest_runtest_call(item: Item) -> None: _update_current_test_var(item, "call") try: del sys.last_type del sys.last_value del sys.last_traceback if sys.version_info >= (3, 12, 0): del sys.last_exc # type:ignore[attr-defined] except AttributeError: pass try: > item.runtest() /usr/lib/python3.14/site-packages/_pytest/runner.py:178: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def runtest(self) -> None: """Execute the underlying test function.""" > self.ihook.pytest_pyfunc_call(pyfuncitem=self) /usr/lib/python3.14/site-packages/_pytest/python.py:1671: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'pyfuncitem': }, firstresult = True def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff979fc980> hook_name = 'pytest_pyfunc_call' methods = [>] kwargs = {'pyfuncitem': }, firstresult = True def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call', args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call', args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyfuncitem = @hookimpl(trylast=True) def pytest_pyfunc_call(pyfuncitem: Function) -> object | None: testfunction = pyfuncitem.obj if is_async_function(testfunction): async_fail(pyfuncitem.nodeid) funcargs = pyfuncitem.funcargs testargs = {arg: funcargs[arg] for arg in pyfuncitem._fixtureinfo.argnames} > result = testfunction(**testargs) ^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/python.py:157: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def test_curvefit_helpers(self) -> None: def exp_decay(t, n0, tau=1): return n0 * np.exp(-t / tau) from xarray.computation.fit import _get_func_args, _initialize_curvefit_params params, func_args = _get_func_args(exp_decay, []) assert params == ["n0", "tau"] param_defaults, bounds_defaults = _initialize_curvefit_params( params, {"n0": 4}, {"tau": [5, np.inf]}, func_args ) assert param_defaults == {"n0": 4, "tau": 6} assert bounds_defaults == {"n0": (-np.inf, np.inf), "tau": (5, np.inf)} # DataArray as bound param_defaults, bounds_defaults = _initialize_curvefit_params( params=params, p0={"n0": 4}, bounds={"tau": [DataArray([3, 4], coords=[("x", [1, 2])]), np.inf]}, func_args=func_args, ) assert param_defaults["n0"] == 4 assert ( param_defaults["tau"] == xr.DataArray([4, 5], coords=[("x", [1, 2])]) ).all() assert bounds_defaults["n0"] == (-np.inf, np.inf) assert ( bounds_defaults["tau"][0] == DataArray([3, 4], coords=[("x", [1, 2])]) ).all() assert bounds_defaults["tau"][1] == np.inf param_names = ["a"] params, func_args = _get_func_args(np.power, param_names) assert params == param_names > with pytest.raises(ValueError): ^^^^^^^^^^^^^^^^^^^^^^^^^ /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_dataarray.py:4864: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = RaisesExc(ValueError), exc_type = None, exc_val = None, exc_tb = None def __exit__( self, exc_type: type[BaseException] | None, exc_val: BaseException | None, exc_tb: types.TracebackType | None, ) -> bool: __tracebackhide__ = True if exc_type is None: if not self.expected_exceptions: fail("DID NOT RAISE any exception") if len(self.expected_exceptions) > 1: fail(f"DID NOT RAISE any of {self.expected_exceptions!r}") > fail(f"DID NOT RAISE {self.expected_exceptions[0]!r}") /usr/lib/python3.14/site-packages/_pytest/raises.py:712: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ reason = "DID NOT RAISE ", pytrace = True @_with_exception(Failed) def fail(reason: str = "", pytrace: bool = True) -> NoReturn: """Explicitly fail an executing test with the given message. :param reason: The message to show the user as reason for the failure. :param pytrace: If False, msg represents the full failure information and no python traceback will be reported. :raises pytest.fail.Exception: The exception that is raised. """ __tracebackhide__ = True > raise Failed(msg=reason, pytrace=pytrace) E Failed: DID NOT RAISE /usr/lib/python3.14/site-packages/_pytest/outcomes.py:177: Failed _______________________ test_groupby_bins_datetime_mean ________________________ [gw3] linux -- Python 3.14.2 /usr/bin/python3 cls = func = . at 0xffff50ecb3d0> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :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 instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ /usr/lib/python3.14/site-packages/_pytest/runner.py:344: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) /usr/lib/python3.14/site-packages/_pytest/runner.py:246: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'item': } firstresult = False def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff979fc980> hook_name = 'pytest_runtest_call' methods = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] kwargs = {'item': } firstresult = False def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.logging.LoggingPlugin object at 0xffff974a7230> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: nodes.Item) -> Generator[None]: self.log_cli_handler.set_when("call") with self._runtest_for(item, "call"): > yield /usr/lib/python3.14/site-packages/_pytest/logging.py:850: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = > _state='suspended' _in_suspended=False> _capture_fixture=None> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: Item) -> Generator[None]: with self.item_capture("call", item): > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/capture.py:900: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = @hookimpl(wrapper=True) def pytest_runtest_call(item: Item) -> Generator[None]: xfailed = item.stash.get(xfailed_key, None) if xfailed is None: item.stash[xfailed_key] = xfailed = evaluate_xfail_marks(item) if xfailed and not item.config.option.runxfail and not xfailed.run: xfail("[NOTRUN] " + xfailed.reason) try: > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/skipping.py:263: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = def pytest_runtest_call(item: Item) -> None: _update_current_test_var(item, "call") try: del sys.last_type del sys.last_value del sys.last_traceback if sys.version_info >= (3, 12, 0): del sys.last_exc # type:ignore[attr-defined] except AttributeError: pass try: > item.runtest() /usr/lib/python3.14/site-packages/_pytest/runner.py:178: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def runtest(self) -> None: """Execute the underlying test function.""" > self.ihook.pytest_pyfunc_call(pyfuncitem=self) /usr/lib/python3.14/site-packages/_pytest/python.py:1671: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'pyfuncitem': } firstresult = True def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff979fc980> hook_name = 'pytest_pyfunc_call' methods = [>] kwargs = {'pyfuncitem': } firstresult = True def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyfuncitem = @hookimpl(trylast=True) def pytest_pyfunc_call(pyfuncitem: Function) -> object | None: testfunction = pyfuncitem.obj if is_async_function(testfunction): async_fail(pyfuncitem.nodeid) funcargs = pyfuncitem.funcargs testargs = {arg: funcargs[arg] for arg in pyfuncitem._fixtureinfo.argnames} > result = testfunction(**testargs) ^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/python.py:157: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def test_groupby_bins_datetime_mean(): """Test groupby_bins with datetime mean (issue #6995)""" times = pd.date_range("2020-01-01", "2020-02-01", freq="1h") index = np.arange(len(times)) bins = np.arange(0, len(index), 5) ds = xr.Dataset( {"time": ("index", times), "float": ("index", np.linspace(0, 1, len(index)))}, coords={"index": index}, ) # The time variable should be preserved and averaged result = ds.groupby_bins("index", bins).mean() assert "time" in result.data_vars assert "float" in result.data_vars > assert result.time.dtype == np.dtype("datetime64[ns]") E AssertionError: assert dtype(' Size: 1kB\narray(['2020-01-01T03:00:00.000000', '2020-01-01T08:00:00.000000... dtype='datetime64[us]')\nCoordinates:\n * index_bins (index_bins) interval[int64, right] 2kB (0, 5] ... (735, 740].dtype E + where Size: 1kB\narray(['2020-01-01T03:00:00.000000', '2020-01-01T08:00:00.000000... dtype='datetime64[us]')\nCoordinates:\n * index_bins (index_bins) interval[int64, right] 2kB (0, 5] ... (735, 740] = Size: 5kB\nDimensions: (index_bins: 148)\nCoordinates:\n * index_bins (index_bins) interval[int64,...64[us] 1kB 2020-01-01T03:00:00 ... 2020-...\n float (index_bins) float64 1kB 0.004032 0.01075 ... 0.9852 0.9919.time E + and dtype('('datetime64[ns]') E + where = np.dtype /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_groupby.py:3831: AssertionError ______________________ test_groupby_bins_mean_time_series ______________________ [gw3] linux -- Python 3.14.2 /usr/bin/python3 cls = func = . at 0xffff50f05c70> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :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 instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ /usr/lib/python3.14/site-packages/_pytest/runner.py:344: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) /usr/lib/python3.14/site-packages/_pytest/runner.py:246: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'item': } firstresult = False def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff979fc980> hook_name = 'pytest_runtest_call' methods = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] kwargs = {'item': } firstresult = False def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.logging.LoggingPlugin object at 0xffff974a7230> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: nodes.Item) -> Generator[None]: self.log_cli_handler.set_when("call") with self._runtest_for(item, "call"): > yield /usr/lib/python3.14/site-packages/_pytest/logging.py:850: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = > _state='suspended' _in_suspended=False> _capture_fixture=None> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: Item) -> Generator[None]: with self.item_capture("call", item): > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/capture.py:900: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = @hookimpl(wrapper=True) def pytest_runtest_call(item: Item) -> Generator[None]: xfailed = item.stash.get(xfailed_key, None) if xfailed is None: item.stash[xfailed_key] = xfailed = evaluate_xfail_marks(item) if xfailed and not item.config.option.runxfail and not xfailed.run: xfail("[NOTRUN] " + xfailed.reason) try: > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/skipping.py:263: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = def pytest_runtest_call(item: Item) -> None: _update_current_test_var(item, "call") try: del sys.last_type del sys.last_value del sys.last_traceback if sys.version_info >= (3, 12, 0): del sys.last_exc # type:ignore[attr-defined] except AttributeError: pass try: > item.runtest() /usr/lib/python3.14/site-packages/_pytest/runner.py:178: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def runtest(self) -> None: """Execute the underlying test function.""" > self.ihook.pytest_pyfunc_call(pyfuncitem=self) /usr/lib/python3.14/site-packages/_pytest/python.py:1671: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'pyfuncitem': } firstresult = True def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff979fc980> hook_name = 'pytest_pyfunc_call' methods = [>] kwargs = {'pyfuncitem': } firstresult = True def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyfuncitem = @hookimpl(trylast=True) def pytest_pyfunc_call(pyfuncitem: Function) -> object | None: testfunction = pyfuncitem.obj if is_async_function(testfunction): async_fail(pyfuncitem.nodeid) funcargs = pyfuncitem.funcargs testargs = {arg: funcargs[arg] for arg in pyfuncitem._fixtureinfo.argnames} > result = testfunction(**testargs) ^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/python.py:157: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def test_groupby_bins_mean_time_series(): """Test groupby_bins mean on time series data (issue #10217)""" ds = xr.Dataset( { "measurement": ("trial", np.arange(0, 100, 10)), "time": ("trial", pd.date_range("20240101T1500", "20240101T1501", 10)), } ) # Time variable should be preserved in the aggregation ds_agged = ds.groupby_bins("trial", 5).mean() assert "time" in ds_agged.data_vars assert "measurement" in ds_agged.data_vars > assert ds_agged.time.dtype == np.dtype("datetime64[ns]") E AssertionError: assert dtype(' Size: 40B\narray(['2024-01-01T15:00:03.333333', '2024-01-01T15:00:16.666666',..., dtype='datetime64[us]')\nCoordinates:\n * trial_bins (trial_bins) interval[float64, right] 80B (-0.009, 1.8] ... (....dtype E + where Size: 40B\narray(['2024-01-01T15:00:03.333333', '2024-01-01T15:00:16.666666',..., dtype='datetime64[us]')\nCoordinates:\n * trial_bins (trial_bins) interval[float64, right] 80B (-0.009, 1.8] ... (... = Size: 160B\nDimensions: (trial_bins: 5)\nCoordinates:\n * trial_bins (trial_bins) interval[float...s) float64 40B 5.0 25.0 45.0 65.0 85.0\n time (trial_bins) datetime64[us] 40B 2024-01-01T15:00:03.333333 .....time E + and dtype('('datetime64[ns]') E + where = np.dtype /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_groupby.py:3847: AssertionError _______________________ test_datetime[x_new2-expected2] ________________________ [gw3] linux -- Python 3.14.2 /usr/bin/python3 cls = func = . at 0xffff4f9a2400> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :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 instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ /usr/lib/python3.14/site-packages/_pytest/runner.py:344: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) /usr/lib/python3.14/site-packages/_pytest/runner.py:246: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'item': } firstresult = False def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff979fc980> hook_name = 'pytest_runtest_call' methods = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] kwargs = {'item': } firstresult = False def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.logging.LoggingPlugin object at 0xffff974a7230> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: nodes.Item) -> Generator[None]: self.log_cli_handler.set_when("call") with self._runtest_for(item, "call"): > yield /usr/lib/python3.14/site-packages/_pytest/logging.py:850: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = > _state='suspended' _in_suspended=False> _capture_fixture=None> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: Item) -> Generator[None]: with self.item_capture("call", item): > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/capture.py:900: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = @hookimpl(wrapper=True) def pytest_runtest_call(item: Item) -> Generator[None]: xfailed = item.stash.get(xfailed_key, None) if xfailed is None: item.stash[xfailed_key] = xfailed = evaluate_xfail_marks(item) if xfailed and not item.config.option.runxfail and not xfailed.run: xfail("[NOTRUN] " + xfailed.reason) try: > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/skipping.py:263: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = def pytest_runtest_call(item: Item) -> None: _update_current_test_var(item, "call") try: del sys.last_type del sys.last_value del sys.last_traceback if sys.version_info >= (3, 12, 0): del sys.last_exc # type:ignore[attr-defined] except AttributeError: pass try: > item.runtest() /usr/lib/python3.14/site-packages/_pytest/runner.py:178: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def runtest(self) -> None: """Execute the underlying test function.""" > self.ihook.pytest_pyfunc_call(pyfuncitem=self) /usr/lib/python3.14/site-packages/_pytest/python.py:1671: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'pyfuncitem': } firstresult = True def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff979fc980> hook_name = 'pytest_pyfunc_call' methods = [>] kwargs = {'pyfuncitem': } firstresult = True def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyfuncitem = @hookimpl(trylast=True) def pytest_pyfunc_call(pyfuncitem: Function) -> object | None: testfunction = pyfuncitem.obj if is_async_function(testfunction): async_fail(pyfuncitem.nodeid) funcargs = pyfuncitem.funcargs testargs = {arg: funcargs[arg] for arg in pyfuncitem._fixtureinfo.argnames} > result = testfunction(**testargs) ^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/python.py:157: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ x_new = ['2000-01-01T12:00', '2000-01-02T12:00'], expected = [0.5, 1.5] @requires_scipy @pytest.mark.parametrize( "x_new, expected", [ (pd.date_range("2000-01-02", periods=3), [1, 2, 3]), ( np.array( [np.datetime64("2000-01-01T12:00"), np.datetime64("2000-01-02T12:00")] ), [0.5, 1.5], ), (["2000-01-01T12:00", "2000-01-02T12:00"], [0.5, 1.5]), (["2000-01-01T12:00", "2000-01-02T12:00", "NaT"], [0.5, 1.5, np.nan]), (["2000-01-01T12:00"], 0.5), pytest.param("2000-01-01T12:00", 0.5, marks=pytest.mark.xfail), ], ) def test_datetime(x_new, expected) -> None: da = xr.DataArray( np.arange(24), dims="time", coords={"time": pd.date_range("2000-01-01", periods=24)}, ) actual = da.interp(time=x_new) expected_da = xr.DataArray( np.atleast_1d(expected), dims=["time"], coords={"time": (np.atleast_1d(x_new).astype("datetime64[ns]"))}, ) > assert_allclose(actual, expected_da) /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_interp.py:734: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ a = Size: 16B array([nan, nan]) Coordinates: * time (time) datetime64[ns] 16B 2000-01-01T12:00:00 2000-01-02T12:00:00 b = Size: 16B array([0.5, 1.5]) Coordinates: * time (time) datetime64[ns] 16B 2000-01-01T12:00:00 2000-01-02T12:00:00 check_default_indexes = True, kwargs = {}, __tracebackhide__ = True def assert_allclose(a, b, check_default_indexes=True, **kwargs): __tracebackhide__ = True > xarray.testing.assert_allclose(a, b, **kwargs) /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__init__.py:344: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = ( Size: 16B array([nan, nan]) Coordinates: * time (time) datetime64[ns] 16B 2000-01-...ize: 16B array([0.5, 1.5]) Coordinates: * time (time) datetime64[ns] 16B 2000-01-01T12:00:00 2000-01-02T12:00:00) kwargs = {}, __tracebackhide__ = True @functools.wraps(func) def wrapper(*args, **kwargs): __tracebackhide__ = True with warnings.catch_warnings(): # only remove filters that would "error" warnings.filters = [f for f in warnings.filters if f[0] != "error"] > return func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/testing/assertions.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ a = Size: 16B array([nan, nan]) Coordinates: * time (time) datetime64[ns] 16B 2000-01-01T12:00:00 2000-01-02T12:00:00 b = Size: 16B array([0.5, 1.5]) Coordinates: * time (time) datetime64[ns] 16B 2000-01-01T12:00:00 2000-01-02T12:00:00 rtol = 1e-05, atol = 1e-08, decode_bytes = True, check_dim_order = True @ensure_warnings def assert_allclose( a, b, rtol=1e-05, atol=1e-08, decode_bytes=True, check_dim_order: bool = True ): """Like :py:func:`numpy.testing.assert_allclose`, but for xarray objects. Raises an AssertionError if two objects are not equal up to desired tolerance. Parameters ---------- a : xarray.Dataset, xarray.DataArray or xarray.Variable The first object to compare. b : xarray.Dataset, xarray.DataArray or xarray.Variable The second object to compare. rtol : float, optional Relative tolerance. atol : float, optional Absolute tolerance. decode_bytes : bool, optional Whether byte dtypes should be decoded to strings as UTF-8 or not. This is useful for testing serialization methods on Python 3 that return saved strings as bytes. check_dim_order : bool, optional, default is True Whether dimensions must be in the same order. See Also -------- assert_identical, assert_equal, numpy.testing.assert_allclose """ __tracebackhide__ = True assert type(a) is type(b) b = maybe_transpose_dims(a, b, check_dim_order) equiv = functools.partial( _data_allclose_or_equiv, rtol=rtol, atol=atol, decode_bytes=decode_bytes ) equiv.__name__ = "allclose" # type: ignore[attr-defined] def compat_variable(a, b): a = getattr(a, "variable", a) b = getattr(b, "variable", b) return a.dims == b.dims and (a._data is b._data or equiv(a.data, b.data)) def compat_node(a, b): return a.ds._coord_names == b.ds._coord_names and utils.dict_equiv( a.variables, b.variables, compat=compat_variable ) if isinstance(a, Variable): allclose = compat_variable(a, b) assert allclose, formatting.diff_array_repr(a, b, compat=equiv) elif isinstance(a, DataArray): allclose = utils.dict_equiv( a.coords, b.coords, compat=compat_variable ) and compat_variable(a.variable, b.variable) > assert allclose, formatting.diff_array_repr(a, b, compat=equiv) ^^^^^^^^ E AssertionError: Left and right DataArray objects are not close E Differing values: E L E array([nan, nan]) E R E array([0.5, 1.5]) /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/testing/assertions.py:255: AssertionError _______________________ test_datetime[x_new3-expected3] ________________________ [gw3] linux -- Python 3.14.2 /usr/bin/python3 cls = func = . at 0xffff4f9a2610> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :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 instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ /usr/lib/python3.14/site-packages/_pytest/runner.py:344: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) /usr/lib/python3.14/site-packages/_pytest/runner.py:246: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'item': } firstresult = False def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff979fc980> hook_name = 'pytest_runtest_call' methods = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] kwargs = {'item': } firstresult = False def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.logging.LoggingPlugin object at 0xffff974a7230> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: nodes.Item) -> Generator[None]: self.log_cli_handler.set_when("call") with self._runtest_for(item, "call"): > yield /usr/lib/python3.14/site-packages/_pytest/logging.py:850: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = > _state='suspended' _in_suspended=False> _capture_fixture=None> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: Item) -> Generator[None]: with self.item_capture("call", item): > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/capture.py:900: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = @hookimpl(wrapper=True) def pytest_runtest_call(item: Item) -> Generator[None]: xfailed = item.stash.get(xfailed_key, None) if xfailed is None: item.stash[xfailed_key] = xfailed = evaluate_xfail_marks(item) if xfailed and not item.config.option.runxfail and not xfailed.run: xfail("[NOTRUN] " + xfailed.reason) try: > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/skipping.py:263: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = def pytest_runtest_call(item: Item) -> None: _update_current_test_var(item, "call") try: del sys.last_type del sys.last_value del sys.last_traceback if sys.version_info >= (3, 12, 0): del sys.last_exc # type:ignore[attr-defined] except AttributeError: pass try: > item.runtest() /usr/lib/python3.14/site-packages/_pytest/runner.py:178: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def runtest(self) -> None: """Execute the underlying test function.""" > self.ihook.pytest_pyfunc_call(pyfuncitem=self) /usr/lib/python3.14/site-packages/_pytest/python.py:1671: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'pyfuncitem': } firstresult = True def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff979fc980> hook_name = 'pytest_pyfunc_call' methods = [>] kwargs = {'pyfuncitem': } firstresult = True def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyfuncitem = @hookimpl(trylast=True) def pytest_pyfunc_call(pyfuncitem: Function) -> object | None: testfunction = pyfuncitem.obj if is_async_function(testfunction): async_fail(pyfuncitem.nodeid) funcargs = pyfuncitem.funcargs testargs = {arg: funcargs[arg] for arg in pyfuncitem._fixtureinfo.argnames} > result = testfunction(**testargs) ^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/python.py:157: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ x_new = ['2000-01-01T12:00', '2000-01-02T12:00', 'NaT'] expected = [0.5, 1.5, nan] @requires_scipy @pytest.mark.parametrize( "x_new, expected", [ (pd.date_range("2000-01-02", periods=3), [1, 2, 3]), ( np.array( [np.datetime64("2000-01-01T12:00"), np.datetime64("2000-01-02T12:00")] ), [0.5, 1.5], ), (["2000-01-01T12:00", "2000-01-02T12:00"], [0.5, 1.5]), (["2000-01-01T12:00", "2000-01-02T12:00", "NaT"], [0.5, 1.5, np.nan]), (["2000-01-01T12:00"], 0.5), pytest.param("2000-01-01T12:00", 0.5, marks=pytest.mark.xfail), ], ) def test_datetime(x_new, expected) -> None: da = xr.DataArray( np.arange(24), dims="time", coords={"time": pd.date_range("2000-01-01", periods=24)}, ) actual = da.interp(time=x_new) expected_da = xr.DataArray( np.atleast_1d(expected), dims=["time"], coords={"time": (np.atleast_1d(x_new).astype("datetime64[ns]"))}, ) > assert_allclose(actual, expected_da) /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_interp.py:734: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ a = Size: 24B array([nan, nan, nan]) Coordinates: * time (time) datetime64[ns] 24B 2000-01-01T12:00:00 ... NaT b = Size: 24B array([0.5, 1.5, nan]) Coordinates: * time (time) datetime64[ns] 24B 2000-01-01T12:00:00 ... NaT check_default_indexes = True, kwargs = {}, __tracebackhide__ = True def assert_allclose(a, b, check_default_indexes=True, **kwargs): __tracebackhide__ = True > xarray.testing.assert_allclose(a, b, **kwargs) /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__init__.py:344: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = ( Size: 24B array([nan, nan, nan]) Coordinates: * time (time) datetime64[ns] 24B 200...: 3)> Size: 24B array([0.5, 1.5, nan]) Coordinates: * time (time) datetime64[ns] 24B 2000-01-01T12:00:00 ... NaT) kwargs = {}, __tracebackhide__ = True @functools.wraps(func) def wrapper(*args, **kwargs): __tracebackhide__ = True with warnings.catch_warnings(): # only remove filters that would "error" warnings.filters = [f for f in warnings.filters if f[0] != "error"] > return func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/testing/assertions.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ a = Size: 24B array([nan, nan, nan]) Coordinates: * time (time) datetime64[ns] 24B 2000-01-01T12:00:00 ... NaT b = Size: 24B array([0.5, 1.5, nan]) Coordinates: * time (time) datetime64[ns] 24B 2000-01-01T12:00:00 ... NaT rtol = 1e-05, atol = 1e-08, decode_bytes = True, check_dim_order = True @ensure_warnings def assert_allclose( a, b, rtol=1e-05, atol=1e-08, decode_bytes=True, check_dim_order: bool = True ): """Like :py:func:`numpy.testing.assert_allclose`, but for xarray objects. Raises an AssertionError if two objects are not equal up to desired tolerance. Parameters ---------- a : xarray.Dataset, xarray.DataArray or xarray.Variable The first object to compare. b : xarray.Dataset, xarray.DataArray or xarray.Variable The second object to compare. rtol : float, optional Relative tolerance. atol : float, optional Absolute tolerance. decode_bytes : bool, optional Whether byte dtypes should be decoded to strings as UTF-8 or not. This is useful for testing serialization methods on Python 3 that return saved strings as bytes. check_dim_order : bool, optional, default is True Whether dimensions must be in the same order. See Also -------- assert_identical, assert_equal, numpy.testing.assert_allclose """ __tracebackhide__ = True assert type(a) is type(b) b = maybe_transpose_dims(a, b, check_dim_order) equiv = functools.partial( _data_allclose_or_equiv, rtol=rtol, atol=atol, decode_bytes=decode_bytes ) equiv.__name__ = "allclose" # type: ignore[attr-defined] def compat_variable(a, b): a = getattr(a, "variable", a) b = getattr(b, "variable", b) return a.dims == b.dims and (a._data is b._data or equiv(a.data, b.data)) def compat_node(a, b): return a.ds._coord_names == b.ds._coord_names and utils.dict_equiv( a.variables, b.variables, compat=compat_variable ) if isinstance(a, Variable): allclose = compat_variable(a, b) assert allclose, formatting.diff_array_repr(a, b, compat=equiv) elif isinstance(a, DataArray): allclose = utils.dict_equiv( a.coords, b.coords, compat=compat_variable ) and compat_variable(a.variable, b.variable) > assert allclose, formatting.diff_array_repr(a, b, compat=equiv) ^^^^^^^^ E AssertionError: Left and right DataArray objects are not close E Differing values: E L E array([nan, nan, nan]) E R E array([0.5, 1.5, nan]) /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/testing/assertions.py:255: AssertionError __________________________ test_datetime[x_new4-0.5] ___________________________ [gw3] linux -- Python 3.14.2 /usr/bin/python3 cls = func = . at 0xffff4f9a28d0> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :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 instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ /usr/lib/python3.14/site-packages/_pytest/runner.py:344: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) /usr/lib/python3.14/site-packages/_pytest/runner.py:246: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'item': }, firstresult = False def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff979fc980> hook_name = 'pytest_runtest_call' methods = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] kwargs = {'item': }, firstresult = False def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.logging.LoggingPlugin object at 0xffff974a7230> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: nodes.Item) -> Generator[None]: self.log_cli_handler.set_when("call") with self._runtest_for(item, "call"): > yield /usr/lib/python3.14/site-packages/_pytest/logging.py:850: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = > _state='suspended' _in_suspended=False> _capture_fixture=None> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: Item) -> Generator[None]: with self.item_capture("call", item): > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/capture.py:900: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call', args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call', args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = @hookimpl(wrapper=True) def pytest_runtest_call(item: Item) -> Generator[None]: xfailed = item.stash.get(xfailed_key, None) if xfailed is None: item.stash[xfailed_key] = xfailed = evaluate_xfail_marks(item) if xfailed and not item.config.option.runxfail and not xfailed.run: xfail("[NOTRUN] " + xfailed.reason) try: > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/skipping.py:263: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = def pytest_runtest_call(item: Item) -> None: _update_current_test_var(item, "call") try: del sys.last_type del sys.last_value del sys.last_traceback if sys.version_info >= (3, 12, 0): del sys.last_exc # type:ignore[attr-defined] except AttributeError: pass try: > item.runtest() /usr/lib/python3.14/site-packages/_pytest/runner.py:178: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def runtest(self) -> None: """Execute the underlying test function.""" > self.ihook.pytest_pyfunc_call(pyfuncitem=self) /usr/lib/python3.14/site-packages/_pytest/python.py:1671: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'pyfuncitem': } firstresult = True def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff979fc980> hook_name = 'pytest_pyfunc_call' methods = [>] kwargs = {'pyfuncitem': } firstresult = True def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call', args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call', args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyfuncitem = @hookimpl(trylast=True) def pytest_pyfunc_call(pyfuncitem: Function) -> object | None: testfunction = pyfuncitem.obj if is_async_function(testfunction): async_fail(pyfuncitem.nodeid) funcargs = pyfuncitem.funcargs testargs = {arg: funcargs[arg] for arg in pyfuncitem._fixtureinfo.argnames} > result = testfunction(**testargs) ^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/python.py:157: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ x_new = ['2000-01-01T12:00'], expected = 0.5 @requires_scipy @pytest.mark.parametrize( "x_new, expected", [ (pd.date_range("2000-01-02", periods=3), [1, 2, 3]), ( np.array( [np.datetime64("2000-01-01T12:00"), np.datetime64("2000-01-02T12:00")] ), [0.5, 1.5], ), (["2000-01-01T12:00", "2000-01-02T12:00"], [0.5, 1.5]), (["2000-01-01T12:00", "2000-01-02T12:00", "NaT"], [0.5, 1.5, np.nan]), (["2000-01-01T12:00"], 0.5), pytest.param("2000-01-01T12:00", 0.5, marks=pytest.mark.xfail), ], ) def test_datetime(x_new, expected) -> None: da = xr.DataArray( np.arange(24), dims="time", coords={"time": pd.date_range("2000-01-01", periods=24)}, ) actual = da.interp(time=x_new) expected_da = xr.DataArray( np.atleast_1d(expected), dims=["time"], coords={"time": (np.atleast_1d(x_new).astype("datetime64[ns]"))}, ) > assert_allclose(actual, expected_da) /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_interp.py:734: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ a = Size: 8B array([nan]) Coordinates: * time (time) datetime64[ns] 8B 2000-01-01T12:00:00 b = Size: 8B array([0.5]) Coordinates: * time (time) datetime64[ns] 8B 2000-01-01T12:00:00 check_default_indexes = True, kwargs = {}, __tracebackhide__ = True def assert_allclose(a, b, check_default_indexes=True, **kwargs): __tracebackhide__ = True > xarray.testing.assert_allclose(a, b, **kwargs) /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__init__.py:344: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = ( Size: 8B array([nan]) Coordinates: * time (time) datetime64[ns] 8B 2000-01-01T12:0...rray.DataArray (time: 1)> Size: 8B array([0.5]) Coordinates: * time (time) datetime64[ns] 8B 2000-01-01T12:00:00) kwargs = {}, __tracebackhide__ = True @functools.wraps(func) def wrapper(*args, **kwargs): __tracebackhide__ = True with warnings.catch_warnings(): # only remove filters that would "error" warnings.filters = [f for f in warnings.filters if f[0] != "error"] > return func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/testing/assertions.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ a = Size: 8B array([nan]) Coordinates: * time (time) datetime64[ns] 8B 2000-01-01T12:00:00 b = Size: 8B array([0.5]) Coordinates: * time (time) datetime64[ns] 8B 2000-01-01T12:00:00 rtol = 1e-05, atol = 1e-08, decode_bytes = True, check_dim_order = True @ensure_warnings def assert_allclose( a, b, rtol=1e-05, atol=1e-08, decode_bytes=True, check_dim_order: bool = True ): """Like :py:func:`numpy.testing.assert_allclose`, but for xarray objects. Raises an AssertionError if two objects are not equal up to desired tolerance. Parameters ---------- a : xarray.Dataset, xarray.DataArray or xarray.Variable The first object to compare. b : xarray.Dataset, xarray.DataArray or xarray.Variable The second object to compare. rtol : float, optional Relative tolerance. atol : float, optional Absolute tolerance. decode_bytes : bool, optional Whether byte dtypes should be decoded to strings as UTF-8 or not. This is useful for testing serialization methods on Python 3 that return saved strings as bytes. check_dim_order : bool, optional, default is True Whether dimensions must be in the same order. See Also -------- assert_identical, assert_equal, numpy.testing.assert_allclose """ __tracebackhide__ = True assert type(a) is type(b) b = maybe_transpose_dims(a, b, check_dim_order) equiv = functools.partial( _data_allclose_or_equiv, rtol=rtol, atol=atol, decode_bytes=decode_bytes ) equiv.__name__ = "allclose" # type: ignore[attr-defined] def compat_variable(a, b): a = getattr(a, "variable", a) b = getattr(b, "variable", b) return a.dims == b.dims and (a._data is b._data or equiv(a.data, b.data)) def compat_node(a, b): return a.ds._coord_names == b.ds._coord_names and utils.dict_equiv( a.variables, b.variables, compat=compat_variable ) if isinstance(a, Variable): allclose = compat_variable(a, b) assert allclose, formatting.diff_array_repr(a, b, compat=equiv) elif isinstance(a, DataArray): allclose = utils.dict_equiv( a.coords, b.coords, compat=compat_variable ) and compat_variable(a.variable, b.variable) > assert allclose, formatting.diff_array_repr(a, b, compat=equiv) ^^^^^^^^ E AssertionError: Left and right DataArray objects are not close E Differing values: E L E array([nan]) E R E array([0.5]) /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/testing/assertions.py:255: AssertionError _________________________ test_datetime_single_string __________________________ [gw3] linux -- Python 3.14.2 /usr/bin/python3 cls = func = . at 0xffff4fa33cc0> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :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 instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ /usr/lib/python3.14/site-packages/_pytest/runner.py:344: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) /usr/lib/python3.14/site-packages/_pytest/runner.py:246: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'item': }, firstresult = False def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff979fc980> hook_name = 'pytest_runtest_call' methods = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] kwargs = {'item': }, firstresult = False def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.logging.LoggingPlugin object at 0xffff974a7230> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: nodes.Item) -> Generator[None]: self.log_cli_handler.set_when("call") with self._runtest_for(item, "call"): > yield /usr/lib/python3.14/site-packages/_pytest/logging.py:850: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = > _state='suspended' _in_suspended=False> _capture_fixture=None> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: Item) -> Generator[None]: with self.item_capture("call", item): > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/capture.py:900: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = @hookimpl(wrapper=True) def pytest_runtest_call(item: Item) -> Generator[None]: xfailed = item.stash.get(xfailed_key, None) if xfailed is None: item.stash[xfailed_key] = xfailed = evaluate_xfail_marks(item) if xfailed and not item.config.option.runxfail and not xfailed.run: xfail("[NOTRUN] " + xfailed.reason) try: > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/skipping.py:263: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': } firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = def pytest_runtest_call(item: Item) -> None: _update_current_test_var(item, "call") try: del sys.last_type del sys.last_value del sys.last_traceback if sys.version_info >= (3, 12, 0): del sys.last_exc # type:ignore[attr-defined] except AttributeError: pass try: > item.runtest() /usr/lib/python3.14/site-packages/_pytest/runner.py:178: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def runtest(self) -> None: """Execute the underlying test function.""" > self.ihook.pytest_pyfunc_call(pyfuncitem=self) /usr/lib/python3.14/site-packages/_pytest/python.py:1671: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'pyfuncitem': } firstresult = True def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffff979fc980> hook_name = 'pytest_pyfunc_call' methods = [>] kwargs = {'pyfuncitem': } firstresult = True def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call' args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': } firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyfuncitem = @hookimpl(trylast=True) def pytest_pyfunc_call(pyfuncitem: Function) -> object | None: testfunction = pyfuncitem.obj if is_async_function(testfunction): async_fail(pyfuncitem.nodeid) funcargs = pyfuncitem.funcargs testargs = {arg: funcargs[arg] for arg in pyfuncitem._fixtureinfo.argnames} > result = testfunction(**testargs) ^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/python.py:157: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ @requires_scipy def test_datetime_single_string() -> None: da = xr.DataArray( np.arange(24), dims="time", coords={"time": pd.date_range("2000-01-01", periods=24)}, ) actual = da.interp(time="2000-01-01T12:00") expected = xr.DataArray(0.5) > assert_allclose(actual.drop_vars("time"), expected) /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_interp.py:747: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ a = Size: 8B array(nan) b = Size: 8B array(0.5), check_default_indexes = True kwargs = {}, __tracebackhide__ = True def assert_allclose(a, b, check_default_indexes=True, **kwargs): __tracebackhide__ = True > xarray.testing.assert_allclose(a, b, **kwargs) /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__init__.py:344: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = ( Size: 8B array(nan), Size: 8B array(0.5)) kwargs = {}, __tracebackhide__ = True @functools.wraps(func) def wrapper(*args, **kwargs): __tracebackhide__ = True with warnings.catch_warnings(): # only remove filters that would "error" warnings.filters = [f for f in warnings.filters if f[0] != "error"] > return func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/testing/assertions.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ a = Size: 8B array(nan) b = Size: 8B array(0.5), rtol = 1e-05, atol = 1e-08 decode_bytes = True, check_dim_order = True @ensure_warnings def assert_allclose( a, b, rtol=1e-05, atol=1e-08, decode_bytes=True, check_dim_order: bool = True ): """Like :py:func:`numpy.testing.assert_allclose`, but for xarray objects. Raises an AssertionError if two objects are not equal up to desired tolerance. Parameters ---------- a : xarray.Dataset, xarray.DataArray or xarray.Variable The first object to compare. b : xarray.Dataset, xarray.DataArray or xarray.Variable The second object to compare. rtol : float, optional Relative tolerance. atol : float, optional Absolute tolerance. decode_bytes : bool, optional Whether byte dtypes should be decoded to strings as UTF-8 or not. This is useful for testing serialization methods on Python 3 that return saved strings as bytes. check_dim_order : bool, optional, default is True Whether dimensions must be in the same order. See Also -------- assert_identical, assert_equal, numpy.testing.assert_allclose """ __tracebackhide__ = True assert type(a) is type(b) b = maybe_transpose_dims(a, b, check_dim_order) equiv = functools.partial( _data_allclose_or_equiv, rtol=rtol, atol=atol, decode_bytes=decode_bytes ) equiv.__name__ = "allclose" # type: ignore[attr-defined] def compat_variable(a, b): a = getattr(a, "variable", a) b = getattr(b, "variable", b) return a.dims == b.dims and (a._data is b._data or equiv(a.data, b.data)) def compat_node(a, b): return a.ds._coord_names == b.ds._coord_names and utils.dict_equiv( a.variables, b.variables, compat=compat_variable ) if isinstance(a, Variable): allclose = compat_variable(a, b) assert allclose, formatting.diff_array_repr(a, b, compat=equiv) elif isinstance(a, DataArray): allclose = utils.dict_equiv( a.coords, b.coords, compat=compat_variable ) and compat_variable(a.variable, b.variable) > assert allclose, formatting.diff_array_repr(a, b, compat=equiv) ^^^^^^^^ E AssertionError: Left and right DataArray objects are not close E Differing values: E L E array(nan) E R E array(0.5) /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/testing/assertions.py:255: AssertionError __________________ TestDatasetScatterPlots.test_datetime_hue ___________________ [gw2] linux -- Python 3.14.2 /usr/bin/python3 ex = datetime.timedelta(days=-2) def _sanitize_extrema(ex): if ex is None: return ex try: > ret = ex.item() ^^^^^^^ E AttributeError: 'datetime.timedelta' object has no attribute 'item' /usr/lib64/python3.14/site-packages/matplotlib/colors.py:211: AttributeError During handling of the above exception, another exception occurred: cls = func = . at 0xffff77f16350> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :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 instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ /usr/lib/python3.14/site-packages/_pytest/runner.py:344: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) /usr/lib/python3.14/site-packages/_pytest/runner.py:246: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'item': }, firstresult = False def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffffb837c980> hook_name = 'pytest_runtest_call' methods = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] kwargs = {'item': }, firstresult = False def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': }, firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': }, firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.logging.LoggingPlugin object at 0xffffb3e17230> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: nodes.Item) -> Generator[None]: self.log_cli_handler.set_when("call") with self._runtest_for(item, "call"): > yield /usr/lib/python3.14/site-packages/_pytest/logging.py:850: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': }, firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = > _state='suspended' _in_suspended=False> _capture_fixture=None> item = @hookimpl(wrapper=True) def pytest_runtest_call(self, item: Item) -> Generator[None]: with self.item_capture("call", item): > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/capture.py:900: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': }, firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call', args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_runtest_call', args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': }, firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = @hookimpl(wrapper=True) def pytest_runtest_call(item: Item) -> Generator[None]: xfailed = item.stash.get(xfailed_key, None) if xfailed is None: item.stash[xfailed_key] = xfailed = evaluate_xfail_marks(item) if xfailed and not item.config.option.runxfail and not xfailed.run: xfail("[NOTRUN] " + xfailed.reason) try: > return (yield) ^^^^^ /usr/lib/python3.14/site-packages/_pytest/skipping.py:263: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_runtest_call' hook_impls = [> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...] caller_kwargs = {'item': }, firstresult = False def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ item = def pytest_runtest_call(item: Item) -> None: _update_current_test_var(item, "call") try: del sys.last_type del sys.last_value del sys.last_traceback if sys.version_info >= (3, 12, 0): del sys.last_exc # type:ignore[attr-defined] except AttributeError: pass try: > item.runtest() /usr/lib/python3.14/site-packages/_pytest/runner.py:178: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def runtest(self) -> None: """Execute the underlying test function.""" > self.ihook.pytest_pyfunc_call(pyfuncitem=self) /usr/lib/python3.14/site-packages/_pytest/python.py:1671: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = kwargs = {'pyfuncitem': }, firstresult = True def __call__(self, **kwargs: object) -> Any: """Call the hook. Only accepts keyword arguments, which should match the hook specification. Returns the result(s) of calling all registered plugins, see :ref:`calling`. """ assert not self.is_historic(), ( "Cannot directly call a historic hook - use call_historic instead." ) self._verify_all_args_are_provided(kwargs) firstresult = self.spec.opts.get("firstresult", False) if self.spec else False # Copy because plugins may register other plugins during iteration (#438). > return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_pytest.config.PytestPluginManager object at 0xffffb837c980> hook_name = 'pytest_pyfunc_call' methods = [>] kwargs = {'pyfuncitem': }, firstresult = True def _hookexec( self, hook_name: str, methods: Sequence[HookImpl], kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: # called from all hookcaller instances. # enable_tracing will set its own wrapping function at self._inner_hookexec > return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': }, firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: teardown.throw(exception) except RuntimeError as re: # StopIteration from generator causes RuntimeError # even for coroutine usage - see #544 if ( isinstance(exception, StopIteration) and re.__cause__ is exception ): teardown.close() continue else: raise else: teardown.send(result) # Following is unreachable for a well behaved hook wrapper. # Try to force finalizers otherwise postponed till GC action. # Note: close() may raise if generator handles GeneratorExit. teardown.close() except StopIteration as si: result = si.value exception = None continue except BaseException as e: exception = e continue _raise_wrapfail(teardown, "has second yield") if exception is not None: > raise exception /usr/lib/python3.14/site-packages/pluggy/_callers.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': }, firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: res = hook_impl.function(*args) if res is not None: results.append(res) if firstresult: # halt further impl calls break except BaseException as exc: exception = exc finally: if firstresult: # first result hooks return a single value result = results[0] if results else None else: result = results # run all wrapper post-yield blocks for teardown in reversed(teardowns): try: if exception is not None: try: > teardown.throw(exception) /usr/lib/python3.14/site-packages/pluggy/_callers.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call', args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: res = yield result = Result(res, None) except BaseException as exc: result = Result(None, exc) try: teardown.send(result) except StopIteration: pass except BaseException as e: _warn_teardown_exception(hook_name, hook_impl, e) raise else: _raise_wrapfail(teardown, "has second yield") finally: teardown.close() > return result.get_result() ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_result(self) -> ResultType: """Get the result(s) for this hook call. If the hook was marked as a ``firstresult`` only a single value will be returned, otherwise a list of results. """ __tracebackhide__ = True exc = self._exception tb = self._traceback if exc is None: return cast(ResultType, self._result) else: > raise exc.with_traceback(tb) /usr/lib/python3.14/site-packages/pluggy/_result.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_impl = > hook_name = 'pytest_pyfunc_call', args = [] def run_old_style_hookwrapper( hook_impl: HookImpl, hook_name: str, args: Sequence[object] ) -> Teardown: """ backward compatibility wrapper to run a old style hookwrapper as a wrapper """ teardown: Teardown = cast(Teardown, hook_impl.function(*args)) try: next(teardown) except StopIteration: _raise_wrapfail(teardown, "did not yield") try: > res = yield ^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ hook_name = 'pytest_pyfunc_call' hook_impls = [>] caller_kwargs = {'pyfuncitem': }, firstresult = True def _multicall( hook_name: str, hook_impls: Sequence[HookImpl], caller_kwargs: Mapping[str, object], firstresult: bool, ) -> object | list[object]: """Execute a call into multiple python functions/methods and return the result(s). ``caller_kwargs`` comes from HookCaller.__call__(). """ __tracebackhide__ = True results: list[object] = [] exception = None try: # run impl and wrapper setup functions in a loop teardowns: list[Teardown] = [] try: for hook_impl in reversed(hook_impls): try: args = [caller_kwargs[argname] for argname in hook_impl.argnames] except KeyError as e: # coverage bug - this is tested for argname in hook_impl.argnames: # pragma: no cover if argname not in caller_kwargs: raise HookCallError( f"hook call must provide argument {argname!r}" ) from e if hook_impl.hookwrapper: function_gen = run_old_style_hookwrapper(hook_impl, hook_name, args) next(function_gen) # first yield teardowns.append(function_gen) elif hook_impl.wrapper: try: # If this cast is not valid, a type error is raised below, # which is the desired response. res = hook_impl.function(*args) function_gen = cast(Generator[None, object, object], res) next(function_gen) # first yield teardowns.append(function_gen) except StopIteration: _raise_wrapfail(function_gen, "did not yield") else: > res = hook_impl.function(*args) ^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/pluggy/_callers.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyfuncitem = @hookimpl(trylast=True) def pytest_pyfunc_call(pyfuncitem: Function) -> object | None: testfunction = pyfuncitem.obj if is_async_function(testfunction): async_fail(pyfuncitem.nodeid) funcargs = pyfuncitem.funcargs testargs = {arg: funcargs[arg] for arg in pyfuncitem._fixtureinfo.argnames} > result = testfunction(**testargs) ^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/_pytest/python.py:157: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def test_datetime_hue(self) -> None: ds2 = self.ds.copy() # TODO: Currently plots as categorical, should it behave as numerical? ds2["hue"] = pd.date_range("2000-1-1", periods=4) ds2.plot.scatter(x="A", y="B", hue="hue") ds2["hue"] = pd.timedelta_range("-1D", periods=4, freq="D") > ds2.plot.scatter(x="A", y="B", hue="hue") /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2901: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = (), kwargs = {'hue': 'hue', 'x': 'A', 'y': 'B'} @functools.wraps(dataset_plot.scatter, assigned=("__doc__",)) def scatter(self, *args, **kwargs) -> PathCollection | FacetGrid[Dataset]: > return dataset_plot.scatter(self._ds, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/plot/accessor.py:1048: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ds = Size: 2kB Dimensions: (x: 3, row: 3, col: 4, hue: 4) Coordinates: * x (x) int64 24B 0 1 2 ...at64 1kB 1.764 0.4002 0.9787 ... 0.1667 0.635 B (x, row, col, hue) float64 1kB 2.383 0.9445 ... -1.045 1.211 x = 'A', y = 'B', z = None, hue = 'hue', hue_style = None, markersize = None linewidth = None, figsize = None, size = None, aspect = None, ax = None row = None @_update_doc_to_dataset(dataarray_plot.scatter) def scatter( ds: Dataset, *args: Any, x: Hashable | None = None, y: Hashable | None = None, z: Hashable | None = None, hue: Hashable | None = None, hue_style: HueStyleOptions = None, markersize: Hashable | None = None, linewidth: Hashable | None = None, figsize: Iterable[float] | None = None, size: float | None = None, aspect: float | None = None, ax: Axes | None = None, row: Hashable | None = None, col: Hashable | None = None, col_wrap: int | None = None, xincrease: bool | None = True, yincrease: bool | None = True, add_legend: bool | None = None, add_colorbar: bool | None = None, add_labels: bool | Iterable[bool] = True, add_title: bool = True, subplot_kws: dict[str, Any] | None = None, xscale: ScaleOptions = None, yscale: ScaleOptions = None, xticks: ArrayLike | None = None, yticks: ArrayLike | None = None, xlim: ArrayLike | None = None, ylim: ArrayLike | None = None, cmap: str | Colormap | None = None, vmin: float | None = None, vmax: float | None = None, norm: Normalize | None = None, extend: ExtendOptions = None, levels: ArrayLike | None = None, **kwargs: Any, ) -> PathCollection | FacetGrid[DataArray]: """Scatter plot Dataset data variables against each other.""" locals_ = locals() del locals_["ds"] locals_.update(locals_.pop("kwargs", {})) da = _temp_dataarray(ds, y, locals_) > return da.plot.scatter(*locals_.pop("args", ()), **locals_) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/plot/dataset_plot.py:920: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = () kwargs = {'add_colorbar': None, 'add_labels': True, 'add_legend': None, 'add_title': True, ...} @functools.wraps(dataarray_plot.scatter, assigned=("__doc__",)) def scatter(self, *args, **kwargs) -> PathCollection | FacetGrid[DataArray]: > return dataarray_plot.scatter(self._da, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/plot/accessor.py:300: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ darray = Size: 1kB array([[[[ 2.38314477, 0.94447949, -0.91282223, 1.11... days A (x, row, col, hue) float64 1kB 1.764 0.4002 0.9787 ... 0.1667 0.635 Attributes: units: Bunits x = 'A', y = 'B', z = None, hue = 'hue', hue_style = None, markersize = None linewidth = None, row = None, col = None, col_wrap = None ax = , figsize = None @functools.wraps( plotfunc, assigned=("__module__", "__name__", "__qualname__", "__doc__") ) def newplotfunc( darray: DataArray, *args: Any, x: Hashable | None = None, y: Hashable | None = None, z: Hashable | None = None, hue: Hashable | None = None, hue_style: HueStyleOptions = None, markersize: Hashable | None = None, linewidth: Hashable | None = None, row: Hashable | None = None, col: Hashable | None = None, col_wrap: int | None = None, ax: Axes | None = None, figsize: Iterable[float] | None = None, size: float | None = None, aspect: float | None = None, xincrease: bool | None = True, yincrease: bool | None = True, add_legend: bool | None = None, add_colorbar: bool | None = None, add_labels: bool | Iterable[bool] = True, add_title: bool = True, subplot_kws: dict[str, Any] | None = None, xscale: ScaleOptions = None, yscale: ScaleOptions = None, xticks: ArrayLike | None = None, yticks: ArrayLike | None = None, xlim: tuple[float, float] | None = None, ylim: tuple[float, float] | None = None, cmap: str | Colormap | None = None, vmin: float | None = None, vmax: float | None = None, norm: Normalize | None = None, extend: ExtendOptions = None, levels: ArrayLike | None = None, **kwargs, ) -> Any: # All 1d plots in xarray share this function signature. # Method signature below should be consistent. if TYPE_CHECKING: import matplotlib.pyplot as plt else: plt = attempt_import("matplotlib.pyplot") if subplot_kws is None: subplot_kws = dict() # Handle facetgrids first if row or col: if z is not None: subplot_kws.update(projection="3d") allargs = locals().copy() allargs.update(allargs.pop("kwargs")) allargs.pop("darray") allargs.pop("plt") allargs["plotfunc"] = globals()[plotfunc.__name__] return _easy_facetgrid(darray, kind="plot1d", **allargs) if darray.ndim == 0 or darray.size == 0: # TypeError to be consistent with pandas raise TypeError("No numeric data to plot.") # The allargs dict passed to _easy_facetgrid above contains args if args == (): args = kwargs.pop("args", ()) if args: assert "args" not in kwargs # TODO: Deprecated since 2022.10: msg = "Using positional arguments is deprecated for plot methods, use keyword arguments instead." assert x is None x = args[0] if len(args) > 1: assert y is None y = args[1] if len(args) > 2: assert z is None z = args[2] if len(args) > 3: assert hue is None hue = args[3] if len(args) > 4: raise ValueError(msg) else: warnings.warn(msg, DeprecationWarning, stacklevel=2) del args if hue_style is not None: # TODO: Not used since 2022.10. Deprecated since 2023.07. warnings.warn( ( "hue_style is no longer used for plot1d plots " "and the argument will eventually be removed. " "Convert numbers to string for a discrete hue " "and use add_legend or add_colorbar to control which guide to display." ), DeprecationWarning, stacklevel=2, ) _is_facetgrid = kwargs.pop("_is_facetgrid", False) if plotfunc.__name__ == "scatter": size_ = kwargs.pop("_size", markersize) size_r = _MARKERSIZE_RANGE # Remove any nulls, .where(m, drop=True) doesn't work when m is # a dask array, so load the array to memory. # It will have to be loaded to memory at some point anyway: darray = darray.compute() darray = darray.where(darray.notnull(), drop=True) else: size_ = kwargs.pop("_size", linewidth) size_r = _LINEWIDTH_RANGE # Get data to plot: coords_to_plot: MutableMapping[str, Hashable | None] = dict( x=x, z=z, hue=hue, size=size_ ) if not _is_facetgrid: # Guess what coords to use if some of the values in coords_to_plot are None: coords_to_plot = _guess_coords_to_plot(darray, coords_to_plot, kwargs) plts = _prepare_plot1d_data(darray, coords_to_plot, plotfunc.__name__) xplt = plts.pop("x", None) yplt = plts.pop("y", None) zplt = plts.pop("z", None) kwargs.update(zplt=zplt) hueplt = plts.pop("hue", None) sizeplt = plts.pop("size", None) # Handle size and hue: hueplt_norm = _Normalize(data=hueplt) kwargs.update(hueplt=hueplt_norm.values) sizeplt_norm = _Normalize( data=sizeplt, width=size_r, _is_facetgrid=_is_facetgrid ) kwargs.update(sizeplt=sizeplt_norm.values) cmap_params_subset = kwargs.pop("cmap_params_subset", {}) cbar_kwargs = kwargs.pop("cbar_kwargs", {}) if hueplt_norm.data is not None: if not hueplt_norm.data_is_numeric: # Map hue values back to its original value: cbar_kwargs.update(format=hueplt_norm.format, ticks=hueplt_norm.ticks) levels = kwargs.get("levels", hueplt_norm.levels) cmap_params, cbar_kwargs = _process_cmap_cbar_kwargs( plotfunc, cast("DataArray", hueplt_norm.values).data, **locals(), ) # subset that can be passed to scatter, hist2d if not cmap_params_subset: ckw = {vv: cmap_params[vv] for vv in ("vmin", "vmax", "norm", "cmap")} cmap_params_subset.update(**ckw) with plt.rc_context(_styles): # type: ignore[arg-type, unused-ignore] if z is not None: import mpl_toolkits if ax is None: subplot_kws.update(projection="3d") ax = get_axis(figsize, size, aspect, ax, **subplot_kws) assert isinstance(ax, mpl_toolkits.mplot3d.axes3d.Axes3D) # Using 30, 30 minimizes rotation of the plot. Making it easier to # build on your intuition from 2D plots: ax.view_init(azim=30, elev=30, vertical_axis="y") else: ax = get_axis(figsize, size, aspect, ax, **subplot_kws) > primitive = plotfunc( xplt, yplt, ax=ax, add_labels=add_labels, **cmap_params_subset, **kwargs, ) /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/plot/dataarray_plot.py:1018: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ xplt = Size: 1kB array([ 1.76405235, 0.40015721, 0.97873798, 2.2408932 , 1.867...3 3 3 3 * hue (_stacked_dim) timedelta64[us] 1kB -1 days 0 days ... 2 days Attributes: units: Aunits yplt = Size: 1kB array([ 2.38314477, 0.94447949, -0.91282223, 1.11701629, -1.315...3 3 3 3 * hue (_stacked_dim) timedelta64[us] 1kB -1 days 0 days ... 2 days Attributes: units: Bunits ax = , add_labels = True kwargs = {'c': array([-86400000000, 0, 86400000000, 172800000000, -86400000000, 0, 86400000000, ...00000], dtype='timedelta64[us]'), 'cmap': 'RdBu_r', 'norm': None, 'vmax': np.timedelta64(172800000000,'us'), ...} zplt = None hueplt = Size: 1kB [144 values with dtype=timedelta64[us]] Coordinates: * _stack...kB 0 0 0 0 1 1 1 1 2 ... 2 2 2 2 3 3 3 3 * hue (_stacked_dim) timedelta64[us] 1kB -1 days 0 days ... 2 days sizeplt = None plts_or_none = ( Size: 1kB array([ 1.76405235, 0.40015721, 0.97873798, 2.2408932 , 1.86... * hue (_stacked_dim) timedelta64[us] 1kB -1 days 0 days ... 2 days Attributes: units: Bunits, None) xplt_np = array([ 1.76405235, 0.40015721, 0.97873798, 2.2408932 , 1.86755799, -0.97727788, 0.95008842, -0.15135721, ...643329, 0.57659082, -0.20829876, 0.39600671, -1.09306151, -1.49125759, 0.4393917 , 0.1666735 , 0.63503144]) yplt_np = array([ 2.38314477, 0.94447949, -0.91282223, 1.11701629, -1.31590741, -0.4615846 , -0.06824161, 1.71334272, ...449286, -0.11054066, 1.02017271, -0.69204985, 1.53637705, 0.28634369, 0.60884383, -1.04525337, 1.21114529]) zplt_np = None @_plot1d def scatter( xplt: DataArray | None, yplt: DataArray | None, ax: Axes, add_labels: bool | Iterable[bool] = True, **kwargs, ) -> PathCollection: """Scatter variables against each other. Wraps :py:func:`matplotlib:matplotlib.pyplot.scatter`. """ if "u" in kwargs or "v" in kwargs: raise ValueError("u, v are not allowed in scatter plots.") zplt: DataArray | None = kwargs.pop("zplt", None) hueplt: DataArray | None = kwargs.pop("hueplt", None) sizeplt: DataArray | None = kwargs.pop("sizeplt", None) if hueplt is not None: kwargs.update(c=hueplt.to_numpy().ravel()) if sizeplt is not None: kwargs.update(s=sizeplt.to_numpy().ravel()) plts_or_none = (xplt, yplt, zplt) _add_labels(add_labels, plts_or_none, ("", "", ""), ax) xplt_np = None if xplt is None else xplt.to_numpy().ravel() yplt_np = None if yplt is None else yplt.to_numpy().ravel() zplt_np = None if zplt is None else zplt.to_numpy().ravel() plts_np = tuple(p for p in (xplt_np, yplt_np, zplt_np) if p is not None) if len(plts_np) == 3: import mpl_toolkits assert isinstance(ax, mpl_toolkits.mplot3d.axes3d.Axes3D) return ax.scatter(xplt_np, yplt_np, zplt_np, **kwargs) if len(plts_np) == 2: > return ax.scatter(plts_np[0], plts_np[1], **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/plot/dataarray_plot.py:1280: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (, array([ 1.76405235, 0.40015721, 0.97873798, 2.2408932 , 1.86755...49286, -0.11054066, 1.02017271, -0.69204985, 1.53637705, 0.28634369, 0.60884383, -1.04525337, 1.21114529])) kwargs = {'c': array([-86400000000, 0, 86400000000, 172800000000, -86400000000, 0, 86400000000, ...00000], dtype='timedelta64[us]'), 'cmap': 'RdBu_r', 'norm': None, 'vmax': np.timedelta64(172800000000,'us'), ...} @functools.wraps(func) def wrapper(*args, **kwargs): # Don't use signature.bind here, as it would fail when stacked with # rename_parameter and an "old" argument name is passed in # (signature.bind would fail, but the actual call would succeed). if len(args) > name_idx: warn_deprecated( since, message="Passing the %(name)s %(obj_type)s " "positionally is deprecated since Matplotlib %(since)s; the " "parameter will become keyword-only in %(removal)s.", name=name, obj_type=f"parameter of {func.__name__}()") > return func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ /usr/lib64/python3.14/site-packages/matplotlib/_api/deprecation.py:453: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ax = , data = None args = (array([ 1.76405235, 0.40015721, 0.97873798, 2.2408932 , 1.86755799, -0.97727788, 0.95008842, -0.15135721,...49286, -0.11054066, 1.02017271, -0.69204985, 1.53637705, 0.28634369, 0.60884383, -1.04525337, 1.21114529])) kwargs = {'c': array([-86400000000, 0, 86400000000, 172800000000, -86400000000, 0, 86400000000, ...00000], dtype='timedelta64[us]'), 'cmap': 'RdBu_r', 'norm': None, 'vmax': np.timedelta64(172800000000,'us'), ...} @functools.wraps(func) def inner(ax, *args, data=None, **kwargs): if data is None: > return func( ax, *map(cbook.sanitize_sequence, args), **{k: cbook.sanitize_sequence(v) for k, v in kwargs.items()}) /usr/lib64/python3.14/site-packages/matplotlib/__init__.py:1526: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = x = masked_array(data=[ 1.76405235, 0.40015721, 0.97873798, 2.2408932 , 1.86755799, -0.97727788, 0... -1.49125759, 0.4393917 , 0.1666735 , 0.63503144], mask=False, fill_value=1e+20) y = masked_array(data=[ 2.38314477, 0.94447949, -0.91282223, 1.11701629, -1.31590741, -0.4615846 , -0... 0.28634369, 0.60884383, -1.04525337, 1.21114529], mask=False, fill_value=1e+20) s = masked_array(data=[36.], mask=False, fill_value=1e+20) c = masked_array(data=[-8.640e+10, 0.000e+00, 8.640e+10, 1.728e+11, -8.640e+10, 0.000e+00, 8.640e+..., -8.640e+10, 0.000e+00, 8.640e+10, 1.728e+11], mask=False, fill_value=1e+20) marker = 'o', cmap = 'RdBu_r', norm = None vmin = np.timedelta64(-172800000000,'us') vmax = np.timedelta64(172800000000,'us'), alpha = None, linewidths = None edgecolors = 'w', colorizer = None, plotnonfinite = False, kwargs = {} orig_edgecolor = None, colors = None scales = masked_array(data=[36.], mask=False, fill_value=1e+20) marker_obj = @_api.make_keyword_only("3.10", "marker") @_preprocess_data(replace_names=["x", "y", "s", "linewidths", "edgecolors", "c", "facecolor", "facecolors", "color"], label_namer="y") @_docstring.interpd def scatter(self, x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, *, edgecolors=None, colorizer=None, plotnonfinite=False, **kwargs): """ A scatter plot of *y* vs. *x* with varying marker size and/or color. Parameters ---------- x, y : float or array-like, shape (n, ) The data positions. s : float or array-like, shape (n, ), optional The marker size in points**2 (typographic points are 1/72 in.). Default is ``rcParams['lines.markersize'] ** 2``. The linewidth and edgecolor can visually interact with the marker size, and can lead to artifacts if the marker size is smaller than the linewidth. If the linewidth is greater than 0 and the edgecolor is anything but *'none'*, then the effective size of the marker will be increased by half the linewidth because the stroke will be centered on the edge of the shape. To eliminate the marker edge either set *linewidth=0* or *edgecolor='none'*. c : array-like or list of :mpltype:`color` or :mpltype:`color`, optional The marker colors. Possible values: - A scalar or sequence of n numbers to be mapped to colors using *cmap* and *norm*. - A 2D array in which the rows are RGB or RGBA. - A sequence of colors of length n. - A single color format string. Note that *c* should not be a single numeric RGB or RGBA sequence because that is indistinguishable from an array of values to be colormapped. If you want to specify the same RGB or RGBA value for all points, use a 2D array with a single row. Otherwise, value-matching will have precedence in case of a size matching with *x* and *y*. If you wish to specify a single color for all points prefer the *color* keyword argument. Defaults to `None`. In that case the marker color is determined by the value of *color*, *facecolor* or *facecolors*. In case those are not specified or `None`, the marker color is determined by the next color of the ``Axes``' current "shape and fill" color cycle. This cycle defaults to :rc:`axes.prop_cycle`. marker : `~.markers.MarkerStyle`, default: :rc:`scatter.marker` The marker style. *marker* can be either an instance of the class or the text shorthand for a particular marker. See :mod:`matplotlib.markers` for more information about marker styles. %(cmap_doc)s This parameter is ignored if *c* is RGB(A). %(norm_doc)s This parameter is ignored if *c* is RGB(A). %(vmin_vmax_doc)s This parameter is ignored if *c* is RGB(A). alpha : float, default: None The alpha blending value, between 0 (transparent) and 1 (opaque). linewidths : float or array-like, default: :rc:`lines.linewidth` The linewidth of the marker edges. Note: The default *edgecolors* is 'face'. You may want to change this as well. edgecolors : {'face', 'none', *None*} or :mpltype:`color` or list of \ :mpltype:`color`, default: :rc:`scatter.edgecolors` The edge color of the marker. Possible values: - 'face': The edge color will always be the same as the face color. - 'none': No patch boundary will be drawn. - A color or sequence of colors. For non-filled markers, *edgecolors* is ignored. Instead, the color is determined like with 'face', i.e. from *c*, *colors*, or *facecolors*. %(colorizer_doc)s This parameter is ignored if *c* is RGB(A). plotnonfinite : bool, default: False Whether to plot points with nonfinite *c* (i.e. ``inf``, ``-inf`` or ``nan``). If ``True`` the points are drawn with the *bad* colormap color (see `.Colormap.set_bad`). Returns ------- `~matplotlib.collections.PathCollection` Other Parameters ---------------- data : indexable object, optional DATA_PARAMETER_PLACEHOLDER **kwargs : `~matplotlib.collections.PathCollection` properties %(PathCollection:kwdoc)s See Also -------- plot : To plot scatter plots when markers are identical in size and color. Notes ----- * The `.plot` function will be faster for scatterplots where markers don't vary in size or color. * Any or all of *x*, *y*, *s*, and *c* may be masked arrays, in which case all masks will be combined and only unmasked points will be plotted. * Fundamentally, scatter works with 1D arrays; *x*, *y*, *s*, and *c* may be input as N-D arrays, but within scatter they will be flattened. The exception is *c*, which will be flattened only if its size matches the size of *x* and *y*. """ # add edgecolors and linewidths to kwargs so they # can be processed by normailze_kwargs if edgecolors is not None: kwargs.update({'edgecolors': edgecolors}) if linewidths is not None: kwargs.update({'linewidths': linewidths}) kwargs = cbook.normalize_kwargs(kwargs, mcoll.Collection) # re direct linewidth and edgecolor so it can be # further processed by the rest of the function linewidths = kwargs.pop('linewidth', None) edgecolors = kwargs.pop('edgecolor', None) # Process **kwargs to handle aliases, conflicts with explicit kwargs: x, y = self._process_unit_info([("x", x), ("y", y)], kwargs) # np.ma.ravel yields an ndarray, not a masked array, # unless its argument is a masked array. x = np.ma.ravel(x) y = np.ma.ravel(y) if x.size != y.size: raise ValueError("x and y must be the same size") if s is None: s = (20 if mpl.rcParams['_internal.classic_mode'] else mpl.rcParams['lines.markersize'] ** 2.0) s = np.ma.ravel(s) if (len(s) not in (1, x.size) or (not np.issubdtype(s.dtype, np.floating) and not np.issubdtype(s.dtype, np.integer))): raise ValueError( "s must be a scalar, " "or float array-like with the same size as x and y") # get the original edgecolor the user passed before we normalize orig_edgecolor = edgecolors if edgecolors is None: orig_edgecolor = kwargs.get('edgecolor', None) c, colors, edgecolors = \ self._parse_scatter_color_args( c, edgecolors, kwargs, x.size, get_next_color_func=self._get_patches_for_fill.get_next_color) if plotnonfinite and colors is None: c = np.ma.masked_invalid(c) x, y, s, edgecolors, linewidths = \ cbook._combine_masks(x, y, s, edgecolors, linewidths) else: x, y, s, c, colors, edgecolors, linewidths = \ cbook._combine_masks( x, y, s, c, colors, edgecolors, linewidths) # Unmask edgecolors if it was actually a single RGB or RGBA. if (x.size in (3, 4) and np.ma.is_masked(edgecolors) and not np.ma.is_masked(orig_edgecolor)): edgecolors = edgecolors.data scales = s # Renamed for readability below. # load default marker from rcParams if marker is None: marker = mpl.rcParams['scatter.marker'] if isinstance(marker, mmarkers.MarkerStyle): marker_obj = marker else: marker_obj = mmarkers.MarkerStyle(marker) path = marker_obj.get_path().transformed( marker_obj.get_transform()) if not marker_obj.is_filled(): if orig_edgecolor is not None: _api.warn_external( f"You passed a edgecolor/edgecolors ({orig_edgecolor!r}) " f"for an unfilled marker ({marker!r}). Matplotlib is " "ignoring the edgecolor in favor of the facecolor. This " "behavior may change in the future." ) # We need to handle markers that cannot be filled (like # '+' and 'x') differently than markers that can be # filled, but have their fillstyle set to 'none'. This is # to get: # # - respecting the fillestyle if set # - maintaining back-compatibility for querying the facecolor of # the un-fillable markers. # # While not an ideal situation, but is better than the # alternatives. if marker_obj.get_fillstyle() == 'none': # promote the facecolor to be the edgecolor edgecolors = colors # set the facecolor to 'none' (at the last chance) because # we cannot fill a path if the facecolor is non-null # (which is defendable at the renderer level). colors = 'none' else: # if we are not nulling the face color we can do this # simpler edgecolors = 'face' if linewidths is None: linewidths = mpl.rcParams['lines.linewidth'] elif np.iterable(linewidths): linewidths = [ lw if lw is not None else mpl.rcParams['lines.linewidth'] for lw in linewidths] offsets = np.ma.column_stack([x, y]) collection = mcoll.PathCollection( (path,), scales, facecolors=colors, edgecolors=edgecolors, linewidths=linewidths, offsets=offsets, offset_transform=kwargs.pop('transform', self.transData), alpha=alpha, ) collection.set_transform(mtransforms.IdentityTransform()) if colors is None: if colorizer: collection._set_colorizer_check_keywords(colorizer, cmap=cmap, norm=norm, vmin=vmin, vmax=vmax) else: collection.set_cmap(cmap) collection.set_norm(norm) collection.set_array(c) > collection._scale_norm(norm, vmin, vmax) /usr/lib64/python3.14/site-packages/matplotlib/axes/_axes.py:5044: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = norm = None, vmin = np.timedelta64(-172800000000,'us') vmax = np.timedelta64(172800000000,'us') def _scale_norm(self, norm, vmin, vmax): > self._colorizer._scale_norm(norm, vmin, vmax, self._A) /usr/lib64/python3.14/site-packages/matplotlib/colorizer.py:335: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , norm = None vmin = np.timedelta64(-172800000000,'us') vmax = np.timedelta64(172800000000,'us') A = masked_array(data=[-8.640e+10, 0.000e+00, 8.640e+10, 1.728e+11, -8.640e+10, 0.000e+00, 8.640e+..., -8.640e+10, 0.000e+00, 8.640e+10, 1.728e+11], mask=False, fill_value=1e+20) def _scale_norm(self, norm, vmin, vmax, A): """ Helper for initial scaling. Used by public functions that create a ScalarMappable and support parameters *vmin*, *vmax* and *norm*. This makes sure that a *norm* will take precedence over *vmin*, *vmax*. Note that this method does not set the norm. """ if vmin is not None or vmax is not None: > self.set_clim(vmin, vmax) /usr/lib64/python3.14/site-packages/matplotlib/colorizer.py:76: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = vmin = np.timedelta64(-172800000000,'us') vmax = np.timedelta64(172800000000,'us') def set_clim(self, vmin=None, vmax=None): """ Set the norm limits for image scaling. Parameters ---------- vmin, vmax : float The limits. The limits may also be passed as a tuple (*vmin*, *vmax*) as a single positional argument. .. ACCEPTS: (vmin: float, vmax: float) """ # If the norm's limits are updated self.changed() will be called # through the callbacks attached to the norm, this causes an inconsistent # state, to prevent this blocked context manager is used if vmax is None: try: vmin, vmax = vmin except (TypeError, ValueError): pass orig_vmin_vmax = self.norm.vmin, self.norm.vmax # Blocked context manager prevents callbacks from being triggered # until both vmin and vmax are updated with self.norm.callbacks.blocked(signal='changed'): if vmin is not None: > self.norm.vmin = colors._sanitize_extrema(vmin) ^^^^^^^^^^^^^^ /usr/lib64/python3.14/site-packages/matplotlib/colorizer.py:278: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = value = datetime.timedelta(days=-2) @vmin.setter def vmin(self, value): > value = _sanitize_extrema(value) ^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib64/python3.14/site-packages/matplotlib/colors.py:2181: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ex = datetime.timedelta(days=-2) def _sanitize_extrema(ex): if ex is None: return ex try: ret = ex.item() except AttributeError: > ret = float(ex) ^^^^^^^^^ E TypeError: float() argument must be a string or a real number, not 'datetime.timedelta' /usr/lib64/python3.14/site-packages/matplotlib/colors.py:213: TypeError =============================== warnings summary =============================== ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__init__.py:278 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__init__.py:278 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__init__.py:278 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__init__.py:278 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__init__.py:278: PytestUnknownMarkWarning: Unknown pytest.mark.flaky - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html flaky = pytest.mark.flaky ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__init__.py:279 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__init__.py:279 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__init__.py:279 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__init__.py:279 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/__init__.py:279: PytestUnknownMarkWarning: Unknown pytest.mark.network - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html network = pytest.mark.network ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:2611 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:2611 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:2611 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:2611 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:2611: PytestUnknownMarkWarning: Unknown pytest.mark.flaky - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.flaky ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:6328 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:6328 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:6328 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:6328 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:6328: PytestUnknownMarkWarning: Unknown pytest.mark.flaky - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.flaky ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_coarsen.py:159 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_coarsen.py:159 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_coarsen.py:159 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_coarsen.py:159 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_coarsen.py:159: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:85 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:85 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:85 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:85 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:85: PytestUnknownMarkWarning: Unknown pytest.mark.flaky - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.flaky ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:162 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:162 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:162 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:162 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:162: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:396 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:396 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:396 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:396 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:396: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:638 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:638 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:638 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:638 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:638: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:656 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:656 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:656 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:656 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:656: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:673 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:673 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:673 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:673 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:673: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:699 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:699 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:699 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:699 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:699: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:800 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:800 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:800 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:800 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:800: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:938 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:938 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:938 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:938 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:938: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:998 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:998 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:998 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:998 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:998: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1178 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1178 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1178 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1178 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1178: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1184 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1184 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1184 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1184 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1184: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1202 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1202 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1202 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1202 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1202: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1221 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1221 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1221 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1221 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1221: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1734 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1734 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1734 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1734 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1734: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1738 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1738 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1738 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1738 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1738: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1748 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1748 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1748 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1748 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1748: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1766 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1766 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1766 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1766 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1766: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1774 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1774 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1774 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1774 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1774: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1795 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1795 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1795 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1795 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1795: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1843 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1843 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1843 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1843 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1843: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1881 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1881 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1881 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1881 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1881: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1948 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1948 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1948 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1948 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1948: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1971 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1971 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1971 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1971 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1971: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1986 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1986 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1986 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1986 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1986: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1996 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1996 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1996 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1996 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1996: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2001 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2001 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2001 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2001 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2001: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2140 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2140 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2140 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2140 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2140: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2224 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2224 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2224 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2224 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2224: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2235 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2235 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2235 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2235 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2235: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2247 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2247 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2247 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2247 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2247: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2259 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2259 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2259 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2259 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2259: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2284 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2284 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2284 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2284 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2284: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2293 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2293 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2293 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2293 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2293: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2298 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2298 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2298 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2298 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2298: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2307 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2307 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2307 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2307 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2307: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2313 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2313 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2313 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2313 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2313: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2319 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2319 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2319 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2319 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2319: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2339 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2339 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2339 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2339 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2339: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2350 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2350 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2350 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2350 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2350: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2357 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2357 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2357 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2357 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2357: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2366 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2366 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2366 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2366 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2366: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2388 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2388 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2388 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2388 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2388: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2403 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2403 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2403 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2403 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2403: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2410 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2410 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2410 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2410 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2410: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2429 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2429 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2429 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2429 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2429: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2437 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2437 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2437 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2437 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2437: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2451 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2451 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2451 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2451 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2451: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2458 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2458 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2458 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2458 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2458: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2510 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2510 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2510 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2510 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2510: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_rolling.py:784 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_rolling.py:784 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_rolling.py:784 ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_rolling.py:784 /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_rolling.py:784: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.slow tests/test_backends.py::TestZarrDirectoryStore::test_roundtrip_mask_and_scale[2-dtype0-create_bad_unsigned_masked_scaled_data-create_bad_encoded_unsigned_masked_scaled_data] tests/test_backends.py::TestZarrWriteEmpty::test_roundtrip_mask_and_scale[2-dtype0-create_bad_unsigned_masked_scaled_data-create_bad_encoded_unsigned_masked_scaled_data] tests/test_backends.py::TestZarrDictStore::test_roundtrip_mask_and_scale[2-dtype0-create_bad_unsigned_masked_scaled_data-create_bad_encoded_unsigned_masked_scaled_data] /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/conventions.py:102: SerializationWarning: variable None will be stored as signed integers but _FillValue attribute can't be represented as a signed integer. var = coder.encode(var, name=name) tests/test_backends.py: 24 warnings tests/test_backends_datatree.py: 2 warnings tests/test_conventions.py: 2 warnings /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/conventions.py:102: SerializationWarning: variable 'x' will be stored as signed integers but _FillValue attribute can't be represented as a signed integer. var = coder.encode(var, name=name) tests/test_backends.py::TestZarrDictStore::test_chunk_key_encoding_v2[2] /usr/lib/python3.14/site-packages/zarr/creation.py:190: UserWarning: ignoring keyword argument 'chunk_key_encoding' compressor, fill_value = _kwargs_compat(compressor, fill_value, kwargs) tests/test_backends.py::TestNetCDF4ClassicViaH5NetCDFData::test_group_fails /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:4793: RuntimeWarning: deallocating , but file is not already closed. This may indicate a bug. with pytest.raises( tests/test_dataset.py::TestDataset::test_fillna_extension_array[category] tests/test_dataset.py::TestDataset::test_fillna_extension_array[category] tests/test_dataarray.py::TestDataArray::test_fillna_extension_array[categorical] tests/test_dataarray.py::TestDataArray::test_fillna_extension_array[categorical] tests/test_dataarray.py::TestDataArray::test_fillna_extension_array_bad_val tests/test_dataarray.py::TestDataArray::test_fillna_extension_array_bad_val /usr/lib64/python3.14/site-packages/pandas/core/dtypes/common.py:1885: DeprecationWarning: Data type alias 'a' was deprecated in NumPy 2.0. Use the 'S' alias instead. npdtype = np.dtype(dtype) tests/test_duck_array_ops.py: 16 warnings /usr/lib/python3.14/site-packages/dask/array/core.py:5276: RuntimeWarning: overflow encountered in scalar add result = function(*args, **kwargs) tests/test_combine.py::TestNestedCombine::test_nested_concat_too_many_dims_at_once /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_combine.py:452: FutureWarning: In a future version of xarray the default value for join will change from join='outer' to join='exact'. This change will result in the following ValueError: cannot be aligned with join='exact' because index/labels/sizes are not equal along these coordinates (dimensions): 'y' ('y',) The recommendation is to set join explicitly for this case. combine_nested(objs, concat_dim="x", coords="minimal") tests/test_dask.py: 12 warnings /usr/lib64/python3.14/site-packages/numpy/_core/numeric.py:475: RuntimeWarning: invalid value encountered in cast multiarray.copyto(res, fill_value, casting='unsafe') tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_interp[pint] /builddir/build/BUILD/python-xarray-2025.12.0-build/BUILDROOT/usr/lib/python3.14/site-packages/xarray/core/variable.py:336: UnitStrippedWarning: The unit of the quantity is stripped when downcasting to ndarray. data = np.asarray(data) tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_astype[pint] /usr/lib/python3.14/site-packages/pint/facets/numpy/quantity.py:88: RuntimeWarning: invalid value encountered in cast value = func(*args, **kwargs) -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html =================================== XPASSES ==================================== =========================== short test summary info ============================ SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_array_api.py:9: could not import 'array_api_strict': No module named 'array_api_strict' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_cupy.py:9: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_distributed.py:18: could not import 'distributed': No module named 'distributed' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_sparse.py:22: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_strategies.py:8: could not import 'hypothesis': No module named 'hypothesis' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3039: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3090: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3121: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3129: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3148: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3152: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3155: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3158: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3167: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3177: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3188: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3198: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3205: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3214: requires zarr>=3.0.0 SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3226: requires zarr>=3.0.0 SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3239: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3255: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3290: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3309: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3336: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3356: requires zarr>=3.0.0 SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3393: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3403: requires zarr>=3.0.0 SKIPPED [36] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3416: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3458: requires zarr>=3.0.0 SKIPPED [3] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3466: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3479: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3523: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3599: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3620: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3631: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3640: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3653: requires zarr>=3.0.0 SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3667: requires zarr>=3.0.0 SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3683: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3699: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3711: requires zarr>=3.0.0 SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3749: requires zarr>=3.0.0 SKIPPED [19] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:788: requires netcdf SKIPPED [25] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:1130: uint8 data can't be written to non-NetCDF4 data SKIPPED [15] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:1123: float32 will be treated as float64 in zarr SKIPPED [18] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:1336: requires netcdf SKIPPED [3] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:1449: No unlimited_dims handled in zarr. SKIPPED [4] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:2689: zarr-python <3 did not support async loading SKIPPED [6] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:1644: NetCDF backends don't support async loading SKIPPED [4] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:2993: requires netcdf SKIPPED [3] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:169: Unsupported with zarr_format=2: No dimension names in V2 SKIPPED [6] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:169: Unsupported with zarr_format=2: This doesn't work with Zarr format 2 SKIPPED [3] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:4918: only valid for h5netcdf < 1.4.0 SKIPPED [6] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:4928: only valid for h5netcdf < 1.4.0 SKIPPED [18] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_cftime_offsets.py:1576: only relevant for pandas lt 2.2 SKIPPED [6] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_cftime_offsets.py:1601: only relevant for pandas lt 2.2 SKIPPED [12] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_cftime_offsets.py:1614: only relevant for pandas lt 2.2 SKIPPED [6] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_cftime_offsets.py:1630: only relevant for pandas lt 2.2 SKIPPED [3] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_cftime_offsets.py:1644: only for pandas lt 2.2 SKIPPED [11] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_cftime_offsets.py:1659: only for pandas lt 2.2 SKIPPED [3] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:2434: https://github.com/Unidata/netcdf4-python/issues/1195 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:5271: caching behavior differs for dask SKIPPED [64] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:5393: Flaky test which can cause the worker to crash (so don't xfail). Very open to contributions fixing this SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:2589: caching behavior differs for dask SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3873: zarr-python 2.x or ZARR_V3_EXPERIMENTAL_API is unset. SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3953: zarr-python 2.x or ZARR_V3_EXPERIMENTAL_API is unset. SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:4565: could not import 'aiobotocore': No module named 'aiobotocore' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:5870: could not import 'aiobotocore': No module named 'aiobotocore' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:4613: NetCDF backends don't support async loading SKIPPED [8] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_coarsen.py:249: These parameters lead to all-NaN slices SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:6466: requires pydap.client SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:6501: requires pydap.client SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:6509: requires pydap.client SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:4645: NetCDF backends don't support async loading SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:4650: cannot pickle file objects SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:4654: cannot pickle file objects SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:7541: netcdf-c>4.8.1 adds the _ARRAY_DIMENSIONS attribute SKIPPED [5] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:424: NetCDF backends don't support async loading SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:4093: requires zarr>=3.0.0 SKIPPED [3] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:4122: requires zarr>=3.0.0 SKIPPED [30] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:4160: requires zarr>=3.0.0 SKIPPED [3] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:4260: zarr-python v2 cannot understand the zarr v3 format SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:497: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:505: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:533: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:539: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:610: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:629: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:637: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:658: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:663: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:699: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:704: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:716: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:724: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:758: requires zarr>=3.0.0 SKIPPED [4] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:773: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:783: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:798: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:814: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:831: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:838: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:853: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:867: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:931: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:970: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:980: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:988: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:1016: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:1031: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:1049: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:1070: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:1081: requires zarr>=3.0.0 SKIPPED [10] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:1097: requires zarr>=3.0.0 SKIPPED [4] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:1173: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:1289: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:1297: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:1312: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:1348: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:1383: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:1407: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:1422: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:1447: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:1488: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:1505: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:1528: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:1534: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:1542: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:1548: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:1555: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:1570: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:1592: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:1605: requires zarr>=3.0.0 SKIPPED [5] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:1621: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:2697: requires zarr>=3.0.0 SKIPPED [3] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:2700: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:2711: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:2725: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:2735: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:2750: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:2768: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:2812: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:2818: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:2847: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:2866: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:2874: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:2890: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:2908: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3000: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends.py:3029: requires zarr>=3.0.0 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends_datatree.py:686: zarr-python v2 cannot understand the zarr v3 format SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends_datatree.py:694: zarr-python v2 cannot understand the zarr v3 format SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends_datatree.py:726: zarr-python v2 cannot understand the zarr v3 format SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends_datatree.py:739: zarr-python v2 cannot understand the zarr v3 format SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends_datatree.py:755: zarr-python v2 cannot understand the zarr v3 format SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends_datatree.py:771: zarr-python v2 cannot understand the zarr v3 format SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends_datatree.py:859: zarr-python v2 cannot understand the zarr v3 format SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends_datatree.py:870: zarr-python v2 cannot understand the zarr v3 format SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends_datatree.py:895: zarr-python v2 cannot understand the zarr v3 format SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends_datatree.py:910: zarr-python v2 cannot understand the zarr v3 format SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends_datatree.py:925: zarr-python v2 cannot understand the zarr v3 format SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends_datatree.py:941: zarr-python v2 cannot understand the zarr v3 format SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends_datatree.py:968: zarr-python v2 cannot understand the zarr v3 format SKIPPED [3] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends_datatree.py:996: zarr-python v2 cannot understand the zarr v3 format SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends_datatree.py:1020: zarr-python v2 cannot understand the zarr v3 format SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends_datatree.py:1048: zarr-python v2 cannot understand the zarr v3 format SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends_datatree.py:1066: zarr-python v2 cannot understand the zarr v3 format SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends_datatree.py:1090: zarr-python v2 cannot understand the zarr v3 format SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_backends_datatree.py:1114: zarr-python v2 cannot understand the zarr v3 format SKIPPED [13] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_coding_times.py:1094: Nanosecond frequency is not valid for cftime dates. SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_dataset.py:4180: requires sparse SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_dataset.py:5332: requires sparse SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_dataarray.py:3759: requires sparse SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_dataarray.py:3772: requires sparse SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_conventions.py:601: cannot roundtrip coordinates yet for CFEncodedInMemoryStore SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_dataset.py:8141: requires sparse SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_dataset.py:8156: requires cupy SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_dataarray.py:6989: requires iris SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_dataarray.py:7059: requires iris SKIPPED [4] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_dataarray.py:7141: requires iris SKIPPED [4] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_dataarray.py:7173: requires iris SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_dataarray.py:7210: requires iris SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_dataarray.py:7228: requires iris SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_dataarray.py:7480: requires sparse SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_dataarray.py:7496: requires cupy SKIPPED [3] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_dtypes.py:132: requires array_api_strict SKIPPED [16] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_ops.py:592: dask does not compute object-typed array SKIPPED [16] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_ops.py:586: numpy does not support this SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_coding_times.py:1177: datetime64[ns] values can only be defined post reform SKIPPED [60] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_ops.py:681: numpy's argmin (not nanargmin) does not handle object-dtype SKIPPED [36] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_ops.py:683: numpy's nanargmin raises ValueError for all nan axis SKIPPED [80] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_ops.py:674: dim not in this test SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:215: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:219: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:219: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:219: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:223: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:223: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:223: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:229: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:229: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:229: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:233: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:233: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:233: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:237: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:237: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:237: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:241: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:241: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:241: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:245: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:245: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:245: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:249: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:249: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:249: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:254: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:254: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:254: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:259: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:259: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:259: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:264: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:264: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:264: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:268: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:268: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:268: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:273: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:273: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:273: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:277: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:277: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:277: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:281: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:281: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:281: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:286: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:286: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:286: could not import 'sparse': No module named 'sparse' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:290: could not import 'cupy': No module named 'cupy' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:290: could not import 'jax.numpy': No module named 'jax' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:290: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:295: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:295: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:295: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:300: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:300: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:300: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:305: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:305: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:305: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:309: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:309: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:309: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:313: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:313: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:516: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:313: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:317: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:317: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:317: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:321: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:321: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:321: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:325: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:325: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:516: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:325: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:330: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:330: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:330: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:334: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:334: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:334: could not import 'sparse': No module named 'sparse' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:338: could not import 'cupy': No module named 'cupy' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:338: could not import 'jax.numpy': No module named 'jax' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:338: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:343: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:343: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:343: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:349: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:349: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:349: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:353: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:353: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:353: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:359: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:359: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:359: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:363: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:363: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:363: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:367: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:367: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_groupby.py:331: requires flox SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:367: could not import 'sparse': No module named 'sparse' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:371: could not import 'cupy': No module named 'cupy' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:371: could not import 'jax.numpy': No module named 'jax' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:371: could not import 'sparse': No module named 'sparse' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:376: could not import 'cupy': No module named 'cupy' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:376: could not import 'jax.numpy': No module named 'jax' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:376: could not import 'sparse': No module named 'sparse' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:381: could not import 'cupy': No module named 'cupy' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:381: could not import 'jax.numpy': No module named 'jax' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:381: could not import 'sparse': No module named 'sparse' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_groupby.py:1266: requires flox SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:386: could not import 'cupy': No module named 'cupy' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:386: could not import 'jax.numpy': No module named 'jax' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:386: could not import 'sparse': No module named 'sparse' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:391: could not import 'cupy': No module named 'cupy' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:391: could not import 'jax.numpy': No module named 'jax' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:391: could not import 'sparse': No module named 'sparse' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:396: could not import 'cupy': No module named 'cupy' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:396: could not import 'jax.numpy': No module named 'jax' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:396: could not import 'sparse': No module named 'sparse' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:401: could not import 'cupy': No module named 'cupy' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:401: could not import 'jax.numpy': No module named 'jax' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:401: could not import 'sparse': No module named 'sparse' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:406: could not import 'cupy': No module named 'cupy' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:406: could not import 'jax.numpy': No module named 'jax' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:406: could not import 'sparse': No module named 'sparse' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:411: could not import 'cupy': No module named 'cupy' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:411: could not import 'jax.numpy': No module named 'jax' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:411: could not import 'sparse': No module named 'sparse' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:416: could not import 'cupy': No module named 'cupy' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:416: could not import 'jax.numpy': No module named 'jax' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:416: could not import 'sparse': No module named 'sparse' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:421: could not import 'cupy': No module named 'cupy' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:421: could not import 'jax.numpy': No module named 'jax' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:421: could not import 'sparse': No module named 'sparse' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:426: could not import 'cupy': No module named 'cupy' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:426: could not import 'jax.numpy': No module named 'jax' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:426: could not import 'sparse': No module named 'sparse' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:431: could not import 'cupy': No module named 'cupy' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:431: could not import 'jax.numpy': No module named 'jax' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:431: could not import 'sparse': No module named 'sparse' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:436: could not import 'cupy': No module named 'cupy' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:436: could not import 'jax.numpy': No module named 'jax' SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:436: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:441: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:441: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:441: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:445: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:445: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:445: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:449: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:449: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:449: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:453: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:453: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:453: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:457: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:457: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:457: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:461: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:461: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:461: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:465: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:465: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:465: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:470: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:470: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:470: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:474: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:474: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:474: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:478: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:478: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:478: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:482: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:482: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:482: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:488: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:488: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:488: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:492: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:492: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:492: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:496: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:496: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:496: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:500: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:500: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:500: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:504: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:504: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:504: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:508: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:508: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:508: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:512: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:512: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:512: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:516: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_missing.py:458: requires numbagg SKIPPED [8] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_groupby.py:2659: requires flox SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_groupby.py:2682: Skipped SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_groupby.py:2721: requires flox SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_ops.py:964: out-of-bounds datetime64 overflow SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_namedarray.py:388: could not import 'array_api_strict': No module named 'array_api_strict' SKIPPED [8] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_groupby.py:3024: requires flox>=0.9.12 SKIPPED [3] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_groupby.py:3053: requires flox>=0.9.12 SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_pandas_to_xarray.py:131: Test doesn't make sense for empty index SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:146: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:146: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:146: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:151: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:151: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:151: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:156: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:156: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:156: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:161: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:161: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:161: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:165: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:165: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:165: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:169: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:169: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:169: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:174: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:174: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:174: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:178: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:178: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:178: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:182: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:182: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:182: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:186: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:186: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:186: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:191: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:191: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:191: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:195: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:195: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:195: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:207: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:207: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:207: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:211: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:211: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:211: could not import 'sparse': No module named 'sparse' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:215: could not import 'cupy': No module named 'cupy' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_duck_array_wrapping.py:215: could not import 'jax.numpy': No module named 'jax' SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:3053: nc_time_axis is not installed SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:3056: nc_time_axis is not installed SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:3059: nc_time_axis is not installed SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:1329: Skipped SKIPPED [4] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:3285: requires cartopy SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2152: does not make sense for surface plots SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2156: does not make sense for surface plots SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2163: does not make sense for surface plots SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2167: does not make sense for surface plots SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2171: does not make sense for surface plots SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_plot.py:2175: does not make sense for surface plots SKIPPED [32] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_rolling.py:797: std with window == 1 is unstable in bottleneck SKIPPED [32] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_rolling.py:453: requires numbagg SKIPPED [8] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_rolling.py:467: requires numbagg SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_rolling.py:489: requires numbagg SKIPPED [24] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_interp.py:912: Too slow. SKIPPED [72] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_weighted.py:298: `method` argument is not currently exposed SKIPPED [2] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_rolling.py:893: requires numbagg SKIPPED [1] ../BUILDROOT/usr/lib/python3.14/site-packages/xarray/tests/test_rolling.py:900: requires numbagg XFAIL tests/test_backends.py::TestZarrDirectoryStore::test_roundtrip_mask_and_scale[2-dtype0-create_bad_unsigned_masked_scaled_data-create_bad_encoded_unsigned_masked_scaled_data] - Bad _Unsigned attribute. XFAIL tests/test_backends.py::TestH5NetCDFFileObject::test_roundtrip_mask_and_scale[dtype0-create_bad_unsigned_masked_scaled_data-create_bad_encoded_unsigned_masked_scaled_data] - Bad _Unsigned attribute. XFAIL tests/test_backends.py::TestH5NetCDFFileObject::test_roundtrip_mask_and_scale[dtype1-create_bad_unsigned_masked_scaled_data-create_bad_encoded_unsigned_masked_scaled_data] - Bad _Unsigned attribute. XFAIL tests/test_backends.py::TestZarrDirectoryStore::test_roundtrip_bytes_with_fill_value[2] - Broken by Zarr 3.0.7 XFAIL tests/test_backends.py::TestNetCDF4Data::test_roundtrip_mask_and_scale[dtype0-create_bad_unsigned_masked_scaled_data-create_bad_encoded_unsigned_masked_scaled_data] - Bad _Unsigned attribute. XFAIL tests/test_backends.py::TestNetCDF4Data::test_roundtrip_mask_and_scale[dtype1-create_bad_unsigned_masked_scaled_data-create_bad_encoded_unsigned_masked_scaled_data] - Bad _Unsigned attribute. XFAIL tests/test_backends.py::TestZarrWriteEmpty::test_roundtrip_mask_and_scale[2-dtype0-create_bad_unsigned_masked_scaled_data-create_bad_encoded_unsigned_masked_scaled_data] - Bad _Unsigned attribute. XFAIL tests/test_backends.py::TestH5NetCDFViaDaskData::test_roundtrip_mask_and_scale[dtype0-create_bad_unsigned_masked_scaled_data-create_bad_encoded_unsigned_masked_scaled_data] - Bad _Unsigned attribute. XFAIL tests/test_backends.py::TestZarrWriteEmpty::test_roundtrip_bytes_with_fill_value[2] - Broken by Zarr 3.0.7 XFAIL tests/test_backends.py::TestH5NetCDFViaDaskData::test_roundtrip_mask_and_scale[dtype1-create_bad_unsigned_masked_scaled_data-create_bad_encoded_unsigned_masked_scaled_data] - Bad _Unsigned attribute. XFAIL tests/test_backends.py::TestNetCDF4ViaDaskData::test_roundtrip_mask_and_scale[dtype0-create_bad_unsigned_masked_scaled_data-create_bad_encoded_unsigned_masked_scaled_data] - Bad _Unsigned attribute. XFAIL tests/test_backends.py::TestNetCDF4ViaDaskData::test_roundtrip_mask_and_scale[dtype1-create_bad_unsigned_masked_scaled_data-create_bad_encoded_unsigned_masked_scaled_data] - Bad _Unsigned attribute. XFAIL tests/test_backends.py::TestZarrDictStore::test_roundtrip_mask_and_scale[2-dtype0-create_bad_unsigned_masked_scaled_data-create_bad_encoded_unsigned_masked_scaled_data] - Bad _Unsigned attribute. XFAIL tests/test_backends.py::TestScipyInMemoryData::test_roundtrip_mask_and_scale[dtype0-create_bad_unsigned_masked_scaled_data-create_bad_encoded_unsigned_masked_scaled_data] - Bad _Unsigned attribute. XFAIL tests/test_backends.py::TestZarrDictStore::test_roundtrip_bytes_with_fill_value[2] - Broken by Zarr 3.0.7 XFAIL tests/test_backends.py::TestScipyInMemoryData::test_roundtrip_mask_and_scale[dtype1-create_bad_unsigned_masked_scaled_data-create_bad_encoded_unsigned_masked_scaled_data] - Bad _Unsigned attribute. XFAIL tests/test_backends.py::TestScipyFileObject::test_roundtrip_mask_and_scale[dtype0-create_bad_unsigned_masked_scaled_data-create_bad_encoded_unsigned_masked_scaled_data] - Bad _Unsigned attribute. XFAIL tests/test_backends.py::TestEncodingInvalid::test_extract_h5nc_encoding XFAIL tests/test_backends.py::TestScipyFileObject::test_roundtrip_mask_and_scale[dtype1-create_bad_unsigned_masked_scaled_data-create_bad_encoded_unsigned_masked_scaled_data] - Bad _Unsigned attribute. XFAIL tests/test_backends.py::TestScipyFilePath::test_roundtrip_mask_and_scale[dtype0-create_bad_unsigned_masked_scaled_data-create_bad_encoded_unsigned_masked_scaled_data] - Bad _Unsigned attribute. XFAIL tests/test_backends.py::TestScipyFilePath::test_roundtrip_mask_and_scale[dtype1-create_bad_unsigned_masked_scaled_data-create_bad_encoded_unsigned_masked_scaled_data] - Bad _Unsigned attribute. XFAIL tests/test_backends.py::TestNetCDF3ViaNetCDF4Data::test_roundtrip_mask_and_scale[dtype0-create_bad_unsigned_masked_scaled_data-create_bad_encoded_unsigned_masked_scaled_data] - Bad _Unsigned attribute. XFAIL tests/test_backends_datatree.py::TestNetCDF4DataTree::test_roundtrip_mask_and_scale[dtype0-create_bad_unsigned_masked_scaled_data-create_bad_encoded_unsigned_masked_scaled_data] - Bad _Unsigned attribute. XFAIL tests/test_backends.py::TestNetCDF3ViaNetCDF4Data::test_roundtrip_mask_and_scale[dtype1-create_bad_unsigned_masked_scaled_data-create_bad_encoded_unsigned_masked_scaled_data] - Bad _Unsigned attribute. XFAIL tests/test_backends_datatree.py::TestNetCDF4DataTree::test_roundtrip_mask_and_scale[dtype1-create_bad_unsigned_masked_scaled_data-create_bad_encoded_unsigned_masked_scaled_data] - Bad _Unsigned attribute. XFAIL tests/test_backends.py::TestNetCDF4ClassicViaNetCDF4Data::test_roundtrip_mask_and_scale[dtype0-create_bad_unsigned_masked_scaled_data-create_bad_encoded_unsigned_masked_scaled_data] - Bad _Unsigned attribute. XFAIL tests/test_backends.py::TestNetCDF4ClassicViaNetCDF4Data::test_roundtrip_mask_and_scale[dtype1-create_bad_unsigned_masked_scaled_data-create_bad_encoded_unsigned_masked_scaled_data] - Bad _Unsigned attribute. XFAIL tests/test_cftimeindex.py::test_multiindex - fails on pandas main branch XFAIL tests/test_backends.py::TestNetCDF4ClassicViaH5NetCDFData::test_roundtrip_mask_and_scale[dtype0-create_bad_unsigned_masked_scaled_data-create_bad_encoded_unsigned_masked_scaled_data] - Bad _Unsigned attribute. XFAIL tests/test_backends.py::TestNetCDF4ClassicViaH5NetCDFData::test_roundtrip_mask_and_scale[dtype1-create_bad_unsigned_masked_scaled_data-create_bad_encoded_unsigned_masked_scaled_data] - Bad _Unsigned attribute. XFAIL tests/test_dataset.py::TestDataset::test_copy_coords[False-expected_orig1] XFAIL tests/test_backends.py::TestGenericNetCDFData::test_roundtrip_mask_and_scale[dtype0-create_bad_unsigned_masked_scaled_data-create_bad_encoded_unsigned_masked_scaled_data] - Bad _Unsigned attribute. XFAIL tests/test_backends.py::TestGenericNetCDFData::test_roundtrip_mask_and_scale[dtype1-create_bad_unsigned_masked_scaled_data-create_bad_encoded_unsigned_masked_scaled_data] - Bad _Unsigned attribute. XFAIL tests/test_dataarray.py::TestDataArray::test_copy_coords[False-expected_orig1] XFAIL tests/test_conventions.py::TestCFEncodedDataStore::test_roundtrip_mask_and_scale[dtype0-create_bad_unsigned_masked_scaled_data-create_bad_encoded_unsigned_masked_scaled_data] - Bad _Unsigned attribute. XFAIL tests/test_conventions.py::TestCFEncodedDataStore::test_roundtrip_mask_and_scale[dtype1-create_bad_unsigned_masked_scaled_data-create_bad_encoded_unsigned_masked_scaled_data] - Bad _Unsigned attribute. XFAIL tests/test_backends.py::TestH5NetCDFData::test_roundtrip_mask_and_scale[dtype0-create_bad_unsigned_masked_scaled_data-create_bad_encoded_unsigned_masked_scaled_data] - Bad _Unsigned attribute. XFAIL tests/test_dataarray.py::TestReduce1D::test_idxmax[True-datetime] - dask operation 'argmax' breaks when dtype is datetime64 (M) XFAIL tests/test_datatree.py::TestGetItem::test_getitem_multiple_data_variables - Should be deprecated in favour of .subset XFAIL tests/test_backends.py::TestH5NetCDFData::test_roundtrip_mask_and_scale[dtype1-create_bad_unsigned_masked_scaled_data-create_bad_encoded_unsigned_masked_scaled_data] - Bad _Unsigned attribute. XFAIL tests/test_datatree.py::TestGetItem::test_getitem_dict_like_selection_access_to_dataset - Indexing needs to return whole tree (GH https://github.com/xarray-contrib/datatree/issues/77) XFAIL tests/test_datatree.py::TestCopy::test_copy_with_data - data argument not yet implemented XFAIL tests/test_dataarray.py::TestReduce2D::test_idxmin[dask-datetime] - dask operation 'argmin' breaks when dtype is datetime64 (M) XFAIL tests/test_datatree.py::TestSetItem::test_setitem_dataset_on_this_node - assigning Datasets doesn't yet create new nodes XFAIL tests/test_dataarray.py::TestReduce2D::test_idxmax[dask-datetime] - dask operation 'argmax' breaks when dtype is datetime64 (M) XFAIL tests/test_datatree.py::TestUFuncs::test_tree - __array_ufunc__ not implemented yet XFAIL tests/test_dask.py::TestToDaskDataFrame::test_to_dask_dataframe_2D - Currently pandas with pyarrow installed will return a `string[pyarrow]` type, which causes the `y` column to have a different type depending on whether pyarrow is installed XFAIL tests/test_datatree_mapping.py::TestMapOverSubTree::test_trees_with_different_node_names XFAIL tests/test_dask.py::TestToDaskDataFrame::test_to_dask_dataframe_2D_set_index XFAIL tests/test_dask.py::TestToDaskDataFrame::test_to_dask_dataframe_not_daskarray - Currently pandas with pyarrow installed will return a `string[pyarrow]` type, which causes the index to have a different type depending on whether pyarrow is installed XFAIL tests/test_coding_times.py::test_timedelta_coding_via_dtype_non_pandas_fine_resolution_warning - xarray does not recognize picoseconds as time-like XFAIL tests/test_combine.py::TestNestedCombine::test_nested_concat_too_many_dims_at_once XFAIL tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_interp[pint] - interp uses numpy and scipy XFAIL tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_isnull[pint] - xfail for pint: returns a bool XFAIL tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_notnull[pint] - xfail for pint: returns a bool XFAIL tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_count[pint] - xfail for pint: returns an int XFAIL tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_ffill[dask.array] - ffill uses bottleneck or numbagg XFAIL tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_ffill[pint] - ffill uses bottleneck or numbagg XFAIL tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_bfill[dask.array] - bfill uses bottleneck or numbagg XFAIL tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_bfill[pint] - bfill uses bottleneck or numbagg XFAIL tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_interpolate_na[dask.array] - interpolate_na uses numpy and scipy XFAIL tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_interpolate_na[pint] - interpolate_na uses numpy and scipy XFAIL tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_isin[pint] - xfail for pint: returns a bool XFAIL tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_rolling_reduce[True-pint] - xfail for pint: no dispatch for numbagg/bottleneck XFAIL tests/test_computation.py::test_cross[a5-b5-ae5-be5-cartesian--1-True] XFAIL tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_rolling_reduce[False-pint] - xfail for pint: no dispatch for numbagg/bottleneck XFAIL tests/test_computation.py::test_cross[a6-b6-ae6-be6-cartesian--1-True] XFAIL tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_rolling_exp_reduce[dask.array] - rolling_exp uses numbagg XFAIL tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_rolling_exp_reduce[pint] - rolling_exp uses numbagg XFAIL tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_cumulative_reduce[pint] - xfail for pint: no dispatch for numbagg/bottleneck XFAIL tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_weighted[pint] - xfail for pint: no tensordot XFAIL tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_dot[pint] - xfail for pint: no tensordot XFAIL tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_polyfit[pint] - polyfit uses numpy linalg XFAIL tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_all[pint] - xfail for pint: returns a bool XFAIL tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_any[pint] - xfail for pint: returns a bool XFAIL tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_argmax[True-pint] - xfail for pint: returns an int XFAIL tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_argmax[False-pint] - xfail for pint: returns an int XFAIL tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_argmin[True-pint] - xfail for pint: returns an int XFAIL tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_argmin[False-pint] - xfail for pint: returns an int XFAIL tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_idxmax[True-pint] - xfail for pint: returns the coordinate XFAIL tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_idxmax[False-pint] - xfail for pint: returns the coordinate XFAIL tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_idxmin[True-pint] - xfail for pint: returns the coordinate XFAIL tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_idxmin[False-pint] - xfail for pint: returns the coordinate XFAIL tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_argsort[dask.array] - xfail for dask.array: no argsort XFAIL tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_argsort[pint] - xfail for pint: returns an int XFAIL tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_conjugate[dask.array] - xfail for dask.array: conj but no conjugate XFAIL tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_searchsorted[dask.array] - xfail for dask.array: dask.array.searchsorted but no Array.searchsorted XFAIL tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_searchsorted[pint] - xfail for pint: returns an int XFAIL tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_rank[dask.array] - rank uses bottleneck XFAIL tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_rank[pint] - rank uses bottleneck XFAIL tests/test_missing.py::test_interpolate_na_2d[None] XFAIL tests/test_namedarray.py::TestNamedArray::test_init[expected1] - NamedArray only supports array-like objects XFAIL tests/test_interp.py::test_datetime[2000-01-01T12:00-0.5] XFAIL tests/test_duck_array_wrapping.py::TestTopLevelMethods::test_full_like[pint] - xfail for pint: should work, see: https://github.com/hgrecco/pint/pull/1669 XFAIL tests/test_duck_array_wrapping.py::TestTopLevelMethods::test_dot[pint] - xfail for pint: no tensordot XFAIL tests/test_plot.py::TestSurface::test_dates_are_concise - Failing inside matplotlib. Should probably be fixed upstream because other plot functions can handle it. Remove this test when it works, already in Common2dMixin XFAIL tests/test_ufuncs.py::TestXarrayUfuncs::test_ufunc_duck_dask_no_array_ufunc - dask ufuncs currently dispatch to numpy XPASS tests/test_backends.py::test_use_cftime_false_standard_calendar_in_range[gregorian] - https://github.com/pandas-dev/pandas/issues/56996 XPASS tests/test_backends.py::test_use_cftime_false_standard_calendar_in_range[proleptic_gregorian] - https://github.com/pandas-dev/pandas/issues/56996 XPASS tests/test_backends.py::test_use_cftime_false_standard_calendar_in_range[standard] - https://github.com/pandas-dev/pandas/issues/56996 XPASS tests/test_coding_times.py::test_cf_datetime_nan[num_dates0-days since 2000-01-01-expected_list0] - expected failure on ARM XPASS tests/test_coding_times.py::test_cf_datetime_nan[num_dates1-days since 2000-01-01-expected_list1] - expected failure on ARM XPASS tests/test_coding_times.py::test_cf_datetime_nan[num_dates2-days since 2000-01-01-expected_list2] - expected failure on ARM XPASS tests/test_backends_datatree.py::TestZarrDatatreeIO::test_to_zarr_zip_store[zarr_format=2] - upstream zarr read-only changes have broken this test XPASS tests/test_dataset.py::TestDataset::test_copy_coords[True-expected_orig0] XPASS tests/test_dataarray.py::TestDataArray::test_copy_coords[True-expected_orig0] XPASS tests/test_backends.py::TestGenericNetCDFData::test_roundtrip_via_file_object - scipy.io.netcdf_file closes files upon garbage collection XPASS tests/test_dask.py::TestToDaskDataFrame::test_to_dask_dataframe - https://github.com/dask/dask/issues/11584 XPASS tests/test_duck_array_ops.py::test_datetime_mean[s-False] - expected failure on ARM XPASS tests/test_duck_array_ops.py::test_datetime_mean[s-True] - expected failure on ARM XPASS tests/test_duck_array_ops.py::test_datetime_mean[ms-False] - expected failure on ARM XPASS tests/test_duck_array_ops.py::test_datetime_mean[ms-True] - expected failure on ARM XPASS tests/test_duck_array_ops.py::test_datetime_mean[us-False] - expected failure on ARM XPASS tests/test_duck_array_ops.py::test_datetime_mean[us-True] - expected failure on ARM XPASS tests/test_duck_array_ops.py::test_datetime_mean[ns-False] - expected failure on ARM XPASS tests/test_duck_array_ops.py::test_datetime_mean[ns-True] - expected failure on ARM XPASS tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_interp[dask.array] - interp uses numpy and scipy XPASS tests/test_computation.py::test_cross[a5-b5-ae5-be5-cartesian--1-False] XPASS tests/test_computation.py::test_cross[a6-b6-ae6-be6-cartesian--1-False] XPASS tests/test_duck_array_wrapping.py::TestDataArrayMethods::test_polyfit[dask.array] - polyfit uses numpy linalg XPASS tests/test_plot.py::TestImshow::test_dates_are_concise - Failing inside matplotlib. Should probably be fixed upstream because other plot functions can handle it. Remove this test when it works, already in Common2dMixin ERROR tests/test_units.py - _pytest.nodes.Collector.CollectError: ImportError... ERROR tests/test_units.py - _pytest.nodes.Collector.CollectError: ImportError... ERROR tests/test_units.py - _pytest.nodes.Collector.CollectError: ImportError... ERROR tests/test_units.py - _pytest.nodes.Collector.CollectError: ImportError... ERROR tests/test_variable.py - _pytest.nodes.Collector.CollectError: ImportEr... ERROR tests/test_variable.py - _pytest.nodes.Collector.CollectError: ImportEr... ERROR tests/test_variable.py - _pytest.nodes.Collector.CollectError: ImportEr... ERROR tests/test_variable.py - _pytest.nodes.Collector.CollectError: ImportEr... FAILED tests/test_coding_times.py::test_cf_timedelta[1D-days-numbers0] - Asse... FAILED tests/test_coding_times.py::test_cf_timedelta[timedeltas1-days-numbers1] FAILED tests/test_coding_times.py::test_cf_timedelta[1h-hours-numbers2] - Ass... FAILED tests/test_cftimeindex.py::test_distant_cftime_datetime_sub_cftimeindex[365_day] FAILED tests/test_coding_times.py::test_cf_timedelta[1ms-milliseconds-numbers3] FAILED tests/test_cftimeindex.py::test_distant_cftime_datetime_sub_cftimeindex[360_day] FAILED tests/test_coding_times.py::test_cf_timedelta[1us-microseconds-numbers4] FAILED tests/test_cftimeindex.py::test_distant_cftime_datetime_sub_cftimeindex[julian] FAILED tests/test_coding_times.py::test_cf_timedelta[timedeltas7-hours-numbers7] FAILED tests/test_coding_times.py::test_cf_timedelta[timedeltas9-days-numbers9] FAILED tests/test_cftimeindex.py::test_distant_cftime_datetime_sub_cftimeindex[all_leap] FAILED tests/test_cftimeindex.py::test_distant_cftime_datetime_sub_cftimeindex[366_day] FAILED tests/test_coding_times.py::test_cf_timedelta_2d - AssertionError: ass... FAILED tests/test_cftimeindex.py::test_distant_cftime_datetime_sub_cftimeindex[gregorian] FAILED tests/test_cftimeindex.py::test_distant_cftime_datetime_sub_cftimeindex[proleptic_gregorian] FAILED tests/test_dataarray.py::TestDataArray::test_curvefit_helpers - Failed... FAILED tests/test_groupby.py::test_groupby_bins_datetime_mean - AssertionErro... FAILED tests/test_groupby.py::test_groupby_bins_mean_time_series - AssertionE... FAILED tests/test_interp.py::test_datetime[x_new2-expected2] - AssertionError... FAILED tests/test_interp.py::test_datetime[x_new3-expected3] - AssertionError... FAILED tests/test_interp.py::test_datetime[x_new4-0.5] - AssertionError: Left... FAILED tests/test_interp.py::test_datetime_single_string - AssertionError: Le... FAILED tests/test_plot.py::TestDatasetScatterPlots::test_datetime_hue - TypeE... = 23 failed, 17720 passed, 1254 skipped, 97 xfailed, 24 xpassed, 294 warnings, 8 errors in 147.56s (0:02:27) = error: Bad exit status from /var/tmp/rpm-tmp.jE8hhU (%check) Bad exit status from /var/tmp/rpm-tmp.jE8hhU (%check) RPM build errors: Finish: rpmbuild python-xarray-2025.12.0-2.fc44.src.rpm Finish: build phase for python-xarray-2025.12.0-2.fc44.src.rpm INFO: chroot_scan: 1 files copied to /var/lib/copr-rpmbuild/results/chroot_scan INFO: /var/lib/mock/fedora-rawhide-aarch64-1770293716.605228/root/var/log/dnf5.log INFO: chroot_scan: creating tarball /var/lib/copr-rpmbuild/results/chroot_scan.tar.gz /bin/tar: Removing leading `/' from member names ERROR: Exception(/var/lib/copr-rpmbuild/results/python-xarray-2025.12.0-2.fc44.src.rpm) Config(fedora-rawhide-aarch64) 3 minutes 5 seconds INFO: Results and/or logs in: /var/lib/copr-rpmbuild/results INFO: Cleaning up build root ('cleanup_on_failure=True') Start: clean chroot INFO: unmounting tmpfs. Finish: clean chroot ERROR: Command failed: # /usr/bin/systemd-nspawn -q -M 87361c683f5d4e99aa14ac55d6463eda -D /var/lib/mock/fedora-rawhide-aarch64-1770293716.605228/root -a -u mockbuild --capability=cap_ipc_lock --capability=cap_ipc_lock --bind=/tmp/mock-resolv.2g8pckn2:/etc/resolv.conf --bind=/dev/btrfs-control --bind=/dev/mapper/control --bind=/dev/fuse --bind=/dev/loop-control --bind=/dev/loop0 --bind=/dev/loop1 --bind=/dev/loop2 --bind=/dev/loop3 --bind=/dev/loop4 --bind=/dev/loop5 --bind=/dev/loop6 --bind=/dev/loop7 --bind=/dev/loop8 --bind=/dev/loop9 --bind=/dev/loop10 --bind=/dev/loop11 --console=pipe --setenv=TERM=vt100 --setenv=SHELL=/bin/bash --setenv=HOME=/builddir --setenv=HOSTNAME=mock --setenv=PATH=/usr/bin:/bin:/usr/sbin:/sbin '--setenv=PROMPT_COMMAND=printf "\033]0;\007"' '--setenv=PS1= \s-\v\$ ' --setenv=LANG=C.UTF-8 --resolv-conf=off bash --login -c '/usr/bin/rpmbuild -ba --noprep --target aarch64 /builddir/build/originals/python-xarray.spec' Copr build error: Build failed